Как научить яндекс станцию мини материться

Первый навык — эхо-бот

Навык «Алисы» — это, по сути, чат-бот. А разработчики чат-ботов для теста обычно первым делом пробуют написать «эхо-бота», который отправляет тебе то же самое, когда ты ему что-то пишешь.

Для начала основные термины:

  • request — запрос, который поступил от «Алисы»;
  • response — ответ нашего сервера, который отправляется «Алисе».

Как будет работать наш навык? На наш сервер поступает request, мы будем получать из него содержимое в виде текста, а затем отправлять response, где в качестве содержимого укажем текст запроса. Переходим к коду!

Как-то много кода… Давай разбираться по частям

Во-первых, важно сказать, что наш сервер написан на Flask, и если ты хочешь разобраться в этом фреймворке поглубже, на «Хабрахабре» есть отличный гайд. Здесь же отметим пару основных вещей

Важно не забыть импортировать модули: Flask отвечает непосредственно за работу веб-приложения, — за работу с запросами, а необходим, потому что мы и получаем, и отправляем файлы JSON, а не объекты из Python.
Нужно создать экземпляр класса Flask, а затем его запустить. Это и есть непосредственно «ядро» сервера.
Декоратор необходим, чтобы связать URL, тип запроса и функцию, которая будет обрабатывать этот запрос.. С основами Flask покончено — в принципе, для разработки простых навыков нам ничего больше не потребуется

Давай разберем, что же происходит в наших двух функциях

С основами Flask покончено — в принципе, для разработки простых навыков нам ничего больше не потребуется. Давай разберем, что же происходит в наших двух функциях.

В мы сначала создаем шаблон для ответа

Обрати внимание, что мы передаем туда два параметра из запроса: и , а затем во вторую функцию передаем наш шаблон для ответа и запрос, сконвертированный в JSON

Основная функциональность нашего навыка содержится в функции . Если нам пришло какое-то сообщение, то все просто: нужно получить содержимое запроса. Кстати, оригинальный текст запроса содержится внутри . Чтобы отправить его обратно пользователю, нужно скопировать содержимое в .

Когда пользователь подключается к навыку в первый раз, запрос тоже приходит, но никакого текста в нем нет. Для обработки этой ситуации я добавил в функцию проверку.

Вроде бы все? Теперь нужно проверить, работает наш пример или мы где-то ошиблись. Но как протестировать?

Навык “Список покупок”

Когда я подавал навык на премию Алисы в феврале, мне посоветовали выделить часть, которая касается списка покупок в отдельный навык. Так появился “Вкусный список».

По сути всё уже было готово, я за вечер выбросил всё лишнее, переписал справку и запустил.

Название было такое, потому что “Список покупок” занял какой-то киберсквоттер, но навык он не сделал, там была просто заглушка.

Через какое-то время мне отдали нормальное название “Список покупок”.

Уменьшившийся упростил жизнь как мне, так и пользователю. Например, стало можно сказать просто “добавь картошку”, а не “добавь картошку в список покупок” и т.п.

Сделал возможность добавлять и удалять помногу, защиту от двойного добавления и прочие мелочи.

В итоге оказалось, что навыком действительно удобно пользоваться. На телефоне список выглядел как список, при нажатии на каждый продукт он удалялся из списка, легко было идти по списку и “вычёркивать”.

Навыком начали пользоваться человек 50 в день, я тоже им пользовался, натурально наговаривал список, глядя в холодильник и смотрел в телефон в магазине.

Были косяки, которые меня не парили, а пользователи жаловались. Список хотелок юзеров в какое-то время превысил мои возможности. Например, я надиктовываю сразу группами: “добавь масло, сгущёнку и сыр”, при этом навык должен определить 3 продукта и действие “добавить”. Самое сложное, что я добавлял — “соевый соус”, его я научился определять как один продукт, определяя прилагательное + существительное.

А пользователь хотел “добавить приправу для плова”, можно было через “для” определить связку, но…

Мат в игре «Угадай песню» с Алисой

Итак, для того, чтобы научит Алису ругаться матом достаточно запустить на ней игру словами «Давай поиграем в Угадай песню». После чего произнести строчку из любой песни, в которой содержатся матерные фразы.

Алиса подхватит вас и начнет произносить все слова текста, в том числе и мат. Наглядно это продемонстрировано в видео ниже

Для того, чтобы подобное работало, необходимо предварительно внести изменения в настройки фильтрации Алисы. По умолчанию в ней отключена озвучка слов, которым можно было бы поставить маркировку «18+»

  1. Нам понадобится установить на смартфон программу «Умный дом», в котором содержатся настройки экосистемы от Яндекса.

  2. Запускаем и открываем параметры через меню — для его вызова жмем на иконку в виде шестеренки в углу экрана

  3. Заходим в раздел «Алиса»

  4. И выбираем «Настроить режим поиска»

  5. Во вкладке «Взрослый голос» ставим для Алисы режим «Без ограничений» и жмем на кнопку «Применить»

Теперь можно будет научить Алису материться Черпез Яндекс Станцию Мини, Лайт, Макс или любую другую.

Учим «плохую» Алису материться через новые фразы для Яндекс Станции

Другой вариант научить Алису материться — через создание сценариев для Яндекс Станции в мобильном приложении. Функция обучения новым фразам работает таким образом, что мы программируем помощника на голосовую команду и прописываем определённый ответ, который по ней Алиса должна проговорить.

  1. Для создания сценария запускаем приложение «Умный дом с Алисой» и нажимаем в углу экрана на «плюсик»

  2. Где выбираем «Сценарий»

  3. Откроется страница для создания нового сценария. Здесь нужно указать его название, условия для срабатывание и то действие, которое будет выполняться Алисой.

  4. Придумываем имя для него, например «Алиса матерится»

  5. Далее жмем на «Добавить условие» и выбираем фразу

  6. Пропишем, «Поругайся» и сохраним кнопкой «Добавить»

  7. В пункте «Тогда» выбираем нашу колонку, Яндекс Мини

  8. И в качестве типа действия указываем «Прочитать текст вслух»

  9. В строке пишем наше матерное ругательство и жмем на «Добавить»

  10. Сохраняем сценарий

  11. После чего он появится в общем списке

Все, теперь чтобы Алиса начала метериться достаточно сказать рядом с микрофоном Яндекс Станции «Алиса, поругайся». И она озвучит назначенную на эту команду матерную фразу.

Ваше мнение — WiFi вреден?
Да 22.59%

Нет 77.41%

Проголосовало: 51187

Тестирование навыков

Существует несколько способов тестирования навыков. Один из самых простых — с помощью утилиты alice-nearby, которую можно запускать локально на своем компьютере

О том, как ее установить, написано достаточно подробно, так что не буду заострять на этом внимание. Итак, начинаем тестирование

Поздравляю, твой первый навык работает! Обрати внимание: справа отображаются запрос и ответ в JSON. Но на самом деле авторы этой утилиты не придумывали интерфейс самостоятельно

Они просто сделали локальную версию приложения для тестирования навыков на основе тестового стенда в личном кабинете «Яндекс.Диалоги».

Зарегистрируемся в «Диалогах», регистрируем свой навык и попробуем его протестировать. При создании нового диалога разработчику предлагается выбрать его тип. Выбираем «Навык в Алисе».

Типы диалогов

Откроется страница с настройками. Их много, сконцентрируемся на основных.

Основные настройки

Для проверки работы нашего бота нам необходимо указать Webhook URL в «Яндекс.Диалогах». Но если мы попробуем добавить туда , то ничего не произойдет и на вкладке «Тестирование» будет лишь сообщение об ошибке сервера.

Чтобы протестировать навык, запущенный на компьютере, а не на сервере, можно использовать приложение ngrok. Эта программа создает публичный URL для сайта или сервера, запущенного на локальной машине.

ngrok

Запустим ngrok, скопируем выданный нам URL-адрес в поле Webhook URL, сохраним настройки и перейдем на вкладку «Тестирование»

Обрати внимание, что ngrok выдает два URL: HTTP и HTTPS, нам нужен HTTPS. И не забудь добавить к адресу , чтобы запросы обрабатывались корректно

Тестирование на «Я.Диалогах»

Хотелось бы не только писать, но и проверить, как бы все это звучало, если бы наши ответы зачитывала «Алиса». Это можно будет сделать, если наш навык пройдет модерацию… Он вряд ли ее пройдет, но не надо отчаиваться! Существует целых два решения.

  1. Сделать навык приватным. Для этого в настройках необходимо поставить соответствующую галочку. В таком случае модераторы проверят только название, активационное имя и приветственное сообщение, где должно быть описано, что делает навык. Подробнее про модерацию навыков можно узнать из видеоруководства.

  2. Воспользоваться симулятором. В настройках необходимо указать URL — и можно начинать.

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку!
Подробнее

Я уже участник «Xakep.ru»

Что случилось

Об утечке стало известно 25 января 2023 года. Пользователи форума Hacker News сообщили о публикации папок с исходным кодом «Яндекса». Все файлы в архивах не новые: каждый из них датирован 24 февраля 2022 года.

Набор включает несколько архивов, по названиям которых можно идентифицировать соответствующие сервисы компании: например, market, taxi, portal, alice, delivery, disk, drive, yandex360. Общее число архивов — 83, их объем в сжатом виде — более 44 Гб.

Например, в репозитории голосового помощника «Алиса» содержится множество скриптов для ее обучения, фрагментов обучающих данных, выборки реальных — но анонимных — запросов пользователей.

После утечки в «Яндексе» пояснили, что взлома не было. Служба безопасности компании обнаружила в открытом доступе фрагменты кода из внутреннего репозитория. В компании отметили, что их содержимое отличается от текущей версии репозитория.

«Репозитории нужны для работы с кодом и не предназначены для хранения персональных данных пользователей», — заявили в «Яндексе». В компании подчеркнули, что утечка не несет никакой угрозы для клиентов.

Как именно произошла утечка, неизвестно. Но источники vc.ru, Forbes и РБК, близкие к «Яндексу», сообщили, что к публикации данных причастен один из сотрудников компании.

Что можно получить из утечки

Персональные данные пользователей не пострадали.Разработчик Арсений Шестаков изучил файлы и объяснил, что в архивах — только содержимое репозиториев git. Там есть исходный код для части сервисов, документация, указывающая на реальные URL-адреса интрасети, и несколько ключей API, которые использовались для тестового развертывания.

Шестаков отметил, что в документах — за редким исключением — нет готовых двоичных файлов для большей части программ и почти нет предварительно обученных моделей ML.

Бывший топ-менеджер «Яндекса» Григорий Бакунов отметил, что слив подходит только для изучения кода: «Запустить из него свой Яндекс не выйдет». По его словам, что-то собрать из этого исходного кода невозможно: не хватит внутренней инфраструктуры компании и натренированных весов. Модель, которая получится, не обучена, а датасета для обучения нет.

Заместитель руководителя Центра противодействия киберугрозам Innostage CyberART Максим Акимов пояснил CNews, что, учитывая принятую agile-модель разработки программного обеспечения, часть кодов может быть актуальна. Насколько эта часть большая, сказать трудно.

Чем утечка угрожает пользователям

Инженер-программист, разработчик игр Арсений Шестаков на своем сайте заметил, что архив представляет собой содержимое репозитория, файлы в котором датированы 24 февраля 2022 г. Он не содержит истории git, в основном – только код. В документах также нет готовых двоичных файлов для больше части программ, за редким исключением, и почти нет предварительно обученных моделей ML.

«Я проверил, что по крайней мере некоторые из архивов наверняка содержат современный исходный код сервисов компании, а также документацию, указывающую на реальные URL-адреса в интрасети», – отметил разработчик.

Он добавил, что утечка не содержит личных данных. В документе можно найти несколько ключей API, но они, как полагает эксперт, использовались только для тестирования развертывания.

Бывший топ-менеджер компании «Яндекс» Григорий Бакунов в своем Telegram-канале сообщил, что выложенные архивы подходят лишь для изучения кода.

«Важно понимать: по сути это довольно бесполезно, подходит для изучения кода, но запустить из этого свой «Яндекс» не выйдет, – пишет Бакунов. – Во-первых, попробуйте хоть что-то оттуда собрать, это очень не очевидно и часто требует внутренней инфраструктуры «Яндекса»

Во-вторых, для ИИ-проектов нет самого главного – натренированных весов, т.е. модель, которая у вас получится после сборки, просто не обучена. Датасета для обучения тоже нет».

По его мнению, это не взлом, а слив кого-то из сотрудников.

В беседе с CNews Михаил Сергеев, ведущий инженер CorpSoft24, изучивший архив, заметил, что в архиве есть исходники некоторых сервисов компании, но не сами репозитории с коммитами и ветками, и, вероятно, злоумышленник, перед тем как выложить почистил .git папки. Под статью КоАП РФ утечка не подпадает, так что компанию не оштрафуют.

Бизнес-коммуникации в финансовых организациях: что изменилось за последний год
бизнес-коммуникации

«Утечка данных исходников может способствовать «нахождению дыр» в текущих сервисах компании и уже привести к взлому и краже, например, персональных данных», – уточнил эксперт.

Заместитель руководителя Центра противодействия киберугрозам Innostage CyberART Максим Акимов объяснил CNews, что, учитывая принятую agile-модель разработки программного обеспечения, можно полагать, что часть кода сервисов актуальна. Анализ исходного кода на предмет уязвимостей, ошибок, зависимостей действительно дает основу для проведения взлома.

«Утечка содержит исходный код для части сервисов компании, документацию, конфигурации указывающие на адреса внутренней сети инфраструктуры, – отметил Акимов. – Раскрытие информации об устройстве внутренней сети позволяет злоумышленникам эффективнее действовать на стадии продвижения.Также обнаружены исходные данные, относящиеся к конфигурациям средств защиты информации, анализ которых дает широкие возможности для обхода защитных методов. Данный случай доказывает, что никто не застрахован от подобного инцидента, даже компании с высоким уровнем зрелости информационной безопасности».

Главный архитектор RooX Константин Корсаков сообщил CNews, что формально утечка кода относится к «СП.22.10 Раскрытие чувствительной информации о приложении и инфраструктуре» Банка данных угроз безопасности информации ФСТЭК (БДУ). По его словам, чем «свежее» код, который попал в утечку, тем серьезнее угроза.

«БДУ предлагает список системных мер по защите от такого рода угроз, но даже если в компании внедрен и поддерживается весь комплекс этих мер, то после утечки все равно появляется «слабое звено» или Zero Day-уязвимости, – предупреждает эксперт. – Zero Day всегда будут возникать. Если благодаря утечке кода можно предположить, что компания использует определенную библиотеку, а в ней нашли Zero Day, то тогда все будет зависеть от скорости реакции безопасников».

Yandex Dialogs Client — инструмент для тестирования навыков

yandex-dialogs-client написал параллельно с разработкой первого навыка, потому что понял, что нужны автотесты, чтобы прогонять разные сценарии.

Настройки

  • Использовать прокси — галочка для отправки запроса с сервера. Плюс: обходит ограничения CORS, если они не обойдены в навыке. Минус: запрос будет отправлен с машины, на которой крутится тестилка, то есть чтобы потестить localhost навык с чужого (или моего) инстанса тестилки, он должен . Доступно на https://dialogs.home.popstas.ru/ с серверной частью, недоступно на статическом https://dialogs.popstas.ru/
  • Использовать /scenarios.yml — после первого запроса к навыку будет запрошен соответствующий файл с вебхука. Навык должен уметь вернуть yaml по этому запросу, иначе тестилка работать не будет при включенной галочке.
  • Показывать тесты внизу — закрепляет список тестов на экране
  • Показывать JSON в консоли — код запросов и ответов посчитал второстепенным, можно включить его вывод в консоль браузера
  • Макс. кол-во сообщений в чате — установлен разумный предел, при большом кол-ве сообщений тесты начинают тормозить
  • Макс. кол-во сообщений при открытии страницы — история сообщений хранится в Local Storage браузера, но чистится
  • Макс. время ответа — чтобы тестить ограничение на время. Временами я тестил с дебагером и ставил время ответа 60 сек
  • Последние URL навыков — здесь сохраняются все вебхуки, которые вводили через

Не выходить в интернет

Я хотел делать всё локально, а стандартная тестилка навыка предполагает, что навык открыт для всех. Поэтому перед написанием навыка я сделал свою тестилку yandex-dialogs-client. Потом я захотел автотесты (сценарии диалогов с проверкой ответов навыка), сделал их, позже они породили yandex-dialogs-tester, который умеет прогонять те же тесты в терминале.

Сейчас для этого я бы взял что-то готовое, тогда тестилок ещё нормальных не написали.
Моя — далеко .

Прикинуться настоящим

Я хотел сделать максимально похоже на дизайн Алисы в официальных приложениях. Официальная тестилка почему-то этого не хотела и выглядела как поделка начинающего верстальщика. Сейчас выглядит уже хорошо.

Технически это Vue.js с .

Проверить все сценарии

Этой фичи до сих пор у других не видел.

Идея была в том, чтобы написать все возможные диалоги в файле, который будет автоматически воспроизводиться в навыке и проверять, соответствуют ли ответы ожидаемым.

Тесты можно запускать по одному или все вместе. Для этого внизу чата они выводятся в виде кнопочек.

Тесты прогоняются прямо визуально, просто скрипт пишет в чат сообщения боту.

После прохождения всех тестов будет сводка: сколько тестов прошло, сколько упало, перезапустить все упавшие или один.

Кнопочки раскрашиваются в цвет результата последнего прохождения.

Сообщения от самой тестилки в чате помечаются цветной полосой.

Синтаксис scenarios.yml

Пример одного теста в файле:

В итоге в первом навыке получилось 73 диалога. Все сценарии навыка.

На боевом навыке у меня тестирование 73 диалогов (404 реплики) проходит примерно за 30 секунд, на локалке за 15 секунд.

Я покрыл все сценарии тестовыми диалогами, так я мог не боясь рефакторить код и обновлять версию SDK, сразу сообщая автору, в каких местах что сломалось (а ломалось каждый раз в разных).

Вручную тоже

Для ручного тестирования тоже есть пара фич:

  • стрелки вверх-вниз ходят по истории отправленных сообщений, как в терминале
  • у исходящих сообщений есть кнопка повторной отправки

Картинки и карточки я не делал, поэтому в тестилке их нет.

Я устал, я ухожу

Под конец простых регулярок перестало хватать для понимания запроса юзера, я начал прикручивать к навыку Томита-парсер для какого-то понимания смысла услышанного (никакого машинного обучения), но всё остановилось на прототипе tomita-parser-test, т.к. навыком я сам пользовался редко, поднадоело.

Вообще я навыки делал в первую очередь для себя, “Вторая память” оказалась бесполезной даже для меня, списком покупок я пользовался несколько месяцев, пока Яндекс не сделал официальный список покупок, он в чём-то хуже (не продуман механизм быстрого удаления в магазине), но в основном он конечно лучше. А больше я не знаю что писать )

Ещё была неудача с премией: Яндекс проводит ежемесячные премии Алисы, где награждает авторов лучших навыков, я ни с одним из 2 навыков не был удостоен. “Ачивки”, которуе я получил от Яндекса: название “Список покупок” и размещение “Второй памяти на главной странице на несколько дней (это подняло посещаемость с 10 до 500 юзеров в день).

К весне 2019 я наигрался с разработкой навыков, поэтому мои тулзы тоже застыли. Я всего 2 навыка сделал и помогал немного в развитии yandex-dialogs-sdk, автору которого надоело ещё раньше меня.

Не первая утечка

Нынешний инцидент не связан с персональными данными, однако в 2022 г. «Яндекс» сталкивался с масштабной утечкой сведений пользователей – в Сеть попали сведения о клиентах сервиса доставки «Яндекс.еда». 1 марта 2022 г. в компании подтвердили, что в открытый доступ были слиты номера телефонов клиентов и данные об их заказах. В инциденте обвинили недобросовестного сотрудника. При этом утечка не затронула банковские и платежные данные пользователей, логины и пароли.

Что выгоднее – внедрить одну интеллектуальную систему, или интегрировать несколько ИИ-сервисов?
ПО

В октябре 2022 г. Минцифры внесло в готовящийся законопроект поправку о персональной ответственности. Главу компании, не уследившей за данными, могут оштрафовать на 200-400 тыс. руб., если в интернете оказалась база на 10-100 тыс. строк. Для индивидуальных предпринимателей и юридических лиц штраф за такой же инцидент составит 0,02% оборота, но не меньше 1 млн руб. Штраф на организацию хотят ввести на уровне 1-3% годовой выручки, если фирма не уведомила об инциденте Роскомнадзор.

На данный момент вопрос нарушений законодательства в области персональных данных регулирует статья 13.11 Административного кодекса. Максимальное наказание предполагает штраф в 500 тыс. руб. для юрлиц. Для сравнения -– оборотный штраф в 1% для компании с выручкой в 100 млрд руб. составит 1 млрд руб.

Что говорят в «Яндексе» после расследования утечки

«Яндекс» раскрыл первые результаты расследования вечером 30 января 2023 года. Компания подтвердила, что опубликованные фрагменты взяты из ее внутреннего репозитория, но содержимое архива соответствует его устаревшей версии. В «Яндексе» отметили, что представленный исходный код отличается от актуальной версии, используемой сервисами сейчас.

В компании сообщили, что архивы не несут какой-либо угрозы для безопасности пользователей или работоспособности сервисов. При этом во время масштабного аудита «Яндекс» выявил несколько случаев «серьезного нарушения собственных политик, среди которых — «Принципы „Яндекса“» и «Правила корпоративной этики».

Примеры нарушений, на которые указала компания:

  1. В коде содержались контактные данные некоторых партнеров, например телефоны и номера прав водителей.
  2. Стали известны случаи, когда логику работы сервисов корректировали не алгоритмами, а «костылями» — временным решениями, реализованными неоптимально и «впопыхах».
  3. В «Яндекс-лавке» существовала возможность ручной настройки рекомендаций товаров без пометки о рекламе.
  4. Приоритетная поддержка для отдельных групп пользователей в «Яндекс-такси» и «Яндекс-еде».
  5. Части кода содержали слова, которые не влияли на работу сервисов, но были оскорбительны для людей разных рас и национальностей.

В «Яндексе» отметили, что фрагменты кода содержат тестовые алгоритмы, которые использовались внутри компании для проверки сервисов. Например, для улучшения качества работы «Алисы» в бета-версии для сотрудников применялась настройка, включавшая микрофон устройства в случайные моменты без упоминания имени ассистента.

Большинство проблем появилось из-за попыток вручную внести в сервис улучшение или устранить ошибку, отметили в компании. В будущем «Яндекс» сохранит политику нулевой терпимости к багам, позволяющей быстро внедрять изменения, но пересмотрит способы ее реализации.

В компании принесли извинения всем пользователям и партнерам, а также заявили, что сейчас им «очень стыдно».

Крупнейший слив

В сеть попали 44,7 гигабайт исходных кодов большей части сервисов «Яндекса» – от почты и агрегатора такси, до музыки и облака. Об этом сообщает Telegram-канал «Базы данных/ БД/ Утечки информации/Архив». Проприетарный исходный код был опубликован в онлайн-сообществе BreachForums.

Коды выложены с комментариями и документацией. Раздача содержит отдельные архивы (.tar.bz2), по названиям которых можно идентифицировать конкретные сервисы «Яндекса». Среди них поисковая система и индексирующий бот, «Яндекс.карты», «Алиса», «Яндекс.такси», «Яндекс.директ», «Яндекс.почта», «Яндекс.диск», «Яндекс.маркет», «Яндекс.путешествия», «Яндекс 360», «Яндекс.облако», «Яндекс.pay», «Яндекс.метрика». Есть в файлах также серверная часть больше части других сервисов компании.

«Судя по всему, слили приватный GitLab компании», – пишут авторы Telegram-канала.

В марте 2022 г. произошла крупная утечка данных пользователей «Яндекс.еды»

Позже «Яндекс» подтвердил CNews, что были опубликованы старые исходные коды нескольких проектов из внутреннего репозитория, инструмента для разработчиков, который необходим им для работы с кодом. Злоумышленники выложили архив в открытый доступ, заявляя, что он был скачан в июле 2022 г.

«Никакого взлома «Яндекса» не было, – уточнили представители компании. – Служба безопасности «Яндекса» обнаружила в открытом доступе фрагменты кода из внутреннего репозитория. Однако их содержимое отличается от текущей версии репозитория, которая используется в сервисах «Яндекса»».

В компании заявили, что проводят внутреннее расследование.

Понравилась статья? Поделиться с друзьями:
Life events
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: