diff --git a/SunnexGB/Heroku-Modules/ASCII.py b/SunnexGB/Heroku-Modules/ASCII.py
new file mode 100644
index 0000000..7dc49ab
--- /dev/null
+++ b/SunnexGB/Heroku-Modules/ASCII.py
@@ -0,0 +1,97 @@
+# requires: Pillow numpy
+# meta developer: @SunnexGB
+# meta banner: https://i.pinimg.com/control1/1200x/24/8d/40/248d40b6afa5bd3c3764556b50635691.jpg
+__version__ = (1, 0, 0)
+
+import io
+import logging
+from herokutl.types import Message
+from .. import loader, utils
+
+logger = logging.getLogger(__name__)
+
+@loader.tds
+class ASCII(loader.Module):
+ """Convert images to braille ASCII"""
+
+ strings = {
+ "name": "ASCII",
+ "no_lib": "
{art}",
+ "Failed_to_load_library": "Failed to load library",
+ "Conversion_error": "Conversion error",
+ }
+
+ strings_ru = {
+ "_cls_doc": "Конвертирует картинку в braille ASCII",
+ "no_lib": "{art}",
+ "Failed_to_load_library": "Не удалось загрузить библиотеку",
+ "Conversion_error": "Ошибка конвертации",
+ }
+
+ def __init__(self):
+ self.config = loader.ModuleConfig(
+ loader.ConfigValue("width", 50),
+ loader.ConfigValue("threshold", 0.65),
+ loader.ConfigValue("contrast", 2.0),
+ loader.ConfigValue("chars", 464),
+ loader.ConfigValue("invert", False),
+ )
+ self.lib = None
+
+ async def client_ready(self):
+ try:
+ self.lib = await self.import_lib("https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/refs/heads/main/Assets/ASCII/ascii-lib.py", suspend_on_error=True)
+ except Exception:
+ logger.exception(self.strings["Failed_to_load_library"])
+ self.lib = None
+
+ @loader.command(ru_doc="- Отрисовать ASCII-ART (аргумент -f, отправляет файлом)")
+ async def dotcmd(self, message: Message):
+ """- Draw ASCII-ART (argument -f, sends as a file)"""
+ if not self.lib:
+ return await utils.answer(message, self.strings["no_lib"])
+ args = utils.get_args_raw(message)
+ force_file = "-f" in args.lower()
+ reply = await message.get_reply_message() or message
+ if not reply or not (
+ reply.photo
+ or (
+ reply.document
+ and str(getattr(reply.document, "mime_type", "")).startswith("image/")
+ )
+ ):
+ return await utils.answer(message, self.strings["no_image"])
+ msg = await utils.answer(message, self.strings["processing"])
+
+ try:
+ image_bytes = await reply.download_media(bytes)
+ art = self.lib.convert(
+ image_bytes,
+ width=self.config["width"],
+ threshold=self.config["threshold"],
+ contrast_boost=self.config["contrast"],
+ invert=self.config["invert"],
+ target_chars=self.config["chars"],
+ )
+
+ except Exception as e:
+ logger.exception(self.strings["Conversion_error"])
+ return await utils.answer(msg, f"{e}")
+ if not art or not art.strip():
+ return await utils.answer(msg, self.strings["empty"])
+ formatted_art = self.strings("result").format(art=art)
+ if force_file or len(formatted_art) > 4096:
+ file = io.BytesIO(art.encode("utf-8"))
+ file.name = "ascii.txt"
+ await message.client.send_file(message.peer_id, file)
+ await msg.delete()
+ else:
+ await utils.answer(msg, formatted_art)
\ No newline at end of file
diff --git a/SunnexGB/Heroku-Modules/Assets/ASCII/ascii-lib.py b/SunnexGB/Heroku-Modules/Assets/ASCII/ascii-lib.py
new file mode 100644
index 0000000..457093b
--- /dev/null
+++ b/SunnexGB/Heroku-Modules/Assets/ASCII/ascii-lib.py
@@ -0,0 +1,110 @@
+# requires: Pillow numpy
+# Дикие оправдания по поводу именно этого ассета а точнее кода в нем,честно я не знаю что сказать была попытка переписать JS на Py и как бы особых проблем не было,
+# до момента пост-обработки на помощь я позвал Claude и он не решил мою проблему от слова совсем,так как в целом я своего рода призираю пилоу,а модуль мне хотелось
+# написать я примерно вайб-кодил около 50 минут и я уверен из за этого будет возможно много проблем,в итоге благодаря немного копанию в коде,я нашел проблему и уже
+# начал ее решать,НО я опять же вообще не понимал как сделать то что мне нужно,в интернете были сюрсы но будто бы тот или иной мне не подходили? Я не знаю почему я
+# дропнул эту идею. Потом я стал искать в JS-е что там вообще можно сделать,в итоге я там импортировал модель какую то блядскую не нужную и опять впустую время
+# потратил,думал что тут определено есть решение и снова пошел к ии,вывод опятьь 0 помощи,я не знаю почему я так вцепился лишь в 1 идею.Как бы я мог упростить все,
+# даже наверное просто попросив какую то флагмен ии написать модуль и переписать его,но я уже на тот момент по моему мнению сделал много и не хотел ни каким образом
+# оставлять это,поэтому через время я нашел сайты которые в целом давали возможность настраивать фильтр,была переделана логика(в целом ее переделал на 60 процентов
+# клод,я просто убирал мусор который он испражнял.И вот дальше точно бред я убил более дня на решение проблем которые были решены мной,но результат мне не нравился
+# И ОПЯТЬ я пошел просить помощи у гугла,потом понял что возможно даже будет легко(по факту легко,но я ленивый) пока искал,мне перехотелось и я уже потом пытался
+# сделать режимы в модуле,что оказалось ужасом ведь они работали,но при возможности гармонично вписать их в код были конфликты И Я В ОЧЕРЕДНОЙ РАЗ ПОШЕЛ К ИИ,спойлер
+# он не смог написать лучше чем я,в итоге я отбросил эту идею и думаю в целом никак больше не апдейтать модуль по крупному.
+# Да это были оправдания,но зато какие!
+import io
+import numpy as np
+from PIL import Image, ImageFilter, ImageEnhance, ImageOps
+from .. import loader
+
+BASE = 0x2800
+INVERT_MAP = {chr(BASE + c): chr(BASE + (c ^ 0xFF)) for c in range(256)}
+
+
+class AsciiLib(loader.Library):
+ developer = "@SunnexGB"
+
+ def resize(self, img):
+ if img.width > 768:
+ img = img.resize((768, int(img.height * 768 / img.width)), Image.LANCZOS)
+ w = img.width - img.width % 4
+ h = img.height - img.height % 4
+ if w != img.width or h != img.height:
+ img = img.resize((w, h), Image.LANCZOS)
+ return img
+
+ def mode(self, img, threshold, contrast):
+ gray = img.convert("L")
+ edges = ImageOps.invert(gray.filter(ImageFilter.FIND_EDGES))
+ contrast_img = ImageEnhance.Contrast(img).enhance(contrast).convert("L")
+ e = np.array(edges, dtype=np.float32) / 255.0
+ c = np.array(contrast_img, dtype=np.float32) / 255.0
+ blended = Image.fromarray((e * c * 255).astype(np.uint8), "L")
+ t = int(threshold * 255)
+ processed = blended.point(lambda p: 255 if p > t else 0, "L")
+ return processed, t
+
+ def braille(self, img, threshold, width):
+ cw = width * 2
+ o = -(-round(cw * img.height / img.width) // 4)
+ ch = 4 * o
+ px = np.array(img.resize((cw, ch), Image.LANCZOS).convert("L"))
+ order = [(0,0),(1,0),(2,0),(0,1),(1,1),(2,1),(3,0),(3,1)]
+ rows = []
+ for rs in range(0, ch, 4):
+ line = []
+ for cs in range(0, cw, 2):
+ grays = [
+ int(px[rs+dy, cs+dx]) if (rs+dy < ch and cs+dx < cw) else 255
+ for dy, dx in order
+ ]
+ bits = list(reversed([1 if g < threshold else 0 for g in grays]))
+ code = int("".join(str(b) for b in bits), 2)
+ line.append(chr(BASE + code))
+ rows.append("".join(line))
+ return rows
+
+ def trim(self, lines):
+ blank = "\u2800"
+ while lines and all(c == blank for c in lines[0]):
+ lines = lines[1:]
+ while lines and all(c == blank for c in lines[-1]):
+ lines = lines[:-1]
+ if not lines:
+ return lines
+ left = min(next((i for i,c in enumerate(r) if c!=blank), len(r)) for r in lines)
+ right = min(next((i for i,c in enumerate(reversed(r)) if c!=blank), len(r)) for r in lines)
+ return [r[left: len(r)-right if right else len(r)] for r in lines]
+
+ def invert(self, lines):
+ return ["".join(INVERT_MAP.get(c,c) for c in l) for l in lines]
+
+ def fit(self, img, threshold, chars, width):
+ lo, hi = 5, 200
+ best = ""
+ for _ in range(14):
+ mid = (lo + hi)//2
+ lines = self.trim(self.braille(img, threshold, mid))
+ art = "\n".join(lines)
+ if len(art) <= chars:
+ best = art
+ lo = mid + 1
+ else:
+ hi = mid - 1
+ return best
+
+ def convert(self, data, width=50, threshold=0.65, contrast_boost=2.0, invert=False, target_chars=0):
+ buf = io.BytesIO(data)
+ img = Image.open(buf)
+ img.load()
+ buf.close()
+ img = img.convert("RGB")
+ img = self.resize(img)
+ processed, t = self.mode(img, threshold, contrast_boost)
+ if target_chars > 0:
+ art = self.fit(processed, t, target_chars, width)
+ else:
+ art = "\n".join(self.trim(self.braille(processed, t, width)))
+ if invert and art:
+ art = "\n".join(self.invert(art.split("\n")))
+ return art
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/ddialogs/prologue_only.json b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/ddialogs/prologue_only.json
new file mode 100644
index 0000000..6dda73a
--- /dev/null
+++ b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/ddialogs/prologue_only.json
@@ -0,0 +1,832 @@
+{
+ "prologue": [
+ {
+ "type": "label",
+ "name": "prologue"
+ },
+ {
+ "type": "scene",
+ "kind": "anim",
+ "name": "prolog_1",
+ "action": "load_asset",
+ "location": "anim/prolog_1",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/anim/prolog_1.jpg?raw=true"
+ },
+ {
+ "type": "narration",
+ "text": "Мне опять снился сон."
+ },
+ {
+ "type": "narration",
+ "text": "Этот сон..."
+ },
+ {
+ "type": "narration",
+ "text": "Каждую ночь одно и то же."
+ },
+ {
+ "type": "narration",
+ "text": "Но наутро, как обычно, всё забудется."
+ },
+ {
+ "type": "narration",
+ "text": "Может быть, оно и к лучшему..."
+ },
+ {
+ "type": "narration",
+ "text": "Останутся только туманные воспоминания о приоткрытых, словно приглашающих куда-то воротах, рядом с которыми в камне застыли два пионера."
+ },
+ {
+ "type": "narration",
+ "text": "А ещё странная девочка...{w} которая постоянно спрашивает:"
+ },
+ {
+ "type": "scene",
+ "kind": "bg",
+ "name": "anim_prolog1_off",
+ "action": "load_asset",
+ "location": "anim/anim_prolog1_off",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/anim/anim_prolog1_off.gif?raw=true"
+ },
+ {
+ "type": "dialogue",
+ "char_id": "dreamgirl",
+ "character": "...",
+ "text": "Ты пойдёшь со мной?"
+ },
+ {
+ "type": "narration",
+ "text": "Пойду?.."
+ },
+ {
+ "type": "narration",
+ "text": "Но куда?"
+ },
+ {
+ "type": "narration",
+ "text": "И зачем?.."
+ },
+ {
+ "type": "narration",
+ "text": "Да и где я вообще нахожусь?"
+ },
+ {
+ "type": "narration",
+ "text": "Конечно, случись всё на самом деле, наяву, стоило бы непременно испугаться."
+ },
+ {
+ "type": "narration",
+ "text": "Как же иначе!"
+ },
+ {
+ "type": "narration",
+ "text": "Но это – всего лишь сон.{w} Тот самый, который я вижу каждую ночь."
+ },
+ {
+ "type": "narration",
+ "text": "А ведь всё это неспроста!"
+ },
+ {
+ "type": "narration",
+ "text": "Необязательно знать где и почему, чтобы понять – что-то происходит."
+ },
+ {
+ "type": "narration",
+ "text": "Нечто, отчаянно требующее моего внимания."
+ },
+ {
+ "type": "narration",
+ "text": "Ведь всё окружающее меня здесь – реально!"
+ },
+ {
+ "type": "narration",
+ "text": "Реально настолько, насколько реальны вещи в моей квартире; я бы мог открыть ворота, услышать скрип петель, смахнуть рукой осыпающуюся ржавчину, потянуть носом свежий прохладный воздух и поёжиться от холода."
+ },
+ {
+ "type": "narration",
+ "text": "Мог бы, но для этого надо сдвинуться с места, сделать шаг, пошевелить рукой..."
+ },
+ {
+ "type": "narration",
+ "text": "А ведь это сон – я понимаю, но что дальше, что изменит моё понимание?"
+ },
+ {
+ "type": "narration",
+ "text": "Ведь здесь – словно по ту сторону потрескавшегося экрана старого телевизора, который из последних сил борется с помехами и силится показать зрителям всё, не упустив ни малейшей детали."
+ },
+ {
+ "type": "narration",
+ "text": "Но вот картинка теряет чёткость...{w} Наверное, скоро просыпаться."
+ },
+ {
+ "type": "narration",
+ "text": "..."
+ },
+ {
+ "type": "narration",
+ "text": "Может быть, спросить у неё что-то?{w} У девочки."
+ },
+ {
+ "type": "narration",
+ "text": "Как же её зовут..."
+ },
+ {
+ "type": "narration",
+ "text": "Например про звёзды..."
+ },
+ {
+ "type": "narration",
+ "text": "Хотя почему про звёзды?"
+ },
+ {
+ "type": "narration",
+ "text": "Можно же спросить про ворота!{w} Да, про ворота!"
+ },
+ {
+ "type": "narration",
+ "text": "Вот она удивится."
+ },
+ {
+ "type": "narration",
+ "text": "Или лучше про букву ё."
+ },
+ {
+ "type": "narration",
+ "text": "Хорошая была буква..."
+ },
+ {
+ "type": "narration",
+ "text": "Как будто её больше нет!"
+ },
+ {
+ "type": "narration",
+ "text": "И какое отношение буквы, ворота и звёзды имеют к этому месту?"
+ },
+ {
+ "type": "narration",
+ "text": "Ведь если мне каждую ночь снится этот сон, который потом всё равно забудется, надо искать разгадку здесь и сейчас!"
+ },
+ {
+ "type": "narration",
+ "text": "А вот, если присмотреться, можно увидеть Магелланово Облако..."
+ },
+ {
+ "type": "narration",
+ "text": "Словно попал в южное полушарие!"
+ },
+ {
+ "type": "narration",
+ "text": "..."
+ },
+ {
+ "type": "narration",
+ "text": "Во сне всегда больше волнуют мелочи: неестественный цвет травы, невозможная кривизна прямых или своё перекошенное отражение – а реальная опасность, готовая оборвать всё здесь и сейчас, кажется пустяком."
+ },
+ {
+ "type": "narration",
+ "text": "Естественно, ведь здесь нельзя умереть."
+ },
+ {
+ "type": "narration",
+ "text": "Я точно знаю – я делал это сотни раз."
+ },
+ {
+ "type": "narration",
+ "text": "Но если нельзя умереть, нет смысла жить?"
+ },
+ {
+ "type": "narration",
+ "text": "Надо будет спросить у девочки: она местная – должна знать!"
+ },
+ {
+ "type": "narration",
+ "text": "Да, именно!{w} Спросить, например, про сову."
+ },
+ {
+ "type": "narration",
+ "text": "Больно уж птица странная..."
+ },
+ {
+ "type": "narration",
+ "text": "А впрочем, неважно..."
+ },
+ {
+ "type": "narration",
+ "text": "..."
+ },
+ {
+ "type": "dialogue",
+ "char_id": "dreamgirl",
+ "character": "...",
+ "text": "Ты пойдёшь со мной?"
+ },
+ {
+ "type": "narration",
+ "text": "И каждый раз надо отвечать."
+ },
+ {
+ "type": "narration",
+ "text": "Иначе никак, иначе сон не закончится, а я – не проснусь."
+ },
+ {
+ "type": "route",
+ "id": "prologue_choice_1"
+ },
+ {
+ "type": "narration",
+ "text": "Каждый раз так сложно решить, что же ответить."
+ },
+ {
+ "type": "narration",
+ "text": "Где я, что я здесь делаю, кто она такая?"
+ },
+ {
+ "type": "narration",
+ "text": "И почему от ответа на этот вопрос зависит так много в моей жизни?"
+ },
+ {
+ "type": "narration",
+ "text": "Или не зависит?.."
+ },
+ {
+ "type": "narration",
+ "text": "Ведь это просто сон..."
+ },
+ {
+ "type": "narration",
+ "text": "Просто сон..."
+ },
+ {
+ "type": "scene",
+ "kind": "bg",
+ "name": "black",
+ "action": "load_asset",
+ "location": "bg/black",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/bg/black.png?raw=true",
+ "duration": null
+ },
+ {
+ "type": "scene",
+ "kind": "anim",
+ "name": "1_prologue",
+ "action": "load_asset",
+ "location": "cg/p_kb_1",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/cg/p_kb_1.png?raw=true",
+ "duration": null
+ },
+ {
+ "type": "scene",
+ "kind": "anim",
+ "name": "2_prologue",
+ "action": "load_asset",
+ "location": "cg/p_kb_2",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/cg/p_kb_2.png?raw=true",
+ "duration": null
+ },
+ {
+ "type": "scene",
+ "kind": "anim",
+ "name": "3_prologue",
+ "action": "load_asset",
+ "location": "cg/p_kb_3",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/cg/p_kb_3.png?raw=true",
+ "duration": null
+ },
+ {
+ "type": "scene",
+ "kind": "anim",
+ "name": "4_prologue",
+ "action": "load_asset",
+ "location": "cg/p_kb_4",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/cg/p_kb_4.png?raw=true",
+ "duration": null
+ },
+ {
+ "type": "scene",
+ "kind": "anim",
+ "name": "5_prologue",
+ "action": "load_asset",
+ "location": "cg/p_kb_5",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/cg/p_kb_5.png?raw=true"
+ },
+ {
+ "type": "narration",
+ "text": "Экран монитора смотрел на меня словно живой."
+ },
+ {
+ "type": "narration",
+ "text": "Иногда мне правда казалось, что он обладает сознанием, своими мыслями и желаниями, стремлениями; умеет чувствовать, любить и страдать."
+ },
+ {
+ "type": "narration",
+ "text": "Словно в наших отношениях инструмент не он – неодушевлённый кусок пластика и текстолита, – а я."
+ },
+ {
+ "type": "narration",
+ "text": "Наверное, в этом есть доля правды, ведь компьютер на 90% обеспечивает моё общение с внешним миром."
+ },
+ {
+ "type": "narration",
+ "text": "Анонимные имиджборды, иногда какие-то чаты, редко – аська или джаббер, ещё реже – форумы."
+ },
+ {
+ "type": "narration",
+ "text": "А людей, сидящих по ту сторону сетевого кабеля, попросту не существует!"
+ },
+ {
+ "type": "narration",
+ "text": "Все они – всего лишь плод его больной фантазии, ошибка в программном коде или баг ядра, зажившего собственной жизнью."
+ },
+ {
+ "type": "scene",
+ "kind": "anim",
+ "name": "prolog_15",
+ "action": "load_asset",
+ "location": "anim/prolog_15",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/anim/prolog_15.png?raw=true",
+ "duration": null
+ },
+ {
+ "type": "scene",
+ "kind": "anim",
+ "name": "prolog_3",
+ "action": "load_asset",
+ "location": "anim/prolog_3",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/anim/prolog_3.png?raw=true",
+ "duration": null
+ },
+ {
+ "type": "scene",
+ "kind": "anim",
+ "name": "prolog_4",
+ "action": "load_asset",
+ "location": "anim/prolog_4",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/anim/prolog_4.png?raw=true"
+ },
+ {
+ "type": "narration",
+ "text": "Если посмотреть со стороны на моё существование, то такие мысли покажутся не столь уж бредовыми, а какой-нибудь психолог наверняка поставит мне кучу заумных диагнозов и, возможно, выпишет направление в жёлтый дом."
+ },
+ {
+ "type": "scene",
+ "kind": "anim",
+ "name": "prolog_5",
+ "action": "load_asset",
+ "location": "anim/prolog_5",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/anim/prolog_5.jpg?raw=true",
+ "duration": null
+ },
+ {
+ "type": "scene",
+ "kind": "anim",
+ "name": "prolog_14",
+ "action": "load_asset",
+ "location": "anim/prolog_14",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/anim/prolog_14.jpg?raw=true",
+ "duration": null
+ },
+ {
+ "type": "scene",
+ "kind": "anim",
+ "name": "prolog_11",
+ "action": "load_asset",
+ "location": "anim/prolog_11",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/anim/prolog_11.jpg?raw=true"
+ },
+ {
+ "type": "narration",
+ "text": "Маленькая квартирка без следов какого бы то ни было ремонта или даже подобия порядка, и вечно одинаковый вид из окна на серый, день и ночь куда-то бегущий мегаполис, – вот условия моей жизни."
+ },
+ {
+ "type": "scene",
+ "kind": "anim",
+ "name": "prolog_2",
+ "action": "load_asset",
+ "location": "anim/prolog_2",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/anim/prolog_2.jpg?raw=true"
+ },
+ {
+ "type": "narration",
+ "text": "Конечно, всё начиналось не так..."
+ },
+ {
+ "type": "narration",
+ "text": "Я родился, пошёл в школу, закончил её – всё как у людей."
+ },
+ {
+ "type": "narration",
+ "text": "Поступил в институт, где кое-как промучился полтора курса."
+ },
+ {
+ "type": "narration",
+ "text": "Работал на паре-тройке разных работ.{w} Иногда даже и неплохо, иногда даже получая за это достойные деньги."
+ },
+ {
+ "type": "narration",
+ "text": "Однако всё это казалось чужим, словно списанным с биографии другого человека."
+ },
+ {
+ "type": "narration",
+ "text": "Я не ощущал полноту жизни – она словно зациклилась и продолжала идти по кругу.{w} Как в фильме «День сурка»."
+ },
+ {
+ "type": "narration",
+ "text": "Только у меня не было выбора, как именно провести этот день, и каждый раз всё повторялось по одной и той же схеме.{w} Схеме пустоты, уныния и отчаяния."
+ },
+ {
+ "type": "narration",
+ "text": "Последние несколько лет я просто целыми днями сидел за компьютером."
+ },
+ {
+ "type": "narration",
+ "text": "Иногда подворачивались какие-то халтурки, иногда помогали родители."
+ },
+ {
+ "type": "narration",
+ "text": "В общем, на жизнь хватало."
+ },
+ {
+ "type": "narration",
+ "text": "Это и немудрено, ведь потребности у меня небольшие."
+ },
+ {
+ "type": "narration",
+ "text": "На улицу я практически не выхожу, а всё моё общение с людьми сводится к интернет-переписке с анонимами, у которых нет ни реального имени, ни пола, ни возраста."
+ },
+ {
+ "type": "narration",
+ "text": "Короче говоря, достаточно типичная жизнь достаточно типичного асоциального человека своего времени.{w} Этакий Обломов XXI века."
+ },
+ {
+ "type": "narration",
+ "text": "Может быть, маститый писатель напишет обо мне роман, который станет классикой современной литературы.{w} Или напишу я сам…"
+ },
+ {
+ "type": "narration",
+ "text": "Впрочем нет, что себя обманывать – уже не раз пытался, но меня не хватало даже на короткий рассказ."
+ },
+ {
+ "type": "narration",
+ "text": "Изучал я и множество других вещей."
+ },
+ {
+ "type": "narration",
+ "text": "Рисовать – не дано от природы.{w} Программирование – надоело.{w} Иностранные языки – долго и скучно…"
+ },
+ {
+ "type": "narration",
+ "text": "Любил я разве что читать, но даже при этом никогда бы не назвал себя эрудированным человеком."
+ },
+ {
+ "type": "narration",
+ "text": "Возможно, я был асом в просмотре аниме и гроссмейстером неумелых шуточек в интернете."
+ },
+ {
+ "type": "narration",
+ "text": "Плати мне за это деньги, я бы обрадовался (да и заработал неплохо), но вряд ли так просто можно заполнить пустоту в душе."
+ },
+ {
+ "type": "scene",
+ "kind": "bg",
+ "name": "semen_room_window",
+ "action": "load_asset",
+ "location": "bg/semen_room_window",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/bg/semen_room_window.jpg?raw=true"
+ },
+ {
+ "type": "narration",
+ "text": "Сегодня очередной типичный день моей типичной жизни типичного неудачника."
+ },
+ {
+ "type": "narration",
+ "text": "И именно сегодня мне нужно ехать на встречу институтских товарищей."
+ },
+ {
+ "type": "narration",
+ "text": "По правде говоря, совершенно не хотелось."
+ },
+ {
+ "type": "narration",
+ "text": "Да и какой смысл, если вместе с ними я отучился всего ничего?"
+ },
+ {
+ "type": "narration",
+ "text": "Однако меня всё же уговорил друг, бывший одногруппник, один из немногих, с кем я поддерживал контакт не только в интернете."
+ },
+ {
+ "type": "scene",
+ "kind": "anim",
+ "name": "intro_1",
+ "action": "load_asset",
+ "location": "anim/intro_1",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/anim/intro_1.jpg?raw=true",
+ "duration": null
+ },
+ {
+ "type": "scene",
+ "kind": "anim",
+ "name": "intro_2",
+ "action": "load_asset",
+ "location": "anim/intro_2",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/anim/intro_2.jpg?raw=true",
+ "duration": null
+ },
+ {
+ "type": "scene",
+ "kind": "anim",
+ "name": "intro_3",
+ "action": "load_asset",
+ "location": "anim/intro_3",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/anim/intro_3.jpg?raw=true",
+ "duration": null
+ },
+ {
+ "type": "scene",
+ "kind": "anim",
+ "name": "intro_4",
+ "action": "load_asset",
+ "location": "anim/intro_4",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/anim/intro_4.jpg?raw=true",
+ "duration": null
+ },
+ {
+ "type": "scene",
+ "kind": "anim",
+ "name": "intro_5",
+ "action": "load_asset",
+ "location": "anim/intro_5",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/anim/intro_5.jpg?raw=true",
+ "duration": null
+ },
+ {
+ "type": "scene",
+ "kind": "anim",
+ "name": "intro_6",
+ "action": "load_asset",
+ "location": "anim/intro_6",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/anim/intro_6.jpg?raw=true",
+ "duration": null
+ },
+ {
+ "type": "scene",
+ "kind": "anim",
+ "name": "intro_8",
+ "action": "load_asset",
+ "location": "anim/intro_8",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/anim/intro_8.jpg?raw=true",
+ "duration": null
+ },
+ {
+ "type": "scene",
+ "kind": "anim",
+ "name": "intro_7",
+ "action": "load_asset",
+ "location": "anim/intro_7",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/anim/intro_7.jpg?raw=true",
+ "duration": null
+ },
+ {
+ "type": "scene",
+ "kind": "bg",
+ "name": "bus_stop",
+ "action": "load_asset",
+ "location": "bg/bus_stop",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/bg/bus_stop.jpg?raw=true"
+ },
+ {
+ "type": "narration",
+ "text": "Вечер. Мороз.{w} Остановка и ожидание автобуса."
+ },
+ {
+ "type": "narration",
+ "text": "Я никогда не любил зиму.{w} Впрочем, и жаркое лето – тоже не моя стихия."
+ },
+ {
+ "type": "narration",
+ "text": "Просто не вижу смысла выделять какое-то одно время года – не столь важно, какая погода на улице, если ты целыми днями сидишь дома."
+ },
+ {
+ "type": "narration",
+ "text": "Автобус сегодня задерживался так сильно, что я уже был готов плюнуть на всё и потратить последнюю пару сотен на такси (совсем не ехать мне почему-то в голову не пришло)."
+ },
+ {
+ "type": "narration",
+ "text": "В мозгу, как всегда, роились миллионы мыслей, из которых совершенно невозможно выудить хотя бы одну стоящую."
+ },
+ {
+ "type": "narration",
+ "text": "Такую, которую можно закончить, привести в порядок, облечь в форму идеи и претворить в жизнь."
+ },
+ {
+ "type": "narration",
+ "text": "Может быть, заняться бизнесом?{w} Но откуда я возьму деньги?"
+ },
+ {
+ "type": "narration",
+ "text": "Или пойти опять работать в офис?{w} Нет уж!"
+ },
+ {
+ "type": "narration",
+ "text": "Может, стоит попробовать фриланс?{w} Да что я умею, и кому я нужен…"
+ },
+ {
+ "type": "scene",
+ "kind": "anim",
+ "name": "prolog_2",
+ "action": "load_asset",
+ "location": "anim/prolog_2",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/anim/prolog_2.jpg?raw=true"
+ },
+ {
+ "type": "narration",
+ "text": "Вдруг мне вспомнилось детство…{w} Или скорее юношество – 15-17 лет."
+ },
+ {
+ "type": "narration",
+ "text": "Почему именно это время?{w} Не знаю."
+ },
+ {
+ "type": "narration",
+ "text": "Наверное, потому что тогда всё было проще."
+ },
+ {
+ "type": "narration",
+ "text": "Было проще принимать такие сложные сейчас и такие простые тогда решения."
+ },
+ {
+ "type": "narration",
+ "text": "Проснувшись с утра, я чётко знал, как пройдёт мой день, а выходных ждал с нетерпением – смогу отдохнуть, заняться любимыми делами: компьютер, футбол, встречи с друзьями."
+ },
+ {
+ "type": "narration",
+ "text": "А потом, когда наступит новая неделя, вновь примусь за учёбу."
+ },
+ {
+ "type": "narration",
+ "text": "Ведь раньше не возникало этих мучительных вопросов «зачем», «кому это надо», «что изменится, если я это сделаю» или «что не изменится»."
+ },
+ {
+ "type": "narration",
+ "text": "Простой поток жизни, такой привычный для любого нормального человека и такой чуждый для меня теперешнего."
+ },
+ {
+ "type": "narration",
+ "text": "Время беззаботного детства…{w} Тогда же я и встретил свою первую любовь."
+ },
+ {
+ "type": "narration",
+ "text": "Стёрлись из памяти её внешность, характер."
+ },
+ {
+ "type": "narration",
+ "text": "Как строчка из профиля в социальной сети осталось лишь имя, да те чувства, которые захлёстывали меня, когда я был с ней.{w} Теплота, нежность, желание заботиться, защитить…"
+ },
+ {
+ "type": "narration",
+ "text": "Жаль, что это продолжалось так недолго."
+ },
+ {
+ "type": "narration",
+ "text": "Сейчас я уже с трудом могу себе представить что-то подобное."
+ },
+ {
+ "type": "narration",
+ "text": "Наверное, и хочется познакомиться с девушкой, только не знаю, как начать диалог, о чём вообще с ней говорить, чем её заинтересовать."
+ },
+ {
+ "type": "narration",
+ "text": "Да и подходящих девушек я давно не встречал.{w} Хотя где мне их встретить…"
+ },
+ {
+ "type": "scene",
+ "kind": "anim",
+ "name": "intro_9",
+ "action": "load_asset",
+ "location": "anim/intro_9",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/anim/intro_9.jpg"
+ },
+ {
+ "type": "narration",
+ "text": "Звук работающего двигателя вернул меня к реальности."
+ },
+ {
+ "type": "narration",
+ "text": "Подъехал автобус."
+ },
+ {
+ "type": "narration",
+ "text": "«Какой-то он не такой» – мелькнула мысль."
+ },
+ {
+ "type": "narration",
+ "text": "Впрочем, какая разница – по этому маршруту ходит только 410-ый."
+ },
+ {
+ "type": "scene",
+ "kind": "anim",
+ "name": "intro_10",
+ "action": "load_asset",
+ "location": "anim/intro_10",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/anim/intro_10.jpg?raw=true",
+ "duration": null
+ },
+ {
+ "type": "scene",
+ "kind": "anim",
+ "name": "intro_11",
+ "action": "load_asset",
+ "location": "anim/intro_11",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/anim/intro_11.jpg?raw=true",
+ "duration": null
+ },
+ {
+ "type": "scene",
+ "kind": "anim",
+ "name": "intro_13",
+ "action": "load_asset",
+ "location": "anim/intro_13",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/anim/intro_13.jpg?raw=true",
+ "duration": null
+ },
+ {
+ "type": "scene",
+ "kind": "bg",
+ "name": "intro_xx",
+ "action": "load_asset",
+ "location": "bg/intro_xx",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/bg/intro_xx.jpg?raw=true"
+ },
+ {
+ "type": "narration",
+ "text": "Огни пролетают мимо, их холодный свет словно зажигает внутри давно погасшие чувства."
+ },
+ {
+ "type": "narration",
+ "text": "Или не зажигает, а просто пробуждает…"
+ },
+ {
+ "type": "narration",
+ "text": "Ведь «они» уже давно живут во мне, то затихая, то просыпаясь вновь."
+ },
+ {
+ "type": "narration",
+ "text": "Какая-то очень известная мелодия играла в радиоприёмнике у водителя.{w} Но я её не слушал."
+ },
+ {
+ "type": "narration",
+ "text": "Я смотрел в запотевшее окно автобуса на проезжающие мимо машины."
+ },
+ {
+ "type": "narration",
+ "text": "Ведь люди куда-то спешат, ведь им что-то нужно, и, погружённые в свои дела, они не задумываются о вопросах, мучающих меня."
+ },
+ {
+ "type": "narration",
+ "text": "Наверное, у них тоже есть свои серьёзные проблемы, а может, им живётся куда легче."
+ },
+ {
+ "type": "narration",
+ "text": "Знать наверняка нельзя, так как все люди разные.{w} Или не разные?"
+ },
+ {
+ "type": "narration",
+ "text": "Бывает, поступки человека легко предсказуемы, но, пытаясь заглянуть к нему в душу, видишь лишь непроглядную тьму."
+ },
+ {
+ "type": "narration",
+ "text": "..."
+ },
+ {
+ "type": "narration",
+ "text": "Автобус приближался к центру, и мои мысли прервал яркий свет огней большого города."
+ },
+ {
+ "type": "narration",
+ "text": "Сотни рекламных вывесок, тысячи машин, миллионы людей."
+ },
+ {
+ "type": "narration",
+ "text": "Я смотрел на это светопреставление, и мне почему-то безумно захотелось спать."
+ },
+ {
+ "type": "narration",
+ "text": "Глаза закрылись всего на полсекунды и…"
+ },
+ {
+ "type": "scene",
+ "kind": "bg",
+ "name": "black",
+ "action": "load_asset",
+ "location": "bg/black",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/images/1920/bg/int_bus_black.jpg?raw=true"
+ },
+ {
+ "type": "opening",
+ "kind": "opening",
+ "name": "opening",
+ "action": "load_asset",
+ "location": "opening/opening",
+ "raw_url": "https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/main/Assets/Everlasting_Summer/opening/opening.mp4?raw=true"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/ddialogs/routes_prologue.json b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/ddialogs/routes_prologue.json
new file mode 100644
index 0000000..0563376
--- /dev/null
+++ b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/ddialogs/routes_prologue.json
@@ -0,0 +1,62 @@
+{
+ "prologue_choice_1": {
+ "question": "Иначе никак, иначе сон не закончится, а я – не проснусь. — что выбрать?",
+ "chapter": "prologue",
+ "options": {
+ "Да, я пойду с тобой": {
+ "effects": {}
+ },
+ "Нет, я останусь здесь": {
+ "effects": {}
+ }
+ }
+ },
+ "endings": {
+ "labels": [
+ "main_good_ending",
+ "main_bad_ending",
+ "sl_good_ending",
+ "sl_bad_ending",
+ "dv_good_ending",
+ "dv_bad_ending",
+ "un_good_ending",
+ "un_bad_ending",
+ "us_good_ending",
+ "us_bad_ending",
+ "mi_ending",
+ "uv_ending",
+ "harem_ending"
+ ],
+ "routes": {
+ "sl": {
+ "good": "sl_good_ending",
+ "bad": "sl_bad_ending",
+ "point_key": "sl_points"
+ },
+ "dv": {
+ "good": "dv_good_ending",
+ "bad": "dv_bad_ending",
+ "point_key": "dv_points"
+ },
+ "un": {
+ "good": "un_good_ending",
+ "bad": "un_bad_ending",
+ "point_key": "un_points"
+ },
+ "us": {
+ "good": "us_good_ending",
+ "bad": "us_bad_ending",
+ "point_key": "us_points"
+ },
+ "mi": {
+ "single": "mi_ending",
+ "point_key": "mi_points"
+ },
+ "uv": {
+ "single": "uv_ending",
+ "point_key": "uv_points"
+ }
+ },
+ "fallback": "main_bad_ending"
+ }
+}
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/anim_prolog1_off.gif b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/anim_prolog1_off.gif
new file mode 100644
index 0000000..776d00b
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/anim_prolog1_off.gif differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_1.jpg b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_1.jpg
new file mode 100644
index 0000000..cef9501
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_1.jpg differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_10.jpg b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_10.jpg
new file mode 100644
index 0000000..15a162e
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_10.jpg differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_11.jpg b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_11.jpg
new file mode 100644
index 0000000..54ceb2f
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_11.jpg differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_13.jpg b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_13.jpg
new file mode 100644
index 0000000..1098426
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_13.jpg differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_2.jpg b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_2.jpg
new file mode 100644
index 0000000..acc384b
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_2.jpg differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_3.jpg b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_3.jpg
new file mode 100644
index 0000000..c37580f
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_3.jpg differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_4.jpg b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_4.jpg
new file mode 100644
index 0000000..581db49
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_4.jpg differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_5.jpg b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_5.jpg
new file mode 100644
index 0000000..0782559
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_5.jpg differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_6.jpg b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_6.jpg
new file mode 100644
index 0000000..cb835fc
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_6.jpg differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_7.jpg b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_7.jpg
new file mode 100644
index 0000000..85ac729
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_7.jpg differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_8.jpg b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_8.jpg
new file mode 100644
index 0000000..f418f23
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_8.jpg differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_9.jpg b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_9.jpg
new file mode 100644
index 0000000..4d16e85
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/intro_9.jpg differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/prolog_1.jpg b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/prolog_1.jpg
new file mode 100644
index 0000000..5a45e62
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/prolog_1.jpg differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/prolog_11.jpg b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/prolog_11.jpg
new file mode 100644
index 0000000..6e6e5cb
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/prolog_11.jpg differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/prolog_14.jpg b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/prolog_14.jpg
new file mode 100644
index 0000000..21d49c4
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/prolog_14.jpg differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/prolog_15.png b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/prolog_15.png
new file mode 100644
index 0000000..54c7614
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/prolog_15.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/prolog_2.jpg b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/prolog_2.jpg
new file mode 100644
index 0000000..c525295
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/prolog_2.jpg differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/prolog_3.png b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/prolog_3.png
new file mode 100644
index 0000000..179872c
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/prolog_3.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/prolog_4.png b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/prolog_4.png
new file mode 100644
index 0000000..57d7345
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/prolog_4.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/prolog_5.jpg b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/prolog_5.jpg
new file mode 100644
index 0000000..c59767e
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/anim/prolog_5.jpg differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/bg/black.png b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/bg/black.png
new file mode 100644
index 0000000..e382139
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/bg/black.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/bg/bus_stop.jpg b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/bg/bus_stop.jpg
new file mode 100644
index 0000000..51bdfa7
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/bg/bus_stop.jpg differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/bg/int_bus_black.jpg b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/bg/int_bus_black.jpg
new file mode 100644
index 0000000..46ef32f
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/bg/int_bus_black.jpg differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/bg/intro_xx.jpg b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/bg/intro_xx.jpg
new file mode 100644
index 0000000..6af1f8e
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/bg/intro_xx.jpg differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/bg/semen_room_window.jpg b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/bg/semen_room_window.jpg
new file mode 100644
index 0000000..63f95ac
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/bg/semen_room_window.jpg differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/cg/p_kb_1.png b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/cg/p_kb_1.png
new file mode 100644
index 0000000..693cd17
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/cg/p_kb_1.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/cg/p_kb_2.png b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/cg/p_kb_2.png
new file mode 100644
index 0000000..f182134
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/cg/p_kb_2.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/cg/p_kb_3.png b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/cg/p_kb_3.png
new file mode 100644
index 0000000..6d708e4
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/cg/p_kb_3.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/cg/p_kb_4.png b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/cg/p_kb_4.png
new file mode 100644
index 0000000..4e8fbba
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/cg/p_kb_4.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/cg/p_kb_5.png b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/cg/p_kb_5.png
new file mode 100644
index 0000000..d847f0e
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/cg/p_kb_5.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/in_telegram_images/Save_Menu.png b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/in_telegram_images/Save_Menu.png
new file mode 100644
index 0000000..15e51fc
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/in_telegram_images/Save_Menu.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/in_telegram_images/Start_Menu.jpg b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/in_telegram_images/Start_Menu.jpg
new file mode 100644
index 0000000..856fcf2
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/in_telegram_images/Start_Menu.jpg differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/in_telegram_images/logo.webp b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/in_telegram_images/logo.webp
new file mode 100644
index 0000000..79bd64a
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/images/1920/in_telegram_images/logo.webp differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/opening/opening.mp4 b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/opening/opening.mp4
new file mode 100644
index 0000000..fabbee1
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Everlasting_Summer/opening/opening.mp4 differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Hangman/1.png b/SunnexGB/Heroku-Modules/Assets/Hangman/1.png
new file mode 100644
index 0000000..5aec2db
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Hangman/1.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Hangman/10.png b/SunnexGB/Heroku-Modules/Assets/Hangman/10.png
new file mode 100644
index 0000000..d3726a9
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Hangman/10.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Hangman/2.png b/SunnexGB/Heroku-Modules/Assets/Hangman/2.png
new file mode 100644
index 0000000..be79b1f
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Hangman/2.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Hangman/3.png b/SunnexGB/Heroku-Modules/Assets/Hangman/3.png
new file mode 100644
index 0000000..d62c480
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Hangman/3.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Hangman/4.png b/SunnexGB/Heroku-Modules/Assets/Hangman/4.png
new file mode 100644
index 0000000..f4805d6
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Hangman/4.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Hangman/5.png b/SunnexGB/Heroku-Modules/Assets/Hangman/5.png
new file mode 100644
index 0000000..dd9e6f0
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Hangman/5.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Hangman/6.png b/SunnexGB/Heroku-Modules/Assets/Hangman/6.png
new file mode 100644
index 0000000..f4f9d28
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Hangman/6.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Hangman/7.png b/SunnexGB/Heroku-Modules/Assets/Hangman/7.png
new file mode 100644
index 0000000..4f84d6d
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Hangman/7.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Hangman/8.png b/SunnexGB/Heroku-Modules/Assets/Hangman/8.png
new file mode 100644
index 0000000..8ad057b
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Hangman/8.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Hangman/9.png b/SunnexGB/Heroku-Modules/Assets/Hangman/9.png
new file mode 100644
index 0000000..a1da503
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Hangman/9.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Hangman/full_hp.png b/SunnexGB/Heroku-Modules/Assets/Hangman/full_hp.png
new file mode 100644
index 0000000..c133063
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/Hangman/full_hp.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/Hangman/words.txt b/SunnexGB/Heroku-Modules/Assets/Hangman/words.txt
new file mode 100644
index 0000000..3ad2cb6
--- /dev/null
+++ b/SunnexGB/Heroku-Modules/Assets/Hangman/words.txt
@@ -0,0 +1,1488 @@
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
+КОШКА
+СОБАКА
+ПИТОН
+ПРИВЕТ
+СОЛНЦЕ
+ЛУНА
+ЗВЕЗДА
+ЗЕМЛЯ
+ВОДА
+ОГОНЬ
+ВЕТЕР
+ДЕРЕВО
+КАМЕНЬ
+НЕБО
+АЛМАЗ
+БЕРЕЗА
+ГРОЗА
+ДОРОГА
+ЕЖЕВИКА
+ЖЕЛЕЗО
+ЗЕРКАЛО
+ИСКРА
+ЙОГУРТ
+КАРАНДАШ
+ЛАБИРИНТ
+МОЛОКО
+НОЧЬ
+ОБЛАКО
+ПЕСОК
+РАДУГА
+СНЕЖИНКА
\ No newline at end of file
diff --git a/SunnexGB/Heroku-Modules/Assets/Mikuru/cultural_words_en.txt b/SunnexGB/Heroku-Modules/Assets/Mikuru/cultural_words_en.txt
new file mode 100644
index 0000000..397d620
--- /dev/null
+++ b/SunnexGB/Heroku-Modules/Assets/Mikuru/cultural_words_en.txt
@@ -0,0 +1,400 @@
+2g1c
+2 girls 1 cup
+acrotomophilia
+alabama hot pocket
+alaskan pipeline
+anal
+anilingus
+anus
+apeshit
+arsehole
+ass
+asshole
+assmunch
+auto erotic
+autoerotic
+babeland
+baby batter
+baby juice
+ball gag
+ball gravy
+ball kicking
+ball licking
+ball sack
+ball sucking
+bangbros
+bangbus
+bareback
+barely legal
+barenaked
+bastard
+bastardo
+bastinado
+bbw
+bdsm
+beaner
+beaners
+beaver cleaver
+beaver lips
+beastiality
+bestiality
+big black
+big breasts
+big knockers
+big tits
+bimbos
+birdlock
+bitch
+bitches
+black cock
+blonde action
+blonde on blonde action
+blowjob
+blow job
+blow your load
+blue waffle
+blumpkin
+bollocks
+bondage
+boner
+boob
+boobs
+booty call
+brown showers
+brunette action
+bukkake
+bulldyke
+bullet vibe
+bullshit
+bung hole
+bunghole
+busty
+butt
+buttcheeks
+butthole
+camel toe
+camgirl
+camslut
+camwhore
+carpet muncher
+carpetmuncher
+chocolate rosebuds
+cialis
+circlejerk
+cleveland steamer
+clit
+clitoris
+clover clamps
+clusterfuck
+cock
+cocks
+coprolagnia
+coprophilia
+cornhole
+coon
+coons
+creampie
+cum
+cumming
+cumshot
+cumshots
+cunnilingus
+cunt
+darkie
+date rape
+daterape
+deep throat
+deepthroat
+dendrophilia
+dick
+dildo
+dingleberry
+dingleberries
+dirty pillows
+dirty sanchez
+doggie style
+doggiestyle
+doggy style
+doggystyle
+dog style
+dolcett
+domination
+dominatrix
+dommes
+donkey punch
+double dong
+double penetration
+dp action
+dry hump
+dvda
+eat my ass
+ecchi
+ejaculation
+erotic
+erotism
+escort
+eunuch
+fag
+faggot
+fecal
+felch
+fellatio
+feltch
+female squirting
+femdom
+figging
+fingerbang
+fingering
+fisting
+foot fetish
+footjob
+frotting
+fuck
+fuck buttons
+fuckin
+fucking
+fucktards
+fudge packer
+fudgepacker
+futanari
+gangbang
+gang bang
+gay sex
+genitals
+giant cock
+girl on
+girl on top
+girls gone wild
+goatcx
+goatse
+god damn
+gokkun
+golden shower
+goodpoop
+goo girl
+goregasm
+grope
+group sex
+g-spot
+guro
+hand job
+handjob
+hard core
+hardcore
+hentai
+homoerotic
+honkey
+hooker
+horny
+hot carl
+hot chick
+how to kill
+how to murder
+huge fat
+humping
+incest
+intercourse
+jack off
+jail bait
+jailbait
+jelly donut
+jerk off
+jigaboo
+jiggaboo
+jiggerboo
+jizz
+juggs
+kike
+kinbaku
+kinkster
+kinky
+knobbing
+leather restraint
+leather straight jacket
+lemon party
+livesex
+lolita
+lovemaking
+make me come
+male squirting
+masturbate
+masturbating
+masturbation
+menage a trois
+milf
+missionary position
+mong
+motherfucker
+mound of venus
+mr hands
+muff diver
+muffdiving
+nambla
+nawashi
+negro
+neonazi
+nigga
+nigger
+nig nog
+nimphomania
+nipple
+nipples
+nsfw
+nsfw images
+nude
+nudity
+nutten
+nympho
+nymphomania
+octopussy
+omorashi
+one cup two girls
+one guy one jar
+orgasm
+orgy
+paedophile
+paki
+panties
+panty
+pedobear
+pedophile
+pegging
+penis
+phone sex
+piece of shit
+pikey
+pissing
+piss pig
+pisspig
+playboy
+pleasure chest
+pole smoker
+ponyplay
+poof
+poon
+poontang
+punany
+poop chute
+poopchute
+porn
+porno
+pornography
+prince albert piercing
+pthc
+pubes
+pussy
+queaf
+queef
+quim
+raghead
+raging boner
+rape
+raping
+rapist
+rectum
+reverse cowgirl
+rimjob
+rimming
+rosy palm
+rosy palm and her 5 sisters
+rusty trombone
+sadism
+santorum
+scat
+schlong
+scissoring
+semen
+sex
+sexcam
+sexo
+sexy
+sexual
+sexually
+sexuality
+shaved beaver
+shaved pussy
+shemale
+shibari
+shit
+shitblimp
+shitty
+shota
+shrimping
+skeet
+slanteye
+slut
+s&m
+smut
+snatch
+snowballing
+sodomize
+sodomy
+spastic
+spic
+splooge
+splooge moose
+spooge
+spread legs
+spunk
+strap on
+strapon
+strappado
+strip club
+style doggy
+suck
+sucks
+suicide girls
+sultry women
+swastika
+swinger
+tainted love
+taste my
+tea bagging
+threesome
+throating
+thumbzilla
+tied up
+tight white
+tit
+tits
+titties
+titty
+tongue in a
+topless
+tosser
+towelhead
+tranny
+tribadism
+tub girl
+tubgirl
+tushy
+twat
+twink
+twinkie
+two girls one cup
+undressing
+upskirt
+urethra play
+urophilia
+vagina
+venus mound
+viagra
+vibrator
+violet wand
+vorarephilia
+voyeur
+voyeurweb
+voyuer
+vulva
+wank
+wetback
+wet dream
+white power
+whore
+worldsex
+wrapping men
+wrinkled starfish
+yaoi
+yellow showers
+yiffy
+zoophilia
diff --git a/SunnexGB/Heroku-Modules/Assets/Mikuru/cultural_words_ru.txt b/SunnexGB/Heroku-Modules/Assets/Mikuru/cultural_words_ru.txt
new file mode 100644
index 0000000..b7c5618
--- /dev/null
+++ b/SunnexGB/Heroku-Modules/Assets/Mikuru/cultural_words_ru.txt
@@ -0,0 +1,2187 @@
+анафемовоёбый
+архипиздоит
+архипиздрит
+безмудовый
+безмудый
+беспезды
+беспиздая
+бздение
+бздеть
+бздех
+бзднуть
+бздун
+бздунья
+бздюх
+бздюха
+блежник
+блёжник
+блудовместилище
+блудодей
+блудодейский
+блудугонище
+бля
+блябу
+блябуду
+бляд
+блядва
+блядво
+блядевина
+блядей
+блядепиздопроёбище
+блядеха
+бляди
+блядиада
+блядина
+блядистка
+блядистость
+блядища
+блядище
+блядки
+бляднота
+блядование
+блядовать
+блядовитый
+блядовозка
+блядогандонский
+блядогон
+блядодерьмо
+блядок
+блядолиз
+блядопростервозная
+блядословник
+блядоход
+блядоящерица
+блядская
+блядский
+блядского
+блядское
+блядство
+блядствовать
+блядун
+блядунья
+блядь
+блядюга
+блядюра
+блядюшка
+блядюшник
+блядями
+блять
+бляхомудия
+болтохуярой
+бордель
+вафлеотстойник
+вафлист
+вертохуй
+вжопить
+вжопиться
+взбляд
+вздрачивание
+вздрачивать
+вздрачиваться
+вздрочить
+вздрочиться
+вздрючивание
+вздрючивать
+вздрючить
+вз'ебывать
+взъебка
+взъёбка
+взъебнуть
+взъебщик
+взъёбывать
+взьебка
+взьебывать
+вислозадая
+воспиздозаолупоклинившаяся
+восьмиблядское
+восьмихуй
+впиздить
+впиздиться
+впиздохать
+впиздохивать
+впиздохиваться
+впиздошиваться
+впиздошить
+впиздронивать
+впиздрониваться
+впиздюливать
+впиздюливаться
+впиздюлить
+впиздюривать
+впиздюриваться
+впиздюрить
+впиздякать
+впиздякивать
+впиздяривать
+впиздяриваться
+впиздярить
+впиздяхать
+впиздяхивать
+впиздяхиваться
+впиздячивать
+впиздячил
+впиздячила
+впиздячить
+впиздяшивать
+впиздяшиваться
+впиздяшить
+впизживать
+впизживаться
+всхуяренный
+вхуематери
+вхуйкать
+вхуйнуть
+вхуйнуться
+вхуя
+вхуякать
+вхуякаться
+вхуякивать
+вхуякиваться
+вхуякнуть
+вхуякнуться
+вхуяривание
+вхуяривать
+вхуяриваться
+вхуярить
+вхуяриться
+вхуячивание
+вхуячивать
+вхуячиваться
+вхуячить
+вхуячиться
+вхуяшивать
+вхуяшиваться
+вхуяшить
+вхуяшиться
+въебать
+въебаться
+въебашивать
+въебашиваться
+въебашить
+въебашиться
+въебенивать
+въебениваться
+въебенить
+въебениться
+въёбывать
+выблядовал
+выблядовала
+выблядовать
+выблядодерьмо
+выблядок
+выблядыш
+выебанный
+выебат
+выебать
+выебаться
+выебок
+выебон
+выебопропиздище
+выебу
+выёбывается
+выебываешся
+выёбывать
+выёбываться
+выёбываются
+выперданный
+выпердоватое
+выпердоговенный
+выпердопроссаная
+выпиздеться
+выпиздить
+высераться
+высраная
+высраномудоватое
+высранохуевое
+высрать
+высраться
+выссаногнойное
+выссанохуеплёт
+выссать
+выссаться
+выссереть
+выхуякивание
+выхуякивать
+выхуяривание
+выхуяривать
+выхуячивание
+выхуячивать
+гавнопрягопизд
+гандон
+гандонный
+гандоноскотская
+гандоносрака
+гандоносучий
+гандонохеровая
+гандонский
+глупизди
+глыбоебливое
+гнидоблядун
+гнидопаскудная
+гнидское
+гнобилище
+гноепадла
+гноепромандоватое
+говенный
+говнецо
+говнистый
+говниться
+говно
+говновоз
+говнодав
+говнодерьмище
+говноеб
+говноёб
+говноебский
+говноед
+говнозалупский
+говномер
+говномес
+говноперданный
+говносерка
+говночист
+говнюк
+говняк
+говняный
+голоёбица
+голожопая
+голомудый
+голопиздая
+гомик
+гомосек
+гондон
+гонореей
+гонорея
+греблядь
+гужеёб
+гусоёб
+давалка
+дароёб
+двужопник
+двужопостворчатый
+дерьмо
+дерьмовый
+дерьмоед
+дерьмопрозалупское
+дерьмохеропиздократ
+дерьмохеропиздократия
+дерьмохеропиздократка
+дерьмохеропиздократы
+дилдо
+додрочить
+додрочиться
+доебалась
+доебались
+доебался
+доебать
+доебаться
+доебенивать
+доебениваться
+доебенить
+доебениться
+доёбывать
+долбоеб
+долбоёб
+долбоебатина
+долбоебическая
+допиздеться
+допиздить
+допиздиться
+допиздоболивать
+допиздоболиваться
+допиздоболиться
+допиздовать
+допиздоваться
+допиздовывать
+допиздовываться
+допиздохать
+допиздохаться
+допиздохивать
+допиздохиваться
+допиздошивать
+допиздошиваться
+допиздошить
+допиздошиться
+допиздюкать
+допиздюкаться
+допиздюкивать
+допиздюкиваться
+допиздюливать
+допиздюливаться
+допиздюлить
+допиздюлиться
+допиздюривать
+допиздюриваться
+допиздюрить
+допиздюриться
+допиздюхать
+допиздюхаться
+допиздюхивать
+допиздюхиваться
+допиздякать
+допиздякаться
+допиздякивать
+допиздякиваться
+допиздяривать
+допиздяриваться
+допиздярить
+допиздяриться
+допиздяхать
+допиздяхаться
+допиздяхивать
+допиздяхиваться
+допиздячивать
+допиздячиваться
+допиздячить
+допиздячиться
+допиздяшивать
+допиздяшиваться
+допиздяшить
+допиздяшиться
+допизживать
+дотрахать
+дотрахаться
+дохуйнуть
+дохуякать
+дохуякаться
+дохуякивать
+дохуякиваться
+дохуяривать
+дохуяриваться
+дохуярить
+дохуяриться
+дохуячивать
+дохуячиваться
+дохуячить
+дохуячиться
+дохуяшивать
+дохуяшиваться
+дохуяшить
+драноебливая
+дрисня
+дристать
+дристун
+дристуха
+дрочена
+дроченная
+дроченье
+дрочепиздище
+дрочепроговенное
+дрочепропердоватая
+дрочепросволота
+дроческотина
+дрочила
+дрочилка
+дрочилыцик
+дрочить
+дрочиться
+дрочка
+дрючить
+дрючиться
+дурапиздия
+дуроеб
+дуроёб
+дядеёб
+ёб
+ёбака
+ебаквакнутый
+ебал
+ебалка
+ебало
+ебалово
+ебалом
+ебальник
+ебальные
+ебальный
+ебанагандонный
+ебанатик
+ебанашка
+ебаная
+ебандей
+ебанёшься
+ебанная
+ебанул
+ебанула
+ебанулась
+ебанулись
+ебанулось
+ебанулся
+ебанутые
+ебанутый
+ебануть
+ебануться
+ебаный
+ёбаный
+ебаных
+ебанько
+ебапира
+ебаришка
+ебарь
+ёбарь
+ебат
+ебаторий
+ебатория
+ебатый
+ебать
+ебатьс
+ебаться
+ебашит
+ебеня
+ебёт
+ебец
+еби
+ебиблядская
+ебистика
+ебись
+ебитесь
+ёбкость
+еблан
+ебланистый
+ебланить
+ебливая
+ебливый
+еблище
+ебло
+еблом
+еблоухий
+еблысь
+ебля
+ёбля
+ёбнул
+ебнутый
+ёбнутый
+ебнуть
+ёбнуть
+ебнуться
+ёбнуться
+ебня
+ебоблядище
+ебоватая
+еболожье
+ёбс
+ебу
+ебукентий
+ебун
+ебунище
+ебучее
+ебучий
+ебущегося
+елда
+елдак
+елдачить
+елдище
+елду
+елупень
+женщина-заебись
+жидоёб
+жидоёбка
+жидоёбский
+жирнозадый
+жопа
+жопастая
+жопенци
+жопища
+жопка
+жопник
+жоповатое
+жопоеб
+жопой
+жополиз
+жополизание
+жопоногий
+жопопроебина
+жопосер
+жопочка
+жопочник
+жопство
+жопу
+забздеть
+заблядовать
+заблядоваться
+задница
+задрачивать
+задрачиваться
+задристать
+задрока
+задроченное тримандище
+задроченный
+задрочепидер
+задрочепрогнидище
+задрочепроговно
+задроческоготическое
+задроческотское
+задрочила
+задрочить
+задрочиться
+задрочун
+задрючить
+задрючиться
+заёб
+заеба
+заебал
+заебала
+заебали
+заебанец
+заебанный
+заёбанный
+заебательская
+заебать
+заебаться
+заебашивать
+заебашиваться
+заебашить
+заебашиться
+заебенивать
+заебениваться
+заебенить
+заебениться
+заебёшь
+заебись
+заебла
+заебучестью
+заебцовый
+заебываться
+залупа
+залупаться
+залупенец
+залупенить
+залупень
+залупистый
+залупить
+залупиться
+залупляться
+залупоглазая
+залупоглазое
+залупоголовая
+залуполиз
+залупская
+залупский
+залупу
+замудоебина
+замудохаться
+запиздадуриная
+запиздарить
+запизденевать
+запизденелый
+запизденная
+запиздеть
+запиздие
+запиздить
+запиздиться
+запиздоболивать
+запиздоболиваться
+запиздоболить
+запиздоболиться
+запиздовать
+запиздоваться
+запиздовывать
+запиздовываться
+запиздомедузь
+запиздохать
+запиздошивать
+запиздошиваться
+запиздошить
+запиздошиться
+запиздюкать
+запиздюкаться
+запиздюкивать
+запиздюкиваться
+запиздюливать
+запиздюливаться
+запиздюлить
+запиздюлиться
+запиздюривать
+запиздюриваться
+запиздюрить
+запиздюриться
+запиздюхать
+запиздюхаться
+запиздюхивать
+запиздюхиваться
+запиздючивать
+запиздючиваться
+запиздючить
+запиздючиться
+запизживаться
+засерать
+засеря
+засондряченный
+засракомондохуй
+засранец
+засранка
+засранный
+засратый
+засрать
+засраться
+засрун
+зассать
+затраханный
+затрахать
+затрахаться
+затрахивать
+затрахиваться
+захуить
+захуйнуть
+захуйнуться
+захуякать
+захуякаться
+захуякивать
+захуякиваться
+захуялась
+захуяривать
+захуяриваться
+захуярить
+захуяриться
+захуяченный
+захуячивать
+захуячиваться
+захуячить
+захуячиться
+захуяшивать
+захуяшиваться
+захуяшить
+захуяшиться
+злоебучая
+злоебучее
+злоебучести
+злоебучий
+злоебучим
+злопиздии
+изговнять
+изговняться
+издрочиться
+измандить
+измандиться
+измандовать
+измандоваться
+измандовывать
+измандовываться
+изъеб
+изъебать
+изъебаться
+изъебашивать
+изъебашиваться
+изъебашить
+изъебашиться
+изъебенивать
+изъебениваться
+изъебенить
+изъебениться
+изъебнулась
+изъебнулся
+изъебнуться
+илда
+испизделась
+испизделся
+испиздеться
+испиздить
+испражнение
+испражняться
+исхуякать
+исхуякаться
+исхуякивать
+исхуякиваться
+исхуяривать
+исхуярить
+исхуяриться
+исхуячить
+какать
+какашка
+кастрат
+кастрировать
+клитор
+клоака
+клоповыёбистый
+кнахт
+козлоблядской
+козлоёб
+козлоёбина
+козлоёбиться
+козлоёбище
+козоёб
+козоёбиться
+коноёб
+коноёбиться
+кончить
+коростоебина
+косоёбится
+косоебить
+косоебиться
+кривохуй
+курва
+курвенный
+курвиный
+куроёб
+лахудра
+лох
+лохматка
+лохудра
+малоебущий
+манда
+мандавоха
+мандавошка
+мандавошный
+мандей
+мандеть
+мандилищи
+мандить
+мандиться
+мандища
+мандище
+мандоватая
+мандовать
+мандогнидища
+мандопроблядоватая
+мандопродерьмище
+мандопроеб
+мандопростерва
+мандопроушечная
+мандопроушина
+мандоскотина
+мандохать
+мандохаться
+мандохвост
+мандохивать
+мандохиваться
+мандошить
+мандюк
+мастурбатор
+минет
+минетить
+минетка
+минетчик
+минетчица
+многоблядопропадловый
+многоблядопросволота
+многоблядская
+многоблядь
+многоебоватая
+многоебоный
+многоебошлюхская
+многоебучий
+многожопа
+многомудоватое
+многопизда
+многопиздище
+многопиздная
+многопиздоблядун
+многопиздопропадла
+многостерводерьмо
+многостервопропидрила
+многостервохеровый
+многостервохуенная
+мозгоеб
+мозгоёб
+мозгоебатель
+мозгоебать
+мозгоебка
+мокрожопый
+мокропиздая
+мондавошь
+мондило
+мондозалупленной
+мордоблядина
+мочиться
+мудаблядин
+мудагавнопердь
+мудак
+мудами
+мудах
+мудаханная
+мудачьё
+мудашвили
+муде
+мудеть
+мудила
+мудило
+мудильщик
+мудистое
+мудистый
+мудить
+мудище
+мудня
+мудоблядскую
+мудовафлоебище
+мудодей
+мудоеб
+мудоёб
+мудоеблю
+мудозвон
+мудой
+мудопроеб
+мудопроебное
+мудопрошлюхское
+мудорваней
+мудями
+муйня
+набздеть
+наблядовал
+наблядоваться
+надристать
+надроченный
+надрочивать
+надрочить
+надрочиться
+наебалово
+наебанный
+наебать
+наебаться
+наебашился
+наебениться
+наебка
+наёбка
+наебнулась
+наебнулся
+наебнуть
+наебнуться
+наебщик
+наёбывает
+наебывать
+наебываться
+наебыш
+найвыебенищее
+накакать
+накакаться
+накакивать
+напиздеть
+напиздить
+напиздошить
+напиздюрить
+напиздюриться
+насрать
+насраться
+нассать
+нассаться
+настоебать
+натрахать
+натрахаться
+натрахивать
+натрахиваться
+нахуевертеть
+нахуй
+нахуйник
+нахуякать
+нахуякаться
+нахуякивать
+нахуякиваться
+нахуяривать
+нахуяриваться
+нахуярить
+нахуяриться
+нахуячивать
+нахуячиваться
+нахуячить
+нахуячиться
+нахуяшить
+невъебения
+невъебенной
+невъебенный
+невъебенным
+невьебенно
+недоеба
+недоебанная
+недоебанный
+недоебок
+недоносок
+неебущий
+нехуёвый
+нехуй
+нищеебство
+обдристанный
+обдристать
+обдристаться
+обдрочиться
+обебать
+оберблядь
+облядипизденелости
+облямудевшая
+облямуденный
+обосранец
+обосранная
+обосраный
+обосрать
+обосраться
+обоссанец
+обоссаный
+обоссать
+обоссаться
+обоссывать
+обоссываться
+обпиздить
+обпиздиться
+обпиздовать
+обпиздоваться
+обпиздовывать
+обпиздовываться
+обпиздохать
+обпиздохаться
+обпиздохивать
+обпиздохиваться
+обпиздошить
+обтрахать
+обтрахаться
+обтрахивать
+обтрахиваться
+обхуярить
+обхуяриться
+обхуячить
+объебал
+объебала
+объебалово
+объебательство
+объебать
+объебаться
+объебенить
+объебешь
+объебнуть
+объебон
+объебос
+одинхуй
+однапизда
+однохуйственно
+оебать
+оебашивать
+оебашить
+оебенивать
+оебенить
+оебыват
+опедерастить
+опизде
+опизденевать
+опизденеть
+опизденно
+опизденный
+опиздеть
+опиздить
+опиздихуительный
+опиздоумел
+оскотоёбился
+ослоёб
+ослоёбиться
+остоебал
+остоебала
+остоебали
+остоебать
+остоебенило
+остоебенить
+остоебеть
+остопиздело
+остопиздеть
+остохуело
+остохуеть
+отдрачивать
+отдрачиваться
+отдрочить
+отдрочиться
+отпиздить
+отпизднутый
+отпиздошить
+отпиздячить
+отпиздяшивание
+отпиздяшивать
+отпиздяшиваться
+отпиздяшить
+отпиздяшиться
+отсандаленный
+отсасывать
+отсасываться
+отсосать
+отсосаться
+оттраханная
+оттрахать
+оттрахаться
+оттрахивать
+оттрахиваться
+отхерачить
+отхуякать
+отхуякаться
+отхуякивать
+отхуякиваться
+отхуяривать
+отхуяриваться
+отхуярить
+отхуяриться
+отхуячивать
+отхуячиваться
+отхуячить
+отхуячиться
+отхуяшивать
+отхуяшиваться
+отхуяшить
+отхуяшиться
+отшмаренная
+отъебать
+отъебаться
+отъебашивание
+отъебашивать
+отъебашиваться
+отъебашить
+отъебенивать
+отъебениваться
+отъебенить
+отъебениться
+отъебись
+отъебнуть
+отъебывание
+отъебывать
+отъебываться
+отьебаться
+отьебашиться
+отьебенивание
+отьебись
+отьебнуться
+охлуебень
+охуебаннейшая
+охуевательский
+охуевать
+охуевающая
+охуевающее
+охуевающий
+охуевшее
+охуевший
+охуение
+охуения
+охуенно
+охуенные
+охуенный
+охуеть
+охуительно
+охуительный
+охуякать
+охуякаться
+охуякивать
+охуякиваться
+охуякнуть
+охуякнуться
+охуяривать
+охуяриваться
+охуярить
+охуяриться
+охуячивать
+охуячиваться
+охуячить
+охуячиться
+охуяшивать
+охуяшиваться
+охуяшить
+охуяшиться
+оххуетительно
+очко
+падла
+падловый
+падлопроскотское
+падлопросраное
+падлопрошлюха
+падлюка
+педераст
+педерастина
+педерастический
+педерастия
+педик
+педрик
+педрило
+пежить
+пезды
+пёзды
+пердеж
+пердеть
+перднуть
+пердодроченное
+пердомудоватый
+пердопрогнойная
+пердопромудище
+пердун
+пердунец
+пердь
+перебздеть
+передрачивать
+передрочить
+передрочиться
+переёб
+переёба
+переебать
+переебаться
+переебашить
+перекосоебленным
+перемондоебленная
+перепиздрюченный
+перепиздюханный
+перетраханной
+перетрахать
+перетрахаться
+перетрахивать
+перетрахиваться
+перехуйнуть
+перехуйнуться
+перехуякать
+перехуякаться
+перехуякивать
+перехуякиваться
+перехуякнуть
+перехуякнуться
+перехуяривать
+перехуяриваться
+перехуярить
+перехуяриться
+перехуячивать
+перехуячить
+перехуячиться
+пидарас
+пидарастической
+пидарасы
+пидероперданное
+пидор
+пидорас
+пидорестической
+пидористический
+пидрасня
+пидрила
+пизввда
+пизда
+пиздабол
+пиздавлетины
+пиздагрыз
+пиздадавленный
+пиздаёб
+пиздакнутый
+пиздакрыл
+пиздалон
+пизданутая
+пиздануть
+пиздануться
+пиздапроебина
+пиздарванка
+пиздасер
+пиздатая
+пиздато
+пиздатое
+пиздатый
+пиздаш
+пизде
+пиздёж
+пизделиться
+пиздельник
+пизделякает
+пизделякать
+пизденея
+пизденка
+пизденочка
+пизденыш
+пиздёныш
+пиздень
+пиздеть
+пиздец
+пиздецкая
+пиздецкий
+пиздецкое
+пиздий
+пиздилища
+пиздилищный
+пиздиной
+пиздину
+пиздить
+пиздища
+пиздоаллюренный
+пиздобездонная
+пиздобесины
+пиздоблошка
+пиздоблятское
+пиздобол
+пиздобрат
+пиздобратия
+пиздобрюхой
+пиздобузина
+пиздоварнаковый
+пиздоватый
+пиздовать
+пиздоверзилище
+пиздовладелец
+пиздоворот
+пиздовыдло
+пиздовый
+пиздоглазая
+пиздоглист
+пиздогрыз
+пиздогундливый
+пиздодержец
+пиздодраченая
+пиздодрачильник
+пиздодрачливище
+пиздодушие
+пиздодырищи
+пиздодырная
+пиздодырявина
+пиздоебательный
+пиздоёбищность
+пиздоебливая
+пиздоеблю
+пиздожал
+пиздожоп
+пиздожопская
+пиздозолотарь
+пиздой
+пиздокач
+пиздоквашни
+пиздокопатель
+пиздолет
+пиздолетная
+пиздолиз
+пиздоломина
+пиздомаздливый
+пиздомания
+пиздомахалово
+пиздомол
+пиздомотина
+пиздоногая
+пиздоноздря
+пиздообрез
+пиздопертая
+пиздопляска
+пиздопроeбище
+пиздопроговенная
+пиздопроебина
+пиздопроебинами
+пиздопрозоид
+пиздопролазный
+пиздопроситель
+пиздопроушина
+пиздорванец
+пиздорванка
+пиздорвань
+пиздосей
+пиздосербало
+пиздоскал
+пиздосов
+пиздосос
+пиздострадалец
+пиздострадания
+пиздострадатель
+пиздостремливое
+пиздотень
+пиздотёрый
+пиздотолковища
+пиздотрескучий
+пиздотыренный
+пиздохайловый
+пиздоход
+пиздохочь
+пиздохуй
+пиздочет
+пиздошевка
+пиздошить
+пиздоямина
+пиздрик
+пизду
+пиздуй
+пиздулия
+пиздун
+пиздуянистый
+пизды
+пиздырь
+пиздьей
+пиздью
+пиздюга
+пиздюк
+пиздюкать
+пиздюкаться
+пиздюлей
+пиздюли
+пиздюлина
+пиздюлька
+пиздюля
+пиздюрить
+пиздюхать
+пиздюшка
+пиздюшки
+пиздюшник
+пиздя
+пиздякать
+пиздятина
+пиздятиной
+пиздятины
+пиздячий
+пиздячина
+пиздячить
+пиздячья
+писька
+писюлек
+плоскозадая
+поблудить
+поблядовать
+поблядушка
+подговнять
+подзаебать
+подзаебенить
+подзалупная
+поднаебнуть
+поднаебнуться
+поднаёбывать
+подосрать
+подосраться
+подоссать
+подпёздывать
+подпиздить
+подпиздовать
+подпиздоваться
+подпиздовывать
+подпиздовываться
+подпиздок
+подпиздохать
+подпиздохаться
+подпиздохивать
+подпиздохиваться
+подпиздошивать
+подпиздошить
+подпиздошиться
+подпиздывает
+подпиздывать
+подпиздякать
+подпиздякаться
+подпиздякивать
+подпиздякиваться
+подпиздяривать
+подпиздяриваться
+подпиздярить
+подпиздяриться
+подпиздяхать
+подпиздяхаться
+подпиздяхивать
+подпиздяхиваться
+подпиздячивать
+подпиздячиваться
+подпиздячить
+подпиздячиться
+подпиздяшивать
+подпиздяшиваться
+подпиздяшить
+подпиздяшиться
+подристывать
+подрочить
+подсирать
+подхуякать
+подхуякаться
+подхуякивать
+подхуякиваться
+подхуякнуть
+подхуякнуться
+подхуяривать
+подхуяриваться
+подхуярить
+подхуяриться
+подхуячивать
+подхуячиваться
+подхуячиться
+подхуяшивать
+подхуяшиваться
+подхуяшить
+подхуяшиться
+подъеб
+подъебайка
+подъебала
+подъебалка
+подъебать
+подъебаться
+подъебашить
+подъебка
+подъёбка
+подъёбки
+подъебнуть
+подъебнуться
+подъебывать
+подъёбывать
+подъябывать
+поебанный
+поебать
+поебаться
+поебень
+поебистика
+поебон
+поебончик
+поебочка
+поебывать
+поебываться
+попердеть
+попердеться
+попердывать
+попизденная
+попиздеть
+попиздили
+попиздистее
+попиздить
+попиздиться
+попиздоболивать
+попиздоболиваться
+попиздоболить
+попиздоболиться
+попиздоватей
+попиздовать
+попиздоваться
+попиздовывать
+попиздовываться
+попиздохать
+попиздохаться
+попиздохивать
+попиздохиваться
+попиздошивать
+попиздошиваться
+попиздошить
+попиздошиться
+попиздюкать
+попиздюкаться
+попиздюкивать
+попиздюкиваться
+попиздюливать
+попиздюливаться
+попиздюлить
+попиздюлиться
+попиздюривать
+попиздюриваться
+попиздюрить
+попиздюриться
+попиздюхать
+попиздюхаться
+попиздюхивать
+попиздюхиваться
+попиздякать
+попиздякаться
+попиздякивать
+попиздякиваться
+попиздяривать
+попиздяриваться
+попиздярить
+попиздяриться
+попиздяхать
+попиздяхаться
+попиздяхивать
+попиздяхиваться
+попиздячивать
+попиздячиваться
+попиздячить
+попиздячиться
+попиздяшивать
+попиздяшиваться
+попиздяшить
+попиздяшиться
+попизживать
+попизживаться
+посрать
+потаскун
+потаскуха
+потраханная
+потрахать
+потрахаться
+потрахивать
+потрахиваться
+похер
+похуист
+похуй
+похую
+похуякать
+похуякаться
+похуякивать
+похуякиваться
+похуяривать
+похуяриваться
+похуярили
+похуярить
+похуяриться
+похуячивать
+похуячиваться
+похуячить
+похуячиться
+похуяшивать
+похуяшиваться
+похуяшить
+похуяшиться
+поц
+пошмариться
+поябывать
+приебать
+приебаться
+приебашивать
+приебашиваться
+приебашить
+приебашиться
+приебенивать
+приебениваться
+приебенить
+приебениться
+приебехать
+приебехаться
+приебехивать
+приебехиваться
+приебистый
+приебуривать
+приебуриваться
+приебурить
+приебуриться
+приебывать
+приебываться
+прижопить
+прижопывать
+прикинуть
+примавдовывать
+примандехать
+примандехаться
+примандехивать
+примандехиваться
+примандить
+примандиться
+примандовать
+примандоваться
+примандовываться
+примандохать
+примандохаться
+примандохивать
+примандохиваться
+примандошивать
+примандошиваться
+примандошить
+примандошиться
+примандюкать
+примандюкаться
+примандюкивать
+примандюкиваться
+примандюливать
+примандюливаться
+примандюлить
+примандюлиться
+примандюривать
+примандюриваться
+примандюрить
+примандюриться
+примандякать
+примандякаться
+примандякивать
+примандякиваться
+примандяривать
+примандяриваться
+примандярить
+примандяриться
+примандяхать
+примандяхаться
+примандяхивать
+примандяхиваться
+примандячивать
+примандячиваться
+примандячить
+примандячиться
+примандяшивать
+примандяшиваться
+примандяшить
+примандяшиться
+примудохать
+примудохаться
+примудохивать
+примудохиваться
+припизденный
+припиздень
+припиздеть
+припиздить
+припиздиться
+припиздовать
+припиздоваться
+припиздовывать
+припиздовываться
+припиздохать
+припиздохаться
+припиздохивать
+припиздохиваться
+припиздошивать
+припиздошиваться
+припиздошить
+припиздошиться
+припиздронивать
+припиздрониваться
+припиздронить
+припиздрониться
+припиздывать
+припиздываться
+припиздюкать
+припиздюкаться
+припиздюкивать
+припиздюкиваться
+припиздюливать
+припиздюливаться
+припиздюлить
+припиздюлиться
+припиздюривать
+припиздюриваться
+припиздюрить
+припиздюриться
+припиздюхать
+припиздюхаться
+припиздюхивать
+припиздюхиваться
+припиздякать
+припиздякаться
+припиздякивать
+припиздякиваться
+припиздяривать
+припиздяриваться
+припиздярить
+припиздяриться
+припиздяхать
+припиздяхаться
+припиздяхивать
+припиздяхиваться
+припиздячивать
+припиздячиваться
+припиздячить
+припиздячиться
+припиздяшивать
+припиздяшиваться
+припиздяшить
+припиздяшиться
+припизживать
+припизживаться
+притрахаться
+прихуевать
+прихуеть
+прихуякать
+прихуякаться
+прихуякивать
+прихуякиваться
+прихуяривать
+прихуяриваться
+прихуярить
+прихуяриться
+прихуячивать
+прихуячиваться
+прихуячить
+прихуячиться
+прихуяшивать
+прихуяшиваться
+прихуяшить
+прихуяшиться
+пробиздоблядская
+пробиздом
+проблядовать
+проблядушка
+проблядь
+прогандонский
+прогнидопрохуевающее
+прогнидская
+продрачивать
+продрачиваться
+продрочить
+продрочиться
+проёб
+проёбанной
+проебать
+проебаться
+проебашивать
+проебашиваться
+проебашить
+проебашиться
+проебенить
+проебениться
+проебом
+проебывать
+проебываться
+промандеть
+промандище
+промандоговенная
+промонодблядская
+промудак
+промудеть
+промудище
+промудоватая
+промудопердун
+промудохуеблядская
+промудохуина
+проперданутое
+пропердок
+пропердомандища
+пропиздеть
+пропиздить
+пропиздиться
+пропиздоболивать
+пропиздоболиваться
+пропиздоболить
+пропиздоболиться
+пропиздовать
+пропиздоваться
+пропиздовывать
+пропиздовываться
+пропиздон
+пропиздохать
+пропиздохаться
+пропиздохивать
+пропиздохиваться
+пропиздошивать
+пропиздошиваться
+пропиздошить
+пропиздошиться
+пропиздюкать
+пропиздюкаться
+пропиздюкивать
+пропиздюкиваться
+пропиздюливать
+пропиздюливаться
+пропиздюлить
+пропиздюлиться
+пропиздюривать
+пропиздюриваться
+пропиздюрить
+пропиздюриться
+пропиздюхать
+пропиздюхаться
+пропиздюхивать
+пропиздюхиваться
+пропиздякать
+пропиздякаться
+пропиздякивать
+пропиздякиваться
+пропиздяривать
+пропиздяриваться
+пропиздярить
+пропиздяриться
+пропиздяхать
+пропиздяхивать
+пропиздяхиваться
+пропиздячивать
+пропиздячиваться
+пропиздячить
+пропиздячиться
+пропиздяшивать
+пропиздяшиваться
+пропиздяшить
+пропиздяшиться
+пропизживать
+пропизживаться
+просволота
+просволотопрохуевое
+просволотопрошлюхский
+просволотохуеватое
+просволотская
+проскотошлюха
+просраноперданутая
+просраносука
+проссаное
+проссаномудище
+простервоблядовое
+простервопрохерун
+прохуякать
+прохуякаться
+прохуякивать
+прохуякиваться
+прохуяривать
+прохуяриваться
+прохуярить
+прохуяриться
+прохуячивать
+прохуячиваться
+прохуячить
+прохуячиться
+прохуяшивать
+прохуяшиваться
+прохуяшить
+прохуяшиться
+прошмандовочный
+пятихуй
+разблядоваться
+раздрочить
+раздрочиться
+разёбанный
+раззалупаться
+разнохуйственно
+разъеба
+разъёба
+разъебай
+разъёбанное
+разъёбанный
+разъебать
+разъебаться
+разъебашивать
+разъебашиваться
+разъебашить
+разъебашиться
+разъебенивать
+разъебениваться
+разъебенить
+разъебениться
+разъебись
+распиздаеб
+распиздаёб
+распиздай
+распиздеться
+распизди
+распиздить
+распиздиться
+распиздоблятство
+распиздовать
+распиздоваться
+распиздовывать
+распиздовываться
+распиздон
+распиздохать
+распиздохаться
+распиздохивать
+распиздохиваться
+распиздошивать
+распиздошиваться
+распиздошил
+распиздошила
+распиздошить
+распиздошиться
+распиздюляченный
+распиздяй
+распиздяйка
+распиздяйство
+распроеб
+расхуюжить
+расхуяривать
+расхуяриваться
+расхуярить
+расхуяриться
+расхуячивать
+расхуячиваться
+расхуячить
+расхуячиться
+свиноёб
+свиноёбиться
+сволотопродерьмо
+сволотосука
+сговнять
+сдрочить
+семиблядским
+сестроеб
+сетсроёб
+сифилитик
+сифилюга
+склипездень
+скотложец
+скотоёб
+скотоёбина
+скотопродерьмища
+скурвиться
+смандить
+смандиться
+сосихуйская
+сосихуйский
+сперматоблятская
+сперматозавр
+спермоблевотина
+спиздеть
+спиздил
+спиздила
+спиздить
+сраногнойная
+сранье
+ссанопиздище
+стерва
+стервоза
+стервопиздище
+стервопроблядское
+стоебучее
+страпиздихуюлина
+страхоёбище
+страхопиздище
+страхопизднутый
+сука
+суки
+сукин
+сукины
+суходрочка
+суходрочкой
+сухопиздая
+сучара
+сучий
+сучка
+сучье
+сучьемудища
+сучьескотина
+схуёженный
+схуякать
+схуякаться
+схуякивать
+схуякиваться
+схуяли
+схуяривать
+схуяриваться
+схуярить
+схуяриться
+схуячивать
+схуячить
+схуячиться
+сцать
+сциха
+сцыха
+съебать
+съебаться
+съебашивать
+съебашиваться
+съебашить
+съебашиться
+съебенивать
+съебенить
+съебениться
+съебывать
+съебываться
+тварь
+толстожопый
+толстозадая
+торчило
+траханье
+трахать
+трахаться
+трахнуть
+трахнуться
+трепак
+трепездон
+трепездонит
+тригнидопроговно
+тригнидопрохерище
+тригнидская
+триговноперданутое
+триеблоостомондовевшая
+триебучим
+тризлоебучим
+тримандаблядская
+тримандоблядская
+тримандопростервозный
+тримондоеби
+тримудище
+трипездоклятый
+трипердоватая
+трипиздие
+трипиздоблядская
+трипиздоблядское
+трипиздоблятский
+трипиздодрочун
+трипиздопроманда
+трипиздопроскотложец
+трипиздохерище
+трипиздыпроебина
+триппер
+трипперных
+трисраное
+триссака
+триссанохуина
+триссаный
+трисука
+трисучьепадловая
+трихломидозопиздоеблохуеблядеперепиздическая
+трихуемандаблядский
+троебучим
+троепиздием
+троепиздище
+туебень
+тупиздень
+убить
+ублюдоёб
+ублюдок
+уебалась
+уебался
+уебальник
+уебанский
+уебать
+уебаться
+уебашивать
+уебашить
+уебенить
+уебище
+уёбище
+уёбищенски
+уёбок
+уёбывает
+уебывать
+уёбывать
+уебываться
+уебыш
+упиздить
+урод
+усраться
+усрачка
+уссать
+уссаться
+ухуякать
+ухуякаться
+ухуякивать
+ухуякиваться
+ухуяривать
+ухуяриваться
+ухуярить
+ухуяриться
+ухуячивать
+ухуячиваться
+ухуячить
+ухуячиться
+ухуяшивать
+ухуяшиваться
+ухуяшить
+ухуяшиться
+фаллос
+фекал
+фекалии
+фекалий
+фуй
+хер
+херами
+херня
+херов
+херовина
+херовый
+хероговнюк
+херопроскотское
+херун
+хитровыебанная
+хитровыебанный
+хитрожопый
+хлюха
+хрен
+хреново
+хреновое
+хреновый
+худоебина
+худоёбина
+хуе
+хуебарный
+хуебень
+хуеблища
+хуеблядипиздожабья
+хуеблядская
+хуеблядский
+хуебратия
+хуебун
+хуебур
+хуебыдловый
+хуев
+хуёв
+хуева
+хуеватенький
+хуевато
+хуеватый
+хуеверзоха
+хуевина
+хуёвина
+хуёвищный
+хуёвничать
+хуево
+хуёво
+хуеворот
+хуевотараканево
+хуевый
+хуёвый
+хуег
+хуеглот
+хуеговно
+хуеголовое
+хуеголовый
+хуегрыз
+хуедав
+хуедин
+хуедрыга
+хуезагнутие
+хуездоватый
+хуек
+хуелептический
+хуелес
+хуеловица
+хуем
+хуём
+хуеман
+хуемандовина
+хуемудрие
+хуемырло
+хуемыслие
+хуеньки
+хуеоглобель
+хуепедераст
+хуепиздрическое
+хуеплет
+хуеплёт
+хуепромышленник
+хуепропадла
+хуепуполо
+хуепутало
+хуерик
+хуероломом
+хуерык
+хуерыльная
+хуесос
+хуесосина
+хуессаная
+хуесучий
+хуета
+хуетень
+хуетертое
+хуеть
+хуец
+хуечек
+хуи
+хуидло
+хуила
+хуилище
+хуило
+хуиный
+хуистая
+хуистый
+хуишко
+хуище
+хуй
+хуйло
+хуйнуть
+хуйню
+хуйня
+хуйрик
+хуйство
+хули
+хую
+хуюга
+хуюживать
+хуюживаться
+хуюжить
+хуюжиться
+хуюла
+хуюльское
+хуюшки
+хуя
+хуяк
+хуяка
+хуякать
+хуякнуть
+хуяли
+хуяляга
+хуям
+хуями
+хуярез
+хуярить
+хуяриться
+хуясе
+хуястый
+хуях
+хуяха
+хуяция
+хуячий
+хуячить
+хуячиться
+хуячья
+хуяшить
+целка
+целку
+целочка
+черножопые
+чернозадый
+член
+шалава
+шароёбится
+шелудивая
+шелупина
+широкопиздая
+шлюха
+шлюхский
+шлюхское
+шмара
+шмарить
+шмариться
+ялдак
+анус
+аборт
+блудилище
+вагина
+влагалище
+дурак
+моча
+пенис
\ No newline at end of file
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/icons/first.png b/SunnexGB/Heroku-Modules/Assets/NoChess/icons/first.png
new file mode 100644
index 0000000..660babf
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/NoChess/icons/first.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/icons/last.png b/SunnexGB/Heroku-Modules/Assets/NoChess/icons/last.png
new file mode 100644
index 0000000..cd4f641
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/NoChess/icons/last.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/icons/menu-flip.svg b/SunnexGB/Heroku-Modules/Assets/NoChess/icons/menu-flip.svg
new file mode 100644
index 0000000..843d710
--- /dev/null
+++ b/SunnexGB/Heroku-Modules/Assets/NoChess/icons/menu-flip.svg
@@ -0,0 +1,3 @@
+
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/icons/menu-history.svg b/SunnexGB/Heroku-Modules/Assets/NoChess/icons/menu-history.svg
new file mode 100644
index 0000000..87d94b2
--- /dev/null
+++ b/SunnexGB/Heroku-Modules/Assets/NoChess/icons/menu-history.svg
@@ -0,0 +1,3 @@
+
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/icons/menu-share.svg b/SunnexGB/Heroku-Modules/Assets/NoChess/icons/menu-share.svg
new file mode 100644
index 0000000..50b34dd
--- /dev/null
+++ b/SunnexGB/Heroku-Modules/Assets/NoChess/icons/menu-share.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/icons/next.png b/SunnexGB/Heroku-Modules/Assets/NoChess/icons/next.png
new file mode 100644
index 0000000..61eefd1
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/NoChess/icons/next.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/icons/pgn_moves.svg b/SunnexGB/Heroku-Modules/Assets/NoChess/icons/pgn_moves.svg
new file mode 100644
index 0000000..72ba596
--- /dev/null
+++ b/SunnexGB/Heroku-Modules/Assets/NoChess/icons/pgn_moves.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/icons/prev.png b/SunnexGB/Heroku-Modules/Assets/NoChess/icons/prev.png
new file mode 100644
index 0000000..0e4e744
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/NoChess/icons/prev.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/icons/result-crown.svg b/SunnexGB/Heroku-Modules/Assets/NoChess/icons/result-crown.svg
new file mode 100644
index 0000000..c4cc119
--- /dev/null
+++ b/SunnexGB/Heroku-Modules/Assets/NoChess/icons/result-crown.svg
@@ -0,0 +1,4 @@
+
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/icons/result-draw.svg b/SunnexGB/Heroku-Modules/Assets/NoChess/icons/result-draw.svg
new file mode 100644
index 0000000..25d67ed
--- /dev/null
+++ b/SunnexGB/Heroku-Modules/Assets/NoChess/icons/result-draw.svg
@@ -0,0 +1,5 @@
+
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/icons/result-flag.svg b/SunnexGB/Heroku-Modules/Assets/NoChess/icons/result-flag.svg
new file mode 100644
index 0000000..219b8e7
--- /dev/null
+++ b/SunnexGB/Heroku-Modules/Assets/NoChess/icons/result-flag.svg
@@ -0,0 +1,4 @@
+
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/mr_granstandercleang.otf b/SunnexGB/Heroku-Modules/Assets/NoChess/mr_granstandercleang.otf
new file mode 100644
index 0000000..554bd15
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/NoChess/mr_granstandercleang.otf differ
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/other/bg.png b/SunnexGB/Heroku-Modules/Assets/NoChess/other/bg.png
new file mode 100644
index 0000000..e7b9a2b
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/NoChess/other/bg.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/other/noise.png b/SunnexGB/Heroku-Modules/Assets/NoChess/other/noise.png
new file mode 100644
index 0000000..315084a
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/NoChess/other/noise.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/black-bishop.png b/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/black-bishop.png
new file mode 100644
index 0000000..d450ca0
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/black-bishop.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/black-king.png b/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/black-king.png
new file mode 100644
index 0000000..fa27585
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/black-king.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/black-knight.png b/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/black-knight.png
new file mode 100644
index 0000000..76bb3cc
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/black-knight.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/black-pawn.png b/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/black-pawn.png
new file mode 100644
index 0000000..a67597e
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/black-pawn.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/black-queen.png b/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/black-queen.png
new file mode 100644
index 0000000..9a23ce1
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/black-queen.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/black-rook.png b/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/black-rook.png
new file mode 100644
index 0000000..53c1a0a
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/black-rook.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/white-bishop.png b/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/white-bishop.png
new file mode 100644
index 0000000..d65e581
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/white-bishop.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/white-king.png b/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/white-king.png
new file mode 100644
index 0000000..8e93abc
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/white-king.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/white-knight.png b/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/white-knight.png
new file mode 100644
index 0000000..4d807d1
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/white-knight.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/white-pawn.png b/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/white-pawn.png
new file mode 100644
index 0000000..ad84cc0
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/white-pawn.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/white-queen.png b/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/white-queen.png
new file mode 100644
index 0000000..d41bd92
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/white-queen.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/white-rook.png b/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/white-rook.png
new file mode 100644
index 0000000..bfa7343
Binary files /dev/null and b/SunnexGB/Heroku-Modules/Assets/NoChess/pieces/white-rook.png differ
diff --git a/SunnexGB/Heroku-Modules/Assets/NoChess/raw_assets/index.html b/SunnexGB/Heroku-Modules/Assets/NoChess/raw_assets/index.html
new file mode 100644
index 0000000..f9d7af4
--- /dev/null
+++ b/SunnexGB/Heroku-Modules/Assets/NoChess/raw_assets/index.html
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+ .fcfg DevStats usernames @username",
+ "select_page": "Select page:",
+ "btn_prev": "◄",
+ "btn_next": "►",
+ "btn_back": "Back",
+ "btn_close": "Close",
+ "like_singl": "like",
+ "just_likes": "likes",
+ "just_dislikes": "dislikes",
+ "devtop_desc": "Your rank in developer leaderboard",
+ "topmod_desc": "Your most popular module and its rank",
+ }
+
+ strings_ru = {
+ "_cls_doc": "Модуль статистики разработчиков",
+ "loading": "Загрузка...",
+ "no_data": "Не удалось получить данные. Попробуйте позже.",
+ "dev_header": "Самые популярные разработчики:\n\n",
+ "devtop_not_found": "Вы не были найдены.",
+ "topmod_not_found": "Модули не найдены.",
+ "no_usernames": "Юзернеймы не настроены. Укажите в .fcfg DevStats usernames @username",
+ "select_page": "Выберите страницу:",
+ "btn_prev": "◄",
+ "btn_next": "►",
+ "btn_back": "Назад",
+ "btn_close": "Закрыть",
+ "like_singl": "Лайк",
+ "just_likes": "Лайков",
+ "just_dislikes": "Дизлайков",
+ "devtop_desc": "Ваше место в рейтинге разработчиков",
+ "topmod_desc": "Ваш самый популярный модуль и его место в топе",
+ }
+
+ def __init__(self):
+ self.config = loader.ModuleConfig(
+ loader.ConfigValue(
+ "provider",
+ "multi",
+ "Data source: multi (fheta + vector combined) | fheta | vector",
+ validator=loader.validators.Choice(["multi", "fheta", "vector"]),
+ ),
+ loader.ConfigValue(
+ "display_mode",
+ "likes",
+ "Display mode: likes | both",
+ validator=loader.validators.Choice(["likes", "both"]),
+ ),
+ loader.ConfigValue(
+ "usernames",
+ [],
+ "Your usernames with @ for placeholders",
+ validator=loader.validators.Series(loader.validators.String()),
+ ),
+ loader.ConfigValue(
+ "excluded_authors",
+ ["unknown"],
+ "Authors to exclude from leaderboard",
+ validator=loader.validators.Series(loader.validators.String()),
+ ),
+ loader.ConfigValue(
+ "rank1_emoji",
+ "ngrok_token",
+ "ngrok_error": "Ngrok start error: {}",
+ "asset_read_error": "Failed to load web assets: {}",
+ "open_button": "Open mini-app",
+ "stop_button": "Stop",
+ "about_text": "Important read:\nSometimes the server won't lift cause there's enough processes running, for example on HikkaHost, for this I just rebooted the server\nNext is that cma setups the app by a template and it's rly crooked, so you'll have to set some web app config settings yourself\nAnd also:\n 1. First launch will start straight with a site link, not as a web app\n 2. Use nochess, and then cma to setup the web app\n 3. After that restart the process by typing nochess -kill and nochess again\nYeah it's hacky as hell, but I was so over doing stuff that I started dumping some routine like working with files on ai, which I didn't like so I decided to quick-release the module before it's too late\nWell and maybe soon I'll make an update, right now it's some pre-alpha version, that's why the version name is like this, later I'll change it to 1.0.0, if people actually dig the module as an idea",
+ "cma_start": "( ノ・ェ・ )ノ Creating mini app in BotFather...",
+ "cma_need_url": "Set mini app web URL first or run .nochess to get it.",
+ "cma_done": "(*˘︶˘*) Done.",
+ "cma_error": "Error: {}",
+ "RuntimeError": "inline bot username not found",
+ "not_supported_platform": "(┬┬_┬┬) Unfortunately, it is impossible to install this module on this platform.\n\n(〜^∇^)〜 This is not an error, please do not contact support."
+ }
+
+ strings_ru = {
+ "_cls_doc": "NoChess - Веб модуль который позволяет запускать веб-пейдж,как HTML страницу с функционалом,так же в виде Telegram Mini-App. Является дополнением к модулю Chess от @nullmod",
+ "starting": "( ノ・ェ・ )ノ Запуск NoChess...",
+ "online": "(*˘︶˘*) NoChess запущен",
+ "already_running": "ʕᵕᴥᵕʔ NoChess уже запущен",
+ "stopped": "・゚・(。>д<。)・゚・ NoChess остановлен",
+ "not_running": "(✿╹◡╹) NoChess не запущен",
+ "ngrok_missing": "Укажи ngrok_token",
+ "ngrok_error": "Ошибка запуска ngrok: {}",
+ "asset_read_error": "Не удалось загрузить веб-ассеты: {}",
+ "open_button": "Открыть мини-приложение",
+ "stop_button": "Остановить",
+ "about_text": "Важно к прочтению:\nИногда сервер не может подниматься из за того что запущено достаточно процессов, например на HikkaHost,для этого я просто перезагружал сервер.\nДалее это то что cma сетапает приложение по шаблону и оч криво, поэтому вам придется выставлять некоторые настройки конфигурации веб приложения самим.\nА еще:\n 1. Первый запуск будет запускаться сразу ссылкой на сайт, а не как веб приложение.\n 2. Используйте nochess, а потом cma чтобы настроить веб приложение.\n 3. После чего перезапустите процесс написав nochess -kill и повторно nochess.\nДа это костыли, но мне уже настолько было в падлу что то делать что я уже стал спихивать рутину по типу работы с файлами на ии, что мне не понравилось и я решил быстро релизать модуль пока не стало поздно.\nНу и может быть в скором времени я уже сделаю апдейт, на данный момент это какая то пре-альфа версия, поэтому и название версии такое, в дальнейшем изменю на 1.0.0, если модуль вообще понравиться людям как идея.",
+ "cma_start": "( ノ・ェ・ )ノ Создаю эпку через BotFather...",
+ "cma_need_url": "Сначала укажи URL мини-эпки или запусти .nochess, чтобы получить его",
+ "cma_done": "(*˘︶˘*) Готово",
+ "cma_error": "Ошибка: {}",
+ "RuntimeError": "юз инлайн бота не найден",
+ "not_supported_platform": "(┬┬_┬┬) К сожалению, на эту платформу невозможно установить этот модуль.\n\n(〜^∇^)〜 Это не ошибка, пожалуйста, не обращайтесь в поддержку."
+ }
+
+ async def client_ready(self):
+ platform = utils.get_named_platform()
+ if platform in ("HikkaHost"):
+ raise loader.LoadError(self.strings("not_supported_platform"))
+
+ def __init__(self):
+ self.config = loader.ModuleConfig(
+ loader.ConfigValue(
+ "ngrok_token",
+ None,
+ "Token from ngrok.com | Токен полученый на ngrok.com",
+ validator=loader.validators.Hidden(),
+ ),
+ loader.ConfigValue(
+ "mini_app_url",
+ None,
+ "Mini app direct url | Директ ссылка на ваше мини приложение",
+ validator=loader.validators.String(),
+ ),
+ loader.ConfigValue(
+ "block_light",
+ "#D8E3E7",
+ "Light board block color | Цвет светлых полей на доске",
+ validator=loader.validators.String()
+ ),
+ loader.ConfigValue("block_dark",
+ "#7699AF",
+ "Dark board block color | Цвет тёмных полей на доске",
+ validator=loader.validators.String()
+ ),
+ loader.ConfigValue(
+ "select_block",
+ "#FF5A5A",
+ "Selected block color | Цвет для выделения полей на доске",
+ validator=loader.validators.String()
+ ),
+ loader.ConfigValue(
+ "move_pieces_color",
+ "#58B4FF",
+ "Move highlight color | Цвет подсвечиваниях перехода на другую позицию",
+ validator=loader.validators.String()
+ ),
+ loader.ConfigValue(
+ "result_win",
+ "#00BE16",
+ "Winner color | Блок цвета победителя",
+ validator=loader.validators.String()
+ ),
+ loader.ConfigValue(
+ "result_lose",
+ "#BE0000",
+ "Loser color | Блок цвета проигравшего",
+ validator=loader.validators.String()
+ ),
+ loader.ConfigValue(
+ "result_draw",
+ "#434343",
+ "Draw color | Блок цвета при ничьей",
+ validator=loader.validators.String()
+ ),
+ loader.ConfigValue(
+ "arrow_color",
+ "#BD3667",
+ "Arrow color | Цвет стрелки",
+ validator=loader.validators.String()
+ ),
+ )
+
+ self.runner = None
+ self.tunnel_url = None
+ self.access_token = None
+ self.games_cache = []
+ self.games_dump = ""
+
+ def theme_config_dict(self):
+ return {
+ "block_light": self.config["block_light"],
+ "block_dark": self.config["block_dark"],
+ "select_block": self.config["select_block"],
+ "move_pieces_color": self.config["move_pieces_color"],
+ "result_win": self.config["result_win"],
+ "result_lose": self.config["result_lose"],
+ "result_draw": self.config["result_draw"],
+ "arrow_color": self.config["arrow_color"],
+ }
+
+ async def refresh_games_cache(self):
+ chess = self.lookup("chess")
+ if not chess or not getattr(chess, "games", None):
+ self.games_cache = []
+ self.games_dump = ""
+ return
+
+ chunks = []
+ items = list(chess.games.items())
+
+ def sort_key(item):
+ key = str(item[0])
+ return (0, int(key)) if key.isdigit() else (1, key)
+
+ for _, game in sorted(items, key=sort_key, reverse=True):
+ node = None
+
+ if isinstance(game, dict):
+ game_obj = game.get("game", {})
+ if isinstance(game_obj, dict):
+ node = game_obj.get("root_node") or game_obj.get("node")
+ if node is None:
+ node = game.get("root_node") or game.get("node")
+
+ if node is None and hasattr(game, "game"):
+ game_obj = getattr(game, "game", None)
+ if isinstance(game_obj, dict):
+ node = game_obj.get("root_node") or game_obj.get("node")
+
+ if node is None and hasattr(game, "root_node"):
+ node = getattr(game, "root_node", None)
+
+ if node is None and hasattr(game, "node"):
+ node = getattr(game, "node", None)
+
+ if node:
+ chunks.append(str(node).strip())
+
+ self.games_cache = [x for x in chunks if x]
+ self.games_dump = "\n\n".join(self.games_cache)
+
+ async def get_me_json(self):
+ me = await self.client.get_me()
+ fallback_photo = "https://i.pinimg.com/736x/6e/0a/0c/6e0a0cf688b30ba9de81b81bb32e49f9.jpg"
+ full_name = (getattr(me, "first_name", "") or "") + (
+ (" " + getattr(me, "last_name", "")) if getattr(me, "last_name", None) else ""
+ )
+ return {
+ "id": getattr(me, "id", None),
+ "username": getattr(me, "username", None),
+ "first_name": getattr(me, "first_name", None),
+ "last_name": getattr(me, "last_name", None),
+ "name": full_name.strip() or str(getattr(me, "id", "Unknown")),
+ "photo": fallback_photo,
+ "enemy_photo": fallback_photo,
+ }
+
+ def check_access(self, request):
+ token = request.query.get("token") or request.cookies.get("nochess_token")
+ return bool(self.access_token and token == self.access_token)
+
+ def ensure_access_token(self):
+ if self.access_token:
+ return self.access_token
+ self.access_token = self.get("access_token")
+ if not self.access_token:
+ self.access_token = secrets.token_urlsafe(32)
+ self.set("access_token", self.access_token)
+ return self.access_token
+
+ async def read_remote_asset(self, url):
+ timeout = ClientTimeout(total=15)
+ async with ClientSession(timeout=timeout) as session:
+ async with session.get(url) as response:
+ if response.status != 200:
+ raise RuntimeError(f"HTTP {response.status}: {url}")
+ return await response.text()
+
+ async def load_web_assets(self):
+ html = await self.read_remote_asset(html_raw)
+ css = await self.read_remote_asset(css_raw)
+ js = await self.read_remote_asset(js_raw)
+ return html, css, js
+
+ def localication_script(self):
+ return (
+ ""
+ )
+
+ def inject_runtime_config(self, html, css, js):
+ asset_root = asset_root_raw.rstrip("/")
+ if asset_root:
+ css = css.replace("url('bg.png')", f"url('{asset_root}/other/bg.png')")
+ theme_json = json.dumps(self.theme_config_dict(), ensure_ascii=False)
+ bootstrap = (
+ ""
+ )
+ html = html.replace('', f"")
+ html = html.replace('', bootstrap + f"")
+ return html
+
+ async def handle_home(self, request):
+ try:
+ html, css, js = await self.load_web_assets()
+ except Exception as error:
+ return web.Response(
+ text=self.strings["asset_read_error"].format(utils.escape_html(str(error))),
+ status=500,
+ )
+ html = self.inject_runtime_config(html, css, js)
+ html = html.replace("