Установка программ в linux mint tar gz

Что такое Wine для Линукс

Wine  представляет собой специализированное программное обеспечение, которое позволяет выполнять запуск классический приложений для Виндовс (с расширением *.exe) в среде любого дистрибутива Линукс. Об этом приложении слышали многие пользователи Unix-подобных систем и в некоторой степени оно помогло сэкономить их кучу времени.

Сразу же стоит сказать, что на некоторых дистрибутивах Линукс этот программный продукт установлен «из коробки» (предустановлен и входит в набор стандартных программ), поэтому в них уже можно пытаться запускать EXE-файлы и ошибки операционная система не выдаст.

Для того чтобы узнать, установлено ли приложение в конкретный дистрибутив и какой оно версии, необходимо перейти в консоль и прописать там команду «winecfg». Если окно открылось, то программа установлена. Для просмотра ее версии переходят в раздел «О программе».

Первый запуск и настройка программы Wine

Немаловажный вопрос заключается в том, где и как взять новую версию программного продукта. Если говорить проще, то существует три версии Wine: Stable – стабильная версия без вылетов и багов, которая устанавливается в большинстве случаев, Beta – бета-релиз, являющийся тестовым, и Development Release – особая версия для разработчиков программного обеспечения. Сравнительно недавно была произведена оптимизация всех модулей программы, поэтому можно смело устанавливать любую версию, начиная с 1.6.2.

Какие файлы не стоит открывать в редакторах ресурсов

  1. EXE более гигабайта величиной. В программе установлены ограничения – образ открываемого файла должен разместиться в пределах первого гигабайта памяти.
  2. Файлы, которые создавались в Visual Basic. Секция ресурсов таких файлов содержит только иконку и номер версии. Сам код на VB находится в специальном формате, который не откроется в редакторе ресурсов.
  3. Установщики других программ. В ресурсах хранятся только номер версии и иконка. Внутри таких файлов находится контейнер, который содержит другой, сжатый файл EXE, и программу-распаковщик. Кроме того, для сохранения данных в таких программах используются разные технологии.
  4. Самораспаковывающиеся архивы в виде exe-шников. Это просто архивированная информация и программа для ее распаковки.

Запуск исполняемых файлов на Mac или Linux

То, как исполняемые файлы работают в Windows, полностью отличается от того, как программы работают на других платформах, таких как Linux или macOS. На этих платформах есть исполняемые файлы, но они не в формате EXE.

В Linux, например, любой файл может быть исполняемым, но для его запуска в качестве программы с использованием chmod требуется специальный флаг разрешений. Например, команда chmod + x file предоставит файлу с именем file разрешение на выполнение.

В macOS есть несколько иной метод запуска программного обеспечения. Если приложение не было установлено из App Store, и оно не от разработчика, которого он знает или которому доверяет, то приложение не будет запущено. Вам нужно будет разрешить это в меню «Системные настройки»> «Безопасность и конфиденциальность».

Однако как система на основе Unix macOS поддерживает команду chmod, что позволяет выполнять больше базовых сценариев с помощью приложения Terminal. Если вы, например, разработали сценарий Python, вы можете использовать команду chmod + x для его запуска.

Вы также можете использовать эмулятор WINE для Linux и macOS для запуска и установки EXE-файлов Windows на этих платформах. Разработанный для эмуляции определенных инструкций и библиотек Windows, использование WINE для запуска EXE-файла будет иметь разный уровень успеха.

Вы можете проверить, насколько популярное программное обеспечение будет работать с WINE, проверив База данных WineHQ.

Установка Windows-приложений в Linux Ubuntu с помощью ‘PlayOnLinux’

Как и ‘Wine’, PlayOnLinux обеспечивает уровень совместимости, который позволяет пользователям Linux устанавливать программы и exe-файлы на базе Windows. Новичок в Linuxпользователь сталкивается с проблемами при установке Wine. Однако PlayOnLinux очень легко установить. Она обладает идентичной функциональностью, как и Wine. Кроме того, программа поддерживает широкий спектр приложений. Вы можете назвать его графическим фронт-энд инструментом Wine, который обеспечивает очень простое решение для установки Windows OS.

PlayOnLinux поддерживает популярные приложения Windows, такие как Adobe Photoshop, браузер Safari, MS Office и т.д. Компания исправляет все ошибки и предоставляет пользователям плавный опыт работы с программами, приложениями и .exe файлами установки Windows. Он также поддерживает современные игры и патчи.

http://www.playonlinux.com/en/download.html

Для установки программы используйте следующие пошаговые команды:

wget -q "http://deb.playonlinux.com/public.gpg" -O- | sudo apt-key add -
sudo wget http://deb.playonlinux.com/playonlinux_trusty.list -O /etc/apt/sources.list.d/playonlinux.list
sudo apt-get update
sudo apt-get install playonlinux

Любитель игр может воспользоваться помощью Lutris, чтобы поиграть в простую и стратегическую игру на ПК с Linux. Для установки Lutris используйте следующую команду:

sudo add-apt-repository ppa:lutris-team/lutris
sudo apt update
sudo apt install lutris

В этом руководстве я описал как установить и запустить exe файлы (исполняемые файлы Windows) на компьютере Linux (Ubuntu или Linux Mint PC). На данный момент Wine является единственной программой, которая позволяет устанавливать программы Windows на Linux. Однако PlayOnLinux — это современная альтернатива, которая поможет вам установить .exe в Linux , чтобы вы могли запускать ваши любимые Windows-приложения на вашей Linux OS.

Также полезно: Как играть в Candy Crush Sega на Windows PC

Установить DOSBox

Прежде чем мы перейдем к тому, как использовать приложение DOSBox для игры в классические игры MS-DOS в Linux, вам необходимо установить программу на свой компьютер. К счастью, DOSBox существует уже довольно долгое время в Linux, и почти каждая операционная система Linux, находящаяся в настоящее время в обращении, может загрузить и использовать этот инструмент с помощью различных форматов пакетов, включая DEB, RPM или через пакет Snap, Flatpak, исходный код. код и другие.

Чтобы начать процесс установки, запустите окно терминала на вашем ПК с Linux, используя комбинацию клавиш Ctrl + Alt + T или Ctrl + Shift + T. Затем просмотрите приведенные ниже инструкции командной строки, соответствующие используемой вами операционной системе Linux.

Ubuntu

Чтобы получить эмулятор DOSBox в Ubuntu, используйте диспетчер пакетов Apt и установите пакет «DOSBox».

sudo apt install dosbox

Debian

Нужен эмулятор DOSBox в Debian Linux? Попробуйте выполнить следующую команду Apt-get. Однако имейте в виду, что версия DOSBox в репозитории пакетов Debian может быть устаревшей по сравнению с другими операционными системами.

sudo apt-get install dosbox

Хотите более новую версию DOSBox в вашей системе Debian Linux? Подумайте о том, чтобы пропустить этот метод установки в пользу выпуска Snap или Flatpak, поскольку они обновляются с новыми функциями намного быстрее, чем родной Debian.

Arch Linux

Последний выпуск DOSBox размещен на официальных серверах программного обеспечения Arch Linux. Чтобы заставить его работать в вашей системе, используйте следующую команду пакета Pacman в окне терминала.

sudo pacman -S dosbox

Fedora

Пользователи Fedora Linux, которые хотели бы использовать DOSBox, могут установить его быстро, поскольку проект Fedora содержит его в своих исходных кодах. Чтобы настроить приложение в вашей системе Fedora, используйте команду DNF ниже.

sudo dnf install dosbox -y

OpenSUSE

В OpenSUSE DOSBox можно установить из репозитория программного обеспечения OSS All. Убедитесь, что он включен в вашей системе. Затем запустите окно терминала и используйте команду Zypper, чтобы запустить его.

sudo zypper install dosbox -y

Щелчок

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

Примечание: чтобы установить DOSBox из магазина Snap, у вас должна быть работающая среда выполнения SnapD. Для получения дополнительной информации ознакомьтесь с нашим сообщением по этой теме.

sudo snap install dosbox-x

Flatpak

Как и многие программы в наши дни, DOSBox находится на Flathub как Flatpak. Чтобы заставить его работать, используйте приведенные ниже команды терминала.

Примечание: для использования Flatpaks в Linux требуется среда выполнения Flatpak. Перейдите к этому посту и узнайте, как его настроить, прежде чем продолжить.

flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
sudo flatpak install flathub com.dosbox.DOSBox

Запуск исполняемых файлов в Windows 10

Ничто не мешает вам создавать собственное программное обеспечение, особенно если вы объедините его с пакетами установщика Windows, чтобы упростить установку. Однако для большинства пользователей Windows 10 файлы EXE нужно запускать, а не создавать. Пока вы запускаете программное обеспечение только из источников, которым доверяете, исполняемые файлы должны быть относительно безопасными.

Убедитесь, что вы регулярно выполняете сканирование на наличие вредоносных программ, и, если вы действительно не уверены в том, безопасно ли запускать исполняемый файл, вы можете использовать режим песочницы Windows 10 для запуска программного обеспечения в изолированном контейнере, чтобы проверить его. Если EXE опасен, он не повредит вашу основную установку Windows.

Как запустить exe на Linux — описание всех возможных способов

Часто новые пользователи операционных систем Линукс или Unix, а также любой их разновидности (дистрибутива) пытаются активировать на них исполняемые файлы, созданные в среде Microsoft Windows и предназначенные исключительно для запуска и установки на операционных системах Виндовс. Практически сразу они понимают, что сделать этого стандартными средствами не получится, и огорчаются, но не стоит паниковать раньше времени. В этом материале будет рассказано, как произвести запуск приложений Windows на Linux, что для этого нужно и можно ли обойтись лишь стандартными средствами.

Начало работы

подсистема Windows для Linux поставляется с Windows операционной системой, но ее необходимо включить и установить дистрибутив Linux перед началом использования.

чтобы использовать упрощенную команду-install, необходимо запустить последнюю сборку Windows (сборка 20262 +). Чтобы проверить версию и номер сборки, нажмите клавиши Windows+R, введите winver и нажмите кнопку ОК. обновить можно с помощью меню Параметры или помощника Центр обновления Windows.

Если вы предпочитаете установить дистрибутив Linux, отличный от Ubuntu, или вы предпочитаете выполнить эти действия вручную, дополнительные сведения см. на странице установки WSL .

откройте PowerShell (или Windows командной строки) и введите:

Команда —install выполняет следующие действия:

  • включает дополнительные компоненты WSL и платформы виртуальных машин;
  • скачивает и устанавливает последнюю версию ядра Linux;
  • задает WSL 2 в качестве среды по умолчанию;
  • Скачивает и устанавливает дистрибутив Ubuntu Linux (может потребоваться перезагрузка)

В процессе установки потребуется перезагрузить компьютер.

При возникновении проблем обратитесь к статье об устранении неполадок .

Основы использования Wine

Все файлы программ wine, установленные программы, библиотеки, файлы реестра, конфигурационные файлы находятся в домашнем каталоге, а точнее, в ~/.wine.

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

Папка ~/.wine это префикс, но мы можем создавать для каждой новой программы свой префикс и она будет работать только с ним. Чтобы задать префикс, с которым нужно работать wine используется переменная окружения WINEPREFIX, например:

export WINEPREFIX=~/program

Для разных программ может потребоваться различная архитектура системы, wine может запускать и 64 битные программы, но многим для правильной работы нужна архитектура х86.

Чтобы задать архитектуру используйте переменную WINEARCH. Например, для х86:

export WINEARCH=win32

Также не создавайте папку для нового префикса с помощью mkdir или файлового менеджера, пусть программа сама создаст эту папку при своем первом запуске.

Прослойка совместимости Wine поддерживает далеко не все программы, чтобы проверить поддерживается ли программа Wine вы можете воспользоваться сайтом appdb.winehq.org здесь есть поиск и перечислены все поддерживаемые и не очень программы для Linux.

Запуск приложений Windows на Linux через Wine

На данный момент Wine поддерживает огромное количество различных приложений с Виндовс, но лучше все же пользоваться списками. Там можно точно узнать, работает ли ПО под Вайн, как оно работает и не нужны ли «танцы с бубном» для запуска. Иногда встречается такое ПО, которое работает не совсем гладко или для его настройки приходится попотеть. Некоторые программы не работают вовсе.

Что касается игр, то тут ситуация складывается аналогичным образом. Часть проектов может работать без проблем, для некоторых нужны дополнительные настройки, а часть не будет работать ни под каким предлогом. Также в играх обязательна поддержка ДиректХ. Вначале Вайн поддерживал только девятую версию, но потом начался ввод DirectX 10 и 11. В 2015 году под ними не работало ничего, но ближе к 2019 году поддержку получили многие проекты.

Важно! Еще одной проблемой запуска является производительность в играх и 3D-приложениях. Если с программами, работающими с OpenGL все более-менее нормально, то ДиректХ явно теряет производительность, но это обещают исправить

Запуск выглядит следующим образом:

  1. Скачивают или переносят на флешке необходимый файл с расширением EXE.
  2. Нажимают по нему правой клавишей мыши и выбирают пункт контекстного меню под названием «Открыть файл в другом приложении».
  3. В новом диалоговом окне выбирают строку «Wine – загрузчик Виндовс программ».
  4. Дожидаются открытия нового окна, в котором можно полноценно управлять программой, если она поддерживается Wine.

Если ПО портативное, то с ним работают сразу же, иначе – производят установку.

Выбор файла для загрузки в режиме «Emulator Windows»

Таким образом, было рассмотрено, как в Линуксе запустить файл с расширением EXE. На самом деле это очень просто сделать не только на Убунту, но и на Кали или Минте. Сам по себе Wine представляет оболочку Windows, которая взаимодействует с ней через тоннель API-функций. После установки ПО будет работать в фоновом режиме, и ожидать запуска EXE программ и установщиков.

Источник

Как выполняются Python-скрипты?

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

При запуске скрипта проходит сверху вниз, выполняя каждую из них. Именно таким образом происходит выполнение кода.

Но и это еще не все.

Блок-схема выполнения кода интерпретатором

  • Шаг 1: скрипт или .py-файл компилируется, и из него генерируются бинарные данные. Готовый файл имеет расширение .pyc или .pyo.
  • Шаг 2: генерируется бинарный файл. Он читается интерпретатором для выполнения инструкций.

Это набор инструкций, которые приводят к финальному результату.

Иногда полезно изучать байткод

Если вы планируете стать опытным Python-программистом, то важно уметь понимать его для написания качественного кода

Это также пригодится для принятия решений в процессе

Можно обратить внимание на отдельные факторы и понять, почему определенные функции/структуры данных работают быстрее остальных

VirtualBox

Если ваше приложение упорно отказывается запускаться в перечисленных выше программах, можно пойти на решительные меры и установить его в виртуальной машине. Учтите, что она отнимает гораздо больше системных ресурсов, поэтому использовать её стоит в крайних случаях.

Для запуска приложения в виртуалке вам понадобится установочный образ Windows в формате ISO. Загрузите и установите VirtualBox, создайте в нём виртуальную машину, укажите ей ISO с Windows, а затем просто установите систему как обычно.

Неоспоримый плюс виртуальной машины — в ней работает полноценная операционная система, а значит, запустится абсолютно всё. Минус — прожорливость в плане системных ресурсов, да и тратиться на лицензию Windows для виртуалки накладно.

VirtualBox →

Особенности компиляции программ под X-Window

Imakefile и программа xmkmf

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

Идея заключалась в том, чтобы перед компиляцией Makefile автоматически
генерировался специальной утилитой xmkmf, «знающей» про специфику
конкретной системы, из другого файла, под названием Imakefile. В Imakefile же на
некоем специальном языке записывается примерно та же информация, что в Makefile.

Хотя замысел был очень хороший, реализация оставляет желать лучшего.
Во-первых, язык Imakefile’ов — не менее «птичий», чем у Makefile, так что
людей, умеющих их создавать, еще меньше. Во-вторых, xmkmf берет
описание системы из нескольких файлов конфигурации (в глубине директории
/usr/X11R6/), а они зачастую оказываются несовместимы с конкретным
Imakefile, и xmkmf просто завершается с каким-нибудь маловразумительным
сообщением об ошибке.

Тем не менее, большинство программ под X-Window поставляются именно с
Imakefile.

Пример сборки и установки программы под X-Window

В качестве примера рассмотрим сборку и установку программы XRoach (той самой,
что пускает бегать по экрану тараканов). Воспользуемся локальной
копией дистрибутива.

Сначала развернем дистрибутив:

bobby:~/soft% tar xfz ~/xroach.tar.gz
bobby:~/soft% cd xroach/
viper:~/soft/xroach% ls
Imakefile     roach060.xbm  roach165.xbm  roach270.xbm  squish.xbm
README.linux  roach075.xbm  roach180.xbm  roach285.xbm  xroach.a
patchlevel.h  roach090.xbm  roach195.xbm  roach300.xbm  xroach.c
roach000.xbm  roach105.xbm  roach210.xbm  roach315.xbm  xroach.man
roach015.xbm  roach120.xbm  roach225.xbm  roach330.xbm
roach030.xbm  roach135.xbm  roach240.xbm  roach345.xbm
roach045.xbm  roach150.xbm  roach255.xbm  roachmap.h
bobby:~/soft/xroach% _

Прочтя файл README.linux, мы узнаем лишь, что при компиляции должно
быть предупреждение (warning) в строке 373.

Запускаем xmkmf и затем make:

bobby:~/soft/xroach% xmkmf
imake -DUseInstalled -I/usr/X11R6/lib/X11/config
bobby:~/soft/xroach% make
gcc -O2 -fno-strength-reduce     -I/usr/X11R6/include   -Dlinux -D__i3
86__ -D_POSIX_C_SOURCE=199309L -D_POSIX_SOURCE -D_XOPEN_SOURCE=500L -D
_BSD_SOURCE -D_SVID_SOURCE   -DFUNCPROTO=15 -DNARROWPROTO     -c xroac
h.c -o xroach.o
xroach.c: In function `FindRootWindow':
xroach.c:373: warning: passing arg 9 of `XGetWindowProperty' from inco
mpatible pointer type
xroach.c:373: warning: passing arg 12 of `XGetWindowProperty' from in
compatible pointer type
rm -f xroach
gcc -o xroach -O2 -fno-strength-reduce      -L/usr/X11R6/lib xroach.o
 -lXext -lX11   -lm
bobby:~/soft/xroach% _

Теперь, аналогично обычным программам, делаем «make install«:

bobby:~/soft/xroach% su
Password:
bobby:~/soft/xroach# make install
install -c -s  xroach /usr/X11R6/bin/xroach
install in . done
bobby:~/soft/xroach# _

Единственно что, автор поленился сделать автоматическую установку
man-страницы, хотя она и есть. Что ж, не беда — скопируем ее в нужное место
«руками»:

bobby:~/soft/xroach# cp xroach.man /usr/X11R6/man/man1/
bobby:~/soft/xroach# _

Как выполнять код интерактивно

Есть больше 4 способов запустить Python-скрипт интерактивно. Рассмотрим их все подробно.

Использование import для запуска скриптов

Импорт модулей для загрузки скриптов и библиотек используется постоянно. Можно даже написать собственный скрипт (например code1.py) и импортировать его в другой файл без необходимости повторять то же самое.

Вот как нужно импортировать code1.py в новом скрипте.

Копировать

Но таким образом импортируется все содержимое файла code1.py. Это не проблема до тех пор, пока не появляется необходимость, в том, чтобы код был оптимизирован и быстро работал.

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

Вот как это обычно делается.

Копировать

Теперь появляется возможность использовать в новом файле так, будто бы эта функция была написана здесь.

Использование importlib для запуска кода

из importlib позволяет импортировать и исполнять другие Python-скрипты.

Это работает очень просто. Для скрипта code1.py нужно сделать следующее:

Копировать

И нет необходимости добавлять .py в .

Разберем случай, когда есть сложная структура папок, и нужно использовать importlib. Предположим, что структура следующая:

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

Так, для запуска скрипта level3.py можно написать так:

Копировать

Запуск кода с помощью runpy

Модуль ищет и исполняет Python-скрипт без импорта. Он также легко используется, ведь достаточно просто вызывать имя модуля в .

Вот как, например, выполнить code1.py с помощью runpy.

Копировать

Запуск кода динамически

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

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

Копировать

Однако этот способ уже устарел. Он медленный и непредсказуемый, а Python предлагает массу других вариантов.

Общие сведения о разрешениях и правах доступа к файлам в Linux

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

Если вы используете команду ls с параметром -l в файле, вы увидите такой вывод:

Позвольте нам объяснить этот результат с изображением:

Подробно весь вывод:

  • File tipe (Тип файла) : Обозначает тип файла. d означает каталог, – означает обычный файл, l означает символическую ссылку.
  • Permissions (Разрешения) : В этом поле отображается набор разрешений для файла. Я объясню это подробно в следующем разделе.
  • Hard Link Count (Количество жестких ссылок) : показывает, имеет ли файл жесткие ссылки. Счет по умолчанию – один.
  • User (Пользователь) : Пользователь, которому принадлежат файлы.
  • Group (Группа) : Группа, у которой есть доступ к этому файлу. Одновременно может быть только одна группа.
  • File Size (Размер файла) : Размер файла в байтах.
  • Modification time (Время модификации) : Дата и время последнего изменения файла.
  • Filename (Имя файла) : Очевидно, имя файла или каталога.

Теперь, когда вы поняли вывод команды ls -l, давайте сосредоточимся на части разрешения файла.

В приведенной выше команде вы видите разрешение файла, подобное этому в девятизначном формате :

Каждая буква обозначает конкретное разрешение:

  • r: разрешение на чтение
  • w: разрешение на запись
  • x: выполнить разрешение
  • -: не установлено разрешение

Разрешения всегда находятся в порядке читать, писать и выполнять, т. е. rwx. И тогда эти разрешения устанавливаются для всех трех своего рода владельцев (см. раздел прав собственности) в порядке: Пользователь, Группа и Другое.

Эта картина лучше объяснит:

Итак, если вы посмотрите на приведенную выше картинку, вы можете сказать следующие вещи о разрешениях файлов:

  • Файл имеет права на чтение, запись и выполнение для Пользователя, Но кто является владельцем этого файла? У вас есть эта информация на выходе ls -l (т.е. пользователь andreyex).
  • Файл имеет права на чтение и запись для группы, но не выполняется. Какая группа? У вас есть информация о группе на выходе команды ls -l (т.е. группа andreygroup).
  • Файл имеет только разрешение на чтение для других, то есть всех, у кого есть доступ к системе. Вам не нужно знать, что это за другое, потому что «другое» означает всех пользователей.

Теперь, если вы снова увидите всю команду ls -l, вы можете прочитать права на файлы и права собственности вместе.

Файл andreyex.txt принадлежит пользователю andreyex а также andreyex имеет разрешение на чтение, запись и выполнение. Все члены группы andreygroup имеют доступ на чтение и запись к этому файлу, в то время как все остальные имеют доступ только к чтению этого файла.

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

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

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

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

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