From 16850709306589a2433c0038605d365a6b6bedad Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Tue, 2 Apr 2024 13:20:34 +0200 Subject: Use emoji segmenter to apply emoji fonts automatically Colorful emojis in Unicode are not isolated to specific ranges of code points like other writing systems. Instead, there are a set of rules defining whether a sequence of characters should be displayed in color or black/white. http://www.unicode.org/reports/tr51/ For instance, appending a variation selector to a character can turn it into a color emoji, even if it is a code point that predates the invention of emojis. In addition, sequences of joined characters that are determined to be a color emoji sequence should be parsed by a single emoji font, so that it can apply things like skin color, etc. In general, users expect emojis and emoji sequences to be shown in the preferred color font of the system, even if a selected font has black/white characters for the symbols. This patch applies the emoji segmenter to strings to isolate sequences that should be in color. As an implementation hack, we mark this in the QScriptItems as a special "emoji" script. Note that this is not a real Unicode script and only exists internally for this reason, because the "emojiness" of the resulting glyph overrides the original script of the individual characters when selecting fonts. This way, we can use a lot of the same logic for itemizing the strings and looking up fonts, and we don't need to increase the size of the QScriptItem. (It is just an implementation detail and is not exposed to the user, so it can be replaced by other approaches later if we need to.) When matching an emoji sequence, we always try to apply a color font and ignore all others. The exception is if there is no color font at all on the system, then we will find a black and white font which supports the characters instead as a final failsafe. In addition, each platform will put its default emoji font at the top of the fallbacks list in order to make this the preference in case there are more than one. This patch also adds API to override this with an application-defined emoji font, since this is a common use case. Note: The font includes an environment variable to disable the feature as a fail safe. A flag to disable it per QFont will be added in a follow-up. Fixes: QTBUG-111801 Change-Id: I9431ec34d56772ab8688814963073b83b23002ae Reviewed-by: Lars Knoll Reviewed-by: --- diff --git a/src/gui/text/coretext/qcoretextfontdatabase.mm b/src/gui/text/coretext/qcoretextfontdatabase.mm index 2197c83f..fc551cdb 100644 --- a/src/gui/text/coretext/qcoretextfontdatabase.mm +++ b/src/gui/text/coretext/qcoretextfontdatabase.mm @@ -327,6 +327,7 @@ struct FontDescription { QFont::Stretch stretch; qreal pointSize; bool fixedPitch; + bool colorFont; QSupportedWritingSystems writingSystems; }; @@ -359,6 +360,9 @@ static void getFontDescription(CTFontDescriptorRef font, FontDescription *fd) fd->style = QFont::StyleNormal; fd->stretch = QFont::Unstretched; fd->fixedPitch = false; + fd->colorFont = false; + + if (QCFType tempFont = CTFontCreateWithFontDescriptor(font, 0.0, 0)) { uint tag = QFont::Tag("OS/2").value(); @@ -393,6 +397,9 @@ static void getFontDescription(CTFontDescriptorRef font, FontDescription *fd) if (CFNumberRef symbolic = (CFNumberRef) CFDictionaryGetValue(styles, kCTFontSymbolicTrait)) { int d; if (CFNumberGetValue(symbolic, kCFNumberSInt32Type, &d)) { + if (d & kCTFontColorGlyphsTrait) + fd->colorFont = true; + if (d & kCTFontMonoSpaceTrait) fd->fixedPitch = true; if (d & kCTFontExpandedTrait) @@ -451,7 +458,7 @@ void QCoreTextFontDatabase::populateFromDescriptor(CTFontDescriptorRef font, con CFRetain(font); QPlatformFontDatabase::registerFont(family, fd.styleName, fd.foundryName, fd.weight, fd.style, fd.stretch, true /* antialiased */, true /* scalable */, 0 /* pixelSize, ignored as font is scalable */, - fd.fixedPitch, fd.writingSystems, (void *)font); + fd.fixedPitch, fd.colorFont, fd.writingSystems, (void *)font); } static NSString * const kQtFontDataAttribute = @"QtFontDataAttribute"; @@ -629,7 +636,18 @@ CTFontDescriptorRef descriptorForStyle(QFont::StyleHint styleHint) } } -QStringList QCoreTextFontDatabase::fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const +QStringList QCoreTextFontDatabase::fallbacksForScript(QFontDatabasePrivate::ExtendedScript script) const +{ + if (script == QFontDatabasePrivate::Script_Emoji) + return QStringList{} << QStringLiteral(".Apple Color Emoji UI"); + else + return QStringList{}; +} + +QStringList QCoreTextFontDatabase::fallbacksForFamily(const QString &family, + QFont::Style style, + QFont::StyleHint styleHint, + QFontDatabasePrivate::ExtendedScript script) const { Q_UNUSED(style); @@ -639,7 +657,7 @@ QStringList QCoreTextFontDatabase::fallbacksForFamily(const QString &family, QFo QMacAutoReleasePool pool; - QStringList fallbackList; + QStringList fallbackList = fallbacksForScript(script); QCFType fallbackFonts = fallbacksForFamily(family); if (!fallbackFonts || !CFArrayGetCount(fallbackFonts)) { @@ -702,32 +720,34 @@ QStringList QCoreTextFontDatabase::fallbacksForFamily(const QString &family, QFo fallbackList.append(QStringLiteral("Apple Symbols")); // Some Noto* fonts are not automatically enumerated by system, despite being the main // fonts for their writing system. - QString hardcodedFont = m_hardcodedFallbackFonts.value(script); - if (!hardcodedFont.isEmpty() && !fallbackList.contains(hardcodedFont)) { - if (!isFamilyPopulated(hardcodedFont)) { - if (!m_privateFamilies.contains(hardcodedFont)) { - QCFType familyDescriptor = descriptorForFamily(hardcodedFont); - QCFType matchingFonts = CTFontDescriptorCreateMatchingFontDescriptors(familyDescriptor, nullptr); - if (matchingFonts) { - const int numFonts = CFArrayGetCount(matchingFonts); - for (int i = 0; i < numFonts; ++i) - const_cast(this)->populateFromDescriptor(CTFontDescriptorRef(CFArrayGetValueAtIndex(matchingFonts, i)), - hardcodedFont); - - fallbackList.append(hardcodedFont); + if (script < int(QChar::ScriptCount)) { + QString hardcodedFont = m_hardcodedFallbackFonts.value(QChar::Script(script)); + if (!hardcodedFont.isEmpty() && !fallbackList.contains(hardcodedFont)) { + if (!isFamilyPopulated(hardcodedFont)) { + if (!m_privateFamilies.contains(hardcodedFont)) { + QCFType familyDescriptor = descriptorForFamily(hardcodedFont); + QCFType matchingFonts = CTFontDescriptorCreateMatchingFontDescriptors(familyDescriptor, nullptr); + if (matchingFonts) { + const int numFonts = CFArrayGetCount(matchingFonts); + for (int i = 0; i < numFonts; ++i) + const_cast(this)->populateFromDescriptor(CTFontDescriptorRef(CFArrayGetValueAtIndex(matchingFonts, i)), + hardcodedFont); + + fallbackList.append(hardcodedFont); + } + + // Register as private family even if the font is not found, in order to avoid + // redoing the check later. In later calls, the font will then just be ignored. + m_privateFamilies.insert(hardcodedFont); } - - // Register as private family even if the font is not found, in order to avoid - // redoing the check later. In later calls, the font will then just be ignored. - m_privateFamilies.insert(hardcodedFont); + } else { + fallbackList.append(hardcodedFont); } - } else { - fallbackList.append(hardcodedFont); } } #endif - extern QStringList qt_sort_families_by_writing_system(QChar::Script, const QStringList &); + extern QStringList qt_sort_families_by_writing_system(QFontDatabasePrivate::ExtendedScript, const QStringList &); fallbackList = qt_sort_families_by_writing_system(script, fallbackList); qCDebug(lcQpaFonts).nospace() << "Fallback families ordered by script " << script << ": " << fallbackList; diff --git a/src/gui/text/coretext/qcoretextfontdatabase_p.h b/src/gui/text/coretext/qcoretextfontdatabase_p.h index eeea9ad6..5c8a6ad3 100644 --- a/src/gui/text/coretext/qcoretextfontdatabase_p.h +++ b/src/gui/text/coretext/qcoretextfontdatabase_p.h @@ -39,7 +39,7 @@ public: void populateFamily(const QString &familyName) override; void invalidate() override; - QStringList fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const override; + QStringList fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QFontDatabasePrivate::ExtendedScript script) const override; QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName, QFontDatabasePrivate::ApplicationFont *applicationFont = nullptr) override; void releaseHandle(void *handle) override; bool isPrivateFontFamily(const QString &family) const override; @@ -55,6 +55,7 @@ private: void populateThemeFonts(); void populateFromDescriptor(CTFontDescriptorRef font, const QString &familyName = QString(), QFontDatabasePrivate::ApplicationFont *applicationFont = nullptr); static CFArrayRef fallbacksForFamily(const QString &family); + QStringList fallbacksForScript(QFontDatabasePrivate::ExtendedScript script) const; QHash m_themeFonts; QHash>> m_systemFontDescriptors; diff --git a/src/gui/text/freetype/qfreetypefontdatabase.cpp b/src/gui/text/freetype/qfreetypefontdatabase.cpp index 018e590a..8e0aec1f 100644 --- a/src/gui/text/freetype/qfreetypefontdatabase.cpp +++ b/src/gui/text/freetype/qfreetypefontdatabase.cpp @@ -103,6 +103,7 @@ void QFreeTypeFontDatabase::addNamedInstancesForFace(void *face_, QFont::Stretch stretch, QFont::Style style, bool fixedPitch, + bool isColor, const QSupportedWritingSystems &writingSystems, const QByteArray &fileName, const QByteArray &fontData) @@ -183,6 +184,7 @@ void QFreeTypeFontDatabase::addNamedInstancesForFace(void *face_, true, 0, fixedPitch, + isColor, writingSystems, variantFontFile); } @@ -224,6 +226,12 @@ QStringList QFreeTypeFontDatabase::addTTFile(const QByteArray &fontData, const Q } numFaces = face->num_faces; +#if (FREETYPE_MAJOR*10000 + FREETYPE_MINOR*100 + FREETYPE_PATCH) >= 20501 + bool isColor = FT_HAS_COLOR(face); +#else + bool isColor = false; +#endif + QFont::Weight weight = QFont::Normal; QFont::Style style = QFont::StyleNormal; @@ -337,9 +345,9 @@ QStringList QFreeTypeFontDatabase::addTTFile(const QByteArray &fontData, const Q applicationFont->properties.append(properties); } - registerFont(family, styleName, QString(), weight, style, stretch, true, true, 0, fixedPitch, writingSystems, fontFile); + registerFont(family, styleName, QString(), weight, style, stretch, true, true, 0, fixedPitch, isColor, writingSystems, fontFile); - addNamedInstancesForFace(face, index, family, styleName, weight, stretch, style, fixedPitch, writingSystems, file, fontData); + addNamedInstancesForFace(face, index, family, styleName, weight, stretch, style, fixedPitch, isColor, writingSystems, file, fontData); families.append(family); diff --git a/src/gui/text/freetype/qfreetypefontdatabase_p.h b/src/gui/text/freetype/qfreetypefontdatabase_p.h index 5fcec585..bc5cdbff 100644 --- a/src/gui/text/freetype/qfreetypefontdatabase_p.h +++ b/src/gui/text/freetype/qfreetypefontdatabase_p.h @@ -47,7 +47,7 @@ public: static void addNamedInstancesForFace(void *face, int faceIndex, const QString &family, const QString &styleName, QFont::Weight weight, QFont::Stretch stretch, - QFont::Style style, bool fixedPitch, + QFont::Style style, bool fixedPitch, bool isColor, const QSupportedWritingSystems &writingSystems, const QByteArray &fileName, const QByteArray &fontData); diff --git a/src/gui/text/qfont.cpp b/src/gui/text/qfont.cpp index c8881a9b..94343854 100644 --- a/src/gui/text/qfont.cpp +++ b/src/gui/text/qfont.cpp @@ -383,13 +383,13 @@ void QFontPrivate::unsetFeature(QFont::Tag tag) QFontEngineData::QFontEngineData() : ref(0), fontCacheId(QFontCache::instance()->id()) { - memset(engines, 0, QChar::ScriptCount * sizeof(QFontEngine *)); + memset(engines, 0, QFontDatabasePrivate::ScriptCount * sizeof(QFontEngine *)); } QFontEngineData::~QFontEngineData() { Q_ASSERT(ref.loadRelaxed() == 0); - for (int i = 0; i < QChar::ScriptCount; ++i) { + for (int i = 0; i < QFontDatabasePrivate::ScriptCount; ++i) { if (engines[i]) { if (!engines[i]->ref.deref()) delete engines[i]; @@ -2683,8 +2683,10 @@ void QFont::clearFeatures() d->features.clear(); } -extern QStringList qt_fallbacksForFamily(const QString &family, QFont::Style style, - QFont::StyleHint styleHint, QChar::Script script); +extern QStringList qt_fallbacksForFamily(const QString &family, + QFont::Style style, + QFont::StyleHint styleHint, + QFontDatabasePrivate::ExtendedScript script); /*! \fn QString QFont::defaultFamily() const @@ -2696,8 +2698,10 @@ extern QStringList qt_fallbacksForFamily(const QString &family, QFont::Style sty */ QString QFont::defaultFamily() const { - const QStringList fallbacks = qt_fallbacksForFamily(QString(), QFont::StyleNormal - , QFont::StyleHint(d->request.styleHint), QChar::Script_Common); + const QStringList fallbacks = qt_fallbacksForFamily(QString(), + QFont::StyleNormal, + QFont::StyleHint(d->request.styleHint), + QFontDatabasePrivate::Script_Common); if (!fallbacks.isEmpty()) return fallbacks.first(); return QString(); @@ -3394,7 +3398,7 @@ void QFontCache::clear() end = engineDataCache.end(); while (it != end) { QFontEngineData *data = it.value(); - for (int i = 0; i < QChar::ScriptCount; ++i) { + for (int i = 0; i < QFontDatabasePrivate::ScriptCount; ++i) { if (data->engines[i]) { if (!data->engines[i]->ref.deref()) { Q_ASSERT(engineCacheCount.value(data->engines[i]) == 0); diff --git a/src/gui/text/qfont_p.h b/src/gui/text/qfont_p.h index b674e711..844ac5fc 100644 --- a/src/gui/text/qfont_p.h +++ b/src/gui/text/qfont_p.h @@ -23,6 +23,7 @@ #include "QtCore/qstringlist.h" #include #include "private/qfixed_p.h" +#include "private/qfontdatabase_p.h" QT_BEGIN_NAMESPACE @@ -152,8 +153,7 @@ public: QAtomicInt ref; const int fontCacheId; - QFontEngine *engines[QChar::ScriptCount]; - + QFontEngine *engines[QFontDatabasePrivate::ScriptCount]; private: Q_DISABLE_COPY_MOVE(QFontEngineData) }; diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp index 28539977..96c2337e 100644 --- a/src/gui/text/qfontdatabase.cpp +++ b/src/gui/text/qfontdatabase.cpp @@ -413,6 +413,8 @@ static bool familySupportsWritingSystem(QtFontFamily *family, size_t writingSyst Q_GUI_EXPORT QFontDatabase::WritingSystem qt_writing_system_for_script(int script) { + if (script >= QChar::ScriptCount) + return QFontDatabase::Any; return QFontDatabase::WritingSystem(std::find(scriptForWritingSystem, scriptForWritingSystem + QFontDatabase::WritingSystemsCount, script) - scriptForWritingSystem); @@ -537,7 +539,7 @@ QFontDatabasePrivate *QFontDatabasePrivate::instance() void qt_registerFont(const QString &familyName, const QString &stylename, const QString &foundryname, int weight, QFont::Style style, int stretch, bool antialiased, - bool scalable, int pixelSize, bool fixedPitch, + bool scalable, int pixelSize, bool fixedPitch, bool colorFont, const QSupportedWritingSystems &writingSystems, void *handle) { auto *d = QFontDatabasePrivate::instance(); @@ -549,6 +551,7 @@ void qt_registerFont(const QString &familyName, const QString &stylename, styleKey.stretch = stretch; QtFontFamily *f = d->family(familyName, QFontDatabasePrivate::EnsureCreated); f->fixedPitch = fixedPitch; + f->colorFont = colorFont; for (int i = 0; i < QFontDatabase::WritingSystemsCount; ++i) { if (writingSystems.supported(QFontDatabase::WritingSystem(i))) @@ -620,7 +623,10 @@ bool qt_isFontFamilyPopulated(const QString &familyName) Default implementation returns a list of fonts for which \a style and \a script support has been reported during the font database population. */ -QStringList QPlatformFontDatabase::fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const +QStringList QPlatformFontDatabase::fallbacksForFamily(const QString &family, + QFont::Style style, + QFont::StyleHint styleHint, + QFontDatabasePrivate::ExtendedScript script) const { Q_UNUSED(family); Q_UNUSED(styleHint); @@ -659,7 +665,10 @@ QStringList QPlatformFontDatabase::fallbacksForFamily(const QString &family, QFo return preferredFallbacks + otherFallbacks; } -static QStringList fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) +static QStringList fallbacksForFamily(const QString &family, + QFont::Style style, + QFont::StyleHint styleHint, + QFontDatabasePrivate::ExtendedScript script) { QMutexLocker locker(fontDatabaseMutex()); auto *db = QFontDatabasePrivate::ensureFontDatabase(); @@ -670,7 +679,7 @@ static QStringList fallbacksForFamily(const QString &family, QFont::Style style, return *fallbacks; // make sure that the db has all fallback families - QStringList userFallbacks = db->applicationFallbackFontFamilies.value(script == QChar::Script_Latin ? QChar::Script_Common : script); + QStringList userFallbacks = db->applicationFallbackFontFamilies(script == QFontDatabasePrivate::Script_Latin ? QFontDatabasePrivate::Script_Common : script); QStringList retList = userFallbacks + QGuiApplicationPrivate::platformIntegration()->fontDatabase()->fallbacksForFamily(family,style,styleHint,script); QStringList::iterator i; @@ -693,7 +702,7 @@ static QStringList fallbacksForFamily(const QString &family, QFont::Style style, return retList; } -QStringList qt_fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) +QStringList qt_fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QFontDatabasePrivate::ExtendedScript script) { QMutexLocker locker(fontDatabaseMutex()); return fallbacksForFamily(family, style, styleHint, script); @@ -722,10 +731,10 @@ QFontEngine *QFontDatabasePrivate::loadSingleEngine(int script, QFontCache::Key key(def,script); QFontEngine *engine = fontCache->findEngine(key); if (!engine) { - const bool cacheForCommonScript = script != QChar::Script_Common + const bool cacheForCommonScript = script != QFontDatabasePrivate::Script_Common && (family->writingSystems[QFontDatabase::Latin] & QtFontFamily::Supported) != 0; - if (Q_LIKELY(cacheForCommonScript)) { + if (Q_LIKELY(cacheForCommonScript) && script < QChar::ScriptCount) { // fast path: check if engine was loaded for another script key.script = QChar::Script_Common; engine = fontCache->findEngine(key); @@ -757,7 +766,7 @@ QFontEngine *QFontDatabasePrivate::loadSingleEngine(int script, engine = pfdb->fontEngine(def, size->handle); if (engine) { // Also check for OpenType tables when using complex scripts - if (!engine->supportsScript(QChar::Script(script))) { + if (script < QChar::ScriptCount && !engine->supportsScript(QChar::Script(script))) { qCInfo(lcFontDb, "OpenType support missing for \"%ls\", script %d", qUtf16Printable(def.families.constFirst()), script); if (engine->ref.loadRelaxed() == 0) @@ -789,7 +798,8 @@ QFontEngine *QFontDatabasePrivate::loadEngine(int script, const QFontDef &reques Q_TRACE(QFontDatabase_loadEngine, request.families.join(QLatin1Char(';')), request.pointSize); QPlatformFontDatabase *pfdb = QGuiApplicationPrivate::platformIntegration()->fontDatabase(); - QFontEngineMulti *pfMultiEngine = pfdb->fontEngineMulti(engine, QChar::Script(script)); + QFontEngineMulti *pfMultiEngine = pfdb->fontEngineMulti(engine, + QFontDatabasePrivate::ExtendedScript(script)); if (!request.fallBackFamilies.isEmpty()) { QStringList fallbacks = request.fallBackFamilies; @@ -797,7 +807,10 @@ QFontEngine *QFontDatabasePrivate::loadEngine(int script, const QFontDef &reques if (styleHint == QFont::AnyStyle && request.fixedPitch) styleHint = QFont::TypeWriter; - fallbacks += fallbacksForFamily(family->name, QFont::Style(style->key.style), styleHint, QChar::Script(script)); + fallbacks += fallbacksForFamily(family->name, + QFont::Style(style->key.style), + styleHint, + QFontDatabasePrivate::ExtendedScript(script)); pfMultiEngine->setFallbackFamiliesList(fallbacks); } @@ -877,8 +890,10 @@ unsigned int QFontDatabasePrivate::bestFoundry(int script, unsigned int score, i desc->style = nullptr; desc->size = nullptr; - - qCDebug(lcFontMatch, " REMARK: looking for best foundry for family '%s' [%d]", family->name.toLatin1().constData(), family->count); + qCDebug(lcFontMatch, " REMARK: looking for best foundry for family '%s'%s [%d]", + family->name.toLatin1().constData(), + family->colorFont ? " (color font)" : "", + family->count); for (int x = 0; x < family->count; ++x) { QtFontFoundry *foundry = family->foundries[x]; @@ -1068,6 +1083,10 @@ int QFontDatabasePrivate::match(int script, const QFontDef &request, const QStri if (writingSystem != QFontDatabase::Any && !familySupportsWritingSystem(test.family, writingSystem)) continue; + // Check if we require a color font and check for match + if (script == QFontDatabasePrivate::Script_Emoji && !test.family->colorFont) + continue; + // as we know the script is supported, we can be sure // to find a matching font here. unsigned int newscore = @@ -2202,6 +2221,48 @@ bool QFontDatabasePrivate::isApplicationFont(const QString &fileName) return false; } +void QFontDatabasePrivate::setApplicationFallbackFontFamilies(ExtendedScript script, const QStringList &familyNames) +{ + applicationFallbackFontFamiliesHash[script] = familyNames; + + QFontCache::instance()->clear(); + fallbacksCache.clear(); +} + +QStringList QFontDatabasePrivate::applicationFallbackFontFamilies(ExtendedScript script) +{ + return applicationFallbackFontFamiliesHash.value(script); +} + +bool QFontDatabasePrivate::removeApplicationFallbackFontFamily(ExtendedScript script, const QString &familyName) +{ + auto it = applicationFallbackFontFamiliesHash.find(script); + if (it != applicationFallbackFontFamiliesHash.end()) { + if (it->removeAll(familyName) > 0) { + if (it->isEmpty()) + it = applicationFallbackFontFamiliesHash.erase(it); + QFontCache::instance()->clear(); + fallbacksCache.clear(); + return true; + } + } + + return false; +} + +void QFontDatabasePrivate::addApplicationFallbackFontFamily(ExtendedScript script, const QString &familyName) +{ + auto it = applicationFallbackFontFamiliesHash.find(script); + if (it == applicationFallbackFontFamiliesHash.end()) + it = applicationFallbackFontFamiliesHash.insert(script, QStringList{}); + + it->prepend(familyName); + + QFontCache::instance()->clear(); + fallbacksCache.clear(); +} + + /*! \since 4.2 @@ -2398,7 +2459,7 @@ void QFontDatabase::addApplicationFallbackFontFamily(QChar::Script script, const { QMutexLocker locker(fontDatabaseMutex()); - if (script < QChar::Script_Common) { + if (script < QChar::Script_Common || script >= QChar::ScriptCount) { qCWarning(lcFontDb) << "Invalid script passed to addApplicationFallbackFontFamily:" << script; return; } @@ -2407,14 +2468,7 @@ void QFontDatabase::addApplicationFallbackFontFamily(QChar::Script script, const script = QChar::Script_Common; auto *db = QFontDatabasePrivate::instance(); - auto it = db->applicationFallbackFontFamilies.find(script); - if (it == db->applicationFallbackFontFamilies.end()) - it = db->applicationFallbackFontFamilies.insert(script, QStringList{}); - - it->prepend(familyName); - - QFontCache::instance()->clear(); - db->fallbacksCache.clear(); + db->addApplicationFallbackFontFamily(QFontDatabasePrivate::ExtendedScript(script), familyName); } /*! @@ -2431,7 +2485,7 @@ bool QFontDatabase::removeApplicationFallbackFontFamily(QChar::Script script, co { QMutexLocker locker(fontDatabaseMutex()); - if (script < QChar::Script_Common) { + if (script < QChar::Script_Common || script >= QChar::ScriptCount) { qCWarning(lcFontDb) << "Invalid script passed to removeApplicationFallbackFontFamily:" << script; return false; } @@ -2440,18 +2494,8 @@ bool QFontDatabase::removeApplicationFallbackFontFamily(QChar::Script script, co script = QChar::Script_Common; auto *db = QFontDatabasePrivate::instance(); - auto it = db->applicationFallbackFontFamilies.find(script); - if (it != db->applicationFallbackFontFamilies.end()) { - if (it->removeAll(familyName) > 0) { - if (it->isEmpty()) - it = db->applicationFallbackFontFamilies.erase(it); - QFontCache::instance()->clear(); - db->fallbacksCache.clear(); - return true; - } - } - - return false; + return db->removeApplicationFallbackFontFamily(QFontDatabasePrivate::ExtendedScript(script), + familyName); } /*! @@ -2471,7 +2515,7 @@ void QFontDatabase::setApplicationFallbackFontFamilies(QChar::Script script, con { QMutexLocker locker(fontDatabaseMutex()); - if (script < QChar::Script_Common) { + if (script < QChar::Script_Common || script >= QChar::ScriptCount) { qCWarning(lcFontDb) << "Invalid script passed to setApplicationFallbackFontFamilies:" << script; return; } @@ -2480,10 +2524,8 @@ void QFontDatabase::setApplicationFallbackFontFamilies(QChar::Script script, con script = QChar::Script_Common; auto *db = QFontDatabasePrivate::instance(); - db->applicationFallbackFontFamilies[script] = familyNames; - - QFontCache::instance()->clear(); - db->fallbacksCache.clear(); + db->setApplicationFallbackFontFamilies(QFontDatabasePrivate::ExtendedScript(script), + familyNames); } /*! @@ -2498,11 +2540,81 @@ QStringList QFontDatabase::applicationFallbackFontFamilies(QChar::Script script) { QMutexLocker locker(fontDatabaseMutex()); + if (script >= QChar::ScriptCount) { + qCWarning(lcFontDb) << "Invalid script passed to applicationFallbackFontFamilies:" << script; + return QStringList{}; + } + if (script == QChar::Script_Latin) script = QChar::Script_Common; auto *db = QFontDatabasePrivate::instance(); - return db->applicationFallbackFontFamilies.value(script); + return db->applicationFallbackFontFamilies(QFontDatabasePrivate::ExtendedScript(script)); +} + +/*! + \since 6.9 + + Adds \a familyName as an application-defined emoji font. + + For displaying multi-color emojis or emoji sequences, Qt will by default prefer the system + default emoji font. Sometimes the application may want to override the default, either to + achieve a specific visual style or to show emojis that are not supported by the system. + + \sa removeApplicationEmojiFontFamily, setApplicationEmojiFontFamilies(), applicationEmojiFontFamilies(), addApplicationFallbackFontFamily() +*/ +void QFontDatabase::addApplicationEmojiFontFamily(const QString &familyName) +{ + QMutexLocker locker(fontDatabaseMutex()); + auto *db = QFontDatabasePrivate::instance(); + db->addApplicationFallbackFontFamily(QFontDatabasePrivate::Script_Emoji, familyName); +} + +/*! + \since 6.9 + + Removes \a familyName from the list of application-defined emoji fonts, + provided that it has previously been added with \l{addApplicationEmojiFontFamily()}. + + Returns true if the family name was in the list and false if it was not. + + \sa addApplicationEmojiFontFamily(), setApplicationEmojiFontFamilies(), applicationEmojiFontFamilies(), removeApplicationFallbackFontFamily() +*/ +bool QFontDatabase::removeApplicationEmojiFontFamily(const QString &familyName) +{ + QMutexLocker locker(fontDatabaseMutex()); + auto *db = QFontDatabasePrivate::instance(); + return db->removeApplicationFallbackFontFamily(QFontDatabasePrivate::Script_Emoji, + familyName); +} + +/*! + \since 6.9 + + Sets the list of application-defined emoji fonts to \a familyNames. + + \sa addApplicationEmojiFontFamily(), removeApplicationEmojiFontFamily(), applicationEmojiFontFamilies(), setApplicationFallbackFontFamilies() +*/ +void QFontDatabase::setApplicationEmojiFontFamilies(const QStringList &familyNames) +{ + QMutexLocker locker(fontDatabaseMutex()); + auto *db = QFontDatabasePrivate::instance(); + db->setApplicationFallbackFontFamilies(QFontDatabasePrivate::Script_Emoji, + familyNames); +} + +/*! + \since 6.9 + + Returns the list of application-defined emoji font families. + + \sa addApplicationEmojiFontFamily(), removeApplicationEmojiFontFamily(), setApplicationEmojiFontFamilies(), applicationFallbackFontFamilies() +*/ +QStringList QFontDatabase::applicationEmojiFontFamilies() +{ + QMutexLocker locker(fontDatabaseMutex()); + auto *db = QFontDatabasePrivate::instance(); + return db->applicationFallbackFontFamilies(QFontDatabasePrivate::Script_Emoji); } /*! @@ -2559,12 +2671,27 @@ QFontEngine *QFontDatabasePrivate::findFont(const QFontDef &req, QtFontDesc desc; QList blackListed; unsigned int score = UINT_MAX; - int index = match(multi ? QChar::Script_Common : script, request, family_name, foundry_name, &desc, blackListed, &score); + + // 1. + // We start by looking up the family name and finding the best style/foundry. For multi fonts + // we always want the requested font to be on top, even if it does not support the selected + // script, since the fallback mechanism will handle this later. For NoFontMerging fonts, we pass + // in the script in order to prefer foundries that support the script. If none is found, we will + // retry with Script_Common later. Note that Script_Emoji is special. This means the Unicode + // algorithm has determined that we should use a color font. If the selected font is not + // a color font, we use the fall back mechanism to find one, since we want to prefer *any* color + // font over a non-color font in this case. + int index = match(multi && script != QFontDatabasePrivate::Script_Emoji ? QChar::Script_Common : script, request, family_name, foundry_name, &desc, blackListed, &score); + + // 2. + // If no font was found or it was not a perfect match, we let the database populate family + // aliases and try again. if (score > 0 && QGuiApplicationPrivate::platformIntegration()->fontDatabase()->populateFamilyAliases(family_name)) { // We populated family aliases (e.g. localized families), so try again - index = match(multi ? QChar::Script_Common : script, request, family_name, foundry_name, &desc, blackListed); + index = match(multi && script != QFontDatabasePrivate::Script_Emoji ? QChar::Script_Common : script, request, family_name, foundry_name, &desc, blackListed); } + // 3. // If we do not find a match and NoFontMerging is set, use the requested font even if it does // not support the script. // @@ -2589,6 +2716,10 @@ QFontEngine *QFontDatabasePrivate::findFont(const QFontDef &req, qCDebug(lcFontMatch, " NO MATCH FOUND\n"); } + // 4. + // If no font matching the script + family exists, we go via the fallback mechanism. This + // happens when the family does not exist or if we want a color font and the requested font + // is not. if (!engine) { if (!requestFamily.isEmpty()) { QFont::StyleHint styleHint = QFont::StyleHint(request.styleHint); @@ -2599,32 +2730,49 @@ QFontEngine *QFontDatabasePrivate::findFont(const QFontDef &req, + fallbacksForFamily(requestFamily, QFont::Style(request.style), styleHint, - QChar::Script(script)); + QFontDatabasePrivate::ExtendedScript(script)); if (script > QChar::Script_Common) fallbacks += QString(); // Find the first font matching the specified script. - for (int i = 0; !engine && i < fallbacks.size(); i++) { - QFontDef def = request; - def.families = QStringList(fallbacks.at(i)); - QFontCache::Key key(def, script, multi ? 1 : 0); - engine = fontCache->findEngine(key); - if (!engine) { - QtFontDesc desc; - do { - index = match(multi ? QChar::Script_Common : script, def, def.families.constFirst(), ""_L1, &desc, blackListed); - if (index >= 0) { - QFontDef loadDef = def; - if (loadDef.families.isEmpty()) - loadDef.families = QStringList(desc.family->name); - engine = loadEngine(script, loadDef, desc.family, desc.foundry, desc.style, desc.size); - if (engine) - initFontDef(desc, loadDef, &engine->fontDef, multi); - else - blackListed.append(index); - } - } while (index >= 0 && !engine); + auto findMatchingFallback = [&](int xscript) { + for (int i = 0; !engine && i < fallbacks.size(); i++) { + QFontDef def = request; + + def.families = QStringList(fallbacks.at(i)); + QFontCache::Key key(def, xscript, multi ? 1 : 0); + engine = fontCache->findEngine(key); + if (!engine) { + QtFontDesc desc; + do { + index = match(xscript, + def, + def.families.constFirst(), + ""_L1, + &desc, + blackListed); + + if (index >= 0) { + QFontDef loadDef = def; + if (loadDef.families.isEmpty()) + loadDef.families = QStringList(desc.family->name); + engine = loadEngine(xscript, loadDef, desc.family, desc.foundry, desc.style, desc.size); + if (engine) + initFontDef(desc, loadDef, &engine->fontDef, multi); + else + blackListed.append(index); + } + } while (index >= 0 && !engine); + } } - } + }; + + findMatchingFallback(multi && script != QFontDatabasePrivate::Script_Emoji ? QChar::Script_Common: script); + + // If we are looking for a color font and there are no color fonts on the system, + // we will end up here, for one final pass. This is a rare occurrence so we accept + // and extra pass on the fallbacks for this. + if (!engine && script == QFontDatabasePrivate::Script_Emoji) + findMatchingFallback(QChar::Script_Common); } if (!engine) @@ -2721,7 +2869,7 @@ void QFontDatabasePrivate::load(const QFontPrivate *d, int script) Q_ASSERT(fe); if (fe->symbol || (d->request.styleStrategy & QFont::NoFontMerging)) { - for (int i = 0; i < QChar::ScriptCount; ++i) { + for (int i = 0; i < QFontDatabasePrivate::ScriptCount; ++i) { if (!d->engineData->engines[i]) { d->engineData->engines[i] = fe; fe->ref.ref(); @@ -2738,11 +2886,13 @@ QString QFontDatabasePrivate::resolveFontFamilyAlias(const QString &family) return QGuiApplicationPrivate::platformIntegration()->fontDatabase()->resolveFontFamilyAlias(family); } -Q_GUI_EXPORT QStringList qt_sort_families_by_writing_system(QChar::Script script, const QStringList &families) +Q_GUI_EXPORT QStringList qt_sort_families_by_writing_system(QFontDatabasePrivate::ExtendedScript script, + const QStringList &families) { size_t writingSystem = qt_writing_system_for_script(script); - if (writingSystem == QFontDatabase::Any - || writingSystem >= QFontDatabase::WritingSystemsCount) { + if (script != QFontDatabasePrivate::Script_Emoji + && (writingSystem == QFontDatabase::Any + || writingSystem >= QFontDatabase::WritingSystemsCount)) { return families; } @@ -2762,7 +2912,8 @@ Q_GUI_EXPORT QStringList qt_sort_families_by_writing_system(QChar::Script script uint order = i; if (testFamily == nullptr - || !familySupportsWritingSystem(testFamily, writingSystem)) { + || (script == QFontDatabasePrivate::Script_Emoji && !testFamily->colorFont) + || (script != QFontDatabasePrivate::Script_Emoji && !familySupportsWritingSystem(testFamily, writingSystem))) { order |= 1u << 31; } diff --git a/src/gui/text/qfontdatabase.h b/src/gui/text/qfontdatabase.h index 91a53426..cd5cc972 100644 --- a/src/gui/text/qfontdatabase.h +++ b/src/gui/text/qfontdatabase.h @@ -117,6 +117,11 @@ public: static void setApplicationFallbackFontFamilies(QChar::Script, const QStringList &familyNames); static QStringList applicationFallbackFontFamilies(QChar::Script script); + static void addApplicationEmojiFontFamily(const QString &familyName); + static bool removeApplicationEmojiFontFamily(const QString &familyName); + static void setApplicationEmojiFontFamilies(const QStringList &familyNames); + static QStringList applicationEmojiFontFamilies(); + static QFont systemFont(SystemFont type); }; diff --git a/src/gui/text/qfontdatabase_p.h b/src/gui/text/qfontdatabase_p.h index 38e1b4ad..55fa1317 100644 --- a/src/gui/text/qfontdatabase_p.h +++ b/src/gui/text/qfontdatabase_p.h @@ -29,7 +29,7 @@ struct QtFontFallbacksCacheKey QString family; QFont::Style style; QFont::StyleHint styleHint; - QChar::Script script; + int script; }; inline bool operator==(const QtFontFallbacksCacheKey &lhs, const QtFontFallbacksCacheKey &rhs) noexcept @@ -151,6 +151,7 @@ struct Q_GUI_EXPORT QtFontFamily : populated(false), fixedPitch(false), + colorFont(false), name(n), count(0), foundries(nullptr) { memset(writingSystems, 0, sizeof(writingSystems)); @@ -163,6 +164,7 @@ struct Q_GUI_EXPORT QtFontFamily bool populated : 1; bool fixedPitch : 1; + bool colorFont : 1; QString name; QStringList aliases; @@ -198,13 +200,21 @@ public: EnsurePopulated }; + // Expands QChar::Script by adding a special "script" for emoji sequences + enum ExtendedScript { + Script_Common = QChar::Script_Common, + Script_Latin = QChar::Script_Latin, + Script_Emoji = QChar::ScriptCount, + ScriptCount + }; + QtFontFamily *family(const QString &f, FamilyRequestFlags flags = EnsurePopulated); int count; QtFontFamily **families; bool populated = false; - QHash applicationFallbackFontFamilies; + QHash applicationFallbackFontFamiliesHash; QCache fallbacksCache; struct ApplicationFont { @@ -232,21 +242,30 @@ public: int addAppFont(const QByteArray &fontData, const QString &fileName); bool isApplicationFont(const QString &fileName); + void setApplicationFallbackFontFamilies(ExtendedScript script, const QStringList &familyNames); + QStringList applicationFallbackFontFamilies(ExtendedScript script); + bool removeApplicationFallbackFontFamily(ExtendedScript script, const QString &familyName); + void addApplicationFallbackFontFamily(ExtendedScript script, const QString &familyName); + static QFontDatabasePrivate *instance(); static void parseFontName(const QString &name, QString &foundry, QString &family); static QString resolveFontFamilyAlias(const QString &family); static QFontEngine *findFont(const QFontDef &request, - int script /* QChar::Script */, + int script /* QFontDatabasePrivate::ExtendedScript */, bool preferScriptOverFamily = false); - static void load(const QFontPrivate *d, int script /* QChar::Script */); + static void load(const QFontPrivate *d, int script /* QFontDatabasePrivate::ExtendedScript */); static QFontDatabasePrivate *ensureFontDatabase(); void invalidate(); private: - static int match(int script, const QFontDef &request, const QString &family_name, - const QString &foundry_name, QtFontDesc *desc, const QList &blacklistedFamilies, + static int match(int script, + const QFontDef &request, + const QString &family_name, + const QString &foundry_name, + QtFontDesc *desc, + const QList &blacklistedFamilies, unsigned int *resultingScore = nullptr); static unsigned int bestFoundry(int script, unsigned int score, int styleStrategy, diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp index f5aec978..2e5c0624 100644 --- a/src/gui/text/qfontengine.cpp +++ b/src/gui/text/qfontengine.cpp @@ -1734,7 +1734,7 @@ QFontEngineMulti::~QFontEngineMulti() } } -QStringList qt_fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script); +QStringList qt_fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QFontDatabasePrivate::ExtendedScript script); void QFontEngineMulti::ensureFallbackFamiliesQueried() { @@ -1744,7 +1744,7 @@ void QFontEngineMulti::ensureFallbackFamiliesQueried() setFallbackFamiliesList(qt_fallbacksForFamily(fontDef.families.constFirst(), QFont::Style(fontDef.style), styleHint, - QChar::Script(m_script))); + QFontDatabasePrivate::ExtendedScript(m_script))); } void QFontEngineMulti::setFallbackFamiliesList(const QStringList &fallbackFamilies) @@ -1792,7 +1792,7 @@ QFontEngine *QFontEngineMulti::loadEngine(int at) // info about the actual script of the characters may have been discarded, // so we do not check for writing system support, but instead just load // the family indiscriminately. - if (QFontEngine *engine = QFontDatabasePrivate::findFont(request, QChar::Script_Common)) { + if (QFontEngine *engine = QFontDatabasePrivate::findFont(request, QFontDatabasePrivate::Script_Common)) { engine->fontDef.weight = request.weight; if (request.style > QFont::StyleNormal) engine->fontDef.style = request.style; @@ -2363,7 +2363,7 @@ QFontEngine *QFontEngineMulti::createMultiFontEngine(QFontEngine *fe, int script ++it; } if (!engine) { - engine = QGuiApplicationPrivate::instance()->platformIntegration()->fontDatabase()->fontEngineMulti(fe, QChar::Script(script)); + engine = QGuiApplicationPrivate::instance()->platformIntegration()->fontDatabase()->fontEngineMulti(fe, QFontDatabasePrivate::ExtendedScript(script)); fc->insertEngine(key, engine, /* insertMulti */ !faceIsLocal); } Q_ASSERT(engine); diff --git a/src/gui/text/qplatformfontdatabase.cpp b/src/gui/text/qplatformfontdatabase.cpp index a146254f..3d3f3c30 100644 --- a/src/gui/text/qplatformfontdatabase.cpp +++ b/src/gui/text/qplatformfontdatabase.cpp @@ -24,7 +24,7 @@ Q_LOGGING_CATEGORY(lcQpaFonts, "qt.qpa.fonts") void qt_registerFont(const QString &familyname, const QString &stylename, const QString &foundryname, int weight, QFont::Style style, int stretch, bool antialiased, - bool scalable, int pixelSize, bool fixedPitch, + bool scalable, int pixelSize, bool fixedPitch, bool colorFont, const QSupportedWritingSystems &writingSystems, void *hanlde); void qt_registerFontFamily(const QString &familyName); @@ -55,7 +55,7 @@ bool qt_isFontFamilyPopulated(const QString &familyName); void QPlatformFontDatabase::registerFont(const QString &familyname, const QString &stylename, const QString &foundryname, QFont::Weight weight, QFont::Style style, QFont::Stretch stretch, bool antialiased, - bool scalable, int pixelSize, bool fixedPitch, + bool scalable, int pixelSize, bool fixedPitch, bool colorFont, const QSupportedWritingSystems &writingSystems, void *usrPtr) { if (scalable) @@ -63,7 +63,7 @@ void QPlatformFontDatabase::registerFont(const QString &familyname, const QStrin qt_registerFont(familyname, stylename, foundryname, weight, style, stretch, antialiased, scalable, pixelSize, - fixedPitch, writingSystems, usrPtr); + fixedPitch, colorFont, writingSystems, usrPtr); } /*! @@ -271,7 +271,8 @@ void QPlatformFontDatabase::invalidate() option to fall back to the fonts given by \a fallbacks if \a fontEngine does not support a certain character. */ -QFontEngineMulti *QPlatformFontDatabase::fontEngineMulti(QFontEngine *fontEngine, QChar::Script script) +QFontEngineMulti *QPlatformFontDatabase::fontEngineMulti(QFontEngine *fontEngine, + QFontDatabasePrivate::ExtendedScript script) { return new QFontEngineMulti(fontEngine, script); } diff --git a/src/gui/text/qplatformfontdatabase.h b/src/gui/text/qplatformfontdatabase.h index 3007a118..ba6dfac4 100644 --- a/src/gui/text/qplatformfontdatabase.h +++ b/src/gui/text/qplatformfontdatabase.h @@ -20,7 +20,6 @@ #include #include #include -#include #include QT_BEGIN_NAMESPACE @@ -72,12 +71,12 @@ public: virtual void populateFamily(const QString &familyName); virtual void invalidate(); - virtual QStringList fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const; + virtual QStringList fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QFontDatabasePrivate::ExtendedScript script) const; virtual QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName, QFontDatabasePrivate::ApplicationFont *font = nullptr); virtual QFontEngine *fontEngine(const QFontDef &fontDef, void *handle); virtual QFontEngine *fontEngine(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference); - virtual QFontEngineMulti *fontEngineMulti(QFontEngine *fontEngine, QChar::Script script); + virtual QFontEngineMulti *fontEngineMulti(QFontEngine *fontEngine, QFontDatabasePrivate::ExtendedScript script); virtual void releaseHandle(void *handle); virtual QString fontDir() const; @@ -99,7 +98,7 @@ public: static void registerFont(const QString &familyname, const QString &stylename, const QString &foundryname, QFont::Weight weight, QFont::Style style, QFont::Stretch stretch, bool antialiased, - bool scalable, int pixelSize, bool fixedPitch, + bool scalable, int pixelSize, bool fixedPitch, bool colorFont, const QSupportedWritingSystems &writingSystems, void *handle); static void registerFontFamily(const QString &familyName); diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index 08512bea..0f10f4a7 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -1409,8 +1409,8 @@ void QTextEngine::shapeText(int item) const QFont font = f.font(); # if QT_CONFIG(harfbuzz) kerningEnabled = font.kerning(); - shapingEnabled = QFontEngine::scriptRequiresOpenType(QChar::Script(si.analysis.script)) - || (font.styleStrategy() & QFont::PreferNoShaping) == 0; + shapingEnabled = (si.analysis.script < QChar::ScriptCount && QFontEngine::scriptRequiresOpenType(QChar::Script(si.analysis.script))) + || (font.styleStrategy() & QFont::PreferNoShaping) == 0; # endif wordSpacing = QFixed::fromReal(font.wordSpacing()); letterSpacing = QFixed::fromReal(font.letterSpacing()); @@ -1422,8 +1422,8 @@ void QTextEngine::shapeText(int item) const QFont font = this->font(si); #if QT_CONFIG(harfbuzz) kerningEnabled = font.d->kerning; - shapingEnabled = QFontEngine::scriptRequiresOpenType(QChar::Script(si.analysis.script)) - || (font.d->request.styleStrategy & QFont::PreferNoShaping) == 0; + shapingEnabled = (si.analysis.script < QChar::ScriptCount && QFontEngine::scriptRequiresOpenType(QChar::Script(si.analysis.script))) + || (font.d->request.styleStrategy & QFont::PreferNoShaping) == 0; #endif letterSpacingIsAbsolute = font.d->letterSpacingIsAbsolute; letterSpacing = font.d->letterSpacing; @@ -1615,7 +1615,9 @@ int QTextEngine::shapeTextWithHarfbuzzNG(const QScriptItem &si, hb_segment_properties_t props = HB_SEGMENT_PROPERTIES_DEFAULT; props.direction = si.analysis.bidiLevel % 2 ? HB_DIRECTION_RTL : HB_DIRECTION_LTR; - QChar::Script script = QChar::Script(si.analysis.script); + QChar::Script script = si.analysis.script < QChar::ScriptCount + ? QChar::Script(si.analysis.script) + : QChar::Script_Common; props.script = hb_qt_script_to_script(script); // ### TODO get_default_for_script? props.language = hb_language_get_default(); // use default language from locale @@ -1919,8 +1921,38 @@ void QTextEngine::validate() const layoutData->string.insert(specialData->preeditPosition, specialData->preeditText); } +#if !defined(QT_NO_EMOJISEGMENTER) +namespace { + + enum CharacterCategory { + EMOJI = 0, + EMOJI_TEXT_PRESENTATION = 1, + EMOJI_EMOJI_PRESENTATION = 2, + EMOJI_MODIFIER_BASE = 3, + EMOJI_MODIFIER = 4, + EMOJI_VS_BASE = 5, + REGIONAL_INDICATOR = 6, + KEYCAP_BASE = 7, + COMBINING_ENCLOSING_KEYCAP = 8, + COMBINING_ENCLOSING_CIRCLE_BACKSLASH = 9, + ZWJ = 10, + VS15 = 11, + VS16 = 12, + TAG_BASE = 13, + TAG_SEQUENCE = 14, + TAG_TERM = 15, + OTHER = 16 + }; + + typedef CharacterCategory *emoji_text_iter_t; + + #include "../../3rdparty/emoji-segmenter/emoji_presentation_scanner.c" +} +#endif + void QTextEngine::itemize() const { + static bool disableEmojiSegmenter = qEnvironmentVariableIntValue("QT_DISABLE_EMOJI_SEGMENTER") > 0; validate(); if (layoutData->items.size()) return; @@ -1950,9 +1982,76 @@ void QTextEngine::itemize() const } } +#if !defined(QT_NO_EMOJISEGMENTER) + QVarLengthArray categorizedString; + if (!disableEmojiSegmenter) { + // Parse emoji sequences + for (int i = 0; i < length; ++i) { + const QChar &c = string[i]; + const bool isSurrogate = c.isHighSurrogate() && i < length - 1; + const char32_t ucs4 = isSurrogate + ? QChar::surrogateToUcs4(c, string[++i]) + : c.unicode(); + const QUnicodeTables::Properties *p = QUnicodeTables::properties(ucs4); + + if (ucs4 == 0x20E3) + categorizedString.append(CharacterCategory::COMBINING_ENCLOSING_KEYCAP); + else if (ucs4 == 0x20E0) + categorizedString.append(CharacterCategory::COMBINING_ENCLOSING_CIRCLE_BACKSLASH); + else if (ucs4 == 0xFE0E) + categorizedString.append(CharacterCategory::VS15); + else if (ucs4 == 0xFE0F) + categorizedString.append(CharacterCategory::VS16); + else if (ucs4 == 0x200D) + categorizedString.append(CharacterCategory::ZWJ); + else if (ucs4 == 0x1F3F4) + categorizedString.append(CharacterCategory::TAG_BASE); + else if (ucs4 == 0xE007F) + categorizedString.append(CharacterCategory::TAG_TERM); + else if ((ucs4 >= 0xE0030 && ucs4 <= 0xE0039) || (ucs4 >= 0xE0061 && ucs4 <= 0xE007A)) + categorizedString.append(CharacterCategory::TAG_SEQUENCE); + else if (ucs4 >= 0x1F1E6 && ucs4 <= 0x1F1FF) + categorizedString.append(CharacterCategory::REGIONAL_INDICATOR); + // emoji_keycap_sequence = [0-9#*] \x{FE0F 20E3} + else if ((ucs4 >= 0x0030 && ucs4 <= 0x0039) || ucs4 == 0x0023 || ucs4 == 0x002A) + categorizedString.append(CharacterCategory::KEYCAP_BASE); + else if (p->emojiFlags & uchar(QUnicodeTables::EmojiFlags::Emoji_Modifier_Base)) + categorizedString.append(CharacterCategory::EMOJI_MODIFIER_BASE); + else if (p->emojiFlags & uchar(QUnicodeTables::EmojiFlags::Emoji_Modifier)) + categorizedString.append(CharacterCategory::EMOJI_MODIFIER); + else if (p->emojiFlags & uchar(QUnicodeTables::EmojiFlags::Emoji_Presentation)) + categorizedString.append(CharacterCategory::EMOJI_EMOJI_PRESENTATION); + // If it's in the emoji list and doesn't have the emoji presentation, it is text + // presentation. + else if (p->emojiFlags & uchar(QUnicodeTables::EmojiFlags::Emoji)) + categorizedString.append(CharacterCategory::EMOJI_TEXT_PRESENTATION); + else + categorizedString.append(CharacterCategory::OTHER); + } + } +#endif + const ushort *uc = string; const ushort *e = uc + length; + +#if !defined(QT_NO_EMOJISEGMENTER) + const emoji_text_iter_t categoriesStart = categorizedString.data(); + const emoji_text_iter_t categoriesEnd = categoriesStart + categorizedString.size(); + + emoji_text_iter_t categoryIt = categoriesStart; + + bool isEmoji = false; + bool hasVs = false; + emoji_text_iter_t nextIt = categoryIt; +#endif + while (uc < e) { +#if !defined(QT_NO_EMOJISEGMENTER) + // Find next emoji sequence + if (!disableEmojiSegmenter && categoryIt == nextIt) + nextIt = scan_emoji_presentation(categoryIt, categoriesEnd, &isEmoji, &hasVs); +#endif + switch (*uc) { case QChar::ObjectReplacementCharacter: { @@ -1992,7 +2091,27 @@ void QTextEngine::itemize() const default: analysis->flags = QScriptAnalysis::None; break; + }; + +#if !defined(QT_NO_EMOJISEGMENTER) + if (!disableEmojiSegmenter) { + if (isEmoji) { + static_assert(QChar::ScriptCount < USHRT_MAX); + analysis->script = QFontDatabasePrivate::Script_Emoji; + } + + if (QChar::isHighSurrogate(*uc) && (uc + 1) < e && QChar::isLowSurrogate(*(uc + 1))) { + if (isEmoji) + (analysis + 1)->script = QFontDatabasePrivate::Script_Emoji; + + ++uc; + ++analysis; + } + + ++categoryIt; } +#endif + ++uc; ++analysis; } diff --git a/src/gui/text/unix/qfontconfigdatabase.cpp b/src/gui/text/unix/qfontconfigdatabase.cpp index f6c59380..7866e341 100644 --- a/src/gui/text/unix/qfontconfigdatabase.cpp +++ b/src/gui/text/unix/qfontconfigdatabase.cpp @@ -477,6 +477,12 @@ static void populateFromPattern(FcPattern *pattern, FcPatternGetDouble (pattern, FC_PIXEL_SIZE, 0, &pixel_size); bool fixedPitch = spacing_value >= FC_MONO; + + FcBool colorFont = false; +#ifdef FC_COLOR + FcPatternGetBool(pattern, FC_COLOR, 1, &colorFont); +#endif + // Note: stretch should really be an int but registerFont incorrectly uses an enum QFont::Stretch stretch = QFont::Stretch(stretchFromFcWidth(width_value)); QString styleName = style_value ? QString::fromUtf8((const char *) style_value) : QString(); @@ -492,7 +498,7 @@ static void populateFromPattern(FcPattern *pattern, applicationFont->properties.append(properties); } - QPlatformFontDatabase::registerFont(familyName,styleName,QLatin1StringView((const char *)foundry_value),weight,style,stretch,antialias,scalable,pixel_size,fixedPitch,writingSystems,fontFile); + QPlatformFontDatabase::registerFont(familyName,styleName,QLatin1StringView((const char *)foundry_value),weight,style,stretch,antialias,scalable,pixel_size,fixedPitch,colorFont,writingSystems,fontFile); if (applicationFont != nullptr && face != nullptr && db != nullptr) { db->addNamedInstancesForFace(face, indexValue, @@ -502,6 +508,7 @@ static void populateFromPattern(FcPattern *pattern, stretch, style, fixedPitch, + colorFont, writingSystems, QByteArray((const char*)file_value), applicationFont->data); @@ -538,7 +545,7 @@ static void populateFromPattern(FcPattern *pattern, applicationFont->properties.append(properties); } FontFile *altFontFile = new FontFile(*fontFile); - QPlatformFontDatabase::registerFont(altFamilyName, altStyleName, QLatin1StringView((const char *)foundry_value),weight,style,stretch,antialias,scalable,pixel_size,fixedPitch,writingSystems,altFontFile); + QPlatformFontDatabase::registerFont(altFamilyName, altStyleName, QLatin1StringView((const char *)foundry_value),weight,style,stretch,antialias,scalable,pixel_size,fixedPitch,colorFont,writingSystems,altFontFile); } else { QPlatformFontDatabase::registerAliasToFontFamily(familyName, altFamilyName); } @@ -615,9 +622,9 @@ void QFontconfigDatabase::populateFontDatabase() while (f->qtname) { QString familyQtName = QString::fromLatin1(f->qtname); - registerFont(familyQtName,QString(),QString(),QFont::Normal,QFont::StyleNormal,QFont::Unstretched,true,true,0,f->fixed,ws,nullptr); - registerFont(familyQtName,QString(),QString(),QFont::Normal,QFont::StyleItalic,QFont::Unstretched,true,true,0,f->fixed,ws,nullptr); - registerFont(familyQtName,QString(),QString(),QFont::Normal,QFont::StyleOblique,QFont::Unstretched,true,true,0,f->fixed,ws,nullptr); + registerFont(familyQtName,QString(),QString(),QFont::Normal,QFont::StyleNormal,QFont::Unstretched,true,true,false,0,f->fixed,ws,nullptr); + registerFont(familyQtName,QString(),QString(),QFont::Normal,QFont::StyleItalic,QFont::Unstretched,true,true,false,0,f->fixed,ws,nullptr); + registerFont(familyQtName,QString(),QString(),QFont::Normal,QFont::StyleOblique,QFont::Unstretched,true,true,false,0,f->fixed,ws,nullptr); ++f; } @@ -636,7 +643,7 @@ void QFontconfigDatabase::invalidate() FcConfigAppFontClear(nullptr); } -QFontEngineMulti *QFontconfigDatabase::fontEngineMulti(QFontEngine *fontEngine, QChar::Script script) +QFontEngineMulti *QFontconfigDatabase::fontEngineMulti(QFontEngine *fontEngine, QFontDatabasePrivate::ExtendedScript script) { return new QFontEngineMultiFontConfig(fontEngine, script); } @@ -760,7 +767,10 @@ QFontEngine *QFontconfigDatabase::fontEngine(const QByteArray &fontData, qreal p return engine; } -QStringList QFontconfigDatabase::fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const +QStringList QFontconfigDatabase::fallbacksForFamily(const QString &family, + QFont::Style style, + QFont::StyleHint styleHint, + QFontDatabasePrivate::ExtendedScript script) const { QStringList fallbackFamilies; FcPattern *pattern = FcPatternCreate(); @@ -773,6 +783,14 @@ QStringList QFontconfigDatabase::fallbacksForFamily(const QString &family, QFont value.u.s = (const FcChar8 *)cs.data(); FcPatternAdd(pattern,FC_FAMILY,value,true); +#ifdef FC_COLOR + if (script == QFontDatabasePrivate::Script_Emoji) { + FcPatternAddBool(pattern, FC_COLOR, true); + value.u.s = (const FcChar8 *)"emoji"; + FcPatternAddWeak(pattern, FC_FAMILY, value, FcTrue); + } +#endif + int slant_value = FC_SLANT_ROMAN; if (style == QFont::StyleItalic) slant_value = FC_SLANT_ITALIC; @@ -780,8 +798,8 @@ QStringList QFontconfigDatabase::fallbacksForFamily(const QString &family, QFont slant_value = FC_SLANT_OBLIQUE; FcPatternAddInteger(pattern, FC_SLANT, slant_value); - Q_ASSERT(uint(script) < QChar::ScriptCount); - if (*specialLanguages[script] != '\0') { + Q_ASSERT(uint(script) < QFontDatabasePrivate::ScriptCount); + if (uint(script) < QChar::ScriptCount && *specialLanguages[script] != '\0') { FcLangSet *ls = FcLangSetCreate(); FcLangSetAdd(ls, (const FcChar8*)specialLanguages[script]); FcPatternAddLangSet(pattern, FC_LANG, ls); diff --git a/src/gui/text/unix/qfontconfigdatabase_p.h b/src/gui/text/unix/qfontconfigdatabase_p.h index dd7a70a3..40de8919 100644 --- a/src/gui/text/unix/qfontconfigdatabase_p.h +++ b/src/gui/text/unix/qfontconfigdatabase_p.h @@ -29,10 +29,14 @@ public: void populateFontDatabase() override; void invalidate() override; bool supportsVariableApplicationFonts() const override; - QFontEngineMulti *fontEngineMulti(QFontEngine *fontEngine, QChar::Script script) override; + QFontEngineMulti *fontEngineMulti(QFontEngine *fontEngine, + QFontDatabasePrivate::ExtendedScript script) override; QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) override; QFontEngine *fontEngine(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference) override; - QStringList fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const override; + QStringList fallbacksForFamily(const QString &family, + QFont::Style style, + QFont::StyleHint styleHint, + QFontDatabasePrivate::ExtendedScript script) const override; QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName, QFontDatabasePrivate::ApplicationFont *applicationFont = nullptr) override; QString resolveFontFamilyAlias(const QString &family) const override; QFont defaultFont() const override; diff --git a/src/gui/text/windows/qwindowsdirectwritefontdatabase.cpp b/src/gui/text/windows/qwindowsdirectwritefontdatabase.cpp index 610cd1d6..f2671b6c 100644 --- a/src/gui/text/windows/qwindowsdirectwritefontdatabase.cpp +++ b/src/gui/text/windows/qwindowsdirectwritefontdatabase.cpp @@ -138,9 +138,9 @@ void QWindowsDirectWriteFontDatabase::populateFamily(const QString &familyName) for (uint j = 0; j < matchingFonts->GetFontCount(); ++j) { DirectWriteScope font; if (SUCCEEDED(matchingFonts->GetFont(j, &font))) { - DirectWriteScope font1; - if (!SUCCEEDED(font->QueryInterface(__uuidof(IDWriteFont1), - reinterpret_cast(&font1)))) { + DirectWriteScope font2; + if (!SUCCEEDED(font->QueryInterface(__uuidof(IDWriteFont2), + reinterpret_cast(&font2)))) { qCWarning(lcQpaFonts) << "COM object does not support IDWriteFont1"; continue; } @@ -149,7 +149,7 @@ void QWindowsDirectWriteFontDatabase::populateFamily(const QString &familyName) QString englishLocaleFamilyName; DirectWriteScope fontFamily2; - if (SUCCEEDED(font1->GetFontFamily(&fontFamily2))) { + if (SUCCEEDED(font2->GetFontFamily(&fontFamily2))) { DirectWriteScope names; if (SUCCEEDED(fontFamily2->GetFamilyNames(&names))) { defaultLocaleFamilyName = hasDefaultLocale ? localeString(*names, defaultLocale) : QString(); @@ -162,14 +162,15 @@ void QWindowsDirectWriteFontDatabase::populateFamily(const QString &familyName) { DirectWriteScope names; - if (SUCCEEDED(font1->GetFaceNames(&names))) { + if (SUCCEEDED(font2->GetFaceNames(&names))) { QString defaultLocaleStyleName = hasDefaultLocale ? localeString(*names, defaultLocale) : QString(); QString englishLocaleStyleName = localeString(*names, englishLocale); - QFont::Stretch stretch = fromDirectWriteStretch(font1->GetStretch()); - QFont::Style style = fromDirectWriteStyle(font1->GetStyle()); - QFont::Weight weight = fromDirectWriteWeight(font1->GetWeight()); - bool fixed = font1->IsMonospacedFont(); + QFont::Stretch stretch = fromDirectWriteStretch(font2->GetStretch()); + QFont::Style style = fromDirectWriteStyle(font2->GetStyle()); + QFont::Weight weight = fromDirectWriteWeight(font2->GetWeight()); + bool fixed = font2->IsMonospacedFont(); + bool color = font2->IsColorFont(); qCDebug(lcQpaFonts) << "Family" << familyName << "has english variant" << englishLocaleStyleName << ", in default locale:" << defaultLocaleStyleName << stretch << style << weight << fixed; @@ -190,6 +191,7 @@ void QWindowsDirectWriteFontDatabase::populateFamily(const QString &familyName) scalable, size, fixed, + color, writingSystems, new FontHandle(*face, englishLocaleFamilyName)); } @@ -205,6 +207,7 @@ void QWindowsDirectWriteFontDatabase::populateFamily(const QString &familyName) scalable, size, fixed, + color, writingSystems, new FontHandle(*face, defaultLocaleFamilyName)); } @@ -290,18 +293,20 @@ bool QWindowsDirectWriteFontDatabase::populateFamilyAliases(const QString &missi DirectWriteScope font; if (SUCCEEDED(fontCollection->GetFontFromFontFace(*directWriteFontFace, &font))) { - DirectWriteScope font1; - if (SUCCEEDED(font->QueryInterface(__uuidof(IDWriteFont1), - reinterpret_cast(&font1)))) { + DirectWriteScope font2; + if (SUCCEEDED(font->QueryInterface(__uuidof(IDWriteFont2), + reinterpret_cast(&font2)))) { DirectWriteScope names; - if (SUCCEEDED(font1->GetFaceNames(&names))) { + if (SUCCEEDED(font2->GetFaceNames(&names))) { wchar_t englishLocale[] = L"en-us"; QString englishLocaleStyleName = localeString(*names, englishLocale); - QFont::Stretch stretch = fromDirectWriteStretch(font1->GetStretch()); - QFont::Style style = fromDirectWriteStyle(font1->GetStyle()); - QFont::Weight weight = fromDirectWriteWeight(font1->GetWeight()); - bool fixed = font1->IsMonospacedFont(); + QFont::Stretch stretch = fromDirectWriteStretch(font2->GetStretch()); + QFont::Style style = fromDirectWriteStyle(font2->GetStyle()); + QFont::Weight weight = fromDirectWriteWeight(font2->GetWeight()); + bool fixed = font2->IsMonospacedFont(); + bool isColorFont = font2->IsColorFont(); + QSupportedWritingSystems writingSystems = supportedWritingSystems(*directWriteFontFace); @@ -316,6 +321,7 @@ bool QWindowsDirectWriteFontDatabase::populateFamilyAliases(const QString &missi true, 0xffff, fixed, + isColorFont, writingSystems, new FontHandle(*directWriteFontFace, missingFamily)); @@ -407,9 +413,13 @@ QFontEngine *QWindowsDirectWriteFontDatabase::fontEngine(const QFontDef &fontDef return fontEngine; } -QStringList QWindowsDirectWriteFontDatabase::fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const +QStringList QWindowsDirectWriteFontDatabase::fallbacksForFamily(const QString &family, + QFont::Style style, + QFont::StyleHint styleHint, + QFontDatabasePrivate::ExtendedScript script) const { QStringList result; + result.append(QWindowsFontDatabaseBase::familiesForScript(script)); result.append(familyForStyleHint(styleHint)); result.append(extraTryFontsForFamily(family)); result.append(QPlatformFontDatabase::fallbacksForFamily(family, style, styleHint, script)); @@ -516,6 +526,7 @@ QStringList QWindowsDirectWriteFontDatabase::addApplicationFont(const QByteArray QFont::Style style = fromDirectWriteStyle(face3->GetStyle()); QFont::Weight weight = fromDirectWriteWeight(face3->GetWeight()); bool fixed = face3->IsMonospacedFont(); + bool color = face3->IsColorFont(); qCDebug(lcQpaFonts) << "\tFont names:" << englishLocaleFamilyName << ", " << defaultLocaleFamilyName << ", style names:" << englishLocaleStyleName << ", " << defaultLocaleStyleName @@ -545,6 +556,7 @@ QStringList QWindowsDirectWriteFontDatabase::addApplicationFont(const QByteArray scalable, size, fixed, + color, writingSystems, new FontHandle(face, englishLocaleFamilyName)); } @@ -570,6 +582,7 @@ QStringList QWindowsDirectWriteFontDatabase::addApplicationFont(const QByteArray scalable, size, fixed, + color, writingSystems, new FontHandle(face, defaultLocaleFamilyName)); } @@ -595,6 +608,7 @@ QStringList QWindowsDirectWriteFontDatabase::addApplicationFont(const QByteArray scalable, size, fixed, + color, writingSystems, new FontHandle(face, englishLocaleGdiCompatibleFamilyName)); } @@ -620,6 +634,7 @@ QStringList QWindowsDirectWriteFontDatabase::addApplicationFont(const QByteArray scalable, size, fixed, + color, writingSystems, new FontHandle(face, defaultLocaleGdiCompatibleFamilyName)); } @@ -645,6 +660,7 @@ QStringList QWindowsDirectWriteFontDatabase::addApplicationFont(const QByteArray scalable, size, fixed, + color, writingSystems, new FontHandle(face, englishLocaleTypographicFamilyName)); } @@ -670,6 +686,7 @@ QStringList QWindowsDirectWriteFontDatabase::addApplicationFont(const QByteArray scalable, size, fixed, + color, writingSystems, new FontHandle(face, defaultLocaleTypographicFamilyName)); } diff --git a/src/gui/text/windows/qwindowsdirectwritefontdatabase_p.h b/src/gui/text/windows/qwindowsdirectwritefontdatabase_p.h index 3e5e9663..1ea01cbd 100644 --- a/src/gui/text/windows/qwindowsdirectwritefontdatabase_p.h +++ b/src/gui/text/windows/qwindowsdirectwritefontdatabase_p.h @@ -43,7 +43,10 @@ public: bool populateFamilyAliases(const QString &missingFamily) override; QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) override; QFontEngine *fontEngine(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference) override; - QStringList fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const override; + QStringList fallbacksForFamily(const QString &family, + QFont::Style style, + QFont::StyleHint styleHint, + QFontDatabasePrivate::ExtendedScript script) const override; QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName, QFontDatabasePrivate::ApplicationFont *font = nullptr) override; bool isPrivateFontFamily(const QString &family) const override; diff --git a/src/gui/text/windows/qwindowsfontdatabase.cpp b/src/gui/text/windows/qwindowsfontdatabase.cpp index 772620d6..73814c6a 100644 --- a/src/gui/text/windows/qwindowsfontdatabase.cpp +++ b/src/gui/text/windows/qwindowsfontdatabase.cpp @@ -541,19 +541,19 @@ static bool addFontToDatabase(QString familyName, const bool wasPopulated = QPlatformFontDatabase::isFamilyPopulated(familyName); QPlatformFontDatabase::registerFont(familyName, styleName, foundryName, weight, - style, stretch, antialias, scalable, size, fixed, writingSystems, new QWindowsFontDatabase::FontHandle(faceName)); + style, stretch, antialias, scalable, size, fixed, false, writingSystems, new QWindowsFontDatabase::FontHandle(faceName)); // add fonts windows can generate for us: if (weight <= QFont::DemiBold && styleName.isEmpty()) QPlatformFontDatabase::registerFont(familyName, QString(), foundryName, QFont::Bold, - style, stretch, antialias, scalable, size, fixed, writingSystems, new QWindowsFontDatabase::FontHandle(faceName)); + style, stretch, antialias, scalable, size, fixed, false, writingSystems, new QWindowsFontDatabase::FontHandle(faceName)); if (style != QFont::StyleItalic && styleName.isEmpty()) QPlatformFontDatabase::registerFont(familyName, QString(), foundryName, weight, - QFont::StyleItalic, stretch, antialias, scalable, size, fixed, writingSystems, new QWindowsFontDatabase::FontHandle(faceName)); + QFont::StyleItalic, stretch, antialias, scalable, size, fixed, false, writingSystems, new QWindowsFontDatabase::FontHandle(faceName)); if (weight <= QFont::DemiBold && style != QFont::StyleItalic && styleName.isEmpty()) QPlatformFontDatabase::registerFont(familyName, QString(), foundryName, QFont::Bold, - QFont::StyleItalic, stretch, antialias, scalable, size, fixed, writingSystems, new QWindowsFontDatabase::FontHandle(faceName)); + QFont::StyleItalic, stretch, antialias, scalable, size, fixed, false, writingSystems, new QWindowsFontDatabase::FontHandle(faceName)); // We came here from populating a different font family, so we have // to ensure the entire typographic family is populated before we @@ -567,7 +567,7 @@ static bool addFontToDatabase(QString familyName, if (!subFamilyName.isEmpty() && familyName != subFamilyName) { QPlatformFontDatabase::registerFont(subFamilyName, subFamilyStyle, foundryName, weight, - style, stretch, antialias, scalable, size, fixed, writingSystems, new QWindowsFontDatabase::FontHandle(faceName)); + style, stretch, antialias, scalable, size, fixed, false, writingSystems, new QWindowsFontDatabase::FontHandle(faceName)); } if (!englishName.isEmpty() && englishName != familyName) @@ -1162,9 +1162,13 @@ void QWindowsFontDatabase::refUniqueFont(const QString &uniqueFont) ++it->refCount; } -QStringList QWindowsFontDatabase::fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const +QStringList QWindowsFontDatabase::fallbacksForFamily(const QString &family, + QFont::Style style, + QFont::StyleHint styleHint, + QFontDatabasePrivate::ExtendedScript script) const { QStringList result; + result.append(QWindowsFontDatabaseBase::familiesForScript(script)); result.append(familyForStyleHint(styleHint)); result.append(m_eudcFonts); result.append(extraTryFontsForFamily(family)); diff --git a/src/gui/text/windows/qwindowsfontdatabase_ft.cpp b/src/gui/text/windows/qwindowsfontdatabase_ft.cpp index 0604a85e..18d90261 100644 --- a/src/gui/text/windows/qwindowsfontdatabase_ft.cpp +++ b/src/gui/text/windows/qwindowsfontdatabase_ft.cpp @@ -243,24 +243,24 @@ static bool addFontToDatabase(QString familyName, value.prepend(QFile::decodeName(qgetenv("windir") + "\\Fonts\\")); QPlatformFontDatabase::registerFont(familyName, styleName, foundryName, weight, style, stretch, - antialias, scalable, size, fixed, writingSystems, createFontFile(value, index)); + antialias, scalable, size, fixed, false, writingSystems, createFontFile(value, index)); // add fonts windows can generate for us: if (weight <= QFont::DemiBold && styleName.isEmpty()) QPlatformFontDatabase::registerFont(familyName, QString(), foundryName, QFont::Bold, style, stretch, - antialias, scalable, size, fixed, writingSystems, createFontFile(value, index)); + antialias, scalable, size, fixed, false, writingSystems, createFontFile(value, index)); if (style != QFont::StyleItalic && styleName.isEmpty()) QPlatformFontDatabase::registerFont(familyName, QString(), foundryName, weight, QFont::StyleItalic, stretch, - antialias, scalable, size, fixed, writingSystems, createFontFile(value, index)); + antialias, scalable, size, fixed, false, writingSystems, createFontFile(value, index)); if (weight <= QFont::DemiBold && style != QFont::StyleItalic && styleName.isEmpty()) QPlatformFontDatabase::registerFont(familyName, QString(), foundryName, QFont::Bold, QFont::StyleItalic, stretch, - antialias, scalable, size, fixed, writingSystems, createFontFile(value, index)); + antialias, scalable, size, fixed, false, writingSystems, createFontFile(value, index)); if (!subFamilyName.isEmpty() && familyName != subFamilyName) { QPlatformFontDatabase::registerFont(subFamilyName, subFamilyStyle, foundryName, weight, - style, stretch, antialias, scalable, size, fixed, writingSystems, createFontFile(value, index)); + style, stretch, antialias, scalable, size, fixed, false, writingSystems, createFontFile(value, index)); } if (!englishName.isEmpty() && englishName != familyName) @@ -397,9 +397,13 @@ QFontEngine *QWindowsFontDatabaseFT::fontEngine(const QByteArray &fontData, qrea return fe; } -QStringList QWindowsFontDatabaseFT::fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const +QStringList QWindowsFontDatabaseFT::fallbacksForFamily(const QString &family, + QFont::Style style, + QFont::StyleHint styleHint, + QFontDatabasePrivate::ExtendedScript script) const { QStringList result; + result.append(QWindowsFontDatabaseBase::familiesForScript(script)); result.append(QWindowsFontDatabaseBase::familyForStyleHint(styleHint)); result.append(QWindowsFontDatabaseBase::extraTryFontsForFamily(family)); result.append(QFreeTypeFontDatabase::fallbacksForFamily(family, style, styleHint, script)); diff --git a/src/gui/text/windows/qwindowsfontdatabase_ft_p.h b/src/gui/text/windows/qwindowsfontdatabase_ft_p.h index 381a7be4..1b8fb9dd 100644 --- a/src/gui/text/windows/qwindowsfontdatabase_ft_p.h +++ b/src/gui/text/windows/qwindowsfontdatabase_ft_p.h @@ -33,7 +33,7 @@ public: QStringList fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, - QChar::Script script) const override; + QFontDatabasePrivate::ExtendedScript script) const override; QString fontDir() const override; QFont defaultFont() const override; diff --git a/src/gui/text/windows/qwindowsfontdatabase_p.h b/src/gui/text/windows/qwindowsfontdatabase_p.h index 0c99c91f..92628726 100644 --- a/src/gui/text/windows/qwindowsfontdatabase_p.h +++ b/src/gui/text/windows/qwindowsfontdatabase_p.h @@ -51,7 +51,7 @@ public: bool populateFamilyAliases(const QString &missingFamily) override; QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) override; QFontEngine *fontEngine(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference) override; - QStringList fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const override; + QStringList fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QFontDatabasePrivate::ExtendedScript script) const override; QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName, QFontDatabasePrivate::ApplicationFont *applicationFont = nullptr) override; void releaseHandle(void *handle) override; QString fontDir() const override; diff --git a/src/gui/text/windows/qwindowsfontdatabasebase.cpp b/src/gui/text/windows/qwindowsfontdatabasebase.cpp index 84e619b0..fdaf9240 100644 --- a/src/gui/text/windows/qwindowsfontdatabasebase.cpp +++ b/src/gui/text/windows/qwindowsfontdatabasebase.cpp @@ -873,6 +873,14 @@ QFontEngine *QWindowsFontDatabaseBase::fontEngine(const QByteArray &fontData, qr return fontEngine; } +QStringList QWindowsFontDatabaseBase::familiesForScript(QFontDatabasePrivate::ExtendedScript script) +{ + if (script == QFontDatabasePrivate::Script_Emoji) + return QStringList{} << QStringLiteral("Segoe UI Emoji"); + else + return QStringList{}; +} + QString QWindowsFontDatabaseBase::familyForStyleHint(QFont::StyleHint styleHint) { switch (styleHint) { diff --git a/src/gui/text/windows/qwindowsfontdatabasebase_p.h b/src/gui/text/windows/qwindowsfontdatabasebase_p.h index 55a33635..beb9b52f 100644 --- a/src/gui/text/windows/qwindowsfontdatabasebase_p.h +++ b/src/gui/text/windows/qwindowsfontdatabasebase_p.h @@ -75,6 +75,7 @@ public: static QString familyForStyleHint(QFont::StyleHint styleHint); static QStringList extraTryFontsForFamily(const QString &family); + static QStringList familiesForScript(QFontDatabasePrivate::ExtendedScript script); class FontTable{}; class EmbeddedFont diff --git a/src/plugins/platforms/android/qandroidplatformfontdatabase.cpp b/src/plugins/platforms/android/qandroidplatformfontdatabase.cpp index 82a10dac..3c174f04 100644 --- a/src/plugins/platforms/android/qandroidplatformfontdatabase.cpp +++ b/src/plugins/platforms/android/qandroidplatformfontdatabase.cpp @@ -45,10 +45,15 @@ void QAndroidPlatformFontDatabase::populateFontDatabase() QStringList QAndroidPlatformFontDatabase::fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, - QChar::Script script) const + QFontDatabasePrivate::ExtendedScript script) const { QStringList result; + if (script == QFontDatabasePrivate::Script_Emoji) { + result.append(QStringLiteral("Noto Color Emoji")); + result.append(QStringLiteral("Noto Color Emoji Flags")); + } + // Prepend CJK fonts by the locale. QLocale locale = QLocale::system(); switch (locale.language()) { diff --git a/src/plugins/platforms/android/qandroidplatformfontdatabase.h b/src/plugins/platforms/android/qandroidplatformfontdatabase.h index 23561e22..1150a298 100644 --- a/src/plugins/platforms/android/qandroidplatformfontdatabase.h +++ b/src/plugins/platforms/android/qandroidplatformfontdatabase.h @@ -17,7 +17,7 @@ public: QStringList fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, - QChar::Script script) const override; + QFontDatabasePrivate::ExtendedScript script) const override; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/wasm/qwasmfontdatabase.cpp b/src/plugins/platforms/wasm/qwasmfontdatabase.cpp index 3f3dc10f..e1882dd1 100644 --- a/src/plugins/platforms/wasm/qwasmfontdatabase.cpp +++ b/src/plugins/platforms/wasm/qwasmfontdatabase.cpp @@ -319,7 +319,7 @@ QFontEngine *QWasmFontDatabase::fontEngine(const QFontDef &fontDef, void *handle QStringList QWasmFontDatabase::fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, - QChar::Script script) const + QFontDatabasePrivate::ExtendedScript script) const { QStringList fallbacks = QFreeTypeFontDatabase::fallbacksForFamily(family, style, styleHint, script); diff --git a/src/plugins/platforms/wasm/qwasmfontdatabase.h b/src/plugins/platforms/wasm/qwasmfontdatabase.h index a1c8f1ff..aea3b955 100644 --- a/src/plugins/platforms/wasm/qwasmfontdatabase.h +++ b/src/plugins/platforms/wasm/qwasmfontdatabase.h @@ -20,7 +20,7 @@ public: QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) override; QStringList fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, - QChar::Script script) const override; + QFontDatabasePrivate::ExtendedScript script) const override; void releaseHandle(void *handle) override; QFont defaultFont() const override; diff --git a/tests/auto/gui/text/qfontdatabase/CMakeLists.txt b/tests/auto/gui/text/qfontdatabase/CMakeLists.txt index 0cb6e8d7..03e4bdce 100644 --- a/tests/auto/gui/text/qfontdatabase/CMakeLists.txt +++ b/tests/auto/gui/text/qfontdatabase/CMakeLists.txt @@ -49,6 +49,7 @@ set(testdata_resource_files "LED_REAL.TTF" "QtTestLimitedFont-Regular.ttf" "QtTestFallbackFont-Regular.ttf" + "QtEmojiTestFont-Regular.ttf" ) qt_internal_add_resource(tst_qfontdatabase "testdata" diff --git a/tests/auto/gui/text/qfontdatabase/QtEmojiTestFont-Regular.ttf b/tests/auto/gui/text/qfontdatabase/QtEmojiTestFont-Regular.ttf new file mode 100644 index 00000000..e69de29b diff --git a/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp b/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp index 8733f64d..5773363d 100644 --- a/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp +++ b/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp @@ -71,6 +71,7 @@ private slots: #endif void addApplicationFontFallback(); + void addApplicationEmojiFontFamily(); private: QString m_ledFont; @@ -80,6 +81,7 @@ private: QString m_testFontVariable; QString m_limitedFont; QString m_fallbackFont; + QString m_emojiFont; }; tst_QFontDatabase::tst_QFontDatabase() @@ -95,6 +97,7 @@ void tst_QFontDatabase::initTestCase() m_testFontVariable = QFINDTESTDATA("testfont_variable.ttf"); m_limitedFont = QFINDTESTDATA("QtTestLimitedFont-Regular.ttf"); m_fallbackFont = QFINDTESTDATA("QtTestFallbackFont-Regular.ttf"); + m_emojiFont = QFINDTESTDATA("QtEmojiTestFont-Regular.ttf"); QVERIFY(!m_ledFont.isEmpty()); QVERIFY(!m_testFont.isEmpty()); QVERIFY(!m_testFontCondensed.isEmpty()); @@ -102,6 +105,7 @@ void tst_QFontDatabase::initTestCase() QVERIFY(!m_testFontVariable.isEmpty()); QVERIFY(!m_limitedFont.isEmpty()); QVERIFY(!m_fallbackFont.isEmpty()); + QVERIFY(!m_emojiFont.isEmpty()); } void tst_QFontDatabase::styles_data() @@ -760,5 +764,65 @@ void tst_QFontDatabase::addApplicationFontFallback() QVERIFY(QFontDatabase::removeApplicationFallbackFontFamily(QChar::Script_Latin, u"QtTestFallbackFont"_s)); } +void tst_QFontDatabase::addApplicationEmojiFontFamily() +{ + int id = -1; + auto cleanup = qScopeGuard([&id] { + if (id >= 0) + QFontDatabase::removeApplicationFont(id); + }); + + id = QFontDatabase::addApplicationFont(m_emojiFont); + QVERIFY(id >= 0); + + QStringList families = QFontDatabase::applicationFontFamilies(id); + QVERIFY(families.size() > 0); + + const QChar airplane(0x2708); + const QChar vs16(0xfe0f); + + QFontDatabase::addApplicationEmojiFontFamily(families.first()); + + // Get emoji version of regular airplane symbol + { + QTextLayout layout; + layout.setText(QString(airplane) + vs16); + layout.beginLayout(); + layout.createLine(); + layout.endLayout(); + + QList glyphRuns = layout.glyphRuns(); + QCOMPARE(glyphRuns.size(), 1); + + QGlyphRun glyphRun = glyphRuns.first(); + QList glyphIndexes = glyphRun.glyphIndexes(); + + QCOMPARE(glyphIndexes.size(), 1); + QCOMPARE(glyphIndexes.at(0), 237); + } + + const QChar asterisk('*'); + const QChar enclosingKeyCap(0x20e3); + + // Get emoji keycap ligature (vs16 should be ignored when evaluating ligature substitution) + { + QTextLayout layout; + layout.setText(QString(asterisk) + vs16 + enclosingKeyCap); + layout.beginLayout(); + layout.createLine(); + layout.endLayout(); + + QList glyphRuns = layout.glyphRuns(); + QCOMPARE(glyphRuns.size(), 1); + + QGlyphRun glyphRun = glyphRuns.first(); + QList glyphIndexes = glyphRun.glyphIndexes(); + + QCOMPARE(glyphIndexes.size(), 1); + QCOMPARE(glyphIndexes.at(0), 238); + } + +} + QTEST_MAIN(tst_QFontDatabase) #include "tst_qfontdatabase.moc" diff --git a/tests/manual/emojisequences/CMakeLists.txt b/tests/manual/emojisequences/CMakeLists.txt new file mode 100644 index 00000000..c367bb12 --- /dev/null +++ b/tests/manual/emojisequences/CMakeLists.txt @@ -0,0 +1,34 @@ +# Copyright (C) 2024 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +cmake_minimum_required(VERSION 3.16) +project(emojisequences LANGUAGES CXX) + +find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets) +find_package(Qt6BuildInternals COMPONENTS STANDALONE_TEST) + +qt_standard_project_setup() + +qt_internal_add_manual_test(emojisequences + GUI + SOURCES + main.cpp + mainwindow.h mainwindow.cpp + mainwindow.ui + LIBRARIES + Qt::Gui + Qt::Widgets + ENABLE_AUTOGEN_TOOLS + uic +) + +set(emojisequences_resource_files + "emoji-test.txt" +) + +qt_internal_add_resource(emojisequences "emojisequences" + PREFIX + "/" + FILES + ${emojisequences_resource_files} +) diff --git a/tests/manual/emojisequences/emoji-test.txt b/tests/manual/emojisequences/emoji-test.txt new file mode 100644 index 00000000..3357ccf8 --- /dev/null +++ b/tests/manual/emojisequences/emoji-test.txt @@ -0,0 +1,3768 @@ +1F600 ; fully-qualified # ๐Ÿ˜€ grinning face +1F601 ; fully-qualified # ๐Ÿ˜ beaming face with smiling eyes +1F602 ; fully-qualified # ๐Ÿ˜‚ face with tears of joy +1F923 ; fully-qualified # ๐Ÿคฃ rolling on the floor laughing +1F603 ; fully-qualified # ๐Ÿ˜ƒ grinning face with big eyes +1F604 ; fully-qualified # ๐Ÿ˜„ grinning face with smiling eyes +1F605 ; fully-qualified # ๐Ÿ˜… grinning face with sweat +1F606 ; fully-qualified # ๐Ÿ˜† grinning squinting face +1F609 ; fully-qualified # ๐Ÿ˜‰ winking face +1F60A ; fully-qualified # ๐Ÿ˜Š smiling face with smiling eyes +1F60B ; fully-qualified # ๐Ÿ˜‹ face savoring food +1F60E ; fully-qualified # ๐Ÿ˜Ž smiling face with sunglasses +1F60D ; fully-qualified # ๐Ÿ˜ smiling face with heart-eyes +1F618 ; fully-qualified # ๐Ÿ˜˜ face blowing a kiss +1F970 ; fully-qualified # ๐Ÿฅฐ smiling face with 3 hearts +1F617 ; fully-qualified # ๐Ÿ˜— kissing face +1F619 ; fully-qualified # ๐Ÿ˜™ kissing face with smiling eyes +1F61A ; fully-qualified # ๐Ÿ˜š kissing face with closed eyes +263A FE0F ; fully-qualified # โ˜บ๏ธ smiling face +263A ; non-fully-qualified # โ˜บ smiling face +1F642 ; fully-qualified # ๐Ÿ™‚ slightly smiling face +1F917 ; fully-qualified # ๐Ÿค— hugging face +1F929 ; fully-qualified # ๐Ÿคฉ star-struck + +# subgroup: face-neutral +1F914 ; fully-qualified # ๐Ÿค” thinking face +1F928 ; fully-qualified # ๐Ÿคจ face with raised eyebrow +1F610 ; fully-qualified # ๐Ÿ˜ neutral face +1F611 ; fully-qualified # ๐Ÿ˜‘ expressionless face +1F636 ; fully-qualified # ๐Ÿ˜ถ face without mouth +1F644 ; fully-qualified # ๐Ÿ™„ face with rolling eyes +1F60F ; fully-qualified # ๐Ÿ˜ smirking face +1F623 ; fully-qualified # ๐Ÿ˜ฃ persevering face +1F625 ; fully-qualified # ๐Ÿ˜ฅ sad but relieved face +1F62E ; fully-qualified # ๐Ÿ˜ฎ face with open mouth +1F910 ; fully-qualified # ๐Ÿค zipper-mouth face +1F62F ; fully-qualified # ๐Ÿ˜ฏ hushed face +1F62A ; fully-qualified # ๐Ÿ˜ช sleepy face +1F62B ; fully-qualified # ๐Ÿ˜ซ tired face +1F634 ; fully-qualified # ๐Ÿ˜ด sleeping face +1F60C ; fully-qualified # ๐Ÿ˜Œ relieved face +1F61B ; fully-qualified # ๐Ÿ˜› face with tongue +1F61C ; fully-qualified # ๐Ÿ˜œ winking face with tongue +1F61D ; fully-qualified # ๐Ÿ˜ squinting face with tongue +1F924 ; fully-qualified # ๐Ÿคค drooling face +1F612 ; fully-qualified # ๐Ÿ˜’ unamused face +1F613 ; fully-qualified # ๐Ÿ˜“ downcast face with sweat +1F614 ; fully-qualified # ๐Ÿ˜” pensive face +1F615 ; fully-qualified # ๐Ÿ˜• confused face +1F643 ; fully-qualified # ๐Ÿ™ƒ upside-down face +1F911 ; fully-qualified # ๐Ÿค‘ money-mouth face +1F632 ; fully-qualified # ๐Ÿ˜ฒ astonished face + +# subgroup: face-negative +2639 FE0F ; fully-qualified # โ˜น๏ธ frowning face +2639 ; non-fully-qualified # โ˜น frowning face +1F641 ; fully-qualified # ๐Ÿ™ slightly frowning face +1F616 ; fully-qualified # ๐Ÿ˜– confounded face +1F61E ; fully-qualified # ๐Ÿ˜ž disappointed face +1F61F ; fully-qualified # ๐Ÿ˜Ÿ worried face +1F624 ; fully-qualified # ๐Ÿ˜ค face with steam from nose +1F622 ; fully-qualified # ๐Ÿ˜ข crying face +1F62D ; fully-qualified # ๐Ÿ˜ญ loudly crying face +1F626 ; fully-qualified # ๐Ÿ˜ฆ frowning face with open mouth +1F627 ; fully-qualified # ๐Ÿ˜ง anguished face +1F628 ; fully-qualified # ๐Ÿ˜จ fearful face +1F629 ; fully-qualified # ๐Ÿ˜ฉ weary face +1F92F ; fully-qualified # ๐Ÿคฏ exploding head +1F62C ; fully-qualified # ๐Ÿ˜ฌ grimacing face +1F630 ; fully-qualified # ๐Ÿ˜ฐ anxious face with sweat +1F631 ; fully-qualified # ๐Ÿ˜ฑ face screaming in fear +1F975 ; fully-qualified # ๐Ÿฅต hot face +1F976 ; fully-qualified # ๐Ÿฅถ cold face +1F633 ; fully-qualified # ๐Ÿ˜ณ flushed face +1F92A ; fully-qualified # ๐Ÿคช zany face +1F635 ; fully-qualified # ๐Ÿ˜ต dizzy face +1F621 ; fully-qualified # ๐Ÿ˜ก pouting face +1F620 ; fully-qualified # ๐Ÿ˜  angry face +1F92C ; fully-qualified # ๐Ÿคฌ face with symbols on mouth + +# subgroup: face-sick +1F637 ; fully-qualified # ๐Ÿ˜ท face with medical mask +1F912 ; fully-qualified # ๐Ÿค’ face with thermometer +1F915 ; fully-qualified # ๐Ÿค• face with head-bandage +1F922 ; fully-qualified # ๐Ÿคข nauseated face +1F92E ; fully-qualified # ๐Ÿคฎ face vomiting +1F927 ; fully-qualified # ๐Ÿคง sneezing face + +# subgroup: face-role +1F607 ; fully-qualified # ๐Ÿ˜‡ smiling face with halo +1F920 ; fully-qualified # ๐Ÿค  cowboy hat face +1F973 ; fully-qualified # ๐Ÿฅณ partying face +1F974 ; fully-qualified # ๐Ÿฅด woozy face +1F97A ; fully-qualified # ๐Ÿฅบ pleading face +1F925 ; fully-qualified # ๐Ÿคฅ lying face +1F92B ; fully-qualified # ๐Ÿคซ shushing face +1F92D ; fully-qualified # ๐Ÿคญ face with hand over mouth +1F9D0 ; fully-qualified # ๐Ÿง face with monocle +1F913 ; fully-qualified # ๐Ÿค“ nerd face + +# subgroup: face-fantasy +1F608 ; fully-qualified # ๐Ÿ˜ˆ smiling face with horns +1F47F ; fully-qualified # ๐Ÿ‘ฟ angry face with horns +1F921 ; fully-qualified # ๐Ÿคก clown face +1F479 ; fully-qualified # ๐Ÿ‘น ogre +1F47A ; fully-qualified # ๐Ÿ‘บ goblin +1F480 ; fully-qualified # ๐Ÿ’€ skull +2620 FE0F ; fully-qualified # โ˜ ๏ธ skull and crossbones +2620 ; non-fully-qualified # โ˜  skull and crossbones +1F47B ; fully-qualified # ๐Ÿ‘ป ghost +1F47D ; fully-qualified # ๐Ÿ‘ฝ alien +1F47E ; fully-qualified # ๐Ÿ‘พ alien monster +1F916 ; fully-qualified # ๐Ÿค– robot face +1F4A9 ; fully-qualified # ๐Ÿ’ฉ pile of poo + +# subgroup: cat-face +1F63A ; fully-qualified # ๐Ÿ˜บ grinning cat face +1F638 ; fully-qualified # ๐Ÿ˜ธ grinning cat face with smiling eyes +1F639 ; fully-qualified # ๐Ÿ˜น cat face with tears of joy +1F63B ; fully-qualified # ๐Ÿ˜ป smiling cat face with heart-eyes +1F63C ; fully-qualified # ๐Ÿ˜ผ cat face with wry smile +1F63D ; fully-qualified # ๐Ÿ˜ฝ kissing cat face +1F640 ; fully-qualified # ๐Ÿ™€ weary cat face +1F63F ; fully-qualified # ๐Ÿ˜ฟ crying cat face +1F63E ; fully-qualified # ๐Ÿ˜พ pouting cat face + +# subgroup: monkey-face +1F648 ; fully-qualified # ๐Ÿ™ˆ see-no-evil monkey +1F649 ; fully-qualified # ๐Ÿ™‰ hear-no-evil monkey +1F64A ; fully-qualified # ๐Ÿ™Š speak-no-evil monkey + +# subgroup: skin-tone +1F3FB ; fully-qualified # ๐Ÿป light skin tone +1F3FC ; fully-qualified # ๐Ÿผ medium-light skin tone +1F3FD ; fully-qualified # ๐Ÿฝ medium skin tone +1F3FE ; fully-qualified # ๐Ÿพ medium-dark skin tone +1F3FF ; fully-qualified # ๐Ÿฟ dark skin tone + +# subgroup: person +1F476 ; fully-qualified # ๐Ÿ‘ถ baby +1F476 1F3FB ; fully-qualified # ๐Ÿ‘ถ๐Ÿป baby: light skin tone +1F476 1F3FC ; fully-qualified # ๐Ÿ‘ถ๐Ÿผ baby: medium-light skin tone +1F476 1F3FD ; fully-qualified # ๐Ÿ‘ถ๐Ÿฝ baby: medium skin tone +1F476 1F3FE ; fully-qualified # ๐Ÿ‘ถ๐Ÿพ baby: medium-dark skin tone +1F476 1F3FF ; fully-qualified # ๐Ÿ‘ถ๐Ÿฟ baby: dark skin tone +1F9D2 ; fully-qualified # ๐Ÿง’ child +1F9D2 1F3FB ; fully-qualified # ๐Ÿง’๐Ÿป child: light skin tone +1F9D2 1F3FC ; fully-qualified # ๐Ÿง’๐Ÿผ child: medium-light skin tone +1F9D2 1F3FD ; fully-qualified # ๐Ÿง’๐Ÿฝ child: medium skin tone +1F9D2 1F3FE ; fully-qualified # ๐Ÿง’๐Ÿพ child: medium-dark skin tone +1F9D2 1F3FF ; fully-qualified # ๐Ÿง’๐Ÿฟ child: dark skin tone +1F466 ; fully-qualified # ๐Ÿ‘ฆ boy +1F466 1F3FB ; fully-qualified # ๐Ÿ‘ฆ๐Ÿป boy: light skin tone +1F466 1F3FC ; fully-qualified # ๐Ÿ‘ฆ๐Ÿผ boy: medium-light skin tone +1F466 1F3FD ; fully-qualified # ๐Ÿ‘ฆ๐Ÿฝ boy: medium skin tone +1F466 1F3FE ; fully-qualified # ๐Ÿ‘ฆ๐Ÿพ boy: medium-dark skin tone +1F466 1F3FF ; fully-qualified # ๐Ÿ‘ฆ๐Ÿฟ boy: dark skin tone +1F467 ; fully-qualified # ๐Ÿ‘ง girl +1F467 1F3FB ; fully-qualified # ๐Ÿ‘ง๐Ÿป girl: light skin tone +1F467 1F3FC ; fully-qualified # ๐Ÿ‘ง๐Ÿผ girl: medium-light skin tone +1F467 1F3FD ; fully-qualified # ๐Ÿ‘ง๐Ÿฝ girl: medium skin tone +1F467 1F3FE ; fully-qualified # ๐Ÿ‘ง๐Ÿพ girl: medium-dark skin tone +1F467 1F3FF ; fully-qualified # ๐Ÿ‘ง๐Ÿฟ girl: dark skin tone +1F9D1 ; fully-qualified # ๐Ÿง‘ adult +1F9D1 1F3FB ; fully-qualified # ๐Ÿง‘๐Ÿป adult: light skin tone +1F9D1 1F3FC ; fully-qualified # ๐Ÿง‘๐Ÿผ adult: medium-light skin tone +1F9D1 1F3FD ; fully-qualified # ๐Ÿง‘๐Ÿฝ adult: medium skin tone +1F9D1 1F3FE ; fully-qualified # ๐Ÿง‘๐Ÿพ adult: medium-dark skin tone +1F9D1 1F3FF ; fully-qualified # ๐Ÿง‘๐Ÿฟ adult: dark skin tone +1F468 ; fully-qualified # ๐Ÿ‘จ man +1F468 1F3FB ; fully-qualified # ๐Ÿ‘จ๐Ÿป man: light skin tone +1F468 1F3FC ; fully-qualified # ๐Ÿ‘จ๐Ÿผ man: medium-light skin tone +1F468 1F3FD ; fully-qualified # ๐Ÿ‘จ๐Ÿฝ man: medium skin tone +1F468 1F3FE ; fully-qualified # ๐Ÿ‘จ๐Ÿพ man: medium-dark skin tone +1F468 1F3FF ; fully-qualified # ๐Ÿ‘จ๐Ÿฟ man: dark skin tone +1F469 ; fully-qualified # ๐Ÿ‘ฉ woman +1F469 1F3FB ; fully-qualified # ๐Ÿ‘ฉ๐Ÿป woman: light skin tone +1F469 1F3FC ; fully-qualified # ๐Ÿ‘ฉ๐Ÿผ woman: medium-light skin tone +1F469 1F3FD ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฝ woman: medium skin tone +1F469 1F3FE ; fully-qualified # ๐Ÿ‘ฉ๐Ÿพ woman: medium-dark skin tone +1F469 1F3FF ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฟ woman: dark skin tone +1F9D3 ; fully-qualified # ๐Ÿง“ older adult +1F9D3 1F3FB ; fully-qualified # ๐Ÿง“๐Ÿป older adult: light skin tone +1F9D3 1F3FC ; fully-qualified # ๐Ÿง“๐Ÿผ older adult: medium-light skin tone +1F9D3 1F3FD ; fully-qualified # ๐Ÿง“๐Ÿฝ older adult: medium skin tone +1F9D3 1F3FE ; fully-qualified # ๐Ÿง“๐Ÿพ older adult: medium-dark skin tone +1F9D3 1F3FF ; fully-qualified # ๐Ÿง“๐Ÿฟ older adult: dark skin tone +1F474 ; fully-qualified # ๐Ÿ‘ด old man +1F474 1F3FB ; fully-qualified # ๐Ÿ‘ด๐Ÿป old man: light skin tone +1F474 1F3FC ; fully-qualified # ๐Ÿ‘ด๐Ÿผ old man: medium-light skin tone +1F474 1F3FD ; fully-qualified # ๐Ÿ‘ด๐Ÿฝ old man: medium skin tone +1F474 1F3FE ; fully-qualified # ๐Ÿ‘ด๐Ÿพ old man: medium-dark skin tone +1F474 1F3FF ; fully-qualified # ๐Ÿ‘ด๐Ÿฟ old man: dark skin tone +1F475 ; fully-qualified # ๐Ÿ‘ต old woman +1F475 1F3FB ; fully-qualified # ๐Ÿ‘ต๐Ÿป old woman: light skin tone +1F475 1F3FC ; fully-qualified # ๐Ÿ‘ต๐Ÿผ old woman: medium-light skin tone +1F475 1F3FD ; fully-qualified # ๐Ÿ‘ต๐Ÿฝ old woman: medium skin tone +1F475 1F3FE ; fully-qualified # ๐Ÿ‘ต๐Ÿพ old woman: medium-dark skin tone +1F475 1F3FF ; fully-qualified # ๐Ÿ‘ต๐Ÿฟ old woman: dark skin tone + +# subgroup: person-role +1F468 200D 2695 FE0F ; fully-qualified # ๐Ÿ‘จโ€โš•๏ธ man health worker +1F468 200D 2695 ; non-fully-qualified # ๐Ÿ‘จโ€โš• man health worker +1F468 1F3FB 200D 2695 FE0F ; fully-qualified # ๐Ÿ‘จ๐Ÿปโ€โš•๏ธ man health worker: light skin tone +1F468 1F3FB 200D 2695 ; non-fully-qualified # ๐Ÿ‘จ๐Ÿปโ€โš• man health worker: light skin tone +1F468 1F3FC 200D 2695 FE0F ; fully-qualified # ๐Ÿ‘จ๐Ÿผโ€โš•๏ธ man health worker: medium-light skin tone +1F468 1F3FC 200D 2695 ; non-fully-qualified # ๐Ÿ‘จ๐Ÿผโ€โš• man health worker: medium-light skin tone +1F468 1F3FD 200D 2695 FE0F ; fully-qualified # ๐Ÿ‘จ๐Ÿฝโ€โš•๏ธ man health worker: medium skin tone +1F468 1F3FD 200D 2695 ; non-fully-qualified # ๐Ÿ‘จ๐Ÿฝโ€โš• man health worker: medium skin tone +1F468 1F3FE 200D 2695 FE0F ; fully-qualified # ๐Ÿ‘จ๐Ÿพโ€โš•๏ธ man health worker: medium-dark skin tone +1F468 1F3FE 200D 2695 ; non-fully-qualified # ๐Ÿ‘จ๐Ÿพโ€โš• man health worker: medium-dark skin tone +1F468 1F3FF 200D 2695 FE0F ; fully-qualified # ๐Ÿ‘จ๐Ÿฟโ€โš•๏ธ man health worker: dark skin tone +1F468 1F3FF 200D 2695 ; non-fully-qualified # ๐Ÿ‘จ๐Ÿฟโ€โš• man health worker: dark skin tone +1F469 200D 2695 FE0F ; fully-qualified # ๐Ÿ‘ฉโ€โš•๏ธ woman health worker +1F469 200D 2695 ; non-fully-qualified # ๐Ÿ‘ฉโ€โš• woman health worker +1F469 1F3FB 200D 2695 FE0F ; fully-qualified # ๐Ÿ‘ฉ๐Ÿปโ€โš•๏ธ woman health worker: light skin tone +1F469 1F3FB 200D 2695 ; non-fully-qualified # ๐Ÿ‘ฉ๐Ÿปโ€โš• woman health worker: light skin tone +1F469 1F3FC 200D 2695 FE0F ; fully-qualified # ๐Ÿ‘ฉ๐Ÿผโ€โš•๏ธ woman health worker: medium-light skin tone +1F469 1F3FC 200D 2695 ; non-fully-qualified # ๐Ÿ‘ฉ๐Ÿผโ€โš• woman health worker: medium-light skin tone +1F469 1F3FD 200D 2695 FE0F ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฝโ€โš•๏ธ woman health worker: medium skin tone +1F469 1F3FD 200D 2695 ; non-fully-qualified # ๐Ÿ‘ฉ๐Ÿฝโ€โš• woman health worker: medium skin tone +1F469 1F3FE 200D 2695 FE0F ; fully-qualified # ๐Ÿ‘ฉ๐Ÿพโ€โš•๏ธ woman health worker: medium-dark skin tone +1F469 1F3FE 200D 2695 ; non-fully-qualified # ๐Ÿ‘ฉ๐Ÿพโ€โš• woman health worker: medium-dark skin tone +1F469 1F3FF 200D 2695 FE0F ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฟโ€โš•๏ธ woman health worker: dark skin tone +1F469 1F3FF 200D 2695 ; non-fully-qualified # ๐Ÿ‘ฉ๐Ÿฟโ€โš• woman health worker: dark skin tone +1F468 200D 1F393 ; fully-qualified # ๐Ÿ‘จโ€๐ŸŽ“ man student +1F468 1F3FB 200D 1F393 ; fully-qualified # ๐Ÿ‘จ๐Ÿปโ€๐ŸŽ“ man student: light skin tone +1F468 1F3FC 200D 1F393 ; fully-qualified # ๐Ÿ‘จ๐Ÿผโ€๐ŸŽ“ man student: medium-light skin tone +1F468 1F3FD 200D 1F393 ; fully-qualified # ๐Ÿ‘จ๐Ÿฝโ€๐ŸŽ“ man student: medium skin tone +1F468 1F3FE 200D 1F393 ; fully-qualified # ๐Ÿ‘จ๐Ÿพโ€๐ŸŽ“ man student: medium-dark skin tone +1F468 1F3FF 200D 1F393 ; fully-qualified # ๐Ÿ‘จ๐Ÿฟโ€๐ŸŽ“ man student: dark skin tone +1F469 200D 1F393 ; fully-qualified # ๐Ÿ‘ฉโ€๐ŸŽ“ woman student +1F469 1F3FB 200D 1F393 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿปโ€๐ŸŽ“ woman student: light skin tone +1F469 1F3FC 200D 1F393 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿผโ€๐ŸŽ“ woman student: medium-light skin tone +1F469 1F3FD 200D 1F393 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฝโ€๐ŸŽ“ woman student: medium skin tone +1F469 1F3FE 200D 1F393 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿพโ€๐ŸŽ“ woman student: medium-dark skin tone +1F469 1F3FF 200D 1F393 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฟโ€๐ŸŽ“ woman student: dark skin tone +1F468 200D 1F3EB ; fully-qualified # ๐Ÿ‘จโ€๐Ÿซ man teacher +1F468 1F3FB 200D 1F3EB ; fully-qualified # ๐Ÿ‘จ๐Ÿปโ€๐Ÿซ man teacher: light skin tone +1F468 1F3FC 200D 1F3EB ; fully-qualified # ๐Ÿ‘จ๐Ÿผโ€๐Ÿซ man teacher: medium-light skin tone +1F468 1F3FD 200D 1F3EB ; fully-qualified # ๐Ÿ‘จ๐Ÿฝโ€๐Ÿซ man teacher: medium skin tone +1F468 1F3FE 200D 1F3EB ; fully-qualified # ๐Ÿ‘จ๐Ÿพโ€๐Ÿซ man teacher: medium-dark skin tone +1F468 1F3FF 200D 1F3EB ; fully-qualified # ๐Ÿ‘จ๐Ÿฟโ€๐Ÿซ man teacher: dark skin tone +1F469 200D 1F3EB ; fully-qualified # ๐Ÿ‘ฉโ€๐Ÿซ woman teacher +1F469 1F3FB 200D 1F3EB ; fully-qualified # ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿซ woman teacher: light skin tone +1F469 1F3FC 200D 1F3EB ; fully-qualified # ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿซ woman teacher: medium-light skin tone +1F469 1F3FD 200D 1F3EB ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿซ woman teacher: medium skin tone +1F469 1F3FE 200D 1F3EB ; fully-qualified # ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿซ woman teacher: medium-dark skin tone +1F469 1F3FF 200D 1F3EB ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿซ woman teacher: dark skin tone +1F468 200D 2696 FE0F ; fully-qualified # ๐Ÿ‘จโ€โš–๏ธ man judge +1F468 200D 2696 ; non-fully-qualified # ๐Ÿ‘จโ€โš– man judge +1F468 1F3FB 200D 2696 FE0F ; fully-qualified # ๐Ÿ‘จ๐Ÿปโ€โš–๏ธ man judge: light skin tone +1F468 1F3FB 200D 2696 ; non-fully-qualified # ๐Ÿ‘จ๐Ÿปโ€โš– man judge: light skin tone +1F468 1F3FC 200D 2696 FE0F ; fully-qualified # ๐Ÿ‘จ๐Ÿผโ€โš–๏ธ man judge: medium-light skin tone +1F468 1F3FC 200D 2696 ; non-fully-qualified # ๐Ÿ‘จ๐Ÿผโ€โš– man judge: medium-light skin tone +1F468 1F3FD 200D 2696 FE0F ; fully-qualified # ๐Ÿ‘จ๐Ÿฝโ€โš–๏ธ man judge: medium skin tone +1F468 1F3FD 200D 2696 ; non-fully-qualified # ๐Ÿ‘จ๐Ÿฝโ€โš– man judge: medium skin tone +1F468 1F3FE 200D 2696 FE0F ; fully-qualified # ๐Ÿ‘จ๐Ÿพโ€โš–๏ธ man judge: medium-dark skin tone +1F468 1F3FE 200D 2696 ; non-fully-qualified # ๐Ÿ‘จ๐Ÿพโ€โš– man judge: medium-dark skin tone +1F468 1F3FF 200D 2696 FE0F ; fully-qualified # ๐Ÿ‘จ๐Ÿฟโ€โš–๏ธ man judge: dark skin tone +1F468 1F3FF 200D 2696 ; non-fully-qualified # ๐Ÿ‘จ๐Ÿฟโ€โš– man judge: dark skin tone +1F469 200D 2696 FE0F ; fully-qualified # ๐Ÿ‘ฉโ€โš–๏ธ woman judge +1F469 200D 2696 ; non-fully-qualified # ๐Ÿ‘ฉโ€โš– woman judge +1F469 1F3FB 200D 2696 FE0F ; fully-qualified # ๐Ÿ‘ฉ๐Ÿปโ€โš–๏ธ woman judge: light skin tone +1F469 1F3FB 200D 2696 ; non-fully-qualified # ๐Ÿ‘ฉ๐Ÿปโ€โš– woman judge: light skin tone +1F469 1F3FC 200D 2696 FE0F ; fully-qualified # ๐Ÿ‘ฉ๐Ÿผโ€โš–๏ธ woman judge: medium-light skin tone +1F469 1F3FC 200D 2696 ; non-fully-qualified # ๐Ÿ‘ฉ๐Ÿผโ€โš– woman judge: medium-light skin tone +1F469 1F3FD 200D 2696 FE0F ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฝโ€โš–๏ธ woman judge: medium skin tone +1F469 1F3FD 200D 2696 ; non-fully-qualified # ๐Ÿ‘ฉ๐Ÿฝโ€โš– woman judge: medium skin tone +1F469 1F3FE 200D 2696 FE0F ; fully-qualified # ๐Ÿ‘ฉ๐Ÿพโ€โš–๏ธ woman judge: medium-dark skin tone +1F469 1F3FE 200D 2696 ; non-fully-qualified # ๐Ÿ‘ฉ๐Ÿพโ€โš– woman judge: medium-dark skin tone +1F469 1F3FF 200D 2696 FE0F ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฟโ€โš–๏ธ woman judge: dark skin tone +1F469 1F3FF 200D 2696 ; non-fully-qualified # ๐Ÿ‘ฉ๐Ÿฟโ€โš– woman judge: dark skin tone +1F468 200D 1F33E ; fully-qualified # ๐Ÿ‘จโ€๐ŸŒพ man farmer +1F468 1F3FB 200D 1F33E ; fully-qualified # ๐Ÿ‘จ๐Ÿปโ€๐ŸŒพ man farmer: light skin tone +1F468 1F3FC 200D 1F33E ; fully-qualified # ๐Ÿ‘จ๐Ÿผโ€๐ŸŒพ man farmer: medium-light skin tone +1F468 1F3FD 200D 1F33E ; fully-qualified # ๐Ÿ‘จ๐Ÿฝโ€๐ŸŒพ man farmer: medium skin tone +1F468 1F3FE 200D 1F33E ; fully-qualified # ๐Ÿ‘จ๐Ÿพโ€๐ŸŒพ man farmer: medium-dark skin tone +1F468 1F3FF 200D 1F33E ; fully-qualified # ๐Ÿ‘จ๐Ÿฟโ€๐ŸŒพ man farmer: dark skin tone +1F469 200D 1F33E ; fully-qualified # ๐Ÿ‘ฉโ€๐ŸŒพ woman farmer +1F469 1F3FB 200D 1F33E ; fully-qualified # ๐Ÿ‘ฉ๐Ÿปโ€๐ŸŒพ woman farmer: light skin tone +1F469 1F3FC 200D 1F33E ; fully-qualified # ๐Ÿ‘ฉ๐Ÿผโ€๐ŸŒพ woman farmer: medium-light skin tone +1F469 1F3FD 200D 1F33E ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฝโ€๐ŸŒพ woman farmer: medium skin tone +1F469 1F3FE 200D 1F33E ; fully-qualified # ๐Ÿ‘ฉ๐Ÿพโ€๐ŸŒพ woman farmer: medium-dark skin tone +1F469 1F3FF 200D 1F33E ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฟโ€๐ŸŒพ woman farmer: dark skin tone +1F468 200D 1F373 ; fully-qualified # ๐Ÿ‘จโ€๐Ÿณ man cook +1F468 1F3FB 200D 1F373 ; fully-qualified # ๐Ÿ‘จ๐Ÿปโ€๐Ÿณ man cook: light skin tone +1F468 1F3FC 200D 1F373 ; fully-qualified # ๐Ÿ‘จ๐Ÿผโ€๐Ÿณ man cook: medium-light skin tone +1F468 1F3FD 200D 1F373 ; fully-qualified # ๐Ÿ‘จ๐Ÿฝโ€๐Ÿณ man cook: medium skin tone +1F468 1F3FE 200D 1F373 ; fully-qualified # ๐Ÿ‘จ๐Ÿพโ€๐Ÿณ man cook: medium-dark skin tone +1F468 1F3FF 200D 1F373 ; fully-qualified # ๐Ÿ‘จ๐Ÿฟโ€๐Ÿณ man cook: dark skin tone +1F469 200D 1F373 ; fully-qualified # ๐Ÿ‘ฉโ€๐Ÿณ woman cook +1F469 1F3FB 200D 1F373 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿณ woman cook: light skin tone +1F469 1F3FC 200D 1F373 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿณ woman cook: medium-light skin tone +1F469 1F3FD 200D 1F373 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿณ woman cook: medium skin tone +1F469 1F3FE 200D 1F373 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿณ woman cook: medium-dark skin tone +1F469 1F3FF 200D 1F373 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿณ woman cook: dark skin tone +1F468 200D 1F527 ; fully-qualified # ๐Ÿ‘จโ€๐Ÿ”ง man mechanic +1F468 1F3FB 200D 1F527 ; fully-qualified # ๐Ÿ‘จ๐Ÿปโ€๐Ÿ”ง man mechanic: light skin tone +1F468 1F3FC 200D 1F527 ; fully-qualified # ๐Ÿ‘จ๐Ÿผโ€๐Ÿ”ง man mechanic: medium-light skin tone +1F468 1F3FD 200D 1F527 ; fully-qualified # ๐Ÿ‘จ๐Ÿฝโ€๐Ÿ”ง man mechanic: medium skin tone +1F468 1F3FE 200D 1F527 ; fully-qualified # ๐Ÿ‘จ๐Ÿพโ€๐Ÿ”ง man mechanic: medium-dark skin tone +1F468 1F3FF 200D 1F527 ; fully-qualified # ๐Ÿ‘จ๐Ÿฟโ€๐Ÿ”ง man mechanic: dark skin tone +1F469 200D 1F527 ; fully-qualified # ๐Ÿ‘ฉโ€๐Ÿ”ง woman mechanic +1F469 1F3FB 200D 1F527 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ”ง woman mechanic: light skin tone +1F469 1F3FC 200D 1F527 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿ”ง woman mechanic: medium-light skin tone +1F469 1F3FD 200D 1F527 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿ”ง woman mechanic: medium skin tone +1F469 1F3FE 200D 1F527 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿ”ง woman mechanic: medium-dark skin tone +1F469 1F3FF 200D 1F527 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿ”ง woman mechanic: dark skin tone +1F468 200D 1F3ED ; fully-qualified # ๐Ÿ‘จโ€๐Ÿญ man factory worker +1F468 1F3FB 200D 1F3ED ; fully-qualified # ๐Ÿ‘จ๐Ÿปโ€๐Ÿญ man factory worker: light skin tone +1F468 1F3FC 200D 1F3ED ; fully-qualified # ๐Ÿ‘จ๐Ÿผโ€๐Ÿญ man factory worker: medium-light skin tone +1F468 1F3FD 200D 1F3ED ; fully-qualified # ๐Ÿ‘จ๐Ÿฝโ€๐Ÿญ man factory worker: medium skin tone +1F468 1F3FE 200D 1F3ED ; fully-qualified # ๐Ÿ‘จ๐Ÿพโ€๐Ÿญ man factory worker: medium-dark skin tone +1F468 1F3FF 200D 1F3ED ; fully-qualified # ๐Ÿ‘จ๐Ÿฟโ€๐Ÿญ man factory worker: dark skin tone +1F469 200D 1F3ED ; fully-qualified # ๐Ÿ‘ฉโ€๐Ÿญ woman factory worker +1F469 1F3FB 200D 1F3ED ; fully-qualified # ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿญ woman factory worker: light skin tone +1F469 1F3FC 200D 1F3ED ; fully-qualified # ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿญ woman factory worker: medium-light skin tone +1F469 1F3FD 200D 1F3ED ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿญ woman factory worker: medium skin tone +1F469 1F3FE 200D 1F3ED ; fully-qualified # ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿญ woman factory worker: medium-dark skin tone +1F469 1F3FF 200D 1F3ED ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿญ woman factory worker: dark skin tone +1F468 200D 1F4BC ; fully-qualified # ๐Ÿ‘จโ€๐Ÿ’ผ man office worker +1F468 1F3FB 200D 1F4BC ; fully-qualified # ๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ผ man office worker: light skin tone +1F468 1F3FC 200D 1F4BC ; fully-qualified # ๐Ÿ‘จ๐Ÿผโ€๐Ÿ’ผ man office worker: medium-light skin tone +1F468 1F3FD 200D 1F4BC ; fully-qualified # ๐Ÿ‘จ๐Ÿฝโ€๐Ÿ’ผ man office worker: medium skin tone +1F468 1F3FE 200D 1F4BC ; fully-qualified # ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ผ man office worker: medium-dark skin tone +1F468 1F3FF 200D 1F4BC ; fully-qualified # ๐Ÿ‘จ๐Ÿฟโ€๐Ÿ’ผ man office worker: dark skin tone +1F469 200D 1F4BC ; fully-qualified # ๐Ÿ‘ฉโ€๐Ÿ’ผ woman office worker +1F469 1F3FB 200D 1F4BC ; fully-qualified # ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ผ woman office worker: light skin tone +1F469 1F3FC 200D 1F4BC ; fully-qualified # ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿ’ผ woman office worker: medium-light skin tone +1F469 1F3FD 200D 1F4BC ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿ’ผ woman office worker: medium skin tone +1F469 1F3FE 200D 1F4BC ; fully-qualified # ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿ’ผ woman office worker: medium-dark skin tone +1F469 1F3FF 200D 1F4BC ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿ’ผ woman office worker: dark skin tone +1F468 200D 1F52C ; fully-qualified # ๐Ÿ‘จโ€๐Ÿ”ฌ man scientist +1F468 1F3FB 200D 1F52C ; fully-qualified # ๐Ÿ‘จ๐Ÿปโ€๐Ÿ”ฌ man scientist: light skin tone +1F468 1F3FC 200D 1F52C ; fully-qualified # ๐Ÿ‘จ๐Ÿผโ€๐Ÿ”ฌ man scientist: medium-light skin tone +1F468 1F3FD 200D 1F52C ; fully-qualified # ๐Ÿ‘จ๐Ÿฝโ€๐Ÿ”ฌ man scientist: medium skin tone +1F468 1F3FE 200D 1F52C ; fully-qualified # ๐Ÿ‘จ๐Ÿพโ€๐Ÿ”ฌ man scientist: medium-dark skin tone +1F468 1F3FF 200D 1F52C ; fully-qualified # ๐Ÿ‘จ๐Ÿฟโ€๐Ÿ”ฌ man scientist: dark skin tone +1F469 200D 1F52C ; fully-qualified # ๐Ÿ‘ฉโ€๐Ÿ”ฌ woman scientist +1F469 1F3FB 200D 1F52C ; fully-qualified # ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ”ฌ woman scientist: light skin tone +1F469 1F3FC 200D 1F52C ; fully-qualified # ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿ”ฌ woman scientist: medium-light skin tone +1F469 1F3FD 200D 1F52C ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿ”ฌ woman scientist: medium skin tone +1F469 1F3FE 200D 1F52C ; fully-qualified # ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿ”ฌ woman scientist: medium-dark skin tone +1F469 1F3FF 200D 1F52C ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿ”ฌ woman scientist: dark skin tone +1F468 200D 1F4BB ; fully-qualified # ๐Ÿ‘จโ€๐Ÿ’ป man technologist +1F468 1F3FB 200D 1F4BB ; fully-qualified # ๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป man technologist: light skin tone +1F468 1F3FC 200D 1F4BB ; fully-qualified # ๐Ÿ‘จ๐Ÿผโ€๐Ÿ’ป man technologist: medium-light skin tone +1F468 1F3FD 200D 1F4BB ; fully-qualified # ๐Ÿ‘จ๐Ÿฝโ€๐Ÿ’ป man technologist: medium skin tone +1F468 1F3FE 200D 1F4BB ; fully-qualified # ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ป man technologist: medium-dark skin tone +1F468 1F3FF 200D 1F4BB ; fully-qualified # ๐Ÿ‘จ๐Ÿฟโ€๐Ÿ’ป man technologist: dark skin tone +1F469 200D 1F4BB ; fully-qualified # ๐Ÿ‘ฉโ€๐Ÿ’ป woman technologist +1F469 1F3FB 200D 1F4BB ; fully-qualified # ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป woman technologist: light skin tone +1F469 1F3FC 200D 1F4BB ; fully-qualified # ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿ’ป woman technologist: medium-light skin tone +1F469 1F3FD 200D 1F4BB ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿ’ป woman technologist: medium skin tone +1F469 1F3FE 200D 1F4BB ; fully-qualified # ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿ’ป woman technologist: medium-dark skin tone +1F469 1F3FF 200D 1F4BB ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿ’ป woman technologist: dark skin tone +1F468 200D 1F3A4 ; fully-qualified # ๐Ÿ‘จโ€๐ŸŽค man singer +1F468 1F3FB 200D 1F3A4 ; fully-qualified # ๐Ÿ‘จ๐Ÿปโ€๐ŸŽค man singer: light skin tone +1F468 1F3FC 200D 1F3A4 ; fully-qualified # ๐Ÿ‘จ๐Ÿผโ€๐ŸŽค man singer: medium-light skin tone +1F468 1F3FD 200D 1F3A4 ; fully-qualified # ๐Ÿ‘จ๐Ÿฝโ€๐ŸŽค man singer: medium skin tone +1F468 1F3FE 200D 1F3A4 ; fully-qualified # ๐Ÿ‘จ๐Ÿพโ€๐ŸŽค man singer: medium-dark skin tone +1F468 1F3FF 200D 1F3A4 ; fully-qualified # ๐Ÿ‘จ๐Ÿฟโ€๐ŸŽค man singer: dark skin tone +1F469 200D 1F3A4 ; fully-qualified # ๐Ÿ‘ฉโ€๐ŸŽค woman singer +1F469 1F3FB 200D 1F3A4 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿปโ€๐ŸŽค woman singer: light skin tone +1F469 1F3FC 200D 1F3A4 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿผโ€๐ŸŽค woman singer: medium-light skin tone +1F469 1F3FD 200D 1F3A4 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฝโ€๐ŸŽค woman singer: medium skin tone +1F469 1F3FE 200D 1F3A4 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿพโ€๐ŸŽค woman singer: medium-dark skin tone +1F469 1F3FF 200D 1F3A4 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฟโ€๐ŸŽค woman singer: dark skin tone +1F468 200D 1F3A8 ; fully-qualified # ๐Ÿ‘จโ€๐ŸŽจ man artist +1F468 1F3FB 200D 1F3A8 ; fully-qualified # ๐Ÿ‘จ๐Ÿปโ€๐ŸŽจ man artist: light skin tone +1F468 1F3FC 200D 1F3A8 ; fully-qualified # ๐Ÿ‘จ๐Ÿผโ€๐ŸŽจ man artist: medium-light skin tone +1F468 1F3FD 200D 1F3A8 ; fully-qualified # ๐Ÿ‘จ๐Ÿฝโ€๐ŸŽจ man artist: medium skin tone +1F468 1F3FE 200D 1F3A8 ; fully-qualified # ๐Ÿ‘จ๐Ÿพโ€๐ŸŽจ man artist: medium-dark skin tone +1F468 1F3FF 200D 1F3A8 ; fully-qualified # ๐Ÿ‘จ๐Ÿฟโ€๐ŸŽจ man artist: dark skin tone +1F469 200D 1F3A8 ; fully-qualified # ๐Ÿ‘ฉโ€๐ŸŽจ woman artist +1F469 1F3FB 200D 1F3A8 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿปโ€๐ŸŽจ woman artist: light skin tone +1F469 1F3FC 200D 1F3A8 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿผโ€๐ŸŽจ woman artist: medium-light skin tone +1F469 1F3FD 200D 1F3A8 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฝโ€๐ŸŽจ woman artist: medium skin tone +1F469 1F3FE 200D 1F3A8 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿพโ€๐ŸŽจ woman artist: medium-dark skin tone +1F469 1F3FF 200D 1F3A8 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฟโ€๐ŸŽจ woman artist: dark skin tone +1F468 200D 2708 FE0F ; fully-qualified # ๐Ÿ‘จโ€โœˆ๏ธ man pilot +1F468 200D 2708 ; non-fully-qualified # ๐Ÿ‘จโ€โœˆ man pilot +1F468 1F3FB 200D 2708 FE0F ; fully-qualified # ๐Ÿ‘จ๐Ÿปโ€โœˆ๏ธ man pilot: light skin tone +1F468 1F3FB 200D 2708 ; non-fully-qualified # ๐Ÿ‘จ๐Ÿปโ€โœˆ man pilot: light skin tone +1F468 1F3FC 200D 2708 FE0F ; fully-qualified # ๐Ÿ‘จ๐Ÿผโ€โœˆ๏ธ man pilot: medium-light skin tone +1F468 1F3FC 200D 2708 ; non-fully-qualified # ๐Ÿ‘จ๐Ÿผโ€โœˆ man pilot: medium-light skin tone +1F468 1F3FD 200D 2708 FE0F ; fully-qualified # ๐Ÿ‘จ๐Ÿฝโ€โœˆ๏ธ man pilot: medium skin tone +1F468 1F3FD 200D 2708 ; non-fully-qualified # ๐Ÿ‘จ๐Ÿฝโ€โœˆ man pilot: medium skin tone +1F468 1F3FE 200D 2708 FE0F ; fully-qualified # ๐Ÿ‘จ๐Ÿพโ€โœˆ๏ธ man pilot: medium-dark skin tone +1F468 1F3FE 200D 2708 ; non-fully-qualified # ๐Ÿ‘จ๐Ÿพโ€โœˆ man pilot: medium-dark skin tone +1F468 1F3FF 200D 2708 FE0F ; fully-qualified # ๐Ÿ‘จ๐Ÿฟโ€โœˆ๏ธ man pilot: dark skin tone +1F468 1F3FF 200D 2708 ; non-fully-qualified # ๐Ÿ‘จ๐Ÿฟโ€โœˆ man pilot: dark skin tone +1F469 200D 2708 FE0F ; fully-qualified # ๐Ÿ‘ฉโ€โœˆ๏ธ woman pilot +1F469 200D 2708 ; non-fully-qualified # ๐Ÿ‘ฉโ€โœˆ woman pilot +1F469 1F3FB 200D 2708 FE0F ; fully-qualified # ๐Ÿ‘ฉ๐Ÿปโ€โœˆ๏ธ woman pilot: light skin tone +1F469 1F3FB 200D 2708 ; non-fully-qualified # ๐Ÿ‘ฉ๐Ÿปโ€โœˆ woman pilot: light skin tone +1F469 1F3FC 200D 2708 FE0F ; fully-qualified # ๐Ÿ‘ฉ๐Ÿผโ€โœˆ๏ธ woman pilot: medium-light skin tone +1F469 1F3FC 200D 2708 ; non-fully-qualified # ๐Ÿ‘ฉ๐Ÿผโ€โœˆ woman pilot: medium-light skin tone +1F469 1F3FD 200D 2708 FE0F ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฝโ€โœˆ๏ธ woman pilot: medium skin tone +1F469 1F3FD 200D 2708 ; non-fully-qualified # ๐Ÿ‘ฉ๐Ÿฝโ€โœˆ woman pilot: medium skin tone +1F469 1F3FE 200D 2708 FE0F ; fully-qualified # ๐Ÿ‘ฉ๐Ÿพโ€โœˆ๏ธ woman pilot: medium-dark skin tone +1F469 1F3FE 200D 2708 ; non-fully-qualified # ๐Ÿ‘ฉ๐Ÿพโ€โœˆ woman pilot: medium-dark skin tone +1F469 1F3FF 200D 2708 FE0F ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฟโ€โœˆ๏ธ woman pilot: dark skin tone +1F469 1F3FF 200D 2708 ; non-fully-qualified # ๐Ÿ‘ฉ๐Ÿฟโ€โœˆ woman pilot: dark skin tone +1F468 200D 1F680 ; fully-qualified # ๐Ÿ‘จโ€๐Ÿš€ man astronaut +1F468 1F3FB 200D 1F680 ; fully-qualified # ๐Ÿ‘จ๐Ÿปโ€๐Ÿš€ man astronaut: light skin tone +1F468 1F3FC 200D 1F680 ; fully-qualified # ๐Ÿ‘จ๐Ÿผโ€๐Ÿš€ man astronaut: medium-light skin tone +1F468 1F3FD 200D 1F680 ; fully-qualified # ๐Ÿ‘จ๐Ÿฝโ€๐Ÿš€ man astronaut: medium skin tone +1F468 1F3FE 200D 1F680 ; fully-qualified # ๐Ÿ‘จ๐Ÿพโ€๐Ÿš€ man astronaut: medium-dark skin tone +1F468 1F3FF 200D 1F680 ; fully-qualified # ๐Ÿ‘จ๐Ÿฟโ€๐Ÿš€ man astronaut: dark skin tone +1F469 200D 1F680 ; fully-qualified # ๐Ÿ‘ฉโ€๐Ÿš€ woman astronaut +1F469 1F3FB 200D 1F680 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿš€ woman astronaut: light skin tone +1F469 1F3FC 200D 1F680 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿš€ woman astronaut: medium-light skin tone +1F469 1F3FD 200D 1F680 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿš€ woman astronaut: medium skin tone +1F469 1F3FE 200D 1F680 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿš€ woman astronaut: medium-dark skin tone +1F469 1F3FF 200D 1F680 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿš€ woman astronaut: dark skin tone +1F468 200D 1F692 ; fully-qualified # ๐Ÿ‘จโ€๐Ÿš’ man firefighter +1F468 1F3FB 200D 1F692 ; fully-qualified # ๐Ÿ‘จ๐Ÿปโ€๐Ÿš’ man firefighter: light skin tone +1F468 1F3FC 200D 1F692 ; fully-qualified # ๐Ÿ‘จ๐Ÿผโ€๐Ÿš’ man firefighter: medium-light skin tone +1F468 1F3FD 200D 1F692 ; fully-qualified # ๐Ÿ‘จ๐Ÿฝโ€๐Ÿš’ man firefighter: medium skin tone +1F468 1F3FE 200D 1F692 ; fully-qualified # ๐Ÿ‘จ๐Ÿพโ€๐Ÿš’ man firefighter: medium-dark skin tone +1F468 1F3FF 200D 1F692 ; fully-qualified # ๐Ÿ‘จ๐Ÿฟโ€๐Ÿš’ man firefighter: dark skin tone +1F469 200D 1F692 ; fully-qualified # ๐Ÿ‘ฉโ€๐Ÿš’ woman firefighter +1F469 1F3FB 200D 1F692 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿš’ woman firefighter: light skin tone +1F469 1F3FC 200D 1F692 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿš’ woman firefighter: medium-light skin tone +1F469 1F3FD 200D 1F692 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿš’ woman firefighter: medium skin tone +1F469 1F3FE 200D 1F692 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿš’ woman firefighter: medium-dark skin tone +1F469 1F3FF 200D 1F692 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿš’ woman firefighter: dark skin tone +1F46E ; fully-qualified # ๐Ÿ‘ฎ police officer +1F46E 1F3FB ; fully-qualified # ๐Ÿ‘ฎ๐Ÿป police officer: light skin tone +1F46E 1F3FC ; fully-qualified # ๐Ÿ‘ฎ๐Ÿผ police officer: medium-light skin tone +1F46E 1F3FD ; fully-qualified # ๐Ÿ‘ฎ๐Ÿฝ police officer: medium skin tone +1F46E 1F3FE ; fully-qualified # ๐Ÿ‘ฎ๐Ÿพ police officer: medium-dark skin tone +1F46E 1F3FF ; fully-qualified # ๐Ÿ‘ฎ๐Ÿฟ police officer: dark skin tone +1F46E 200D 2642 FE0F ; fully-qualified # ๐Ÿ‘ฎโ€โ™‚๏ธ man police officer +1F46E 200D 2642 ; non-fully-qualified # ๐Ÿ‘ฎโ€โ™‚ man police officer +1F46E 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿ‘ฎ๐Ÿปโ€โ™‚๏ธ man police officer: light skin tone +1F46E 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿ‘ฎ๐Ÿปโ€โ™‚ man police officer: light skin tone +1F46E 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿ‘ฎ๐Ÿผโ€โ™‚๏ธ man police officer: medium-light skin tone +1F46E 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿ‘ฎ๐Ÿผโ€โ™‚ man police officer: medium-light skin tone +1F46E 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿ‘ฎ๐Ÿฝโ€โ™‚๏ธ man police officer: medium skin tone +1F46E 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿ‘ฎ๐Ÿฝโ€โ™‚ man police officer: medium skin tone +1F46E 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿ‘ฎ๐Ÿพโ€โ™‚๏ธ man police officer: medium-dark skin tone +1F46E 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿ‘ฎ๐Ÿพโ€โ™‚ man police officer: medium-dark skin tone +1F46E 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿ‘ฎ๐Ÿฟโ€โ™‚๏ธ man police officer: dark skin tone +1F46E 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿ‘ฎ๐Ÿฟโ€โ™‚ man police officer: dark skin tone +1F46E 200D 2640 FE0F ; fully-qualified # ๐Ÿ‘ฎโ€โ™€๏ธ woman police officer +1F46E 200D 2640 ; non-fully-qualified # ๐Ÿ‘ฎโ€โ™€ woman police officer +1F46E 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿ‘ฎ๐Ÿปโ€โ™€๏ธ woman police officer: light skin tone +1F46E 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿ‘ฎ๐Ÿปโ€โ™€ woman police officer: light skin tone +1F46E 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿ‘ฎ๐Ÿผโ€โ™€๏ธ woman police officer: medium-light skin tone +1F46E 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿ‘ฎ๐Ÿผโ€โ™€ woman police officer: medium-light skin tone +1F46E 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿ‘ฎ๐Ÿฝโ€โ™€๏ธ woman police officer: medium skin tone +1F46E 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿ‘ฎ๐Ÿฝโ€โ™€ woman police officer: medium skin tone +1F46E 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿ‘ฎ๐Ÿพโ€โ™€๏ธ woman police officer: medium-dark skin tone +1F46E 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿ‘ฎ๐Ÿพโ€โ™€ woman police officer: medium-dark skin tone +1F46E 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿ‘ฎ๐Ÿฟโ€โ™€๏ธ woman police officer: dark skin tone +1F46E 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿ‘ฎ๐Ÿฟโ€โ™€ woman police officer: dark skin tone +1F575 FE0F ; fully-qualified # ๐Ÿ•ต๏ธ detective +1F575 ; non-fully-qualified # ๐Ÿ•ต detective +1F575 1F3FB ; fully-qualified # ๐Ÿ•ต๐Ÿป detective: light skin tone +1F575 1F3FC ; fully-qualified # ๐Ÿ•ต๐Ÿผ detective: medium-light skin tone +1F575 1F3FD ; fully-qualified # ๐Ÿ•ต๐Ÿฝ detective: medium skin tone +1F575 1F3FE ; fully-qualified # ๐Ÿ•ต๐Ÿพ detective: medium-dark skin tone +1F575 1F3FF ; fully-qualified # ๐Ÿ•ต๐Ÿฟ detective: dark skin tone +1F575 FE0F 200D 2642 FE0F ; fully-qualified # ๐Ÿ•ต๏ธโ€โ™‚๏ธ man detective +1F575 200D 2642 FE0F ; non-fully-qualified # ๐Ÿ•ตโ€โ™‚๏ธ man detective +1F575 FE0F 200D 2642 ; non-fully-qualified # ๐Ÿ•ต๏ธโ€โ™‚ man detective +1F575 200D 2642 ; non-fully-qualified # ๐Ÿ•ตโ€โ™‚ man detective +1F575 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿ•ต๐Ÿปโ€โ™‚๏ธ man detective: light skin tone +1F575 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿ•ต๐Ÿปโ€โ™‚ man detective: light skin tone +1F575 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿ•ต๐Ÿผโ€โ™‚๏ธ man detective: medium-light skin tone +1F575 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿ•ต๐Ÿผโ€โ™‚ man detective: medium-light skin tone +1F575 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿ•ต๐Ÿฝโ€โ™‚๏ธ man detective: medium skin tone +1F575 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿ•ต๐Ÿฝโ€โ™‚ man detective: medium skin tone +1F575 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿ•ต๐Ÿพโ€โ™‚๏ธ man detective: medium-dark skin tone +1F575 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿ•ต๐Ÿพโ€โ™‚ man detective: medium-dark skin tone +1F575 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿ•ต๐Ÿฟโ€โ™‚๏ธ man detective: dark skin tone +1F575 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿ•ต๐Ÿฟโ€โ™‚ man detective: dark skin tone +1F575 FE0F 200D 2640 FE0F ; fully-qualified # ๐Ÿ•ต๏ธโ€โ™€๏ธ woman detective +1F575 200D 2640 FE0F ; non-fully-qualified # ๐Ÿ•ตโ€โ™€๏ธ woman detective +1F575 FE0F 200D 2640 ; non-fully-qualified # ๐Ÿ•ต๏ธโ€โ™€ woman detective +1F575 200D 2640 ; non-fully-qualified # ๐Ÿ•ตโ€โ™€ woman detective +1F575 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿ•ต๐Ÿปโ€โ™€๏ธ woman detective: light skin tone +1F575 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿ•ต๐Ÿปโ€โ™€ woman detective: light skin tone +1F575 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿ•ต๐Ÿผโ€โ™€๏ธ woman detective: medium-light skin tone +1F575 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿ•ต๐Ÿผโ€โ™€ woman detective: medium-light skin tone +1F575 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿ•ต๐Ÿฝโ€โ™€๏ธ woman detective: medium skin tone +1F575 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿ•ต๐Ÿฝโ€โ™€ woman detective: medium skin tone +1F575 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿ•ต๐Ÿพโ€โ™€๏ธ woman detective: medium-dark skin tone +1F575 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿ•ต๐Ÿพโ€โ™€ woman detective: medium-dark skin tone +1F575 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿ•ต๐Ÿฟโ€โ™€๏ธ woman detective: dark skin tone +1F575 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿ•ต๐Ÿฟโ€โ™€ woman detective: dark skin tone +1F482 ; fully-qualified # ๐Ÿ’‚ guard +1F482 1F3FB ; fully-qualified # ๐Ÿ’‚๐Ÿป guard: light skin tone +1F482 1F3FC ; fully-qualified # ๐Ÿ’‚๐Ÿผ guard: medium-light skin tone +1F482 1F3FD ; fully-qualified # ๐Ÿ’‚๐Ÿฝ guard: medium skin tone +1F482 1F3FE ; fully-qualified # ๐Ÿ’‚๐Ÿพ guard: medium-dark skin tone +1F482 1F3FF ; fully-qualified # ๐Ÿ’‚๐Ÿฟ guard: dark skin tone +1F482 200D 2642 FE0F ; fully-qualified # ๐Ÿ’‚โ€โ™‚๏ธ man guard +1F482 200D 2642 ; non-fully-qualified # ๐Ÿ’‚โ€โ™‚ man guard +1F482 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿ’‚๐Ÿปโ€โ™‚๏ธ man guard: light skin tone +1F482 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿ’‚๐Ÿปโ€โ™‚ man guard: light skin tone +1F482 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿ’‚๐Ÿผโ€โ™‚๏ธ man guard: medium-light skin tone +1F482 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿ’‚๐Ÿผโ€โ™‚ man guard: medium-light skin tone +1F482 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿ’‚๐Ÿฝโ€โ™‚๏ธ man guard: medium skin tone +1F482 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿ’‚๐Ÿฝโ€โ™‚ man guard: medium skin tone +1F482 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿ’‚๐Ÿพโ€โ™‚๏ธ man guard: medium-dark skin tone +1F482 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿ’‚๐Ÿพโ€โ™‚ man guard: medium-dark skin tone +1F482 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿ’‚๐Ÿฟโ€โ™‚๏ธ man guard: dark skin tone +1F482 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿ’‚๐Ÿฟโ€โ™‚ man guard: dark skin tone +1F482 200D 2640 FE0F ; fully-qualified # ๐Ÿ’‚โ€โ™€๏ธ woman guard +1F482 200D 2640 ; non-fully-qualified # ๐Ÿ’‚โ€โ™€ woman guard +1F482 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿ’‚๐Ÿปโ€โ™€๏ธ woman guard: light skin tone +1F482 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿ’‚๐Ÿปโ€โ™€ woman guard: light skin tone +1F482 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿ’‚๐Ÿผโ€โ™€๏ธ woman guard: medium-light skin tone +1F482 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿ’‚๐Ÿผโ€โ™€ woman guard: medium-light skin tone +1F482 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿ’‚๐Ÿฝโ€โ™€๏ธ woman guard: medium skin tone +1F482 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿ’‚๐Ÿฝโ€โ™€ woman guard: medium skin tone +1F482 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿ’‚๐Ÿพโ€โ™€๏ธ woman guard: medium-dark skin tone +1F482 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿ’‚๐Ÿพโ€โ™€ woman guard: medium-dark skin tone +1F482 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿ’‚๐Ÿฟโ€โ™€๏ธ woman guard: dark skin tone +1F482 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿ’‚๐Ÿฟโ€โ™€ woman guard: dark skin tone +1F477 ; fully-qualified # ๐Ÿ‘ท construction worker +1F477 1F3FB ; fully-qualified # ๐Ÿ‘ท๐Ÿป construction worker: light skin tone +1F477 1F3FC ; fully-qualified # ๐Ÿ‘ท๐Ÿผ construction worker: medium-light skin tone +1F477 1F3FD ; fully-qualified # ๐Ÿ‘ท๐Ÿฝ construction worker: medium skin tone +1F477 1F3FE ; fully-qualified # ๐Ÿ‘ท๐Ÿพ construction worker: medium-dark skin tone +1F477 1F3FF ; fully-qualified # ๐Ÿ‘ท๐Ÿฟ construction worker: dark skin tone +1F477 200D 2642 FE0F ; fully-qualified # ๐Ÿ‘ทโ€โ™‚๏ธ man construction worker +1F477 200D 2642 ; non-fully-qualified # ๐Ÿ‘ทโ€โ™‚ man construction worker +1F477 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿ‘ท๐Ÿปโ€โ™‚๏ธ man construction worker: light skin tone +1F477 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿ‘ท๐Ÿปโ€โ™‚ man construction worker: light skin tone +1F477 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿ‘ท๐Ÿผโ€โ™‚๏ธ man construction worker: medium-light skin tone +1F477 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿ‘ท๐Ÿผโ€โ™‚ man construction worker: medium-light skin tone +1F477 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿ‘ท๐Ÿฝโ€โ™‚๏ธ man construction worker: medium skin tone +1F477 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿ‘ท๐Ÿฝโ€โ™‚ man construction worker: medium skin tone +1F477 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿ‘ท๐Ÿพโ€โ™‚๏ธ man construction worker: medium-dark skin tone +1F477 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿ‘ท๐Ÿพโ€โ™‚ man construction worker: medium-dark skin tone +1F477 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿ‘ท๐Ÿฟโ€โ™‚๏ธ man construction worker: dark skin tone +1F477 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿ‘ท๐Ÿฟโ€โ™‚ man construction worker: dark skin tone +1F477 200D 2640 FE0F ; fully-qualified # ๐Ÿ‘ทโ€โ™€๏ธ woman construction worker +1F477 200D 2640 ; non-fully-qualified # ๐Ÿ‘ทโ€โ™€ woman construction worker +1F477 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿ‘ท๐Ÿปโ€โ™€๏ธ woman construction worker: light skin tone +1F477 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿ‘ท๐Ÿปโ€โ™€ woman construction worker: light skin tone +1F477 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿ‘ท๐Ÿผโ€โ™€๏ธ woman construction worker: medium-light skin tone +1F477 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿ‘ท๐Ÿผโ€โ™€ woman construction worker: medium-light skin tone +1F477 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿ‘ท๐Ÿฝโ€โ™€๏ธ woman construction worker: medium skin tone +1F477 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿ‘ท๐Ÿฝโ€โ™€ woman construction worker: medium skin tone +1F477 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿ‘ท๐Ÿพโ€โ™€๏ธ woman construction worker: medium-dark skin tone +1F477 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿ‘ท๐Ÿพโ€โ™€ woman construction worker: medium-dark skin tone +1F477 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿ‘ท๐Ÿฟโ€โ™€๏ธ woman construction worker: dark skin tone +1F477 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿ‘ท๐Ÿฟโ€โ™€ woman construction worker: dark skin tone +1F934 ; fully-qualified # ๐Ÿคด prince +1F934 1F3FB ; fully-qualified # ๐Ÿคด๐Ÿป prince: light skin tone +1F934 1F3FC ; fully-qualified # ๐Ÿคด๐Ÿผ prince: medium-light skin tone +1F934 1F3FD ; fully-qualified # ๐Ÿคด๐Ÿฝ prince: medium skin tone +1F934 1F3FE ; fully-qualified # ๐Ÿคด๐Ÿพ prince: medium-dark skin tone +1F934 1F3FF ; fully-qualified # ๐Ÿคด๐Ÿฟ prince: dark skin tone +1F478 ; fully-qualified # ๐Ÿ‘ธ princess +1F478 1F3FB ; fully-qualified # ๐Ÿ‘ธ๐Ÿป princess: light skin tone +1F478 1F3FC ; fully-qualified # ๐Ÿ‘ธ๐Ÿผ princess: medium-light skin tone +1F478 1F3FD ; fully-qualified # ๐Ÿ‘ธ๐Ÿฝ princess: medium skin tone +1F478 1F3FE ; fully-qualified # ๐Ÿ‘ธ๐Ÿพ princess: medium-dark skin tone +1F478 1F3FF ; fully-qualified # ๐Ÿ‘ธ๐Ÿฟ princess: dark skin tone +1F473 ; fully-qualified # ๐Ÿ‘ณ person wearing turban +1F473 1F3FB ; fully-qualified # ๐Ÿ‘ณ๐Ÿป person wearing turban: light skin tone +1F473 1F3FC ; fully-qualified # ๐Ÿ‘ณ๐Ÿผ person wearing turban: medium-light skin tone +1F473 1F3FD ; fully-qualified # ๐Ÿ‘ณ๐Ÿฝ person wearing turban: medium skin tone +1F473 1F3FE ; fully-qualified # ๐Ÿ‘ณ๐Ÿพ person wearing turban: medium-dark skin tone +1F473 1F3FF ; fully-qualified # ๐Ÿ‘ณ๐Ÿฟ person wearing turban: dark skin tone +1F473 200D 2642 FE0F ; fully-qualified # ๐Ÿ‘ณโ€โ™‚๏ธ man wearing turban +1F473 200D 2642 ; non-fully-qualified # ๐Ÿ‘ณโ€โ™‚ man wearing turban +1F473 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿ‘ณ๐Ÿปโ€โ™‚๏ธ man wearing turban: light skin tone +1F473 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿ‘ณ๐Ÿปโ€โ™‚ man wearing turban: light skin tone +1F473 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿ‘ณ๐Ÿผโ€โ™‚๏ธ man wearing turban: medium-light skin tone +1F473 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿ‘ณ๐Ÿผโ€โ™‚ man wearing turban: medium-light skin tone +1F473 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿ‘ณ๐Ÿฝโ€โ™‚๏ธ man wearing turban: medium skin tone +1F473 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿ‘ณ๐Ÿฝโ€โ™‚ man wearing turban: medium skin tone +1F473 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿ‘ณ๐Ÿพโ€โ™‚๏ธ man wearing turban: medium-dark skin tone +1F473 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿ‘ณ๐Ÿพโ€โ™‚ man wearing turban: medium-dark skin tone +1F473 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿ‘ณ๐Ÿฟโ€โ™‚๏ธ man wearing turban: dark skin tone +1F473 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿ‘ณ๐Ÿฟโ€โ™‚ man wearing turban: dark skin tone +1F473 200D 2640 FE0F ; fully-qualified # ๐Ÿ‘ณโ€โ™€๏ธ woman wearing turban +1F473 200D 2640 ; non-fully-qualified # ๐Ÿ‘ณโ€โ™€ woman wearing turban +1F473 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿ‘ณ๐Ÿปโ€โ™€๏ธ woman wearing turban: light skin tone +1F473 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿ‘ณ๐Ÿปโ€โ™€ woman wearing turban: light skin tone +1F473 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿ‘ณ๐Ÿผโ€โ™€๏ธ woman wearing turban: medium-light skin tone +1F473 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿ‘ณ๐Ÿผโ€โ™€ woman wearing turban: medium-light skin tone +1F473 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿ‘ณ๐Ÿฝโ€โ™€๏ธ woman wearing turban: medium skin tone +1F473 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿ‘ณ๐Ÿฝโ€โ™€ woman wearing turban: medium skin tone +1F473 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿ‘ณ๐Ÿพโ€โ™€๏ธ woman wearing turban: medium-dark skin tone +1F473 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿ‘ณ๐Ÿพโ€โ™€ woman wearing turban: medium-dark skin tone +1F473 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿ‘ณ๐Ÿฟโ€โ™€๏ธ woman wearing turban: dark skin tone +1F473 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿ‘ณ๐Ÿฟโ€โ™€ woman wearing turban: dark skin tone +1F472 ; fully-qualified # ๐Ÿ‘ฒ man with Chinese cap +1F472 1F3FB ; fully-qualified # ๐Ÿ‘ฒ๐Ÿป man with Chinese cap: light skin tone +1F472 1F3FC ; fully-qualified # ๐Ÿ‘ฒ๐Ÿผ man with Chinese cap: medium-light skin tone +1F472 1F3FD ; fully-qualified # ๐Ÿ‘ฒ๐Ÿฝ man with Chinese cap: medium skin tone +1F472 1F3FE ; fully-qualified # ๐Ÿ‘ฒ๐Ÿพ man with Chinese cap: medium-dark skin tone +1F472 1F3FF ; fully-qualified # ๐Ÿ‘ฒ๐Ÿฟ man with Chinese cap: dark skin tone +1F9D5 ; fully-qualified # ๐Ÿง• woman with headscarf +1F9D5 1F3FB ; fully-qualified # ๐Ÿง•๐Ÿป woman with headscarf: light skin tone +1F9D5 1F3FC ; fully-qualified # ๐Ÿง•๐Ÿผ woman with headscarf: medium-light skin tone +1F9D5 1F3FD ; fully-qualified # ๐Ÿง•๐Ÿฝ woman with headscarf: medium skin tone +1F9D5 1F3FE ; fully-qualified # ๐Ÿง•๐Ÿพ woman with headscarf: medium-dark skin tone +1F9D5 1F3FF ; fully-qualified # ๐Ÿง•๐Ÿฟ woman with headscarf: dark skin tone +1F9D4 ; fully-qualified # ๐Ÿง” bearded person +1F9D4 1F3FB ; fully-qualified # ๐Ÿง”๐Ÿป bearded person: light skin tone +1F9D4 1F3FC ; fully-qualified # ๐Ÿง”๐Ÿผ bearded person: medium-light skin tone +1F9D4 1F3FD ; fully-qualified # ๐Ÿง”๐Ÿฝ bearded person: medium skin tone +1F9D4 1F3FE ; fully-qualified # ๐Ÿง”๐Ÿพ bearded person: medium-dark skin tone +1F9D4 1F3FF ; fully-qualified # ๐Ÿง”๐Ÿฟ bearded person: dark skin tone +1F471 ; fully-qualified # ๐Ÿ‘ฑ blond-haired person +1F471 1F3FB ; fully-qualified # ๐Ÿ‘ฑ๐Ÿป blond-haired person: light skin tone +1F471 1F3FC ; fully-qualified # ๐Ÿ‘ฑ๐Ÿผ blond-haired person: medium-light skin tone +1F471 1F3FD ; fully-qualified # ๐Ÿ‘ฑ๐Ÿฝ blond-haired person: medium skin tone +1F471 1F3FE ; fully-qualified # ๐Ÿ‘ฑ๐Ÿพ blond-haired person: medium-dark skin tone +1F471 1F3FF ; fully-qualified # ๐Ÿ‘ฑ๐Ÿฟ blond-haired person: dark skin tone +1F471 200D 2642 FE0F ; fully-qualified # ๐Ÿ‘ฑโ€โ™‚๏ธ blond-haired man +1F471 200D 2642 ; non-fully-qualified # ๐Ÿ‘ฑโ€โ™‚ blond-haired man +1F471 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿ‘ฑ๐Ÿปโ€โ™‚๏ธ blond-haired man: light skin tone +1F471 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿ‘ฑ๐Ÿปโ€โ™‚ blond-haired man: light skin tone +1F471 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿ‘ฑ๐Ÿผโ€โ™‚๏ธ blond-haired man: medium-light skin tone +1F471 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿ‘ฑ๐Ÿผโ€โ™‚ blond-haired man: medium-light skin tone +1F471 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿ‘ฑ๐Ÿฝโ€โ™‚๏ธ blond-haired man: medium skin tone +1F471 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿ‘ฑ๐Ÿฝโ€โ™‚ blond-haired man: medium skin tone +1F471 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿ‘ฑ๐Ÿพโ€โ™‚๏ธ blond-haired man: medium-dark skin tone +1F471 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿ‘ฑ๐Ÿพโ€โ™‚ blond-haired man: medium-dark skin tone +1F471 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿ‘ฑ๐Ÿฟโ€โ™‚๏ธ blond-haired man: dark skin tone +1F471 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿ‘ฑ๐Ÿฟโ€โ™‚ blond-haired man: dark skin tone +1F471 200D 2640 FE0F ; fully-qualified # ๐Ÿ‘ฑโ€โ™€๏ธ blond-haired woman +1F471 200D 2640 ; non-fully-qualified # ๐Ÿ‘ฑโ€โ™€ blond-haired woman +1F471 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿ‘ฑ๐Ÿปโ€โ™€๏ธ blond-haired woman: light skin tone +1F471 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿ‘ฑ๐Ÿปโ€โ™€ blond-haired woman: light skin tone +1F471 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿ‘ฑ๐Ÿผโ€โ™€๏ธ blond-haired woman: medium-light skin tone +1F471 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿ‘ฑ๐Ÿผโ€โ™€ blond-haired woman: medium-light skin tone +1F471 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿ‘ฑ๐Ÿฝโ€โ™€๏ธ blond-haired woman: medium skin tone +1F471 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿ‘ฑ๐Ÿฝโ€โ™€ blond-haired woman: medium skin tone +1F471 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿ‘ฑ๐Ÿพโ€โ™€๏ธ blond-haired woman: medium-dark skin tone +1F471 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿ‘ฑ๐Ÿพโ€โ™€ blond-haired woman: medium-dark skin tone +1F471 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿ‘ฑ๐Ÿฟโ€โ™€๏ธ blond-haired woman: dark skin tone +1F471 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿ‘ฑ๐Ÿฟโ€โ™€ blond-haired woman: dark skin tone +1F468 200D 1F9B0 ; fully-qualified # ๐Ÿ‘จโ€๐Ÿฆฐ man, red haired +1F468 1F3FB 200D 1F9B0 ; fully-qualified # ๐Ÿ‘จ๐Ÿปโ€๐Ÿฆฐ man, red haired: light skin tone +1F468 1F3FC 200D 1F9B0 ; fully-qualified # ๐Ÿ‘จ๐Ÿผโ€๐Ÿฆฐ man, red haired: medium-light skin tone +1F468 1F3FD 200D 1F9B0 ; fully-qualified # ๐Ÿ‘จ๐Ÿฝโ€๐Ÿฆฐ man, red haired: medium skin tone +1F468 1F3FE 200D 1F9B0 ; fully-qualified # ๐Ÿ‘จ๐Ÿพโ€๐Ÿฆฐ man, red haired: medium-dark skin tone +1F468 1F3FF 200D 1F9B0 ; fully-qualified # ๐Ÿ‘จ๐Ÿฟโ€๐Ÿฆฐ man, red haired: dark skin tone +1F469 200D 1F9B0 ; fully-qualified # ๐Ÿ‘ฉโ€๐Ÿฆฐ woman, red haired +1F469 1F3FB 200D 1F9B0 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆฐ woman, red haired: light skin tone +1F469 1F3FC 200D 1F9B0 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆฐ woman, red haired: medium-light skin tone +1F469 1F3FD 200D 1F9B0 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆฐ woman, red haired: medium skin tone +1F469 1F3FE 200D 1F9B0 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆฐ woman, red haired: medium-dark skin tone +1F469 1F3FF 200D 1F9B0 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆฐ woman, red haired: dark skin tone +1F468 200D 1F9B1 ; fully-qualified # ๐Ÿ‘จโ€๐Ÿฆฑ man, curly haired +1F468 1F3FB 200D 1F9B1 ; fully-qualified # ๐Ÿ‘จ๐Ÿปโ€๐Ÿฆฑ man, curly haired: light skin tone +1F468 1F3FC 200D 1F9B1 ; fully-qualified # ๐Ÿ‘จ๐Ÿผโ€๐Ÿฆฑ man, curly haired: medium-light skin tone +1F468 1F3FD 200D 1F9B1 ; fully-qualified # ๐Ÿ‘จ๐Ÿฝโ€๐Ÿฆฑ man, curly haired: medium skin tone +1F468 1F3FE 200D 1F9B1 ; fully-qualified # ๐Ÿ‘จ๐Ÿพโ€๐Ÿฆฑ man, curly haired: medium-dark skin tone +1F468 1F3FF 200D 1F9B1 ; fully-qualified # ๐Ÿ‘จ๐Ÿฟโ€๐Ÿฆฑ man, curly haired: dark skin tone +1F469 200D 1F9B1 ; fully-qualified # ๐Ÿ‘ฉโ€๐Ÿฆฑ woman, curly haired +1F469 1F3FB 200D 1F9B1 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆฑ woman, curly haired: light skin tone +1F469 1F3FC 200D 1F9B1 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆฑ woman, curly haired: medium-light skin tone +1F469 1F3FD 200D 1F9B1 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆฑ woman, curly haired: medium skin tone +1F469 1F3FE 200D 1F9B1 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆฑ woman, curly haired: medium-dark skin tone +1F469 1F3FF 200D 1F9B1 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆฑ woman, curly haired: dark skin tone +1F468 200D 1F9B2 ; fully-qualified # ๐Ÿ‘จโ€๐Ÿฆฒ man, bald +1F468 1F3FB 200D 1F9B2 ; fully-qualified # ๐Ÿ‘จ๐Ÿปโ€๐Ÿฆฒ man, bald: light skin tone +1F468 1F3FC 200D 1F9B2 ; fully-qualified # ๐Ÿ‘จ๐Ÿผโ€๐Ÿฆฒ man, bald: medium-light skin tone +1F468 1F3FD 200D 1F9B2 ; fully-qualified # ๐Ÿ‘จ๐Ÿฝโ€๐Ÿฆฒ man, bald: medium skin tone +1F468 1F3FE 200D 1F9B2 ; fully-qualified # ๐Ÿ‘จ๐Ÿพโ€๐Ÿฆฒ man, bald: medium-dark skin tone +1F468 1F3FF 200D 1F9B2 ; fully-qualified # ๐Ÿ‘จ๐Ÿฟโ€๐Ÿฆฒ man, bald: dark skin tone +1F469 200D 1F9B2 ; fully-qualified # ๐Ÿ‘ฉโ€๐Ÿฆฒ woman, bald +1F469 1F3FB 200D 1F9B2 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆฒ woman, bald: light skin tone +1F469 1F3FC 200D 1F9B2 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆฒ woman, bald: medium-light skin tone +1F469 1F3FD 200D 1F9B2 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆฒ woman, bald: medium skin tone +1F469 1F3FE 200D 1F9B2 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆฒ woman, bald: medium-dark skin tone +1F469 1F3FF 200D 1F9B2 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆฒ woman, bald: dark skin tone +1F468 200D 1F9B3 ; fully-qualified # ๐Ÿ‘จโ€๐Ÿฆณ man, white haired +1F468 1F3FB 200D 1F9B3 ; fully-qualified # ๐Ÿ‘จ๐Ÿปโ€๐Ÿฆณ man, white haired: light skin tone +1F468 1F3FC 200D 1F9B3 ; fully-qualified # ๐Ÿ‘จ๐Ÿผโ€๐Ÿฆณ man, white haired: medium-light skin tone +1F468 1F3FD 200D 1F9B3 ; fully-qualified # ๐Ÿ‘จ๐Ÿฝโ€๐Ÿฆณ man, white haired: medium skin tone +1F468 1F3FE 200D 1F9B3 ; fully-qualified # ๐Ÿ‘จ๐Ÿพโ€๐Ÿฆณ man, white haired: medium-dark skin tone +1F468 1F3FF 200D 1F9B3 ; fully-qualified # ๐Ÿ‘จ๐Ÿฟโ€๐Ÿฆณ man, white haired: dark skin tone +1F469 200D 1F9B3 ; fully-qualified # ๐Ÿ‘ฉโ€๐Ÿฆณ woman, white haired +1F469 1F3FB 200D 1F9B3 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆณ woman, white haired: light skin tone +1F469 1F3FC 200D 1F9B3 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆณ woman, white haired: medium-light skin tone +1F469 1F3FD 200D 1F9B3 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆณ woman, white haired: medium skin tone +1F469 1F3FE 200D 1F9B3 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆณ woman, white haired: medium-dark skin tone +1F469 1F3FF 200D 1F9B3 ; fully-qualified # ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆณ woman, white haired: dark skin tone +1F935 ; fully-qualified # ๐Ÿคต man in tuxedo +1F935 1F3FB ; fully-qualified # ๐Ÿคต๐Ÿป man in tuxedo: light skin tone +1F935 1F3FC ; fully-qualified # ๐Ÿคต๐Ÿผ man in tuxedo: medium-light skin tone +1F935 1F3FD ; fully-qualified # ๐Ÿคต๐Ÿฝ man in tuxedo: medium skin tone +1F935 1F3FE ; fully-qualified # ๐Ÿคต๐Ÿพ man in tuxedo: medium-dark skin tone +1F935 1F3FF ; fully-qualified # ๐Ÿคต๐Ÿฟ man in tuxedo: dark skin tone +1F470 ; fully-qualified # ๐Ÿ‘ฐ bride with veil +1F470 1F3FB ; fully-qualified # ๐Ÿ‘ฐ๐Ÿป bride with veil: light skin tone +1F470 1F3FC ; fully-qualified # ๐Ÿ‘ฐ๐Ÿผ bride with veil: medium-light skin tone +1F470 1F3FD ; fully-qualified # ๐Ÿ‘ฐ๐Ÿฝ bride with veil: medium skin tone +1F470 1F3FE ; fully-qualified # ๐Ÿ‘ฐ๐Ÿพ bride with veil: medium-dark skin tone +1F470 1F3FF ; fully-qualified # ๐Ÿ‘ฐ๐Ÿฟ bride with veil: dark skin tone +1F930 ; fully-qualified # ๐Ÿคฐ pregnant woman +1F930 1F3FB ; fully-qualified # ๐Ÿคฐ๐Ÿป pregnant woman: light skin tone +1F930 1F3FC ; fully-qualified # ๐Ÿคฐ๐Ÿผ pregnant woman: medium-light skin tone +1F930 1F3FD ; fully-qualified # ๐Ÿคฐ๐Ÿฝ pregnant woman: medium skin tone +1F930 1F3FE ; fully-qualified # ๐Ÿคฐ๐Ÿพ pregnant woman: medium-dark skin tone +1F930 1F3FF ; fully-qualified # ๐Ÿคฐ๐Ÿฟ pregnant woman: dark skin tone +1F931 ; fully-qualified # ๐Ÿคฑ breast-feeding +1F931 1F3FB ; fully-qualified # ๐Ÿคฑ๐Ÿป breast-feeding: light skin tone +1F931 1F3FC ; fully-qualified # ๐Ÿคฑ๐Ÿผ breast-feeding: medium-light skin tone +1F931 1F3FD ; fully-qualified # ๐Ÿคฑ๐Ÿฝ breast-feeding: medium skin tone +1F931 1F3FE ; fully-qualified # ๐Ÿคฑ๐Ÿพ breast-feeding: medium-dark skin tone +1F931 1F3FF ; fully-qualified # ๐Ÿคฑ๐Ÿฟ breast-feeding: dark skin tone + +# subgroup: person-fantasy +1F47C ; fully-qualified # ๐Ÿ‘ผ baby angel +1F47C 1F3FB ; fully-qualified # ๐Ÿ‘ผ๐Ÿป baby angel: light skin tone +1F47C 1F3FC ; fully-qualified # ๐Ÿ‘ผ๐Ÿผ baby angel: medium-light skin tone +1F47C 1F3FD ; fully-qualified # ๐Ÿ‘ผ๐Ÿฝ baby angel: medium skin tone +1F47C 1F3FE ; fully-qualified # ๐Ÿ‘ผ๐Ÿพ baby angel: medium-dark skin tone +1F47C 1F3FF ; fully-qualified # ๐Ÿ‘ผ๐Ÿฟ baby angel: dark skin tone +1F385 ; fully-qualified # ๐ŸŽ… Santa Claus +1F385 1F3FB ; fully-qualified # ๐ŸŽ…๐Ÿป Santa Claus: light skin tone +1F385 1F3FC ; fully-qualified # ๐ŸŽ…๐Ÿผ Santa Claus: medium-light skin tone +1F385 1F3FD ; fully-qualified # ๐ŸŽ…๐Ÿฝ Santa Claus: medium skin tone +1F385 1F3FE ; fully-qualified # ๐ŸŽ…๐Ÿพ Santa Claus: medium-dark skin tone +1F385 1F3FF ; fully-qualified # ๐ŸŽ…๐Ÿฟ Santa Claus: dark skin tone +1F936 ; fully-qualified # ๐Ÿคถ Mrs. Claus +1F936 1F3FB ; fully-qualified # ๐Ÿคถ๐Ÿป Mrs. Claus: light skin tone +1F936 1F3FC ; fully-qualified # ๐Ÿคถ๐Ÿผ Mrs. Claus: medium-light skin tone +1F936 1F3FD ; fully-qualified # ๐Ÿคถ๐Ÿฝ Mrs. Claus: medium skin tone +1F936 1F3FE ; fully-qualified # ๐Ÿคถ๐Ÿพ Mrs. Claus: medium-dark skin tone +1F936 1F3FF ; fully-qualified # ๐Ÿคถ๐Ÿฟ Mrs. Claus: dark skin tone +1F9B8 ; fully-qualified # ๐Ÿฆธ superhero +1F9B8 1F3FB ; fully-qualified # ๐Ÿฆธ๐Ÿป superhero: light skin tone +1F9B8 1F3FC ; fully-qualified # ๐Ÿฆธ๐Ÿผ superhero: medium-light skin tone +1F9B8 1F3FD ; fully-qualified # ๐Ÿฆธ๐Ÿฝ superhero: medium skin tone +1F9B8 1F3FE ; fully-qualified # ๐Ÿฆธ๐Ÿพ superhero: medium-dark skin tone +1F9B8 1F3FF ; fully-qualified # ๐Ÿฆธ๐Ÿฟ superhero: dark skin tone +1F9B8 200D 2640 FE0F ; fully-qualified # ๐Ÿฆธโ€โ™€๏ธ woman superhero +1F9B8 200D 2640 ; non-fully-qualified # ๐Ÿฆธโ€โ™€ woman superhero +1F9B8 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿฆธ๐Ÿปโ€โ™€๏ธ woman superhero: light skin tone +1F9B8 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿฆธ๐Ÿปโ€โ™€ woman superhero: light skin tone +1F9B8 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿฆธ๐Ÿผโ€โ™€๏ธ woman superhero: medium-light skin tone +1F9B8 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿฆธ๐Ÿผโ€โ™€ woman superhero: medium-light skin tone +1F9B8 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿฆธ๐Ÿฝโ€โ™€๏ธ woman superhero: medium skin tone +1F9B8 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿฆธ๐Ÿฝโ€โ™€ woman superhero: medium skin tone +1F9B8 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿฆธ๐Ÿพโ€โ™€๏ธ woman superhero: medium-dark skin tone +1F9B8 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿฆธ๐Ÿพโ€โ™€ woman superhero: medium-dark skin tone +1F9B8 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿฆธ๐Ÿฟโ€โ™€๏ธ woman superhero: dark skin tone +1F9B8 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿฆธ๐Ÿฟโ€โ™€ woman superhero: dark skin tone +1F9B8 200D 2642 FE0F ; fully-qualified # ๐Ÿฆธโ€โ™‚๏ธ man superhero +1F9B8 200D 2642 ; non-fully-qualified # ๐Ÿฆธโ€โ™‚ man superhero +1F9B8 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿฆธ๐Ÿปโ€โ™‚๏ธ man superhero: light skin tone +1F9B8 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿฆธ๐Ÿปโ€โ™‚ man superhero: light skin tone +1F9B8 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿฆธ๐Ÿผโ€โ™‚๏ธ man superhero: medium-light skin tone +1F9B8 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿฆธ๐Ÿผโ€โ™‚ man superhero: medium-light skin tone +1F9B8 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿฆธ๐Ÿฝโ€โ™‚๏ธ man superhero: medium skin tone +1F9B8 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿฆธ๐Ÿฝโ€โ™‚ man superhero: medium skin tone +1F9B8 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿฆธ๐Ÿพโ€โ™‚๏ธ man superhero: medium-dark skin tone +1F9B8 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿฆธ๐Ÿพโ€โ™‚ man superhero: medium-dark skin tone +1F9B8 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿฆธ๐Ÿฟโ€โ™‚๏ธ man superhero: dark skin tone +1F9B8 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿฆธ๐Ÿฟโ€โ™‚ man superhero: dark skin tone +1F9B9 ; fully-qualified # ๐Ÿฆน supervillain +1F9B9 1F3FB ; fully-qualified # ๐Ÿฆน๐Ÿป supervillain: light skin tone +1F9B9 1F3FC ; fully-qualified # ๐Ÿฆน๐Ÿผ supervillain: medium-light skin tone +1F9B9 1F3FD ; fully-qualified # ๐Ÿฆน๐Ÿฝ supervillain: medium skin tone +1F9B9 1F3FE ; fully-qualified # ๐Ÿฆน๐Ÿพ supervillain: medium-dark skin tone +1F9B9 1F3FF ; fully-qualified # ๐Ÿฆน๐Ÿฟ supervillain: dark skin tone +1F9B9 200D 2640 FE0F ; fully-qualified # ๐Ÿฆนโ€โ™€๏ธ woman supervillain +1F9B9 200D 2640 ; non-fully-qualified # ๐Ÿฆนโ€โ™€ woman supervillain +1F9B9 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿฆน๐Ÿปโ€โ™€๏ธ woman supervillain: light skin tone +1F9B9 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿฆน๐Ÿปโ€โ™€ woman supervillain: light skin tone +1F9B9 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿฆน๐Ÿผโ€โ™€๏ธ woman supervillain: medium-light skin tone +1F9B9 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿฆน๐Ÿผโ€โ™€ woman supervillain: medium-light skin tone +1F9B9 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿฆน๐Ÿฝโ€โ™€๏ธ woman supervillain: medium skin tone +1F9B9 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿฆน๐Ÿฝโ€โ™€ woman supervillain: medium skin tone +1F9B9 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿฆน๐Ÿพโ€โ™€๏ธ woman supervillain: medium-dark skin tone +1F9B9 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿฆน๐Ÿพโ€โ™€ woman supervillain: medium-dark skin tone +1F9B9 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿฆน๐Ÿฟโ€โ™€๏ธ woman supervillain: dark skin tone +1F9B9 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿฆน๐Ÿฟโ€โ™€ woman supervillain: dark skin tone +1F9B9 200D 2642 FE0F ; fully-qualified # ๐Ÿฆนโ€โ™‚๏ธ man supervillain +1F9B9 200D 2642 ; non-fully-qualified # ๐Ÿฆนโ€โ™‚ man supervillain +1F9B9 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿฆน๐Ÿปโ€โ™‚๏ธ man supervillain: light skin tone +1F9B9 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿฆน๐Ÿปโ€โ™‚ man supervillain: light skin tone +1F9B9 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿฆน๐Ÿผโ€โ™‚๏ธ man supervillain: medium-light skin tone +1F9B9 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿฆน๐Ÿผโ€โ™‚ man supervillain: medium-light skin tone +1F9B9 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿฆน๐Ÿฝโ€โ™‚๏ธ man supervillain: medium skin tone +1F9B9 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿฆน๐Ÿฝโ€โ™‚ man supervillain: medium skin tone +1F9B9 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿฆน๐Ÿพโ€โ™‚๏ธ man supervillain: medium-dark skin tone +1F9B9 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿฆน๐Ÿพโ€โ™‚ man supervillain: medium-dark skin tone +1F9B9 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿฆน๐Ÿฟโ€โ™‚๏ธ man supervillain: dark skin tone +1F9B9 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿฆน๐Ÿฟโ€โ™‚ man supervillain: dark skin tone +1F9D9 ; fully-qualified # ๐Ÿง™ mage +1F9D9 1F3FB ; fully-qualified # ๐Ÿง™๐Ÿป mage: light skin tone +1F9D9 1F3FC ; fully-qualified # ๐Ÿง™๐Ÿผ mage: medium-light skin tone +1F9D9 1F3FD ; fully-qualified # ๐Ÿง™๐Ÿฝ mage: medium skin tone +1F9D9 1F3FE ; fully-qualified # ๐Ÿง™๐Ÿพ mage: medium-dark skin tone +1F9D9 1F3FF ; fully-qualified # ๐Ÿง™๐Ÿฟ mage: dark skin tone +1F9D9 200D 2640 FE0F ; fully-qualified # ๐Ÿง™โ€โ™€๏ธ woman mage +1F9D9 200D 2640 ; non-fully-qualified # ๐Ÿง™โ€โ™€ woman mage +1F9D9 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿง™๐Ÿปโ€โ™€๏ธ woman mage: light skin tone +1F9D9 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿง™๐Ÿปโ€โ™€ woman mage: light skin tone +1F9D9 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿง™๐Ÿผโ€โ™€๏ธ woman mage: medium-light skin tone +1F9D9 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿง™๐Ÿผโ€โ™€ woman mage: medium-light skin tone +1F9D9 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿง™๐Ÿฝโ€โ™€๏ธ woman mage: medium skin tone +1F9D9 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿง™๐Ÿฝโ€โ™€ woman mage: medium skin tone +1F9D9 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿง™๐Ÿพโ€โ™€๏ธ woman mage: medium-dark skin tone +1F9D9 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿง™๐Ÿพโ€โ™€ woman mage: medium-dark skin tone +1F9D9 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿง™๐Ÿฟโ€โ™€๏ธ woman mage: dark skin tone +1F9D9 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿง™๐Ÿฟโ€โ™€ woman mage: dark skin tone +1F9D9 200D 2642 FE0F ; fully-qualified # ๐Ÿง™โ€โ™‚๏ธ man mage +1F9D9 200D 2642 ; non-fully-qualified # ๐Ÿง™โ€โ™‚ man mage +1F9D9 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿง™๐Ÿปโ€โ™‚๏ธ man mage: light skin tone +1F9D9 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿง™๐Ÿปโ€โ™‚ man mage: light skin tone +1F9D9 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿง™๐Ÿผโ€โ™‚๏ธ man mage: medium-light skin tone +1F9D9 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿง™๐Ÿผโ€โ™‚ man mage: medium-light skin tone +1F9D9 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿง™๐Ÿฝโ€โ™‚๏ธ man mage: medium skin tone +1F9D9 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿง™๐Ÿฝโ€โ™‚ man mage: medium skin tone +1F9D9 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿง™๐Ÿพโ€โ™‚๏ธ man mage: medium-dark skin tone +1F9D9 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿง™๐Ÿพโ€โ™‚ man mage: medium-dark skin tone +1F9D9 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿง™๐Ÿฟโ€โ™‚๏ธ man mage: dark skin tone +1F9D9 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿง™๐Ÿฟโ€โ™‚ man mage: dark skin tone +1F9DA ; fully-qualified # ๐Ÿงš fairy +1F9DA 1F3FB ; fully-qualified # ๐Ÿงš๐Ÿป fairy: light skin tone +1F9DA 1F3FC ; fully-qualified # ๐Ÿงš๐Ÿผ fairy: medium-light skin tone +1F9DA 1F3FD ; fully-qualified # ๐Ÿงš๐Ÿฝ fairy: medium skin tone +1F9DA 1F3FE ; fully-qualified # ๐Ÿงš๐Ÿพ fairy: medium-dark skin tone +1F9DA 1F3FF ; fully-qualified # ๐Ÿงš๐Ÿฟ fairy: dark skin tone +1F9DA 200D 2640 FE0F ; fully-qualified # ๐Ÿงšโ€โ™€๏ธ woman fairy +1F9DA 200D 2640 ; non-fully-qualified # ๐Ÿงšโ€โ™€ woman fairy +1F9DA 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿงš๐Ÿปโ€โ™€๏ธ woman fairy: light skin tone +1F9DA 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿงš๐Ÿปโ€โ™€ woman fairy: light skin tone +1F9DA 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿงš๐Ÿผโ€โ™€๏ธ woman fairy: medium-light skin tone +1F9DA 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿงš๐Ÿผโ€โ™€ woman fairy: medium-light skin tone +1F9DA 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿงš๐Ÿฝโ€โ™€๏ธ woman fairy: medium skin tone +1F9DA 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿงš๐Ÿฝโ€โ™€ woman fairy: medium skin tone +1F9DA 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿงš๐Ÿพโ€โ™€๏ธ woman fairy: medium-dark skin tone +1F9DA 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿงš๐Ÿพโ€โ™€ woman fairy: medium-dark skin tone +1F9DA 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿงš๐Ÿฟโ€โ™€๏ธ woman fairy: dark skin tone +1F9DA 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿงš๐Ÿฟโ€โ™€ woman fairy: dark skin tone +1F9DA 200D 2642 FE0F ; fully-qualified # ๐Ÿงšโ€โ™‚๏ธ man fairy +1F9DA 200D 2642 ; non-fully-qualified # ๐Ÿงšโ€โ™‚ man fairy +1F9DA 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿงš๐Ÿปโ€โ™‚๏ธ man fairy: light skin tone +1F9DA 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿงš๐Ÿปโ€โ™‚ man fairy: light skin tone +1F9DA 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿงš๐Ÿผโ€โ™‚๏ธ man fairy: medium-light skin tone +1F9DA 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿงš๐Ÿผโ€โ™‚ man fairy: medium-light skin tone +1F9DA 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿงš๐Ÿฝโ€โ™‚๏ธ man fairy: medium skin tone +1F9DA 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿงš๐Ÿฝโ€โ™‚ man fairy: medium skin tone +1F9DA 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿงš๐Ÿพโ€โ™‚๏ธ man fairy: medium-dark skin tone +1F9DA 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿงš๐Ÿพโ€โ™‚ man fairy: medium-dark skin tone +1F9DA 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿงš๐Ÿฟโ€โ™‚๏ธ man fairy: dark skin tone +1F9DA 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿงš๐Ÿฟโ€โ™‚ man fairy: dark skin tone +1F9DB ; fully-qualified # ๐Ÿง› vampire +1F9DB 1F3FB ; fully-qualified # ๐Ÿง›๐Ÿป vampire: light skin tone +1F9DB 1F3FC ; fully-qualified # ๐Ÿง›๐Ÿผ vampire: medium-light skin tone +1F9DB 1F3FD ; fully-qualified # ๐Ÿง›๐Ÿฝ vampire: medium skin tone +1F9DB 1F3FE ; fully-qualified # ๐Ÿง›๐Ÿพ vampire: medium-dark skin tone +1F9DB 1F3FF ; fully-qualified # ๐Ÿง›๐Ÿฟ vampire: dark skin tone +1F9DB 200D 2640 FE0F ; fully-qualified # ๐Ÿง›โ€โ™€๏ธ woman vampire +1F9DB 200D 2640 ; non-fully-qualified # ๐Ÿง›โ€โ™€ woman vampire +1F9DB 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿง›๐Ÿปโ€โ™€๏ธ woman vampire: light skin tone +1F9DB 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿง›๐Ÿปโ€โ™€ woman vampire: light skin tone +1F9DB 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿง›๐Ÿผโ€โ™€๏ธ woman vampire: medium-light skin tone +1F9DB 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿง›๐Ÿผโ€โ™€ woman vampire: medium-light skin tone +1F9DB 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿง›๐Ÿฝโ€โ™€๏ธ woman vampire: medium skin tone +1F9DB 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿง›๐Ÿฝโ€โ™€ woman vampire: medium skin tone +1F9DB 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿง›๐Ÿพโ€โ™€๏ธ woman vampire: medium-dark skin tone +1F9DB 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿง›๐Ÿพโ€โ™€ woman vampire: medium-dark skin tone +1F9DB 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿง›๐Ÿฟโ€โ™€๏ธ woman vampire: dark skin tone +1F9DB 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿง›๐Ÿฟโ€โ™€ woman vampire: dark skin tone +1F9DB 200D 2642 FE0F ; fully-qualified # ๐Ÿง›โ€โ™‚๏ธ man vampire +1F9DB 200D 2642 ; non-fully-qualified # ๐Ÿง›โ€โ™‚ man vampire +1F9DB 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿง›๐Ÿปโ€โ™‚๏ธ man vampire: light skin tone +1F9DB 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿง›๐Ÿปโ€โ™‚ man vampire: light skin tone +1F9DB 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿง›๐Ÿผโ€โ™‚๏ธ man vampire: medium-light skin tone +1F9DB 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿง›๐Ÿผโ€โ™‚ man vampire: medium-light skin tone +1F9DB 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿง›๐Ÿฝโ€โ™‚๏ธ man vampire: medium skin tone +1F9DB 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿง›๐Ÿฝโ€โ™‚ man vampire: medium skin tone +1F9DB 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿง›๐Ÿพโ€โ™‚๏ธ man vampire: medium-dark skin tone +1F9DB 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿง›๐Ÿพโ€โ™‚ man vampire: medium-dark skin tone +1F9DB 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿง›๐Ÿฟโ€โ™‚๏ธ man vampire: dark skin tone +1F9DB 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿง›๐Ÿฟโ€โ™‚ man vampire: dark skin tone +1F9DC ; fully-qualified # ๐Ÿงœ merperson +1F9DC 1F3FB ; fully-qualified # ๐Ÿงœ๐Ÿป merperson: light skin tone +1F9DC 1F3FC ; fully-qualified # ๐Ÿงœ๐Ÿผ merperson: medium-light skin tone +1F9DC 1F3FD ; fully-qualified # ๐Ÿงœ๐Ÿฝ merperson: medium skin tone +1F9DC 1F3FE ; fully-qualified # ๐Ÿงœ๐Ÿพ merperson: medium-dark skin tone +1F9DC 1F3FF ; fully-qualified # ๐Ÿงœ๐Ÿฟ merperson: dark skin tone +1F9DC 200D 2640 FE0F ; fully-qualified # ๐Ÿงœโ€โ™€๏ธ mermaid +1F9DC 200D 2640 ; non-fully-qualified # ๐Ÿงœโ€โ™€ mermaid +1F9DC 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿงœ๐Ÿปโ€โ™€๏ธ mermaid: light skin tone +1F9DC 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿงœ๐Ÿปโ€โ™€ mermaid: light skin tone +1F9DC 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿงœ๐Ÿผโ€โ™€๏ธ mermaid: medium-light skin tone +1F9DC 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿงœ๐Ÿผโ€โ™€ mermaid: medium-light skin tone +1F9DC 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿงœ๐Ÿฝโ€โ™€๏ธ mermaid: medium skin tone +1F9DC 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿงœ๐Ÿฝโ€โ™€ mermaid: medium skin tone +1F9DC 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿงœ๐Ÿพโ€โ™€๏ธ mermaid: medium-dark skin tone +1F9DC 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿงœ๐Ÿพโ€โ™€ mermaid: medium-dark skin tone +1F9DC 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿงœ๐Ÿฟโ€โ™€๏ธ mermaid: dark skin tone +1F9DC 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿงœ๐Ÿฟโ€โ™€ mermaid: dark skin tone +1F9DC 200D 2642 FE0F ; fully-qualified # ๐Ÿงœโ€โ™‚๏ธ merman +1F9DC 200D 2642 ; non-fully-qualified # ๐Ÿงœโ€โ™‚ merman +1F9DC 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿงœ๐Ÿปโ€โ™‚๏ธ merman: light skin tone +1F9DC 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿงœ๐Ÿปโ€โ™‚ merman: light skin tone +1F9DC 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿงœ๐Ÿผโ€โ™‚๏ธ merman: medium-light skin tone +1F9DC 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿงœ๐Ÿผโ€โ™‚ merman: medium-light skin tone +1F9DC 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿงœ๐Ÿฝโ€โ™‚๏ธ merman: medium skin tone +1F9DC 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿงœ๐Ÿฝโ€โ™‚ merman: medium skin tone +1F9DC 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿงœ๐Ÿพโ€โ™‚๏ธ merman: medium-dark skin tone +1F9DC 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿงœ๐Ÿพโ€โ™‚ merman: medium-dark skin tone +1F9DC 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿงœ๐Ÿฟโ€โ™‚๏ธ merman: dark skin tone +1F9DC 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿงœ๐Ÿฟโ€โ™‚ merman: dark skin tone +1F9DD ; fully-qualified # ๐Ÿง elf +1F9DD 1F3FB ; fully-qualified # ๐Ÿง๐Ÿป elf: light skin tone +1F9DD 1F3FC ; fully-qualified # ๐Ÿง๐Ÿผ elf: medium-light skin tone +1F9DD 1F3FD ; fully-qualified # ๐Ÿง๐Ÿฝ elf: medium skin tone +1F9DD 1F3FE ; fully-qualified # ๐Ÿง๐Ÿพ elf: medium-dark skin tone +1F9DD 1F3FF ; fully-qualified # ๐Ÿง๐Ÿฟ elf: dark skin tone +1F9DD 200D 2640 FE0F ; fully-qualified # ๐Ÿงโ€โ™€๏ธ woman elf +1F9DD 200D 2640 ; non-fully-qualified # ๐Ÿงโ€โ™€ woman elf +1F9DD 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿง๐Ÿปโ€โ™€๏ธ woman elf: light skin tone +1F9DD 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿง๐Ÿปโ€โ™€ woman elf: light skin tone +1F9DD 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿง๐Ÿผโ€โ™€๏ธ woman elf: medium-light skin tone +1F9DD 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿง๐Ÿผโ€โ™€ woman elf: medium-light skin tone +1F9DD 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿง๐Ÿฝโ€โ™€๏ธ woman elf: medium skin tone +1F9DD 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿง๐Ÿฝโ€โ™€ woman elf: medium skin tone +1F9DD 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿง๐Ÿพโ€โ™€๏ธ woman elf: medium-dark skin tone +1F9DD 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿง๐Ÿพโ€โ™€ woman elf: medium-dark skin tone +1F9DD 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿง๐Ÿฟโ€โ™€๏ธ woman elf: dark skin tone +1F9DD 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿง๐Ÿฟโ€โ™€ woman elf: dark skin tone +1F9DD 200D 2642 FE0F ; fully-qualified # ๐Ÿงโ€โ™‚๏ธ man elf +1F9DD 200D 2642 ; non-fully-qualified # ๐Ÿงโ€โ™‚ man elf +1F9DD 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿง๐Ÿปโ€โ™‚๏ธ man elf: light skin tone +1F9DD 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿง๐Ÿปโ€โ™‚ man elf: light skin tone +1F9DD 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿง๐Ÿผโ€โ™‚๏ธ man elf: medium-light skin tone +1F9DD 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿง๐Ÿผโ€โ™‚ man elf: medium-light skin tone +1F9DD 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿง๐Ÿฝโ€โ™‚๏ธ man elf: medium skin tone +1F9DD 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿง๐Ÿฝโ€โ™‚ man elf: medium skin tone +1F9DD 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿง๐Ÿพโ€โ™‚๏ธ man elf: medium-dark skin tone +1F9DD 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿง๐Ÿพโ€โ™‚ man elf: medium-dark skin tone +1F9DD 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿง๐Ÿฟโ€โ™‚๏ธ man elf: dark skin tone +1F9DD 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿง๐Ÿฟโ€โ™‚ man elf: dark skin tone +1F9DE ; fully-qualified # ๐Ÿงž genie +1F9DE 200D 2640 FE0F ; fully-qualified # ๐Ÿงžโ€โ™€๏ธ woman genie +1F9DE 200D 2640 ; non-fully-qualified # ๐Ÿงžโ€โ™€ woman genie +1F9DE 200D 2642 FE0F ; fully-qualified # ๐Ÿงžโ€โ™‚๏ธ man genie +1F9DE 200D 2642 ; non-fully-qualified # ๐Ÿงžโ€โ™‚ man genie +1F9DF ; fully-qualified # ๐ŸงŸ zombie +1F9DF 200D 2640 FE0F ; fully-qualified # ๐ŸงŸโ€โ™€๏ธ woman zombie +1F9DF 200D 2640 ; non-fully-qualified # ๐ŸงŸโ€โ™€ woman zombie +1F9DF 200D 2642 FE0F ; fully-qualified # ๐ŸงŸโ€โ™‚๏ธ man zombie +1F9DF 200D 2642 ; non-fully-qualified # ๐ŸงŸโ€โ™‚ man zombie + +# subgroup: person-gesture +1F64D ; fully-qualified # ๐Ÿ™ person frowning +1F64D 1F3FB ; fully-qualified # ๐Ÿ™๐Ÿป person frowning: light skin tone +1F64D 1F3FC ; fully-qualified # ๐Ÿ™๐Ÿผ person frowning: medium-light skin tone +1F64D 1F3FD ; fully-qualified # ๐Ÿ™๐Ÿฝ person frowning: medium skin tone +1F64D 1F3FE ; fully-qualified # ๐Ÿ™๐Ÿพ person frowning: medium-dark skin tone +1F64D 1F3FF ; fully-qualified # ๐Ÿ™๐Ÿฟ person frowning: dark skin tone +1F64D 200D 2642 FE0F ; fully-qualified # ๐Ÿ™โ€โ™‚๏ธ man frowning +1F64D 200D 2642 ; non-fully-qualified # ๐Ÿ™โ€โ™‚ man frowning +1F64D 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿ™๐Ÿปโ€โ™‚๏ธ man frowning: light skin tone +1F64D 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿ™๐Ÿปโ€โ™‚ man frowning: light skin tone +1F64D 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿ™๐Ÿผโ€โ™‚๏ธ man frowning: medium-light skin tone +1F64D 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿ™๐Ÿผโ€โ™‚ man frowning: medium-light skin tone +1F64D 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿ™๐Ÿฝโ€โ™‚๏ธ man frowning: medium skin tone +1F64D 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿ™๐Ÿฝโ€โ™‚ man frowning: medium skin tone +1F64D 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿ™๐Ÿพโ€โ™‚๏ธ man frowning: medium-dark skin tone +1F64D 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿ™๐Ÿพโ€โ™‚ man frowning: medium-dark skin tone +1F64D 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿ™๐Ÿฟโ€โ™‚๏ธ man frowning: dark skin tone +1F64D 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿ™๐Ÿฟโ€โ™‚ man frowning: dark skin tone +1F64D 200D 2640 FE0F ; fully-qualified # ๐Ÿ™โ€โ™€๏ธ woman frowning +1F64D 200D 2640 ; non-fully-qualified # ๐Ÿ™โ€โ™€ woman frowning +1F64D 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿ™๐Ÿปโ€โ™€๏ธ woman frowning: light skin tone +1F64D 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿ™๐Ÿปโ€โ™€ woman frowning: light skin tone +1F64D 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿ™๐Ÿผโ€โ™€๏ธ woman frowning: medium-light skin tone +1F64D 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿ™๐Ÿผโ€โ™€ woman frowning: medium-light skin tone +1F64D 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿ™๐Ÿฝโ€โ™€๏ธ woman frowning: medium skin tone +1F64D 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿ™๐Ÿฝโ€โ™€ woman frowning: medium skin tone +1F64D 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿ™๐Ÿพโ€โ™€๏ธ woman frowning: medium-dark skin tone +1F64D 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿ™๐Ÿพโ€โ™€ woman frowning: medium-dark skin tone +1F64D 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿ™๐Ÿฟโ€โ™€๏ธ woman frowning: dark skin tone +1F64D 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿ™๐Ÿฟโ€โ™€ woman frowning: dark skin tone +1F64E ; fully-qualified # ๐Ÿ™Ž person pouting +1F64E 1F3FB ; fully-qualified # ๐Ÿ™Ž๐Ÿป person pouting: light skin tone +1F64E 1F3FC ; fully-qualified # ๐Ÿ™Ž๐Ÿผ person pouting: medium-light skin tone +1F64E 1F3FD ; fully-qualified # ๐Ÿ™Ž๐Ÿฝ person pouting: medium skin tone +1F64E 1F3FE ; fully-qualified # ๐Ÿ™Ž๐Ÿพ person pouting: medium-dark skin tone +1F64E 1F3FF ; fully-qualified # ๐Ÿ™Ž๐Ÿฟ person pouting: dark skin tone +1F64E 200D 2642 FE0F ; fully-qualified # ๐Ÿ™Žโ€โ™‚๏ธ man pouting +1F64E 200D 2642 ; non-fully-qualified # ๐Ÿ™Žโ€โ™‚ man pouting +1F64E 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿ™Ž๐Ÿปโ€โ™‚๏ธ man pouting: light skin tone +1F64E 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿ™Ž๐Ÿปโ€โ™‚ man pouting: light skin tone +1F64E 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿ™Ž๐Ÿผโ€โ™‚๏ธ man pouting: medium-light skin tone +1F64E 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿ™Ž๐Ÿผโ€โ™‚ man pouting: medium-light skin tone +1F64E 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿ™Ž๐Ÿฝโ€โ™‚๏ธ man pouting: medium skin tone +1F64E 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿ™Ž๐Ÿฝโ€โ™‚ man pouting: medium skin tone +1F64E 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿ™Ž๐Ÿพโ€โ™‚๏ธ man pouting: medium-dark skin tone +1F64E 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿ™Ž๐Ÿพโ€โ™‚ man pouting: medium-dark skin tone +1F64E 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿ™Ž๐Ÿฟโ€โ™‚๏ธ man pouting: dark skin tone +1F64E 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿ™Ž๐Ÿฟโ€โ™‚ man pouting: dark skin tone +1F64E 200D 2640 FE0F ; fully-qualified # ๐Ÿ™Žโ€โ™€๏ธ woman pouting +1F64E 200D 2640 ; non-fully-qualified # ๐Ÿ™Žโ€โ™€ woman pouting +1F64E 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿ™Ž๐Ÿปโ€โ™€๏ธ woman pouting: light skin tone +1F64E 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿ™Ž๐Ÿปโ€โ™€ woman pouting: light skin tone +1F64E 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿ™Ž๐Ÿผโ€โ™€๏ธ woman pouting: medium-light skin tone +1F64E 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿ™Ž๐Ÿผโ€โ™€ woman pouting: medium-light skin tone +1F64E 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿ™Ž๐Ÿฝโ€โ™€๏ธ woman pouting: medium skin tone +1F64E 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿ™Ž๐Ÿฝโ€โ™€ woman pouting: medium skin tone +1F64E 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿ™Ž๐Ÿพโ€โ™€๏ธ woman pouting: medium-dark skin tone +1F64E 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿ™Ž๐Ÿพโ€โ™€ woman pouting: medium-dark skin tone +1F64E 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿ™Ž๐Ÿฟโ€โ™€๏ธ woman pouting: dark skin tone +1F64E 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿ™Ž๐Ÿฟโ€โ™€ woman pouting: dark skin tone +1F645 ; fully-qualified # ๐Ÿ™… person gesturing NO +1F645 1F3FB ; fully-qualified # ๐Ÿ™…๐Ÿป person gesturing NO: light skin tone +1F645 1F3FC ; fully-qualified # ๐Ÿ™…๐Ÿผ person gesturing NO: medium-light skin tone +1F645 1F3FD ; fully-qualified # ๐Ÿ™…๐Ÿฝ person gesturing NO: medium skin tone +1F645 1F3FE ; fully-qualified # ๐Ÿ™…๐Ÿพ person gesturing NO: medium-dark skin tone +1F645 1F3FF ; fully-qualified # ๐Ÿ™…๐Ÿฟ person gesturing NO: dark skin tone +1F645 200D 2642 FE0F ; fully-qualified # ๐Ÿ™…โ€โ™‚๏ธ man gesturing NO +1F645 200D 2642 ; non-fully-qualified # ๐Ÿ™…โ€โ™‚ man gesturing NO +1F645 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿ™…๐Ÿปโ€โ™‚๏ธ man gesturing NO: light skin tone +1F645 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿ™…๐Ÿปโ€โ™‚ man gesturing NO: light skin tone +1F645 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿ™…๐Ÿผโ€โ™‚๏ธ man gesturing NO: medium-light skin tone +1F645 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿ™…๐Ÿผโ€โ™‚ man gesturing NO: medium-light skin tone +1F645 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿ™…๐Ÿฝโ€โ™‚๏ธ man gesturing NO: medium skin tone +1F645 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿ™…๐Ÿฝโ€โ™‚ man gesturing NO: medium skin tone +1F645 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿ™…๐Ÿพโ€โ™‚๏ธ man gesturing NO: medium-dark skin tone +1F645 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿ™…๐Ÿพโ€โ™‚ man gesturing NO: medium-dark skin tone +1F645 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿ™…๐Ÿฟโ€โ™‚๏ธ man gesturing NO: dark skin tone +1F645 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿ™…๐Ÿฟโ€โ™‚ man gesturing NO: dark skin tone +1F645 200D 2640 FE0F ; fully-qualified # ๐Ÿ™…โ€โ™€๏ธ woman gesturing NO +1F645 200D 2640 ; non-fully-qualified # ๐Ÿ™…โ€โ™€ woman gesturing NO +1F645 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿ™…๐Ÿปโ€โ™€๏ธ woman gesturing NO: light skin tone +1F645 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿ™…๐Ÿปโ€โ™€ woman gesturing NO: light skin tone +1F645 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿ™…๐Ÿผโ€โ™€๏ธ woman gesturing NO: medium-light skin tone +1F645 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿ™…๐Ÿผโ€โ™€ woman gesturing NO: medium-light skin tone +1F645 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿ™…๐Ÿฝโ€โ™€๏ธ woman gesturing NO: medium skin tone +1F645 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿ™…๐Ÿฝโ€โ™€ woman gesturing NO: medium skin tone +1F645 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿ™…๐Ÿพโ€โ™€๏ธ woman gesturing NO: medium-dark skin tone +1F645 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿ™…๐Ÿพโ€โ™€ woman gesturing NO: medium-dark skin tone +1F645 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿ™…๐Ÿฟโ€โ™€๏ธ woman gesturing NO: dark skin tone +1F645 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿ™…๐Ÿฟโ€โ™€ woman gesturing NO: dark skin tone +1F646 ; fully-qualified # ๐Ÿ™† person gesturing OK +1F646 1F3FB ; fully-qualified # ๐Ÿ™†๐Ÿป person gesturing OK: light skin tone +1F646 1F3FC ; fully-qualified # ๐Ÿ™†๐Ÿผ person gesturing OK: medium-light skin tone +1F646 1F3FD ; fully-qualified # ๐Ÿ™†๐Ÿฝ person gesturing OK: medium skin tone +1F646 1F3FE ; fully-qualified # ๐Ÿ™†๐Ÿพ person gesturing OK: medium-dark skin tone +1F646 1F3FF ; fully-qualified # ๐Ÿ™†๐Ÿฟ person gesturing OK: dark skin tone +1F646 200D 2642 FE0F ; fully-qualified # ๐Ÿ™†โ€โ™‚๏ธ man gesturing OK +1F646 200D 2642 ; non-fully-qualified # ๐Ÿ™†โ€โ™‚ man gesturing OK +1F646 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿ™†๐Ÿปโ€โ™‚๏ธ man gesturing OK: light skin tone +1F646 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿ™†๐Ÿปโ€โ™‚ man gesturing OK: light skin tone +1F646 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿ™†๐Ÿผโ€โ™‚๏ธ man gesturing OK: medium-light skin tone +1F646 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿ™†๐Ÿผโ€โ™‚ man gesturing OK: medium-light skin tone +1F646 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿ™†๐Ÿฝโ€โ™‚๏ธ man gesturing OK: medium skin tone +1F646 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿ™†๐Ÿฝโ€โ™‚ man gesturing OK: medium skin tone +1F646 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿ™†๐Ÿพโ€โ™‚๏ธ man gesturing OK: medium-dark skin tone +1F646 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿ™†๐Ÿพโ€โ™‚ man gesturing OK: medium-dark skin tone +1F646 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿ™†๐Ÿฟโ€โ™‚๏ธ man gesturing OK: dark skin tone +1F646 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿ™†๐Ÿฟโ€โ™‚ man gesturing OK: dark skin tone +1F646 200D 2640 FE0F ; fully-qualified # ๐Ÿ™†โ€โ™€๏ธ woman gesturing OK +1F646 200D 2640 ; non-fully-qualified # ๐Ÿ™†โ€โ™€ woman gesturing OK +1F646 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿ™†๐Ÿปโ€โ™€๏ธ woman gesturing OK: light skin tone +1F646 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿ™†๐Ÿปโ€โ™€ woman gesturing OK: light skin tone +1F646 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿ™†๐Ÿผโ€โ™€๏ธ woman gesturing OK: medium-light skin tone +1F646 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿ™†๐Ÿผโ€โ™€ woman gesturing OK: medium-light skin tone +1F646 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿ™†๐Ÿฝโ€โ™€๏ธ woman gesturing OK: medium skin tone +1F646 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿ™†๐Ÿฝโ€โ™€ woman gesturing OK: medium skin tone +1F646 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿ™†๐Ÿพโ€โ™€๏ธ woman gesturing OK: medium-dark skin tone +1F646 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿ™†๐Ÿพโ€โ™€ woman gesturing OK: medium-dark skin tone +1F646 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿ™†๐Ÿฟโ€โ™€๏ธ woman gesturing OK: dark skin tone +1F646 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿ™†๐Ÿฟโ€โ™€ woman gesturing OK: dark skin tone +1F481 ; fully-qualified # ๐Ÿ’ person tipping hand +1F481 1F3FB ; fully-qualified # ๐Ÿ’๐Ÿป person tipping hand: light skin tone +1F481 1F3FC ; fully-qualified # ๐Ÿ’๐Ÿผ person tipping hand: medium-light skin tone +1F481 1F3FD ; fully-qualified # ๐Ÿ’๐Ÿฝ person tipping hand: medium skin tone +1F481 1F3FE ; fully-qualified # ๐Ÿ’๐Ÿพ person tipping hand: medium-dark skin tone +1F481 1F3FF ; fully-qualified # ๐Ÿ’๐Ÿฟ person tipping hand: dark skin tone +1F481 200D 2642 FE0F ; fully-qualified # ๐Ÿ’โ€โ™‚๏ธ man tipping hand +1F481 200D 2642 ; non-fully-qualified # ๐Ÿ’โ€โ™‚ man tipping hand +1F481 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿ’๐Ÿปโ€โ™‚๏ธ man tipping hand: light skin tone +1F481 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿ’๐Ÿปโ€โ™‚ man tipping hand: light skin tone +1F481 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿ’๐Ÿผโ€โ™‚๏ธ man tipping hand: medium-light skin tone +1F481 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿ’๐Ÿผโ€โ™‚ man tipping hand: medium-light skin tone +1F481 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿ’๐Ÿฝโ€โ™‚๏ธ man tipping hand: medium skin tone +1F481 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿ’๐Ÿฝโ€โ™‚ man tipping hand: medium skin tone +1F481 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿ’๐Ÿพโ€โ™‚๏ธ man tipping hand: medium-dark skin tone +1F481 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿ’๐Ÿพโ€โ™‚ man tipping hand: medium-dark skin tone +1F481 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿ’๐Ÿฟโ€โ™‚๏ธ man tipping hand: dark skin tone +1F481 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿ’๐Ÿฟโ€โ™‚ man tipping hand: dark skin tone +1F481 200D 2640 FE0F ; fully-qualified # ๐Ÿ’โ€โ™€๏ธ woman tipping hand +1F481 200D 2640 ; non-fully-qualified # ๐Ÿ’โ€โ™€ woman tipping hand +1F481 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿ’๐Ÿปโ€โ™€๏ธ woman tipping hand: light skin tone +1F481 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿ’๐Ÿปโ€โ™€ woman tipping hand: light skin tone +1F481 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿ’๐Ÿผโ€โ™€๏ธ woman tipping hand: medium-light skin tone +1F481 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿ’๐Ÿผโ€โ™€ woman tipping hand: medium-light skin tone +1F481 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿ’๐Ÿฝโ€โ™€๏ธ woman tipping hand: medium skin tone +1F481 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿ’๐Ÿฝโ€โ™€ woman tipping hand: medium skin tone +1F481 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿ’๐Ÿพโ€โ™€๏ธ woman tipping hand: medium-dark skin tone +1F481 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿ’๐Ÿพโ€โ™€ woman tipping hand: medium-dark skin tone +1F481 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿ’๐Ÿฟโ€โ™€๏ธ woman tipping hand: dark skin tone +1F481 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿ’๐Ÿฟโ€โ™€ woman tipping hand: dark skin tone +1F64B ; fully-qualified # ๐Ÿ™‹ person raising hand +1F64B 1F3FB ; fully-qualified # ๐Ÿ™‹๐Ÿป person raising hand: light skin tone +1F64B 1F3FC ; fully-qualified # ๐Ÿ™‹๐Ÿผ person raising hand: medium-light skin tone +1F64B 1F3FD ; fully-qualified # ๐Ÿ™‹๐Ÿฝ person raising hand: medium skin tone +1F64B 1F3FE ; fully-qualified # ๐Ÿ™‹๐Ÿพ person raising hand: medium-dark skin tone +1F64B 1F3FF ; fully-qualified # ๐Ÿ™‹๐Ÿฟ person raising hand: dark skin tone +1F64B 200D 2642 FE0F ; fully-qualified # ๐Ÿ™‹โ€โ™‚๏ธ man raising hand +1F64B 200D 2642 ; non-fully-qualified # ๐Ÿ™‹โ€โ™‚ man raising hand +1F64B 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿ™‹๐Ÿปโ€โ™‚๏ธ man raising hand: light skin tone +1F64B 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿ™‹๐Ÿปโ€โ™‚ man raising hand: light skin tone +1F64B 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿ™‹๐Ÿผโ€โ™‚๏ธ man raising hand: medium-light skin tone +1F64B 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿ™‹๐Ÿผโ€โ™‚ man raising hand: medium-light skin tone +1F64B 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿ™‹๐Ÿฝโ€โ™‚๏ธ man raising hand: medium skin tone +1F64B 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿ™‹๐Ÿฝโ€โ™‚ man raising hand: medium skin tone +1F64B 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿ™‹๐Ÿพโ€โ™‚๏ธ man raising hand: medium-dark skin tone +1F64B 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿ™‹๐Ÿพโ€โ™‚ man raising hand: medium-dark skin tone +1F64B 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿ™‹๐Ÿฟโ€โ™‚๏ธ man raising hand: dark skin tone +1F64B 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿ™‹๐Ÿฟโ€โ™‚ man raising hand: dark skin tone +1F64B 200D 2640 FE0F ; fully-qualified # ๐Ÿ™‹โ€โ™€๏ธ woman raising hand +1F64B 200D 2640 ; non-fully-qualified # ๐Ÿ™‹โ€โ™€ woman raising hand +1F64B 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿ™‹๐Ÿปโ€โ™€๏ธ woman raising hand: light skin tone +1F64B 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿ™‹๐Ÿปโ€โ™€ woman raising hand: light skin tone +1F64B 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿ™‹๐Ÿผโ€โ™€๏ธ woman raising hand: medium-light skin tone +1F64B 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿ™‹๐Ÿผโ€โ™€ woman raising hand: medium-light skin tone +1F64B 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿ™‹๐Ÿฝโ€โ™€๏ธ woman raising hand: medium skin tone +1F64B 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿ™‹๐Ÿฝโ€โ™€ woman raising hand: medium skin tone +1F64B 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿ™‹๐Ÿพโ€โ™€๏ธ woman raising hand: medium-dark skin tone +1F64B 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿ™‹๐Ÿพโ€โ™€ woman raising hand: medium-dark skin tone +1F64B 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿ™‹๐Ÿฟโ€โ™€๏ธ woman raising hand: dark skin tone +1F64B 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿ™‹๐Ÿฟโ€โ™€ woman raising hand: dark skin tone +1F647 ; fully-qualified # ๐Ÿ™‡ person bowing +1F647 1F3FB ; fully-qualified # ๐Ÿ™‡๐Ÿป person bowing: light skin tone +1F647 1F3FC ; fully-qualified # ๐Ÿ™‡๐Ÿผ person bowing: medium-light skin tone +1F647 1F3FD ; fully-qualified # ๐Ÿ™‡๐Ÿฝ person bowing: medium skin tone +1F647 1F3FE ; fully-qualified # ๐Ÿ™‡๐Ÿพ person bowing: medium-dark skin tone +1F647 1F3FF ; fully-qualified # ๐Ÿ™‡๐Ÿฟ person bowing: dark skin tone +1F647 200D 2642 FE0F ; fully-qualified # ๐Ÿ™‡โ€โ™‚๏ธ man bowing +1F647 200D 2642 ; non-fully-qualified # ๐Ÿ™‡โ€โ™‚ man bowing +1F647 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿ™‡๐Ÿปโ€โ™‚๏ธ man bowing: light skin tone +1F647 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿ™‡๐Ÿปโ€โ™‚ man bowing: light skin tone +1F647 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿ™‡๐Ÿผโ€โ™‚๏ธ man bowing: medium-light skin tone +1F647 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿ™‡๐Ÿผโ€โ™‚ man bowing: medium-light skin tone +1F647 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿ™‡๐Ÿฝโ€โ™‚๏ธ man bowing: medium skin tone +1F647 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿ™‡๐Ÿฝโ€โ™‚ man bowing: medium skin tone +1F647 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿ™‡๐Ÿพโ€โ™‚๏ธ man bowing: medium-dark skin tone +1F647 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿ™‡๐Ÿพโ€โ™‚ man bowing: medium-dark skin tone +1F647 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿ™‡๐Ÿฟโ€โ™‚๏ธ man bowing: dark skin tone +1F647 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿ™‡๐Ÿฟโ€โ™‚ man bowing: dark skin tone +1F647 200D 2640 FE0F ; fully-qualified # ๐Ÿ™‡โ€โ™€๏ธ woman bowing +1F647 200D 2640 ; non-fully-qualified # ๐Ÿ™‡โ€โ™€ woman bowing +1F647 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿ™‡๐Ÿปโ€โ™€๏ธ woman bowing: light skin tone +1F647 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿ™‡๐Ÿปโ€โ™€ woman bowing: light skin tone +1F647 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿ™‡๐Ÿผโ€โ™€๏ธ woman bowing: medium-light skin tone +1F647 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿ™‡๐Ÿผโ€โ™€ woman bowing: medium-light skin tone +1F647 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿ™‡๐Ÿฝโ€โ™€๏ธ woman bowing: medium skin tone +1F647 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿ™‡๐Ÿฝโ€โ™€ woman bowing: medium skin tone +1F647 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿ™‡๐Ÿพโ€โ™€๏ธ woman bowing: medium-dark skin tone +1F647 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿ™‡๐Ÿพโ€โ™€ woman bowing: medium-dark skin tone +1F647 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿ™‡๐Ÿฟโ€โ™€๏ธ woman bowing: dark skin tone +1F647 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿ™‡๐Ÿฟโ€โ™€ woman bowing: dark skin tone +1F926 ; fully-qualified # ๐Ÿคฆ person facepalming +1F926 1F3FB ; fully-qualified # ๐Ÿคฆ๐Ÿป person facepalming: light skin tone +1F926 1F3FC ; fully-qualified # ๐Ÿคฆ๐Ÿผ person facepalming: medium-light skin tone +1F926 1F3FD ; fully-qualified # ๐Ÿคฆ๐Ÿฝ person facepalming: medium skin tone +1F926 1F3FE ; fully-qualified # ๐Ÿคฆ๐Ÿพ person facepalming: medium-dark skin tone +1F926 1F3FF ; fully-qualified # ๐Ÿคฆ๐Ÿฟ person facepalming: dark skin tone +1F926 200D 2642 FE0F ; fully-qualified # ๐Ÿคฆโ€โ™‚๏ธ man facepalming +1F926 200D 2642 ; non-fully-qualified # ๐Ÿคฆโ€โ™‚ man facepalming +1F926 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿคฆ๐Ÿปโ€โ™‚๏ธ man facepalming: light skin tone +1F926 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿคฆ๐Ÿปโ€โ™‚ man facepalming: light skin tone +1F926 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿคฆ๐Ÿผโ€โ™‚๏ธ man facepalming: medium-light skin tone +1F926 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿคฆ๐Ÿผโ€โ™‚ man facepalming: medium-light skin tone +1F926 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿคฆ๐Ÿฝโ€โ™‚๏ธ man facepalming: medium skin tone +1F926 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿคฆ๐Ÿฝโ€โ™‚ man facepalming: medium skin tone +1F926 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿคฆ๐Ÿพโ€โ™‚๏ธ man facepalming: medium-dark skin tone +1F926 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿคฆ๐Ÿพโ€โ™‚ man facepalming: medium-dark skin tone +1F926 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿคฆ๐Ÿฟโ€โ™‚๏ธ man facepalming: dark skin tone +1F926 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿคฆ๐Ÿฟโ€โ™‚ man facepalming: dark skin tone +1F926 200D 2640 FE0F ; fully-qualified # ๐Ÿคฆโ€โ™€๏ธ woman facepalming +1F926 200D 2640 ; non-fully-qualified # ๐Ÿคฆโ€โ™€ woman facepalming +1F926 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿคฆ๐Ÿปโ€โ™€๏ธ woman facepalming: light skin tone +1F926 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿคฆ๐Ÿปโ€โ™€ woman facepalming: light skin tone +1F926 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿคฆ๐Ÿผโ€โ™€๏ธ woman facepalming: medium-light skin tone +1F926 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿคฆ๐Ÿผโ€โ™€ woman facepalming: medium-light skin tone +1F926 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿคฆ๐Ÿฝโ€โ™€๏ธ woman facepalming: medium skin tone +1F926 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿคฆ๐Ÿฝโ€โ™€ woman facepalming: medium skin tone +1F926 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿคฆ๐Ÿพโ€โ™€๏ธ woman facepalming: medium-dark skin tone +1F926 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿคฆ๐Ÿพโ€โ™€ woman facepalming: medium-dark skin tone +1F926 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿคฆ๐Ÿฟโ€โ™€๏ธ woman facepalming: dark skin tone +1F926 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿคฆ๐Ÿฟโ€โ™€ woman facepalming: dark skin tone +1F937 ; fully-qualified # ๐Ÿคท person shrugging +1F937 1F3FB ; fully-qualified # ๐Ÿคท๐Ÿป person shrugging: light skin tone +1F937 1F3FC ; fully-qualified # ๐Ÿคท๐Ÿผ person shrugging: medium-light skin tone +1F937 1F3FD ; fully-qualified # ๐Ÿคท๐Ÿฝ person shrugging: medium skin tone +1F937 1F3FE ; fully-qualified # ๐Ÿคท๐Ÿพ person shrugging: medium-dark skin tone +1F937 1F3FF ; fully-qualified # ๐Ÿคท๐Ÿฟ person shrugging: dark skin tone +1F937 200D 2642 FE0F ; fully-qualified # ๐Ÿคทโ€โ™‚๏ธ man shrugging +1F937 200D 2642 ; non-fully-qualified # ๐Ÿคทโ€โ™‚ man shrugging +1F937 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿคท๐Ÿปโ€โ™‚๏ธ man shrugging: light skin tone +1F937 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿคท๐Ÿปโ€โ™‚ man shrugging: light skin tone +1F937 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿคท๐Ÿผโ€โ™‚๏ธ man shrugging: medium-light skin tone +1F937 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿคท๐Ÿผโ€โ™‚ man shrugging: medium-light skin tone +1F937 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿคท๐Ÿฝโ€โ™‚๏ธ man shrugging: medium skin tone +1F937 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿคท๐Ÿฝโ€โ™‚ man shrugging: medium skin tone +1F937 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿคท๐Ÿพโ€โ™‚๏ธ man shrugging: medium-dark skin tone +1F937 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿคท๐Ÿพโ€โ™‚ man shrugging: medium-dark skin tone +1F937 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿคท๐Ÿฟโ€โ™‚๏ธ man shrugging: dark skin tone +1F937 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿคท๐Ÿฟโ€โ™‚ man shrugging: dark skin tone +1F937 200D 2640 FE0F ; fully-qualified # ๐Ÿคทโ€โ™€๏ธ woman shrugging +1F937 200D 2640 ; non-fully-qualified # ๐Ÿคทโ€โ™€ woman shrugging +1F937 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿคท๐Ÿปโ€โ™€๏ธ woman shrugging: light skin tone +1F937 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿคท๐Ÿปโ€โ™€ woman shrugging: light skin tone +1F937 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿคท๐Ÿผโ€โ™€๏ธ woman shrugging: medium-light skin tone +1F937 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿคท๐Ÿผโ€โ™€ woman shrugging: medium-light skin tone +1F937 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿคท๐Ÿฝโ€โ™€๏ธ woman shrugging: medium skin tone +1F937 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿคท๐Ÿฝโ€โ™€ woman shrugging: medium skin tone +1F937 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿคท๐Ÿพโ€โ™€๏ธ woman shrugging: medium-dark skin tone +1F937 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿคท๐Ÿพโ€โ™€ woman shrugging: medium-dark skin tone +1F937 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿคท๐Ÿฟโ€โ™€๏ธ woman shrugging: dark skin tone +1F937 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿคท๐Ÿฟโ€โ™€ woman shrugging: dark skin tone + +# subgroup: person-activity +1F486 ; fully-qualified # ๐Ÿ’† person getting massage +1F486 1F3FB ; fully-qualified # ๐Ÿ’†๐Ÿป person getting massage: light skin tone +1F486 1F3FC ; fully-qualified # ๐Ÿ’†๐Ÿผ person getting massage: medium-light skin tone +1F486 1F3FD ; fully-qualified # ๐Ÿ’†๐Ÿฝ person getting massage: medium skin tone +1F486 1F3FE ; fully-qualified # ๐Ÿ’†๐Ÿพ person getting massage: medium-dark skin tone +1F486 1F3FF ; fully-qualified # ๐Ÿ’†๐Ÿฟ person getting massage: dark skin tone +1F486 200D 2642 FE0F ; fully-qualified # ๐Ÿ’†โ€โ™‚๏ธ man getting massage +1F486 200D 2642 ; non-fully-qualified # ๐Ÿ’†โ€โ™‚ man getting massage +1F486 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿ’†๐Ÿปโ€โ™‚๏ธ man getting massage: light skin tone +1F486 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿ’†๐Ÿปโ€โ™‚ man getting massage: light skin tone +1F486 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿ’†๐Ÿผโ€โ™‚๏ธ man getting massage: medium-light skin tone +1F486 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿ’†๐Ÿผโ€โ™‚ man getting massage: medium-light skin tone +1F486 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿ’†๐Ÿฝโ€โ™‚๏ธ man getting massage: medium skin tone +1F486 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿ’†๐Ÿฝโ€โ™‚ man getting massage: medium skin tone +1F486 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿ’†๐Ÿพโ€โ™‚๏ธ man getting massage: medium-dark skin tone +1F486 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿ’†๐Ÿพโ€โ™‚ man getting massage: medium-dark skin tone +1F486 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿ’†๐Ÿฟโ€โ™‚๏ธ man getting massage: dark skin tone +1F486 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿ’†๐Ÿฟโ€โ™‚ man getting massage: dark skin tone +1F486 200D 2640 FE0F ; fully-qualified # ๐Ÿ’†โ€โ™€๏ธ woman getting massage +1F486 200D 2640 ; non-fully-qualified # ๐Ÿ’†โ€โ™€ woman getting massage +1F486 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿ’†๐Ÿปโ€โ™€๏ธ woman getting massage: light skin tone +1F486 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿ’†๐Ÿปโ€โ™€ woman getting massage: light skin tone +1F486 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿ’†๐Ÿผโ€โ™€๏ธ woman getting massage: medium-light skin tone +1F486 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿ’†๐Ÿผโ€โ™€ woman getting massage: medium-light skin tone +1F486 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿ’†๐Ÿฝโ€โ™€๏ธ woman getting massage: medium skin tone +1F486 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿ’†๐Ÿฝโ€โ™€ woman getting massage: medium skin tone +1F486 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿ’†๐Ÿพโ€โ™€๏ธ woman getting massage: medium-dark skin tone +1F486 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿ’†๐Ÿพโ€โ™€ woman getting massage: medium-dark skin tone +1F486 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿ’†๐Ÿฟโ€โ™€๏ธ woman getting massage: dark skin tone +1F486 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿ’†๐Ÿฟโ€โ™€ woman getting massage: dark skin tone +1F487 ; fully-qualified # ๐Ÿ’‡ person getting haircut +1F487 1F3FB ; fully-qualified # ๐Ÿ’‡๐Ÿป person getting haircut: light skin tone +1F487 1F3FC ; fully-qualified # ๐Ÿ’‡๐Ÿผ person getting haircut: medium-light skin tone +1F487 1F3FD ; fully-qualified # ๐Ÿ’‡๐Ÿฝ person getting haircut: medium skin tone +1F487 1F3FE ; fully-qualified # ๐Ÿ’‡๐Ÿพ person getting haircut: medium-dark skin tone +1F487 1F3FF ; fully-qualified # ๐Ÿ’‡๐Ÿฟ person getting haircut: dark skin tone +1F487 200D 2642 FE0F ; fully-qualified # ๐Ÿ’‡โ€โ™‚๏ธ man getting haircut +1F487 200D 2642 ; non-fully-qualified # ๐Ÿ’‡โ€โ™‚ man getting haircut +1F487 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿ’‡๐Ÿปโ€โ™‚๏ธ man getting haircut: light skin tone +1F487 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿ’‡๐Ÿปโ€โ™‚ man getting haircut: light skin tone +1F487 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿ’‡๐Ÿผโ€โ™‚๏ธ man getting haircut: medium-light skin tone +1F487 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿ’‡๐Ÿผโ€โ™‚ man getting haircut: medium-light skin tone +1F487 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿ’‡๐Ÿฝโ€โ™‚๏ธ man getting haircut: medium skin tone +1F487 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿ’‡๐Ÿฝโ€โ™‚ man getting haircut: medium skin tone +1F487 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿ’‡๐Ÿพโ€โ™‚๏ธ man getting haircut: medium-dark skin tone +1F487 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿ’‡๐Ÿพโ€โ™‚ man getting haircut: medium-dark skin tone +1F487 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿ’‡๐Ÿฟโ€โ™‚๏ธ man getting haircut: dark skin tone +1F487 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿ’‡๐Ÿฟโ€โ™‚ man getting haircut: dark skin tone +1F487 200D 2640 FE0F ; fully-qualified # ๐Ÿ’‡โ€โ™€๏ธ woman getting haircut +1F487 200D 2640 ; non-fully-qualified # ๐Ÿ’‡โ€โ™€ woman getting haircut +1F487 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿ’‡๐Ÿปโ€โ™€๏ธ woman getting haircut: light skin tone +1F487 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿ’‡๐Ÿปโ€โ™€ woman getting haircut: light skin tone +1F487 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿ’‡๐Ÿผโ€โ™€๏ธ woman getting haircut: medium-light skin tone +1F487 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿ’‡๐Ÿผโ€โ™€ woman getting haircut: medium-light skin tone +1F487 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿ’‡๐Ÿฝโ€โ™€๏ธ woman getting haircut: medium skin tone +1F487 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿ’‡๐Ÿฝโ€โ™€ woman getting haircut: medium skin tone +1F487 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿ’‡๐Ÿพโ€โ™€๏ธ woman getting haircut: medium-dark skin tone +1F487 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿ’‡๐Ÿพโ€โ™€ woman getting haircut: medium-dark skin tone +1F487 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿ’‡๐Ÿฟโ€โ™€๏ธ woman getting haircut: dark skin tone +1F487 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿ’‡๐Ÿฟโ€โ™€ woman getting haircut: dark skin tone +1F6B6 ; fully-qualified # ๐Ÿšถ person walking +1F6B6 1F3FB ; fully-qualified # ๐Ÿšถ๐Ÿป person walking: light skin tone +1F6B6 1F3FC ; fully-qualified # ๐Ÿšถ๐Ÿผ person walking: medium-light skin tone +1F6B6 1F3FD ; fully-qualified # ๐Ÿšถ๐Ÿฝ person walking: medium skin tone +1F6B6 1F3FE ; fully-qualified # ๐Ÿšถ๐Ÿพ person walking: medium-dark skin tone +1F6B6 1F3FF ; fully-qualified # ๐Ÿšถ๐Ÿฟ person walking: dark skin tone +1F6B6 200D 2642 FE0F ; fully-qualified # ๐Ÿšถโ€โ™‚๏ธ man walking +1F6B6 200D 2642 ; non-fully-qualified # ๐Ÿšถโ€โ™‚ man walking +1F6B6 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿšถ๐Ÿปโ€โ™‚๏ธ man walking: light skin tone +1F6B6 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿšถ๐Ÿปโ€โ™‚ man walking: light skin tone +1F6B6 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿšถ๐Ÿผโ€โ™‚๏ธ man walking: medium-light skin tone +1F6B6 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿšถ๐Ÿผโ€โ™‚ man walking: medium-light skin tone +1F6B6 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿšถ๐Ÿฝโ€โ™‚๏ธ man walking: medium skin tone +1F6B6 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿšถ๐Ÿฝโ€โ™‚ man walking: medium skin tone +1F6B6 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿšถ๐Ÿพโ€โ™‚๏ธ man walking: medium-dark skin tone +1F6B6 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿšถ๐Ÿพโ€โ™‚ man walking: medium-dark skin tone +1F6B6 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿšถ๐Ÿฟโ€โ™‚๏ธ man walking: dark skin tone +1F6B6 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿšถ๐Ÿฟโ€โ™‚ man walking: dark skin tone +1F6B6 200D 2640 FE0F ; fully-qualified # ๐Ÿšถโ€โ™€๏ธ woman walking +1F6B6 200D 2640 ; non-fully-qualified # ๐Ÿšถโ€โ™€ woman walking +1F6B6 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿšถ๐Ÿปโ€โ™€๏ธ woman walking: light skin tone +1F6B6 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿšถ๐Ÿปโ€โ™€ woman walking: light skin tone +1F6B6 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿšถ๐Ÿผโ€โ™€๏ธ woman walking: medium-light skin tone +1F6B6 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿšถ๐Ÿผโ€โ™€ woman walking: medium-light skin tone +1F6B6 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿšถ๐Ÿฝโ€โ™€๏ธ woman walking: medium skin tone +1F6B6 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿšถ๐Ÿฝโ€โ™€ woman walking: medium skin tone +1F6B6 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿšถ๐Ÿพโ€โ™€๏ธ woman walking: medium-dark skin tone +1F6B6 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿšถ๐Ÿพโ€โ™€ woman walking: medium-dark skin tone +1F6B6 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿšถ๐Ÿฟโ€โ™€๏ธ woman walking: dark skin tone +1F6B6 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿšถ๐Ÿฟโ€โ™€ woman walking: dark skin tone +1F3C3 ; fully-qualified # ๐Ÿƒ person running +1F3C3 1F3FB ; fully-qualified # ๐Ÿƒ๐Ÿป person running: light skin tone +1F3C3 1F3FC ; fully-qualified # ๐Ÿƒ๐Ÿผ person running: medium-light skin tone +1F3C3 1F3FD ; fully-qualified # ๐Ÿƒ๐Ÿฝ person running: medium skin tone +1F3C3 1F3FE ; fully-qualified # ๐Ÿƒ๐Ÿพ person running: medium-dark skin tone +1F3C3 1F3FF ; fully-qualified # ๐Ÿƒ๐Ÿฟ person running: dark skin tone +1F3C3 200D 2642 FE0F ; fully-qualified # ๐Ÿƒโ€โ™‚๏ธ man running +1F3C3 200D 2642 ; non-fully-qualified # ๐Ÿƒโ€โ™‚ man running +1F3C3 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿƒ๐Ÿปโ€โ™‚๏ธ man running: light skin tone +1F3C3 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿƒ๐Ÿปโ€โ™‚ man running: light skin tone +1F3C3 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿƒ๐Ÿผโ€โ™‚๏ธ man running: medium-light skin tone +1F3C3 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿƒ๐Ÿผโ€โ™‚ man running: medium-light skin tone +1F3C3 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿƒ๐Ÿฝโ€โ™‚๏ธ man running: medium skin tone +1F3C3 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿƒ๐Ÿฝโ€โ™‚ man running: medium skin tone +1F3C3 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿƒ๐Ÿพโ€โ™‚๏ธ man running: medium-dark skin tone +1F3C3 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿƒ๐Ÿพโ€โ™‚ man running: medium-dark skin tone +1F3C3 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿƒ๐Ÿฟโ€โ™‚๏ธ man running: dark skin tone +1F3C3 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿƒ๐Ÿฟโ€โ™‚ man running: dark skin tone +1F3C3 200D 2640 FE0F ; fully-qualified # ๐Ÿƒโ€โ™€๏ธ woman running +1F3C3 200D 2640 ; non-fully-qualified # ๐Ÿƒโ€โ™€ woman running +1F3C3 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿƒ๐Ÿปโ€โ™€๏ธ woman running: light skin tone +1F3C3 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿƒ๐Ÿปโ€โ™€ woman running: light skin tone +1F3C3 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿƒ๐Ÿผโ€โ™€๏ธ woman running: medium-light skin tone +1F3C3 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿƒ๐Ÿผโ€โ™€ woman running: medium-light skin tone +1F3C3 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿƒ๐Ÿฝโ€โ™€๏ธ woman running: medium skin tone +1F3C3 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿƒ๐Ÿฝโ€โ™€ woman running: medium skin tone +1F3C3 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿƒ๐Ÿพโ€โ™€๏ธ woman running: medium-dark skin tone +1F3C3 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿƒ๐Ÿพโ€โ™€ woman running: medium-dark skin tone +1F3C3 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿƒ๐Ÿฟโ€โ™€๏ธ woman running: dark skin tone +1F3C3 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿƒ๐Ÿฟโ€โ™€ woman running: dark skin tone +1F483 ; fully-qualified # ๐Ÿ’ƒ woman dancing +1F483 1F3FB ; fully-qualified # ๐Ÿ’ƒ๐Ÿป woman dancing: light skin tone +1F483 1F3FC ; fully-qualified # ๐Ÿ’ƒ๐Ÿผ woman dancing: medium-light skin tone +1F483 1F3FD ; fully-qualified # ๐Ÿ’ƒ๐Ÿฝ woman dancing: medium skin tone +1F483 1F3FE ; fully-qualified # ๐Ÿ’ƒ๐Ÿพ woman dancing: medium-dark skin tone +1F483 1F3FF ; fully-qualified # ๐Ÿ’ƒ๐Ÿฟ woman dancing: dark skin tone +1F57A ; fully-qualified # ๐Ÿ•บ man dancing +1F57A 1F3FB ; fully-qualified # ๐Ÿ•บ๐Ÿป man dancing: light skin tone +1F57A 1F3FC ; fully-qualified # ๐Ÿ•บ๐Ÿผ man dancing: medium-light skin tone +1F57A 1F3FD ; fully-qualified # ๐Ÿ•บ๐Ÿฝ man dancing: medium skin tone +1F57A 1F3FE ; fully-qualified # ๐Ÿ•บ๐Ÿพ man dancing: medium-dark skin tone +1F57A 1F3FF ; fully-qualified # ๐Ÿ•บ๐Ÿฟ man dancing: dark skin tone +1F46F ; fully-qualified # ๐Ÿ‘ฏ people with bunny ears +1F46F 200D 2642 FE0F ; fully-qualified # ๐Ÿ‘ฏโ€โ™‚๏ธ men with bunny ears +1F46F 200D 2642 ; non-fully-qualified # ๐Ÿ‘ฏโ€โ™‚ men with bunny ears +1F46F 200D 2640 FE0F ; fully-qualified # ๐Ÿ‘ฏโ€โ™€๏ธ women with bunny ears +1F46F 200D 2640 ; non-fully-qualified # ๐Ÿ‘ฏโ€โ™€ women with bunny ears +1F9D6 ; fully-qualified # ๐Ÿง– person in steamy room +1F9D6 1F3FB ; fully-qualified # ๐Ÿง–๐Ÿป person in steamy room: light skin tone +1F9D6 1F3FC ; fully-qualified # ๐Ÿง–๐Ÿผ person in steamy room: medium-light skin tone +1F9D6 1F3FD ; fully-qualified # ๐Ÿง–๐Ÿฝ person in steamy room: medium skin tone +1F9D6 1F3FE ; fully-qualified # ๐Ÿง–๐Ÿพ person in steamy room: medium-dark skin tone +1F9D6 1F3FF ; fully-qualified # ๐Ÿง–๐Ÿฟ person in steamy room: dark skin tone +1F9D6 200D 2640 FE0F ; fully-qualified # ๐Ÿง–โ€โ™€๏ธ woman in steamy room +1F9D6 200D 2640 ; non-fully-qualified # ๐Ÿง–โ€โ™€ woman in steamy room +1F9D6 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿง–๐Ÿปโ€โ™€๏ธ woman in steamy room: light skin tone +1F9D6 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿง–๐Ÿปโ€โ™€ woman in steamy room: light skin tone +1F9D6 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿง–๐Ÿผโ€โ™€๏ธ woman in steamy room: medium-light skin tone +1F9D6 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿง–๐Ÿผโ€โ™€ woman in steamy room: medium-light skin tone +1F9D6 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿง–๐Ÿฝโ€โ™€๏ธ woman in steamy room: medium skin tone +1F9D6 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿง–๐Ÿฝโ€โ™€ woman in steamy room: medium skin tone +1F9D6 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿง–๐Ÿพโ€โ™€๏ธ woman in steamy room: medium-dark skin tone +1F9D6 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿง–๐Ÿพโ€โ™€ woman in steamy room: medium-dark skin tone +1F9D6 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿง–๐Ÿฟโ€โ™€๏ธ woman in steamy room: dark skin tone +1F9D6 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿง–๐Ÿฟโ€โ™€ woman in steamy room: dark skin tone +1F9D6 200D 2642 FE0F ; fully-qualified # ๐Ÿง–โ€โ™‚๏ธ man in steamy room +1F9D6 200D 2642 ; non-fully-qualified # ๐Ÿง–โ€โ™‚ man in steamy room +1F9D6 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿง–๐Ÿปโ€โ™‚๏ธ man in steamy room: light skin tone +1F9D6 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿง–๐Ÿปโ€โ™‚ man in steamy room: light skin tone +1F9D6 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿง–๐Ÿผโ€โ™‚๏ธ man in steamy room: medium-light skin tone +1F9D6 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿง–๐Ÿผโ€โ™‚ man in steamy room: medium-light skin tone +1F9D6 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿง–๐Ÿฝโ€โ™‚๏ธ man in steamy room: medium skin tone +1F9D6 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿง–๐Ÿฝโ€โ™‚ man in steamy room: medium skin tone +1F9D6 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿง–๐Ÿพโ€โ™‚๏ธ man in steamy room: medium-dark skin tone +1F9D6 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿง–๐Ÿพโ€โ™‚ man in steamy room: medium-dark skin tone +1F9D6 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿง–๐Ÿฟโ€โ™‚๏ธ man in steamy room: dark skin tone +1F9D6 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿง–๐Ÿฟโ€โ™‚ man in steamy room: dark skin tone +1F9D7 ; fully-qualified # ๐Ÿง— person climbing +1F9D7 1F3FB ; fully-qualified # ๐Ÿง—๐Ÿป person climbing: light skin tone +1F9D7 1F3FC ; fully-qualified # ๐Ÿง—๐Ÿผ person climbing: medium-light skin tone +1F9D7 1F3FD ; fully-qualified # ๐Ÿง—๐Ÿฝ person climbing: medium skin tone +1F9D7 1F3FE ; fully-qualified # ๐Ÿง—๐Ÿพ person climbing: medium-dark skin tone +1F9D7 1F3FF ; fully-qualified # ๐Ÿง—๐Ÿฟ person climbing: dark skin tone +1F9D7 200D 2640 FE0F ; fully-qualified # ๐Ÿง—โ€โ™€๏ธ woman climbing +1F9D7 200D 2640 ; non-fully-qualified # ๐Ÿง—โ€โ™€ woman climbing +1F9D7 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿง—๐Ÿปโ€โ™€๏ธ woman climbing: light skin tone +1F9D7 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿง—๐Ÿปโ€โ™€ woman climbing: light skin tone +1F9D7 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿง—๐Ÿผโ€โ™€๏ธ woman climbing: medium-light skin tone +1F9D7 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿง—๐Ÿผโ€โ™€ woman climbing: medium-light skin tone +1F9D7 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿง—๐Ÿฝโ€โ™€๏ธ woman climbing: medium skin tone +1F9D7 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿง—๐Ÿฝโ€โ™€ woman climbing: medium skin tone +1F9D7 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿง—๐Ÿพโ€โ™€๏ธ woman climbing: medium-dark skin tone +1F9D7 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿง—๐Ÿพโ€โ™€ woman climbing: medium-dark skin tone +1F9D7 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿง—๐Ÿฟโ€โ™€๏ธ woman climbing: dark skin tone +1F9D7 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿง—๐Ÿฟโ€โ™€ woman climbing: dark skin tone +1F9D7 200D 2642 FE0F ; fully-qualified # ๐Ÿง—โ€โ™‚๏ธ man climbing +1F9D7 200D 2642 ; non-fully-qualified # ๐Ÿง—โ€โ™‚ man climbing +1F9D7 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿง—๐Ÿปโ€โ™‚๏ธ man climbing: light skin tone +1F9D7 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿง—๐Ÿปโ€โ™‚ man climbing: light skin tone +1F9D7 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿง—๐Ÿผโ€โ™‚๏ธ man climbing: medium-light skin tone +1F9D7 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿง—๐Ÿผโ€โ™‚ man climbing: medium-light skin tone +1F9D7 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿง—๐Ÿฝโ€โ™‚๏ธ man climbing: medium skin tone +1F9D7 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿง—๐Ÿฝโ€โ™‚ man climbing: medium skin tone +1F9D7 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿง—๐Ÿพโ€โ™‚๏ธ man climbing: medium-dark skin tone +1F9D7 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿง—๐Ÿพโ€โ™‚ man climbing: medium-dark skin tone +1F9D7 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿง—๐Ÿฟโ€โ™‚๏ธ man climbing: dark skin tone +1F9D7 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿง—๐Ÿฟโ€โ™‚ man climbing: dark skin tone +1F9D8 ; fully-qualified # ๐Ÿง˜ person in lotus position +1F9D8 1F3FB ; fully-qualified # ๐Ÿง˜๐Ÿป person in lotus position: light skin tone +1F9D8 1F3FC ; fully-qualified # ๐Ÿง˜๐Ÿผ person in lotus position: medium-light skin tone +1F9D8 1F3FD ; fully-qualified # ๐Ÿง˜๐Ÿฝ person in lotus position: medium skin tone +1F9D8 1F3FE ; fully-qualified # ๐Ÿง˜๐Ÿพ person in lotus position: medium-dark skin tone +1F9D8 1F3FF ; fully-qualified # ๐Ÿง˜๐Ÿฟ person in lotus position: dark skin tone +1F9D8 200D 2640 FE0F ; fully-qualified # ๐Ÿง˜โ€โ™€๏ธ woman in lotus position +1F9D8 200D 2640 ; non-fully-qualified # ๐Ÿง˜โ€โ™€ woman in lotus position +1F9D8 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿง˜๐Ÿปโ€โ™€๏ธ woman in lotus position: light skin tone +1F9D8 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿง˜๐Ÿปโ€โ™€ woman in lotus position: light skin tone +1F9D8 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿง˜๐Ÿผโ€โ™€๏ธ woman in lotus position: medium-light skin tone +1F9D8 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿง˜๐Ÿผโ€โ™€ woman in lotus position: medium-light skin tone +1F9D8 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿง˜๐Ÿฝโ€โ™€๏ธ woman in lotus position: medium skin tone +1F9D8 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿง˜๐Ÿฝโ€โ™€ woman in lotus position: medium skin tone +1F9D8 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿง˜๐Ÿพโ€โ™€๏ธ woman in lotus position: medium-dark skin tone +1F9D8 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿง˜๐Ÿพโ€โ™€ woman in lotus position: medium-dark skin tone +1F9D8 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿง˜๐Ÿฟโ€โ™€๏ธ woman in lotus position: dark skin tone +1F9D8 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿง˜๐Ÿฟโ€โ™€ woman in lotus position: dark skin tone +1F9D8 200D 2642 FE0F ; fully-qualified # ๐Ÿง˜โ€โ™‚๏ธ man in lotus position +1F9D8 200D 2642 ; non-fully-qualified # ๐Ÿง˜โ€โ™‚ man in lotus position +1F9D8 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿง˜๐Ÿปโ€โ™‚๏ธ man in lotus position: light skin tone +1F9D8 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿง˜๐Ÿปโ€โ™‚ man in lotus position: light skin tone +1F9D8 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿง˜๐Ÿผโ€โ™‚๏ธ man in lotus position: medium-light skin tone +1F9D8 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿง˜๐Ÿผโ€โ™‚ man in lotus position: medium-light skin tone +1F9D8 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿง˜๐Ÿฝโ€โ™‚๏ธ man in lotus position: medium skin tone +1F9D8 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿง˜๐Ÿฝโ€โ™‚ man in lotus position: medium skin tone +1F9D8 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿง˜๐Ÿพโ€โ™‚๏ธ man in lotus position: medium-dark skin tone +1F9D8 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿง˜๐Ÿพโ€โ™‚ man in lotus position: medium-dark skin tone +1F9D8 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿง˜๐Ÿฟโ€โ™‚๏ธ man in lotus position: dark skin tone +1F9D8 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿง˜๐Ÿฟโ€โ™‚ man in lotus position: dark skin tone +1F6C0 ; fully-qualified # ๐Ÿ›€ person taking bath +1F6C0 1F3FB ; fully-qualified # ๐Ÿ›€๐Ÿป person taking bath: light skin tone +1F6C0 1F3FC ; fully-qualified # ๐Ÿ›€๐Ÿผ person taking bath: medium-light skin tone +1F6C0 1F3FD ; fully-qualified # ๐Ÿ›€๐Ÿฝ person taking bath: medium skin tone +1F6C0 1F3FE ; fully-qualified # ๐Ÿ›€๐Ÿพ person taking bath: medium-dark skin tone +1F6C0 1F3FF ; fully-qualified # ๐Ÿ›€๐Ÿฟ person taking bath: dark skin tone +1F6CC ; fully-qualified # ๐Ÿ›Œ person in bed +1F6CC 1F3FB ; fully-qualified # ๐Ÿ›Œ๐Ÿป person in bed: light skin tone +1F6CC 1F3FC ; fully-qualified # ๐Ÿ›Œ๐Ÿผ person in bed: medium-light skin tone +1F6CC 1F3FD ; fully-qualified # ๐Ÿ›Œ๐Ÿฝ person in bed: medium skin tone +1F6CC 1F3FE ; fully-qualified # ๐Ÿ›Œ๐Ÿพ person in bed: medium-dark skin tone +1F6CC 1F3FF ; fully-qualified # ๐Ÿ›Œ๐Ÿฟ person in bed: dark skin tone +1F574 FE0F ; fully-qualified # ๐Ÿ•ด๏ธ man in suit levitating +1F574 ; non-fully-qualified # ๐Ÿ•ด man in suit levitating +1F574 1F3FB ; fully-qualified # ๐Ÿ•ด๐Ÿป man in suit levitating: light skin tone +1F574 1F3FC ; fully-qualified # ๐Ÿ•ด๐Ÿผ man in suit levitating: medium-light skin tone +1F574 1F3FD ; fully-qualified # ๐Ÿ•ด๐Ÿฝ man in suit levitating: medium skin tone +1F574 1F3FE ; fully-qualified # ๐Ÿ•ด๐Ÿพ man in suit levitating: medium-dark skin tone +1F574 1F3FF ; fully-qualified # ๐Ÿ•ด๐Ÿฟ man in suit levitating: dark skin tone +1F5E3 FE0F ; fully-qualified # ๐Ÿ—ฃ๏ธ speaking head +1F5E3 ; non-fully-qualified # ๐Ÿ—ฃ speaking head +1F464 ; fully-qualified # ๐Ÿ‘ค bust in silhouette +1F465 ; fully-qualified # ๐Ÿ‘ฅ busts in silhouette + +# subgroup: person-sport +1F93A ; fully-qualified # ๐Ÿคบ person fencing +1F3C7 ; fully-qualified # ๐Ÿ‡ horse racing +1F3C7 1F3FB ; fully-qualified # ๐Ÿ‡๐Ÿป horse racing: light skin tone +1F3C7 1F3FC ; fully-qualified # ๐Ÿ‡๐Ÿผ horse racing: medium-light skin tone +1F3C7 1F3FD ; fully-qualified # ๐Ÿ‡๐Ÿฝ horse racing: medium skin tone +1F3C7 1F3FE ; fully-qualified # ๐Ÿ‡๐Ÿพ horse racing: medium-dark skin tone +1F3C7 1F3FF ; fully-qualified # ๐Ÿ‡๐Ÿฟ horse racing: dark skin tone +26F7 FE0F ; fully-qualified # โ›ท๏ธ skier +26F7 ; non-fully-qualified # โ›ท skier +1F3C2 ; fully-qualified # ๐Ÿ‚ snowboarder +1F3C2 1F3FB ; fully-qualified # ๐Ÿ‚๐Ÿป snowboarder: light skin tone +1F3C2 1F3FC ; fully-qualified # ๐Ÿ‚๐Ÿผ snowboarder: medium-light skin tone +1F3C2 1F3FD ; fully-qualified # ๐Ÿ‚๐Ÿฝ snowboarder: medium skin tone +1F3C2 1F3FE ; fully-qualified # ๐Ÿ‚๐Ÿพ snowboarder: medium-dark skin tone +1F3C2 1F3FF ; fully-qualified # ๐Ÿ‚๐Ÿฟ snowboarder: dark skin tone +1F3CC FE0F ; fully-qualified # ๐ŸŒ๏ธ person golfing +1F3CC ; non-fully-qualified # ๐ŸŒ person golfing +1F3CC 1F3FB ; fully-qualified # ๐ŸŒ๐Ÿป person golfing: light skin tone +1F3CC 1F3FC ; fully-qualified # ๐ŸŒ๐Ÿผ person golfing: medium-light skin tone +1F3CC 1F3FD ; fully-qualified # ๐ŸŒ๐Ÿฝ person golfing: medium skin tone +1F3CC 1F3FE ; fully-qualified # ๐ŸŒ๐Ÿพ person golfing: medium-dark skin tone +1F3CC 1F3FF ; fully-qualified # ๐ŸŒ๐Ÿฟ person golfing: dark skin tone +1F3CC FE0F 200D 2642 FE0F ; fully-qualified # ๐ŸŒ๏ธโ€โ™‚๏ธ man golfing +1F3CC 200D 2642 FE0F ; non-fully-qualified # ๐ŸŒโ€โ™‚๏ธ man golfing +1F3CC FE0F 200D 2642 ; non-fully-qualified # ๐ŸŒ๏ธโ€โ™‚ man golfing +1F3CC 200D 2642 ; non-fully-qualified # ๐ŸŒโ€โ™‚ man golfing +1F3CC 1F3FB 200D 2642 FE0F ; fully-qualified # ๐ŸŒ๐Ÿปโ€โ™‚๏ธ man golfing: light skin tone +1F3CC 1F3FB 200D 2642 ; non-fully-qualified # ๐ŸŒ๐Ÿปโ€โ™‚ man golfing: light skin tone +1F3CC 1F3FC 200D 2642 FE0F ; fully-qualified # ๐ŸŒ๐Ÿผโ€โ™‚๏ธ man golfing: medium-light skin tone +1F3CC 1F3FC 200D 2642 ; non-fully-qualified # ๐ŸŒ๐Ÿผโ€โ™‚ man golfing: medium-light skin tone +1F3CC 1F3FD 200D 2642 FE0F ; fully-qualified # ๐ŸŒ๐Ÿฝโ€โ™‚๏ธ man golfing: medium skin tone +1F3CC 1F3FD 200D 2642 ; non-fully-qualified # ๐ŸŒ๐Ÿฝโ€โ™‚ man golfing: medium skin tone +1F3CC 1F3FE 200D 2642 FE0F ; fully-qualified # ๐ŸŒ๐Ÿพโ€โ™‚๏ธ man golfing: medium-dark skin tone +1F3CC 1F3FE 200D 2642 ; non-fully-qualified # ๐ŸŒ๐Ÿพโ€โ™‚ man golfing: medium-dark skin tone +1F3CC 1F3FF 200D 2642 FE0F ; fully-qualified # ๐ŸŒ๐Ÿฟโ€โ™‚๏ธ man golfing: dark skin tone +1F3CC 1F3FF 200D 2642 ; non-fully-qualified # ๐ŸŒ๐Ÿฟโ€โ™‚ man golfing: dark skin tone +1F3CC FE0F 200D 2640 FE0F ; fully-qualified # ๐ŸŒ๏ธโ€โ™€๏ธ woman golfing +1F3CC 200D 2640 FE0F ; non-fully-qualified # ๐ŸŒโ€โ™€๏ธ woman golfing +1F3CC FE0F 200D 2640 ; non-fully-qualified # ๐ŸŒ๏ธโ€โ™€ woman golfing +1F3CC 200D 2640 ; non-fully-qualified # ๐ŸŒโ€โ™€ woman golfing +1F3CC 1F3FB 200D 2640 FE0F ; fully-qualified # ๐ŸŒ๐Ÿปโ€โ™€๏ธ woman golfing: light skin tone +1F3CC 1F3FB 200D 2640 ; non-fully-qualified # ๐ŸŒ๐Ÿปโ€โ™€ woman golfing: light skin tone +1F3CC 1F3FC 200D 2640 FE0F ; fully-qualified # ๐ŸŒ๐Ÿผโ€โ™€๏ธ woman golfing: medium-light skin tone +1F3CC 1F3FC 200D 2640 ; non-fully-qualified # ๐ŸŒ๐Ÿผโ€โ™€ woman golfing: medium-light skin tone +1F3CC 1F3FD 200D 2640 FE0F ; fully-qualified # ๐ŸŒ๐Ÿฝโ€โ™€๏ธ woman golfing: medium skin tone +1F3CC 1F3FD 200D 2640 ; non-fully-qualified # ๐ŸŒ๐Ÿฝโ€โ™€ woman golfing: medium skin tone +1F3CC 1F3FE 200D 2640 FE0F ; fully-qualified # ๐ŸŒ๐Ÿพโ€โ™€๏ธ woman golfing: medium-dark skin tone +1F3CC 1F3FE 200D 2640 ; non-fully-qualified # ๐ŸŒ๐Ÿพโ€โ™€ woman golfing: medium-dark skin tone +1F3CC 1F3FF 200D 2640 FE0F ; fully-qualified # ๐ŸŒ๐Ÿฟโ€โ™€๏ธ woman golfing: dark skin tone +1F3CC 1F3FF 200D 2640 ; non-fully-qualified # ๐ŸŒ๐Ÿฟโ€โ™€ woman golfing: dark skin tone +1F3C4 ; fully-qualified # ๐Ÿ„ person surfing +1F3C4 1F3FB ; fully-qualified # ๐Ÿ„๐Ÿป person surfing: light skin tone +1F3C4 1F3FC ; fully-qualified # ๐Ÿ„๐Ÿผ person surfing: medium-light skin tone +1F3C4 1F3FD ; fully-qualified # ๐Ÿ„๐Ÿฝ person surfing: medium skin tone +1F3C4 1F3FE ; fully-qualified # ๐Ÿ„๐Ÿพ person surfing: medium-dark skin tone +1F3C4 1F3FF ; fully-qualified # ๐Ÿ„๐Ÿฟ person surfing: dark skin tone +1F3C4 200D 2642 FE0F ; fully-qualified # ๐Ÿ„โ€โ™‚๏ธ man surfing +1F3C4 200D 2642 ; non-fully-qualified # ๐Ÿ„โ€โ™‚ man surfing +1F3C4 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿ„๐Ÿปโ€โ™‚๏ธ man surfing: light skin tone +1F3C4 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿ„๐Ÿปโ€โ™‚ man surfing: light skin tone +1F3C4 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿ„๐Ÿผโ€โ™‚๏ธ man surfing: medium-light skin tone +1F3C4 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿ„๐Ÿผโ€โ™‚ man surfing: medium-light skin tone +1F3C4 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿ„๐Ÿฝโ€โ™‚๏ธ man surfing: medium skin tone +1F3C4 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿ„๐Ÿฝโ€โ™‚ man surfing: medium skin tone +1F3C4 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿ„๐Ÿพโ€โ™‚๏ธ man surfing: medium-dark skin tone +1F3C4 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿ„๐Ÿพโ€โ™‚ man surfing: medium-dark skin tone +1F3C4 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿ„๐Ÿฟโ€โ™‚๏ธ man surfing: dark skin tone +1F3C4 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿ„๐Ÿฟโ€โ™‚ man surfing: dark skin tone +1F3C4 200D 2640 FE0F ; fully-qualified # ๐Ÿ„โ€โ™€๏ธ woman surfing +1F3C4 200D 2640 ; non-fully-qualified # ๐Ÿ„โ€โ™€ woman surfing +1F3C4 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿ„๐Ÿปโ€โ™€๏ธ woman surfing: light skin tone +1F3C4 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿ„๐Ÿปโ€โ™€ woman surfing: light skin tone +1F3C4 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿ„๐Ÿผโ€โ™€๏ธ woman surfing: medium-light skin tone +1F3C4 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿ„๐Ÿผโ€โ™€ woman surfing: medium-light skin tone +1F3C4 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿ„๐Ÿฝโ€โ™€๏ธ woman surfing: medium skin tone +1F3C4 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿ„๐Ÿฝโ€โ™€ woman surfing: medium skin tone +1F3C4 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿ„๐Ÿพโ€โ™€๏ธ woman surfing: medium-dark skin tone +1F3C4 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿ„๐Ÿพโ€โ™€ woman surfing: medium-dark skin tone +1F3C4 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿ„๐Ÿฟโ€โ™€๏ธ woman surfing: dark skin tone +1F3C4 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿ„๐Ÿฟโ€โ™€ woman surfing: dark skin tone +1F6A3 ; fully-qualified # ๐Ÿšฃ person rowing boat +1F6A3 1F3FB ; fully-qualified # ๐Ÿšฃ๐Ÿป person rowing boat: light skin tone +1F6A3 1F3FC ; fully-qualified # ๐Ÿšฃ๐Ÿผ person rowing boat: medium-light skin tone +1F6A3 1F3FD ; fully-qualified # ๐Ÿšฃ๐Ÿฝ person rowing boat: medium skin tone +1F6A3 1F3FE ; fully-qualified # ๐Ÿšฃ๐Ÿพ person rowing boat: medium-dark skin tone +1F6A3 1F3FF ; fully-qualified # ๐Ÿšฃ๐Ÿฟ person rowing boat: dark skin tone +1F6A3 200D 2642 FE0F ; fully-qualified # ๐Ÿšฃโ€โ™‚๏ธ man rowing boat +1F6A3 200D 2642 ; non-fully-qualified # ๐Ÿšฃโ€โ™‚ man rowing boat +1F6A3 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿšฃ๐Ÿปโ€โ™‚๏ธ man rowing boat: light skin tone +1F6A3 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿšฃ๐Ÿปโ€โ™‚ man rowing boat: light skin tone +1F6A3 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿšฃ๐Ÿผโ€โ™‚๏ธ man rowing boat: medium-light skin tone +1F6A3 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿšฃ๐Ÿผโ€โ™‚ man rowing boat: medium-light skin tone +1F6A3 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿšฃ๐Ÿฝโ€โ™‚๏ธ man rowing boat: medium skin tone +1F6A3 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿšฃ๐Ÿฝโ€โ™‚ man rowing boat: medium skin tone +1F6A3 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿšฃ๐Ÿพโ€โ™‚๏ธ man rowing boat: medium-dark skin tone +1F6A3 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿšฃ๐Ÿพโ€โ™‚ man rowing boat: medium-dark skin tone +1F6A3 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿšฃ๐Ÿฟโ€โ™‚๏ธ man rowing boat: dark skin tone +1F6A3 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿšฃ๐Ÿฟโ€โ™‚ man rowing boat: dark skin tone +1F6A3 200D 2640 FE0F ; fully-qualified # ๐Ÿšฃโ€โ™€๏ธ woman rowing boat +1F6A3 200D 2640 ; non-fully-qualified # ๐Ÿšฃโ€โ™€ woman rowing boat +1F6A3 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿšฃ๐Ÿปโ€โ™€๏ธ woman rowing boat: light skin tone +1F6A3 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿšฃ๐Ÿปโ€โ™€ woman rowing boat: light skin tone +1F6A3 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿšฃ๐Ÿผโ€โ™€๏ธ woman rowing boat: medium-light skin tone +1F6A3 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿšฃ๐Ÿผโ€โ™€ woman rowing boat: medium-light skin tone +1F6A3 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿšฃ๐Ÿฝโ€โ™€๏ธ woman rowing boat: medium skin tone +1F6A3 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿšฃ๐Ÿฝโ€โ™€ woman rowing boat: medium skin tone +1F6A3 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿšฃ๐Ÿพโ€โ™€๏ธ woman rowing boat: medium-dark skin tone +1F6A3 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿšฃ๐Ÿพโ€โ™€ woman rowing boat: medium-dark skin tone +1F6A3 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿšฃ๐Ÿฟโ€โ™€๏ธ woman rowing boat: dark skin tone +1F6A3 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿšฃ๐Ÿฟโ€โ™€ woman rowing boat: dark skin tone +1F3CA ; fully-qualified # ๐ŸŠ person swimming +1F3CA 1F3FB ; fully-qualified # ๐ŸŠ๐Ÿป person swimming: light skin tone +1F3CA 1F3FC ; fully-qualified # ๐ŸŠ๐Ÿผ person swimming: medium-light skin tone +1F3CA 1F3FD ; fully-qualified # ๐ŸŠ๐Ÿฝ person swimming: medium skin tone +1F3CA 1F3FE ; fully-qualified # ๐ŸŠ๐Ÿพ person swimming: medium-dark skin tone +1F3CA 1F3FF ; fully-qualified # ๐ŸŠ๐Ÿฟ person swimming: dark skin tone +1F3CA 200D 2642 FE0F ; fully-qualified # ๐ŸŠโ€โ™‚๏ธ man swimming +1F3CA 200D 2642 ; non-fully-qualified # ๐ŸŠโ€โ™‚ man swimming +1F3CA 1F3FB 200D 2642 FE0F ; fully-qualified # ๐ŸŠ๐Ÿปโ€โ™‚๏ธ man swimming: light skin tone +1F3CA 1F3FB 200D 2642 ; non-fully-qualified # ๐ŸŠ๐Ÿปโ€โ™‚ man swimming: light skin tone +1F3CA 1F3FC 200D 2642 FE0F ; fully-qualified # ๐ŸŠ๐Ÿผโ€โ™‚๏ธ man swimming: medium-light skin tone +1F3CA 1F3FC 200D 2642 ; non-fully-qualified # ๐ŸŠ๐Ÿผโ€โ™‚ man swimming: medium-light skin tone +1F3CA 1F3FD 200D 2642 FE0F ; fully-qualified # ๐ŸŠ๐Ÿฝโ€โ™‚๏ธ man swimming: medium skin tone +1F3CA 1F3FD 200D 2642 ; non-fully-qualified # ๐ŸŠ๐Ÿฝโ€โ™‚ man swimming: medium skin tone +1F3CA 1F3FE 200D 2642 FE0F ; fully-qualified # ๐ŸŠ๐Ÿพโ€โ™‚๏ธ man swimming: medium-dark skin tone +1F3CA 1F3FE 200D 2642 ; non-fully-qualified # ๐ŸŠ๐Ÿพโ€โ™‚ man swimming: medium-dark skin tone +1F3CA 1F3FF 200D 2642 FE0F ; fully-qualified # ๐ŸŠ๐Ÿฟโ€โ™‚๏ธ man swimming: dark skin tone +1F3CA 1F3FF 200D 2642 ; non-fully-qualified # ๐ŸŠ๐Ÿฟโ€โ™‚ man swimming: dark skin tone +1F3CA 200D 2640 FE0F ; fully-qualified # ๐ŸŠโ€โ™€๏ธ woman swimming +1F3CA 200D 2640 ; non-fully-qualified # ๐ŸŠโ€โ™€ woman swimming +1F3CA 1F3FB 200D 2640 FE0F ; fully-qualified # ๐ŸŠ๐Ÿปโ€โ™€๏ธ woman swimming: light skin tone +1F3CA 1F3FB 200D 2640 ; non-fully-qualified # ๐ŸŠ๐Ÿปโ€โ™€ woman swimming: light skin tone +1F3CA 1F3FC 200D 2640 FE0F ; fully-qualified # ๐ŸŠ๐Ÿผโ€โ™€๏ธ woman swimming: medium-light skin tone +1F3CA 1F3FC 200D 2640 ; non-fully-qualified # ๐ŸŠ๐Ÿผโ€โ™€ woman swimming: medium-light skin tone +1F3CA 1F3FD 200D 2640 FE0F ; fully-qualified # ๐ŸŠ๐Ÿฝโ€โ™€๏ธ woman swimming: medium skin tone +1F3CA 1F3FD 200D 2640 ; non-fully-qualified # ๐ŸŠ๐Ÿฝโ€โ™€ woman swimming: medium skin tone +1F3CA 1F3FE 200D 2640 FE0F ; fully-qualified # ๐ŸŠ๐Ÿพโ€โ™€๏ธ woman swimming: medium-dark skin tone +1F3CA 1F3FE 200D 2640 ; non-fully-qualified # ๐ŸŠ๐Ÿพโ€โ™€ woman swimming: medium-dark skin tone +1F3CA 1F3FF 200D 2640 FE0F ; fully-qualified # ๐ŸŠ๐Ÿฟโ€โ™€๏ธ woman swimming: dark skin tone +1F3CA 1F3FF 200D 2640 ; non-fully-qualified # ๐ŸŠ๐Ÿฟโ€โ™€ woman swimming: dark skin tone +26F9 FE0F ; fully-qualified # โ›น๏ธ person bouncing ball +26F9 ; non-fully-qualified # โ›น person bouncing ball +26F9 1F3FB ; fully-qualified # โ›น๐Ÿป person bouncing ball: light skin tone +26F9 1F3FC ; fully-qualified # โ›น๐Ÿผ person bouncing ball: medium-light skin tone +26F9 1F3FD ; fully-qualified # โ›น๐Ÿฝ person bouncing ball: medium skin tone +26F9 1F3FE ; fully-qualified # โ›น๐Ÿพ person bouncing ball: medium-dark skin tone +26F9 1F3FF ; fully-qualified # โ›น๐Ÿฟ person bouncing ball: dark skin tone +26F9 FE0F 200D 2642 FE0F ; fully-qualified # โ›น๏ธโ€โ™‚๏ธ man bouncing ball +26F9 200D 2642 FE0F ; non-fully-qualified # โ›นโ€โ™‚๏ธ man bouncing ball +26F9 FE0F 200D 2642 ; non-fully-qualified # โ›น๏ธโ€โ™‚ man bouncing ball +26F9 200D 2642 ; non-fully-qualified # โ›นโ€โ™‚ man bouncing ball +26F9 1F3FB 200D 2642 FE0F ; fully-qualified # โ›น๐Ÿปโ€โ™‚๏ธ man bouncing ball: light skin tone +26F9 1F3FB 200D 2642 ; non-fully-qualified # โ›น๐Ÿปโ€โ™‚ man bouncing ball: light skin tone +26F9 1F3FC 200D 2642 FE0F ; fully-qualified # โ›น๐Ÿผโ€โ™‚๏ธ man bouncing ball: medium-light skin tone +26F9 1F3FC 200D 2642 ; non-fully-qualified # โ›น๐Ÿผโ€โ™‚ man bouncing ball: medium-light skin tone +26F9 1F3FD 200D 2642 FE0F ; fully-qualified # โ›น๐Ÿฝโ€โ™‚๏ธ man bouncing ball: medium skin tone +26F9 1F3FD 200D 2642 ; non-fully-qualified # โ›น๐Ÿฝโ€โ™‚ man bouncing ball: medium skin tone +26F9 1F3FE 200D 2642 FE0F ; fully-qualified # โ›น๐Ÿพโ€โ™‚๏ธ man bouncing ball: medium-dark skin tone +26F9 1F3FE 200D 2642 ; non-fully-qualified # โ›น๐Ÿพโ€โ™‚ man bouncing ball: medium-dark skin tone +26F9 1F3FF 200D 2642 FE0F ; fully-qualified # โ›น๐Ÿฟโ€โ™‚๏ธ man bouncing ball: dark skin tone +26F9 1F3FF 200D 2642 ; non-fully-qualified # โ›น๐Ÿฟโ€โ™‚ man bouncing ball: dark skin tone +26F9 FE0F 200D 2640 FE0F ; fully-qualified # โ›น๏ธโ€โ™€๏ธ woman bouncing ball +26F9 200D 2640 FE0F ; non-fully-qualified # โ›นโ€โ™€๏ธ woman bouncing ball +26F9 FE0F 200D 2640 ; non-fully-qualified # โ›น๏ธโ€โ™€ woman bouncing ball +26F9 200D 2640 ; non-fully-qualified # โ›นโ€โ™€ woman bouncing ball +26F9 1F3FB 200D 2640 FE0F ; fully-qualified # โ›น๐Ÿปโ€โ™€๏ธ woman bouncing ball: light skin tone +26F9 1F3FB 200D 2640 ; non-fully-qualified # โ›น๐Ÿปโ€โ™€ woman bouncing ball: light skin tone +26F9 1F3FC 200D 2640 FE0F ; fully-qualified # โ›น๐Ÿผโ€โ™€๏ธ woman bouncing ball: medium-light skin tone +26F9 1F3FC 200D 2640 ; non-fully-qualified # โ›น๐Ÿผโ€โ™€ woman bouncing ball: medium-light skin tone +26F9 1F3FD 200D 2640 FE0F ; fully-qualified # โ›น๐Ÿฝโ€โ™€๏ธ woman bouncing ball: medium skin tone +26F9 1F3FD 200D 2640 ; non-fully-qualified # โ›น๐Ÿฝโ€โ™€ woman bouncing ball: medium skin tone +26F9 1F3FE 200D 2640 FE0F ; fully-qualified # โ›น๐Ÿพโ€โ™€๏ธ woman bouncing ball: medium-dark skin tone +26F9 1F3FE 200D 2640 ; non-fully-qualified # โ›น๐Ÿพโ€โ™€ woman bouncing ball: medium-dark skin tone +26F9 1F3FF 200D 2640 FE0F ; fully-qualified # โ›น๐Ÿฟโ€โ™€๏ธ woman bouncing ball: dark skin tone +26F9 1F3FF 200D 2640 ; non-fully-qualified # โ›น๐Ÿฟโ€โ™€ woman bouncing ball: dark skin tone +1F3CB FE0F ; fully-qualified # ๐Ÿ‹๏ธ person lifting weights +1F3CB ; non-fully-qualified # ๐Ÿ‹ person lifting weights +1F3CB 1F3FB ; fully-qualified # ๐Ÿ‹๐Ÿป person lifting weights: light skin tone +1F3CB 1F3FC ; fully-qualified # ๐Ÿ‹๐Ÿผ person lifting weights: medium-light skin tone +1F3CB 1F3FD ; fully-qualified # ๐Ÿ‹๐Ÿฝ person lifting weights: medium skin tone +1F3CB 1F3FE ; fully-qualified # ๐Ÿ‹๐Ÿพ person lifting weights: medium-dark skin tone +1F3CB 1F3FF ; fully-qualified # ๐Ÿ‹๐Ÿฟ person lifting weights: dark skin tone +1F3CB FE0F 200D 2642 FE0F ; fully-qualified # ๐Ÿ‹๏ธโ€โ™‚๏ธ man lifting weights +1F3CB 200D 2642 FE0F ; non-fully-qualified # ๐Ÿ‹โ€โ™‚๏ธ man lifting weights +1F3CB FE0F 200D 2642 ; non-fully-qualified # ๐Ÿ‹๏ธโ€โ™‚ man lifting weights +1F3CB 200D 2642 ; non-fully-qualified # ๐Ÿ‹โ€โ™‚ man lifting weights +1F3CB 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿ‹๐Ÿปโ€โ™‚๏ธ man lifting weights: light skin tone +1F3CB 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿ‹๐Ÿปโ€โ™‚ man lifting weights: light skin tone +1F3CB 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿ‹๐Ÿผโ€โ™‚๏ธ man lifting weights: medium-light skin tone +1F3CB 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿ‹๐Ÿผโ€โ™‚ man lifting weights: medium-light skin tone +1F3CB 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿ‹๐Ÿฝโ€โ™‚๏ธ man lifting weights: medium skin tone +1F3CB 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿ‹๐Ÿฝโ€โ™‚ man lifting weights: medium skin tone +1F3CB 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿ‹๐Ÿพโ€โ™‚๏ธ man lifting weights: medium-dark skin tone +1F3CB 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿ‹๐Ÿพโ€โ™‚ man lifting weights: medium-dark skin tone +1F3CB 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿ‹๐Ÿฟโ€โ™‚๏ธ man lifting weights: dark skin tone +1F3CB 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿ‹๐Ÿฟโ€โ™‚ man lifting weights: dark skin tone +1F3CB FE0F 200D 2640 FE0F ; fully-qualified # ๐Ÿ‹๏ธโ€โ™€๏ธ woman lifting weights +1F3CB 200D 2640 FE0F ; non-fully-qualified # ๐Ÿ‹โ€โ™€๏ธ woman lifting weights +1F3CB FE0F 200D 2640 ; non-fully-qualified # ๐Ÿ‹๏ธโ€โ™€ woman lifting weights +1F3CB 200D 2640 ; non-fully-qualified # ๐Ÿ‹โ€โ™€ woman lifting weights +1F3CB 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿ‹๐Ÿปโ€โ™€๏ธ woman lifting weights: light skin tone +1F3CB 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿ‹๐Ÿปโ€โ™€ woman lifting weights: light skin tone +1F3CB 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿ‹๐Ÿผโ€โ™€๏ธ woman lifting weights: medium-light skin tone +1F3CB 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿ‹๐Ÿผโ€โ™€ woman lifting weights: medium-light skin tone +1F3CB 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿ‹๐Ÿฝโ€โ™€๏ธ woman lifting weights: medium skin tone +1F3CB 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿ‹๐Ÿฝโ€โ™€ woman lifting weights: medium skin tone +1F3CB 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿ‹๐Ÿพโ€โ™€๏ธ woman lifting weights: medium-dark skin tone +1F3CB 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿ‹๐Ÿพโ€โ™€ woman lifting weights: medium-dark skin tone +1F3CB 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿ‹๐Ÿฟโ€โ™€๏ธ woman lifting weights: dark skin tone +1F3CB 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿ‹๐Ÿฟโ€โ™€ woman lifting weights: dark skin tone +1F6B4 ; fully-qualified # ๐Ÿšด person biking +1F6B4 1F3FB ; fully-qualified # ๐Ÿšด๐Ÿป person biking: light skin tone +1F6B4 1F3FC ; fully-qualified # ๐Ÿšด๐Ÿผ person biking: medium-light skin tone +1F6B4 1F3FD ; fully-qualified # ๐Ÿšด๐Ÿฝ person biking: medium skin tone +1F6B4 1F3FE ; fully-qualified # ๐Ÿšด๐Ÿพ person biking: medium-dark skin tone +1F6B4 1F3FF ; fully-qualified # ๐Ÿšด๐Ÿฟ person biking: dark skin tone +1F6B4 200D 2642 FE0F ; fully-qualified # ๐Ÿšดโ€โ™‚๏ธ man biking +1F6B4 200D 2642 ; non-fully-qualified # ๐Ÿšดโ€โ™‚ man biking +1F6B4 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿšด๐Ÿปโ€โ™‚๏ธ man biking: light skin tone +1F6B4 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿšด๐Ÿปโ€โ™‚ man biking: light skin tone +1F6B4 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿšด๐Ÿผโ€โ™‚๏ธ man biking: medium-light skin tone +1F6B4 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿšด๐Ÿผโ€โ™‚ man biking: medium-light skin tone +1F6B4 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿšด๐Ÿฝโ€โ™‚๏ธ man biking: medium skin tone +1F6B4 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿšด๐Ÿฝโ€โ™‚ man biking: medium skin tone +1F6B4 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿšด๐Ÿพโ€โ™‚๏ธ man biking: medium-dark skin tone +1F6B4 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿšด๐Ÿพโ€โ™‚ man biking: medium-dark skin tone +1F6B4 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿšด๐Ÿฟโ€โ™‚๏ธ man biking: dark skin tone +1F6B4 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿšด๐Ÿฟโ€โ™‚ man biking: dark skin tone +1F6B4 200D 2640 FE0F ; fully-qualified # ๐Ÿšดโ€โ™€๏ธ woman biking +1F6B4 200D 2640 ; non-fully-qualified # ๐Ÿšดโ€โ™€ woman biking +1F6B4 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿšด๐Ÿปโ€โ™€๏ธ woman biking: light skin tone +1F6B4 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿšด๐Ÿปโ€โ™€ woman biking: light skin tone +1F6B4 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿšด๐Ÿผโ€โ™€๏ธ woman biking: medium-light skin tone +1F6B4 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿšด๐Ÿผโ€โ™€ woman biking: medium-light skin tone +1F6B4 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿšด๐Ÿฝโ€โ™€๏ธ woman biking: medium skin tone +1F6B4 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿšด๐Ÿฝโ€โ™€ woman biking: medium skin tone +1F6B4 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿšด๐Ÿพโ€โ™€๏ธ woman biking: medium-dark skin tone +1F6B4 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿšด๐Ÿพโ€โ™€ woman biking: medium-dark skin tone +1F6B4 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿšด๐Ÿฟโ€โ™€๏ธ woman biking: dark skin tone +1F6B4 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿšด๐Ÿฟโ€โ™€ woman biking: dark skin tone +1F6B5 ; fully-qualified # ๐Ÿšต person mountain biking +1F6B5 1F3FB ; fully-qualified # ๐Ÿšต๐Ÿป person mountain biking: light skin tone +1F6B5 1F3FC ; fully-qualified # ๐Ÿšต๐Ÿผ person mountain biking: medium-light skin tone +1F6B5 1F3FD ; fully-qualified # ๐Ÿšต๐Ÿฝ person mountain biking: medium skin tone +1F6B5 1F3FE ; fully-qualified # ๐Ÿšต๐Ÿพ person mountain biking: medium-dark skin tone +1F6B5 1F3FF ; fully-qualified # ๐Ÿšต๐Ÿฟ person mountain biking: dark skin tone +1F6B5 200D 2642 FE0F ; fully-qualified # ๐Ÿšตโ€โ™‚๏ธ man mountain biking +1F6B5 200D 2642 ; non-fully-qualified # ๐Ÿšตโ€โ™‚ man mountain biking +1F6B5 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿšต๐Ÿปโ€โ™‚๏ธ man mountain biking: light skin tone +1F6B5 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿšต๐Ÿปโ€โ™‚ man mountain biking: light skin tone +1F6B5 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿšต๐Ÿผโ€โ™‚๏ธ man mountain biking: medium-light skin tone +1F6B5 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿšต๐Ÿผโ€โ™‚ man mountain biking: medium-light skin tone +1F6B5 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿšต๐Ÿฝโ€โ™‚๏ธ man mountain biking: medium skin tone +1F6B5 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿšต๐Ÿฝโ€โ™‚ man mountain biking: medium skin tone +1F6B5 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿšต๐Ÿพโ€โ™‚๏ธ man mountain biking: medium-dark skin tone +1F6B5 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿšต๐Ÿพโ€โ™‚ man mountain biking: medium-dark skin tone +1F6B5 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿšต๐Ÿฟโ€โ™‚๏ธ man mountain biking: dark skin tone +1F6B5 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿšต๐Ÿฟโ€โ™‚ man mountain biking: dark skin tone +1F6B5 200D 2640 FE0F ; fully-qualified # ๐Ÿšตโ€โ™€๏ธ woman mountain biking +1F6B5 200D 2640 ; non-fully-qualified # ๐Ÿšตโ€โ™€ woman mountain biking +1F6B5 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿšต๐Ÿปโ€โ™€๏ธ woman mountain biking: light skin tone +1F6B5 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿšต๐Ÿปโ€โ™€ woman mountain biking: light skin tone +1F6B5 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿšต๐Ÿผโ€โ™€๏ธ woman mountain biking: medium-light skin tone +1F6B5 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿšต๐Ÿผโ€โ™€ woman mountain biking: medium-light skin tone +1F6B5 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿšต๐Ÿฝโ€โ™€๏ธ woman mountain biking: medium skin tone +1F6B5 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿšต๐Ÿฝโ€โ™€ woman mountain biking: medium skin tone +1F6B5 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿšต๐Ÿพโ€โ™€๏ธ woman mountain biking: medium-dark skin tone +1F6B5 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿšต๐Ÿพโ€โ™€ woman mountain biking: medium-dark skin tone +1F6B5 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿšต๐Ÿฟโ€โ™€๏ธ woman mountain biking: dark skin tone +1F6B5 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿšต๐Ÿฟโ€โ™€ woman mountain biking: dark skin tone +1F3CE FE0F ; fully-qualified # ๐ŸŽ๏ธ racing car +1F3CE ; non-fully-qualified # ๐ŸŽ racing car +1F3CD FE0F ; fully-qualified # ๐Ÿ๏ธ motorcycle +1F3CD ; non-fully-qualified # ๐Ÿ motorcycle +1F938 ; fully-qualified # ๐Ÿคธ person cartwheeling +1F938 1F3FB ; fully-qualified # ๐Ÿคธ๐Ÿป person cartwheeling: light skin tone +1F938 1F3FC ; fully-qualified # ๐Ÿคธ๐Ÿผ person cartwheeling: medium-light skin tone +1F938 1F3FD ; fully-qualified # ๐Ÿคธ๐Ÿฝ person cartwheeling: medium skin tone +1F938 1F3FE ; fully-qualified # ๐Ÿคธ๐Ÿพ person cartwheeling: medium-dark skin tone +1F938 1F3FF ; fully-qualified # ๐Ÿคธ๐Ÿฟ person cartwheeling: dark skin tone +1F938 200D 2642 FE0F ; fully-qualified # ๐Ÿคธโ€โ™‚๏ธ man cartwheeling +1F938 200D 2642 ; non-fully-qualified # ๐Ÿคธโ€โ™‚ man cartwheeling +1F938 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿคธ๐Ÿปโ€โ™‚๏ธ man cartwheeling: light skin tone +1F938 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿคธ๐Ÿปโ€โ™‚ man cartwheeling: light skin tone +1F938 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿคธ๐Ÿผโ€โ™‚๏ธ man cartwheeling: medium-light skin tone +1F938 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿคธ๐Ÿผโ€โ™‚ man cartwheeling: medium-light skin tone +1F938 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿคธ๐Ÿฝโ€โ™‚๏ธ man cartwheeling: medium skin tone +1F938 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿคธ๐Ÿฝโ€โ™‚ man cartwheeling: medium skin tone +1F938 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿคธ๐Ÿพโ€โ™‚๏ธ man cartwheeling: medium-dark skin tone +1F938 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿคธ๐Ÿพโ€โ™‚ man cartwheeling: medium-dark skin tone +1F938 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿคธ๐Ÿฟโ€โ™‚๏ธ man cartwheeling: dark skin tone +1F938 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿคธ๐Ÿฟโ€โ™‚ man cartwheeling: dark skin tone +1F938 200D 2640 FE0F ; fully-qualified # ๐Ÿคธโ€โ™€๏ธ woman cartwheeling +1F938 200D 2640 ; non-fully-qualified # ๐Ÿคธโ€โ™€ woman cartwheeling +1F938 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿคธ๐Ÿปโ€โ™€๏ธ woman cartwheeling: light skin tone +1F938 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿคธ๐Ÿปโ€โ™€ woman cartwheeling: light skin tone +1F938 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿคธ๐Ÿผโ€โ™€๏ธ woman cartwheeling: medium-light skin tone +1F938 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿคธ๐Ÿผโ€โ™€ woman cartwheeling: medium-light skin tone +1F938 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿคธ๐Ÿฝโ€โ™€๏ธ woman cartwheeling: medium skin tone +1F938 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿคธ๐Ÿฝโ€โ™€ woman cartwheeling: medium skin tone +1F938 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿคธ๐Ÿพโ€โ™€๏ธ woman cartwheeling: medium-dark skin tone +1F938 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿคธ๐Ÿพโ€โ™€ woman cartwheeling: medium-dark skin tone +1F938 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿคธ๐Ÿฟโ€โ™€๏ธ woman cartwheeling: dark skin tone +1F938 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿคธ๐Ÿฟโ€โ™€ woman cartwheeling: dark skin tone +1F93C ; fully-qualified # ๐Ÿคผ people wrestling +1F93C 200D 2642 FE0F ; fully-qualified # ๐Ÿคผโ€โ™‚๏ธ men wrestling +1F93C 200D 2642 ; non-fully-qualified # ๐Ÿคผโ€โ™‚ men wrestling +1F93C 200D 2640 FE0F ; fully-qualified # ๐Ÿคผโ€โ™€๏ธ women wrestling +1F93C 200D 2640 ; non-fully-qualified # ๐Ÿคผโ€โ™€ women wrestling +1F93D ; fully-qualified # ๐Ÿคฝ person playing water polo +1F93D 1F3FB ; fully-qualified # ๐Ÿคฝ๐Ÿป person playing water polo: light skin tone +1F93D 1F3FC ; fully-qualified # ๐Ÿคฝ๐Ÿผ person playing water polo: medium-light skin tone +1F93D 1F3FD ; fully-qualified # ๐Ÿคฝ๐Ÿฝ person playing water polo: medium skin tone +1F93D 1F3FE ; fully-qualified # ๐Ÿคฝ๐Ÿพ person playing water polo: medium-dark skin tone +1F93D 1F3FF ; fully-qualified # ๐Ÿคฝ๐Ÿฟ person playing water polo: dark skin tone +1F93D 200D 2642 FE0F ; fully-qualified # ๐Ÿคฝโ€โ™‚๏ธ man playing water polo +1F93D 200D 2642 ; non-fully-qualified # ๐Ÿคฝโ€โ™‚ man playing water polo +1F93D 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿคฝ๐Ÿปโ€โ™‚๏ธ man playing water polo: light skin tone +1F93D 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿคฝ๐Ÿปโ€โ™‚ man playing water polo: light skin tone +1F93D 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿคฝ๐Ÿผโ€โ™‚๏ธ man playing water polo: medium-light skin tone +1F93D 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿคฝ๐Ÿผโ€โ™‚ man playing water polo: medium-light skin tone +1F93D 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿคฝ๐Ÿฝโ€โ™‚๏ธ man playing water polo: medium skin tone +1F93D 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿคฝ๐Ÿฝโ€โ™‚ man playing water polo: medium skin tone +1F93D 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿคฝ๐Ÿพโ€โ™‚๏ธ man playing water polo: medium-dark skin tone +1F93D 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿคฝ๐Ÿพโ€โ™‚ man playing water polo: medium-dark skin tone +1F93D 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿคฝ๐Ÿฟโ€โ™‚๏ธ man playing water polo: dark skin tone +1F93D 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿคฝ๐Ÿฟโ€โ™‚ man playing water polo: dark skin tone +1F93D 200D 2640 FE0F ; fully-qualified # ๐Ÿคฝโ€โ™€๏ธ woman playing water polo +1F93D 200D 2640 ; non-fully-qualified # ๐Ÿคฝโ€โ™€ woman playing water polo +1F93D 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿคฝ๐Ÿปโ€โ™€๏ธ woman playing water polo: light skin tone +1F93D 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿคฝ๐Ÿปโ€โ™€ woman playing water polo: light skin tone +1F93D 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿคฝ๐Ÿผโ€โ™€๏ธ woman playing water polo: medium-light skin tone +1F93D 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿคฝ๐Ÿผโ€โ™€ woman playing water polo: medium-light skin tone +1F93D 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿคฝ๐Ÿฝโ€โ™€๏ธ woman playing water polo: medium skin tone +1F93D 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿคฝ๐Ÿฝโ€โ™€ woman playing water polo: medium skin tone +1F93D 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿคฝ๐Ÿพโ€โ™€๏ธ woman playing water polo: medium-dark skin tone +1F93D 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿคฝ๐Ÿพโ€โ™€ woman playing water polo: medium-dark skin tone +1F93D 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿคฝ๐Ÿฟโ€โ™€๏ธ woman playing water polo: dark skin tone +1F93D 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿคฝ๐Ÿฟโ€โ™€ woman playing water polo: dark skin tone +1F93E ; fully-qualified # ๐Ÿคพ person playing handball +1F93E 1F3FB ; fully-qualified # ๐Ÿคพ๐Ÿป person playing handball: light skin tone +1F93E 1F3FC ; fully-qualified # ๐Ÿคพ๐Ÿผ person playing handball: medium-light skin tone +1F93E 1F3FD ; fully-qualified # ๐Ÿคพ๐Ÿฝ person playing handball: medium skin tone +1F93E 1F3FE ; fully-qualified # ๐Ÿคพ๐Ÿพ person playing handball: medium-dark skin tone +1F93E 1F3FF ; fully-qualified # ๐Ÿคพ๐Ÿฟ person playing handball: dark skin tone +1F93E 200D 2642 FE0F ; fully-qualified # ๐Ÿคพโ€โ™‚๏ธ man playing handball +1F93E 200D 2642 ; non-fully-qualified # ๐Ÿคพโ€โ™‚ man playing handball +1F93E 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿคพ๐Ÿปโ€โ™‚๏ธ man playing handball: light skin tone +1F93E 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿคพ๐Ÿปโ€โ™‚ man playing handball: light skin tone +1F93E 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿคพ๐Ÿผโ€โ™‚๏ธ man playing handball: medium-light skin tone +1F93E 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿคพ๐Ÿผโ€โ™‚ man playing handball: medium-light skin tone +1F93E 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿคพ๐Ÿฝโ€โ™‚๏ธ man playing handball: medium skin tone +1F93E 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿคพ๐Ÿฝโ€โ™‚ man playing handball: medium skin tone +1F93E 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿคพ๐Ÿพโ€โ™‚๏ธ man playing handball: medium-dark skin tone +1F93E 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿคพ๐Ÿพโ€โ™‚ man playing handball: medium-dark skin tone +1F93E 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿคพ๐Ÿฟโ€โ™‚๏ธ man playing handball: dark skin tone +1F93E 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿคพ๐Ÿฟโ€โ™‚ man playing handball: dark skin tone +1F93E 200D 2640 FE0F ; fully-qualified # ๐Ÿคพโ€โ™€๏ธ woman playing handball +1F93E 200D 2640 ; non-fully-qualified # ๐Ÿคพโ€โ™€ woman playing handball +1F93E 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿคพ๐Ÿปโ€โ™€๏ธ woman playing handball: light skin tone +1F93E 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿคพ๐Ÿปโ€โ™€ woman playing handball: light skin tone +1F93E 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿคพ๐Ÿผโ€โ™€๏ธ woman playing handball: medium-light skin tone +1F93E 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿคพ๐Ÿผโ€โ™€ woman playing handball: medium-light skin tone +1F93E 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿคพ๐Ÿฝโ€โ™€๏ธ woman playing handball: medium skin tone +1F93E 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿคพ๐Ÿฝโ€โ™€ woman playing handball: medium skin tone +1F93E 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿคพ๐Ÿพโ€โ™€๏ธ woman playing handball: medium-dark skin tone +1F93E 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿคพ๐Ÿพโ€โ™€ woman playing handball: medium-dark skin tone +1F93E 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿคพ๐Ÿฟโ€โ™€๏ธ woman playing handball: dark skin tone +1F93E 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿคพ๐Ÿฟโ€โ™€ woman playing handball: dark skin tone +1F939 ; fully-qualified # ๐Ÿคน person juggling +1F939 1F3FB ; fully-qualified # ๐Ÿคน๐Ÿป person juggling: light skin tone +1F939 1F3FC ; fully-qualified # ๐Ÿคน๐Ÿผ person juggling: medium-light skin tone +1F939 1F3FD ; fully-qualified # ๐Ÿคน๐Ÿฝ person juggling: medium skin tone +1F939 1F3FE ; fully-qualified # ๐Ÿคน๐Ÿพ person juggling: medium-dark skin tone +1F939 1F3FF ; fully-qualified # ๐Ÿคน๐Ÿฟ person juggling: dark skin tone +1F939 200D 2642 FE0F ; fully-qualified # ๐Ÿคนโ€โ™‚๏ธ man juggling +1F939 200D 2642 ; non-fully-qualified # ๐Ÿคนโ€โ™‚ man juggling +1F939 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿคน๐Ÿปโ€โ™‚๏ธ man juggling: light skin tone +1F939 1F3FB 200D 2642 ; non-fully-qualified # ๐Ÿคน๐Ÿปโ€โ™‚ man juggling: light skin tone +1F939 1F3FC 200D 2642 FE0F ; fully-qualified # ๐Ÿคน๐Ÿผโ€โ™‚๏ธ man juggling: medium-light skin tone +1F939 1F3FC 200D 2642 ; non-fully-qualified # ๐Ÿคน๐Ÿผโ€โ™‚ man juggling: medium-light skin tone +1F939 1F3FD 200D 2642 FE0F ; fully-qualified # ๐Ÿคน๐Ÿฝโ€โ™‚๏ธ man juggling: medium skin tone +1F939 1F3FD 200D 2642 ; non-fully-qualified # ๐Ÿคน๐Ÿฝโ€โ™‚ man juggling: medium skin tone +1F939 1F3FE 200D 2642 FE0F ; fully-qualified # ๐Ÿคน๐Ÿพโ€โ™‚๏ธ man juggling: medium-dark skin tone +1F939 1F3FE 200D 2642 ; non-fully-qualified # ๐Ÿคน๐Ÿพโ€โ™‚ man juggling: medium-dark skin tone +1F939 1F3FF 200D 2642 FE0F ; fully-qualified # ๐Ÿคน๐Ÿฟโ€โ™‚๏ธ man juggling: dark skin tone +1F939 1F3FF 200D 2642 ; non-fully-qualified # ๐Ÿคน๐Ÿฟโ€โ™‚ man juggling: dark skin tone +1F939 200D 2640 FE0F ; fully-qualified # ๐Ÿคนโ€โ™€๏ธ woman juggling +1F939 200D 2640 ; non-fully-qualified # ๐Ÿคนโ€โ™€ woman juggling +1F939 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿคน๐Ÿปโ€โ™€๏ธ woman juggling: light skin tone +1F939 1F3FB 200D 2640 ; non-fully-qualified # ๐Ÿคน๐Ÿปโ€โ™€ woman juggling: light skin tone +1F939 1F3FC 200D 2640 FE0F ; fully-qualified # ๐Ÿคน๐Ÿผโ€โ™€๏ธ woman juggling: medium-light skin tone +1F939 1F3FC 200D 2640 ; non-fully-qualified # ๐Ÿคน๐Ÿผโ€โ™€ woman juggling: medium-light skin tone +1F939 1F3FD 200D 2640 FE0F ; fully-qualified # ๐Ÿคน๐Ÿฝโ€โ™€๏ธ woman juggling: medium skin tone +1F939 1F3FD 200D 2640 ; non-fully-qualified # ๐Ÿคน๐Ÿฝโ€โ™€ woman juggling: medium skin tone +1F939 1F3FE 200D 2640 FE0F ; fully-qualified # ๐Ÿคน๐Ÿพโ€โ™€๏ธ woman juggling: medium-dark skin tone +1F939 1F3FE 200D 2640 ; non-fully-qualified # ๐Ÿคน๐Ÿพโ€โ™€ woman juggling: medium-dark skin tone +1F939 1F3FF 200D 2640 FE0F ; fully-qualified # ๐Ÿคน๐Ÿฟโ€โ™€๏ธ woman juggling: dark skin tone +1F939 1F3FF 200D 2640 ; non-fully-qualified # ๐Ÿคน๐Ÿฟโ€โ™€ woman juggling: dark skin tone + +# subgroup: family +1F46B ; fully-qualified # ๐Ÿ‘ซ man and woman holding hands +1F46C ; fully-qualified # ๐Ÿ‘ฌ two men holding hands +1F46D ; fully-qualified # ๐Ÿ‘ญ two women holding hands +1F48F ; fully-qualified # ๐Ÿ’ kiss +1F469 200D 2764 FE0F 200D 1F48B 200D 1F468 ; fully-qualified # ๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ kiss: woman, man +1F469 200D 2764 200D 1F48B 200D 1F468 ; non-fully-qualified # ๐Ÿ‘ฉโ€โคโ€๐Ÿ’‹โ€๐Ÿ‘จ kiss: woman, man +1F468 200D 2764 FE0F 200D 1F48B 200D 1F468 ; fully-qualified # ๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ kiss: man, man +1F468 200D 2764 200D 1F48B 200D 1F468 ; non-fully-qualified # ๐Ÿ‘จโ€โคโ€๐Ÿ’‹โ€๐Ÿ‘จ kiss: man, man +1F469 200D 2764 FE0F 200D 1F48B 200D 1F469 ; fully-qualified # ๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ kiss: woman, woman +1F469 200D 2764 200D 1F48B 200D 1F469 ; non-fully-qualified # ๐Ÿ‘ฉโ€โคโ€๐Ÿ’‹โ€๐Ÿ‘ฉ kiss: woman, woman +1F491 ; fully-qualified # ๐Ÿ’‘ couple with heart +1F469 200D 2764 FE0F 200D 1F468 ; fully-qualified # ๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘จ couple with heart: woman, man +1F469 200D 2764 200D 1F468 ; non-fully-qualified # ๐Ÿ‘ฉโ€โคโ€๐Ÿ‘จ couple with heart: woman, man +1F468 200D 2764 FE0F 200D 1F468 ; fully-qualified # ๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ couple with heart: man, man +1F468 200D 2764 200D 1F468 ; non-fully-qualified # ๐Ÿ‘จโ€โคโ€๐Ÿ‘จ couple with heart: man, man +1F469 200D 2764 FE0F 200D 1F469 ; fully-qualified # ๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ couple with heart: woman, woman +1F469 200D 2764 200D 1F469 ; non-fully-qualified # ๐Ÿ‘ฉโ€โคโ€๐Ÿ‘ฉ couple with heart: woman, woman +1F46A ; fully-qualified # ๐Ÿ‘ช family +1F468 200D 1F469 200D 1F466 ; fully-qualified # ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ family: man, woman, boy +1F468 200D 1F469 200D 1F467 ; fully-qualified # ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง family: man, woman, girl +1F468 200D 1F469 200D 1F467 200D 1F466 ; fully-qualified # ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ family: man, woman, girl, boy +1F468 200D 1F469 200D 1F466 200D 1F466 ; fully-qualified # ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ family: man, woman, boy, boy +1F468 200D 1F469 200D 1F467 200D 1F467 ; fully-qualified # ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง family: man, woman, girl, girl +1F468 200D 1F468 200D 1F466 ; fully-qualified # ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆ family: man, man, boy +1F468 200D 1F468 200D 1F467 ; fully-qualified # ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ง family: man, man, girl +1F468 200D 1F468 200D 1F467 200D 1F466 ; fully-qualified # ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ family: man, man, girl, boy +1F468 200D 1F468 200D 1F466 200D 1F466 ; fully-qualified # ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ family: man, man, boy, boy +1F468 200D 1F468 200D 1F467 200D 1F467 ; fully-qualified # ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง family: man, man, girl, girl +1F469 200D 1F469 200D 1F466 ; fully-qualified # ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ family: woman, woman, boy +1F469 200D 1F469 200D 1F467 ; fully-qualified # ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง family: woman, woman, girl +1F469 200D 1F469 200D 1F467 200D 1F466 ; fully-qualified # ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ family: woman, woman, girl, boy +1F469 200D 1F469 200D 1F466 200D 1F466 ; fully-qualified # ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ family: woman, woman, boy, boy +1F469 200D 1F469 200D 1F467 200D 1F467 ; fully-qualified # ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง family: woman, woman, girl, girl +1F468 200D 1F466 ; fully-qualified # ๐Ÿ‘จโ€๐Ÿ‘ฆ family: man, boy +1F468 200D 1F466 200D 1F466 ; fully-qualified # ๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ family: man, boy, boy +1F468 200D 1F467 ; fully-qualified # ๐Ÿ‘จโ€๐Ÿ‘ง family: man, girl +1F468 200D 1F467 200D 1F466 ; fully-qualified # ๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ family: man, girl, boy +1F468 200D 1F467 200D 1F467 ; fully-qualified # ๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง family: man, girl, girl +1F469 200D 1F466 ; fully-qualified # ๐Ÿ‘ฉโ€๐Ÿ‘ฆ family: woman, boy +1F469 200D 1F466 200D 1F466 ; fully-qualified # ๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ family: woman, boy, boy +1F469 200D 1F467 ; fully-qualified # ๐Ÿ‘ฉโ€๐Ÿ‘ง family: woman, girl +1F469 200D 1F467 200D 1F466 ; fully-qualified # ๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ family: woman, girl, boy +1F469 200D 1F467 200D 1F467 ; fully-qualified # ๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง family: woman, girl, girl + +# subgroup: body +1F933 ; fully-qualified # ๐Ÿคณ selfie +1F933 1F3FB ; fully-qualified # ๐Ÿคณ๐Ÿป selfie: light skin tone +1F933 1F3FC ; fully-qualified # ๐Ÿคณ๐Ÿผ selfie: medium-light skin tone +1F933 1F3FD ; fully-qualified # ๐Ÿคณ๐Ÿฝ selfie: medium skin tone +1F933 1F3FE ; fully-qualified # ๐Ÿคณ๐Ÿพ selfie: medium-dark skin tone +1F933 1F3FF ; fully-qualified # ๐Ÿคณ๐Ÿฟ selfie: dark skin tone +1F4AA ; fully-qualified # ๐Ÿ’ช flexed biceps +1F4AA 1F3FB ; fully-qualified # ๐Ÿ’ช๐Ÿป flexed biceps: light skin tone +1F4AA 1F3FC ; fully-qualified # ๐Ÿ’ช๐Ÿผ flexed biceps: medium-light skin tone +1F4AA 1F3FD ; fully-qualified # ๐Ÿ’ช๐Ÿฝ flexed biceps: medium skin tone +1F4AA 1F3FE ; fully-qualified # ๐Ÿ’ช๐Ÿพ flexed biceps: medium-dark skin tone +1F4AA 1F3FF ; fully-qualified # ๐Ÿ’ช๐Ÿฟ flexed biceps: dark skin tone +1F9B5 ; fully-qualified # ๐Ÿฆต leg +1F9B5 1F3FB ; fully-qualified # ๐Ÿฆต๐Ÿป leg: light skin tone +1F9B5 1F3FC ; fully-qualified # ๐Ÿฆต๐Ÿผ leg: medium-light skin tone +1F9B5 1F3FD ; fully-qualified # ๐Ÿฆต๐Ÿฝ leg: medium skin tone +1F9B5 1F3FE ; fully-qualified # ๐Ÿฆต๐Ÿพ leg: medium-dark skin tone +1F9B5 1F3FF ; fully-qualified # ๐Ÿฆต๐Ÿฟ leg: dark skin tone +1F9B6 ; fully-qualified # ๐Ÿฆถ foot +1F9B6 1F3FB ; fully-qualified # ๐Ÿฆถ๐Ÿป foot: light skin tone +1F9B6 1F3FC ; fully-qualified # ๐Ÿฆถ๐Ÿผ foot: medium-light skin tone +1F9B6 1F3FD ; fully-qualified # ๐Ÿฆถ๐Ÿฝ foot: medium skin tone +1F9B6 1F3FE ; fully-qualified # ๐Ÿฆถ๐Ÿพ foot: medium-dark skin tone +1F9B6 1F3FF ; fully-qualified # ๐Ÿฆถ๐Ÿฟ foot: dark skin tone +1F448 ; fully-qualified # ๐Ÿ‘ˆ backhand index pointing left +1F448 1F3FB ; fully-qualified # ๐Ÿ‘ˆ๐Ÿป backhand index pointing left: light skin tone +1F448 1F3FC ; fully-qualified # ๐Ÿ‘ˆ๐Ÿผ backhand index pointing left: medium-light skin tone +1F448 1F3FD ; fully-qualified # ๐Ÿ‘ˆ๐Ÿฝ backhand index pointing left: medium skin tone +1F448 1F3FE ; fully-qualified # ๐Ÿ‘ˆ๐Ÿพ backhand index pointing left: medium-dark skin tone +1F448 1F3FF ; fully-qualified # ๐Ÿ‘ˆ๐Ÿฟ backhand index pointing left: dark skin tone +1F449 ; fully-qualified # ๐Ÿ‘‰ backhand index pointing right +1F449 1F3FB ; fully-qualified # ๐Ÿ‘‰๐Ÿป backhand index pointing right: light skin tone +1F449 1F3FC ; fully-qualified # ๐Ÿ‘‰๐Ÿผ backhand index pointing right: medium-light skin tone +1F449 1F3FD ; fully-qualified # ๐Ÿ‘‰๐Ÿฝ backhand index pointing right: medium skin tone +1F449 1F3FE ; fully-qualified # ๐Ÿ‘‰๐Ÿพ backhand index pointing right: medium-dark skin tone +1F449 1F3FF ; fully-qualified # ๐Ÿ‘‰๐Ÿฟ backhand index pointing right: dark skin tone +261D FE0F ; fully-qualified # โ˜๏ธ index pointing up +261D ; non-fully-qualified # โ˜ index pointing up +261D 1F3FB ; fully-qualified # โ˜๐Ÿป index pointing up: light skin tone +261D 1F3FC ; fully-qualified # โ˜๐Ÿผ index pointing up: medium-light skin tone +261D 1F3FD ; fully-qualified # โ˜๐Ÿฝ index pointing up: medium skin tone +261D 1F3FE ; fully-qualified # โ˜๐Ÿพ index pointing up: medium-dark skin tone +261D 1F3FF ; fully-qualified # โ˜๐Ÿฟ index pointing up: dark skin tone +1F446 ; fully-qualified # ๐Ÿ‘† backhand index pointing up +1F446 1F3FB ; fully-qualified # ๐Ÿ‘†๐Ÿป backhand index pointing up: light skin tone +1F446 1F3FC ; fully-qualified # ๐Ÿ‘†๐Ÿผ backhand index pointing up: medium-light skin tone +1F446 1F3FD ; fully-qualified # ๐Ÿ‘†๐Ÿฝ backhand index pointing up: medium skin tone +1F446 1F3FE ; fully-qualified # ๐Ÿ‘†๐Ÿพ backhand index pointing up: medium-dark skin tone +1F446 1F3FF ; fully-qualified # ๐Ÿ‘†๐Ÿฟ backhand index pointing up: dark skin tone +1F595 ; fully-qualified # ๐Ÿ–• middle finger +1F595 1F3FB ; fully-qualified # ๐Ÿ–•๐Ÿป middle finger: light skin tone +1F595 1F3FC ; fully-qualified # ๐Ÿ–•๐Ÿผ middle finger: medium-light skin tone +1F595 1F3FD ; fully-qualified # ๐Ÿ–•๐Ÿฝ middle finger: medium skin tone +1F595 1F3FE ; fully-qualified # ๐Ÿ–•๐Ÿพ middle finger: medium-dark skin tone +1F595 1F3FF ; fully-qualified # ๐Ÿ–•๐Ÿฟ middle finger: dark skin tone +1F447 ; fully-qualified # ๐Ÿ‘‡ backhand index pointing down +1F447 1F3FB ; fully-qualified # ๐Ÿ‘‡๐Ÿป backhand index pointing down: light skin tone +1F447 1F3FC ; fully-qualified # ๐Ÿ‘‡๐Ÿผ backhand index pointing down: medium-light skin tone +1F447 1F3FD ; fully-qualified # ๐Ÿ‘‡๐Ÿฝ backhand index pointing down: medium skin tone +1F447 1F3FE ; fully-qualified # ๐Ÿ‘‡๐Ÿพ backhand index pointing down: medium-dark skin tone +1F447 1F3FF ; fully-qualified # ๐Ÿ‘‡๐Ÿฟ backhand index pointing down: dark skin tone +270C FE0F ; fully-qualified # โœŒ๏ธ victory hand +270C ; non-fully-qualified # โœŒ victory hand +270C 1F3FB ; fully-qualified # โœŒ๐Ÿป victory hand: light skin tone +270C 1F3FC ; fully-qualified # โœŒ๐Ÿผ victory hand: medium-light skin tone +270C 1F3FD ; fully-qualified # โœŒ๐Ÿฝ victory hand: medium skin tone +270C 1F3FE ; fully-qualified # โœŒ๐Ÿพ victory hand: medium-dark skin tone +270C 1F3FF ; fully-qualified # โœŒ๐Ÿฟ victory hand: dark skin tone +1F91E ; fully-qualified # ๐Ÿคž crossed fingers +1F91E 1F3FB ; fully-qualified # ๐Ÿคž๐Ÿป crossed fingers: light skin tone +1F91E 1F3FC ; fully-qualified # ๐Ÿคž๐Ÿผ crossed fingers: medium-light skin tone +1F91E 1F3FD ; fully-qualified # ๐Ÿคž๐Ÿฝ crossed fingers: medium skin tone +1F91E 1F3FE ; fully-qualified # ๐Ÿคž๐Ÿพ crossed fingers: medium-dark skin tone +1F91E 1F3FF ; fully-qualified # ๐Ÿคž๐Ÿฟ crossed fingers: dark skin tone +1F596 ; fully-qualified # ๐Ÿ–– vulcan salute +1F596 1F3FB ; fully-qualified # ๐Ÿ––๐Ÿป vulcan salute: light skin tone +1F596 1F3FC ; fully-qualified # ๐Ÿ––๐Ÿผ vulcan salute: medium-light skin tone +1F596 1F3FD ; fully-qualified # ๐Ÿ––๐Ÿฝ vulcan salute: medium skin tone +1F596 1F3FE ; fully-qualified # ๐Ÿ––๐Ÿพ vulcan salute: medium-dark skin tone +1F596 1F3FF ; fully-qualified # ๐Ÿ––๐Ÿฟ vulcan salute: dark skin tone +1F918 ; fully-qualified # ๐Ÿค˜ sign of the horns +1F918 1F3FB ; fully-qualified # ๐Ÿค˜๐Ÿป sign of the horns: light skin tone +1F918 1F3FC ; fully-qualified # ๐Ÿค˜๐Ÿผ sign of the horns: medium-light skin tone +1F918 1F3FD ; fully-qualified # ๐Ÿค˜๐Ÿฝ sign of the horns: medium skin tone +1F918 1F3FE ; fully-qualified # ๐Ÿค˜๐Ÿพ sign of the horns: medium-dark skin tone +1F918 1F3FF ; fully-qualified # ๐Ÿค˜๐Ÿฟ sign of the horns: dark skin tone +1F919 ; fully-qualified # ๐Ÿค™ call me hand +1F919 1F3FB ; fully-qualified # ๐Ÿค™๐Ÿป call me hand: light skin tone +1F919 1F3FC ; fully-qualified # ๐Ÿค™๐Ÿผ call me hand: medium-light skin tone +1F919 1F3FD ; fully-qualified # ๐Ÿค™๐Ÿฝ call me hand: medium skin tone +1F919 1F3FE ; fully-qualified # ๐Ÿค™๐Ÿพ call me hand: medium-dark skin tone +1F919 1F3FF ; fully-qualified # ๐Ÿค™๐Ÿฟ call me hand: dark skin tone +1F590 FE0F ; fully-qualified # ๐Ÿ–๏ธ hand with fingers splayed +1F590 ; non-fully-qualified # ๐Ÿ– hand with fingers splayed +1F590 1F3FB ; fully-qualified # ๐Ÿ–๐Ÿป hand with fingers splayed: light skin tone +1F590 1F3FC ; fully-qualified # ๐Ÿ–๐Ÿผ hand with fingers splayed: medium-light skin tone +1F590 1F3FD ; fully-qualified # ๐Ÿ–๐Ÿฝ hand with fingers splayed: medium skin tone +1F590 1F3FE ; fully-qualified # ๐Ÿ–๐Ÿพ hand with fingers splayed: medium-dark skin tone +1F590 1F3FF ; fully-qualified # ๐Ÿ–๐Ÿฟ hand with fingers splayed: dark skin tone +270B ; fully-qualified # โœ‹ raised hand +270B 1F3FB ; fully-qualified # โœ‹๐Ÿป raised hand: light skin tone +270B 1F3FC ; fully-qualified # โœ‹๐Ÿผ raised hand: medium-light skin tone +270B 1F3FD ; fully-qualified # โœ‹๐Ÿฝ raised hand: medium skin tone +270B 1F3FE ; fully-qualified # โœ‹๐Ÿพ raised hand: medium-dark skin tone +270B 1F3FF ; fully-qualified # โœ‹๐Ÿฟ raised hand: dark skin tone +1F44C ; fully-qualified # ๐Ÿ‘Œ OK hand +1F44C 1F3FB ; fully-qualified # ๐Ÿ‘Œ๐Ÿป OK hand: light skin tone +1F44C 1F3FC ; fully-qualified # ๐Ÿ‘Œ๐Ÿผ OK hand: medium-light skin tone +1F44C 1F3FD ; fully-qualified # ๐Ÿ‘Œ๐Ÿฝ OK hand: medium skin tone +1F44C 1F3FE ; fully-qualified # ๐Ÿ‘Œ๐Ÿพ OK hand: medium-dark skin tone +1F44C 1F3FF ; fully-qualified # ๐Ÿ‘Œ๐Ÿฟ OK hand: dark skin tone +1F44D ; fully-qualified # ๐Ÿ‘ thumbs up +1F44D 1F3FB ; fully-qualified # ๐Ÿ‘๐Ÿป thumbs up: light skin tone +1F44D 1F3FC ; fully-qualified # ๐Ÿ‘๐Ÿผ thumbs up: medium-light skin tone +1F44D 1F3FD ; fully-qualified # ๐Ÿ‘๐Ÿฝ thumbs up: medium skin tone +1F44D 1F3FE ; fully-qualified # ๐Ÿ‘๐Ÿพ thumbs up: medium-dark skin tone +1F44D 1F3FF ; fully-qualified # ๐Ÿ‘๐Ÿฟ thumbs up: dark skin tone +1F44E ; fully-qualified # ๐Ÿ‘Ž thumbs down +1F44E 1F3FB ; fully-qualified # ๐Ÿ‘Ž๐Ÿป thumbs down: light skin tone +1F44E 1F3FC ; fully-qualified # ๐Ÿ‘Ž๐Ÿผ thumbs down: medium-light skin tone +1F44E 1F3FD ; fully-qualified # ๐Ÿ‘Ž๐Ÿฝ thumbs down: medium skin tone +1F44E 1F3FE ; fully-qualified # ๐Ÿ‘Ž๐Ÿพ thumbs down: medium-dark skin tone +1F44E 1F3FF ; fully-qualified # ๐Ÿ‘Ž๐Ÿฟ thumbs down: dark skin tone +270A ; fully-qualified # โœŠ raised fist +270A 1F3FB ; fully-qualified # โœŠ๐Ÿป raised fist: light skin tone +270A 1F3FC ; fully-qualified # โœŠ๐Ÿผ raised fist: medium-light skin tone +270A 1F3FD ; fully-qualified # โœŠ๐Ÿฝ raised fist: medium skin tone +270A 1F3FE ; fully-qualified # โœŠ๐Ÿพ raised fist: medium-dark skin tone +270A 1F3FF ; fully-qualified # โœŠ๐Ÿฟ raised fist: dark skin tone +1F44A ; fully-qualified # ๐Ÿ‘Š oncoming fist +1F44A 1F3FB ; fully-qualified # ๐Ÿ‘Š๐Ÿป oncoming fist: light skin tone +1F44A 1F3FC ; fully-qualified # ๐Ÿ‘Š๐Ÿผ oncoming fist: medium-light skin tone +1F44A 1F3FD ; fully-qualified # ๐Ÿ‘Š๐Ÿฝ oncoming fist: medium skin tone +1F44A 1F3FE ; fully-qualified # ๐Ÿ‘Š๐Ÿพ oncoming fist: medium-dark skin tone +1F44A 1F3FF ; fully-qualified # ๐Ÿ‘Š๐Ÿฟ oncoming fist: dark skin tone +1F91B ; fully-qualified # ๐Ÿค› left-facing fist +1F91B 1F3FB ; fully-qualified # ๐Ÿค›๐Ÿป left-facing fist: light skin tone +1F91B 1F3FC ; fully-qualified # ๐Ÿค›๐Ÿผ left-facing fist: medium-light skin tone +1F91B 1F3FD ; fully-qualified # ๐Ÿค›๐Ÿฝ left-facing fist: medium skin tone +1F91B 1F3FE ; fully-qualified # ๐Ÿค›๐Ÿพ left-facing fist: medium-dark skin tone +1F91B 1F3FF ; fully-qualified # ๐Ÿค›๐Ÿฟ left-facing fist: dark skin tone +1F91C ; fully-qualified # ๐Ÿคœ right-facing fist +1F91C 1F3FB ; fully-qualified # ๐Ÿคœ๐Ÿป right-facing fist: light skin tone +1F91C 1F3FC ; fully-qualified # ๐Ÿคœ๐Ÿผ right-facing fist: medium-light skin tone +1F91C 1F3FD ; fully-qualified # ๐Ÿคœ๐Ÿฝ right-facing fist: medium skin tone +1F91C 1F3FE ; fully-qualified # ๐Ÿคœ๐Ÿพ right-facing fist: medium-dark skin tone +1F91C 1F3FF ; fully-qualified # ๐Ÿคœ๐Ÿฟ right-facing fist: dark skin tone +1F91A ; fully-qualified # ๐Ÿคš raised back of hand +1F91A 1F3FB ; fully-qualified # ๐Ÿคš๐Ÿป raised back of hand: light skin tone +1F91A 1F3FC ; fully-qualified # ๐Ÿคš๐Ÿผ raised back of hand: medium-light skin tone +1F91A 1F3FD ; fully-qualified # ๐Ÿคš๐Ÿฝ raised back of hand: medium skin tone +1F91A 1F3FE ; fully-qualified # ๐Ÿคš๐Ÿพ raised back of hand: medium-dark skin tone +1F91A 1F3FF ; fully-qualified # ๐Ÿคš๐Ÿฟ raised back of hand: dark skin tone +1F44B ; fully-qualified # ๐Ÿ‘‹ waving hand +1F44B 1F3FB ; fully-qualified # ๐Ÿ‘‹๐Ÿป waving hand: light skin tone +1F44B 1F3FC ; fully-qualified # ๐Ÿ‘‹๐Ÿผ waving hand: medium-light skin tone +1F44B 1F3FD ; fully-qualified # ๐Ÿ‘‹๐Ÿฝ waving hand: medium skin tone +1F44B 1F3FE ; fully-qualified # ๐Ÿ‘‹๐Ÿพ waving hand: medium-dark skin tone +1F44B 1F3FF ; fully-qualified # ๐Ÿ‘‹๐Ÿฟ waving hand: dark skin tone +1F91F ; fully-qualified # ๐ŸคŸ love-you gesture +1F91F 1F3FB ; fully-qualified # ๐ŸคŸ๐Ÿป love-you gesture: light skin tone +1F91F 1F3FC ; fully-qualified # ๐ŸคŸ๐Ÿผ love-you gesture: medium-light skin tone +1F91F 1F3FD ; fully-qualified # ๐ŸคŸ๐Ÿฝ love-you gesture: medium skin tone +1F91F 1F3FE ; fully-qualified # ๐ŸคŸ๐Ÿพ love-you gesture: medium-dark skin tone +1F91F 1F3FF ; fully-qualified # ๐ŸคŸ๐Ÿฟ love-you gesture: dark skin tone +270D FE0F ; fully-qualified # โœ๏ธ writing hand +270D ; non-fully-qualified # โœ writing hand +270D 1F3FB ; fully-qualified # โœ๐Ÿป writing hand: light skin tone +270D 1F3FC ; fully-qualified # โœ๐Ÿผ writing hand: medium-light skin tone +270D 1F3FD ; fully-qualified # โœ๐Ÿฝ writing hand: medium skin tone +270D 1F3FE ; fully-qualified # โœ๐Ÿพ writing hand: medium-dark skin tone +270D 1F3FF ; fully-qualified # โœ๐Ÿฟ writing hand: dark skin tone +1F44F ; fully-qualified # ๐Ÿ‘ clapping hands +1F44F 1F3FB ; fully-qualified # ๐Ÿ‘๐Ÿป clapping hands: light skin tone +1F44F 1F3FC ; fully-qualified # ๐Ÿ‘๐Ÿผ clapping hands: medium-light skin tone +1F44F 1F3FD ; fully-qualified # ๐Ÿ‘๐Ÿฝ clapping hands: medium skin tone +1F44F 1F3FE ; fully-qualified # ๐Ÿ‘๐Ÿพ clapping hands: medium-dark skin tone +1F44F 1F3FF ; fully-qualified # ๐Ÿ‘๐Ÿฟ clapping hands: dark skin tone +1F450 ; fully-qualified # ๐Ÿ‘ open hands +1F450 1F3FB ; fully-qualified # ๐Ÿ‘๐Ÿป open hands: light skin tone +1F450 1F3FC ; fully-qualified # ๐Ÿ‘๐Ÿผ open hands: medium-light skin tone +1F450 1F3FD ; fully-qualified # ๐Ÿ‘๐Ÿฝ open hands: medium skin tone +1F450 1F3FE ; fully-qualified # ๐Ÿ‘๐Ÿพ open hands: medium-dark skin tone +1F450 1F3FF ; fully-qualified # ๐Ÿ‘๐Ÿฟ open hands: dark skin tone +1F64C ; fully-qualified # ๐Ÿ™Œ raising hands +1F64C 1F3FB ; fully-qualified # ๐Ÿ™Œ๐Ÿป raising hands: light skin tone +1F64C 1F3FC ; fully-qualified # ๐Ÿ™Œ๐Ÿผ raising hands: medium-light skin tone +1F64C 1F3FD ; fully-qualified # ๐Ÿ™Œ๐Ÿฝ raising hands: medium skin tone +1F64C 1F3FE ; fully-qualified # ๐Ÿ™Œ๐Ÿพ raising hands: medium-dark skin tone +1F64C 1F3FF ; fully-qualified # ๐Ÿ™Œ๐Ÿฟ raising hands: dark skin tone +1F932 ; fully-qualified # ๐Ÿคฒ palms up together +1F932 1F3FB ; fully-qualified # ๐Ÿคฒ๐Ÿป palms up together: light skin tone +1F932 1F3FC ; fully-qualified # ๐Ÿคฒ๐Ÿผ palms up together: medium-light skin tone +1F932 1F3FD ; fully-qualified # ๐Ÿคฒ๐Ÿฝ palms up together: medium skin tone +1F932 1F3FE ; fully-qualified # ๐Ÿคฒ๐Ÿพ palms up together: medium-dark skin tone +1F932 1F3FF ; fully-qualified # ๐Ÿคฒ๐Ÿฟ palms up together: dark skin tone +1F64F ; fully-qualified # ๐Ÿ™ folded hands +1F64F 1F3FB ; fully-qualified # ๐Ÿ™๐Ÿป folded hands: light skin tone +1F64F 1F3FC ; fully-qualified # ๐Ÿ™๐Ÿผ folded hands: medium-light skin tone +1F64F 1F3FD ; fully-qualified # ๐Ÿ™๐Ÿฝ folded hands: medium skin tone +1F64F 1F3FE ; fully-qualified # ๐Ÿ™๐Ÿพ folded hands: medium-dark skin tone +1F64F 1F3FF ; fully-qualified # ๐Ÿ™๐Ÿฟ folded hands: dark skin tone +1F91D ; fully-qualified # ๐Ÿค handshake +1F485 ; fully-qualified # ๐Ÿ’… nail polish +1F485 1F3FB ; fully-qualified # ๐Ÿ’…๐Ÿป nail polish: light skin tone +1F485 1F3FC ; fully-qualified # ๐Ÿ’…๐Ÿผ nail polish: medium-light skin tone +1F485 1F3FD ; fully-qualified # ๐Ÿ’…๐Ÿฝ nail polish: medium skin tone +1F485 1F3FE ; fully-qualified # ๐Ÿ’…๐Ÿพ nail polish: medium-dark skin tone +1F485 1F3FF ; fully-qualified # ๐Ÿ’…๐Ÿฟ nail polish: dark skin tone +1F442 ; fully-qualified # ๐Ÿ‘‚ ear +1F442 1F3FB ; fully-qualified # ๐Ÿ‘‚๐Ÿป ear: light skin tone +1F442 1F3FC ; fully-qualified # ๐Ÿ‘‚๐Ÿผ ear: medium-light skin tone +1F442 1F3FD ; fully-qualified # ๐Ÿ‘‚๐Ÿฝ ear: medium skin tone +1F442 1F3FE ; fully-qualified # ๐Ÿ‘‚๐Ÿพ ear: medium-dark skin tone +1F442 1F3FF ; fully-qualified # ๐Ÿ‘‚๐Ÿฟ ear: dark skin tone +1F443 ; fully-qualified # ๐Ÿ‘ƒ nose +1F443 1F3FB ; fully-qualified # ๐Ÿ‘ƒ๐Ÿป nose: light skin tone +1F443 1F3FC ; fully-qualified # ๐Ÿ‘ƒ๐Ÿผ nose: medium-light skin tone +1F443 1F3FD ; fully-qualified # ๐Ÿ‘ƒ๐Ÿฝ nose: medium skin tone +1F443 1F3FE ; fully-qualified # ๐Ÿ‘ƒ๐Ÿพ nose: medium-dark skin tone +1F443 1F3FF ; fully-qualified # ๐Ÿ‘ƒ๐Ÿฟ nose: dark skin tone +1F9B0 ; fully-qualified # ๐Ÿฆฐ red-haired +1F9B1 ; fully-qualified # ๐Ÿฆฑ curly-haired +1F9B2 ; fully-qualified # ๐Ÿฆฒ bald +1F9B3 ; fully-qualified # ๐Ÿฆณ white-haired +1F463 ; fully-qualified # ๐Ÿ‘ฃ footprints +1F440 ; fully-qualified # ๐Ÿ‘€ eyes +1F441 FE0F ; fully-qualified # ๐Ÿ‘๏ธ eye +1F441 ; non-fully-qualified # ๐Ÿ‘ eye +1F441 FE0F 200D 1F5E8 FE0F ; fully-qualified # ๐Ÿ‘๏ธโ€๐Ÿ—จ๏ธ eye in speech bubble +1F441 200D 1F5E8 FE0F ; non-fully-qualified # ๐Ÿ‘โ€๐Ÿ—จ๏ธ eye in speech bubble +1F441 FE0F 200D 1F5E8 ; non-fully-qualified # ๐Ÿ‘๏ธโ€๐Ÿ—จ eye in speech bubble +1F441 200D 1F5E8 ; non-fully-qualified # ๐Ÿ‘โ€๐Ÿ—จ eye in speech bubble +1F9E0 ; fully-qualified # ๐Ÿง  brain +1F9B4 ; fully-qualified # ๐Ÿฆด bone +1F9B7 ; fully-qualified # ๐Ÿฆท tooth +1F445 ; fully-qualified # ๐Ÿ‘… tongue +1F444 ; fully-qualified # ๐Ÿ‘„ mouth + +# subgroup: emotion +1F48B ; fully-qualified # ๐Ÿ’‹ kiss mark +1F498 ; fully-qualified # ๐Ÿ’˜ heart with arrow +2764 FE0F ; fully-qualified # โค๏ธ red heart +2764 ; non-fully-qualified # โค red heart +1F493 ; fully-qualified # ๐Ÿ’“ beating heart +1F494 ; fully-qualified # ๐Ÿ’” broken heart +1F495 ; fully-qualified # ๐Ÿ’• two hearts +1F496 ; fully-qualified # ๐Ÿ’– sparkling heart +1F497 ; fully-qualified # ๐Ÿ’— growing heart +1F499 ; fully-qualified # ๐Ÿ’™ blue heart +1F49A ; fully-qualified # ๐Ÿ’š green heart +1F49B ; fully-qualified # ๐Ÿ’› yellow heart +1F9E1 ; fully-qualified # ๐Ÿงก orange heart +1F49C ; fully-qualified # ๐Ÿ’œ purple heart +1F5A4 ; fully-qualified # ๐Ÿ–ค black heart +1F49D ; fully-qualified # ๐Ÿ’ heart with ribbon +1F49E ; fully-qualified # ๐Ÿ’ž revolving hearts +1F49F ; fully-qualified # ๐Ÿ’Ÿ heart decoration +2763 FE0F ; fully-qualified # โฃ๏ธ heavy heart exclamation +2763 ; non-fully-qualified # โฃ heavy heart exclamation +1F48C ; fully-qualified # ๐Ÿ’Œ love letter +1F4A4 ; fully-qualified # ๐Ÿ’ค zzz +1F4A2 ; fully-qualified # ๐Ÿ’ข anger symbol +1F4A3 ; fully-qualified # ๐Ÿ’ฃ bomb +1F4A5 ; fully-qualified # ๐Ÿ’ฅ collision +1F4A6 ; fully-qualified # ๐Ÿ’ฆ sweat droplets +1F4A8 ; fully-qualified # ๐Ÿ’จ dashing away +1F4AB ; fully-qualified # ๐Ÿ’ซ dizzy +1F4AC ; fully-qualified # ๐Ÿ’ฌ speech balloon +1F5E8 FE0F ; fully-qualified # ๐Ÿ—จ๏ธ left speech bubble +1F5E8 ; non-fully-qualified # ๐Ÿ—จ left speech bubble +1F5EF FE0F ; fully-qualified # ๐Ÿ—ฏ๏ธ right anger bubble +1F5EF ; non-fully-qualified # ๐Ÿ—ฏ right anger bubble +1F4AD ; fully-qualified # ๐Ÿ’ญ thought balloon +1F573 FE0F ; fully-qualified # ๐Ÿ•ณ๏ธ hole +1F573 ; non-fully-qualified # ๐Ÿ•ณ hole + +# subgroup: clothing +1F453 ; fully-qualified # ๐Ÿ‘“ glasses +1F576 FE0F ; fully-qualified # ๐Ÿ•ถ๏ธ sunglasses +1F576 ; non-fully-qualified # ๐Ÿ•ถ sunglasses +1F97D ; fully-qualified # ๐Ÿฅฝ goggles +1F97C ; fully-qualified # ๐Ÿฅผ lab coat +1F454 ; fully-qualified # ๐Ÿ‘” necktie +1F455 ; fully-qualified # ๐Ÿ‘• t-shirt +1F456 ; fully-qualified # ๐Ÿ‘– jeans +1F9E3 ; fully-qualified # ๐Ÿงฃ scarf +1F9E4 ; fully-qualified # ๐Ÿงค gloves +1F9E5 ; fully-qualified # ๐Ÿงฅ coat +1F9E6 ; fully-qualified # ๐Ÿงฆ socks +1F457 ; fully-qualified # ๐Ÿ‘— dress +1F458 ; fully-qualified # ๐Ÿ‘˜ kimono +1F459 ; fully-qualified # ๐Ÿ‘™ bikini +1F45A ; fully-qualified # ๐Ÿ‘š womanโ€™s clothes +1F45B ; fully-qualified # ๐Ÿ‘› purse +1F45C ; fully-qualified # ๐Ÿ‘œ handbag +1F45D ; fully-qualified # ๐Ÿ‘ clutch bag +1F6CD FE0F ; fully-qualified # ๐Ÿ›๏ธ shopping bags +1F6CD ; non-fully-qualified # ๐Ÿ› shopping bags +1F392 ; fully-qualified # ๐ŸŽ’ school backpack +1F45E ; fully-qualified # ๐Ÿ‘ž manโ€™s shoe +1F45F ; fully-qualified # ๐Ÿ‘Ÿ running shoe +1F97E ; fully-qualified # ๐Ÿฅพ hiking boot +1F97F ; fully-qualified # ๐Ÿฅฟ womanโ€™s flat shoe +1F460 ; fully-qualified # ๐Ÿ‘  high-heeled shoe +1F461 ; fully-qualified # ๐Ÿ‘ก womanโ€™s sandal +1F462 ; fully-qualified # ๐Ÿ‘ข womanโ€™s boot +1F451 ; fully-qualified # ๐Ÿ‘‘ crown +1F452 ; fully-qualified # ๐Ÿ‘’ womanโ€™s hat +1F3A9 ; fully-qualified # ๐ŸŽฉ top hat +1F393 ; fully-qualified # ๐ŸŽ“ graduation cap +1F9E2 ; fully-qualified # ๐Ÿงข billed cap +26D1 FE0F ; fully-qualified # โ›‘๏ธ rescue workerโ€™s helmet +26D1 ; non-fully-qualified # โ›‘ rescue workerโ€™s helmet +1F4FF ; fully-qualified # ๐Ÿ“ฟ prayer beads +1F484 ; fully-qualified # ๐Ÿ’„ lipstick +1F48D ; fully-qualified # ๐Ÿ’ ring +1F48E ; fully-qualified # ๐Ÿ’Ž gem stone + +# Smileys & People subtotal: 2210 +# Smileys & People subtotal: 625 w/o modifiers + +# group: Animals & Nature + +# subgroup: animal-mammal +1F435 ; fully-qualified # ๐Ÿต monkey face +1F412 ; fully-qualified # ๐Ÿ’ monkey +1F98D ; fully-qualified # ๐Ÿฆ gorilla +1F436 ; fully-qualified # ๐Ÿถ dog face +1F415 ; fully-qualified # ๐Ÿ• dog +1F429 ; fully-qualified # ๐Ÿฉ poodle +1F43A ; fully-qualified # ๐Ÿบ wolf face +1F98A ; fully-qualified # ๐ŸฆŠ fox face +1F99D ; fully-qualified # ๐Ÿฆ raccoon +1F431 ; fully-qualified # ๐Ÿฑ cat face +1F408 ; fully-qualified # ๐Ÿˆ cat +1F981 ; fully-qualified # ๐Ÿฆ lion face +1F42F ; fully-qualified # ๐Ÿฏ tiger face +1F405 ; fully-qualified # ๐Ÿ… tiger +1F406 ; fully-qualified # ๐Ÿ† leopard +1F434 ; fully-qualified # ๐Ÿด horse face +1F40E ; fully-qualified # ๐ŸŽ horse +1F984 ; fully-qualified # ๐Ÿฆ„ unicorn face +1F993 ; fully-qualified # ๐Ÿฆ“ zebra +1F98C ; fully-qualified # ๐ŸฆŒ deer +1F42E ; fully-qualified # ๐Ÿฎ cow face +1F402 ; fully-qualified # ๐Ÿ‚ ox +1F403 ; fully-qualified # ๐Ÿƒ water buffalo +1F404 ; fully-qualified # ๐Ÿ„ cow +1F437 ; fully-qualified # ๐Ÿท pig face +1F416 ; fully-qualified # ๐Ÿ– pig +1F417 ; fully-qualified # ๐Ÿ— boar +1F43D ; fully-qualified # ๐Ÿฝ pig nose +1F40F ; fully-qualified # ๐Ÿ ram +1F411 ; fully-qualified # ๐Ÿ‘ ewe +1F410 ; fully-qualified # ๐Ÿ goat +1F42A ; fully-qualified # ๐Ÿช camel +1F42B ; fully-qualified # ๐Ÿซ two-hump camel +1F999 ; fully-qualified # ๐Ÿฆ™ llama +1F992 ; fully-qualified # ๐Ÿฆ’ giraffe +1F418 ; fully-qualified # ๐Ÿ˜ elephant +1F98F ; fully-qualified # ๐Ÿฆ rhinoceros +1F99B ; fully-qualified # ๐Ÿฆ› hippopotamus +1F42D ; fully-qualified # ๐Ÿญ mouse face +1F401 ; fully-qualified # ๐Ÿ mouse +1F400 ; fully-qualified # ๐Ÿ€ rat +1F439 ; fully-qualified # ๐Ÿน hamster face +1F430 ; fully-qualified # ๐Ÿฐ rabbit face +1F407 ; fully-qualified # ๐Ÿ‡ rabbit +1F43F FE0F ; fully-qualified # ๐Ÿฟ๏ธ chipmunk +1F43F ; non-fully-qualified # ๐Ÿฟ chipmunk +1F994 ; fully-qualified # ๐Ÿฆ” hedgehog +1F987 ; fully-qualified # ๐Ÿฆ‡ bat +1F43B ; fully-qualified # ๐Ÿป bear face +1F428 ; fully-qualified # ๐Ÿจ koala +1F43C ; fully-qualified # ๐Ÿผ panda face +1F998 ; fully-qualified # ๐Ÿฆ˜ kangaroo +1F9A1 ; fully-qualified # ๐Ÿฆก badger +1F43E ; fully-qualified # ๐Ÿพ paw prints + +# subgroup: animal-bird +1F983 ; fully-qualified # ๐Ÿฆƒ turkey +1F414 ; fully-qualified # ๐Ÿ” chicken +1F413 ; fully-qualified # ๐Ÿ“ rooster +1F423 ; fully-qualified # ๐Ÿฃ hatching chick +1F424 ; fully-qualified # ๐Ÿค baby chick +1F425 ; fully-qualified # ๐Ÿฅ front-facing baby chick +1F426 ; fully-qualified # ๐Ÿฆ bird +1F427 ; fully-qualified # ๐Ÿง penguin +1F54A FE0F ; fully-qualified # ๐Ÿ•Š๏ธ dove +1F54A ; non-fully-qualified # ๐Ÿ•Š dove +1F985 ; fully-qualified # ๐Ÿฆ… eagle +1F986 ; fully-qualified # ๐Ÿฆ† duck +1F9A2 ; fully-qualified # ๐Ÿฆข swan +1F989 ; fully-qualified # ๐Ÿฆ‰ owl +1F99A ; fully-qualified # ๐Ÿฆš peacock +1F99C ; fully-qualified # ๐Ÿฆœ parrot + +# subgroup: animal-amphibian +1F438 ; fully-qualified # ๐Ÿธ frog face + +# subgroup: animal-reptile +1F40A ; fully-qualified # ๐ŸŠ crocodile +1F422 ; fully-qualified # ๐Ÿข turtle +1F98E ; fully-qualified # ๐ŸฆŽ lizard +1F40D ; fully-qualified # ๐Ÿ snake +1F432 ; fully-qualified # ๐Ÿฒ dragon face +1F409 ; fully-qualified # ๐Ÿ‰ dragon +1F995 ; fully-qualified # ๐Ÿฆ• sauropod +1F996 ; fully-qualified # ๐Ÿฆ– T-Rex + +# subgroup: animal-marine +1F433 ; fully-qualified # ๐Ÿณ spouting whale +1F40B ; fully-qualified # ๐Ÿ‹ whale +1F42C ; fully-qualified # ๐Ÿฌ dolphin +1F41F ; fully-qualified # ๐ŸŸ fish +1F420 ; fully-qualified # ๐Ÿ  tropical fish +1F421 ; fully-qualified # ๐Ÿก blowfish +1F988 ; fully-qualified # ๐Ÿฆˆ shark +1F419 ; fully-qualified # ๐Ÿ™ octopus +1F41A ; fully-qualified # ๐Ÿš spiral shell +1F980 ; fully-qualified # ๐Ÿฆ€ crab +1F99E ; fully-qualified # ๐Ÿฆž lobster +1F990 ; fully-qualified # ๐Ÿฆ shrimp +1F991 ; fully-qualified # ๐Ÿฆ‘ squid + +# subgroup: animal-bug +1F40C ; fully-qualified # ๐ŸŒ snail +1F98B ; fully-qualified # ๐Ÿฆ‹ butterfly +1F41B ; fully-qualified # ๐Ÿ› bug +1F41C ; fully-qualified # ๐Ÿœ ant +1F41D ; fully-qualified # ๐Ÿ honeybee +1F41E ; fully-qualified # ๐Ÿž lady beetle +1F997 ; fully-qualified # ๐Ÿฆ— cricket +1F577 FE0F ; fully-qualified # ๐Ÿ•ท๏ธ spider +1F577 ; non-fully-qualified # ๐Ÿ•ท spider +1F578 FE0F ; fully-qualified # ๐Ÿ•ธ๏ธ spider web +1F578 ; non-fully-qualified # ๐Ÿ•ธ spider web +1F982 ; fully-qualified # ๐Ÿฆ‚ scorpion +1F99F ; fully-qualified # ๐ŸฆŸ mosquito +1F9A0 ; fully-qualified # ๐Ÿฆ  microbe + +# subgroup: plant-flower +1F490 ; fully-qualified # ๐Ÿ’ bouquet +1F338 ; fully-qualified # ๐ŸŒธ cherry blossom +1F4AE ; fully-qualified # ๐Ÿ’ฎ white flower +1F3F5 FE0F ; fully-qualified # ๐Ÿต๏ธ rosette +1F3F5 ; non-fully-qualified # ๐Ÿต rosette +1F339 ; fully-qualified # ๐ŸŒน rose +1F940 ; fully-qualified # ๐Ÿฅ€ wilted flower +1F33A ; fully-qualified # ๐ŸŒบ hibiscus +1F33B ; fully-qualified # ๐ŸŒป sunflower +1F33C ; fully-qualified # ๐ŸŒผ blossom +1F337 ; fully-qualified # ๐ŸŒท tulip + +# subgroup: plant-other +1F331 ; fully-qualified # ๐ŸŒฑ seedling +1F332 ; fully-qualified # ๐ŸŒฒ evergreen tree +1F333 ; fully-qualified # ๐ŸŒณ deciduous tree +1F334 ; fully-qualified # ๐ŸŒด palm tree +1F335 ; fully-qualified # ๐ŸŒต cactus +1F33E ; fully-qualified # ๐ŸŒพ sheaf of rice +1F33F ; fully-qualified # ๐ŸŒฟ herb +2618 FE0F ; fully-qualified # โ˜˜๏ธ shamrock +2618 ; non-fully-qualified # โ˜˜ shamrock +1F340 ; fully-qualified # ๐Ÿ€ four leaf clover +1F341 ; fully-qualified # ๐Ÿ maple leaf +1F342 ; fully-qualified # ๐Ÿ‚ fallen leaf +1F343 ; fully-qualified # ๐Ÿƒ leaf fluttering in wind + +# Animals & Nature subtotal: 130 +# Animals & Nature subtotal: 130 w/o modifiers + +# group: Food & Drink + +# subgroup: food-fruit +1F347 ; fully-qualified # ๐Ÿ‡ grapes +1F348 ; fully-qualified # ๐Ÿˆ melon +1F349 ; fully-qualified # ๐Ÿ‰ watermelon +1F34A ; fully-qualified # ๐ŸŠ tangerine +1F34B ; fully-qualified # ๐Ÿ‹ lemon +1F34C ; fully-qualified # ๐ŸŒ banana +1F34D ; fully-qualified # ๐Ÿ pineapple +1F96D ; fully-qualified # ๐Ÿฅญ mango +1F34E ; fully-qualified # ๐ŸŽ red apple +1F34F ; fully-qualified # ๐Ÿ green apple +1F350 ; fully-qualified # ๐Ÿ pear +1F351 ; fully-qualified # ๐Ÿ‘ peach +1F352 ; fully-qualified # ๐Ÿ’ cherries +1F353 ; fully-qualified # ๐Ÿ“ strawberry +1F95D ; fully-qualified # ๐Ÿฅ kiwi fruit +1F345 ; fully-qualified # ๐Ÿ… tomato +1F965 ; fully-qualified # ๐Ÿฅฅ coconut + +# subgroup: food-vegetable +1F951 ; fully-qualified # ๐Ÿฅ‘ avocado +1F346 ; fully-qualified # ๐Ÿ† eggplant +1F954 ; fully-qualified # ๐Ÿฅ” potato +1F955 ; fully-qualified # ๐Ÿฅ• carrot +1F33D ; fully-qualified # ๐ŸŒฝ ear of corn +1F336 FE0F ; fully-qualified # ๐ŸŒถ๏ธ hot pepper +1F336 ; non-fully-qualified # ๐ŸŒถ hot pepper +1F952 ; fully-qualified # ๐Ÿฅ’ cucumber +1F96C ; fully-qualified # ๐Ÿฅฌ leafy green +1F966 ; fully-qualified # ๐Ÿฅฆ broccoli +1F344 ; fully-qualified # ๐Ÿ„ mushroom +1F95C ; fully-qualified # ๐Ÿฅœ peanuts +1F330 ; fully-qualified # ๐ŸŒฐ chestnut + +# subgroup: food-prepared +1F35E ; fully-qualified # ๐Ÿž bread +1F950 ; fully-qualified # ๐Ÿฅ croissant +1F956 ; fully-qualified # ๐Ÿฅ– baguette bread +1F968 ; fully-qualified # ๐Ÿฅจ pretzel +1F96F ; fully-qualified # ๐Ÿฅฏ bagel +1F95E ; fully-qualified # ๐Ÿฅž pancakes +1F9C0 ; fully-qualified # ๐Ÿง€ cheese wedge +1F356 ; fully-qualified # ๐Ÿ– meat on bone +1F357 ; fully-qualified # ๐Ÿ— poultry leg +1F969 ; fully-qualified # ๐Ÿฅฉ cut of meat +1F953 ; fully-qualified # ๐Ÿฅ“ bacon +1F354 ; fully-qualified # ๐Ÿ” hamburger +1F35F ; fully-qualified # ๐ŸŸ french fries +1F355 ; fully-qualified # ๐Ÿ• pizza +1F32D ; fully-qualified # ๐ŸŒญ hot dog +1F96A ; fully-qualified # ๐Ÿฅช sandwich +1F32E ; fully-qualified # ๐ŸŒฎ taco +1F32F ; fully-qualified # ๐ŸŒฏ burrito +1F959 ; fully-qualified # ๐Ÿฅ™ stuffed flatbread +1F95A ; fully-qualified # ๐Ÿฅš egg +1F373 ; fully-qualified # ๐Ÿณ cooking +1F958 ; fully-qualified # ๐Ÿฅ˜ shallow pan of food +1F372 ; fully-qualified # ๐Ÿฒ pot of food +1F963 ; fully-qualified # ๐Ÿฅฃ bowl with spoon +1F957 ; fully-qualified # ๐Ÿฅ— green salad +1F37F ; fully-qualified # ๐Ÿฟ popcorn +1F9C2 ; fully-qualified # ๐Ÿง‚ salt +1F96B ; fully-qualified # ๐Ÿฅซ canned food + +# subgroup: food-asian +1F371 ; fully-qualified # ๐Ÿฑ bento box +1F358 ; fully-qualified # ๐Ÿ˜ rice cracker +1F359 ; fully-qualified # ๐Ÿ™ rice ball +1F35A ; fully-qualified # ๐Ÿš cooked rice +1F35B ; fully-qualified # ๐Ÿ› curry rice +1F35C ; fully-qualified # ๐Ÿœ steaming bowl +1F35D ; fully-qualified # ๐Ÿ spaghetti +1F360 ; fully-qualified # ๐Ÿ  roasted sweet potato +1F362 ; fully-qualified # ๐Ÿข oden +1F363 ; fully-qualified # ๐Ÿฃ sushi +1F364 ; fully-qualified # ๐Ÿค fried shrimp +1F365 ; fully-qualified # ๐Ÿฅ fish cake with swirl +1F96E ; fully-qualified # ๐Ÿฅฎ moon cake +1F361 ; fully-qualified # ๐Ÿก dango +1F95F ; fully-qualified # ๐ŸฅŸ dumpling +1F960 ; fully-qualified # ๐Ÿฅ  fortune cookie +1F961 ; fully-qualified # ๐Ÿฅก takeout box + +# subgroup: food-sweet +1F366 ; fully-qualified # ๐Ÿฆ soft ice cream +1F367 ; fully-qualified # ๐Ÿง shaved ice +1F368 ; fully-qualified # ๐Ÿจ ice cream +1F369 ; fully-qualified # ๐Ÿฉ doughnut +1F36A ; fully-qualified # ๐Ÿช cookie +1F382 ; fully-qualified # ๐ŸŽ‚ birthday cake +1F370 ; fully-qualified # ๐Ÿฐ shortcake +1F9C1 ; fully-qualified # ๐Ÿง cupcake +1F967 ; fully-qualified # ๐Ÿฅง pie +1F36B ; fully-qualified # ๐Ÿซ chocolate bar +1F36C ; fully-qualified # ๐Ÿฌ candy +1F36D ; fully-qualified # ๐Ÿญ lollipop +1F36E ; fully-qualified # ๐Ÿฎ custard +1F36F ; fully-qualified # ๐Ÿฏ honey pot + +# subgroup: drink +1F37C ; fully-qualified # ๐Ÿผ baby bottle +1F95B ; fully-qualified # ๐Ÿฅ› glass of milk +2615 ; fully-qualified # โ˜• hot beverage +1F375 ; fully-qualified # ๐Ÿต teacup without handle +1F376 ; fully-qualified # ๐Ÿถ sake +1F37E ; fully-qualified # ๐Ÿพ bottle with popping cork +1F377 ; fully-qualified # ๐Ÿท wine glass +1F378 ; fully-qualified # ๐Ÿธ cocktail glass +1F379 ; fully-qualified # ๐Ÿน tropical drink +1F37A ; fully-qualified # ๐Ÿบ beer mug +1F37B ; fully-qualified # ๐Ÿป clinking beer mugs +1F942 ; fully-qualified # ๐Ÿฅ‚ clinking glasses +1F943 ; fully-qualified # ๐Ÿฅƒ tumbler glass +1F964 ; fully-qualified # ๐Ÿฅค cup with straw + +# subgroup: dishware +1F962 ; fully-qualified # ๐Ÿฅข chopsticks +1F37D FE0F ; fully-qualified # ๐Ÿฝ๏ธ fork and knife with plate +1F37D ; non-fully-qualified # ๐Ÿฝ fork and knife with plate +1F374 ; fully-qualified # ๐Ÿด fork and knife +1F944 ; fully-qualified # ๐Ÿฅ„ spoon +1F52A ; fully-qualified # ๐Ÿ”ช kitchen knife +1F3FA ; fully-qualified # ๐Ÿบ amphora + +# Food & Drink subtotal: 110 +# Food & Drink subtotal: 110 w/o modifiers + +# group: Travel & Places + +# subgroup: place-map +1F30D ; fully-qualified # ๐ŸŒ globe showing Europe-Africa +1F30E ; fully-qualified # ๐ŸŒŽ globe showing Americas +1F30F ; fully-qualified # ๐ŸŒ globe showing Asia-Australia +1F310 ; fully-qualified # ๐ŸŒ globe with meridians +1F5FA FE0F ; fully-qualified # ๐Ÿ—บ๏ธ world map +1F5FA ; non-fully-qualified # ๐Ÿ—บ world map +1F5FE ; fully-qualified # ๐Ÿ—พ map of Japan +1F9ED ; fully-qualified # ๐Ÿงญ compass + +# subgroup: place-geographic +1F3D4 FE0F ; fully-qualified # ๐Ÿ”๏ธ snow-capped mountain +1F3D4 ; non-fully-qualified # ๐Ÿ” snow-capped mountain +26F0 FE0F ; fully-qualified # โ›ฐ๏ธ mountain +26F0 ; non-fully-qualified # โ›ฐ mountain +1F30B ; fully-qualified # ๐ŸŒ‹ volcano +1F5FB ; fully-qualified # ๐Ÿ—ป mount fuji +1F3D5 FE0F ; fully-qualified # ๐Ÿ•๏ธ camping +1F3D5 ; non-fully-qualified # ๐Ÿ• camping +1F3D6 FE0F ; fully-qualified # ๐Ÿ–๏ธ beach with umbrella +1F3D6 ; non-fully-qualified # ๐Ÿ– beach with umbrella +1F3DC FE0F ; fully-qualified # ๐Ÿœ๏ธ desert +1F3DC ; non-fully-qualified # ๐Ÿœ desert +1F3DD FE0F ; fully-qualified # ๐Ÿ๏ธ desert island +1F3DD ; non-fully-qualified # ๐Ÿ desert island +1F3DE FE0F ; fully-qualified # ๐Ÿž๏ธ national park +1F3DE ; non-fully-qualified # ๐Ÿž national park + +# subgroup: place-building +1F3DF FE0F ; fully-qualified # ๐ŸŸ๏ธ stadium +1F3DF ; non-fully-qualified # ๐ŸŸ stadium +1F3DB FE0F ; fully-qualified # ๐Ÿ›๏ธ classical building +1F3DB ; non-fully-qualified # ๐Ÿ› classical building +1F3D7 FE0F ; fully-qualified # ๐Ÿ—๏ธ building construction +1F3D7 ; non-fully-qualified # ๐Ÿ— building construction +1F9F1 ; fully-qualified # ๐Ÿงฑ bricks +1F3D8 FE0F ; fully-qualified # ๐Ÿ˜๏ธ houses +1F3D8 ; non-fully-qualified # ๐Ÿ˜ houses +1F3DA FE0F ; fully-qualified # ๐Ÿš๏ธ derelict house +1F3DA ; non-fully-qualified # ๐Ÿš derelict house +1F3E0 ; fully-qualified # ๐Ÿ  house +1F3E1 ; fully-qualified # ๐Ÿก house with garden +1F3E2 ; fully-qualified # ๐Ÿข office building +1F3E3 ; fully-qualified # ๐Ÿฃ Japanese post office +1F3E4 ; fully-qualified # ๐Ÿค post office +1F3E5 ; fully-qualified # ๐Ÿฅ hospital +1F3E6 ; fully-qualified # ๐Ÿฆ bank +1F3E8 ; fully-qualified # ๐Ÿจ hotel +1F3E9 ; fully-qualified # ๐Ÿฉ love hotel +1F3EA ; fully-qualified # ๐Ÿช convenience store +1F3EB ; fully-qualified # ๐Ÿซ school +1F3EC ; fully-qualified # ๐Ÿฌ department store +1F3ED ; fully-qualified # ๐Ÿญ factory +1F3EF ; fully-qualified # ๐Ÿฏ Japanese castle +1F3F0 ; fully-qualified # ๐Ÿฐ castle +1F492 ; fully-qualified # ๐Ÿ’’ wedding +1F5FC ; fully-qualified # ๐Ÿ—ผ Tokyo tower +1F5FD ; fully-qualified # ๐Ÿ—ฝ Statue of Liberty + +# subgroup: place-religious +26EA ; fully-qualified # โ›ช church +1F54C ; fully-qualified # ๐Ÿ•Œ mosque +1F54D ; fully-qualified # ๐Ÿ• synagogue +26E9 FE0F ; fully-qualified # โ›ฉ๏ธ shinto shrine +26E9 ; non-fully-qualified # โ›ฉ shinto shrine +1F54B ; fully-qualified # ๐Ÿ•‹ kaaba + +# subgroup: place-other +26F2 ; fully-qualified # โ›ฒ fountain +26FA ; fully-qualified # โ›บ tent +1F301 ; fully-qualified # ๐ŸŒ foggy +1F303 ; fully-qualified # ๐ŸŒƒ night with stars +1F3D9 FE0F ; fully-qualified # ๐Ÿ™๏ธ cityscape +1F3D9 ; non-fully-qualified # ๐Ÿ™ cityscape +1F304 ; fully-qualified # ๐ŸŒ„ sunrise over mountains +1F305 ; fully-qualified # ๐ŸŒ… sunrise +1F306 ; fully-qualified # ๐ŸŒ† cityscape at dusk +1F307 ; fully-qualified # ๐ŸŒ‡ sunset +1F309 ; fully-qualified # ๐ŸŒ‰ bridge at night +2668 FE0F ; fully-qualified # โ™จ๏ธ hot springs +2668 ; non-fully-qualified # โ™จ hot springs +1F30C ; fully-qualified # ๐ŸŒŒ milky way +1F3A0 ; fully-qualified # ๐ŸŽ  carousel horse +1F3A1 ; fully-qualified # ๐ŸŽก ferris wheel +1F3A2 ; fully-qualified # ๐ŸŽข roller coaster +1F488 ; fully-qualified # ๐Ÿ’ˆ barber pole +1F3AA ; fully-qualified # ๐ŸŽช circus tent + +# subgroup: transport-ground +1F682 ; fully-qualified # ๐Ÿš‚ locomotive +1F683 ; fully-qualified # ๐Ÿšƒ railway car +1F684 ; fully-qualified # ๐Ÿš„ high-speed train +1F685 ; fully-qualified # ๐Ÿš… bullet train +1F686 ; fully-qualified # ๐Ÿš† train +1F687 ; fully-qualified # ๐Ÿš‡ metro +1F688 ; fully-qualified # ๐Ÿšˆ light rail +1F689 ; fully-qualified # ๐Ÿš‰ station +1F68A ; fully-qualified # ๐ŸšŠ tram +1F69D ; fully-qualified # ๐Ÿš monorail +1F69E ; fully-qualified # ๐Ÿšž mountain railway +1F68B ; fully-qualified # ๐Ÿš‹ tram car +1F68C ; fully-qualified # ๐ŸšŒ bus +1F68D ; fully-qualified # ๐Ÿš oncoming bus +1F68E ; fully-qualified # ๐ŸšŽ trolleybus +1F690 ; fully-qualified # ๐Ÿš minibus +1F691 ; fully-qualified # ๐Ÿš‘ ambulance +1F692 ; fully-qualified # ๐Ÿš’ fire engine +1F693 ; fully-qualified # ๐Ÿš“ police car +1F694 ; fully-qualified # ๐Ÿš” oncoming police car +1F695 ; fully-qualified # ๐Ÿš• taxi +1F696 ; fully-qualified # ๐Ÿš– oncoming taxi +1F697 ; fully-qualified # ๐Ÿš— automobile +1F698 ; fully-qualified # ๐Ÿš˜ oncoming automobile +1F699 ; fully-qualified # ๐Ÿš™ sport utility vehicle +1F69A ; fully-qualified # ๐Ÿšš delivery truck +1F69B ; fully-qualified # ๐Ÿš› articulated lorry +1F69C ; fully-qualified # ๐Ÿšœ tractor +1F6B2 ; fully-qualified # ๐Ÿšฒ bicycle +1F6F4 ; fully-qualified # ๐Ÿ›ด kick scooter +1F6F9 ; fully-qualified # ๐Ÿ›น skateboard +1F6F5 ; fully-qualified # ๐Ÿ›ต motor scooter +1F68F ; fully-qualified # ๐Ÿš bus stop +1F6E3 FE0F ; fully-qualified # ๐Ÿ›ฃ๏ธ motorway +1F6E3 ; non-fully-qualified # ๐Ÿ›ฃ motorway +1F6E4 FE0F ; fully-qualified # ๐Ÿ›ค๏ธ railway track +1F6E4 ; non-fully-qualified # ๐Ÿ›ค railway track +1F6E2 FE0F ; fully-qualified # ๐Ÿ›ข๏ธ oil drum +1F6E2 ; non-fully-qualified # ๐Ÿ›ข oil drum +26FD ; fully-qualified # โ›ฝ fuel pump +1F6A8 ; fully-qualified # ๐Ÿšจ police car light +1F6A5 ; fully-qualified # ๐Ÿšฅ horizontal traffic light +1F6A6 ; fully-qualified # ๐Ÿšฆ vertical traffic light +1F6D1 ; fully-qualified # ๐Ÿ›‘ stop sign +1F6A7 ; fully-qualified # ๐Ÿšง construction + +# subgroup: transport-water +2693 ; fully-qualified # โš“ anchor +26F5 ; fully-qualified # โ›ต sailboat +1F6F6 ; fully-qualified # ๐Ÿ›ถ canoe +1F6A4 ; fully-qualified # ๐Ÿšค speedboat +1F6F3 FE0F ; fully-qualified # ๐Ÿ›ณ๏ธ passenger ship +1F6F3 ; non-fully-qualified # ๐Ÿ›ณ passenger ship +26F4 FE0F ; fully-qualified # โ›ด๏ธ ferry +26F4 ; non-fully-qualified # โ›ด ferry +1F6E5 FE0F ; fully-qualified # ๐Ÿ›ฅ๏ธ motor boat +1F6E5 ; non-fully-qualified # ๐Ÿ›ฅ motor boat +1F6A2 ; fully-qualified # ๐Ÿšข ship + +# subgroup: transport-air +2708 FE0F ; fully-qualified # โœˆ๏ธ airplane +2708 ; non-fully-qualified # โœˆ airplane +1F6E9 FE0F ; fully-qualified # ๐Ÿ›ฉ๏ธ small airplane +1F6E9 ; non-fully-qualified # ๐Ÿ›ฉ small airplane +1F6EB ; fully-qualified # ๐Ÿ›ซ airplane departure +1F6EC ; fully-qualified # ๐Ÿ›ฌ airplane arrival +1F4BA ; fully-qualified # ๐Ÿ’บ seat +1F681 ; fully-qualified # ๐Ÿš helicopter +1F69F ; fully-qualified # ๐ŸšŸ suspension railway +1F6A0 ; fully-qualified # ๐Ÿš  mountain cableway +1F6A1 ; fully-qualified # ๐Ÿšก aerial tramway +1F6F0 FE0F ; fully-qualified # ๐Ÿ›ฐ๏ธ satellite +1F6F0 ; non-fully-qualified # ๐Ÿ›ฐ satellite +1F680 ; fully-qualified # ๐Ÿš€ rocket +1F6F8 ; fully-qualified # ๐Ÿ›ธ flying saucer + +# subgroup: hotel +1F6CE FE0F ; fully-qualified # ๐Ÿ›Ž๏ธ bellhop bell +1F6CE ; non-fully-qualified # ๐Ÿ›Ž bellhop bell +1F9F3 ; fully-qualified # ๐Ÿงณ luggage + +# subgroup: time +231B ; fully-qualified # โŒ› hourglass done +23F3 ; fully-qualified # โณ hourglass not done +231A ; fully-qualified # โŒš watch +23F0 ; fully-qualified # โฐ alarm clock +23F1 FE0F ; fully-qualified # โฑ๏ธ stopwatch +23F1 ; non-fully-qualified # โฑ stopwatch +23F2 FE0F ; fully-qualified # โฒ๏ธ timer clock +23F2 ; non-fully-qualified # โฒ timer clock +1F570 FE0F ; fully-qualified # ๐Ÿ•ฐ๏ธ mantelpiece clock +1F570 ; non-fully-qualified # ๐Ÿ•ฐ mantelpiece clock +1F55B ; fully-qualified # ๐Ÿ•› twelve oโ€™clock +1F567 ; fully-qualified # ๐Ÿ•ง twelve-thirty +1F550 ; fully-qualified # ๐Ÿ• one oโ€™clock +1F55C ; fully-qualified # ๐Ÿ•œ one-thirty +1F551 ; fully-qualified # ๐Ÿ•‘ two oโ€™clock +1F55D ; fully-qualified # ๐Ÿ• two-thirty +1F552 ; fully-qualified # ๐Ÿ•’ three oโ€™clock +1F55E ; fully-qualified # ๐Ÿ•ž three-thirty +1F553 ; fully-qualified # ๐Ÿ•“ four oโ€™clock +1F55F ; fully-qualified # ๐Ÿ•Ÿ four-thirty +1F554 ; fully-qualified # ๐Ÿ•” five oโ€™clock +1F560 ; fully-qualified # ๐Ÿ•  five-thirty +1F555 ; fully-qualified # ๐Ÿ•• six oโ€™clock +1F561 ; fully-qualified # ๐Ÿ•ก six-thirty +1F556 ; fully-qualified # ๐Ÿ•– seven oโ€™clock +1F562 ; fully-qualified # ๐Ÿ•ข seven-thirty +1F557 ; fully-qualified # ๐Ÿ•— eight oโ€™clock +1F563 ; fully-qualified # ๐Ÿ•ฃ eight-thirty +1F558 ; fully-qualified # ๐Ÿ•˜ nine oโ€™clock +1F564 ; fully-qualified # ๐Ÿ•ค nine-thirty +1F559 ; fully-qualified # ๐Ÿ•™ ten oโ€™clock +1F565 ; fully-qualified # ๐Ÿ•ฅ ten-thirty +1F55A ; fully-qualified # ๐Ÿ•š eleven oโ€™clock +1F566 ; fully-qualified # ๐Ÿ•ฆ eleven-thirty + +# subgroup: sky & weather +1F311 ; fully-qualified # ๐ŸŒ‘ new moon +1F312 ; fully-qualified # ๐ŸŒ’ waxing crescent moon +1F313 ; fully-qualified # ๐ŸŒ“ first quarter moon +1F314 ; fully-qualified # ๐ŸŒ” waxing gibbous moon +1F315 ; fully-qualified # ๐ŸŒ• full moon +1F316 ; fully-qualified # ๐ŸŒ– waning gibbous moon +1F317 ; fully-qualified # ๐ŸŒ— last quarter moon +1F318 ; fully-qualified # ๐ŸŒ˜ waning crescent moon +1F319 ; fully-qualified # ๐ŸŒ™ crescent moon +1F31A ; fully-qualified # ๐ŸŒš new moon face +1F31B ; fully-qualified # ๐ŸŒ› first quarter moon face +1F31C ; fully-qualified # ๐ŸŒœ last quarter moon face +1F321 FE0F ; fully-qualified # ๐ŸŒก๏ธ thermometer +1F321 ; non-fully-qualified # ๐ŸŒก thermometer +2600 FE0F ; fully-qualified # โ˜€๏ธ sun +2600 ; non-fully-qualified # โ˜€ sun +1F31D ; fully-qualified # ๐ŸŒ full moon face +1F31E ; fully-qualified # ๐ŸŒž sun with face +2B50 ; fully-qualified # โญ star +1F31F ; fully-qualified # ๐ŸŒŸ glowing star +1F320 ; fully-qualified # ๐ŸŒ  shooting star +2601 FE0F ; fully-qualified # โ˜๏ธ cloud +2601 ; non-fully-qualified # โ˜ cloud +26C5 ; fully-qualified # โ›… sun behind cloud +26C8 FE0F ; fully-qualified # โ›ˆ๏ธ cloud with lightning and rain +26C8 ; non-fully-qualified # โ›ˆ cloud with lightning and rain +1F324 FE0F ; fully-qualified # ๐ŸŒค๏ธ sun behind small cloud +1F324 ; non-fully-qualified # ๐ŸŒค sun behind small cloud +1F325 FE0F ; fully-qualified # ๐ŸŒฅ๏ธ sun behind large cloud +1F325 ; non-fully-qualified # ๐ŸŒฅ sun behind large cloud +1F326 FE0F ; fully-qualified # ๐ŸŒฆ๏ธ sun behind rain cloud +1F326 ; non-fully-qualified # ๐ŸŒฆ sun behind rain cloud +1F327 FE0F ; fully-qualified # ๐ŸŒง๏ธ cloud with rain +1F327 ; non-fully-qualified # ๐ŸŒง cloud with rain +1F328 FE0F ; fully-qualified # ๐ŸŒจ๏ธ cloud with snow +1F328 ; non-fully-qualified # ๐ŸŒจ cloud with snow +1F329 FE0F ; fully-qualified # ๐ŸŒฉ๏ธ cloud with lightning +1F329 ; non-fully-qualified # ๐ŸŒฉ cloud with lightning +1F32A FE0F ; fully-qualified # ๐ŸŒช๏ธ tornado +1F32A ; non-fully-qualified # ๐ŸŒช tornado +1F32B FE0F ; fully-qualified # ๐ŸŒซ๏ธ fog +1F32B ; non-fully-qualified # ๐ŸŒซ fog +1F32C FE0F ; fully-qualified # ๐ŸŒฌ๏ธ wind face +1F32C ; non-fully-qualified # ๐ŸŒฌ wind face +1F300 ; fully-qualified # ๐ŸŒ€ cyclone +1F308 ; fully-qualified # ๐ŸŒˆ rainbow +1F302 ; fully-qualified # ๐ŸŒ‚ closed umbrella +2602 FE0F ; fully-qualified # โ˜‚๏ธ umbrella +2602 ; non-fully-qualified # โ˜‚ umbrella +2614 ; fully-qualified # โ˜” umbrella with rain drops +26F1 FE0F ; fully-qualified # โ›ฑ๏ธ umbrella on ground +26F1 ; non-fully-qualified # โ›ฑ umbrella on ground +26A1 ; fully-qualified # โšก high voltage +2744 FE0F ; fully-qualified # โ„๏ธ snowflake +2744 ; non-fully-qualified # โ„ snowflake +2603 FE0F ; fully-qualified # โ˜ƒ๏ธ snowman +2603 ; non-fully-qualified # โ˜ƒ snowman +26C4 ; fully-qualified # โ›„ snowman without snow +2604 FE0F ; fully-qualified # โ˜„๏ธ comet +2604 ; non-fully-qualified # โ˜„ comet +1F525 ; fully-qualified # ๐Ÿ”ฅ fire +1F4A7 ; fully-qualified # ๐Ÿ’ง droplet +1F30A ; fully-qualified # ๐ŸŒŠ water wave + +# Travel & Places subtotal: 249 +# Travel & Places subtotal: 249 w/o modifiers + +# group: Activities + +# subgroup: event +1F383 ; fully-qualified # ๐ŸŽƒ jack-o-lantern +1F384 ; fully-qualified # ๐ŸŽ„ Christmas tree +1F386 ; fully-qualified # ๐ŸŽ† fireworks +1F387 ; fully-qualified # ๐ŸŽ‡ sparkler +1F9E8 ; fully-qualified # ๐Ÿงจ firecracker +2728 ; fully-qualified # โœจ sparkles +1F388 ; fully-qualified # ๐ŸŽˆ balloon +1F389 ; fully-qualified # ๐ŸŽ‰ party popper +1F38A ; fully-qualified # ๐ŸŽŠ confetti ball +1F38B ; fully-qualified # ๐ŸŽ‹ tanabata tree +1F38D ; fully-qualified # ๐ŸŽ pine decoration +1F38E ; fully-qualified # ๐ŸŽŽ Japanese dolls +1F38F ; fully-qualified # ๐ŸŽ carp streamer +1F390 ; fully-qualified # ๐ŸŽ wind chime +1F391 ; fully-qualified # ๐ŸŽ‘ moon viewing ceremony +1F9E7 ; fully-qualified # ๐Ÿงง red envelope +1F380 ; fully-qualified # ๐ŸŽ€ ribbon +1F381 ; fully-qualified # ๐ŸŽ wrapped gift +1F397 FE0F ; fully-qualified # ๐ŸŽ—๏ธ reminder ribbon +1F397 ; non-fully-qualified # ๐ŸŽ— reminder ribbon +1F39F FE0F ; fully-qualified # ๐ŸŽŸ๏ธ admission tickets +1F39F ; non-fully-qualified # ๐ŸŽŸ admission tickets +1F3AB ; fully-qualified # ๐ŸŽซ ticket + +# subgroup: award-medal +1F396 FE0F ; fully-qualified # ๐ŸŽ–๏ธ military medal +1F396 ; non-fully-qualified # ๐ŸŽ– military medal +1F3C6 ; fully-qualified # ๐Ÿ† trophy +1F3C5 ; fully-qualified # ๐Ÿ… sports medal +1F947 ; fully-qualified # ๐Ÿฅ‡ 1st place medal +1F948 ; fully-qualified # ๐Ÿฅˆ 2nd place medal +1F949 ; fully-qualified # ๐Ÿฅ‰ 3rd place medal + +# subgroup: sport +26BD ; fully-qualified # โšฝ soccer ball +26BE ; fully-qualified # โšพ baseball +1F94E ; fully-qualified # ๐ŸฅŽ softball +1F3C0 ; fully-qualified # ๐Ÿ€ basketball +1F3D0 ; fully-qualified # ๐Ÿ volleyball +1F3C8 ; fully-qualified # ๐Ÿˆ american football +1F3C9 ; fully-qualified # ๐Ÿ‰ rugby football +1F3BE ; fully-qualified # ๐ŸŽพ tennis +1F94F ; fully-qualified # ๐Ÿฅ flying disc +1F3B3 ; fully-qualified # ๐ŸŽณ bowling +1F3CF ; fully-qualified # ๐Ÿ cricket game +1F3D1 ; fully-qualified # ๐Ÿ‘ field hockey +1F3D2 ; fully-qualified # ๐Ÿ’ ice hockey +1F94D ; fully-qualified # ๐Ÿฅ lacrosse +1F3D3 ; fully-qualified # ๐Ÿ“ ping pong +1F3F8 ; fully-qualified # ๐Ÿธ badminton +1F94A ; fully-qualified # ๐ŸฅŠ boxing glove +1F94B ; fully-qualified # ๐Ÿฅ‹ martial arts uniform +1F945 ; fully-qualified # ๐Ÿฅ… goal net +26F3 ; fully-qualified # โ›ณ flag in hole +26F8 FE0F ; fully-qualified # โ›ธ๏ธ ice skate +26F8 ; non-fully-qualified # โ›ธ ice skate +1F3A3 ; fully-qualified # ๐ŸŽฃ fishing pole +1F3BD ; fully-qualified # ๐ŸŽฝ running shirt +1F3BF ; fully-qualified # ๐ŸŽฟ skis +1F6F7 ; fully-qualified # ๐Ÿ›ท sled +1F94C ; fully-qualified # ๐ŸฅŒ curling stone + +# subgroup: game +1F3AF ; fully-qualified # ๐ŸŽฏ direct hit +1F3B1 ; fully-qualified # ๐ŸŽฑ pool 8 ball +1F52E ; fully-qualified # ๐Ÿ”ฎ crystal ball +1F9FF ; fully-qualified # ๐Ÿงฟ nazar amulet +1F3AE ; fully-qualified # ๐ŸŽฎ video game +1F579 FE0F ; fully-qualified # ๐Ÿ•น๏ธ joystick +1F579 ; non-fully-qualified # ๐Ÿ•น joystick +1F3B0 ; fully-qualified # ๐ŸŽฐ slot machine +1F3B2 ; fully-qualified # ๐ŸŽฒ game die +1F9E9 ; fully-qualified # ๐Ÿงฉ jigsaw +1F9F8 ; fully-qualified # ๐Ÿงธ teddy bear +2660 FE0F ; fully-qualified # โ™ ๏ธ spade suit +2660 ; non-fully-qualified # โ™  spade suit +2665 FE0F ; fully-qualified # โ™ฅ๏ธ heart suit +2665 ; non-fully-qualified # โ™ฅ heart suit +2666 FE0F ; fully-qualified # โ™ฆ๏ธ diamond suit +2666 ; non-fully-qualified # โ™ฆ diamond suit +2663 FE0F ; fully-qualified # โ™ฃ๏ธ club suit +2663 ; non-fully-qualified # โ™ฃ club suit +265F FE0F ; fully-qualified # โ™Ÿ๏ธ chess pawn +265F ; non-fully-qualified # โ™Ÿ chess pawn +1F0CF ; fully-qualified # ๐Ÿƒ joker +1F004 ; fully-qualified # ๐Ÿ€„ mahjong red dragon +1F3B4 ; fully-qualified # ๐ŸŽด flower playing cards + +# subgroup: arts & crafts +1F3AD ; fully-qualified # ๐ŸŽญ performing arts +1F5BC FE0F ; fully-qualified # ๐Ÿ–ผ๏ธ framed picture +1F5BC ; non-fully-qualified # ๐Ÿ–ผ framed picture +1F3A8 ; fully-qualified # ๐ŸŽจ artist palette +1F9F5 ; fully-qualified # ๐Ÿงต thread +1F9F6 ; fully-qualified # ๐Ÿงถ yarn + +# Activities subtotal: 87 +# Activities subtotal: 87 w/o modifiers + +# group: Objects + +# subgroup: sound +1F507 ; fully-qualified # ๐Ÿ”‡ muted speaker +1F508 ; fully-qualified # ๐Ÿ”ˆ speaker low volume +1F509 ; fully-qualified # ๐Ÿ”‰ speaker medium volume +1F50A ; fully-qualified # ๐Ÿ”Š speaker high volume +1F4E2 ; fully-qualified # ๐Ÿ“ข loudspeaker +1F4E3 ; fully-qualified # ๐Ÿ“ฃ megaphone +1F4EF ; fully-qualified # ๐Ÿ“ฏ postal horn +1F514 ; fully-qualified # ๐Ÿ”” bell +1F515 ; fully-qualified # ๐Ÿ”• bell with slash + +# subgroup: music +1F3BC ; fully-qualified # ๐ŸŽผ musical score +1F3B5 ; fully-qualified # ๐ŸŽต musical note +1F3B6 ; fully-qualified # ๐ŸŽถ musical notes +1F399 FE0F ; fully-qualified # ๐ŸŽ™๏ธ studio microphone +1F399 ; non-fully-qualified # ๐ŸŽ™ studio microphone +1F39A FE0F ; fully-qualified # ๐ŸŽš๏ธ level slider +1F39A ; non-fully-qualified # ๐ŸŽš level slider +1F39B FE0F ; fully-qualified # ๐ŸŽ›๏ธ control knobs +1F39B ; non-fully-qualified # ๐ŸŽ› control knobs +1F3A4 ; fully-qualified # ๐ŸŽค microphone +1F3A7 ; fully-qualified # ๐ŸŽง headphone +1F4FB ; fully-qualified # ๐Ÿ“ป radio + +# subgroup: musical-instrument +1F3B7 ; fully-qualified # ๐ŸŽท saxophone +1F3B8 ; fully-qualified # ๐ŸŽธ guitar +1F3B9 ; fully-qualified # ๐ŸŽน musical keyboard +1F3BA ; fully-qualified # ๐ŸŽบ trumpet +1F3BB ; fully-qualified # ๐ŸŽป violin +1F941 ; fully-qualified # ๐Ÿฅ drum + +# subgroup: phone +1F4F1 ; fully-qualified # ๐Ÿ“ฑ mobile phone +1F4F2 ; fully-qualified # ๐Ÿ“ฒ mobile phone with arrow +260E FE0F ; fully-qualified # โ˜Ž๏ธ telephone +260E ; non-fully-qualified # โ˜Ž telephone +1F4DE ; fully-qualified # ๐Ÿ“ž telephone receiver +1F4DF ; fully-qualified # ๐Ÿ“Ÿ pager +1F4E0 ; fully-qualified # ๐Ÿ“  fax machine + +# subgroup: computer +1F50B ; fully-qualified # ๐Ÿ”‹ battery +1F50C ; fully-qualified # ๐Ÿ”Œ electric plug +1F4BB ; fully-qualified # ๐Ÿ’ป laptop computer +1F5A5 FE0F ; fully-qualified # ๐Ÿ–ฅ๏ธ desktop computer +1F5A5 ; non-fully-qualified # ๐Ÿ–ฅ desktop computer +1F5A8 FE0F ; fully-qualified # ๐Ÿ–จ๏ธ printer +1F5A8 ; non-fully-qualified # ๐Ÿ–จ printer +2328 FE0F ; fully-qualified # โŒจ๏ธ keyboard +2328 ; non-fully-qualified # โŒจ keyboard +1F5B1 FE0F ; fully-qualified # ๐Ÿ–ฑ๏ธ computer mouse +1F5B1 ; non-fully-qualified # ๐Ÿ–ฑ computer mouse +1F5B2 FE0F ; fully-qualified # ๐Ÿ–ฒ๏ธ trackball +1F5B2 ; non-fully-qualified # ๐Ÿ–ฒ trackball +1F4BD ; fully-qualified # ๐Ÿ’ฝ computer disk +1F4BE ; fully-qualified # ๐Ÿ’พ floppy disk +1F4BF ; fully-qualified # ๐Ÿ’ฟ optical disk +1F4C0 ; fully-qualified # ๐Ÿ“€ dvd +1F9EE ; fully-qualified # ๐Ÿงฎ abacus + +# subgroup: light & video +1F3A5 ; fully-qualified # ๐ŸŽฅ movie camera +1F39E FE0F ; fully-qualified # ๐ŸŽž๏ธ film frames +1F39E ; non-fully-qualified # ๐ŸŽž film frames +1F4FD FE0F ; fully-qualified # ๐Ÿ“ฝ๏ธ film projector +1F4FD ; non-fully-qualified # ๐Ÿ“ฝ film projector +1F3AC ; fully-qualified # ๐ŸŽฌ clapper board +1F4FA ; fully-qualified # ๐Ÿ“บ television +1F4F7 ; fully-qualified # ๐Ÿ“ท camera +1F4F8 ; fully-qualified # ๐Ÿ“ธ camera with flash +1F4F9 ; fully-qualified # ๐Ÿ“น video camera +1F4FC ; fully-qualified # ๐Ÿ“ผ videocassette +1F50D ; fully-qualified # ๐Ÿ” magnifying glass tilted left +1F50E ; fully-qualified # ๐Ÿ”Ž magnifying glass tilted right +1F56F FE0F ; fully-qualified # ๐Ÿ•ฏ๏ธ candle +1F56F ; non-fully-qualified # ๐Ÿ•ฏ candle +1F4A1 ; fully-qualified # ๐Ÿ’ก light bulb +1F526 ; fully-qualified # ๐Ÿ”ฆ flashlight +1F3EE ; fully-qualified # ๐Ÿฎ red paper lantern + +# subgroup: book-paper +1F4D4 ; fully-qualified # ๐Ÿ“” notebook with decorative cover +1F4D5 ; fully-qualified # ๐Ÿ“• closed book +1F4D6 ; fully-qualified # ๐Ÿ“– open book +1F4D7 ; fully-qualified # ๐Ÿ“— green book +1F4D8 ; fully-qualified # ๐Ÿ“˜ blue book +1F4D9 ; fully-qualified # ๐Ÿ“™ orange book +1F4DA ; fully-qualified # ๐Ÿ“š books +1F4D3 ; fully-qualified # ๐Ÿ““ notebook +1F4D2 ; fully-qualified # ๐Ÿ“’ ledger +1F4C3 ; fully-qualified # ๐Ÿ“ƒ page with curl +1F4DC ; fully-qualified # ๐Ÿ“œ scroll +1F4C4 ; fully-qualified # ๐Ÿ“„ page facing up +1F4F0 ; fully-qualified # ๐Ÿ“ฐ newspaper +1F5DE FE0F ; fully-qualified # ๐Ÿ—ž๏ธ rolled-up newspaper +1F5DE ; non-fully-qualified # ๐Ÿ—ž rolled-up newspaper +1F4D1 ; fully-qualified # ๐Ÿ“‘ bookmark tabs +1F516 ; fully-qualified # ๐Ÿ”– bookmark +1F3F7 FE0F ; fully-qualified # ๐Ÿท๏ธ label +1F3F7 ; non-fully-qualified # ๐Ÿท label + +# subgroup: money +1F4B0 ; fully-qualified # ๐Ÿ’ฐ money bag +1F4B4 ; fully-qualified # ๐Ÿ’ด yen banknote +1F4B5 ; fully-qualified # ๐Ÿ’ต dollar banknote +1F4B6 ; fully-qualified # ๐Ÿ’ถ euro banknote +1F4B7 ; fully-qualified # ๐Ÿ’ท pound banknote +1F4B8 ; fully-qualified # ๐Ÿ’ธ money with wings +1F4B3 ; fully-qualified # ๐Ÿ’ณ credit card +1F9FE ; fully-qualified # ๐Ÿงพ receipt +1F4B9 ; fully-qualified # ๐Ÿ’น chart increasing with yen +1F4B1 ; fully-qualified # ๐Ÿ’ฑ currency exchange +1F4B2 ; fully-qualified # ๐Ÿ’ฒ heavy dollar sign + +# subgroup: mail +2709 FE0F ; fully-qualified # โœ‰๏ธ envelope +2709 ; non-fully-qualified # โœ‰ envelope +1F4E7 ; fully-qualified # ๐Ÿ“ง e-mail +1F4E8 ; fully-qualified # ๐Ÿ“จ incoming envelope +1F4E9 ; fully-qualified # ๐Ÿ“ฉ envelope with arrow +1F4E4 ; fully-qualified # ๐Ÿ“ค outbox tray +1F4E5 ; fully-qualified # ๐Ÿ“ฅ inbox tray +1F4E6 ; fully-qualified # ๐Ÿ“ฆ package +1F4EB ; fully-qualified # ๐Ÿ“ซ closed mailbox with raised flag +1F4EA ; fully-qualified # ๐Ÿ“ช closed mailbox with lowered flag +1F4EC ; fully-qualified # ๐Ÿ“ฌ open mailbox with raised flag +1F4ED ; fully-qualified # ๐Ÿ“ญ open mailbox with lowered flag +1F4EE ; fully-qualified # ๐Ÿ“ฎ postbox +1F5F3 FE0F ; fully-qualified # ๐Ÿ—ณ๏ธ ballot box with ballot +1F5F3 ; non-fully-qualified # ๐Ÿ—ณ ballot box with ballot + +# subgroup: writing +270F FE0F ; fully-qualified # โœ๏ธ pencil +270F ; non-fully-qualified # โœ pencil +2712 FE0F ; fully-qualified # โœ’๏ธ black nib +2712 ; non-fully-qualified # โœ’ black nib +1F58B FE0F ; fully-qualified # ๐Ÿ–‹๏ธ fountain pen +1F58B ; non-fully-qualified # ๐Ÿ–‹ fountain pen +1F58A FE0F ; fully-qualified # ๐Ÿ–Š๏ธ pen +1F58A ; non-fully-qualified # ๐Ÿ–Š pen +1F58C FE0F ; fully-qualified # ๐Ÿ–Œ๏ธ paintbrush +1F58C ; non-fully-qualified # ๐Ÿ–Œ paintbrush +1F58D FE0F ; fully-qualified # ๐Ÿ–๏ธ crayon +1F58D ; non-fully-qualified # ๐Ÿ– crayon +1F4DD ; fully-qualified # ๐Ÿ“ memo + +# subgroup: office +1F4BC ; fully-qualified # ๐Ÿ’ผ briefcase +1F4C1 ; fully-qualified # ๐Ÿ“ file folder +1F4C2 ; fully-qualified # ๐Ÿ“‚ open file folder +1F5C2 FE0F ; fully-qualified # ๐Ÿ—‚๏ธ card index dividers +1F5C2 ; non-fully-qualified # ๐Ÿ—‚ card index dividers +1F4C5 ; fully-qualified # ๐Ÿ“… calendar +1F4C6 ; fully-qualified # ๐Ÿ“† tear-off calendar +1F5D2 FE0F ; fully-qualified # ๐Ÿ—’๏ธ spiral notepad +1F5D2 ; non-fully-qualified # ๐Ÿ—’ spiral notepad +1F5D3 FE0F ; fully-qualified # ๐Ÿ—“๏ธ spiral calendar +1F5D3 ; non-fully-qualified # ๐Ÿ—“ spiral calendar +1F4C7 ; fully-qualified # ๐Ÿ“‡ card index +1F4C8 ; fully-qualified # ๐Ÿ“ˆ chart increasing +1F4C9 ; fully-qualified # ๐Ÿ“‰ chart decreasing +1F4CA ; fully-qualified # ๐Ÿ“Š bar chart +1F4CB ; fully-qualified # ๐Ÿ“‹ clipboard +1F4CC ; fully-qualified # ๐Ÿ“Œ pushpin +1F4CD ; fully-qualified # ๐Ÿ“ round pushpin +1F4CE ; fully-qualified # ๐Ÿ“Ž paperclip +1F587 FE0F ; fully-qualified # ๐Ÿ–‡๏ธ linked paperclips +1F587 ; non-fully-qualified # ๐Ÿ–‡ linked paperclips +1F4CF ; fully-qualified # ๐Ÿ“ straight ruler +1F4D0 ; fully-qualified # ๐Ÿ“ triangular ruler +2702 FE0F ; fully-qualified # โœ‚๏ธ scissors +2702 ; non-fully-qualified # โœ‚ scissors +1F5C3 FE0F ; fully-qualified # ๐Ÿ—ƒ๏ธ card file box +1F5C3 ; non-fully-qualified # ๐Ÿ—ƒ card file box +1F5C4 FE0F ; fully-qualified # ๐Ÿ—„๏ธ file cabinet +1F5C4 ; non-fully-qualified # ๐Ÿ—„ file cabinet +1F5D1 FE0F ; fully-qualified # ๐Ÿ—‘๏ธ wastebasket +1F5D1 ; non-fully-qualified # ๐Ÿ—‘ wastebasket + +# subgroup: lock +1F512 ; fully-qualified # ๐Ÿ”’ locked +1F513 ; fully-qualified # ๐Ÿ”“ unlocked +1F50F ; fully-qualified # ๐Ÿ” locked with pen +1F510 ; fully-qualified # ๐Ÿ” locked with key +1F511 ; fully-qualified # ๐Ÿ”‘ key +1F5DD FE0F ; fully-qualified # ๐Ÿ—๏ธ old key +1F5DD ; non-fully-qualified # ๐Ÿ— old key + +# subgroup: tool +1F528 ; fully-qualified # ๐Ÿ”จ hammer +26CF FE0F ; fully-qualified # โ›๏ธ pick +26CF ; non-fully-qualified # โ› pick +2692 FE0F ; fully-qualified # โš’๏ธ hammer and pick +2692 ; non-fully-qualified # โš’ hammer and pick +1F6E0 FE0F ; fully-qualified # ๐Ÿ› ๏ธ hammer and wrench +1F6E0 ; non-fully-qualified # ๐Ÿ›  hammer and wrench +1F5E1 FE0F ; fully-qualified # ๐Ÿ—ก๏ธ dagger +1F5E1 ; non-fully-qualified # ๐Ÿ—ก dagger +2694 FE0F ; fully-qualified # โš”๏ธ crossed swords +2694 ; non-fully-qualified # โš” crossed swords +1F52B ; fully-qualified # ๐Ÿ”ซ pistol +1F3F9 ; fully-qualified # ๐Ÿน bow and arrow +1F6E1 FE0F ; fully-qualified # ๐Ÿ›ก๏ธ shield +1F6E1 ; non-fully-qualified # ๐Ÿ›ก shield +1F527 ; fully-qualified # ๐Ÿ”ง wrench +1F529 ; fully-qualified # ๐Ÿ”ฉ nut and bolt +2699 FE0F ; fully-qualified # โš™๏ธ gear +2699 ; non-fully-qualified # โš™ gear +1F5DC FE0F ; fully-qualified # ๐Ÿ—œ๏ธ clamp +1F5DC ; non-fully-qualified # ๐Ÿ—œ clamp +2696 FE0F ; fully-qualified # โš–๏ธ balance scale +2696 ; non-fully-qualified # โš– balance scale +1F517 ; fully-qualified # ๐Ÿ”— link +26D3 FE0F ; fully-qualified # โ›“๏ธ chains +26D3 ; non-fully-qualified # โ›“ chains +1F9F0 ; fully-qualified # ๐Ÿงฐ toolbox +1F9F2 ; fully-qualified # ๐Ÿงฒ magnet + +# subgroup: science +2697 FE0F ; fully-qualified # โš—๏ธ alembic +2697 ; non-fully-qualified # โš— alembic +1F9EA ; fully-qualified # ๐Ÿงช test tube +1F9EB ; fully-qualified # ๐Ÿงซ petri dish +1F9EC ; fully-qualified # ๐Ÿงฌ dna +1F52C ; fully-qualified # ๐Ÿ”ฌ microscope +1F52D ; fully-qualified # ๐Ÿ”ญ telescope +1F4E1 ; fully-qualified # ๐Ÿ“ก satellite antenna + +# subgroup: medical +1F489 ; fully-qualified # ๐Ÿ’‰ syringe +1F48A ; fully-qualified # ๐Ÿ’Š pill + +# subgroup: household +1F6AA ; fully-qualified # ๐Ÿšช door +1F6CF FE0F ; fully-qualified # ๐Ÿ›๏ธ bed +1F6CF ; non-fully-qualified # ๐Ÿ› bed +1F6CB FE0F ; fully-qualified # ๐Ÿ›‹๏ธ couch and lamp +1F6CB ; non-fully-qualified # ๐Ÿ›‹ couch and lamp +1F6BD ; fully-qualified # ๐Ÿšฝ toilet +1F6BF ; fully-qualified # ๐Ÿšฟ shower +1F6C1 ; fully-qualified # ๐Ÿ› bathtub +1F9F4 ; fully-qualified # ๐Ÿงด lotion bottle +1F9F7 ; fully-qualified # ๐Ÿงท safety pin +1F9F9 ; fully-qualified # ๐Ÿงน broom +1F9FA ; fully-qualified # ๐Ÿงบ basket +1F9FB ; fully-qualified # ๐Ÿงป roll of paper +1F9FC ; fully-qualified # ๐Ÿงผ soap +1F9FD ; fully-qualified # ๐Ÿงฝ sponge +1F9EF ; fully-qualified # ๐Ÿงฏ fire extinguisher +1F6D2 ; fully-qualified # ๐Ÿ›’ shopping cart + +# subgroup: other-object +1F6AC ; fully-qualified # ๐Ÿšฌ cigarette +26B0 FE0F ; fully-qualified # โšฐ๏ธ coffin +26B0 ; non-fully-qualified # โšฐ coffin +26B1 FE0F ; fully-qualified # โšฑ๏ธ funeral urn +26B1 ; non-fully-qualified # โšฑ funeral urn +1F5FF ; fully-qualified # ๐Ÿ—ฟ moai + +# Objects subtotal: 227 +# Objects subtotal: 227 w/o modifiers + +# group: Symbols + +# subgroup: transport-sign +1F3E7 ; fully-qualified # ๐Ÿง ATM sign +1F6AE ; fully-qualified # ๐Ÿšฎ litter in bin sign +1F6B0 ; fully-qualified # ๐Ÿšฐ potable water +267F ; fully-qualified # โ™ฟ wheelchair symbol +1F6B9 ; fully-qualified # ๐Ÿšน menโ€™s room +1F6BA ; fully-qualified # ๐Ÿšบ womenโ€™s room +1F6BB ; fully-qualified # ๐Ÿšป restroom +1F6BC ; fully-qualified # ๐Ÿšผ baby symbol +1F6BE ; fully-qualified # ๐Ÿšพ water closet +1F6C2 ; fully-qualified # ๐Ÿ›‚ passport control +1F6C3 ; fully-qualified # ๐Ÿ›ƒ customs +1F6C4 ; fully-qualified # ๐Ÿ›„ baggage claim +1F6C5 ; fully-qualified # ๐Ÿ›… left luggage + +# subgroup: warning +26A0 FE0F ; fully-qualified # โš ๏ธ warning +26A0 ; non-fully-qualified # โš  warning +1F6B8 ; fully-qualified # ๐Ÿšธ children crossing +26D4 ; fully-qualified # โ›” no entry +1F6AB ; fully-qualified # ๐Ÿšซ prohibited +1F6B3 ; fully-qualified # ๐Ÿšณ no bicycles +1F6AD ; fully-qualified # ๐Ÿšญ no smoking +1F6AF ; fully-qualified # ๐Ÿšฏ no littering +1F6B1 ; fully-qualified # ๐Ÿšฑ non-potable water +1F6B7 ; fully-qualified # ๐Ÿšท no pedestrians +1F4F5 ; fully-qualified # ๐Ÿ“ต no mobile phones +1F51E ; fully-qualified # ๐Ÿ”ž no one under eighteen +2622 FE0F ; fully-qualified # โ˜ข๏ธ radioactive +2622 ; non-fully-qualified # โ˜ข radioactive +2623 FE0F ; fully-qualified # โ˜ฃ๏ธ biohazard +2623 ; non-fully-qualified # โ˜ฃ biohazard + +# subgroup: arrow +2B06 FE0F ; fully-qualified # โฌ†๏ธ up arrow +2B06 ; non-fully-qualified # โฌ† up arrow +2197 FE0F ; fully-qualified # โ†—๏ธ up-right arrow +2197 ; non-fully-qualified # โ†— up-right arrow +27A1 FE0F ; fully-qualified # โžก๏ธ right arrow +27A1 ; non-fully-qualified # โžก right arrow +2198 FE0F ; fully-qualified # โ†˜๏ธ down-right arrow +2198 ; non-fully-qualified # โ†˜ down-right arrow +2B07 FE0F ; fully-qualified # โฌ‡๏ธ down arrow +2B07 ; non-fully-qualified # โฌ‡ down arrow +2199 FE0F ; fully-qualified # โ†™๏ธ down-left arrow +2199 ; non-fully-qualified # โ†™ down-left arrow +2B05 FE0F ; fully-qualified # โฌ…๏ธ left arrow +2B05 ; non-fully-qualified # โฌ… left arrow +2196 FE0F ; fully-qualified # โ†–๏ธ up-left arrow +2196 ; non-fully-qualified # โ†– up-left arrow +2195 FE0F ; fully-qualified # โ†•๏ธ up-down arrow +2195 ; non-fully-qualified # โ†• up-down arrow +2194 FE0F ; fully-qualified # โ†”๏ธ left-right arrow +2194 ; non-fully-qualified # โ†” left-right arrow +21A9 FE0F ; fully-qualified # โ†ฉ๏ธ right arrow curving left +21A9 ; non-fully-qualified # โ†ฉ right arrow curving left +21AA FE0F ; fully-qualified # โ†ช๏ธ left arrow curving right +21AA ; non-fully-qualified # โ†ช left arrow curving right +2934 FE0F ; fully-qualified # โคด๏ธ right arrow curving up +2934 ; non-fully-qualified # โคด right arrow curving up +2935 FE0F ; fully-qualified # โคต๏ธ right arrow curving down +2935 ; non-fully-qualified # โคต right arrow curving down +1F503 ; fully-qualified # ๐Ÿ”ƒ clockwise vertical arrows +1F504 ; fully-qualified # ๐Ÿ”„ counterclockwise arrows button +1F519 ; fully-qualified # ๐Ÿ”™ BACK arrow +1F51A ; fully-qualified # ๐Ÿ”š END arrow +1F51B ; fully-qualified # ๐Ÿ”› ON! arrow +1F51C ; fully-qualified # ๐Ÿ”œ SOON arrow +1F51D ; fully-qualified # ๐Ÿ” TOP arrow + +# subgroup: religion +1F6D0 ; fully-qualified # ๐Ÿ› place of worship +269B FE0F ; fully-qualified # โš›๏ธ atom symbol +269B ; non-fully-qualified # โš› atom symbol +1F549 FE0F ; fully-qualified # ๐Ÿ•‰๏ธ om +1F549 ; non-fully-qualified # ๐Ÿ•‰ om +2721 FE0F ; fully-qualified # โœก๏ธ star of David +2721 ; non-fully-qualified # โœก star of David +2638 FE0F ; fully-qualified # โ˜ธ๏ธ wheel of dharma +2638 ; non-fully-qualified # โ˜ธ wheel of dharma +262F FE0F ; fully-qualified # โ˜ฏ๏ธ yin yang +262F ; non-fully-qualified # โ˜ฏ yin yang +271D FE0F ; fully-qualified # โœ๏ธ latin cross +271D ; non-fully-qualified # โœ latin cross +2626 FE0F ; fully-qualified # โ˜ฆ๏ธ orthodox cross +2626 ; non-fully-qualified # โ˜ฆ orthodox cross +262A FE0F ; fully-qualified # โ˜ช๏ธ star and crescent +262A ; non-fully-qualified # โ˜ช star and crescent +262E FE0F ; fully-qualified # โ˜ฎ๏ธ peace symbol +262E ; non-fully-qualified # โ˜ฎ peace symbol +1F54E ; fully-qualified # ๐Ÿ•Ž menorah +1F52F ; fully-qualified # ๐Ÿ”ฏ dotted six-pointed star + +# subgroup: zodiac +2648 ; fully-qualified # โ™ˆ Aries +2649 ; fully-qualified # โ™‰ Taurus +264A ; fully-qualified # โ™Š Gemini +264B ; fully-qualified # โ™‹ Cancer +264C ; fully-qualified # โ™Œ Leo +264D ; fully-qualified # โ™ Virgo +264E ; fully-qualified # โ™Ž Libra +264F ; fully-qualified # โ™ Scorpio +2650 ; fully-qualified # โ™ Sagittarius +2651 ; fully-qualified # โ™‘ Capricorn +2652 ; fully-qualified # โ™’ Aquarius +2653 ; fully-qualified # โ™“ Pisces +26CE ; fully-qualified # โ›Ž Ophiuchus + +# subgroup: av-symbol +1F500 ; fully-qualified # ๐Ÿ”€ shuffle tracks button +1F501 ; fully-qualified # ๐Ÿ” repeat button +1F502 ; fully-qualified # ๐Ÿ”‚ repeat single button +25B6 FE0F ; fully-qualified # โ–ถ๏ธ play button +25B6 ; non-fully-qualified # โ–ถ play button +23E9 ; fully-qualified # โฉ fast-forward button +23ED FE0F ; fully-qualified # โญ๏ธ next track button +23ED ; non-fully-qualified # โญ next track button +23EF FE0F ; fully-qualified # โฏ๏ธ play or pause button +23EF ; non-fully-qualified # โฏ play or pause button +25C0 FE0F ; fully-qualified # โ—€๏ธ reverse button +25C0 ; non-fully-qualified # โ—€ reverse button +23EA ; fully-qualified # โช fast reverse button +23EE FE0F ; fully-qualified # โฎ๏ธ last track button +23EE ; non-fully-qualified # โฎ last track button +1F53C ; fully-qualified # ๐Ÿ”ผ upwards button +23EB ; fully-qualified # โซ fast up button +1F53D ; fully-qualified # ๐Ÿ”ฝ downwards button +23EC ; fully-qualified # โฌ fast down button +23F8 FE0F ; fully-qualified # โธ๏ธ pause button +23F8 ; non-fully-qualified # โธ pause button +23F9 FE0F ; fully-qualified # โน๏ธ stop button +23F9 ; non-fully-qualified # โน stop button +23FA FE0F ; fully-qualified # โบ๏ธ record button +23FA ; non-fully-qualified # โบ record button +23CF FE0F ; fully-qualified # โ๏ธ eject button +23CF ; non-fully-qualified # โ eject button +1F3A6 ; fully-qualified # ๐ŸŽฆ cinema +1F505 ; fully-qualified # ๐Ÿ”… dim button +1F506 ; fully-qualified # ๐Ÿ”† bright button +1F4F6 ; fully-qualified # ๐Ÿ“ถ antenna bars +1F4F3 ; fully-qualified # ๐Ÿ“ณ vibration mode +1F4F4 ; fully-qualified # ๐Ÿ“ด mobile phone off + +# subgroup: other-symbol +2640 FE0F ; fully-qualified # โ™€๏ธ female sign +2640 ; non-fully-qualified # โ™€ female sign +2642 FE0F ; fully-qualified # โ™‚๏ธ male sign +2642 ; non-fully-qualified # โ™‚ male sign +2695 FE0F ; fully-qualified # โš•๏ธ medical symbol +2695 ; non-fully-qualified # โš• medical symbol +267E FE0F ; fully-qualified # โ™พ๏ธ infinity +267E ; non-fully-qualified # โ™พ infinity +267B FE0F ; fully-qualified # โ™ป๏ธ recycling symbol +267B ; non-fully-qualified # โ™ป recycling symbol +269C FE0F ; fully-qualified # โšœ๏ธ fleur-de-lis +269C ; non-fully-qualified # โšœ fleur-de-lis +1F531 ; fully-qualified # ๐Ÿ”ฑ trident emblem +1F4DB ; fully-qualified # ๐Ÿ“› name badge +1F530 ; fully-qualified # ๐Ÿ”ฐ Japanese symbol for beginner +2B55 ; fully-qualified # โญ• heavy large circle +2705 ; fully-qualified # โœ… white heavy check mark +2611 FE0F ; fully-qualified # โ˜‘๏ธ ballot box with check +2611 ; non-fully-qualified # โ˜‘ ballot box with check +2714 FE0F ; fully-qualified # โœ”๏ธ heavy check mark +2714 ; non-fully-qualified # โœ” heavy check mark +2716 FE0F ; fully-qualified # โœ–๏ธ heavy multiplication x +2716 ; non-fully-qualified # โœ– heavy multiplication x +274C ; fully-qualified # โŒ cross mark +274E ; fully-qualified # โŽ cross mark button +2795 ; fully-qualified # โž• heavy plus sign +2796 ; fully-qualified # โž– heavy minus sign +2797 ; fully-qualified # โž— heavy division sign +27B0 ; fully-qualified # โžฐ curly loop +27BF ; fully-qualified # โžฟ double curly loop +303D FE0F ; fully-qualified # ใ€ฝ๏ธ part alternation mark +303D ; non-fully-qualified # ใ€ฝ part alternation mark +2733 FE0F ; fully-qualified # โœณ๏ธ eight-spoked asterisk +2733 ; non-fully-qualified # โœณ eight-spoked asterisk +2734 FE0F ; fully-qualified # โœด๏ธ eight-pointed star +2734 ; non-fully-qualified # โœด eight-pointed star +2747 FE0F ; fully-qualified # โ‡๏ธ sparkle +2747 ; non-fully-qualified # โ‡ sparkle +203C FE0F ; fully-qualified # โ€ผ๏ธ double exclamation mark +203C ; non-fully-qualified # โ€ผ double exclamation mark +2049 FE0F ; fully-qualified # โ‰๏ธ exclamation question mark +2049 ; non-fully-qualified # โ‰ exclamation question mark +2753 ; fully-qualified # โ“ question mark +2754 ; fully-qualified # โ” white question mark +2755 ; fully-qualified # โ• white exclamation mark +2757 ; fully-qualified # โ— exclamation mark +3030 FE0F ; fully-qualified # ใ€ฐ๏ธ wavy dash +3030 ; non-fully-qualified # ใ€ฐ wavy dash +00A9 FE0F ; fully-qualified # ยฉ๏ธ copyright +00A9 ; non-fully-qualified # ยฉ copyright +00AE FE0F ; fully-qualified # ยฎ๏ธ registered +00AE ; non-fully-qualified # ยฎ registered +2122 FE0F ; fully-qualified # โ„ข๏ธ trade mark +2122 ; non-fully-qualified # โ„ข trade mark + +# subgroup: keycap +0023 FE0F 20E3 ; fully-qualified # #๏ธโƒฃ keycap: # +0023 20E3 ; non-fully-qualified # #โƒฃ keycap: # +002A FE0F 20E3 ; fully-qualified # *๏ธโƒฃ keycap: * +002A 20E3 ; non-fully-qualified # *โƒฃ keycap: * +0030 FE0F 20E3 ; fully-qualified # 0๏ธโƒฃ keycap: 0 +0030 20E3 ; non-fully-qualified # 0โƒฃ keycap: 0 +0031 FE0F 20E3 ; fully-qualified # 1๏ธโƒฃ keycap: 1 +0031 20E3 ; non-fully-qualified # 1โƒฃ keycap: 1 +0032 FE0F 20E3 ; fully-qualified # 2๏ธโƒฃ keycap: 2 +0032 20E3 ; non-fully-qualified # 2โƒฃ keycap: 2 +0033 FE0F 20E3 ; fully-qualified # 3๏ธโƒฃ keycap: 3 +0033 20E3 ; non-fully-qualified # 3โƒฃ keycap: 3 +0034 FE0F 20E3 ; fully-qualified # 4๏ธโƒฃ keycap: 4 +0034 20E3 ; non-fully-qualified # 4โƒฃ keycap: 4 +0035 FE0F 20E3 ; fully-qualified # 5๏ธโƒฃ keycap: 5 +0035 20E3 ; non-fully-qualified # 5โƒฃ keycap: 5 +0036 FE0F 20E3 ; fully-qualified # 6๏ธโƒฃ keycap: 6 +0036 20E3 ; non-fully-qualified # 6โƒฃ keycap: 6 +0037 FE0F 20E3 ; fully-qualified # 7๏ธโƒฃ keycap: 7 +0037 20E3 ; non-fully-qualified # 7โƒฃ keycap: 7 +0038 FE0F 20E3 ; fully-qualified # 8๏ธโƒฃ keycap: 8 +0038 20E3 ; non-fully-qualified # 8โƒฃ keycap: 8 +0039 FE0F 20E3 ; fully-qualified # 9๏ธโƒฃ keycap: 9 +0039 20E3 ; non-fully-qualified # 9โƒฃ keycap: 9 +1F51F ; fully-qualified # ๐Ÿ”Ÿ keycap: 10 + +# subgroup: alphanum +1F4AF ; fully-qualified # ๐Ÿ’ฏ hundred points +1F520 ; fully-qualified # ๐Ÿ”  input latin uppercase +1F521 ; fully-qualified # ๐Ÿ”ก input latin lowercase +1F522 ; fully-qualified # ๐Ÿ”ข input numbers +1F523 ; fully-qualified # ๐Ÿ”ฃ input symbols +1F524 ; fully-qualified # ๐Ÿ”ค input latin letters +1F170 FE0F ; fully-qualified # ๐Ÿ…ฐ๏ธ A button (blood type) +1F170 ; non-fully-qualified # ๐Ÿ…ฐ A button (blood type) +1F18E ; fully-qualified # ๐Ÿ†Ž AB button (blood type) +1F171 FE0F ; fully-qualified # ๐Ÿ…ฑ๏ธ B button (blood type) +1F171 ; non-fully-qualified # ๐Ÿ…ฑ B button (blood type) +1F191 ; fully-qualified # ๐Ÿ†‘ CL button +1F192 ; fully-qualified # ๐Ÿ†’ COOL button +1F193 ; fully-qualified # ๐Ÿ†“ FREE button +2139 FE0F ; fully-qualified # โ„น๏ธ information +2139 ; non-fully-qualified # โ„น information +1F194 ; fully-qualified # ๐Ÿ†” ID button +24C2 FE0F ; fully-qualified # โ“‚๏ธ circled M +24C2 ; non-fully-qualified # โ“‚ circled M +1F195 ; fully-qualified # ๐Ÿ†• NEW button +1F196 ; fully-qualified # ๐Ÿ†– NG button +1F17E FE0F ; fully-qualified # ๐Ÿ…พ๏ธ O button (blood type) +1F17E ; non-fully-qualified # ๐Ÿ…พ O button (blood type) +1F197 ; fully-qualified # ๐Ÿ†— OK button +1F17F FE0F ; fully-qualified # ๐Ÿ…ฟ๏ธ P button +1F17F ; non-fully-qualified # ๐Ÿ…ฟ P button +1F198 ; fully-qualified # ๐Ÿ†˜ SOS button +1F199 ; fully-qualified # ๐Ÿ†™ UP! button +1F19A ; fully-qualified # ๐Ÿ†š VS button +1F201 ; fully-qualified # ๐Ÿˆ Japanese โ€œhereโ€ button +1F202 FE0F ; fully-qualified # ๐Ÿˆ‚๏ธ Japanese โ€œservice chargeโ€ button +1F202 ; non-fully-qualified # ๐Ÿˆ‚ Japanese โ€œservice chargeโ€ button +1F237 FE0F ; fully-qualified # ๐Ÿˆท๏ธ Japanese โ€œmonthly amountโ€ button +1F237 ; non-fully-qualified # ๐Ÿˆท Japanese โ€œmonthly amountโ€ button +1F236 ; fully-qualified # ๐Ÿˆถ Japanese โ€œnot free of chargeโ€ button +1F22F ; fully-qualified # ๐Ÿˆฏ Japanese โ€œreservedโ€ button +1F250 ; fully-qualified # ๐Ÿ‰ Japanese โ€œbargainโ€ button +1F239 ; fully-qualified # ๐Ÿˆน Japanese โ€œdiscountโ€ button +1F21A ; fully-qualified # ๐Ÿˆš Japanese โ€œfree of chargeโ€ button +1F232 ; fully-qualified # ๐Ÿˆฒ Japanese โ€œprohibitedโ€ button +1F251 ; fully-qualified # ๐Ÿ‰‘ Japanese โ€œacceptableโ€ button +1F238 ; fully-qualified # ๐Ÿˆธ Japanese โ€œapplicationโ€ button +1F234 ; fully-qualified # ๐Ÿˆด Japanese โ€œpassing gradeโ€ button +1F233 ; fully-qualified # ๐Ÿˆณ Japanese โ€œvacancyโ€ button +3297 FE0F ; fully-qualified # ใŠ—๏ธ Japanese โ€œcongratulationsโ€ button +3297 ; non-fully-qualified # ใŠ— Japanese โ€œcongratulationsโ€ button +3299 FE0F ; fully-qualified # ใŠ™๏ธ Japanese โ€œsecretโ€ button +3299 ; non-fully-qualified # ใŠ™ Japanese โ€œsecretโ€ button +1F23A ; fully-qualified # ๐Ÿˆบ Japanese โ€œopen for businessโ€ button +1F235 ; fully-qualified # ๐Ÿˆต Japanese โ€œno vacancyโ€ button + +# subgroup: geometric +25AA FE0F ; fully-qualified # โ–ช๏ธ black small square +25AA ; non-fully-qualified # โ–ช black small square +25AB FE0F ; fully-qualified # โ–ซ๏ธ white small square +25AB ; non-fully-qualified # โ–ซ white small square +25FB FE0F ; fully-qualified # โ—ป๏ธ white medium square +25FB ; non-fully-qualified # โ—ป white medium square +25FC FE0F ; fully-qualified # โ—ผ๏ธ black medium square +25FC ; non-fully-qualified # โ—ผ black medium square +25FD ; fully-qualified # โ—ฝ white medium-small square +25FE ; fully-qualified # โ—พ black medium-small square +2B1B ; fully-qualified # โฌ› black large square +2B1C ; fully-qualified # โฌœ white large square +1F536 ; fully-qualified # ๐Ÿ”ถ large orange diamond +1F537 ; fully-qualified # ๐Ÿ”ท large blue diamond +1F538 ; fully-qualified # ๐Ÿ”ธ small orange diamond +1F539 ; fully-qualified # ๐Ÿ”น small blue diamond +1F53A ; fully-qualified # ๐Ÿ”บ red triangle pointed up +1F53B ; fully-qualified # ๐Ÿ”ป red triangle pointed down +1F4A0 ; fully-qualified # ๐Ÿ’  diamond with a dot +1F518 ; fully-qualified # ๐Ÿ”˜ radio button +1F532 ; fully-qualified # ๐Ÿ”ฒ black square button +1F533 ; fully-qualified # ๐Ÿ”ณ white square button +26AA ; fully-qualified # โšช white circle +26AB ; fully-qualified # โšซ black circle +1F534 ; fully-qualified # ๐Ÿ”ด red circle +1F535 ; fully-qualified # ๐Ÿ”ต blue circle + +# Symbols subtotal: 286 +# Symbols subtotal: 286 w/o modifiers + +# group: Flags + +# subgroup: flag +1F3C1 ; fully-qualified # ๐Ÿ chequered flag +1F6A9 ; fully-qualified # ๐Ÿšฉ triangular flag +1F38C ; fully-qualified # ๐ŸŽŒ crossed flags +1F3F4 ; fully-qualified # ๐Ÿด black flag +1F3F3 FE0F ; fully-qualified # ๐Ÿณ๏ธ white flag +1F3F3 ; non-fully-qualified # ๐Ÿณ white flag +1F3F3 FE0F 200D 1F308 ; fully-qualified # ๐Ÿณ๏ธโ€๐ŸŒˆ rainbow flag +1F3F3 200D 1F308 ; non-fully-qualified # ๐Ÿณโ€๐ŸŒˆ rainbow flag +1F3F4 200D 2620 FE0F ; fully-qualified # ๐Ÿดโ€โ˜ ๏ธ pirate flag +1F3F4 200D 2620 ; non-fully-qualified # ๐Ÿดโ€โ˜  pirate flag + +# subgroup: country-flag +1F1E6 1F1E8 ; fully-qualified # ๐Ÿ‡ฆ๐Ÿ‡จ Ascension Island +1F1E6 1F1E9 ; fully-qualified # ๐Ÿ‡ฆ๐Ÿ‡ฉ Andorra +1F1E6 1F1EA ; fully-qualified # ๐Ÿ‡ฆ๐Ÿ‡ช United Arab Emirates +1F1E6 1F1EB ; fully-qualified # ๐Ÿ‡ฆ๐Ÿ‡ซ Afghanistan +1F1E6 1F1EC ; fully-qualified # ๐Ÿ‡ฆ๐Ÿ‡ฌ Antigua & Barbuda +1F1E6 1F1EE ; fully-qualified # ๐Ÿ‡ฆ๐Ÿ‡ฎ Anguilla +1F1E6 1F1F1 ; fully-qualified # ๐Ÿ‡ฆ๐Ÿ‡ฑ Albania +1F1E6 1F1F2 ; fully-qualified # ๐Ÿ‡ฆ๐Ÿ‡ฒ Armenia +1F1E6 1F1F4 ; fully-qualified # ๐Ÿ‡ฆ๐Ÿ‡ด Angola +1F1E6 1F1F6 ; fully-qualified # ๐Ÿ‡ฆ๐Ÿ‡ถ Antarctica +1F1E6 1F1F7 ; fully-qualified # ๐Ÿ‡ฆ๐Ÿ‡ท Argentina +1F1E6 1F1F8 ; fully-qualified # ๐Ÿ‡ฆ๐Ÿ‡ธ American Samoa +1F1E6 1F1F9 ; fully-qualified # ๐Ÿ‡ฆ๐Ÿ‡น Austria +1F1E6 1F1FA ; fully-qualified # ๐Ÿ‡ฆ๐Ÿ‡บ Australia +1F1E6 1F1FC ; fully-qualified # ๐Ÿ‡ฆ๐Ÿ‡ผ Aruba +1F1E6 1F1FD ; fully-qualified # ๐Ÿ‡ฆ๐Ÿ‡ฝ ร…land Islands +1F1E6 1F1FF ; fully-qualified # ๐Ÿ‡ฆ๐Ÿ‡ฟ Azerbaijan +1F1E7 1F1E6 ; fully-qualified # ๐Ÿ‡ง๐Ÿ‡ฆ Bosnia & Herzegovina +1F1E7 1F1E7 ; fully-qualified # ๐Ÿ‡ง๐Ÿ‡ง Barbados +1F1E7 1F1E9 ; fully-qualified # ๐Ÿ‡ง๐Ÿ‡ฉ Bangladesh +1F1E7 1F1EA ; fully-qualified # ๐Ÿ‡ง๐Ÿ‡ช Belgium +1F1E7 1F1EB ; fully-qualified # ๐Ÿ‡ง๐Ÿ‡ซ Burkina Faso +1F1E7 1F1EC ; fully-qualified # ๐Ÿ‡ง๐Ÿ‡ฌ Bulgaria +1F1E7 1F1ED ; fully-qualified # ๐Ÿ‡ง๐Ÿ‡ญ Bahrain +1F1E7 1F1EE ; fully-qualified # ๐Ÿ‡ง๐Ÿ‡ฎ Burundi +1F1E7 1F1EF ; fully-qualified # ๐Ÿ‡ง๐Ÿ‡ฏ Benin +1F1E7 1F1F1 ; fully-qualified # ๐Ÿ‡ง๐Ÿ‡ฑ St. Barthรฉlemy +1F1E7 1F1F2 ; fully-qualified # ๐Ÿ‡ง๐Ÿ‡ฒ Bermuda +1F1E7 1F1F3 ; fully-qualified # ๐Ÿ‡ง๐Ÿ‡ณ Brunei +1F1E7 1F1F4 ; fully-qualified # ๐Ÿ‡ง๐Ÿ‡ด Bolivia +1F1E7 1F1F6 ; fully-qualified # ๐Ÿ‡ง๐Ÿ‡ถ Caribbean Netherlands +1F1E7 1F1F7 ; fully-qualified # ๐Ÿ‡ง๐Ÿ‡ท Brazil +1F1E7 1F1F8 ; fully-qualified # ๐Ÿ‡ง๐Ÿ‡ธ Bahamas +1F1E7 1F1F9 ; fully-qualified # ๐Ÿ‡ง๐Ÿ‡น Bhutan +1F1E7 1F1FB ; fully-qualified # ๐Ÿ‡ง๐Ÿ‡ป Bouvet Island +1F1E7 1F1FC ; fully-qualified # ๐Ÿ‡ง๐Ÿ‡ผ Botswana +1F1E7 1F1FE ; fully-qualified # ๐Ÿ‡ง๐Ÿ‡พ Belarus +1F1E7 1F1FF ; fully-qualified # ๐Ÿ‡ง๐Ÿ‡ฟ Belize +1F1E8 1F1E6 ; fully-qualified # ๐Ÿ‡จ๐Ÿ‡ฆ Canada +1F1E8 1F1E8 ; fully-qualified # ๐Ÿ‡จ๐Ÿ‡จ Cocos (Keeling) Islands +1F1E8 1F1E9 ; fully-qualified # ๐Ÿ‡จ๐Ÿ‡ฉ Congo - Kinshasa +1F1E8 1F1EB ; fully-qualified # ๐Ÿ‡จ๐Ÿ‡ซ Central African Republic +1F1E8 1F1EC ; fully-qualified # ๐Ÿ‡จ๐Ÿ‡ฌ Congo - Brazzaville +1F1E8 1F1ED ; fully-qualified # ๐Ÿ‡จ๐Ÿ‡ญ Switzerland +1F1E8 1F1EE ; fully-qualified # ๐Ÿ‡จ๐Ÿ‡ฎ Cรดte dโ€™Ivoire +1F1E8 1F1F0 ; fully-qualified # ๐Ÿ‡จ๐Ÿ‡ฐ Cook Islands +1F1E8 1F1F1 ; fully-qualified # ๐Ÿ‡จ๐Ÿ‡ฑ Chile +1F1E8 1F1F2 ; fully-qualified # ๐Ÿ‡จ๐Ÿ‡ฒ Cameroon +1F1E8 1F1F3 ; fully-qualified # ๐Ÿ‡จ๐Ÿ‡ณ China +1F1E8 1F1F4 ; fully-qualified # ๐Ÿ‡จ๐Ÿ‡ด Colombia +1F1E8 1F1F5 ; fully-qualified # ๐Ÿ‡จ๐Ÿ‡ต Clipperton Island +1F1E8 1F1F7 ; fully-qualified # ๐Ÿ‡จ๐Ÿ‡ท Costa Rica +1F1E8 1F1FA ; fully-qualified # ๐Ÿ‡จ๐Ÿ‡บ Cuba +1F1E8 1F1FB ; fully-qualified # ๐Ÿ‡จ๐Ÿ‡ป Cape Verde +1F1E8 1F1FC ; fully-qualified # ๐Ÿ‡จ๐Ÿ‡ผ Curaรงao +1F1E8 1F1FD ; fully-qualified # ๐Ÿ‡จ๐Ÿ‡ฝ Christmas Island +1F1E8 1F1FE ; fully-qualified # ๐Ÿ‡จ๐Ÿ‡พ Cyprus +1F1E8 1F1FF ; fully-qualified # ๐Ÿ‡จ๐Ÿ‡ฟ Czechia +1F1E9 1F1EA ; fully-qualified # ๐Ÿ‡ฉ๐Ÿ‡ช Germany +1F1E9 1F1EC ; fully-qualified # ๐Ÿ‡ฉ๐Ÿ‡ฌ Diego Garcia +1F1E9 1F1EF ; fully-qualified # ๐Ÿ‡ฉ๐Ÿ‡ฏ Djibouti +1F1E9 1F1F0 ; fully-qualified # ๐Ÿ‡ฉ๐Ÿ‡ฐ Denmark +1F1E9 1F1F2 ; fully-qualified # ๐Ÿ‡ฉ๐Ÿ‡ฒ Dominica +1F1E9 1F1F4 ; fully-qualified # ๐Ÿ‡ฉ๐Ÿ‡ด Dominican Republic +1F1E9 1F1FF ; fully-qualified # ๐Ÿ‡ฉ๐Ÿ‡ฟ Algeria +1F1EA 1F1E6 ; fully-qualified # ๐Ÿ‡ช๐Ÿ‡ฆ Ceuta & Melilla +1F1EA 1F1E8 ; fully-qualified # ๐Ÿ‡ช๐Ÿ‡จ Ecuador +1F1EA 1F1EA ; fully-qualified # ๐Ÿ‡ช๐Ÿ‡ช Estonia +1F1EA 1F1EC ; fully-qualified # ๐Ÿ‡ช๐Ÿ‡ฌ Egypt +1F1EA 1F1ED ; fully-qualified # ๐Ÿ‡ช๐Ÿ‡ญ Western Sahara +1F1EA 1F1F7 ; fully-qualified # ๐Ÿ‡ช๐Ÿ‡ท Eritrea +1F1EA 1F1F8 ; fully-qualified # ๐Ÿ‡ช๐Ÿ‡ธ Spain +1F1EA 1F1F9 ; fully-qualified # ๐Ÿ‡ช๐Ÿ‡น Ethiopia +1F1EA 1F1FA ; fully-qualified # ๐Ÿ‡ช๐Ÿ‡บ European Union +1F1EB 1F1EE ; fully-qualified # ๐Ÿ‡ซ๐Ÿ‡ฎ Finland +1F1EB 1F1EF ; fully-qualified # ๐Ÿ‡ซ๐Ÿ‡ฏ Fiji +1F1EB 1F1F0 ; fully-qualified # ๐Ÿ‡ซ๐Ÿ‡ฐ Falkland Islands +1F1EB 1F1F2 ; fully-qualified # ๐Ÿ‡ซ๐Ÿ‡ฒ Micronesia +1F1EB 1F1F4 ; fully-qualified # ๐Ÿ‡ซ๐Ÿ‡ด Faroe Islands +1F1EB 1F1F7 ; fully-qualified # ๐Ÿ‡ซ๐Ÿ‡ท France +1F1EC 1F1E6 ; fully-qualified # ๐Ÿ‡ฌ๐Ÿ‡ฆ Gabon +1F1EC 1F1E7 ; fully-qualified # ๐Ÿ‡ฌ๐Ÿ‡ง United Kingdom +1F1EC 1F1E9 ; fully-qualified # ๐Ÿ‡ฌ๐Ÿ‡ฉ Grenada +1F1EC 1F1EA ; fully-qualified # ๐Ÿ‡ฌ๐Ÿ‡ช Georgia +1F1EC 1F1EB ; fully-qualified # ๐Ÿ‡ฌ๐Ÿ‡ซ French Guiana +1F1EC 1F1EC ; fully-qualified # ๐Ÿ‡ฌ๐Ÿ‡ฌ Guernsey +1F1EC 1F1ED ; fully-qualified # ๐Ÿ‡ฌ๐Ÿ‡ญ Ghana +1F1EC 1F1EE ; fully-qualified # ๐Ÿ‡ฌ๐Ÿ‡ฎ Gibraltar +1F1EC 1F1F1 ; fully-qualified # ๐Ÿ‡ฌ๐Ÿ‡ฑ Greenland +1F1EC 1F1F2 ; fully-qualified # ๐Ÿ‡ฌ๐Ÿ‡ฒ Gambia +1F1EC 1F1F3 ; fully-qualified # ๐Ÿ‡ฌ๐Ÿ‡ณ Guinea +1F1EC 1F1F5 ; fully-qualified # ๐Ÿ‡ฌ๐Ÿ‡ต Guadeloupe +1F1EC 1F1F6 ; fully-qualified # ๐Ÿ‡ฌ๐Ÿ‡ถ Equatorial Guinea +1F1EC 1F1F7 ; fully-qualified # ๐Ÿ‡ฌ๐Ÿ‡ท Greece +1F1EC 1F1F8 ; fully-qualified # ๐Ÿ‡ฌ๐Ÿ‡ธ South Georgia & South Sandwich Islands +1F1EC 1F1F9 ; fully-qualified # ๐Ÿ‡ฌ๐Ÿ‡น Guatemala +1F1EC 1F1FA ; fully-qualified # ๐Ÿ‡ฌ๐Ÿ‡บ Guam +1F1EC 1F1FC ; fully-qualified # ๐Ÿ‡ฌ๐Ÿ‡ผ Guinea-Bissau +1F1EC 1F1FE ; fully-qualified # ๐Ÿ‡ฌ๐Ÿ‡พ Guyana +1F1ED 1F1F0 ; fully-qualified # ๐Ÿ‡ญ๐Ÿ‡ฐ Hong Kong SAR China +1F1ED 1F1F2 ; fully-qualified # ๐Ÿ‡ญ๐Ÿ‡ฒ Heard & McDonald Islands +1F1ED 1F1F3 ; fully-qualified # ๐Ÿ‡ญ๐Ÿ‡ณ Honduras +1F1ED 1F1F7 ; fully-qualified # ๐Ÿ‡ญ๐Ÿ‡ท Croatia +1F1ED 1F1F9 ; fully-qualified # ๐Ÿ‡ญ๐Ÿ‡น Haiti +1F1ED 1F1FA ; fully-qualified # ๐Ÿ‡ญ๐Ÿ‡บ Hungary +1F1EE 1F1E8 ; fully-qualified # ๐Ÿ‡ฎ๐Ÿ‡จ Canary Islands +1F1EE 1F1E9 ; fully-qualified # ๐Ÿ‡ฎ๐Ÿ‡ฉ Indonesia +1F1EE 1F1EA ; fully-qualified # ๐Ÿ‡ฎ๐Ÿ‡ช Ireland +1F1EE 1F1F1 ; fully-qualified # ๐Ÿ‡ฎ๐Ÿ‡ฑ Israel +1F1EE 1F1F2 ; fully-qualified # ๐Ÿ‡ฎ๐Ÿ‡ฒ Isle of Man +1F1EE 1F1F3 ; fully-qualified # ๐Ÿ‡ฎ๐Ÿ‡ณ India +1F1EE 1F1F4 ; fully-qualified # ๐Ÿ‡ฎ๐Ÿ‡ด British Indian Ocean Territory +1F1EE 1F1F6 ; fully-qualified # ๐Ÿ‡ฎ๐Ÿ‡ถ Iraq +1F1EE 1F1F7 ; fully-qualified # ๐Ÿ‡ฎ๐Ÿ‡ท Iran +1F1EE 1F1F8 ; fully-qualified # ๐Ÿ‡ฎ๐Ÿ‡ธ Iceland +1F1EE 1F1F9 ; fully-qualified # ๐Ÿ‡ฎ๐Ÿ‡น Italy +1F1EF 1F1EA ; fully-qualified # ๐Ÿ‡ฏ๐Ÿ‡ช Jersey +1F1EF 1F1F2 ; fully-qualified # ๐Ÿ‡ฏ๐Ÿ‡ฒ Jamaica +1F1EF 1F1F4 ; fully-qualified # ๐Ÿ‡ฏ๐Ÿ‡ด Jordan +1F1EF 1F1F5 ; fully-qualified # ๐Ÿ‡ฏ๐Ÿ‡ต Japan +1F1F0 1F1EA ; fully-qualified # ๐Ÿ‡ฐ๐Ÿ‡ช Kenya +1F1F0 1F1EC ; fully-qualified # ๐Ÿ‡ฐ๐Ÿ‡ฌ Kyrgyzstan +1F1F0 1F1ED ; fully-qualified # ๐Ÿ‡ฐ๐Ÿ‡ญ Cambodia +1F1F0 1F1EE ; fully-qualified # ๐Ÿ‡ฐ๐Ÿ‡ฎ Kiribati +1F1F0 1F1F2 ; fully-qualified # ๐Ÿ‡ฐ๐Ÿ‡ฒ Comoros +1F1F0 1F1F3 ; fully-qualified # ๐Ÿ‡ฐ๐Ÿ‡ณ St. Kitts & Nevis +1F1F0 1F1F5 ; fully-qualified # ๐Ÿ‡ฐ๐Ÿ‡ต North Korea +1F1F0 1F1F7 ; fully-qualified # ๐Ÿ‡ฐ๐Ÿ‡ท South Korea +1F1F0 1F1FC ; fully-qualified # ๐Ÿ‡ฐ๐Ÿ‡ผ Kuwait +1F1F0 1F1FE ; fully-qualified # ๐Ÿ‡ฐ๐Ÿ‡พ Cayman Islands +1F1F0 1F1FF ; fully-qualified # ๐Ÿ‡ฐ๐Ÿ‡ฟ Kazakhstan +1F1F1 1F1E6 ; fully-qualified # ๐Ÿ‡ฑ๐Ÿ‡ฆ Laos +1F1F1 1F1E7 ; fully-qualified # ๐Ÿ‡ฑ๐Ÿ‡ง Lebanon +1F1F1 1F1E8 ; fully-qualified # ๐Ÿ‡ฑ๐Ÿ‡จ St. Lucia +1F1F1 1F1EE ; fully-qualified # ๐Ÿ‡ฑ๐Ÿ‡ฎ Liechtenstein +1F1F1 1F1F0 ; fully-qualified # ๐Ÿ‡ฑ๐Ÿ‡ฐ Sri Lanka +1F1F1 1F1F7 ; fully-qualified # ๐Ÿ‡ฑ๐Ÿ‡ท Liberia +1F1F1 1F1F8 ; fully-qualified # ๐Ÿ‡ฑ๐Ÿ‡ธ Lesotho +1F1F1 1F1F9 ; fully-qualified # ๐Ÿ‡ฑ๐Ÿ‡น Lithuania +1F1F1 1F1FA ; fully-qualified # ๐Ÿ‡ฑ๐Ÿ‡บ Luxembourg +1F1F1 1F1FB ; fully-qualified # ๐Ÿ‡ฑ๐Ÿ‡ป Latvia +1F1F1 1F1FE ; fully-qualified # ๐Ÿ‡ฑ๐Ÿ‡พ Libya +1F1F2 1F1E6 ; fully-qualified # ๐Ÿ‡ฒ๐Ÿ‡ฆ Morocco +1F1F2 1F1E8 ; fully-qualified # ๐Ÿ‡ฒ๐Ÿ‡จ Monaco +1F1F2 1F1E9 ; fully-qualified # ๐Ÿ‡ฒ๐Ÿ‡ฉ Moldova +1F1F2 1F1EA ; fully-qualified # ๐Ÿ‡ฒ๐Ÿ‡ช Montenegro +1F1F2 1F1EB ; fully-qualified # ๐Ÿ‡ฒ๐Ÿ‡ซ St. Martin +1F1F2 1F1EC ; fully-qualified # ๐Ÿ‡ฒ๐Ÿ‡ฌ Madagascar +1F1F2 1F1ED ; fully-qualified # ๐Ÿ‡ฒ๐Ÿ‡ญ Marshall Islands +1F1F2 1F1F0 ; fully-qualified # ๐Ÿ‡ฒ๐Ÿ‡ฐ Macedonia +1F1F2 1F1F1 ; fully-qualified # ๐Ÿ‡ฒ๐Ÿ‡ฑ Mali +1F1F2 1F1F2 ; fully-qualified # ๐Ÿ‡ฒ๐Ÿ‡ฒ Myanmar (Burma) +1F1F2 1F1F3 ; fully-qualified # ๐Ÿ‡ฒ๐Ÿ‡ณ Mongolia +1F1F2 1F1F4 ; fully-qualified # ๐Ÿ‡ฒ๐Ÿ‡ด Macau SAR China +1F1F2 1F1F5 ; fully-qualified # ๐Ÿ‡ฒ๐Ÿ‡ต Northern Mariana Islands +1F1F2 1F1F6 ; fully-qualified # ๐Ÿ‡ฒ๐Ÿ‡ถ Martinique +1F1F2 1F1F7 ; fully-qualified # ๐Ÿ‡ฒ๐Ÿ‡ท Mauritania +1F1F2 1F1F8 ; fully-qualified # ๐Ÿ‡ฒ๐Ÿ‡ธ Montserrat +1F1F2 1F1F9 ; fully-qualified # ๐Ÿ‡ฒ๐Ÿ‡น Malta +1F1F2 1F1FA ; fully-qualified # ๐Ÿ‡ฒ๐Ÿ‡บ Mauritius +1F1F2 1F1FB ; fully-qualified # ๐Ÿ‡ฒ๐Ÿ‡ป Maldives +1F1F2 1F1FC ; fully-qualified # ๐Ÿ‡ฒ๐Ÿ‡ผ Malawi +1F1F2 1F1FD ; fully-qualified # ๐Ÿ‡ฒ๐Ÿ‡ฝ Mexico +1F1F2 1F1FE ; fully-qualified # ๐Ÿ‡ฒ๐Ÿ‡พ Malaysia +1F1F2 1F1FF ; fully-qualified # ๐Ÿ‡ฒ๐Ÿ‡ฟ Mozambique +1F1F3 1F1E6 ; fully-qualified # ๐Ÿ‡ณ๐Ÿ‡ฆ Namibia +1F1F3 1F1E8 ; fully-qualified # ๐Ÿ‡ณ๐Ÿ‡จ New Caledonia +1F1F3 1F1EA ; fully-qualified # ๐Ÿ‡ณ๐Ÿ‡ช Niger +1F1F3 1F1EB ; fully-qualified # ๐Ÿ‡ณ๐Ÿ‡ซ Norfolk Island +1F1F3 1F1EC ; fully-qualified # ๐Ÿ‡ณ๐Ÿ‡ฌ Nigeria +1F1F3 1F1EE ; fully-qualified # ๐Ÿ‡ณ๐Ÿ‡ฎ Nicaragua +1F1F3 1F1F1 ; fully-qualified # ๐Ÿ‡ณ๐Ÿ‡ฑ Netherlands +1F1F3 1F1F4 ; fully-qualified # ๐Ÿ‡ณ๐Ÿ‡ด Norway +1F1F3 1F1F5 ; fully-qualified # ๐Ÿ‡ณ๐Ÿ‡ต Nepal +1F1F3 1F1F7 ; fully-qualified # ๐Ÿ‡ณ๐Ÿ‡ท Nauru +1F1F3 1F1FA ; fully-qualified # ๐Ÿ‡ณ๐Ÿ‡บ Niue +1F1F3 1F1FF ; fully-qualified # ๐Ÿ‡ณ๐Ÿ‡ฟ New Zealand +1F1F4 1F1F2 ; fully-qualified # ๐Ÿ‡ด๐Ÿ‡ฒ Oman +1F1F5 1F1E6 ; fully-qualified # ๐Ÿ‡ต๐Ÿ‡ฆ Panama +1F1F5 1F1EA ; fully-qualified # ๐Ÿ‡ต๐Ÿ‡ช Peru +1F1F5 1F1EB ; fully-qualified # ๐Ÿ‡ต๐Ÿ‡ซ French Polynesia +1F1F5 1F1EC ; fully-qualified # ๐Ÿ‡ต๐Ÿ‡ฌ Papua New Guinea +1F1F5 1F1ED ; fully-qualified # ๐Ÿ‡ต๐Ÿ‡ญ Philippines +1F1F5 1F1F0 ; fully-qualified # ๐Ÿ‡ต๐Ÿ‡ฐ Pakistan +1F1F5 1F1F1 ; fully-qualified # ๐Ÿ‡ต๐Ÿ‡ฑ Poland +1F1F5 1F1F2 ; fully-qualified # ๐Ÿ‡ต๐Ÿ‡ฒ St. Pierre & Miquelon +1F1F5 1F1F3 ; fully-qualified # ๐Ÿ‡ต๐Ÿ‡ณ Pitcairn Islands +1F1F5 1F1F7 ; fully-qualified # ๐Ÿ‡ต๐Ÿ‡ท Puerto Rico +1F1F5 1F1F8 ; fully-qualified # ๐Ÿ‡ต๐Ÿ‡ธ Palestinian Territories +1F1F5 1F1F9 ; fully-qualified # ๐Ÿ‡ต๐Ÿ‡น Portugal +1F1F5 1F1FC ; fully-qualified # ๐Ÿ‡ต๐Ÿ‡ผ Palau +1F1F5 1F1FE ; fully-qualified # ๐Ÿ‡ต๐Ÿ‡พ Paraguay +1F1F6 1F1E6 ; fully-qualified # ๐Ÿ‡ถ๐Ÿ‡ฆ Qatar +1F1F7 1F1EA ; fully-qualified # ๐Ÿ‡ท๐Ÿ‡ช Rรฉunion +1F1F7 1F1F4 ; fully-qualified # ๐Ÿ‡ท๐Ÿ‡ด Romania +1F1F7 1F1F8 ; fully-qualified # ๐Ÿ‡ท๐Ÿ‡ธ Serbia +1F1F7 1F1FA ; fully-qualified # ๐Ÿ‡ท๐Ÿ‡บ Russia +1F1F7 1F1FC ; fully-qualified # ๐Ÿ‡ท๐Ÿ‡ผ Rwanda +1F1F8 1F1E6 ; fully-qualified # ๐Ÿ‡ธ๐Ÿ‡ฆ Saudi Arabia +1F1F8 1F1E7 ; fully-qualified # ๐Ÿ‡ธ๐Ÿ‡ง Solomon Islands +1F1F8 1F1E8 ; fully-qualified # ๐Ÿ‡ธ๐Ÿ‡จ Seychelles +1F1F8 1F1E9 ; fully-qualified # ๐Ÿ‡ธ๐Ÿ‡ฉ Sudan +1F1F8 1F1EA ; fully-qualified # ๐Ÿ‡ธ๐Ÿ‡ช Sweden +1F1F8 1F1EC ; fully-qualified # ๐Ÿ‡ธ๐Ÿ‡ฌ Singapore +1F1F8 1F1ED ; fully-qualified # ๐Ÿ‡ธ๐Ÿ‡ญ St. Helena +1F1F8 1F1EE ; fully-qualified # ๐Ÿ‡ธ๐Ÿ‡ฎ Slovenia +1F1F8 1F1EF ; fully-qualified # ๐Ÿ‡ธ๐Ÿ‡ฏ Svalbard & Jan Mayen +1F1F8 1F1F0 ; fully-qualified # ๐Ÿ‡ธ๐Ÿ‡ฐ Slovakia +1F1F8 1F1F1 ; fully-qualified # ๐Ÿ‡ธ๐Ÿ‡ฑ Sierra Leone +1F1F8 1F1F2 ; fully-qualified # ๐Ÿ‡ธ๐Ÿ‡ฒ San Marino +1F1F8 1F1F3 ; fully-qualified # ๐Ÿ‡ธ๐Ÿ‡ณ Senegal +1F1F8 1F1F4 ; fully-qualified # ๐Ÿ‡ธ๐Ÿ‡ด Somalia +1F1F8 1F1F7 ; fully-qualified # ๐Ÿ‡ธ๐Ÿ‡ท Suriname +1F1F8 1F1F8 ; fully-qualified # ๐Ÿ‡ธ๐Ÿ‡ธ South Sudan +1F1F8 1F1F9 ; fully-qualified # ๐Ÿ‡ธ๐Ÿ‡น Sรฃo Tomรฉ & Prรญncipe +1F1F8 1F1FB ; fully-qualified # ๐Ÿ‡ธ๐Ÿ‡ป El Salvador +1F1F8 1F1FD ; fully-qualified # ๐Ÿ‡ธ๐Ÿ‡ฝ Sint Maarten +1F1F8 1F1FE ; fully-qualified # ๐Ÿ‡ธ๐Ÿ‡พ Syria +1F1F8 1F1FF ; fully-qualified # ๐Ÿ‡ธ๐Ÿ‡ฟ Swaziland +1F1F9 1F1E6 ; fully-qualified # ๐Ÿ‡น๐Ÿ‡ฆ Tristan da Cunha +1F1F9 1F1E8 ; fully-qualified # ๐Ÿ‡น๐Ÿ‡จ Turks & Caicos Islands +1F1F9 1F1E9 ; fully-qualified # ๐Ÿ‡น๐Ÿ‡ฉ Chad +1F1F9 1F1EB ; fully-qualified # ๐Ÿ‡น๐Ÿ‡ซ French Southern Territories +1F1F9 1F1EC ; fully-qualified # ๐Ÿ‡น๐Ÿ‡ฌ Togo +1F1F9 1F1ED ; fully-qualified # ๐Ÿ‡น๐Ÿ‡ญ Thailand +1F1F9 1F1EF ; fully-qualified # ๐Ÿ‡น๐Ÿ‡ฏ Tajikistan +1F1F9 1F1F0 ; fully-qualified # ๐Ÿ‡น๐Ÿ‡ฐ Tokelau +1F1F9 1F1F1 ; fully-qualified # ๐Ÿ‡น๐Ÿ‡ฑ Timor-Leste +1F1F9 1F1F2 ; fully-qualified # ๐Ÿ‡น๐Ÿ‡ฒ Turkmenistan +1F1F9 1F1F3 ; fully-qualified # ๐Ÿ‡น๐Ÿ‡ณ Tunisia +1F1F9 1F1F4 ; fully-qualified # ๐Ÿ‡น๐Ÿ‡ด Tonga +1F1F9 1F1F7 ; fully-qualified # ๐Ÿ‡น๐Ÿ‡ท Turkey +1F1F9 1F1F9 ; fully-qualified # ๐Ÿ‡น๐Ÿ‡น Trinidad & Tobago +1F1F9 1F1FB ; fully-qualified # ๐Ÿ‡น๐Ÿ‡ป Tuvalu +1F1F9 1F1FC ; fully-qualified # ๐Ÿ‡น๐Ÿ‡ผ Taiwan +1F1F9 1F1FF ; fully-qualified # ๐Ÿ‡น๐Ÿ‡ฟ Tanzania +1F1FA 1F1E6 ; fully-qualified # ๐Ÿ‡บ๐Ÿ‡ฆ Ukraine +1F1FA 1F1EC ; fully-qualified # ๐Ÿ‡บ๐Ÿ‡ฌ Uganda +1F1FA 1F1F2 ; fully-qualified # ๐Ÿ‡บ๐Ÿ‡ฒ U.S. Outlying Islands +1F1FA 1F1F3 ; fully-qualified # ๐Ÿ‡บ๐Ÿ‡ณ United Nations +1F1FA 1F1F8 ; fully-qualified # ๐Ÿ‡บ๐Ÿ‡ธ United States +1F1FA 1F1FE ; fully-qualified # ๐Ÿ‡บ๐Ÿ‡พ Uruguay +1F1FA 1F1FF ; fully-qualified # ๐Ÿ‡บ๐Ÿ‡ฟ Uzbekistan +1F1FB 1F1E6 ; fully-qualified # ๐Ÿ‡ป๐Ÿ‡ฆ Vatican City +1F1FB 1F1E8 ; fully-qualified # ๐Ÿ‡ป๐Ÿ‡จ St. Vincent & Grenadines +1F1FB 1F1EA ; fully-qualified # ๐Ÿ‡ป๐Ÿ‡ช Venezuela +1F1FB 1F1EC ; fully-qualified # ๐Ÿ‡ป๐Ÿ‡ฌ British Virgin Islands +1F1FB 1F1EE ; fully-qualified # ๐Ÿ‡ป๐Ÿ‡ฎ U.S. Virgin Islands +1F1FB 1F1F3 ; fully-qualified # ๐Ÿ‡ป๐Ÿ‡ณ Vietnam +1F1FB 1F1FA ; fully-qualified # ๐Ÿ‡ป๐Ÿ‡บ Vanuatu +1F1FC 1F1EB ; fully-qualified # ๐Ÿ‡ผ๐Ÿ‡ซ Wallis & Futuna +1F1FC 1F1F8 ; fully-qualified # ๐Ÿ‡ผ๐Ÿ‡ธ Samoa +1F1FD 1F1F0 ; fully-qualified # ๐Ÿ‡ฝ๐Ÿ‡ฐ Kosovo +1F1FE 1F1EA ; fully-qualified # ๐Ÿ‡พ๐Ÿ‡ช Yemen +1F1FE 1F1F9 ; fully-qualified # ๐Ÿ‡พ๐Ÿ‡น Mayotte +1F1FF 1F1E6 ; fully-qualified # ๐Ÿ‡ฟ๐Ÿ‡ฆ South Africa +1F1FF 1F1F2 ; fully-qualified # ๐Ÿ‡ฟ๐Ÿ‡ฒ Zambia +1F1FF 1F1FC ; fully-qualified # ๐Ÿ‡ฟ๐Ÿ‡ผ Zimbabwe + +# subgroup: subdivision-flag +1F3F4 E0067 E0062 E0065 E006E E0067 E007F ; fully-qualified # ๐Ÿด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ England +1F3F4 E0067 E0062 E0073 E0063 E0074 E007F ; fully-qualified # ๐Ÿด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ Scotland +1F3F4 E0067 E0062 E0077 E006C E0073 E007F ; fully-qualified # ๐Ÿด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ Wales + +# Flags subtotal: 271 +# Flags subtotal: 271 w/o modifiers + +#EOF diff --git a/tests/manual/emojisequences/main.cpp b/tests/manual/emojisequences/main.cpp new file mode 100644 index 00000000..aa3bd803 --- /dev/null +++ b/tests/manual/emojisequences/main.cpp @@ -0,0 +1,18 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include "mainwindow.h" + +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + + MainWindow w; + w.show(); + + return a.exec(); +} + diff --git a/tests/manual/emojisequences/mainwindow.cpp b/tests/manual/emojisequences/mainwindow.cpp new file mode 100644 index 00000000..1b50698b --- /dev/null +++ b/tests/manual/emojisequences/mainwindow.cpp @@ -0,0 +1,95 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include "mainwindow.h" +#include "ui_mainwindow.h" + +#include +#include +#include + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) + , ui(new Ui::MainWindow) +{ + ui->setupUi(this); + + connect(ui->toolButton, &QToolButton::clicked, this, &MainWindow::loadCustomFont); + + populateEmojiTest(); +} + +MainWindow::~MainWindow() +{ + delete ui; +} + +void MainWindow::populateEmojiTest() +{ + QFile file(":/emoji-test.txt"); + + ui->tableWidget->clear(); + ui->tableWidget->setColumnCount(8); + + QList > strings; + if (file.open(QIODevice::ReadOnly)) { + while (!file.atEnd()) { + QString l = file.readLine(); + + QStringList toolTip; + QString testString; + QStringList tokens = l.split(QLatin1Char(' '), Qt::SkipEmptyParts); + for (int i = 0; i < tokens.size(); ++i) { + if (tokens.at(i) == QLatin1Char(';')) + break; + + bool ok; + char32_t ucs4 = tokens.at(i).toUInt(&ok, 16); + if (!ok) + break; + + testString += QString::fromUcs4(&ucs4, 1); + toolTip << QString::number(ucs4, 16); + } + + if (!toolTip.isEmpty()) { + strings.append(qMakePair(testString, toolTip.join(','))); + } + } + } + + ui->tableWidget->setRowCount(strings.count() / 8); + for (int i = 0; i < strings.count(); ++i) { + int row = i / 8; + int column = i % 8; + QString testString = strings.at(i).first; + QString toolTip = strings.at(i).second; + + QTableWidgetItem *it = new QTableWidgetItem(testString); + ui->tableWidget->setItem(row, column, it); + it->setText(testString); + it->setToolTip(toolTip); + } +} + +void MainWindow::loadCustomFont() +{ +#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) + ui->tableWidget->clear(); + QFontDatabase::removeAllApplicationFonts(); + + QString fileName = QFileDialog::getOpenFileName(this, tr("Open font file"), QString(), tr("Fonts (*.ttf *.otf);All files (*)")); + if (!fileName.isEmpty()) { + int id = QFontDatabase::addApplicationFont(fileName); + if (id >= 0) { + QStringList families = QFontDatabase::applicationFontFamilies(id); + QString family = families.size() > 0 ? families.first() : QString(); + if (!family.isEmpty()) { + QFontDatabase::setApplicationEmojiFontFamilies(QStringList() << family); + populateEmojiTest(); + } + } + } +#endif +} + diff --git a/tests/manual/emojisequences/mainwindow.h b/tests/manual/emojisequences/mainwindow.h new file mode 100644 index 00000000..cda2d9a4 --- /dev/null +++ b/tests/manual/emojisequences/mainwindow.h @@ -0,0 +1,31 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include + +namespace Ui { +class MainWindow; +} + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + explicit MainWindow(QWidget *parent = nullptr); + ~MainWindow(); + +private slots: + void loadCustomFont(); + +private: + void populateEmojiTest(); + + + Ui::MainWindow *ui; +}; + +#endif // MAINWINDOW_H diff --git a/tests/manual/emojisequences/mainwindow.ui b/tests/manual/emojisequences/mainwindow.ui new file mode 100644 index 00000000..622b149f --- /dev/null +++ b/tests/manual/emojisequences/mainwindow.ui @@ -0,0 +1,50 @@ + + + MainWindow + + + + 0 + 0 + 1245 + 972 + + + + MainWindow + + + + + + + + 20 + + + + + + + + Load custom font... + + + + + + + + + 0 + 0 + 1245 + 22 + + + + + + + +