summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2017-04-23 21:31:08 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2017-04-23 21:31:08 +0300
commit42bb9bb63a957944a032a4f48db502a7cbd9b74c (patch)
treeb0622cc93bbb60e2dbd6d16ca1c95015b3e0aabf /src
parentUpdate screen (diff)
downloadnheko-42bb9bb63a957944a032a4f48db502a7cbd9b74c.tar.xz
Add full emoji support
Diffstat (limited to 'src')
-rw-r--r--src/EmojiCategory.cc84
-rw-r--r--src/EmojiItemDelegate.cc47
-rw-r--r--src/EmojiPanel.cc247
-rw-r--r--src/EmojiPickButton.cc65
-rw-r--r--src/EmojiProvider.cc1470
-rw-r--r--src/HistoryViewItem.cc6
-rw-r--r--src/TextInputWidget.cc62
-rw-r--r--src/ui/FlatButton.cc10
8 files changed, 1977 insertions, 14 deletions
diff --git a/src/EmojiCategory.cc b/src/EmojiCategory.cc
new file mode 100644
index 00000000..3aa3009b
--- /dev/null
+++ b/src/EmojiCategory.cc
@@ -0,0 +1,84 @@
+/*
+ * nheko Copyright (C) 2017  Konstantinos Sideris <siderisk@auth.gr>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <QDebug>
+#include <QScrollBar>
+
+#include "EmojiCategory.h"
+
+EmojiCategory::EmojiCategory(QString category, QList<Emoji> emoji, QWidget *parent)
+    : QWidget(parent)
+{
+	mainLayout_ = new QVBoxLayout(this);
+	mainLayout_->setMargin(0);
+
+	emojiListView_ = new QListView();
+	itemModel_ = new QStandardItemModel(this);
+
+	delegate_ = new EmojiItemDelegate(this);
+	data_ = new Emoji;
+
+	emojiListView_->setItemDelegate(delegate_);
+	emojiListView_->setSpacing(5);
+	emojiListView_->setModel(itemModel_);
+	emojiListView_->setViewMode(QListView::IconMode);
+	emojiListView_->setFlow(QListView::LeftToRight);
+	emojiListView_->setResizeMode(QListView::Adjust);
+	emojiListView_->verticalScrollBar()->setEnabled(false);
+	emojiListView_->horizontalScrollBar()->setEnabled(false);
+
+	const int cols = 7;
+	const int rows = emoji.size() / 7;
+
+	// TODO: Be precise here. Take the parent into consideration.
+	emojiListView_->setFixedSize(cols * 50 + 20, rows * 50 + 20);
+	emojiListView_->setGridSize(QSize(50, 50));
+	emojiListView_->setDragEnabled(false);
+	emojiListView_->setEditTriggers(QAbstractItemView::NoEditTriggers);
+
+	for (const auto &e : emoji) {
+		data_->unicode = e.unicode;
+
+		auto item = new QStandardItem;
+		item->setSizeHint(QSize(24, 24));
+
+		QVariant unicode(data_->unicode);
+		item->setData(unicode.toString(), Qt::UserRole);
+
+		itemModel_->appendRow(item);
+	}
+
+	category_ = new QLabel(category, this);
+	category_->setStyleSheet(
+		"color: #ccc;"
+		"margin: 20px 0px 15px 8px;"
+		"font-weight: 500;"
+		"font-size: 12px;");
+
+	auto labelLayout_ = new QHBoxLayout();
+	labelLayout_->addWidget(category_);
+	labelLayout_->addStretch(1);
+
+	mainLayout_->addLayout(labelLayout_);
+	mainLayout_->addWidget(emojiListView_);
+
+	connect(emojiListView_, &QListView::clicked, this, &EmojiCategory::clickIndex);
+}
+
+EmojiCategory::~EmojiCategory()
+{
+}
diff --git a/src/EmojiItemDelegate.cc b/src/EmojiItemDelegate.cc
new file mode 100644
index 00000000..13c43b3e
--- /dev/null
+++ b/src/EmojiItemDelegate.cc
@@ -0,0 +1,47 @@
+/*
+ * nheko Copyright (C) 2017  Konstantinos Sideris <siderisk@auth.gr>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <QDebug>
+#include <QPainter>
+
+#include "EmojiItemDelegate.h"
+
+EmojiItemDelegate::EmojiItemDelegate(QObject *parent)
+    : QStyledItemDelegate(parent)
+{
+	data_ = new Emoji;
+}
+
+EmojiItemDelegate::~EmojiItemDelegate()
+{
+	delete data_;
+}
+
+void EmojiItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
+{
+	Q_UNUSED(index);
+
+	QStyleOptionViewItem viewOption(option);
+
+	auto emoji = index.data(Qt::UserRole).toString();
+
+	QFont font("Emoji One");
+	font.setPixelSize(19);
+
+	painter->setFont(font);
+	painter->drawText(viewOption.rect, emoji);
+}
diff --git a/src/EmojiPanel.cc b/src/EmojiPanel.cc
new file mode 100644
index 00000000..afe664f1
--- /dev/null
+++ b/src/EmojiPanel.cc
@@ -0,0 +1,247 @@
+/*
+ * nheko Copyright (C) 2017  Konstantinos Sideris <siderisk@auth.gr>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <QDebug>
+#include <QLabel>
+#include <QPushButton>
+#include <QScrollArea>
+#include <QScrollBar>
+#include <QVBoxLayout>
+
+#include "Avatar.h"
+#include "EmojiCategory.h"
+#include "EmojiPanel.h"
+#include "FlatButton.h"
+
+EmojiPanel::EmojiPanel(QWidget *parent)
+    : QFrame(parent)
+{
+	setStyleSheet(
+		"QWidget {background: #f8fbfe; color: #e8e8e8; border: none;}"
+		"QScrollBar:vertical { background-color: #f8fbfe; width: 8px; border-radius: 20px; margin: 0px 2px 0 2px; }"
+		"QScrollBar::handle:vertical { border-radius : 50px; background-color : #d6dde3; }"
+		"QScrollBar::add-line:vertical { border: none; background: none; }"
+		"QScrollBar::sub-line:vertical { border: none; background: none; }");
+
+	setParent(0);  // Create TopLevel-Widget
+	setAttribute(Qt::WA_NoSystemBackground, true);
+	setAttribute(Qt::WA_TranslucentBackground, true);
+	setWindowFlags(Qt::FramelessWindowHint | Qt::ToolTip);
+
+	// TODO: Make it MainWindow aware
+	auto main_frame_ = new QFrame(this);
+	main_frame_->setMinimumSize(370, 350);
+	main_frame_->setMaximumSize(370, 350);
+
+	auto top_layout = new QVBoxLayout(this);
+	top_layout->addWidget(main_frame_);
+	top_layout->setMargin(0);
+
+	auto content_layout = new QVBoxLayout(main_frame_);
+	content_layout->setMargin(0);
+
+	auto emoji_categories = new QFrame(main_frame_);
+	emoji_categories->setStyleSheet("background-color: #f2f2f2");
+
+	auto categories_layout = new QHBoxLayout(emoji_categories);
+	categories_layout->setSpacing(6);
+	categories_layout->setMargin(5);
+
+	auto people_category = new FlatButton(emoji_categories);
+	people_category->setIcon(QIcon(":/icons/icons/emoji-categories/people.png"));
+	people_category->setIconSize(QSize(category_icon_size_, category_icon_size_));
+	people_category->setForegroundColor("gray");
+
+	auto nature_category = new FlatButton(emoji_categories);
+	nature_category->setIcon(QIcon(":/icons/icons/emoji-categories/nature.png"));
+	nature_category->setIconSize(QSize(category_icon_size_, category_icon_size_));
+	nature_category->setForegroundColor("gray");
+
+	auto food_category = new FlatButton(emoji_categories);
+	food_category->setIcon(QIcon(":/icons/icons/emoji-categories/foods.png"));
+	food_category->setIconSize(QSize(category_icon_size_, category_icon_size_));
+	food_category->setForegroundColor("gray");
+
+	auto activity_category = new FlatButton(emoji_categories);
+	activity_category->setIcon(QIcon(":/icons/icons/emoji-categories/activity.png"));
+	activity_category->setIconSize(QSize(category_icon_size_, category_icon_size_));
+	activity_category->setForegroundColor("gray");
+
+	auto travel_category = new FlatButton(emoji_categories);
+	travel_category->setIcon(QIcon(":/icons/icons/emoji-categories/travel.png"));
+	travel_category->setIconSize(QSize(category_icon_size_, category_icon_size_));
+	travel_category->setForegroundColor("gray");
+
+	auto objects_category = new FlatButton(emoji_categories);
+	objects_category->setIcon(QIcon(":/icons/icons/emoji-categories/objects.png"));
+	objects_category->setIconSize(QSize(category_icon_size_, category_icon_size_));
+	objects_category->setForegroundColor("gray");
+
+	auto symbols_category = new FlatButton(emoji_categories);
+	symbols_category->setIcon(QIcon(":/icons/icons/emoji-categories/symbols.png"));
+	symbols_category->setIconSize(QSize(category_icon_size_, category_icon_size_));
+	symbols_category->setForegroundColor("gray");
+
+	auto flags_category = new FlatButton(emoji_categories);
+	flags_category->setIcon(QIcon(":/icons/icons/emoji-categories/flags.png"));
+	flags_category->setIconSize(QSize(category_icon_size_, category_icon_size_));
+	flags_category->setForegroundColor("gray");
+
+	categories_layout->addWidget(people_category);
+	categories_layout->addWidget(nature_category);
+	categories_layout->addWidget(food_category);
+	categories_layout->addWidget(activity_category);
+	categories_layout->addWidget(travel_category);
+	categories_layout->addWidget(objects_category);
+	categories_layout->addWidget(symbols_category);
+	categories_layout->addWidget(flags_category);
+
+	scroll_area_ = new QScrollArea(this);
+	scroll_area_->setWidgetResizable(true);
+	scroll_area_->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+
+	auto scroll_widget_ = new QWidget(this);
+	auto scroll_layout_ = new QVBoxLayout(scroll_widget_);
+
+	scroll_layout_->setMargin(0);
+	scroll_area_->setWidget(scroll_widget_);
+
+	auto people_emoji = new EmojiCategory("Smileys & People", emoji_provider_.people, scroll_widget_);
+	scroll_layout_->addWidget(people_emoji);
+
+	auto nature_emoji = new EmojiCategory("Animals & Nature", emoji_provider_.nature, scroll_widget_);
+	scroll_layout_->addWidget(nature_emoji);
+
+	auto food_emoji = new EmojiCategory("Food & Drink", emoji_provider_.food, scroll_widget_);
+	scroll_layout_->addWidget(food_emoji);
+
+	auto activity_emoji = new EmojiCategory("Activity", emoji_provider_.activity, scroll_widget_);
+	scroll_layout_->addWidget(activity_emoji);
+
+	auto travel_emoji = new EmojiCategory("Travel & Places", emoji_provider_.travel, scroll_widget_);
+	scroll_layout_->addWidget(travel_emoji);
+
+	auto objects_emoji = new EmojiCategory("Objects", emoji_provider_.objects, scroll_widget_);
+	scroll_layout_->addWidget(objects_emoji);
+
+	auto symbols_emoji = new EmojiCategory("Symbols", emoji_provider_.symbols, scroll_widget_);
+	scroll_layout_->addWidget(symbols_emoji);
+
+	auto flags_emoji = new EmojiCategory("Flags", emoji_provider_.flags, scroll_widget_);
+	scroll_layout_->addWidget(flags_emoji);
+
+	content_layout->addStretch(1);
+	content_layout->addWidget(scroll_area_);
+	content_layout->addWidget(emoji_categories);
+
+	setLayout(top_layout);
+
+	// TODO: Add parallel animation with geometry
+	opacity_ = new QGraphicsOpacityEffect(this);
+	opacity_->setOpacity(1.0);
+
+	setGraphicsEffect(opacity_);
+
+	animation_ = new QPropertyAnimation(opacity_, "opacity", this);
+	animation_->setDuration(180);
+	animation_->setStartValue(1.0);
+	animation_->setEndValue(0.0);
+
+	connect(people_emoji, &EmojiCategory::emojiSelected, this, &EmojiPanel::emojiSelected);
+	connect(people_category, &QPushButton::clicked, [this, people_emoji]() {
+		this->showEmojiCategory(people_emoji);
+	});
+
+	connect(nature_emoji, &EmojiCategory::emojiSelected, this, &EmojiPanel::emojiSelected);
+	connect(nature_category, &QPushButton::clicked, [this, nature_emoji]() {
+		this->showEmojiCategory(nature_emoji);
+	});
+
+	connect(food_emoji, &EmojiCategory::emojiSelected, this, &EmojiPanel::emojiSelected);
+	connect(food_category, &QPushButton::clicked, [this, food_emoji]() {
+		this->showEmojiCategory(food_emoji);
+	});
+
+	connect(activity_emoji, &EmojiCategory::emojiSelected, this, &EmojiPanel::emojiSelected);
+	connect(activity_category, &QPushButton::clicked, [this, activity_emoji]() {
+		this->showEmojiCategory(activity_emoji);
+	});
+
+	connect(travel_emoji, &EmojiCategory::emojiSelected, this, &EmojiPanel::emojiSelected);
+	connect(travel_category, &QPushButton::clicked, [this, travel_emoji]() {
+		this->showEmojiCategory(travel_emoji);
+	});
+
+	connect(objects_emoji, &EmojiCategory::emojiSelected, this, &EmojiPanel::emojiSelected);
+	connect(objects_category, &QPushButton::clicked, [this, objects_emoji]() {
+		this->showEmojiCategory(objects_emoji);
+	});
+
+	connect(symbols_emoji, &EmojiCategory::emojiSelected, this, &EmojiPanel::emojiSelected);
+	connect(symbols_category, &QPushButton::clicked, [this, symbols_emoji]() {
+		this->showEmojiCategory(symbols_emoji);
+	});
+
+	connect(flags_emoji, &EmojiCategory::emojiSelected, this, &EmojiPanel::emojiSelected);
+	connect(flags_category, &QPushButton::clicked, [this, flags_emoji]() {
+		this->showEmojiCategory(flags_emoji);
+	});
+
+	connect(animation_, &QPropertyAnimation::finished, [this]() {
+		if (animation_->direction() == QAbstractAnimation::Forward)
+			this->hide();
+	});
+}
+
+void EmojiPanel::showEmojiCategory(const EmojiCategory *category)
+{
+	auto posToGo = category->mapToParent(QPoint()).y();
+	auto current = scroll_area_->verticalScrollBar()->value();
+
+	if (current == posToGo)
+		return;
+
+	// HACK
+	// If we want to go to a previous category and position the label at the top
+	// the 6*50 offset won't work because not all the categories have the same height.
+	// To ensure the category is at the top, we move to the top
+	// and go as normal to the next category.
+	if (current > posToGo)
+		this->scroll_area_->ensureVisible(0, 0, 0, 0);
+
+	posToGo += 6 * 50;
+	this->scroll_area_->ensureVisible(0, posToGo, 0, 0);
+}
+
+void EmojiPanel::leaveEvent(QEvent *event)
+{
+	Q_UNUSED(event);
+
+	fadeOut();
+}
+
+void EmojiPanel::fadeOut()
+{
+	animation_->setDirection(QAbstractAnimation::Forward);
+	animation_->start();
+}
+
+void EmojiPanel::fadeIn()
+{
+	animation_->setDirection(QAbstractAnimation::Backward);
+	animation_->start();
+}
diff --git a/src/EmojiPickButton.cc b/src/EmojiPickButton.cc
new file mode 100644
index 00000000..d8391257
--- /dev/null
+++ b/src/EmojiPickButton.cc
@@ -0,0 +1,65 @@
+/*
+ * nheko Copyright (C) 2017  Konstantinos Sideris <siderisk@auth.gr>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <QDebug>
+
+#include "EmojiPickButton.h"
+
+EmojiPickButton::EmojiPickButton(QWidget *parent)
+    : FlatButton(parent)
+    , panel_{nullptr}
+{
+}
+
+void EmojiPickButton::enterEvent(QEvent *e)
+{
+	Q_UNUSED(e);
+
+	if (panel_ == nullptr) {
+		panel_ = new EmojiPanel(this);
+		connect(panel_, &EmojiPanel::emojiSelected, this, &EmojiPickButton::emojiSelected);
+	}
+
+	QPoint pos(rect().x(), rect().y());
+	pos = this->mapToGlobal(pos);
+
+	auto panel_size = panel_->sizeHint();
+
+	auto x = pos.x() - panel_size.width() + horizontal_distance_;
+	auto y = pos.y() - panel_size.height() - vertical_distance_;
+
+	panel_->move(x, y);
+	panel_->fadeIn();
+	panel_->show();
+}
+
+void EmojiPickButton::leaveEvent(QEvent *e)
+{
+	Q_UNUSED(e);
+
+	if (panel_->underMouse())
+		return;
+
+	auto pos = QCursor::pos();
+	auto panel_geometry = panel_->geometry();
+	panel_geometry.adjust(0, 0, 0, vertical_distance_);
+
+	if (panel_geometry.contains(pos))
+		return;
+
+	panel_->fadeOut();
+}
diff --git a/src/EmojiProvider.cc b/src/EmojiProvider.cc
new file mode 100644
index 00000000..e10d4222
--- /dev/null
+++ b/src/EmojiProvider.cc
@@ -0,0 +1,1470 @@
+/*
+ * nheko Copyright (C) 2017  Konstantinos Sideris <siderisk@auth.gr>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <QByteArray>
+#include <QDebug>
+#include <QFile>
+#include <QJsonArray>
+#include <QJsonDocument>
+#include <QJsonObject>
+
+#include "EmojiProvider.h"
+
+const QList<Emoji> EmojiProvider::people = {
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x80"), ":grinning:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x81"), ":grin:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x82"), ":joy:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xa3"), ":rofl:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x83"), ":smiley:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x84"), ":smile:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x85"), ":sweat_smile:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x86"), ":laughing:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x89"), ":wink:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x8a"), ":blush:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x8b"), ":yum:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x8e"), ":sunglasses:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x8d"), ":heart_eyes:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x98"), ":kissing_heart:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x97"), ":kissing:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x99"), ":kissing_smiling_eyes:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x9a"), ":kissing_closed_eyes:"},
+	Emoji{QString::fromUtf8("\xe2\x98\xba"), ":relaxed:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x99\x82"), ":slight_smile:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\x97"), ":hugging:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\x94"), ":thinking:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x90"), ":neutral_face:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x91"), ":expressionless:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xb6"), ":no_mouth:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x99\x84"), ":rolling_eyes:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x8f"), ":smirk:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xa3"), ":persevere:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xa5"), ":disappointed_relieved:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xae"), ":open_mouth:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\x90"), ":zipper_mouth:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xaf"), ":hushed:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xaa"), ":sleepy:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xab"), ":tired_face:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xb4"), ":sleeping:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x8c"), ":relieved:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\x93"), ":nerd:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x9b"), ":stuck_out_tongue:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x9c"), ":stuck_out_tongue_winking_eye:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x9d"), ":stuck_out_tongue_closed_eyes:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xa4"), ":drooling_face:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x92"), ":unamused:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x93"), ":sweat:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x94"), ":pensive:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x95"), ":confused:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x99\x83"), ":upside_down:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\x91"), ":money_mouth:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xb2"), ":astonished:"},
+	Emoji{QString::fromUtf8("\xe2\x98\xb9"), ":frowning2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x99\x81"), ":slight_frown:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x96"), ":confounded:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x9e"), ":disappointed:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x9f"), ":worried:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xa4"), ":triumph:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xa2"), ":cry:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xad"), ":sob:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xa6"), ":frowning:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xa7"), ":anguished:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xa8"), ":fearful:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xa9"), ":weary:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xac"), ":grimacing:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xb0"), ":cold_sweat:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xb1"), ":scream:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xb3"), ":flushed:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xb5"), ":dizzy_face:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xa1"), ":rage:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xa0"), ":angry:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x87"), ":innocent:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xa0"), ":cowboy:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xa1"), ":clown:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xa5"), ":lying_face:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xb7"), ":mask:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\x92"), ":thermometer_face:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\x95"), ":head_bandage:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xa2"), ":nauseated_face:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xa7"), ":sneezing_face:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\x88"), ":smiling_imp:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xbf"), ":imp:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xb9"), ":japanese_ogre:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xba"), ":japanese_goblin:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x80"), ":skull:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xbb"), ":ghost:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xbd"), ":alien:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\x96"), ":robot:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xa9"), ":poop:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xba"), ":smiley_cat:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xb8"), ":smile_cat:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xb9"), ":joy_cat:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xbb"), ":heart_eyes_cat:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xbc"), ":smirk_cat:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xbd"), ":kissing_cat:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x99\x80"), ":scream_cat:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xbf"), ":crying_cat_face:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x98\xbe"), ":pouting_cat:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xa6"), ":boy:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xa7"), ":girl:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xa8"), ":man:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xa9"), ":woman:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xb4"), ":older_man:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xb5"), ":older_woman:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xb6"), ":baby:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xbc"), ":angel:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xae"), ":cop:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\xb5"), ":spy:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x82"), ":guardsman:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xb7"), ":construction_worker:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xb3"), ":man_with_turban:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xb1"), ":person_with_blond_hair:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x85"), ":santa:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xb6"), ":mrs_claus:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xb8"), ":princess:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xb4"), ":prince:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xb0"), ":bride_with_veil:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xb5"), ":man_in_tuxedo:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xb0"), ":pregnant_woman:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xb2"), ":man_with_gua_pi_mao:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x99\x8d"), ":person_frowning:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x99\x8e"), ":person_with_pouting_face:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x99\x85"), ":no_good:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x99\x86"), ":ok_woman:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x81"), ":information_desk_person:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x99\x8b"), ":raising_hand:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x99\x87"), ":bow:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xa6"), ":face_palm:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xb7"), ":shrug:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x86"), ":massage:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x87"), ":haircut:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xb6"), ":walking:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x83"), ":runner:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x83"), ":dancer:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\xba"), ":man_dancing:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xaf"), ":dancers:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x97\xa3"), ":speaking_head:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xa4"), ":bust_in_silhouette:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xa5"), ":busts_in_silhouette:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xab"), ":couple:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xac"), ":two_men_holding_hands:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xad"), ":two_women_holding_hands:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x8f"), ":couplekiss:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x91"), ":couple_with_heart:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xaa"), ":family:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xaa"), ":muscle:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xb3"), ":selfie:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x88"), ":point_left:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x89"), ":point_right:"},
+	Emoji{QString::fromUtf8("\xe2\x98\x9d"), ":point_up:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x86"), ":point_up_2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x96\x95"), ":middle_finger:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x87"), ":point_down:"},
+	Emoji{QString::fromUtf8("\xe2\x9c\x8c"), ":v:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\x9e"), ":fingers_crossed:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x96\x96"), ":vulcan:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\x98"), ":metal:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\x99"), ":call_me:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x96\x90"), ":hand_splayed:"},
+	Emoji{QString::fromUtf8("\xe2\x9c\x8b"), ":raised_hand:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x8c"), ":ok_hand:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x8d"), ":thumbsup:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x8e"), ":thumbsdown:"},
+	Emoji{QString::fromUtf8("\xe2\x9c\x8a"), ":fist:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x8a"), ":punch:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\x9b"), ":left_facing_fist:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\x9c"), ":right_facing_fist:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\x9a"), ":raised_back_of_hand:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x8b"), ":wave:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x8f"), ":clap:"},
+	Emoji{QString::fromUtf8("\xe2\x9c\x8d"), ":writing_hand:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x90"), ":open_hands:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x99\x8c"), ":raised_hands:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x99\x8f"), ":pray:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\x9d"), ":handshake:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x85"), ":nail_care:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x82"), ":ear:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x83"), ":nose:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xa3"), ":footprints:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x80"), ":eyes:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x81"), ":eye:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x85"), ":tongue:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x84"), ":lips:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x8b"), ":kiss:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xa4"), ":zzz:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x93"), ":eyeglasses:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\xb6"), ":dark_sunglasses:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x94"), ":necktie:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x95"), ":shirt:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x96"), ":jeans:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x97"), ":dress:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x98"), ":kimono:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x99"), ":bikini:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x9a"), ":womans_clothes:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x9b"), ":purse:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x9c"), ":handbag:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x9d"), ":pouch:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x92"), ":school_satchel:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x9e"), ":mans_shoe:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x9f"), ":athletic_shoe:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xa0"), ":high_heel:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xa1"), ":sandal:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xa2"), ":boot:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x91"), ":crown:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x92"), ":womans_hat:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xa9"), ":tophat:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x93"), ":mortar_board:"},
+	Emoji{QString::fromUtf8("\xe2\x9b\x91"), ":helmet_with_cross:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x84"), ":lipstick:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x8d"), ":ring:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x82"), ":closed_umbrella:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xbc"), ":briefcase:"},
+};
+
+const QList<Emoji> EmojiProvider::nature = {
+	Emoji{QString::fromUtf8("\xf0\x9f\x99\x88"), ":see_no_evil:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x99\x89"), ":hear_no_evil:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x99\x8a"), ":speak_no_evil:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xa6"), ":sweat_drops:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xa8"), ":dash:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xb5"), ":monkey_face:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x92"), ":monkey:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa6\x8d"), ":gorilla:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xb6"), ":dog:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x95"), ":dog2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xa9"), ":poodle:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xba"), ":wolf:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa6\x8a"), ":fox:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xb1"), ":cat:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x88"), ":cat2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa6\x81"), ":lion_face:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xaf"), ":tiger:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x85"), ":tiger2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x86"), ":leopard:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xb4"), ":horse:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x8e"), ":racehorse:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa6\x8c"), ":deer:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa6\x84"), ":unicorn:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xae"), ":cow:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x82"), ":ox:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x83"), ":water_buffalo:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x84"), ":cow2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xb7"), ":pig:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x96"), ":pig2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x97"), ":boar:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xbd"), ":pig_nose:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x8f"), ":ram:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x91"), ":sheep:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x90"), ":goat:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xaa"), ":dromedary_camel:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xab"), ":camel:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x98"), ":elephant:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa6\x8f"), ":rhino:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xad"), ":mouse:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x81"), ":mouse2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x80"), ":rat:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xb9"), ":hamster:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xb0"), ":rabbit:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x87"), ":rabbit2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xbf"), ":chipmunk:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa6\x87"), ":bat:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xbb"), ":bear:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xa8"), ":koala:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xbc"), ":panda_face:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xbe"), ":feet:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa6\x83"), ":turkey:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x94"), ":chicken:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x93"), ":rooster:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xa3"), ":hatching_chick:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xa4"), ":baby_chick:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xa5"), ":hatched_chick:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xa6"), ":bird:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xa7"), ":penguin:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\x8a"), ":dove:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa6\x85"), ":eagle:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa6\x86"), ":duck:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa6\x89"), ":owl:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xb8"), ":frog:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x8a"), ":crocodile:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xa2"), ":turtle:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa6\x8e"), ":lizard:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x8d"), ":snake:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xb2"), ":dragon_face:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x89"), ":dragon:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xb3"), ":whale:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x8b"), ":whale2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xac"), ":dolphin:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x9f"), ":fish:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xa0"), ":tropical_fish:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\xa1"), ":blowfish:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa6\x88"), ":shark:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x99"), ":octopus:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x9a"), ":shell:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa6\x80"), ":crab:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa6\x90"), ":shrimp:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa6\x91"), ":squid:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa6\x8b"), ":butterfly:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x8c"), ":snail:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x9b"), ":bug:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x9c"), ":ant:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x9d"), ":bee:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x90\x9e"), ":beetle:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\xb7"), ":spider:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\xb8"), ":spider_web:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa6\x82"), ":scorpion:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x90"), ":bouquet:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xb8"), ":cherry_blossom:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\xb5"), ":rosette:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xb9"), ":rose:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa5\x80"), ":wilted_rose:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xba"), ":hibiscus:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xbb"), ":sunflower:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xbc"), ":blossom:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xb7"), ":tulip:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xb1"), ":seedling:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xb2"), ":evergreen_tree:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xb3"), ":deciduous_tree:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xb4"), ":palm_tree:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xb5"), ":cactus:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xbe"), ":ear_of_rice:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xbf"), ":herb:"},
+	Emoji{QString::fromUtf8("\xe2\x98\x98"), ":shamrock:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x80"), ":four_leaf_clover:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x81"), ":maple_leaf:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x82"), ":fallen_leaf:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x83"), ":leaves:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x84"), ":mushroom:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xb0"), ":chestnut:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x8d"), ":earth_africa:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x8e"), ":earth_americas:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x8f"), ":earth_asia:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x91"), ":new_moon:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x92"), ":waxing_crescent_moon:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x93"), ":first_quarter_moon:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x94"), ":waxing_gibbous_moon:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x95"), ":full_moon:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x96"), ":waning_gibbous_moon:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x97"), ":last_quarter_moon:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x98"), ":waning_crescent_moon:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x99"), ":crescent_moon:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x9a"), ":new_moon_with_face:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x9b"), ":first_quarter_moon_with_face:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x9c"), ":last_quarter_moon_with_face:"},
+	Emoji{QString::fromUtf8("\xe2\x98\x80"), ":sunny:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x9d"), ":full_moon_with_face:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x9e"), ":sun_with_face:"},
+	Emoji{QString::fromUtf8("\xe2\xad\x90"), ":star:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x9f"), ":star2:"},
+	Emoji{QString::fromUtf8("\xe2\x98\x81"), ":cloud:"},
+	Emoji{QString::fromUtf8("\xe2\x9b\x85"), ":partly_sunny:"},
+	Emoji{QString::fromUtf8("\xe2\x9b\x88"), ":thunder_cloud_rain:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xa4"), ":white_sun_small_cloud:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xa5"), ":white_sun_cloud:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xa6"), ":white_sun_rain_cloud:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xa7"), ":cloud_rain:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xa8"), ":cloud_snow:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xa9"), ":cloud_lightning:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xaa"), ":cloud_tornado:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xab"), ":fog:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xac"), ":wind_blowing_face:"},
+	Emoji{QString::fromUtf8("\xe2\x98\x82"), ":umbrella2:"},
+	Emoji{QString::fromUtf8("\xe2\x98\x94"), ":umbrella:"},
+	Emoji{QString::fromUtf8("\xe2\x9a\xa1"), ":zap:"},
+	Emoji{QString::fromUtf8("\xe2\x9d\x84"), ":snowflake:"},
+	Emoji{QString::fromUtf8("\xe2\x98\x83"), ":snowman2:"},
+	Emoji{QString::fromUtf8("\xe2\x9b\x84"), ":snowman:"},
+	Emoji{QString::fromUtf8("\xe2\x98\x84"), ":comet:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xa5"), ":fire:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xa7"), ":droplet:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x8a"), ":ocean:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x83"), ":jack_o_lantern:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x84"), ":christmas_tree:"},
+	Emoji{QString::fromUtf8("\xe2\x9c\xa8"), ":sparkles:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x8b"), ":tanabata_tree:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x8d"), ":bamboo:"},
+};
+
+const QList<Emoji> EmojiProvider::food = {
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x87"), ":grapes:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x88"), ":melon:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x89"), ":watermelon:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x8a"), ":tangerine:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x8b"), ":lemon:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x8c"), ":banana:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x8d"), ":pineapple:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x8e"), ":apple:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x8f"), ":green_apple:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x90"), ":pear:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x91"), ":peach:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x92"), ":cherries:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x93"), ":strawberry:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa5\x9d"), ":kiwi:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x85"), ":tomato:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa5\x91"), ":avocado:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x86"), ":eggplant:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa5\x94"), ":potato:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa5\x95"), ":carrot:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xbd"), ":corn:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xb6"), ":hot_pepper:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa5\x92"), ":cucumber:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa5\x9c"), ":peanuts:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x9e"), ":bread:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa5\x90"), ":croissant:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa5\x96"), ":french_bread:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa5\x9e"), ":pancakes:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa7\x80"), ":cheese:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x96"), ":meat_on_bone:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x97"), ":poultry_leg:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa5\x93"), ":bacon:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x94"), ":hamburger:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x9f"), ":fries:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x95"), ":pizza:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xad"), ":hotdog:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xae"), ":taco:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xaf"), ":burrito:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa5\x99"), ":stuffed_flatbread:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa5\x9a"), ":egg:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xb3"), ":cooking:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa5\x98"), ":shallow_pan_of_food:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xb2"), ":stew:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa5\x97"), ":salad:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xbf"), ":popcorn:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xb1"), ":bento:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x98"), ":rice_cracker:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x99"), ":rice_ball:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x9a"), ":rice:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x9b"), ":curry:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x9c"), ":ramen:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\x9d"), ":spaghetti:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xa0"), ":sweet_potato:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xa2"), ":oden:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xa3"), ":sushi:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xa4"), ":fried_shrimp:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xa5"), ":fish_cake:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xa1"), ":dango:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xa6"), ":icecream:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xa7"), ":shaved_ice:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xa8"), ":ice_cream:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xa9"), ":doughnut:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xaa"), ":cookie:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x82"), ":birthday:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xb0"), ":cake:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xab"), ":chocolate_bar:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xac"), ":candy:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xad"), ":lollipop:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xae"), ":custard:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xaf"), ":honey_pot:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xbc"), ":baby_bottle:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa5\x9b"), ":milk:"},
+	Emoji{QString::fromUtf8("\xe2\x98\x95"), ":coffee:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xb5"), ":tea:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xb6"), ":sake:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xbe"), ":champagne:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xb7"), ":wine_glass:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xb8"), ":cocktail:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xb9"), ":tropical_drink:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xba"), ":beer:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xbb"), ":beers:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa5\x82"), ":champagne_glass:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa5\x83"), ":tumbler_glass:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xbd"), ":fork_knife_plate:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8d\xb4"), ":fork_and_knife:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa5\x84"), ":spoon:"},
+};
+
+const QList<Emoji> EmojiProvider::activity = {
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\xbe"), ":space_invader:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\xb4"), ":levitate:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xba"), ":fencer:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x87"), ":horse_racing:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x87\xf0\x9f\x8f\xbb"), ":horse_racing_tone1:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x87\xf0\x9f\x8f\xbc"), ":horse_racing_tone2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x87\xf0\x9f\x8f\xbd"), ":horse_racing_tone3:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x87\xf0\x9f\x8f\xbe"), ":horse_racing_tone4:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x87\xf0\x9f\x8f\xbf"), ":horse_racing_tone5:"},
+	Emoji{QString::fromUtf8("\xe2\x9b\xb7"), ":skier:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x82"), ":snowboarder:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x8c"), ":golfer:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x84"), ":surfer:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x84\xf0\x9f\x8f\xbb"), ":surfer_tone1:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x84\xf0\x9f\x8f\xbc"), ":surfer_tone2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x84\xf0\x9f\x8f\xbd"), ":surfer_tone3:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x84\xf0\x9f\x8f\xbe"), ":surfer_tone4:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x84\xf0\x9f\x8f\xbf"), ":surfer_tone5:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xa3"), ":rowboat:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xa3\xf0\x9f\x8f\xbb"), ":rowboat_tone1:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xa3\xf0\x9f\x8f\xbc"), ":rowboat_tone2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xa3\xf0\x9f\x8f\xbd"), ":rowboat_tone3:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xa3\xf0\x9f\x8f\xbe"), ":rowboat_tone4:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xa3\xf0\x9f\x8f\xbf"), ":rowboat_tone5:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x8a"), ":swimmer:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x8a\xf0\x9f\x8f\xbb"), ":swimmer_tone1:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x8a\xf0\x9f\x8f\xbc"), ":swimmer_tone2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x8a\xf0\x9f\x8f\xbd"), ":swimmer_tone3:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x8a\xf0\x9f\x8f\xbe"), ":swimmer_tone4:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x8a\xf0\x9f\x8f\xbf"), ":swimmer_tone5:"},
+	Emoji{QString::fromUtf8("\xe2\x9b\xb9"), ":basketball_player:"},
+	Emoji{QString::fromUtf8("\xe2\x9b\xb9\xf0\x9f\x8f\xbb"), ":basketball_player_tone1:"},
+	Emoji{QString::fromUtf8("\xe2\x9b\xb9\xf0\x9f\x8f\xbc"), ":basketball_player_tone2:"},
+	Emoji{QString::fromUtf8("\xe2\x9b\xb9\xf0\x9f\x8f\xbd"), ":basketball_player_tone3:"},
+	Emoji{QString::fromUtf8("\xe2\x9b\xb9\xf0\x9f\x8f\xbe"), ":basketball_player_tone4:"},
+	Emoji{QString::fromUtf8("\xe2\x9b\xb9\xf0\x9f\x8f\xbf"), ":basketball_player_tone5:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x8b"), ":lifter:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x8b\xf0\x9f\x8f\xbb"), ":lifter_tone1:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x8b\xf0\x9f\x8f\xbc"), ":lifter_tone2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x8b\xf0\x9f\x8f\xbd"), ":lifter_tone3:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x8b\xf0\x9f\x8f\xbe"), ":lifter_tone4:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x8b\xf0\x9f\x8f\xbf"), ":lifter_tone5:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xb4"), ":bicyclist:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xb4\xf0\x9f\x8f\xbb"), ":bicyclist_tone1:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xb4\xf0\x9f\x8f\xbc"), ":bicyclist_tone2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xb4\xf0\x9f\x8f\xbd"), ":bicyclist_tone3:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xb4\xf0\x9f\x8f\xbe"), ":bicyclist_tone4:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xb4\xf0\x9f\x8f\xbf"), ":bicyclist_tone5:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xb5"), ":mountain_bicyclist:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xb5\xf0\x9f\x8f\xbb"), ":mountain_bicyclist_tone1:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xb5\xf0\x9f\x8f\xbc"), ":mountain_bicyclist_tone2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xb5\xf0\x9f\x8f\xbd"), ":mountain_bicyclist_tone3:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xb5\xf0\x9f\x8f\xbe"), ":mountain_bicyclist_tone4:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xb5\xf0\x9f\x8f\xbf"), ":mountain_bicyclist_tone5:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xb8"), ":cartwheel:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xb8\xf0\x9f\x8f\xbb"), ":cartwheel_tone1:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xb8\xf0\x9f\x8f\xbc"), ":cartwheel_tone2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xb8\xf0\x9f\x8f\xbd"), ":cartwheel_tone3:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xb8\xf0\x9f\x8f\xbe"), ":cartwheel_tone4:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xb8\xf0\x9f\x8f\xbf"), ":cartwheel_tone5:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xbc"), ":wrestlers:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xbc\xf0\x9f\x8f\xbb"), ":wrestlers_tone1:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xbc\xf0\x9f\x8f\xbc"), ":wrestlers_tone2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xbc\xf0\x9f\x8f\xbd"), ":wrestlers_tone3:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xbc\xf0\x9f\x8f\xbe"), ":wrestlers_tone4:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xbc\xf0\x9f\x8f\xbf"), ":wrestlers_tone5:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xbd"), ":water_polo:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xbd\xf0\x9f\x8f\xbb"), ":water_polo_tone1:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xbd\xf0\x9f\x8f\xbc"), ":water_polo_tone2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xbd\xf0\x9f\x8f\xbd"), ":water_polo_tone3:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xbd\xf0\x9f\x8f\xbe"), ":water_polo_tone4:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xbd\xf0\x9f\x8f\xbf"), ":water_polo_tone5:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xbe"), ":handball:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xbe\xf0\x9f\x8f\xbb"), ":handball_tone1:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xbe\xf0\x9f\x8f\xbc"), ":handball_tone2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xbe\xf0\x9f\x8f\xbd"), ":handball_tone3:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xbe\xf0\x9f\x8f\xbe"), ":handball_tone4:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xbe\xf0\x9f\x8f\xbf"), ":handball_tone5:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xb9"), ":juggling:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xb9\xf0\x9f\x8f\xbb"), ":juggling_tone1:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xb9\xf0\x9f\x8f\xbc"), ":juggling_tone2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xb9\xf0\x9f\x8f\xbd"), ":juggling_tone3:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xb9\xf0\x9f\x8f\xbe"), ":juggling_tone4:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa4\xb9\xf0\x9f\x8f\xbf"), ":juggling_tone5:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xaa"), ":circus_tent:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xad"), ":performing_arts:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xa8"), ":art:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xb0"), ":slot_machine:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\x80"), ":bath:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\x80\xf0\x9f\x8f\xbb"), ":bath_tone1:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\x80\xf0\x9f\x8f\xbc"), ":bath_tone2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\x80\xf0\x9f\x8f\xbd"), ":bath_tone3:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\x80\xf0\x9f\x8f\xbe"), ":bath_tone4:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\x80\xf0\x9f\x8f\xbf"), ":bath_tone5:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x97"), ":reminder_ribbon:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x9f"), ":tickets:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xab"), ":ticket:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x96"), ":military_medal:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x86"), ":trophy:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x85"), ":medal:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa5\x87"), ":first_place:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa5\x88"), ":second_place:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa5\x89"), ":third_place:"},
+	Emoji{QString::fromUtf8("\xe2\x9a\xbd"), ":soccer:"},
+	Emoji{QString::fromUtf8("\xe2\x9a\xbe"), ":baseball:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x80"), ":basketball:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x90"), ":volleyball:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x88"), ":football:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x89"), ":rugby_football:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xbe"), ":tennis:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xb1"), ":8ball:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xb3"), ":bowling:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x8f"), ":cricket:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x91"), ":field_hockey:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x92"), ":hockey:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x93"), ":ping_pong:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\xb8"), ":badminton:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa5\x8a"), ":boxing_glove:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa5\x8b"), ":martial_arts_uniform:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa5\x85"), ":goal:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xaf"), ":dart:"},
+	Emoji{QString::fromUtf8("\xe2\x9b\xb3"), ":golf:"},
+	Emoji{QString::fromUtf8("\xe2\x9b\xb8"), ":ice_skate:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xa3"), ":fishing_pole_and_fish:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xbd"), ":running_shirt_with_sash:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xbf"), ":ski:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xae"), ":video_game:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xb2"), ":game_die:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xbc"), ":musical_score:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xa4"), ":microphone:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xa7"), ":headphones:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xb7"), ":saxophone:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xb8"), ":guitar:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xb9"), ":musical_keyboard:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xba"), ":trumpet:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xbb"), ":violin:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\xa5\x81"), ":drum:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xac"), ":clapper:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\xb9"), ":bow_and_arrow:"},
+};
+
+const QList<Emoji> EmojiProvider::travel = {
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x8e"), ":race_car:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x8d"), ":motorcycle:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x97\xbe"), ":japan:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x94"), ":mountain_snow:"},
+	Emoji{QString::fromUtf8("\xe2\x9b\xb0"), ":mountain:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x8b"), ":volcano:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x97\xbb"), ":mount_fuji:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x95"), ":camping:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x96"), ":beach:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x9c"), ":desert:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x9d"), ":island:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x9e"), ":park:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x9f"), ":stadium:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x9b"), ":classical_building:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x97"), ":construction_site:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x98"), ":homes:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x99"), ":cityscape:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x9a"), ":house_abandoned:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\xa0"), ":house:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\xa1"), ":house_with_garden:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\xa2"), ":office:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\xa3"), ":post_office:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\xa4"), ":european_post_office:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\xa5"), ":hospital:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\xa6"), ":bank:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\xa8"), ":hotel:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\xa9"), ":love_hotel:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\xaa"), ":convenience_store:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\xab"), ":school:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\xac"), ":department_store:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\xad"), ":factory:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\xaf"), ":japanese_castle:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\xb0"), ":european_castle:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x92"), ":wedding:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x97\xbc"), ":tokyo_tower:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x97\xbd"), ":statue_of_liberty:"},
+	Emoji{QString::fromUtf8("\xe2\x9b\xaa"), ":church:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\x8c"), ":mosque:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\x8d"), ":synagogue:"},
+	Emoji{QString::fromUtf8("\xe2\x9b\xa9"), ":shinto_shrine:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\x8b"), ":kaaba:"},
+	Emoji{QString::fromUtf8("\xe2\x9b\xb2"), ":fountain:"},
+	Emoji{QString::fromUtf8("\xe2\x9b\xba"), ":tent:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x81"), ":foggy:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x83"), ":night_with_stars:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x84"), ":sunrise_over_mountains:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x85"), ":sunrise:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x86"), ":city_dusk:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x87"), ":city_sunset:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x89"), ":bridge_at_night:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x8c"), ":milky_way:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xa0"), ":carousel_horse:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xa1"), ":ferris_wheel:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xa2"), ":roller_coaster:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x82"), ":steam_locomotive:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x83"), ":railway_car:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x84"), ":bullettrain_side:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x85"), ":bullettrain_front:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x86"), ":train2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x87"), ":metro:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x88"), ":light_rail:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x89"), ":station:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x8a"), ":tram:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x9d"), ":monorail:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x9e"), ":mountain_railway:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x8b"), ":train:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x8c"), ":bus:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x8d"), ":oncoming_bus:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x8e"), ":trolleybus:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x90"), ":minibus:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x91"), ":ambulance:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x92"), ":fire_engine:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x93"), ":police_car:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x94"), ":oncoming_police_car:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x95"), ":taxi:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x96"), ":oncoming_taxi:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x97"), ":red_car:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x98"), ":oncoming_automobile:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x99"), ":blue_car:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x9a"), ":truck:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x9b"), ":articulated_lorry:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x9c"), ":tractor:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xb2"), ":bike:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\xb4"), ":scooter:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\xb5"), ":motor_scooter:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x8f"), ":busstop:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\xa3"), ":motorway:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\xa4"), ":railway_track:"},
+	Emoji{QString::fromUtf8("\xe2\x9b\xbd"), ":fuelpump:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xa8"), ":rotating_light:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xa5"), ":traffic_light:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xa6"), ":vertical_traffic_light:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xa7"), ":construction:"},
+	Emoji{QString::fromUtf8("\xe2\x9a\x93"), ":anchor:"},
+	Emoji{QString::fromUtf8("\xe2\x9b\xb5"), ":sailboat:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\xb6"), ":canoe:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xa4"), ":speedboat:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\xb3"), ":cruise_ship:"},
+	Emoji{QString::fromUtf8("\xe2\x9b\xb4"), ":ferry:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\xa5"), ":motorboat:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xa2"), ":ship:"},
+	Emoji{QString::fromUtf8("\xe2\x9c\x88"), ":airplane:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\xa9"), ":airplane_small:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\xab"), ":airplane_departure:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\xac"), ":airplane_arriving:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xba"), ":seat:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x81"), ":helicopter:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x9f"), ":suspension_railway:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xa0"), ":mountain_cableway:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xa1"), ":aerial_tramway:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\x80"), ":rocket:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\xb0"), ":satellite_orbital:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xa0"), ":stars:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x88"), ":rainbow:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x86"), ":fireworks:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x87"), ":sparkler:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x91"), ":rice_scene:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\x81"), ":checkered_flag:"},
+};
+
+const QList<Emoji> EmojiProvider::objects = {
+	Emoji{QString::fromUtf8("\xe2\x98\xa0"), ":skull_crossbones:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x8c"), ":love_letter:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xa3"), ":bomb:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\xb3"), ":hole:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\x8d"), ":shopping_bags:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xbf"), ":prayer_beads:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x8e"), ":gem:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xaa"), ":knife:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\xba"), ":amphora:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x97\xba"), ":map:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x88"), ":barber:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x96\xbc"), ":frame_photo:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\x8e"), ":bellhop:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xaa"), ":door:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\x8c"), ":sleeping_accommodation:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\x8f"), ":bed:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\x8b"), ":couch:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xbd"), ":toilet:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xbf"), ":shower:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\x81"), ":bathtub:"},
+	Emoji{QString::fromUtf8("\xe2\x8c\x9b"), ":hourglass:"},
+	Emoji{QString::fromUtf8("\xe2\x8f\xb3"), ":hourglass_flowing_sand:"},
+	Emoji{QString::fromUtf8("\xe2\x8c\x9a"), ":watch:"},
+	Emoji{QString::fromUtf8("\xe2\x8f\xb0"), ":alarm_clock:"},
+	Emoji{QString::fromUtf8("\xe2\x8f\xb1"), ":stopwatch:"},
+	Emoji{QString::fromUtf8("\xe2\x8f\xb2"), ":timer:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\xb0"), ":clock:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\xa1"), ":thermometer:"},
+	Emoji{QString::fromUtf8("\xe2\x9b\xb1"), ":beach_umbrella:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x88"), ":balloon:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x89"), ":tada:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x8a"), ":confetti_ball:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x8e"), ":dolls:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x8f"), ":flags:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x90"), ":wind_chime:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x80"), ":ribbon:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x81"), ":gift:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\xb9"), ":joystick:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xaf"), ":postal_horn:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x99"), ":microphone2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x9a"), ":level_slider:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x9b"), ":control_knobs:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xbb"), ":radio:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xb1"), ":iphone:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xb2"), ":calling:"},
+	Emoji{QString::fromUtf8("\xe2\x98\x8e"), ":telephone:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x9e"), ":telephone_receiver:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x9f"), ":pager:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xa0"), ":fax:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x8b"), ":battery:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x8c"), ":electric_plug:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xbb"), ":computer:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x96\xa5"), ":desktop:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x96\xa8"), ":printer:"},
+	Emoji{QString::fromUtf8("\xe2\x8c\xa8"), ":keyboard:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x96\xb1"), ":mouse_three_button:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x96\xb2"), ":trackball:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xbd"), ":minidisc:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xbe"), ":floppy_disk:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xbf"), ":cd:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x80"), ":dvd:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xa5"), ":movie_camera:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x9e"), ":film_frames:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xbd"), ":projector:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xba"), ":tv:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xb7"), ":camera:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xb8"), ":camera_with_flash:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xb9"), ":video_camera:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xbc"), ":vhs:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x8d"), ":mag:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x8e"), ":mag_right:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xac"), ":microscope:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xad"), ":telescope:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xa1"), ":satellite:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\xaf"), ":candle:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xa1"), ":bulb:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xa6"), ":flashlight:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\xae"), ":izakaya_lantern:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x94"), ":notebook_with_decorative_cover:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x95"), ":closed_book:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x96"), ":book:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x97"), ":green_book:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x98"), ":blue_book:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x99"), ":orange_book:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x9a"), ":books:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x93"), ":notebook:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x92"), ":ledger:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x83"), ":page_with_curl:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x9c"), ":scroll:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x84"), ":page_facing_up:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xb0"), ":newspaper:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x97\x9e"), ":newspaper2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x91"), ":bookmark_tabs:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x96"), ":bookmark:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\xb7"), ":label:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xb0"), ":moneybag:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xb4"), ":yen:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xb5"), ":dollar:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xb6"), ":euro:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xb7"), ":pound:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xb8"), ":money_with_wings:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xb3"), ":credit_card:"},
+	Emoji{QString::fromUtf8("\xe2\x9c\x89"), ":envelope:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xa7"), ":e-mail:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xa8"), ":incoming_envelope:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xa9"), ":envelope_with_arrow:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xa4"), ":outbox_tray:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xa5"), ":inbox_tray:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xa6"), ":package:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xab"), ":mailbox:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xaa"), ":mailbox_closed:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xac"), ":mailbox_with_mail:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xad"), ":mailbox_with_no_mail:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xae"), ":postbox:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x97\xb3"), ":ballot_box:"},
+	Emoji{QString::fromUtf8("\xe2\x9c\x8f"), ":pencil2:"},
+	Emoji{QString::fromUtf8("\xe2\x9c\x92"), ":black_nib:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x96\x8b"), ":pen_fountain:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x96\x8a"), ":pen_ballpoint:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x96\x8c"), ":paintbrush:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x96\x8d"), ":crayon:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x9d"), ":pencil:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x81"), ":file_folder:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x82"), ":open_file_folder:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x97\x82"), ":dividers:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x85"), ":date:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x86"), ":calendar:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x97\x92"), ":notepad_spiral:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x97\x93"), ":calendar_spiral:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x87"), ":card_index:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x88"), ":chart_with_upwards_trend:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x89"), ":chart_with_downwards_trend:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x8a"), ":bar_chart:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x8b"), ":clipboard:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x8c"), ":pushpin:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x8d"), ":round_pushpin:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x8e"), ":paperclip:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x96\x87"), ":paperclips:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x8f"), ":straight_ruler:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x90"), ":triangular_ruler:"},
+	Emoji{QString::fromUtf8("\xe2\x9c\x82"), ":scissors:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x97\x83"), ":card_box:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x97\x84"), ":file_cabinet:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x97\x91"), ":wastebasket:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x92"), ":lock:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x93"), ":unlock:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x8f"), ":lock_with_ink_pen:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x90"), ":closed_lock_with_key:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x91"), ":key:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x97\x9d"), ":key2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xa8"), ":hammer:"},
+	Emoji{QString::fromUtf8("\xe2\x9b\x8f"), ":pick:"},
+	Emoji{QString::fromUtf8("\xe2\x9a\x92"), ":hammer_pick:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\xa0"), ":tools:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x97\xa1"), ":dagger:"},
+	Emoji{QString::fromUtf8("\xe2\x9a\x94"), ":crossed_swords:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xab"), ":gun:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\xa1"), ":shield:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xa7"), ":wrench:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xa9"), ":nut_and_bolt:"},
+	Emoji{QString::fromUtf8("\xe2\x9a\x99"), ":gear:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x97\x9c"), ":compression:"},
+	Emoji{QString::fromUtf8("\xe2\x9a\x97"), ":alembic:"},
+	Emoji{QString::fromUtf8("\xe2\x9a\x96"), ":scales:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x97"), ":link:"},
+	Emoji{QString::fromUtf8("\xe2\x9b\x93"), ":chains:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x89"), ":syringe:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x8a"), ":pill:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xac"), ":smoking:"},
+	Emoji{QString::fromUtf8("\xe2\x9a\xb0"), ":coffin:"},
+	Emoji{QString::fromUtf8("\xe2\x9a\xb1"), ":urn:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x97\xbf"), ":moyai:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\xa2"), ":oil:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xae"), ":crystal_ball:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\x92"), ":shopping_cart:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xa9"), ":triangular_flag_on_post:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\x8c"), ":crossed_flags:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\xb4"), ":flag_black:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\xb3"), ":flag_white:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\xb3\xf0\x9f\x8c\x88"), ":rainbow_flag:"},
+};
+
+const QList<Emoji> EmojiProvider::symbols = {
+	Emoji{QString::fromUtf8("\xf0\x9f\x91\x81\xf0\x9f\x97\xa8"), ":eye_in_speech_bubble:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x98"), ":cupid:"},
+	Emoji{QString::fromUtf8("\xe2\x9d\xa4"), ":heart:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x93"), ":heartbeat:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x94"), ":broken_heart:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x95"), ":two_hearts:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x96"), ":sparkling_heart:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x97"), ":heartpulse:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x99"), ":blue_heart:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x9a"), ":green_heart:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x9b"), ":yellow_heart:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x9c"), ":purple_heart:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x96\xa4"), ":black_heart:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x9d"), ":gift_heart:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x9e"), ":revolving_hearts:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\x9f"), ":heart_decoration:"},
+	Emoji{QString::fromUtf8("\xe2\x9d\xa3"), ":heart_exclamation:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xa2"), ":anger:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xa5"), ":boom:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xab"), ":dizzy:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xac"), ":speech_balloon:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x97\xa8"), ":speech_left:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x97\xaf"), ":anger_right:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xad"), ":thought_balloon:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xae"), ":white_flower:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x90"), ":globe_with_meridians:"},
+	Emoji{QString::fromUtf8("\xe2\x99\xa8"), ":hotsprings:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\x91"), ":octagonal_sign:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\x9b"), ":clock12:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\xa7"), ":clock1230:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\x90"), ":clock1:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\x9c"), ":clock130:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\x91"), ":clock2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\x9d"), ":clock230:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\x92"), ":clock3:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\x9e"), ":clock330:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\x93"), ":clock4:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\x9f"), ":clock430:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\x94"), ":clock5:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\xa0"), ":clock530:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\x95"), ":clock6:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\xa1"), ":clock630:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\x96"), ":clock7:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\xa2"), ":clock730:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\x97"), ":clock8:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\xa3"), ":clock830:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\x98"), ":clock9:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\xa4"), ":clock930:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\x99"), ":clock10:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\xa5"), ":clock1030:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\x9a"), ":clock11:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\xa6"), ":clock1130:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8c\x80"), ":cyclone:"},
+	Emoji{QString::fromUtf8("\xe2\x99\xa0"), ":spades:"},
+	Emoji{QString::fromUtf8("\xe2\x99\xa5"), ":hearts:"},
+	Emoji{QString::fromUtf8("\xe2\x99\xa6"), ":diamonds:"},
+	Emoji{QString::fromUtf8("\xe2\x99\xa3"), ":clubs:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x83\x8f"), ":black_joker:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x80\x84"), ":mahjong:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xb4"), ":flower_playing_cards:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x87"), ":mute:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x88"), ":speaker:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x89"), ":sound:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x8a"), ":loud_sound:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xa2"), ":loudspeaker:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xa3"), ":mega:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x94"), ":bell:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x95"), ":no_bell:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xb5"), ":musical_note:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xb6"), ":notes:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xb9"), ":chart:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xb1"), ":currency_exchange:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xb2"), ":heavy_dollar_sign:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8f\xa7"), ":atm:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xae"), ":put_litter_in_its_place:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xb0"), ":potable_water:"},
+	Emoji{QString::fromUtf8("\xe2\x99\xbf"), ":wheelchair:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xb9"), ":mens:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xba"), ":womens:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xbb"), ":restroom:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xbc"), ":baby_symbol:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xbe"), ":wc:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\x82"), ":passport_control:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\x83"), ":customs:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\x84"), ":baggage_claim:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\x85"), ":left_luggage:"},
+	Emoji{QString::fromUtf8("\xe2\x9a\xa0"), ":warning:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xb8"), ":children_crossing:"},
+	Emoji{QString::fromUtf8("\xe2\x9b\x94"), ":no_entry:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xab"), ":no_entry_sign:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xb3"), ":no_bicycles:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xad"), ":no_smoking:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xaf"), ":do_not_litter:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xb1"), ":non-potable_water:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9a\xb7"), ":no_pedestrians:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xb5"), ":no_mobile_phones:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x9e"), ":underage:"},
+	Emoji{QString::fromUtf8("\xe2\x98\xa2"), ":radioactive:"},
+	Emoji{QString::fromUtf8("\xe2\x98\xa3"), ":biohazard:"},
+	Emoji{QString::fromUtf8("\xe2\xac\x86"), ":arrow_up:"},
+	Emoji{QString::fromUtf8("\xe2\x86\x97"), ":arrow_upper_right:"},
+	Emoji{QString::fromUtf8("\xe2\x9e\xa1"), ":arrow_right:"},
+	Emoji{QString::fromUtf8("\xe2\x86\x98"), ":arrow_lower_right:"},
+	Emoji{QString::fromUtf8("\xe2\xac\x87"), ":arrow_down:"},
+	Emoji{QString::fromUtf8("\xe2\x86\x99"), ":arrow_lower_left:"},
+	Emoji{QString::fromUtf8("\xe2\xac\x85"), ":arrow_left:"},
+	Emoji{QString::fromUtf8("\xe2\x86\x96"), ":arrow_upper_left:"},
+	Emoji{QString::fromUtf8("\xe2\x86\x95"), ":arrow_up_down:"},
+	Emoji{QString::fromUtf8("\xe2\x86\x94"), ":left_right_arrow:"},
+	Emoji{QString::fromUtf8("\xe2\x86\xa9"), ":leftwards_arrow_with_hook:"},
+	Emoji{QString::fromUtf8("\xe2\x86\xaa"), ":arrow_right_hook:"},
+	Emoji{QString::fromUtf8("\xe2\xa4\xb4"), ":arrow_heading_up:"},
+	Emoji{QString::fromUtf8("\xe2\xa4\xb5"), ":arrow_heading_down:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x83"), ":arrows_clockwise:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x84"), ":arrows_counterclockwise:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x99"), ":back:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x9a"), ":end:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x9b"), ":on:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x9c"), ":soon:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x9d"), ":top:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x9b\x90"), ":place_of_worship:"},
+	Emoji{QString::fromUtf8("\xe2\x9a\x9b"), ":atom:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\x89"), ":om_symbol:"},
+	Emoji{QString::fromUtf8("\xe2\x9c\xa1"), ":star_of_david:"},
+	Emoji{QString::fromUtf8("\xe2\x98\xb8"), ":wheel_of_dharma:"},
+	Emoji{QString::fromUtf8("\xe2\x98\xaf"), ":yin_yang:"},
+	Emoji{QString::fromUtf8("\xe2\x9c\x9d"), ":cross:"},
+	Emoji{QString::fromUtf8("\xe2\x98\xa6"), ":orthodox_cross:"},
+	Emoji{QString::fromUtf8("\xe2\x98\xaa"), ":star_and_crescent:"},
+	Emoji{QString::fromUtf8("\xe2\x98\xae"), ":peace:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x95\x8e"), ":menorah:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xaf"), ":six_pointed_star:"},
+	Emoji{QString::fromUtf8("\xe2\x99\x88"), ":aries:"},
+	Emoji{QString::fromUtf8("\xe2\x99\x89"), ":taurus:"},
+	Emoji{QString::fromUtf8("\xe2\x99\x8a"), ":gemini:"},
+	Emoji{QString::fromUtf8("\xe2\x99\x8b"), ":cancer:"},
+	Emoji{QString::fromUtf8("\xe2\x99\x8c"), ":leo:"},
+	Emoji{QString::fromUtf8("\xe2\x99\x8d"), ":virgo:"},
+	Emoji{QString::fromUtf8("\xe2\x99\x8e"), ":libra:"},
+	Emoji{QString::fromUtf8("\xe2\x99\x8f"), ":scorpius:"},
+	Emoji{QString::fromUtf8("\xe2\x99\x90"), ":sagittarius:"},
+	Emoji{QString::fromUtf8("\xe2\x99\x91"), ":capricorn:"},
+	Emoji{QString::fromUtf8("\xe2\x99\x92"), ":aquarius:"},
+	Emoji{QString::fromUtf8("\xe2\x99\x93"), ":pisces:"},
+	Emoji{QString::fromUtf8("\xe2\x9b\x8e"), ":ophiuchus:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x80"), ":twisted_rightwards_arrows:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x81"), ":repeat:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x82"), ":repeat_one:"},
+	Emoji{QString::fromUtf8("\xe2\x96\xb6"), ":arrow_forward:"},
+	Emoji{QString::fromUtf8("\xe2\x8f\xa9"), ":fast_forward:"},
+	Emoji{QString::fromUtf8("\xe2\x8f\xad"), ":track_next:"},
+	Emoji{QString::fromUtf8("\xe2\x8f\xaf"), ":play_pause:"},
+	Emoji{QString::fromUtf8("\xe2\x97\x80"), ":arrow_backward:"},
+	Emoji{QString::fromUtf8("\xe2\x8f\xaa"), ":rewind:"},
+	Emoji{QString::fromUtf8("\xe2\x8f\xae"), ":track_previous:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xbc"), ":arrow_up_small:"},
+	Emoji{QString::fromUtf8("\xe2\x8f\xab"), ":arrow_double_up:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xbd"), ":arrow_down_small:"},
+	Emoji{QString::fromUtf8("\xe2\x8f\xac"), ":arrow_double_down:"},
+	Emoji{QString::fromUtf8("\xe2\x8f\xb8"), ":pause_button:"},
+	Emoji{QString::fromUtf8("\xe2\x8f\xb9"), ":stop_button:"},
+	Emoji{QString::fromUtf8("\xe2\x8f\xba"), ":record_button:"},
+	Emoji{QString::fromUtf8("\xe2\x8f\x8f"), ":eject:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x8e\xa6"), ":cinema:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x85"), ":low_brightness:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x86"), ":high_brightness:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xb6"), ":signal_strength:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xb3"), ":vibration_mode:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\xb4"), ":mobile_phone_off:"},
+	Emoji{QString::fromUtf8("\xe2\x99\xbb"), ":recycle:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x93\x9b"), ":name_badge:"},
+	Emoji{QString::fromUtf8("\xe2\x9a\x9c"), ":fleur-de-lis:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xb0"), ":beginner:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xb1"), ":trident:"},
+	Emoji{QString::fromUtf8("\xe2\xad\x95"), ":o:"},
+	Emoji{QString::fromUtf8("\xe2\x9c\x85"), ":white_check_mark:"},
+	Emoji{QString::fromUtf8("\xe2\x98\x91"), ":ballot_box_with_check:"},
+	Emoji{QString::fromUtf8("\xe2\x9c\x94"), ":heavy_check_mark:"},
+	Emoji{QString::fromUtf8("\xe2\x9c\x96"), ":heavy_multiplication_x:"},
+	Emoji{QString::fromUtf8("\xe2\x9d\x8c"), ":x:"},
+	Emoji{QString::fromUtf8("\xe2\x9d\x8e"), ":negative_squared_cross_mark:"},
+	Emoji{QString::fromUtf8("\xe2\x9e\x95"), ":heavy_plus_sign:"},
+	Emoji{QString::fromUtf8("\xe2\x9e\x96"), ":heavy_minus_sign:"},
+	Emoji{QString::fromUtf8("\xe2\x9e\x97"), ":heavy_division_sign:"},
+	Emoji{QString::fromUtf8("\xe2\x9e\xb0"), ":curly_loop:"},
+	Emoji{QString::fromUtf8("\xe2\x9e\xbf"), ":loop:"},
+	Emoji{QString::fromUtf8("\xe3\x80\xbd"), ":part_alternation_mark:"},
+	Emoji{QString::fromUtf8("\xe2\x9c\xb3"), ":eight_spoked_asterisk:"},
+	Emoji{QString::fromUtf8("\xe2\x9c\xb4"), ":eight_pointed_black_star:"},
+	Emoji{QString::fromUtf8("\xe2\x9d\x87"), ":sparkle:"},
+	Emoji{QString::fromUtf8("\xe2\x80\xbc"), ":bangbang:"},
+	Emoji{QString::fromUtf8("\xe2\x81\x89"), ":interrobang:"},
+	Emoji{QString::fromUtf8("\xe2\x9d\x93"), ":question:"},
+	Emoji{QString::fromUtf8("\xe2\x9d\x94"), ":grey_question:"},
+	Emoji{QString::fromUtf8("\xe2\x9d\x95"), ":grey_exclamation:"},
+	Emoji{QString::fromUtf8("\xe2\x9d\x97"), ":exclamation:"},
+	Emoji{QString::fromUtf8("\xe3\x80\xb0"), ":wavy_dash:"},
+	Emoji{QString::fromUtf8("\xc2\xa9"), ":copyright:"},
+	Emoji{QString::fromUtf8("\xc2\xae"), ":registered:"},
+	Emoji{QString::fromUtf8("\xe2\x84\xa2"), ":tm:"},
+	Emoji{QString::fromUtf8("#\xe2\x83\xa3"), ":hash:"},
+	Emoji{QString::fromUtf8("*\xe2\x83\xa3"), ":asterisk:"},
+	Emoji{QString::fromUtf8("0\xe2\x83\xa3"), ":zero:"},
+	Emoji{QString::fromUtf8("1\xe2\x83\xa3"), ":one:"},
+	Emoji{QString::fromUtf8("2\xe2\x83\xa3"), ":two:"},
+	Emoji{QString::fromUtf8("3\xe2\x83\xa3"), ":three:"},
+	Emoji{QString::fromUtf8("4\xe2\x83\xa3"), ":four:"},
+	Emoji{QString::fromUtf8("5\xe2\x83\xa3"), ":five:"},
+	Emoji{QString::fromUtf8("6\xe2\x83\xa3"), ":six:"},
+	Emoji{QString::fromUtf8("7\xe2\x83\xa3"), ":seven:"},
+	Emoji{QString::fromUtf8("8\xe2\x83\xa3"), ":eight:"},
+	Emoji{QString::fromUtf8("9\xe2\x83\xa3"), ":nine:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x9f"), ":keycap_ten:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xaf"), ":100:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xa0"), ":capital_abcd:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xa1"), ":abcd:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xa2"), ":1234:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xa3"), ":symbols:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xa4"), ":abc:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x85\xb0"), ":a:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x86\x8e"), ":ab:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x85\xb1"), ":b:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x86\x91"), ":cl:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x86\x92"), ":cool:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x86\x93"), ":free:"},
+	Emoji{QString::fromUtf8("\xe2\x84\xb9"), ":information_source:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x86\x94"), ":id:"},
+	Emoji{QString::fromUtf8("\xe2\x93\x82"), ":m:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x86\x95"), ":new:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x86\x96"), ":ng:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x85\xbe"), ":o2:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x86\x97"), ":ok:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x85\xbf"), ":parking:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x86\x98"), ":sos:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x86\x99"), ":up:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x86\x9a"), ":vs:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x88\x81"), ":koko:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x88\x82"), ":sa:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x88\xb7"), ":u6708:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x88\xb6"), ":u6709:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x88\xaf"), ":u6307:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x89\x90"), ":ideograph_advantage:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x88\xb9"), ":u5272:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x88\x9a"), ":u7121:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x88\xb2"), ":u7981:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x89\x91"), ":accept:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x88\xb8"), ":u7533:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x88\xb4"), ":u5408:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x88\xb3"), ":u7a7a:"},
+	Emoji{QString::fromUtf8("\xe3\x8a\x97"), ":congratulations:"},
+	Emoji{QString::fromUtf8("\xe3\x8a\x99"), ":secret:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x88\xba"), ":u55b6:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x88\xb5"), ":u6e80:"},
+	Emoji{QString::fromUtf8("\xe2\x96\xaa"), ":black_small_square:"},
+	Emoji{QString::fromUtf8("\xe2\x96\xab"), ":white_small_square:"},
+	Emoji{QString::fromUtf8("\xe2\x97\xbb"), ":white_medium_square:"},
+	Emoji{QString::fromUtf8("\xe2\x97\xbc"), ":black_medium_square:"},
+	Emoji{QString::fromUtf8("\xe2\x97\xbd"), ":white_medium_small_square:"},
+	Emoji{QString::fromUtf8("\xe2\x97\xbe"), ":black_medium_small_square:"},
+	Emoji{QString::fromUtf8("\xe2\xac\x9b"), ":black_large_square:"},
+	Emoji{QString::fromUtf8("\xe2\xac\x9c"), ":white_large_square:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xb6"), ":large_orange_diamond:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xb7"), ":large_blue_diamond:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xb8"), ":small_orange_diamond:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xb9"), ":small_blue_diamond:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xba"), ":small_red_triangle:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xbb"), ":small_red_triangle_down:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x92\xa0"), ":diamond_shape_with_a_dot_inside:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\x98"), ":radio_button:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xb2"), ":black_square_button:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xb3"), ":white_square_button:"},
+	Emoji{QString::fromUtf8("\xe2\x9a\xaa"), ":white_circle:"},
+	Emoji{QString::fromUtf8("\xe2\x9a\xab"), ":black_circle:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xb4"), ":red_circle:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x94\xb5"), ":blue_circle:"},
+};
+
+const QList<Emoji> EmojiProvider::flags = {
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xa8"), ":flag_ac:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xa9"), ":flag_ad:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xaa"), ":flag_ae:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xab"), ":flag_af:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xac"), ":flag_ag:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xae"), ":flag_ai:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xb1"), ":flag_al:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xb2"), ":flag_am:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xb4"), ":flag_ao:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xb6"), ":flag_aq:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xb7"), ":flag_ar:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xb8"), ":flag_as:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xb9"), ":flag_at:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xba"), ":flag_au:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xbc"), ":flag_aw:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xbd"), ":flag_ax:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xbf"), ":flag_az:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xa6"), ":flag_ba:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xa7"), ":flag_bb:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xa9"), ":flag_bd:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xaa"), ":flag_be:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xab"), ":flag_bf:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xac"), ":flag_bg:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xad"), ":flag_bh:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xae"), ":flag_bi:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xaf"), ":flag_bj:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xb1"), ":flag_bl:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xb2"), ":flag_bm:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xb3"), ":flag_bn:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xb4"), ":flag_bo:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xb6"), ":flag_bq:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xb7"), ":flag_br:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xb8"), ":flag_bs:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xb9"), ":flag_bt:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xbb"), ":flag_bv:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xbc"), ":flag_bw:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xbe"), ":flag_by:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xbf"), ":flag_bz:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xa6"), ":flag_ca:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xa8"), ":flag_cc:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xa9"), ":flag_cd:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xab"), ":flag_cf:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xac"), ":flag_cg:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xad"), ":flag_ch:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xae"), ":flag_ci:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xb0"), ":flag_ck:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xb1"), ":flag_cl:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xb2"), ":flag_cm:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xb3"), ":flag_cn:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xb4"), ":flag_co:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xb5"), ":flag_cp:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xb7"), ":flag_cr:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xba"), ":flag_cu:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xbb"), ":flag_cv:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xbc"), ":flag_cw:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xbd"), ":flag_cx:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xbe"), ":flag_cy:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xbf"), ":flag_cz:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa9\xf0\x9f\x87\xaa"), ":flag_de:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa9\xf0\x9f\x87\xac"), ":flag_dg:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa9\xf0\x9f\x87\xaf"), ":flag_dj:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa9\xf0\x9f\x87\xb0"), ":flag_dk:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa9\xf0\x9f\x87\xb2"), ":flag_dm:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa9\xf0\x9f\x87\xb4"), ":flag_do:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xa9\xf0\x9f\x87\xbf"), ":flag_dz:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xaa\xf0\x9f\x87\xa6"), ":flag_ea:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xaa\xf0\x9f\x87\xa8"), ":flag_ec:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xaa\xf0\x9f\x87\xaa"), ":flag_ee:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xaa\xf0\x9f\x87\xac"), ":flag_eg:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xaa\xf0\x9f\x87\xad"), ":flag_eh:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xaa\xf0\x9f\x87\xb7"), ":flag_er:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xaa\xf0\x9f\x87\xb8"), ":flag_es:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xaa\xf0\x9f\x87\xb9"), ":flag_et:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xaa\xf0\x9f\x87\xba"), ":flag_eu:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xab\xf0\x9f\x87\xae"), ":flag_fi:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xab\xf0\x9f\x87\xaf"), ":flag_fj:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xab\xf0\x9f\x87\xb0"), ":flag_fk:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xab\xf0\x9f\x87\xb2"), ":flag_fm:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xab\xf0\x9f\x87\xb4"), ":flag_fo:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xab\xf0\x9f\x87\xb7"), ":flag_fr:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xa6"), ":flag_ga:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xa7"), ":flag_gb:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xa9"), ":flag_gd:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xaa"), ":flag_ge:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xab"), ":flag_gf:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xac"), ":flag_gg:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xad"), ":flag_gh:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xae"), ":flag_gi:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xb1"), ":flag_gl:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xb2"), ":flag_gm:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xb3"), ":flag_gn:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xb5"), ":flag_gp:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xb6"), ":flag_gq:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xb7"), ":flag_gr:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xb8"), ":flag_gs:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xb9"), ":flag_gt:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xba"), ":flag_gu:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xbc"), ":flag_gw:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xbe"), ":flag_gy:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xad\xf0\x9f\x87\xb0"), ":flag_hk:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xad\xf0\x9f\x87\xb2"), ":flag_hm:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xad\xf0\x9f\x87\xb3"), ":flag_hn:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xad\xf0\x9f\x87\xb7"), ":flag_hr:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xad\xf0\x9f\x87\xb9"), ":flag_ht:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xad\xf0\x9f\x87\xba"), ":flag_hu:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xae\xf0\x9f\x87\xa8"), ":flag_ic:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xae\xf0\x9f\x87\xa9"), ":flag_id:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xae\xf0\x9f\x87\xaa"), ":flag_ie:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xae\xf0\x9f\x87\xb1"), ":flag_il:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xae\xf0\x9f\x87\xb2"), ":flag_im:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xae\xf0\x9f\x87\xb3"), ":flag_in:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xae\xf0\x9f\x87\xb4"), ":flag_io:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xae\xf0\x9f\x87\xb6"), ":flag_iq:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xae\xf0\x9f\x87\xb7"), ":flag_ir:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xae\xf0\x9f\x87\xb8"), ":flag_is:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xae\xf0\x9f\x87\xb9"), ":flag_it:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xaf\xf0\x9f\x87\xaa"), ":flag_je:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xaf\xf0\x9f\x87\xb2"), ":flag_jm:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xaf\xf0\x9f\x87\xb4"), ":flag_jo:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xaf\xf0\x9f\x87\xb5"), ":flag_jp:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb0\xf0\x9f\x87\xaa"), ":flag_ke:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb0\xf0\x9f\x87\xac"), ":flag_kg:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb0\xf0\x9f\x87\xad"), ":flag_kh:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb0\xf0\x9f\x87\xae"), ":flag_ki:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb0\xf0\x9f\x87\xb2"), ":flag_km:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb0\xf0\x9f\x87\xb3"), ":flag_kn:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb0\xf0\x9f\x87\xb5"), ":flag_kp:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb0\xf0\x9f\x87\xb7"), ":flag_kr:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb0\xf0\x9f\x87\xbc"), ":flag_kw:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb0\xf0\x9f\x87\xbe"), ":flag_ky:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb0\xf0\x9f\x87\xbf"), ":flag_kz:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb1\xf0\x9f\x87\xa6"), ":flag_la:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb1\xf0\x9f\x87\xa7"), ":flag_lb:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb1\xf0\x9f\x87\xa8"), ":flag_lc:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb1\xf0\x9f\x87\xae"), ":flag_li:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb1\xf0\x9f\x87\xb0"), ":flag_lk:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb1\xf0\x9f\x87\xb7"), ":flag_lr:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb1\xf0\x9f\x87\xb8"), ":flag_ls:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb1\xf0\x9f\x87\xb9"), ":flag_lt:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb1\xf0\x9f\x87\xba"), ":flag_lu:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb1\xf0\x9f\x87\xbb"), ":flag_lv:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb1\xf0\x9f\x87\xbe"), ":flag_ly:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xa6"), ":flag_ma:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xa8"), ":flag_mc:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xa9"), ":flag_md:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xaa"), ":flag_me:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xab"), ":flag_mf:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xac"), ":flag_mg:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xad"), ":flag_mh:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xb0"), ":flag_mk:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xb1"), ":flag_ml:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xb2"), ":flag_mm:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xb3"), ":flag_mn:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xb4"), ":flag_mo:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xb5"), ":flag_mp:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xb6"), ":flag_mq:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xb7"), ":flag_mr:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xb8"), ":flag_ms:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xb9"), ":flag_mt:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xba"), ":flag_mu:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xbb"), ":flag_mv:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xbc"), ":flag_mw:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xbd"), ":flag_mx:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xbe"), ":flag_my:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xbf"), ":flag_mz:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb3\xf0\x9f\x87\xa6"), ":flag_na:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb3\xf0\x9f\x87\xa8"), ":flag_nc:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb3\xf0\x9f\x87\xaa"), ":flag_ne:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb3\xf0\x9f\x87\xab"), ":flag_nf:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb3\xf0\x9f\x87\xac"), ":flag_ng:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb3\xf0\x9f\x87\xae"), ":flag_ni:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb3\xf0\x9f\x87\xb1"), ":flag_nl:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb3\xf0\x9f\x87\xb4"), ":flag_no:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb3\xf0\x9f\x87\xb5"), ":flag_np:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb3\xf0\x9f\x87\xb7"), ":flag_nr:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb3\xf0\x9f\x87\xba"), ":flag_nu:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb3\xf0\x9f\x87\xbf"), ":flag_nz:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb4\xf0\x9f\x87\xb2"), ":flag_om:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xa6"), ":flag_pa:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xaa"), ":flag_pe:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xab"), ":flag_pf:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xac"), ":flag_pg:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xad"), ":flag_ph:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xb0"), ":flag_pk:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xb1"), ":flag_pl:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xb2"), ":flag_pm:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xb3"), ":flag_pn:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xb7"), ":flag_pr:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xb8"), ":flag_ps:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xb9"), ":flag_pt:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xbc"), ":flag_pw:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xbe"), ":flag_py:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb6\xf0\x9f\x87\xa6"), ":flag_qa:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb7\xf0\x9f\x87\xaa"), ":flag_re:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb7\xf0\x9f\x87\xb4"), ":flag_ro:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb7\xf0\x9f\x87\xb8"), ":flag_rs:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb7\xf0\x9f\x87\xba"), ":flag_ru:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb7\xf0\x9f\x87\xbc"), ":flag_rw:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xa6"), ":flag_sa:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xa7"), ":flag_sb:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xa8"), ":flag_sc:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xa9"), ":flag_sd:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xaa"), ":flag_se:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xac"), ":flag_sg:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xad"), ":flag_sh:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xae"), ":flag_si:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xaf"), ":flag_sj:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xb0"), ":flag_sk:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xb1"), ":flag_sl:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xb2"), ":flag_sm:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xb3"), ":flag_sn:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xb4"), ":flag_so:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xb7"), ":flag_sr:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xb8"), ":flag_ss:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xb9"), ":flag_st:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xbb"), ":flag_sv:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xbd"), ":flag_sx:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xbe"), ":flag_sy:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xbf"), ":flag_sz:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xa6"), ":flag_ta:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xa8"), ":flag_tc:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xa9"), ":flag_td:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xab"), ":flag_tf:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xac"), ":flag_tg:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xad"), ":flag_th:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xaf"), ":flag_tj:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xb0"), ":flag_tk:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xb1"), ":flag_tl:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xb2"), ":flag_tm:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xb3"), ":flag_tn:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xb4"), ":flag_to:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xb7"), ":flag_tr:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xb9"), ":flag_tt:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xbb"), ":flag_tv:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xbc"), ":flag_tw:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xbf"), ":flag_tz:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xba\xf0\x9f\x87\xa6"), ":flag_ua:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xba\xf0\x9f\x87\xac"), ":flag_ug:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xba\xf0\x9f\x87\xb2"), ":flag_um:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xba\xf0\x9f\x87\xb8"), ":flag_us:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xba\xf0\x9f\x87\xbe"), ":flag_uy:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xba\xf0\x9f\x87\xbf"), ":flag_uz:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xbb\xf0\x9f\x87\xa6"), ":flag_va:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xbb\xf0\x9f\x87\xa8"), ":flag_vc:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xbb\xf0\x9f\x87\xaa"), ":flag_ve:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xbb\xf0\x9f\x87\xac"), ":flag_vg:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xbb\xf0\x9f\x87\xae"), ":flag_vi:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xbb\xf0\x9f\x87\xb3"), ":flag_vn:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xbb\xf0\x9f\x87\xba"), ":flag_vu:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xbc\xf0\x9f\x87\xab"), ":flag_wf:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xbc\xf0\x9f\x87\xb8"), ":flag_ws:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xbd\xf0\x9f\x87\xb0"), ":flag_xk:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xbe\xf0\x9f\x87\xaa"), ":flag_ye:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xbe\xf0\x9f\x87\xb9"), ":flag_yt:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xbf\xf0\x9f\x87\xa6"), ":flag_za:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xbf\xf0\x9f\x87\xb2"), ":flag_zm:"},
+	Emoji{QString::fromUtf8("\xf0\x9f\x87\xbf\xf0\x9f\x87\xbc"), ":flag_zw:"},
+};
diff --git a/src/HistoryViewItem.cc b/src/HistoryViewItem.cc
index ed00abf9..cde07eb9 100644
--- a/src/HistoryViewItem.cc
+++ b/src/HistoryViewItem.cc
@@ -142,10 +142,10 @@ QString HistoryViewItem::replaceEmoji(const QString &body)
 	QString fmtBody = "";
 
 	for (auto &c : body) {
-		auto code = c.unicode();
+		int code = c.unicode();
 
-		// TODO: A map should be used with the unicode codes supported by emoji one
-		if (code > 127)
+		// TODO: Be more precise here.
+		if (code > 9000)
 			fmtBody += "<span style=\"font-family: Emoji One; font-size: 16px\">" + QString(c) + "</span>";
 		else
 			fmtBody += c;
diff --git a/src/TextInputWidget.cc b/src/TextInputWidget.cc
index 08aa34eb..ab73a98f 100644
--- a/src/TextInputWidget.cc
+++ b/src/TextInputWidget.cc
@@ -16,11 +16,25 @@
  */
 
 #include <QDebug>
+#include <QFile>
 #include <QPainter>
 #include <QStyleOption>
 
 #include "TextInputWidget.h"
 
+FilteredTextEdit::FilteredTextEdit(QWidget *parent)
+    : QTextEdit(parent)
+{
+}
+
+void FilteredTextEdit::keyPressEvent(QKeyEvent *event)
+{
+	if (event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter)
+		emit enterPressed();
+	else
+		QTextEdit::keyPressEvent(event);
+}
+
 TextInputWidget::TextInputWidget(QWidget *parent)
     : QWidget(parent)
 {
@@ -31,8 +45,8 @@ TextInputWidget::TextInputWidget(QWidget *parent)
 	setStyleSheet("background-color: #f8fbfe; height: 45px;");
 
 	top_layout_ = new QHBoxLayout();
-	top_layout_->setSpacing(6);
-	top_layout_->setContentsMargins(6, 0, 0, 0);
+	top_layout_->setSpacing(0);
+	top_layout_->setMargin(0);
 
 	send_file_button_ = new FlatButton(this);
 	send_file_button_->setCursor(Qt::PointingHandCursor);
@@ -43,9 +57,10 @@ TextInputWidget::TextInputWidget(QWidget *parent)
 	send_file_button_->setIcon(send_file_icon);
 	send_file_button_->setIconSize(QSize(24, 24));
 
-	input_ = new QLineEdit(this);
+	input_ = new FilteredTextEdit(this);
+	input_->setFixedHeight(45);
 	input_->setPlaceholderText("Write a message...");
-	input_->setStyleSheet("color: black; font-size: 10pt; border-radius: 0; padding: 2px; margin-bottom: 4px;");
+	input_->setStyleSheet("color: #333333; font-size: 13px; border-radius: 0; padding-top: 10px;");
 
 	send_message_button_ = new FlatButton(this);
 	send_message_button_->setCursor(Qt::PointingHandCursor);
@@ -56,24 +71,59 @@ TextInputWidget::TextInputWidget(QWidget *parent)
 	send_message_button_->setIcon(send_message_icon);
 	send_message_button_->setIconSize(QSize(24, 24));
 
+	emoji_button_ = new EmojiPickButton(this);
+	emoji_button_->setCursor(Qt::PointingHandCursor);
+	emoji_button_->setForegroundColor(QColor("#acc7dc"));
+
+	QIcon emoji_icon;
+	emoji_icon.addFile(":/icons/icons/smile.png", QSize(), QIcon::Normal, QIcon::Off);
+	emoji_button_->setIcon(emoji_icon);
+	emoji_button_->setIconSize(QSize(24, 24));
+
 	top_layout_->addWidget(send_file_button_);
 	top_layout_->addWidget(input_);
+	top_layout_->addWidget(emoji_button_);
 	top_layout_->addWidget(send_message_button_);
 
 	setLayout(top_layout_);
 
 	connect(send_message_button_, SIGNAL(clicked()), this, SLOT(onSendButtonClicked()));
-	connect(input_, SIGNAL(returnPressed()), send_message_button_, SIGNAL(clicked()));
+	connect(input_, SIGNAL(enterPressed()), send_message_button_, SIGNAL(clicked()));
+	connect(emoji_button_, SIGNAL(emojiSelected(const QString &)), this, SLOT(addSelectedEmoji(const QString &)));
+}
+
+void TextInputWidget::addSelectedEmoji(const QString &emoji)
+{
+	QTextCursor cursor = input_->textCursor();
+
+	QFont emoji_font("Emoji One");
+	emoji_font.setPixelSize(18);
+
+	QFont text_font("Open Sans");
+	text_font.setPixelSize(13);
+
+	QTextCharFormat charfmt;
+	charfmt.setFont(emoji_font);
+	input_->setCurrentCharFormat(charfmt);
+
+	input_->insertPlainText(emoji);
+	cursor.movePosition(QTextCursor::End);
+
+	charfmt.setFont(text_font);
+	input_->setCurrentCharFormat(charfmt);
+
+	input_->show();
 }
 
 void TextInputWidget::onSendButtonClicked()
 {
-	auto msg_text = input_->text().trimmed();
+	auto msg_text = input_->document()->toPlainText().trimmed();
 
 	if (msg_text.isEmpty())
 		return;
 
 	emit sendTextMessage(msg_text);
+
 	input_->clear();
 }
 
diff --git a/src/ui/FlatButton.cc b/src/ui/FlatButton.cc
index de0bf106..e860e7d7 100644
--- a/src/ui/FlatButton.cc
+++ b/src/ui/FlatButton.cc
@@ -472,11 +472,11 @@ void FlatButton::paintForeground(QPainter *painter)
 	QRect textGeometry(pos + QPoint(0, base.height() / 2), textSize);
 	QRect iconGeometry(pos + QPoint(0, (height() - iconSize().height()) / 2), iconSize());
 
-	if (ui::LeftIcon == icon_placement_) {
-		textGeometry.translate(iw, 0);
-	} else {
-		iconGeometry.translate(textSize.width() + IconPadding, 0);
-	}
+	/* if (ui::LeftIcon == icon_placement_) { */
+	/* 	textGeometry.translate(iw, 0); */
+	/* } else { */
+	/* 	iconGeometry.translate(textSize.width() + IconPadding, 0); */
+	/* } */
 
 	painter->drawText(textGeometry, Qt::AlignCenter, text());