summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authoralbert-github <albert.tests@gmail.com>2018-10-01 16:58:03 (GMT)
committeralbert-github <albert.tests@gmail.com>2018-10-01 16:58:03 (GMT)
commit47fee387821113956e10fffa79ea22062de8c817 (patch)
tree7762308ebbeb2f3465b6515450e2314ab048eb6f /src
parentd7d4d5c443887cc63211febe40d43f26dfe41bc0 (diff)
downloadDoxygen-47fee387821113956e10fffa79ea22062de8c817.zip
Doxygen-47fee387821113956e10fffa79ea22062de8c817.tar.gz
Doxygen-47fee387821113956e10fffa79ea22062de8c817.tar.bz2
issue_6517: Emoji support
Added issue support for the different output types. - Sources of the emoji - based on the Unicode definition v11.0: - https://unicode.org/emoji/charts/full-emoji-list.html - http://www.unicode.org/emoji/charts/full-emoji-modifiers.html - github definition list: - https://api.github.com/emojis - Input of emoji: :<test>: with the restriction that direct after the opening colon and direct before the closing colon no space is allowed - doctokinizer.l, adding detection of emoji and new command `\:` - doktokinizer.h, adding "word" type TK_EMOJI - docparser.* handling of new "word" type TK_EMOJI (analogous to HTML Entities), handling of new command `\:` - cmdmapper,cpp, cmdmapper.h, adding new command `\:` - htmlentity.cpp, adding new definition required for new command `\:` - Emoji - emoji.cpp, emoji.h, class for handling emoji analogous to HTML Entities, including small directions on how to update the code when a new emoji is defined. Not everything is converted to lowercase for comparison and accents are removed. - doxygen.cpp possibility to create list of supported emoji - handling emoji for output types (analogous to HTML Entities), see documentation for different output types - docparser.h, *docvisitor.* - rtfdocvisitor.* converting output to UTF-16 (based on http://scruss.com/blog/2017/03/12/in-the-unlikely-event-you-need-to-represent-emoji-in-rtf-using-perl/) - latexdocvisitor.*, handling arguments for emoji in output (see also latexgen.cpp for meaning of the arguments of doxygenemoji). - latexgen.cpp, adding new latex command for doxygen (doxygenemoji) and prevent too many open file (code before documentclass) - config.xml, definition of `LATEX_EMOJI_DIRECTORY` with path to images required for LaTeX output - Documentation: - emojisup.doc, user description - commands.doc, description of new command `\:` - index.doc, reference to emoji chapter - xmlcmds.doc, adjust reference to next chapter as a new chapter is added - Doxyfile*, adding emoji chapter Build system - CMakeLists.txt adding new files
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/cmdmapper.cpp1
-rw-r--r--src/cmdmapper.h3
-rw-r--r--src/config.xml10
-rw-r--r--src/docbookvisitor.cpp16
-rw-r--r--src/docbookvisitor.h1
-rw-r--r--src/docparser.cpp123
-rw-r--r--src/docparser.h20
-rw-r--r--src/doctokenizer.h1
-rw-r--r--src/doctokenizer.l20
-rw-r--r--src/docvisitor.h2
-rw-r--r--src/doxygen.cpp33
-rw-r--r--src/emoji.cpp3187
-rw-r--r--src/emoji.h50
-rw-r--r--src/htmldocvisitor.cpp15
-rw-r--r--src/htmldocvisitor.h1
-rw-r--r--src/htmlentity.cpp3
-rw-r--r--src/latexdocvisitor.h1
-rw-r--r--src/latexgen.cpp16
-rw-r--r--src/mandocvisitor.cpp17
-rw-r--r--src/mandocvisitor.h1
-rw-r--r--src/perlmodgen.cpp7
-rw-r--r--src/printdocvisitor.h14
-rw-r--r--src/rtfdocvisitor.cpp43
-rw-r--r--src/rtfdocvisitor.h1
-rw-r--r--src/textdocvisitor.cpp13
-rw-r--r--src/textdocvisitor.h1
-rw-r--r--src/xmldocvisitor.cpp15
28 files changed, 3610 insertions, 6 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index b57d360..4dc31fa 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -183,6 +183,7 @@ add_library(_doxygen STATIC
dot.cpp
doxygen.cpp
eclipsehelp.cpp
+ emoji.cpp
entry.cpp
filedef.cpp
filename.cpp
diff --git a/src/cmdmapper.cpp b/src/cmdmapper.cpp
index 71da3f3..acbbe44 100644
--- a/src/cmdmapper.cpp
+++ b/src/cmdmapper.cpp
@@ -120,6 +120,7 @@ CommandMap cmdMap[] =
{ ".", CMD_PUNT },
{ "+", CMD_PLUS },
{ "-", CMD_MINUS },
+ { ":", CMD_COLON },
{ "::", CMD_DCOLON },
{ "\"", CMD_QUOTE },
{ "_internalref", CMD_INTERNALREF },
diff --git a/src/cmdmapper.h b/src/cmdmapper.h
index d06de63..c1747ee 100644
--- a/src/cmdmapper.h
+++ b/src/cmdmapper.h
@@ -136,7 +136,8 @@ enum CommandType
CMD_MINUS = 106,
CMD_INCLUDEDOC = 107,
CMD_SNIPPETDOC = 108,
- CMD_SNIPWITHLINES= 109
+ CMD_SNIPWITHLINES= 109,
+ CMD_COLON = 110
};
enum HtmlTagType
diff --git a/src/config.xml b/src/config.xml
index 08795dc..43144fc 100644
--- a/src/config.xml
+++ b/src/config.xml
@@ -2769,6 +2769,16 @@ or
]]>
</docs>
</option>
+ <option type='string' id='LATEX_EMOJI_DIRECTORY' format='dir' defval='' depends='GENERATE_LATEX'>
+ <docs>
+<![CDATA[
+ The \c LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute)
+ path from which the emoji images will be read.
+ If a relative path is entered, it will be relative to the \ref cfg_latex_output "LATEX_OUTPUT"
+ directory. If left blank the \ref cfg_latex_output "LATEX_OUTPUT" directory will be used.
+]]>
+ </docs>
+ </option>
</group>
<group name='RTF' docs='Configuration options related to the RTF output'>
<option type='bool' id='GENERATE_RTF' defval='0'>
diff --git a/src/docbookvisitor.cpp b/src/docbookvisitor.cpp
index da84931..fa6a7e8 100644
--- a/src/docbookvisitor.cpp
+++ b/src/docbookvisitor.cpp
@@ -34,6 +34,7 @@
#include "msc.h"
#include "dia.h"
#include "htmlentity.h"
+#include "emoji.h"
#include "plantuml.h"
#if 0
@@ -168,6 +169,21 @@ DB_VIS_C
}
}
+void DocbookDocVisitor::visit(DocEmoji *s)
+{
+DB_VIS_C
+ if (m_hide) return;
+ const char *res = EmojiEntityMapper::instance()->docbook(s->emoji());
+ if (res)
+ {
+ m_t << res;
+ }
+ else
+ {
+ err("DocBook: non supported Emoji-entity found: %s\n",EmojiEntityMapper::instance()->html(s->emoji()));
+ }
+}
+
void DocbookDocVisitor::visit(DocURL *u)
{
DB_VIS_C
diff --git a/src/docbookvisitor.h b/src/docbookvisitor.h
index 40f8a68..bf1c3b2 100644
--- a/src/docbookvisitor.h
+++ b/src/docbookvisitor.h
@@ -42,6 +42,7 @@ class DocbookDocVisitor : public DocVisitor
void visit(DocLinkedWord *);
void visit(DocWhiteSpace *);
void visit(DocSymbol *);
+ void visit(DocEmoji *);
void visit(DocURL *);
void visit(DocLineBreak *);
void visit(DocHorRuler *);
diff --git a/src/docparser.cpp b/src/docparser.cpp
index b39b80e..633dc03 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -55,6 +55,7 @@
#include "growbuf.h"
#include "markdown.h"
#include "htmlentity.h"
+#include "emoji.h"
// debug off
#define DBG(x) do {} while(0)
@@ -909,6 +910,10 @@ static int handleStyleArgument(DocNode *parent,QList<DocNode> &children,
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found while handling command %s",
qPrint(g_token->name),qPrint(cmdName));
break;
+ case TK_EMOJI:
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported emoji '%s' found while handling command %s",
+ qPrint(g_token->name),qPrint(cmdName));
+ break;
case TK_HTMLTAG:
if (insideLI(parent) && Mappers::htmlTagMapper->map(g_token->name) && g_token->endTag)
{ // ignore </li> as the end of a style command
@@ -1307,6 +1312,10 @@ static void defaultHandleTitleAndSize(const int cmd, DocNode *parent, QList<DocN
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
break;
+ case TK_EMOJI:
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported emoji '%s' found",
+ qPrint(g_token->name));
+ break;
default:
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
tokToString(tok));
@@ -1369,7 +1378,7 @@ static bool defaultHandleToken(DocNode *parent,int tok, QList<DocNode> &children
handleWord)
{
DBG(("token %s at %d",tokToString(tok),doctokenizerYYlineno));
- if (tok==TK_WORD || tok==TK_LNKWORD || tok==TK_SYMBOL || tok==TK_URL ||
+ if (tok==TK_WORD || tok==TK_LNKWORD || tok==TK_SYMBOL || tok==TK_EMOJI|| tok==TK_URL ||
tok==TK_COMMAND || tok==TK_HTMLTAG
)
{
@@ -1404,6 +1413,9 @@ reparsetoken:
case CMD_HASH:
children.append(new DocSymbol(parent,DocSymbol::Sym_Hash));
break;
+ case CMD_COLON:
+ children.append(new DocSymbol(parent,DocSymbol::Sym_Colon));
+ break;
case CMD_DCOLON:
children.append(new DocSymbol(parent,DocSymbol::Sym_DoubleColon));
break;
@@ -1692,6 +1704,19 @@ reparsetoken:
}
}
break;
+ case TK_EMOJI:
+ {
+ int s = DocEmoji::decodeEmoji(tokenName);
+ if (s!=0)
+ {
+ children.append(new DocEmoji(parent,s));
+ }
+ else
+ {
+ return FALSE;
+ }
+ }
+ break;
case TK_WHITESPACE:
case TK_NEWPARA:
handlepara:
@@ -1769,6 +1794,12 @@ DocSymbol::SymType DocSymbol::decodeSymbol(const QCString &symName)
return HtmlEntityMapper::instance()->name2sym(symName);
}
+int DocEmoji::decodeEmoji(const QCString &symName)
+{
+ DBG(("decodeSymbol(%s)\n",qPrint(symName)));
+ return EmojiEntityMapper::instance()->name2sym(symName);
+}
+
//---------------------------------------------------------------------------
static int internalValidatingParseDoc(DocNode *parent,QList<DocNode> &children,
@@ -2340,6 +2371,10 @@ void DocSecRefItem::parse()
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
break;
+ case TK_EMOJI:
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported emoji '%s' found",
+ qPrint(g_token->name));
+ break;
default:
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
tokToString(tok));
@@ -2482,6 +2517,10 @@ void DocInternalRef::parse()
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
break;
+ case TK_EMOJI:
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported emoji '%s' found",
+ qPrint(g_token->name));
+ break;
default:
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
tokToString(tok));
@@ -2638,6 +2677,10 @@ void DocRef::parse()
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
break;
+ case TK_EMOJI:
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported emoji '%s' found",
+ qPrint(g_token->name));
+ break;
case TK_HTMLTAG:
break;
default:
@@ -2772,6 +2815,10 @@ QCString DocLink::parse(bool isJavaLink,bool isXmlLink)
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
break;
+ case TK_EMOJI:
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported emoji '%s' found",
+ qPrint(g_token->name));
+ break;
case TK_HTMLTAG:
if (g_token->name!="see" || !isXmlLink)
{
@@ -2963,6 +3010,10 @@ void DocVhdlFlow::parse()
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
break;
+ case TK_EMOJI:
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported emoji '%s' found",
+ qPrint(g_token->name));
+ break;
default:
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
tokToString(tok));
@@ -3099,6 +3150,10 @@ int DocHtmlHeader::parse()
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
break;
+ case TK_EMOJI:
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported emoji '%s' found",
+ qPrint(g_token->name));
+ break;
default:
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
tokToString(tok));
@@ -3142,6 +3197,10 @@ int DocHRef::parse()
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
break;
+ case TK_EMOJI:
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported emoji '%s' found",
+ qPrint(g_token->name));
+ break;
case TK_HTMLTAG:
{
@@ -3292,6 +3351,19 @@ int DocIndexEntry::parse()
}
}
break;
+ case TK_EMOJI:
+ {
+ int s = DocEmoji::decodeEmoji(g_token->name);
+ if (s != 0)
+ {
+ m_entry+=g_token->name;
+ }
+ else
+ {
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected emoji found as argument of \\addindex");
+ }
+ }
+ break;
case TK_COMMAND:
switch (Mappers::cmdMapper->map(g_token->name))
{
@@ -3302,6 +3374,7 @@ int DocIndexEntry::parse()
case CMD_AMP: m_entry+='&'; break;
case CMD_DOLLAR: m_entry+='$'; break;
case CMD_HASH: m_entry+='#'; break;
+ case CMD_COLON: m_entry+=":"; break;
case CMD_DCOLON: m_entry+="::"; break;
case CMD_PERCENT: m_entry+='%'; break;
case CMD_NDASH: m_entry+="--"; break;
@@ -3388,6 +3461,10 @@ int DocHtmlCaption::parse()
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
break;
+ case TK_EMOJI:
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported emoji '%s' found",
+ qPrint(g_token->name));
+ break;
case TK_HTMLTAG:
{
int tagId=Mappers::htmlTagMapper->map(g_token->name);
@@ -3997,6 +4074,10 @@ int DocHtmlDescTitle::parse()
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
break;
+ case TK_EMOJI:
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported emoji '%s' found",
+ qPrint(g_token->name));
+ break;
case TK_HTMLTAG:
{
int tagId=Mappers::htmlTagMapper->map(g_token->name);
@@ -4550,6 +4631,10 @@ void DocTitle::parse()
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found",
qPrint(g_token->name));
break;
+ case TK_EMOJI:
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported emoji '%s' found",
+ qPrint(g_token->name));
+ break;
default:
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected token %s",
tokToString(tok));
@@ -5467,6 +5552,9 @@ int DocPara::handleCommand(const QCString &cmdName)
case CMD_PIPE:
m_children.append(new DocSymbol(this,DocSymbol::Sym_Pipe));
break;
+ case CMD_COLON:
+ m_children.append(new DocSymbol(this,DocSymbol::Sym_Colon));
+ break;
case CMD_DCOLON:
m_children.append(new DocSymbol(this,DocSymbol::Sym_DoubleColon));
break;
@@ -6524,7 +6612,7 @@ int DocPara::parse()
{
reparsetoken:
DBG(("token %s at %d",tokToString(tok),doctokenizerYYlineno));
- if (tok==TK_WORD || tok==TK_LNKWORD || tok==TK_SYMBOL || tok==TK_URL ||
+ if (tok==TK_WORD || tok==TK_LNKWORD || tok==TK_SYMBOL || tok==TK_EMOJI || tok==TK_URL ||
tok==TK_COMMAND || tok==TK_HTMLTAG
)
{
@@ -6780,6 +6868,20 @@ reparsetoken:
}
break;
}
+ case TK_EMOJI:
+ {
+ int s = DocEmoji::decodeEmoji(g_token->name);
+ if (s!=0)
+ {
+ m_children.append(new DocEmoji(this,s));
+ }
+ else
+ {
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported emoji '%s' found",
+ qPrint(g_token->name));
+ }
+ break;
+ }
case TK_NEWPARA:
retval=TK_NEWPARA;
goto endparagraph;
@@ -6994,6 +7096,20 @@ void DocText::parse()
}
}
break;
+ case TK_EMOJI:
+ {
+ int s = DocSymbol::decodeSymbol(g_token->name);
+ if (s!=0)
+ {
+ m_children.append(new DocEmoji(this,s));
+ }
+ else
+ {
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported emoji '%s' found",
+ qPrint(g_token->name));
+ }
+ }
+ break;
case TK_COMMAND:
switch (Mappers::cmdMapper->map(g_token->name))
{
@@ -7018,6 +7134,9 @@ void DocText::parse()
case CMD_HASH:
m_children.append(new DocSymbol(this,DocSymbol::Sym_Hash));
break;
+ case CMD_COLON:
+ m_children.append(new DocSymbol(this,DocSymbol::Sym_Colon));
+ break;
case CMD_DCOLON:
m_children.append(new DocSymbol(this,DocSymbol::Sym_DoubleColon));
break;
diff --git a/src/docparser.h b/src/docparser.h
index 68f9fc1..8aca82d 100644
--- a/src/docparser.h
+++ b/src/docparser.h
@@ -140,7 +140,8 @@ class DocNode
Kind_HtmlBlockQuote = 49,
Kind_VhdlFlow = 50,
Kind_ParBlock = 51,
- Kind_DiaFile = 52
+ Kind_DiaFile = 52,
+ Kind_Emoji = 53
};
/*! Creates a new node */
DocNode() : m_parent(0), m_insidePre(FALSE) {}
@@ -454,7 +455,7 @@ class DocSymbol : public DocNode
/* doxygen commands mapped */
Sym_BSlash, Sym_At, Sym_Less, Sym_Greater, Sym_Amp,
Sym_Dollar, Sym_Hash, Sym_DoubleColon, Sym_Percent, Sym_Pipe,
- Sym_Quot, Sym_Minus, Sym_Plus, Sym_Dot
+ Sym_Quot, Sym_Minus, Sym_Plus, Sym_Dot, Sym_Colon
};
enum PerlType { Perl_unknown = 0, Perl_string, Perl_char, Perl_symbol, Perl_umlaut,
Perl_acute, Perl_grave, Perl_circ, Perl_slash, Perl_tilde,
@@ -475,6 +476,21 @@ class DocSymbol : public DocNode
SymType m_symbol;
};
+/** Node representing a n emoji */
+class DocEmoji : public DocNode
+{
+ public:
+ DocEmoji(DocNode *parent,int s) :
+ m_symbol(s) { m_parent = parent; }
+ int emoji() const { return m_symbol; }
+ Kind kind() const { return Kind_Emoji; }
+ void accept(DocVisitor *v) { v->visit(this); }
+ static int decodeEmoji(const QCString &symName);
+
+ private:
+ int m_symbol;
+};
+
/** Node representing some amount of white space */
class DocWhiteSpace : public DocNode
{
diff --git a/src/doctokenizer.h b/src/doctokenizer.h
index b3b9fa5..50307ae 100644
--- a/src/doctokenizer.h
+++ b/src/doctokenizer.h
@@ -40,6 +40,7 @@ enum Tokens
TK_NEWPARA = 9,
TK_RCSTAG = 10,
TK_URL = 11,
+ TK_EMOJI = 12,
RetVal_OK = 0x10000,
RetVal_SimpleSec = 0x10001,
diff --git a/src/doctokenizer.l b/src/doctokenizer.l
index 3118cfd..7f6c98f 100644
--- a/src/doctokenizer.l
+++ b/src/doctokenizer.l
@@ -122,6 +122,7 @@ const char *tokToString(int token)
case TK_NEWPARA: return "TK_NEWPARA";
case TK_RCSTAG: return "TK_RCSTAG";
case TK_URL: return "TK_URL";
+ case TK_EMOJI: return "TK_EMOJI";
}
return "ERROR";
}
@@ -332,6 +333,7 @@ CMD ("\\"|"@")
WS [ \t\r\n]
NONWS [^ \t\r\n]
BLANK [ \t\r]
+EMOJI (":"[a-z_A-Z0-9\x80-\xFF"'+()&\*\.!,#-]":"|":"[a-z_A-Z0-9\x80-\xFF"'+()&\*\.!,#-][a-z_A-Z0-9\x80-\xFF "'+()&\*\.!,#-]*[a-z_A-Z0-9\x80-\xFF"'+()&\*\.!,#-]":")
ID "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
LABELID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]*
PHPTYPE [\\:a-z_A-Z0-9\x80-\xFF\-]+
@@ -358,6 +360,7 @@ SPCMD1 {CMD}([a-z_A-Z][a-z_A-Z0-9]*|{VERBATIM}|"--"|"---")
SPCMD2 {CMD}[\\@<>&$#%~".+|-]
SPCMD3 {CMD}form#[0-9]+
SPCMD4 {CMD}"::"
+SPCMD5 {CMD}":"
INOUT "inout"|"in"|"out"|("in"{BLANK}*","{BLANK}*"out")|("out"{BLANK}*","{BLANK}*"in")
PARAMIO {CMD}param{BLANK}*"["{BLANK}*{INOUT}{BLANK}*"]"
VARARGS "..."
@@ -583,6 +586,7 @@ REFWORD_NOCV {LABELID}|{REFWORD2_NOCV}|{REFWORD3}|{REFWORD4_NOCV}
}
<St_Para>{SPCMD1} |
<St_Para>{SPCMD2} |
+<St_Para>{SPCMD5} |
<St_Para>{SPCMD4} { /* special command */
g_token->name = yytext+1;
g_token->name = g_token->name.stripWhiteSpace();
@@ -674,6 +678,10 @@ REFWORD_NOCV {LABELID}|{REFWORD2_NOCV}|{REFWORD3}|{REFWORD4_NOCV}
g_token->name = yytext;
return TK_SYMBOL;
}
+<St_Para,St_Text>{EMOJI} { /* emoji symbol */
+ g_token->name = yytext;
+ return TK_EMOJI;
+ }
/********* patterns for linkable words ******************/
@@ -920,6 +928,10 @@ REFWORD_NOCV {LABELID}|{REFWORD2_NOCV}|{REFWORD3}|{REFWORD4_NOCV}
g_token->name = yytext;
return TK_SYMBOL;
}
+<St_TitleN>{EMOJI} { /* emoji */
+ g_token->name = yytext;
+ return TK_EMOJI;
+ }
<St_TitleN>{HTMLTAG} {
}
<St_TitleN>{SPCMD1} |
@@ -956,6 +968,10 @@ REFWORD_NOCV {LABELID}|{REFWORD2_NOCV}|{REFWORD3}|{REFWORD4_NOCV}
g_token->name = yytext;
return TK_SYMBOL;
}
+<St_TitleQ>{EMOJI} { /* emoji */
+ g_token->name = yytext;
+ return TK_EMOJI;
+ }
<St_TitleQ>{SPCMD1} |
<St_TitleQ>{SPCMD2} { /* special command */
g_token->name = yytext+1;
@@ -1087,6 +1103,10 @@ REFWORD_NOCV {LABELID}|{REFWORD2_NOCV}|{REFWORD3}|{REFWORD4_NOCV}
g_token->name = yytext;
return TK_SYMBOL;
}
+<St_Ref2>{EMOJI} { /* emoji */
+ g_token->name = yytext;
+ return TK_EMOJI;
+ }
<St_Ref2>{SPCMD1} |
<St_Ref2>{SPCMD2} { /* special command */
g_token->name = yytext+1;
diff --git a/src/docvisitor.h b/src/docvisitor.h
index 18fb743..d2318c9 100644
--- a/src/docvisitor.h
+++ b/src/docvisitor.h
@@ -37,6 +37,7 @@ class DocAutoListItem;
class DocPara;
class DocRoot;
class DocSymbol;
+class DocEmoji;
class DocURL;
class DocStyleChange;
class DocSimpleSect;
@@ -101,6 +102,7 @@ class DocVisitor
virtual void visit(DocWord *) = 0;
virtual void visit(DocWhiteSpace *) = 0;
virtual void visit(DocSymbol *) = 0;
+ virtual void visit(DocEmoji *) = 0;
virtual void visit(DocURL *) = 0;
virtual void visit(DocStyleChange *) = 0;
virtual void visit(DocVerbatim *) = 0;
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 9d8a914..cd2cc8d 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -103,6 +103,7 @@
#include "settings.h"
#include "context.h"
#include "fileparser.h"
+#include "emoji.h"
// provided by the generated file resources.cpp
extern void initResources();
@@ -10029,6 +10030,9 @@ static void usage(const char *name)
msg(" RTF: %s -e rtf extensionsFile\n\n",name);
msg("7) Use doxygen to compare the used configuration file with the template configuration file\n");
msg(" %s -x [configFile]\n\n",name);
+ msg("8) Use doxygen to show a list of build in emoji.\n");
+ msg(" %s -f emoji outputFileName\n\n",name);
+ msg(" If - is used for outputFileName doxygen will write to standard output.\n\n");
msg("If -s is specified the comments of the configuration items in the config file will be omitted.\n");
msg("If configName is omitted `Doxyfile' will be used as a default.\n\n");
msg("-v print version string\n");
@@ -10229,6 +10233,7 @@ void readConfiguration(int argc, char **argv)
const char *layoutName=0;
const char *debugLabel;
const char *formatName;
+ const char *listName;
bool genConfig=FALSE;
bool shortList=FALSE;
bool diffList=FALSE;
@@ -10306,6 +10311,34 @@ void readConfiguration(int argc, char **argv)
cleanUpDoxygen();
exit(1);
break;
+ case 'f':
+ listName=getArg(argc,argv,optind);
+ if (!listName)
+ {
+ err("option \"-f\" is missing list specifier.\n");
+ cleanUpDoxygen();
+ exit(1);
+ }
+ if (qstricmp(listName,"emoji")==0)
+ {
+ if (optind+1>=argc)
+ {
+ err("option \"-f emoji\" is missing an output file name\n");
+ cleanUpDoxygen();
+ exit(1);
+ }
+ QFile f;
+ if (openOutputFile(argv[optind+1],f))
+ {
+ EmojiEntityMapper::instance()->writeEmojiFile(f);
+ }
+ cleanUpDoxygen();
+ exit(0);
+ }
+ err("option \"-f\" has invalid list specifier.\n");
+ cleanUpDoxygen();
+ exit(1);
+ break;
case 'w':
formatName=getArg(argc,argv,optind);
if (!formatName)
diff --git a/src/emoji.cpp b/src/emoji.cpp
new file mode 100644
index 0000000..f27ae38
--- /dev/null
+++ b/src/emoji.cpp
@@ -0,0 +1,3187 @@
+/******************************************************************************
+ *
+ * Copyright (C) 1997-2015 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ */
+
+#include "emoji.h"
+#include "message.h"
+#include "ftextstream.h"
+#include "util.h"
+
+/* to generate the content of this table see the documentation at the end of this file */
+static struct emojiEntityInfo
+{
+ const char *githubName;
+ const char *unicodeName;
+ const char *code;
+} g_emojiEntities[] =
+{
+ {":+1:", ":thumbs up:", "&#x1f44d;"},
+ {":-1:", ":thumbs down:", "&#x1f44e;"},
+ {":100:", ":hundred points:", "&#x1f4af;"},
+ {":1234:", ":input numbers:", "&#x1f522;"},
+ {":1st_place_medal:", ":1st place medal:", "&#x1f947;"},
+ {":2nd_place_medal:", ":2nd place medal:", "&#x1f948;"},
+ {":3rd_place_medal:", ":3rd place medal:", "&#x1f949;"},
+ {":8ball:", ":pool 8 ball:", "&#x1f3b1;"},
+ {":a:", ":a button (blood type):", "&#x1f170;"},
+ {":ab:", ":ab button (blood type):", "&#x1f18e;"},
+ {":abc:", ":input latin letters:", "&#x1f524;"},
+ {":abcd:", ":input latin lowercase:", "&#x1f521;"},
+ {":accept:", ":japanese \"acceptable\" button:", "&#x1f251;"},
+ {":aerial_tramway:", ":aerial tramway:", "&#x1f6a1;"},
+ {":afghanistan:", ":flag afghanistan:", "&#x1f1e6;&#x1f1eb;"},
+ {":airplane:", ":airplane:", "&#x2708;"},
+ {":aland_islands:", ":flag Ă…land islands:", "&#x1f1e6;&#x1f1fd;"},
+ {":alarm_clock:", ":alarm clock:", "&#x23f0;"},
+ {":albania:", ":flag albania:", "&#x1f1e6;&#x1f1f1;"},
+ {":alembic:", ":alembic:", "&#x2697;"},
+ {":algeria:", ":flag algeria:", "&#x1f1e9;&#x1f1ff;"},
+ {":alien:", ":alien:", "&#x1f47d;"},
+ {":ambulance:", ":ambulance:", "&#x1f691;"},
+ {":american_samoa:", ":flag american samoa:", "&#x1f1e6;&#x1f1f8;"},
+ {":amphora:", ":amphora:", "&#x1f3fa;"},
+ {":anchor:", ":anchor:", "&#x2693;"},
+ {":andorra:", ":flag andorra:", "&#x1f1e6;&#x1f1e9;"},
+ {":angel:", ":baby angel:", "&#x1f47c;"},
+ {":anger:", ":anger symbol:", "&#x1f4a2;"},
+ {":angola:", ":flag angola:", "&#x1f1e6;&#x1f1f4;"},
+ {":angry:", ":angry face:", "&#x1f620;"},
+ {":anguilla:", ":flag anguilla:", "&#x1f1e6;&#x1f1ee;"},
+ {":anguished:", ":anguished face:", "&#x1f627;"},
+ {":ant:", ":ant:", "&#x1f41c;"},
+ {":antarctica:", ":flag antarctica:", "&#x1f1e6;&#x1f1f6;"},
+ {":antigua_barbuda:", ":flag antigua & barbuda:", "&#x1f1e6;&#x1f1ec;"},
+ {":apple:", ":red apple:", "&#x1f34e;"},
+ {":aquarius:", ":aquarius:", "&#x2652;"},
+ {":argentina:", ":flag argentina:", "&#x1f1e6;&#x1f1f7;"},
+ {":aries:", ":aries:", "&#x2648;"},
+ {":armenia:", ":flag armenia:", "&#x1f1e6;&#x1f1f2;"},
+ {":arrow_backward:", ":reverse button:", "&#x25c0;"},
+ {":arrow_double_down:", ":fast down button:", "&#x23ec;"},
+ {":arrow_double_up:", ":fast up button:", "&#x23eb;"},
+ {":arrow_down:", ":down arrow:", "&#x2b07;"},
+ {":arrow_down_small:", ":downwards button:", "&#x1f53d;"},
+ {":arrow_forward:", ":play button:", "&#x25b6;"},
+ {":arrow_heading_down:", ":right arrow curving down:", "&#x2935;"},
+ {":arrow_heading_up:", ":right arrow curving up:", "&#x2934;"},
+ {":arrow_left:", ":left arrow:", "&#x2b05;"},
+ {":arrow_lower_left:", ":down-left arrow:", "&#x2199;"},
+ {":arrow_lower_right:", ":down-right arrow:", "&#x2198;"},
+ {":arrow_right:", ":right arrow:", "&#x27a1;"},
+ {":arrow_right_hook:", ":left arrow curving right:", "&#x21aa;"},
+ {":arrow_up:", ":up arrow:", "&#x2b06;"},
+ {":arrow_up_down:", ":up-down arrow:", "&#x2195;"},
+ {":arrow_up_small:", ":upwards button:", "&#x1f53c;"},
+ {":arrow_upper_left:", ":up-left arrow:", "&#x2196;"},
+ {":arrow_upper_right:", ":up-right arrow:", "&#x2197;"},
+ {":arrows_clockwise:", ":clockwise vertical arrows:", "&#x1f503;"},
+ {":arrows_counterclockwise:", ":counterclockwise arrows button:", "&#x1f504;"},
+ {":art:", ":artist palette:", "&#x1f3a8;"},
+ {":articulated_lorry:", ":articulated lorry:", "&#x1f69b;"},
+ {":artificial_satellite:", ":satellite:", "&#x1f6f0;"},
+ {":aruba:", ":flag aruba:", "&#x1f1e6;&#x1f1fc;"},
+ {":asterisk:", ":keycap *:", "&#x002a;&#xfe0f;&#x20e3;"},
+ {":astonished:", ":astonished face:", "&#x1f632;"},
+ {":athletic_shoe:", ":running shoe:", "&#x1f45f;"},
+ {":atm:", ":atm sign:", "&#x1f3e7;"},
+ {":atom_symbol:", ":atom symbol:", "&#x269b;"},
+ {":australia:", ":flag australia:", "&#x1f1e6;&#x1f1fa;"},
+ {":austria:", ":flag austria:", "&#x1f1e6;&#x1f1f9;"},
+ {":avocado:", ":avocado:", "&#x1f951;"},
+ {":azerbaijan:", ":flag azerbaijan:", "&#x1f1e6;&#x1f1ff;"},
+ {":b:", ":b button (blood type):", "&#x1f171;"},
+ {":baby:", ":baby:", "&#x1f476;"},
+ {":baby_bottle:", ":baby bottle:", "&#x1f37c;"},
+ {":baby_chick:", ":baby chick:", "&#x1f424;"},
+ {":baby_symbol:", ":baby symbol:", "&#x1f6bc;"},
+ {":back:", ":back arrow:", "&#x1f519;"},
+ {":bacon:", ":bacon:", "&#x1f953;"},
+ {":badminton:", ":badminton:", "&#x1f3f8;"},
+ {":baggage_claim:", ":baggage claim:", "&#x1f6c4;"},
+ {":baguette_bread:", ":baguette bread:", "&#x1f956;"},
+ {":bahamas:", ":flag bahamas:", "&#x1f1e7;&#x1f1f8;"},
+ {":bahrain:", ":flag bahrain:", "&#x1f1e7;&#x1f1ed;"},
+ {":balance_scale:", ":balance scale:", "&#x2696;"},
+ {":balloon:", ":balloon:", "&#x1f388;"},
+ {":ballot_box:", ":ballot box with ballot:", "&#x1f5f3;"},
+ {":ballot_box_with_check:", ":ballot box with check:", "&#x2611;"},
+ {":bamboo:", ":pine decoration:", "&#x1f38d;"},
+ {":banana:", ":banana:", "&#x1f34c;"},
+ {":bangbang:", ":double exclamation mark:", "&#x203c;"},
+ {":bangladesh:", ":flag bangladesh:", "&#x1f1e7;&#x1f1e9;"},
+ {":bank:", ":bank:", "&#x1f3e6;"},
+ {":bar_chart:", ":bar chart:", "&#x1f4ca;"},
+ {":barbados:", ":flag barbados:", "&#x1f1e7;&#x1f1e7;"},
+ {":barber:", ":barber pole:", "&#x1f488;"},
+ {":baseball:", ":baseball:", "&#x26be;"},
+ {":basketball:", ":basketball:", "&#x1f3c0;"},
+ {":basketball_man:", ":person bouncing ball:", "&#x26f9;"},
+ {":basketball_woman:", ":woman bouncing ball:", "&#x26f9;&#xfe0f;&#x200d;&#x2640;&#xfe0f;"},
+ {":bat:", ":bat:", "&#x1f987;"},
+ {":bath:", ":person taking bath:", "&#x1f6c0;"},
+ {":bathtub:", ":bathtub:", "&#x1f6c1;"},
+ {":battery:", ":battery:", "&#x1f50b;"},
+ {":beach_umbrella:", ":beach with umbrella:", "&#x1f3d6;"},
+ {":bear:", ":bear face:", "&#x1f43b;"},
+ {":bed:", ":bed:", "&#x1f6cf;"},
+ {":bee:", ":honeybee:", "&#x1f41d;"},
+ {":beer:", ":beer mug:", "&#x1f37a;"},
+ {":beers:", ":clinking beer mugs:", "&#x1f37b;"},
+ {":beetle:", ":lady beetle:", "&#x1f41e;"},
+ {":beginner:", ":japanese symbol for beginner:", "&#x1f530;"},
+ {":belarus:", ":flag belarus:", "&#x1f1e7;&#x1f1fe;"},
+ {":belgium:", ":flag belgium:", "&#x1f1e7;&#x1f1ea;"},
+ {":belize:", ":flag belize:", "&#x1f1e7;&#x1f1ff;"},
+ {":bell:", ":bell:", "&#x1f514;"},
+ {":bellhop_bell:", ":bellhop bell:", "&#x1f6ce;"},
+ {":benin:", ":flag benin:", "&#x1f1e7;&#x1f1ef;"},
+ {":bento:", ":bento box:", "&#x1f371;"},
+ {":bermuda:", ":flag bermuda:", "&#x1f1e7;&#x1f1f2;"},
+ {":bhutan:", ":flag bhutan:", "&#x1f1e7;&#x1f1f9;"},
+ {":bicyclist:", ":person biking:", "&#x1f6b4;"},
+ {":bike:", ":bicycle:", "&#x1f6b2;"},
+ {":biking_man:", ":person biking:", "&#x1f6b4;"},
+ {":biking_woman:", ":woman biking:", "&#x1f6b4;&#x200d;&#x2640;&#xfe0f;"},
+ {":bikini:", ":bikini:", "&#x1f459;"},
+ {":biohazard:", ":biohazard:", "&#x2623;"},
+ {":bird:", ":bird:", "&#x1f426;"},
+ {":birthday:", ":birthday cake:", "&#x1f382;"},
+ {":black_circle:", ":black circle:", "&#x26ab;"},
+ {":black_flag:", ":black flag:", "&#x1f3f4;"},
+ {":black_heart:", ":black heart:", "&#x1f5a4;"},
+ {":black_joker:", ":joker:", "&#x1f0cf;"},
+ {":black_large_square:", ":black large square:", "&#x2b1b;"},
+ {":black_medium_small_square:", ":black medium-small square:", "&#x25fe;"},
+ {":black_medium_square:", ":black medium square:", "&#x25fc;"},
+ {":black_nib:", ":black nib:", "&#x2712;"},
+ {":black_small_square:", ":black small square:", "&#x25aa;"},
+ {":black_square_button:", ":black square button:", "&#x1f532;"},
+ {":blonde_man:", ":person blond hair:", "&#x1f471;"},
+ {":blonde_woman:", ":woman blond hair:", "&#x1f471;&#x200d;&#x2640;&#xfe0f;"},
+ {":blossom:", ":blossom:", "&#x1f33c;"},
+ {":blowfish:", ":blowfish:", "&#x1f421;"},
+ {":blue_book:", ":blue book:", "&#x1f4d8;"},
+ {":blue_car:", ":sport utility vehicle:", "&#x1f699;"},
+ {":blue_heart:", ":blue heart:", "&#x1f499;"},
+ {":blush:", ":smiling face with smiling eyes:", "&#x1f60a;"},
+ {":boar:", ":boar:", "&#x1f417;"},
+ {":boat:", ":sailboat:", "&#x26f5;"},
+ {":bolivia:", ":flag bolivia:", "&#x1f1e7;&#x1f1f4;"},
+ {":bomb:", ":bomb:", "&#x1f4a3;"},
+ {":book:", ":open book:", "&#x1f4d6;"},
+ {":bookmark:", ":bookmark:", "&#x1f516;"},
+ {":bookmark_tabs:", ":bookmark tabs:", "&#x1f4d1;"},
+ {":books:", ":books:", "&#x1f4da;"},
+ {":boom:", ":collision:", "&#x1f4a5;"},
+ {":boot:", ":woman's boot:", "&#x1f462;"},
+ {":bosnia_herzegovina:", ":flag bosnia & herzegovina:", "&#x1f1e7;&#x1f1e6;"},
+ {":botswana:", ":flag botswana:", "&#x1f1e7;&#x1f1fc;"},
+ {":bouquet:", ":bouquet:", "&#x1f490;"},
+ {":bow:", ":person bowing:", "&#x1f647;"},
+ {":bow_and_arrow:", ":bow and arrow:", "&#x1f3f9;"},
+ {":bowing_man:", ":person bowing:", "&#x1f647;"},
+ {":bowing_woman:", ":woman bowing:", "&#x1f647;&#x200d;&#x2640;&#xfe0f;"},
+ {":bowling:", ":bowling:", "&#x1f3b3;"},
+ {":boxing_glove:", ":boxing glove:", "&#x1f94a;"},
+ {":boy:", ":boy:", "&#x1f466;"},
+ {":brazil:", ":flag brazil:", "&#x1f1e7;&#x1f1f7;"},
+ {":bread:", ":bread:", "&#x1f35e;"},
+ {":bride_with_veil:", ":bride with veil:", "&#x1f470;"},
+ {":bridge_at_night:", ":bridge at night:", "&#x1f309;"},
+ {":briefcase:", ":briefcase:", "&#x1f4bc;"},
+ {":british_indian_ocean_territory:", ":flag british indian ocean territory:", "&#x1f1ee;&#x1f1f4;"},
+ {":british_virgin_islands:", ":flag british virgin islands:", "&#x1f1fb;&#x1f1ec;"},
+ {":broken_heart:", ":broken heart:", "&#x1f494;"},
+ {":brunei:", ":flag brunei:", "&#x1f1e7;&#x1f1f3;"},
+ {":bug:", ":bug:", "&#x1f41b;"},
+ {":building_construction:", ":building construction:", "&#x1f3d7;"},
+ {":bulb:", ":light bulb:", "&#x1f4a1;"},
+ {":bulgaria:", ":flag bulgaria:", "&#x1f1e7;&#x1f1ec;"},
+ {":bullettrain_front:", ":bullet train:", "&#x1f685;"},
+ {":bullettrain_side:", ":high-speed train:", "&#x1f684;"},
+ {":burkina_faso:", ":flag burkina faso:", "&#x1f1e7;&#x1f1eb;"},
+ {":burrito:", ":burrito:", "&#x1f32f;"},
+ {":burundi:", ":flag burundi:", "&#x1f1e7;&#x1f1ee;"},
+ {":bus:", ":bus:", "&#x1f68c;"},
+ {":business_suit_levitating:", ":man in suit levitating:", "&#x1f574;"},
+ {":busstop:", ":bus stop:", "&#x1f68f;"},
+ {":bust_in_silhouette:", ":bust in silhouette:", "&#x1f464;"},
+ {":busts_in_silhouette:", ":busts in silhouette:", "&#x1f465;"},
+ {":butterfly:", ":butterfly:", "&#x1f98b;"},
+ {":cactus:", ":cactus:", "&#x1f335;"},
+ {":cake:", ":shortcake:", "&#x1f370;"},
+ {":calendar:", ":tear-off calendar:", "&#x1f4c6;"},
+ {":call_me_hand:", ":call me hand:", "&#x1f919;"},
+ {":calling:", ":mobile phone with arrow:", "&#x1f4f2;"},
+ {":cambodia:", ":flag cambodia:", "&#x1f1f0;&#x1f1ed;"},
+ {":camel:", ":two-hump camel:", "&#x1f42b;"},
+ {":camera:", ":camera:", "&#x1f4f7;"},
+ {":camera_flash:", ":camera with flash:", "&#x1f4f8;"},
+ {":cameroon:", ":flag cameroon:", "&#x1f1e8;&#x1f1f2;"},
+ {":camping:", ":camping:", "&#x1f3d5;"},
+ {":canada:", ":flag canada:", "&#x1f1e8;&#x1f1e6;"},
+ {":canary_islands:", ":flag canary islands:", "&#x1f1ee;&#x1f1e8;"},
+ {":cancer:", ":cancer:", "&#x264b;"},
+ {":candle:", ":candle:", "&#x1f56f;"},
+ {":candy:", ":candy:", "&#x1f36c;"},
+ {":canoe:", ":canoe:", "&#x1f6f6;"},
+ {":cape_verde:", ":flag cape verde:", "&#x1f1e8;&#x1f1fb;"},
+ {":capital_abcd:", ":input latin uppercase:", "&#x1f520;"},
+ {":capricorn:", ":capricorn:", "&#x2651;"},
+ {":car:", ":automobile:", "&#x1f697;"},
+ {":card_file_box:", ":card file box:", "&#x1f5c3;"},
+ {":card_index:", ":card index:", "&#x1f4c7;"},
+ {":card_index_dividers:", ":card index dividers:", "&#x1f5c2;"},
+ {":caribbean_netherlands:", ":flag caribbean netherlands:", "&#x1f1e7;&#x1f1f6;"},
+ {":carousel_horse:", ":carousel horse:", "&#x1f3a0;"},
+ {":carrot:", ":carrot:", "&#x1f955;"},
+ {":cat:", ":cat face:", "&#x1f431;"},
+ {":cat2:", ":cat:", "&#x1f408;"},
+ {":cayman_islands:", ":flag cayman islands:", "&#x1f1f0;&#x1f1fe;"},
+ {":cd:", ":optical disk:", "&#x1f4bf;"},
+ {":central_african_republic:", ":flag central african republic:", "&#x1f1e8;&#x1f1eb;"},
+ {":chad:", ":flag chad:", "&#x1f1f9;&#x1f1e9;"},
+ {":chains:", ":chains:", "&#x26d3;"},
+ {":champagne:", ":bottle with popping cork:", "&#x1f37e;"},
+ {":chart:", ":chart increasing with yen:", "&#x1f4b9;"},
+ {":chart_with_downwards_trend:", ":chart decreasing:", "&#x1f4c9;"},
+ {":chart_with_upwards_trend:", ":chart increasing:", "&#x1f4c8;"},
+ {":checkered_flag:", ":chequered flag:", "&#x1f3c1;"},
+ {":cheese:", ":cheese wedge:", "&#x1f9c0;"},
+ {":cherries:", ":cherries:", "&#x1f352;"},
+ {":cherry_blossom:", ":cherry blossom:", "&#x1f338;"},
+ {":chestnut:", ":chestnut:", "&#x1f330;"},
+ {":chicken:", ":chicken:", "&#x1f414;"},
+ {":children_crossing:", ":children crossing:", "&#x1f6b8;"},
+ {":chile:", ":flag chile:", "&#x1f1e8;&#x1f1f1;"},
+ {":chipmunk:", ":chipmunk:", "&#x1f43f;"},
+ {":chocolate_bar:", ":chocolate bar:", "&#x1f36b;"},
+ {":christmas_island:", ":flag christmas island:", "&#x1f1e8;&#x1f1fd;"},
+ {":christmas_tree:", ":christmas tree:", "&#x1f384;"},
+ {":church:", ":church:", "&#x26ea;"},
+ {":cinema:", ":cinema:", "&#x1f3a6;"},
+ {":circus_tent:", ":circus tent:", "&#x1f3aa;"},
+ {":city_sunrise:", ":sunset:", "&#x1f307;"},
+ {":city_sunset:", ":cityscape at dusk:", "&#x1f306;"},
+ {":cityscape:", ":cityscape:", "&#x1f3d9;"},
+ {":cl:", ":cl button:", "&#x1f191;"},
+ {":clamp:", ":clamp:", "&#x1f5dc;"},
+ {":clap:", ":clapping hands:", "&#x1f44f;"},
+ {":clapper:", ":clapper board:", "&#x1f3ac;"},
+ {":classical_building:", ":classical building:", "&#x1f3db;"},
+ {":clinking_glasses:", ":clinking glasses:", "&#x1f942;"},
+ {":clipboard:", ":clipboard:", "&#x1f4cb;"},
+ {":clock1:", ":one o'clock:", "&#x1f550;"},
+ {":clock10:", ":ten o'clock:", "&#x1f559;"},
+ {":clock1030:", ":ten-thirty:", "&#x1f565;"},
+ {":clock11:", ":eleven o'clock:", "&#x1f55a;"},
+ {":clock1130:", ":eleven-thirty:", "&#x1f566;"},
+ {":clock12:", ":twelve o'clock:", "&#x1f55b;"},
+ {":clock1230:", ":twelve-thirty:", "&#x1f567;"},
+ {":clock130:", ":one-thirty:", "&#x1f55c;"},
+ {":clock2:", ":two o'clock:", "&#x1f551;"},
+ {":clock230:", ":two-thirty:", "&#x1f55d;"},
+ {":clock3:", ":three o'clock:", "&#x1f552;"},
+ {":clock330:", ":three-thirty:", "&#x1f55e;"},
+ {":clock4:", ":four o'clock:", "&#x1f553;"},
+ {":clock430:", ":four-thirty:", "&#x1f55f;"},
+ {":clock5:", ":five o'clock:", "&#x1f554;"},
+ {":clock530:", ":five-thirty:", "&#x1f560;"},
+ {":clock6:", ":six o'clock:", "&#x1f555;"},
+ {":clock630:", ":six-thirty:", "&#x1f561;"},
+ {":clock7:", ":seven o'clock:", "&#x1f556;"},
+ {":clock730:", ":seven-thirty:", "&#x1f562;"},
+ {":clock8:", ":eight o'clock:", "&#x1f557;"},
+ {":clock830:", ":eight-thirty:", "&#x1f563;"},
+ {":clock9:", ":nine o'clock:", "&#x1f558;"},
+ {":clock930:", ":nine-thirty:", "&#x1f564;"},
+ {":closed_book:", ":closed book:", "&#x1f4d5;"},
+ {":closed_lock_with_key:", ":locked with key:", "&#x1f510;"},
+ {":closed_umbrella:", ":closed umbrella:", "&#x1f302;"},
+ {":cloud:", ":cloud:", "&#x2601;"},
+ {":cloud_with_lightning:", ":cloud with lightning:", "&#x1f329;"},
+ {":cloud_with_lightning_and_rain:", ":cloud with lightning and rain:", "&#x26c8;"},
+ {":cloud_with_rain:", ":cloud with rain:", "&#x1f327;"},
+ {":cloud_with_snow:", ":cloud with snow:", "&#x1f328;"},
+ {":clown_face:", ":clown face:", "&#x1f921;"},
+ {":clubs:", ":club suit:", "&#x2663;"},
+ {":cn:", ":flag china:", "&#x1f1e8;&#x1f1f3;"},
+ {":cocktail:", ":cocktail glass:", "&#x1f378;"},
+ {":cocos_islands:", ":flag cocos (keeling) islands:", "&#x1f1e8;&#x1f1e8;"},
+ {":coffee:", ":hot beverage:", "&#x2615;"},
+ {":coffin:", ":coffin:", "&#x26b0;"},
+ {":cold_sweat:", ":anxious face with sweat:", "&#x1f630;"},
+ {":collision:", ":collision:", "&#x1f4a5;"},
+ {":colombia:", ":flag colombia:", "&#x1f1e8;&#x1f1f4;"},
+ {":comet:", ":comet:", "&#x2604;"},
+ {":comoros:", ":flag comoros:", "&#x1f1f0;&#x1f1f2;"},
+ {":computer:", ":laptop computer:", "&#x1f4bb;"},
+ {":computer_mouse:", ":computer mouse:", "&#x1f5b1;"},
+ {":confetti_ball:", ":confetti ball:", "&#x1f38a;"},
+ {":confounded:", ":confounded face:", "&#x1f616;"},
+ {":confused:", ":confused face:", "&#x1f615;"},
+ {":congo_brazzaville:", ":flag congo - brazzaville:", "&#x1f1e8;&#x1f1ec;"},
+ {":congo_kinshasa:", ":flag congo - kinshasa:", "&#x1f1e8;&#x1f1e9;"},
+ {":congratulations:", ":japanese \"congratulations\" button:", "&#x3297;"},
+ {":construction:", ":construction:", "&#x1f6a7;"},
+ {":construction_worker:", ":construction worker:", "&#x1f477;"},
+ {":construction_worker_man:", ":construction worker:", "&#x1f477;"},
+ {":construction_worker_woman:", ":woman construction worker:", "&#x1f477;&#x200d;&#x2640;&#xfe0f;"},
+ {":control_knobs:", ":control knobs:", "&#x1f39b;"},
+ {":convenience_store:", ":convenience store:", "&#x1f3ea;"},
+ {":cook_islands:", ":flag cook islands:", "&#x1f1e8;&#x1f1f0;"},
+ {":cookie:", ":cookie:", "&#x1f36a;"},
+ {":cool:", ":cool button:", "&#x1f192;"},
+ {":cop:", ":police officer:", "&#x1f46e;"},
+ {":copyright:", ":copyright:", "&#x00a9;"},
+ {":corn:", ":ear of corn:", "&#x1f33d;"},
+ {":costa_rica:", ":flag costa rica:", "&#x1f1e8;&#x1f1f7;"},
+ {":cote_divoire:", ":flag cĂ´te d'ivoire:", "&#x1f1e8;&#x1f1ee;"},
+ {":couch_and_lamp:", ":couch and lamp:", "&#x1f6cb;"},
+ {":couple:", ":man and woman holding hands:", "&#x1f46b;"},
+ {":couple_with_heart:", ":couple with heart:", "&#x1f491;"},
+ {":couple_with_heart_man_man:", ":kiss man, man:", "&#x1f468;&#x200d;&#x2764;&#xfe0f;&#x200d;&#x1f48b;&#x200d;&#x1f468;"},
+ {":couple_with_heart_woman_man:", ":couple with heart:", "&#x1f491;"},
+ {":couple_with_heart_woman_woman:", ":kiss woman, woman:", "&#x1f469;&#x200d;&#x2764;&#xfe0f;&#x200d;&#x1f48b;&#x200d;&#x1f469;"},
+ {":couplekiss_man_man:", ":kiss man, man:", "&#x1f468;&#x200d;&#x2764;&#xfe0f;&#x200d;&#x1f48b;&#x200d;&#x1f468;"},
+ {":couplekiss_man_woman:", ":kiss:", "&#x1f48f;"},
+ {":couplekiss_woman_woman:", ":kiss woman, woman:", "&#x1f469;&#x200d;&#x2764;&#xfe0f;&#x200d;&#x1f48b;&#x200d;&#x1f469;"},
+ {":cow:", ":cow face:", "&#x1f42e;"},
+ {":cow2:", ":cow:", "&#x1f404;"},
+ {":cowboy_hat_face:", ":cowboy hat face:", "&#x1f920;"},
+ {":crab:", ":crab:", "&#x1f980;"},
+ {":crayon:", ":crayon:", "&#x1f58d;"},
+ {":credit_card:", ":credit card:", "&#x1f4b3;"},
+ {":crescent_moon:", ":crescent moon:", "&#x1f319;"},
+ {":cricket:", ":cricket game:", "&#x1f3cf;"},
+ {":croatia:", ":flag croatia:", "&#x1f1ed;&#x1f1f7;"},
+ {":crocodile:", ":crocodile:", "&#x1f40a;"},
+ {":croissant:", ":croissant:", "&#x1f950;"},
+ {":crossed_fingers:", ":crossed fingers:", "&#x1f91e;"},
+ {":crossed_flags:", ":crossed flags:", "&#x1f38c;"},
+ {":crossed_swords:", ":crossed swords:", "&#x2694;"},
+ {":crown:", ":crown:", "&#x1f451;"},
+ {":cry:", ":crying face:", "&#x1f622;"},
+ {":crying_cat_face:", ":crying cat face:", "&#x1f63f;"},
+ {":crystal_ball:", ":crystal ball:", "&#x1f52e;"},
+ {":cuba:", ":flag cuba:", "&#x1f1e8;&#x1f1fa;"},
+ {":cucumber:", ":cucumber:", "&#x1f952;"},
+ {":cupid:", ":heart with arrow:", "&#x1f498;"},
+ {":curacao:", ":flag curaçao:", "&#x1f1e8;&#x1f1fc;"},
+ {":curly_loop:", ":curly loop:", "&#x27b0;"},
+ {":currency_exchange:", ":currency exchange:", "&#x1f4b1;"},
+ {":curry:", ":curry rice:", "&#x1f35b;"},
+ {":custard:", ":custard:", "&#x1f36e;"},
+ {":customs:", ":customs:", "&#x1f6c3;"},
+ {":cyclone:", ":cyclone:", "&#x1f300;"},
+ {":cyprus:", ":flag cyprus:", "&#x1f1e8;&#x1f1fe;"},
+ {":czech_republic:", ":flag czechia:", "&#x1f1e8;&#x1f1ff;"},
+ {":dagger:", ":dagger:", "&#x1f5e1;"},
+ {":dancer:", ":woman dancing:", "&#x1f483;"},
+ {":dancers:", ":people with bunny ears:", "&#x1f46f;"},
+ {":dancing_men:", ":men with bunny ears:", "&#x1f46f;&#x200d;&#x2642;&#xfe0f;"},
+ {":dancing_women:", ":people with bunny ears:", "&#x1f46f;"},
+ {":dango:", ":dango:", "&#x1f361;"},
+ {":dark_sunglasses:", ":sunglasses:", "&#x1f576;"},
+ {":dart:", ":direct hit:", "&#x1f3af;"},
+ {":dash:", ":dashing away:", "&#x1f4a8;"},
+ {":date:", ":calendar:", "&#x1f4c5;"},
+ {":de:", ":flag germany:", "&#x1f1e9;&#x1f1ea;"},
+ {":deciduous_tree:", ":deciduous tree:", "&#x1f333;"},
+ {":deer:", ":deer:", "&#x1f98c;"},
+ {":denmark:", ":flag denmark:", "&#x1f1e9;&#x1f1f0;"},
+ {":department_store:", ":department store:", "&#x1f3ec;"},
+ {":derelict_house:", ":derelict house:", "&#x1f3da;"},
+ {":desert:", ":desert:", "&#x1f3dc;"},
+ {":desert_island:", ":desert island:", "&#x1f3dd;"},
+ {":desktop_computer:", ":desktop computer:", "&#x1f5a5;"},
+ {":detective:", ":detective:", "&#x1f575;"},
+ {":diamond_shape_with_a_dot_inside:", ":diamond with a dot:", "&#x1f4a0;"},
+ {":diamonds:", ":diamond suit:", "&#x2666;"},
+ {":disappointed:", ":disappointed face:", "&#x1f61e;"},
+ {":disappointed_relieved:", ":sad but relieved face:", "&#x1f625;"},
+ {":dizzy:", ":dizzy:", "&#x1f4ab;"},
+ {":dizzy_face:", ":dizzy face:", "&#x1f635;"},
+ {":djibouti:", ":flag djibouti:", "&#x1f1e9;&#x1f1ef;"},
+ {":do_not_litter:", ":no littering:", "&#x1f6af;"},
+ {":dog:", ":dog face:", "&#x1f436;"},
+ {":dog2:", ":dog:", "&#x1f415;"},
+ {":dollar:", ":dollar banknote:", "&#x1f4b5;"},
+ {":dolls:", ":japanese dolls:", "&#x1f38e;"},
+ {":dolphin:", ":dolphin:", "&#x1f42c;"},
+ {":dominica:", ":flag dominica:", "&#x1f1e9;&#x1f1f2;"},
+ {":dominican_republic:", ":flag dominican republic:", "&#x1f1e9;&#x1f1f4;"},
+ {":door:", ":door:", "&#x1f6aa;"},
+ {":doughnut:", ":doughnut:", "&#x1f369;"},
+ {":dove:", ":dove:", "&#x1f54a;"},
+ {":dragon:", ":dragon:", "&#x1f409;"},
+ {":dragon_face:", ":dragon face:", "&#x1f432;"},
+ {":dress:", ":dress:", "&#x1f457;"},
+ {":dromedary_camel:", ":camel:", "&#x1f42a;"},
+ {":drooling_face:", ":drooling face:", "&#x1f924;"},
+ {":droplet:", ":droplet:", "&#x1f4a7;"},
+ {":drum:", ":drum:", "&#x1f941;"},
+ {":duck:", ":duck:", "&#x1f986;"},
+ {":dvd:", ":dvd:", "&#x1f4c0;"},
+ {":e-mail:", ":e-mail:", "&#x1f4e7;"},
+ {":eagle:", ":eagle:", "&#x1f985;"},
+ {":ear:", ":ear:", "&#x1f442;"},
+ {":ear_of_rice:", ":sheaf of rice:", "&#x1f33e;"},
+ {":earth_africa:", ":globe showing europe-africa:", "&#x1f30d;"},
+ {":earth_americas:", ":globe showing americas:", "&#x1f30e;"},
+ {":earth_asia:", ":globe showing asia-australia:", "&#x1f30f;"},
+ {":ecuador:", ":flag ecuador:", "&#x1f1ea;&#x1f1e8;"},
+ {":egg:", ":egg:", "&#x1f95a;"},
+ {":eggplant:", ":eggplant:", "&#x1f346;"},
+ {":egypt:", ":flag egypt:", "&#x1f1ea;&#x1f1ec;"},
+ {":eight:", ":keycap 8:", "&#x0038;&#xfe0f;&#x20e3;"},
+ {":eight_pointed_black_star:", ":eight-pointed star:", "&#x2734;"},
+ {":eight_spoked_asterisk:", ":eight-spoked asterisk:", "&#x2733;"},
+ {":el_salvador:", ":flag el salvador:", "&#x1f1f8;&#x1f1fb;"},
+ {":electric_plug:", ":electric plug:", "&#x1f50c;"},
+ {":elephant:", ":elephant:", "&#x1f418;"},
+ {":email:", ":envelope:", "&#x2709;"},
+ {":end:", ":end arrow:", "&#x1f51a;"},
+ {":envelope:", ":envelope:", "&#x2709;"},
+ {":envelope_with_arrow:", ":envelope with arrow:", "&#x1f4e9;"},
+ {":equatorial_guinea:", ":flag equatorial guinea:", "&#x1f1ec;&#x1f1f6;"},
+ {":eritrea:", ":flag eritrea:", "&#x1f1ea;&#x1f1f7;"},
+ {":es:", ":flag spain:", "&#x1f1ea;&#x1f1f8;"},
+ {":estonia:", ":flag estonia:", "&#x1f1ea;&#x1f1ea;"},
+ {":ethiopia:", ":flag ethiopia:", "&#x1f1ea;&#x1f1f9;"},
+ {":eu:", ":flag european union:", "&#x1f1ea;&#x1f1fa;"},
+ {":euro:", ":euro banknote:", "&#x1f4b6;"},
+ {":european_castle:", ":castle:", "&#x1f3f0;"},
+ {":european_post_office:", ":post office:", "&#x1f3e4;"},
+ {":european_union:", ":flag european union:", "&#x1f1ea;&#x1f1fa;"},
+ {":evergreen_tree:", ":evergreen tree:", "&#x1f332;"},
+ {":exclamation:", ":exclamation mark:", "&#x2757;"},
+ {":expressionless:", ":expressionless face:", "&#x1f611;"},
+ {":eye:", ":eye in speech bubble:", "&#x1f441;&#xfe0f;&#x200d;&#x1f5e8;&#xfe0f;"},
+ {":eye_speech_bubble:", ":eye in speech bubble:", "&#x1f441;&#xfe0f;&#x200d;&#x1f5e8;&#xfe0f;"},
+ {":eyeglasses:", ":glasses:", "&#x1f453;"},
+ {":eyes:", ":eyes:", "&#x1f440;"},
+ {":face_with_head_bandage:", ":face with head-bandage:", "&#x1f915;"},
+ {":face_with_thermometer:", ":face with thermometer:", "&#x1f912;"},
+ {":facepunch:", ":oncoming fist:", "&#x1f44a;"},
+ {":factory:", ":factory:", "&#x1f3ed;"},
+ {":falkland_islands:", ":flag falkland islands:", "&#x1f1eb;&#x1f1f0;"},
+ {":fallen_leaf:", ":fallen leaf:", "&#x1f342;"},
+ {":family:", ":family:", "&#x1f46a;"},
+ {":family_man_boy:", ":family man, woman, boy:", "&#x1f468;&#x200d;&#x1f469;&#x200d;&#x1f466;"},
+ {":family_man_boy_boy:", ":family man, woman, boy, boy:", "&#x1f468;&#x200d;&#x1f469;&#x200d;&#x1f466;&#x200d;&#x1f466;"},
+ {":family_man_girl:", ":family man, woman, girl:", "&#x1f468;&#x200d;&#x1f469;&#x200d;&#x1f467;"},
+ {":family_man_girl_boy:", ":family man, woman, girl, boy:", "&#x1f468;&#x200d;&#x1f469;&#x200d;&#x1f467;&#x200d;&#x1f466;"},
+ {":family_man_girl_girl:", ":family man, woman, girl, girl:", "&#x1f468;&#x200d;&#x1f469;&#x200d;&#x1f467;&#x200d;&#x1f467;"},
+ {":family_man_man_boy:", ":family man, man, boy:", "&#x1f468;&#x200d;&#x1f468;&#x200d;&#x1f466;"},
+ {":family_man_man_boy_boy:", ":family man, man, boy, boy:", "&#x1f468;&#x200d;&#x1f468;&#x200d;&#x1f466;&#x200d;&#x1f466;"},
+ {":family_man_man_girl:", ":family man, man, girl:", "&#x1f468;&#x200d;&#x1f468;&#x200d;&#x1f467;"},
+ {":family_man_man_girl_boy:", ":family man, man, girl, boy:", "&#x1f468;&#x200d;&#x1f468;&#x200d;&#x1f467;&#x200d;&#x1f466;"},
+ {":family_man_man_girl_girl:", ":family man, man, girl, girl:", "&#x1f468;&#x200d;&#x1f468;&#x200d;&#x1f467;&#x200d;&#x1f467;"},
+ {":family_man_woman_boy:", ":family:", "&#x1f46a;"},
+ {":family_man_woman_boy_boy:", ":family man, woman, boy, boy:", "&#x1f468;&#x200d;&#x1f469;&#x200d;&#x1f466;&#x200d;&#x1f466;"},
+ {":family_man_woman_girl:", ":family man, woman, girl:", "&#x1f468;&#x200d;&#x1f469;&#x200d;&#x1f467;"},
+ {":family_man_woman_girl_boy:", ":family man, woman, girl, boy:", "&#x1f468;&#x200d;&#x1f469;&#x200d;&#x1f467;&#x200d;&#x1f466;"},
+ {":family_man_woman_girl_girl:", ":family man, woman, girl, girl:", "&#x1f468;&#x200d;&#x1f469;&#x200d;&#x1f467;&#x200d;&#x1f467;"},
+ {":family_woman_boy:", ":family woman, woman, boy:", "&#x1f469;&#x200d;&#x1f469;&#x200d;&#x1f466;"},
+ {":family_woman_boy_boy:", ":family woman, woman, boy, boy:", "&#x1f469;&#x200d;&#x1f469;&#x200d;&#x1f466;&#x200d;&#x1f466;"},
+ {":family_woman_girl:", ":family woman, woman, girl:", "&#x1f469;&#x200d;&#x1f469;&#x200d;&#x1f467;"},
+ {":family_woman_girl_boy:", ":family woman, woman, girl, boy:", "&#x1f469;&#x200d;&#x1f469;&#x200d;&#x1f467;&#x200d;&#x1f466;"},
+ {":family_woman_girl_girl:", ":family woman, woman, girl, girl:", "&#x1f469;&#x200d;&#x1f469;&#x200d;&#x1f467;&#x200d;&#x1f467;"},
+ {":family_woman_woman_boy:", ":family woman, woman, boy:", "&#x1f469;&#x200d;&#x1f469;&#x200d;&#x1f466;"},
+ {":family_woman_woman_boy_boy:", ":family woman, woman, boy, boy:", "&#x1f469;&#x200d;&#x1f469;&#x200d;&#x1f466;&#x200d;&#x1f466;"},
+ {":family_woman_woman_girl:", ":family woman, woman, girl:", "&#x1f469;&#x200d;&#x1f469;&#x200d;&#x1f467;"},
+ {":family_woman_woman_girl_boy:", ":family woman, woman, girl, boy:", "&#x1f469;&#x200d;&#x1f469;&#x200d;&#x1f467;&#x200d;&#x1f466;"},
+ {":family_woman_woman_girl_girl:", ":family woman, woman, girl, girl:", "&#x1f469;&#x200d;&#x1f469;&#x200d;&#x1f467;&#x200d;&#x1f467;"},
+ {":faroe_islands:", ":flag faroe islands:", "&#x1f1eb;&#x1f1f4;"},
+ {":fast_forward:", ":fast-forward button:", "&#x23e9;"},
+ {":fax:", ":fax machine:", "&#x1f4e0;"},
+ {":fearful:", ":fearful face:", "&#x1f628;"},
+ {":feet:", ":paw prints:", "&#x1f43e;"},
+ {":female_detective:", ":woman detective:", "&#x1f575;&#xfe0f;&#x200d;&#x2640;&#xfe0f;"},
+ {":ferris_wheel:", ":ferris wheel:", "&#x1f3a1;"},
+ {":ferry:", ":ferry:", "&#x26f4;"},
+ {":field_hockey:", ":field hockey:", "&#x1f3d1;"},
+ {":fiji:", ":flag fiji:", "&#x1f1eb;&#x1f1ef;"},
+ {":file_cabinet:", ":file cabinet:", "&#x1f5c4;"},
+ {":file_folder:", ":file folder:", "&#x1f4c1;"},
+ {":film_projector:", ":film projector:", "&#x1f4fd;"},
+ {":film_strip:", ":film frames:", "&#x1f39e;"},
+ {":finland:", ":flag finland:", "&#x1f1eb;&#x1f1ee;"},
+ {":fire:", ":fire:", "&#x1f525;"},
+ {":fire_engine:", ":fire engine:", "&#x1f692;"},
+ {":fireworks:", ":fireworks:", "&#x1f386;"},
+ {":first_quarter_moon:", ":first quarter moon:", "&#x1f313;"},
+ {":first_quarter_moon_with_face:", ":first quarter moon face:", "&#x1f31b;"},
+ {":fish:", ":fish:", "&#x1f41f;"},
+ {":fish_cake:", ":fish cake with swirl:", "&#x1f365;"},
+ {":fishing_pole_and_fish:", ":fishing pole:", "&#x1f3a3;"},
+ {":fist:", ":raised fist:", "&#x270a;"},
+ {":fist_left:", ":left-facing fist:", "&#x1f91b;"},
+ {":fist_oncoming:", ":oncoming fist:", "&#x1f44a;"},
+ {":fist_raised:", ":raised fist:", "&#x270a;"},
+ {":fist_right:", ":right-facing fist:", "&#x1f91c;"},
+ {":five:", ":keycap 5:", "&#x0035;&#xfe0f;&#x20e3;"},
+ {":flags:", ":carp streamer:", "&#x1f38f;"},
+ {":flashlight:", ":flashlight:", "&#x1f526;"},
+ {":fleur_de_lis:", ":fleur-de-lis:", "&#x269c;"},
+ {":flight_arrival:", ":airplane arrival:", "&#x1f6ec;"},
+ {":flight_departure:", ":airplane departure:", "&#x1f6eb;"},
+ {":flipper:", ":dolphin:", "&#x1f42c;"},
+ {":floppy_disk:", ":floppy disk:", "&#x1f4be;"},
+ {":flower_playing_cards:", ":flower playing cards:", "&#x1f3b4;"},
+ {":flushed:", ":flushed face:", "&#x1f633;"},
+ {":fog:", ":fog:", "&#x1f32b;"},
+ {":foggy:", ":foggy:", "&#x1f301;"},
+ {":football:", ":american football:", "&#x1f3c8;"},
+ {":footprints:", ":footprints:", "&#x1f463;"},
+ {":fork_and_knife:", ":fork and knife:", "&#x1f374;"},
+ {":fountain:", ":fountain:", "&#x26f2;"},
+ {":fountain_pen:", ":fountain pen:", "&#x1f58b;"},
+ {":four:", ":keycap 4:", "&#x0034;&#xfe0f;&#x20e3;"},
+ {":four_leaf_clover:", ":four leaf clover:", "&#x1f340;"},
+ {":fox_face:", ":fox face:", "&#x1f98a;"},
+ {":fr:", ":flag france:", "&#x1f1eb;&#x1f1f7;"},
+ {":framed_picture:", ":framed picture:", "&#x1f5bc;"},
+ {":free:", ":free button:", "&#x1f193;"},
+ {":french_guiana:", ":flag french guiana:", "&#x1f1ec;&#x1f1eb;"},
+ {":french_polynesia:", ":flag french polynesia:", "&#x1f1f5;&#x1f1eb;"},
+ {":french_southern_territories:", ":flag french southern territories:", "&#x1f1f9;&#x1f1eb;"},
+ {":fried_egg:", ":cooking:", "&#x1f373;"},
+ {":fried_shrimp:", ":fried shrimp:", "&#x1f364;"},
+ {":fries:", ":french fries:", "&#x1f35f;"},
+ {":frog:", ":frog face:", "&#x1f438;"},
+ {":frowning:", ":frowning face with open mouth:", "&#x1f626;"},
+ {":frowning_face:", ":frowning face:", "&#x2639;"},
+ {":frowning_man:", ":man frowning:", "&#x1f64d;&#x200d;&#x2642;&#xfe0f;"},
+ {":frowning_woman:", ":person frowning:", "&#x1f64d;"},
+ {":fu:", ":middle finger:", "&#x1f595;"},
+ {":fuelpump:", ":fuel pump:", "&#x26fd;"},
+ {":full_moon:", ":full moon:", "&#x1f315;"},
+ {":full_moon_with_face:", ":full moon face:", "&#x1f31d;"},
+ {":funeral_urn:", ":funeral urn:", "&#x26b1;"},
+ {":gabon:", ":flag gabon:", "&#x1f1ec;&#x1f1e6;"},
+ {":gambia:", ":flag gambia:", "&#x1f1ec;&#x1f1f2;"},
+ {":game_die:", ":game die:", "&#x1f3b2;"},
+ {":gb:", ":flag united kingdom:", "&#x1f1ec;&#x1f1e7;"},
+ {":gear:", ":gear:", "&#x2699;"},
+ {":gem:", ":gem stone:", "&#x1f48e;"},
+ {":gemini:", ":gemini:", "&#x264a;"},
+ {":georgia:", ":flag georgia:", "&#x1f1ec;&#x1f1ea;"},
+ {":ghana:", ":flag ghana:", "&#x1f1ec;&#x1f1ed;"},
+ {":ghost:", ":ghost:", "&#x1f47b;"},
+ {":gibraltar:", ":flag gibraltar:", "&#x1f1ec;&#x1f1ee;"},
+ {":gift:", ":wrapped gift:", "&#x1f381;"},
+ {":gift_heart:", ":heart with ribbon:", "&#x1f49d;"},
+ {":girl:", ":girl:", "&#x1f467;"},
+ {":globe_with_meridians:", ":globe with meridians:", "&#x1f310;"},
+ {":goal_net:", ":goal net:", "&#x1f945;"},
+ {":goat:", ":goat:", "&#x1f410;"},
+ {":golf:", ":flag in hole:", "&#x26f3;"},
+ {":golfing_man:", ":person golfing:", "&#x1f3cc;"},
+ {":golfing_woman:", ":woman golfing:", "&#x1f3cc;&#xfe0f;&#x200d;&#x2640;&#xfe0f;"},
+ {":gorilla:", ":gorilla:", "&#x1f98d;"},
+ {":grapes:", ":grapes:", "&#x1f347;"},
+ {":greece:", ":flag greece:", "&#x1f1ec;&#x1f1f7;"},
+ {":green_apple:", ":green apple:", "&#x1f34f;"},
+ {":green_book:", ":green book:", "&#x1f4d7;"},
+ {":green_heart:", ":green heart:", "&#x1f49a;"},
+ {":green_salad:", ":green salad:", "&#x1f957;"},
+ {":greenland:", ":flag greenland:", "&#x1f1ec;&#x1f1f1;"},
+ {":grenada:", ":flag grenada:", "&#x1f1ec;&#x1f1e9;"},
+ {":grey_exclamation:", ":white exclamation mark:", "&#x2755;"},
+ {":grey_question:", ":white question mark:", "&#x2754;"},
+ {":grimacing:", ":grimacing face:", "&#x1f62c;"},
+ {":grin:", ":beaming face with smiling eyes:", "&#x1f601;"},
+ {":grinning:", ":grinning face:", "&#x1f600;"},
+ {":guadeloupe:", ":flag guadeloupe:", "&#x1f1ec;&#x1f1f5;"},
+ {":guam:", ":flag guam:", "&#x1f1ec;&#x1f1fa;"},
+ {":guardsman:", ":guard:", "&#x1f482;"},
+ {":guardswoman:", ":woman guard:", "&#x1f482;&#x200d;&#x2640;&#xfe0f;"},
+ {":guatemala:", ":flag guatemala:", "&#x1f1ec;&#x1f1f9;"},
+ {":guernsey:", ":flag guernsey:", "&#x1f1ec;&#x1f1ec;"},
+ {":guinea:", ":flag guinea:", "&#x1f1ec;&#x1f1f3;"},
+ {":guinea_bissau:", ":flag guinea-bissau:", "&#x1f1ec;&#x1f1fc;"},
+ {":guitar:", ":guitar:", "&#x1f3b8;"},
+ {":gun:", ":pistol:", "&#x1f52b;"},
+ {":guyana:", ":flag guyana:", "&#x1f1ec;&#x1f1fe;"},
+ {":haircut:", ":person getting haircut:", "&#x1f487;"},
+ {":haircut_man:", ":man getting haircut:", "&#x1f487;&#x200d;&#x2642;&#xfe0f;"},
+ {":haircut_woman:", ":person getting haircut:", "&#x1f487;"},
+ {":haiti:", ":flag haiti:", "&#x1f1ed;&#x1f1f9;"},
+ {":hamburger:", ":hamburger:", "&#x1f354;"},
+ {":hammer:", ":hammer:", "&#x1f528;"},
+ {":hammer_and_pick:", ":hammer and pick:", "&#x2692;"},
+ {":hammer_and_wrench:", ":hammer and wrench:", "&#x1f6e0;"},
+ {":hamster:", ":hamster face:", "&#x1f439;"},
+ {":hand:", ":raised hand:", "&#x270b;"},
+ {":handbag:", ":handbag:", "&#x1f45c;"},
+ {":handshake:", ":handshake:", "&#x1f91d;"},
+ {":hankey:", ":pile of poo:", "&#x1f4a9;"},
+ {":hash:", ":keycap #:", "&#x0023;&#xfe0f;&#x20e3;"},
+ {":hatched_chick:", ":front-facing baby chick:", "&#x1f425;"},
+ {":hatching_chick:", ":hatching chick:", "&#x1f423;"},
+ {":headphones:", ":headphone:", "&#x1f3a7;"},
+ {":hear_no_evil:", ":hear-no-evil monkey:", "&#x1f649;"},
+ {":heart:", ":red heart:", "&#x2764;"},
+ {":heart_decoration:", ":heart decoration:", "&#x1f49f;"},
+ {":heart_eyes:", ":smiling face with heart-eyes:", "&#x1f60d;"},
+ {":heart_eyes_cat:", ":smiling cat face with heart-eyes:", "&#x1f63b;"},
+ {":heartbeat:", ":beating heart:", "&#x1f493;"},
+ {":heartpulse:", ":growing heart:", "&#x1f497;"},
+ {":hearts:", ":heart suit:", "&#x2665;"},
+ {":heavy_check_mark:", ":heavy check mark:", "&#x2714;"},
+ {":heavy_division_sign:", ":heavy division sign:", "&#x2797;"},
+ {":heavy_dollar_sign:", ":heavy dollar sign:", "&#x1f4b2;"},
+ {":heavy_exclamation_mark:", ":exclamation mark:", "&#x2757;"},
+ {":heavy_heart_exclamation:", ":heavy heart exclamation:", "&#x2763;"},
+ {":heavy_minus_sign:", ":heavy minus sign:", "&#x2796;"},
+ {":heavy_multiplication_x:", ":heavy multiplication x:", "&#x2716;"},
+ {":heavy_plus_sign:", ":heavy plus sign:", "&#x2795;"},
+ {":helicopter:", ":helicopter:", "&#x1f681;"},
+ {":herb:", ":herb:", "&#x1f33f;"},
+ {":hibiscus:", ":hibiscus:", "&#x1f33a;"},
+ {":high_brightness:", ":bright button:", "&#x1f506;"},
+ {":high_heel:", ":high-heeled shoe:", "&#x1f460;"},
+ {":hocho:", ":kitchen knife:", "&#x1f52a;"},
+ {":hole:", ":hole:", "&#x1f573;"},
+ {":honduras:", ":flag honduras:", "&#x1f1ed;&#x1f1f3;"},
+ {":honey_pot:", ":honey pot:", "&#x1f36f;"},
+ {":honeybee:", ":honeybee:", "&#x1f41d;"},
+ {":hong_kong:", ":flag hong kong sar china:", "&#x1f1ed;&#x1f1f0;"},
+ {":horse:", ":horse face:", "&#x1f434;"},
+ {":horse_racing:", ":horse racing:", "&#x1f3c7;"},
+ {":hospital:", ":hospital:", "&#x1f3e5;"},
+ {":hot_pepper:", ":hot pepper:", "&#x1f336;"},
+ {":hotdog:", ":hot dog:", "&#x1f32d;"},
+ {":hotel:", ":hotel:", "&#x1f3e8;"},
+ {":hotsprings:", ":hot springs:", "&#x2668;"},
+ {":hourglass:", ":hourglass done:", "&#x231b;"},
+ {":hourglass_flowing_sand:", ":hourglass not done:", "&#x23f3;"},
+ {":house:", ":house:", "&#x1f3e0;"},
+ {":house_with_garden:", ":house with garden:", "&#x1f3e1;"},
+ {":houses:", ":houses:", "&#x1f3d8;"},
+ {":hugs:", ":hugging face:", "&#x1f917;"},
+ {":hungary:", ":flag hungary:", "&#x1f1ed;&#x1f1fa;"},
+ {":hushed:", ":hushed face:", "&#x1f62f;"},
+ {":ice_cream:", ":ice cream:", "&#x1f368;"},
+ {":ice_hockey:", ":ice hockey:", "&#x1f3d2;"},
+ {":ice_skate:", ":ice skate:", "&#x26f8;"},
+ {":icecream:", ":soft ice cream:", "&#x1f366;"},
+ {":iceland:", ":flag iceland:", "&#x1f1ee;&#x1f1f8;"},
+ {":id:", ":id button:", "&#x1f194;"},
+ {":ideograph_advantage:", ":japanese \"bargain\" button:", "&#x1f250;"},
+ {":imp:", ":angry face with horns:", "&#x1f47f;"},
+ {":inbox_tray:", ":inbox tray:", "&#x1f4e5;"},
+ {":incoming_envelope:", ":incoming envelope:", "&#x1f4e8;"},
+ {":india:", ":flag india:", "&#x1f1ee;&#x1f1f3;"},
+ {":indonesia:", ":flag indonesia:", "&#x1f1ee;&#x1f1e9;"},
+ {":information_desk_person:", ":person tipping hand:", "&#x1f481;"},
+ {":information_source:", ":information:", "&#x2139;"},
+ {":innocent:", ":smiling face with halo:", "&#x1f607;"},
+ {":interrobang:", ":exclamation question mark:", "&#x2049;"},
+ {":iphone:", ":mobile phone:", "&#x1f4f1;"},
+ {":iran:", ":flag iran:", "&#x1f1ee;&#x1f1f7;"},
+ {":iraq:", ":flag iraq:", "&#x1f1ee;&#x1f1f6;"},
+ {":ireland:", ":flag ireland:", "&#x1f1ee;&#x1f1ea;"},
+ {":isle_of_man:", ":flag isle of man:", "&#x1f1ee;&#x1f1f2;"},
+ {":israel:", ":flag israel:", "&#x1f1ee;&#x1f1f1;"},
+ {":it:", ":flag italy:", "&#x1f1ee;&#x1f1f9;"},
+ {":izakaya_lantern:", ":red paper lantern:", "&#x1f3ee;"},
+ {":jack_o_lantern:", ":jack-o-lantern:", "&#x1f383;"},
+ {":jamaica:", ":flag jamaica:", "&#x1f1ef;&#x1f1f2;"},
+ {":japan:", ":map of japan:", "&#x1f5fe;"},
+ {":japanese_castle:", ":japanese castle:", "&#x1f3ef;"},
+ {":japanese_goblin:", ":goblin:", "&#x1f47a;"},
+ {":japanese_ogre:", ":ogre:", "&#x1f479;"},
+ {":jeans:", ":jeans:", "&#x1f456;"},
+ {":jersey:", ":flag jersey:", "&#x1f1ef;&#x1f1ea;"},
+ {":jordan:", ":flag jordan:", "&#x1f1ef;&#x1f1f4;"},
+ {":joy:", ":face with tears of joy:", "&#x1f602;"},
+ {":joy_cat:", ":cat face with tears of joy:", "&#x1f639;"},
+ {":joystick:", ":joystick:", "&#x1f579;"},
+ {":jp:", ":flag japan:", "&#x1f1ef;&#x1f1f5;"},
+ {":kaaba:", ":kaaba:", "&#x1f54b;"},
+ {":kazakhstan:", ":flag kazakhstan:", "&#x1f1f0;&#x1f1ff;"},
+ {":kenya:", ":flag kenya:", "&#x1f1f0;&#x1f1ea;"},
+ {":key:", ":key:", "&#x1f511;"},
+ {":keyboard:", ":keyboard:", "&#x2328;"},
+ {":keycap_ten:", ":keycap 10:", "&#x1f51f;"},
+ {":kick_scooter:", ":kick scooter:", "&#x1f6f4;"},
+ {":kimono:", ":kimono:", "&#x1f458;"},
+ {":kiribati:", ":flag kiribati:", "&#x1f1f0;&#x1f1ee;"},
+ {":kiss:", ":kiss mark:", "&#x1f48b;"},
+ {":kissing:", ":kissing face:", "&#x1f617;"},
+ {":kissing_cat:", ":kissing cat face:", "&#x1f63d;"},
+ {":kissing_closed_eyes:", ":kissing face with closed eyes:", "&#x1f61a;"},
+ {":kissing_heart:", ":face blowing a kiss:", "&#x1f618;"},
+ {":kissing_smiling_eyes:", ":kissing face with smiling eyes:", "&#x1f619;"},
+ {":kiwi_fruit:", ":kiwi fruit:", "&#x1f95d;"},
+ {":knife:", ":kitchen knife:", "&#x1f52a;"},
+ {":koala:", ":koala:", "&#x1f428;"},
+ {":koko:", ":japanese \"here\" button:", "&#x1f201;"},
+ {":kosovo:", ":flag kosovo:", "&#x1f1fd;&#x1f1f0;"},
+ {":kr:", ":flag south korea:", "&#x1f1f0;&#x1f1f7;"},
+ {":kuwait:", ":flag kuwait:", "&#x1f1f0;&#x1f1fc;"},
+ {":kyrgyzstan:", ":flag kyrgyzstan:", "&#x1f1f0;&#x1f1ec;"},
+ {":label:", ":label:", "&#x1f3f7;"},
+ {":lantern:", ":red paper lantern:", "&#x1f3ee;"},
+ {":laos:", ":flag laos:", "&#x1f1f1;&#x1f1e6;"},
+ {":large_blue_circle:", ":blue circle:", "&#x1f535;"},
+ {":large_blue_diamond:", ":large blue diamond:", "&#x1f537;"},
+ {":large_orange_diamond:", ":large orange diamond:", "&#x1f536;"},
+ {":last_quarter_moon:", ":last quarter moon:", "&#x1f317;"},
+ {":last_quarter_moon_with_face:", ":last quarter moon face:", "&#x1f31c;"},
+ {":latin_cross:", ":latin cross:", "&#x271d;"},
+ {":latvia:", ":flag latvia:", "&#x1f1f1;&#x1f1fb;"},
+ {":laughing:", ":grinning squinting face:", "&#x1f606;"},
+ {":leaves:", ":leaf fluttering in wind:", "&#x1f343;"},
+ {":lebanon:", ":flag lebanon:", "&#x1f1f1;&#x1f1e7;"},
+ {":ledger:", ":ledger:", "&#x1f4d2;"},
+ {":left_luggage:", ":left luggage:", "&#x1f6c5;"},
+ {":left_right_arrow:", ":left-right arrow:", "&#x2194;"},
+ {":leftwards_arrow_with_hook:", ":right arrow curving left:", "&#x21a9;"},
+ {":lemon:", ":lemon:", "&#x1f34b;"},
+ {":leo:", ":leo:", "&#x264c;"},
+ {":leopard:", ":leopard:", "&#x1f406;"},
+ {":lesotho:", ":flag lesotho:", "&#x1f1f1;&#x1f1f8;"},
+ {":level_slider:", ":level slider:", "&#x1f39a;"},
+ {":liberia:", ":flag liberia:", "&#x1f1f1;&#x1f1f7;"},
+ {":libra:", ":libra:", "&#x264e;"},
+ {":libya:", ":flag libya:", "&#x1f1f1;&#x1f1fe;"},
+ {":liechtenstein:", ":flag liechtenstein:", "&#x1f1f1;&#x1f1ee;"},
+ {":light_rail:", ":light rail:", "&#x1f688;"},
+ {":link:", ":link:", "&#x1f517;"},
+ {":lion:", ":lion face:", "&#x1f981;"},
+ {":lips:", ":mouth:", "&#x1f444;"},
+ {":lipstick:", ":lipstick:", "&#x1f484;"},
+ {":lithuania:", ":flag lithuania:", "&#x1f1f1;&#x1f1f9;"},
+ {":lizard:", ":lizard:", "&#x1f98e;"},
+ {":lock:", ":locked:", "&#x1f512;"},
+ {":lock_with_ink_pen:", ":locked with pen:", "&#x1f50f;"},
+ {":lollipop:", ":lollipop:", "&#x1f36d;"},
+ {":loop:", ":double curly loop:", "&#x27bf;"},
+ {":loud_sound:", ":speaker high volume:", "&#x1f50a;"},
+ {":loudspeaker:", ":loudspeaker:", "&#x1f4e2;"},
+ {":love_hotel:", ":love hotel:", "&#x1f3e9;"},
+ {":love_letter:", ":love letter:", "&#x1f48c;"},
+ {":low_brightness:", ":dim button:", "&#x1f505;"},
+ {":luxembourg:", ":flag luxembourg:", "&#x1f1f1;&#x1f1fa;"},
+ {":lying_face:", ":lying face:", "&#x1f925;"},
+ {":m:", ":circled m:", "&#x24c2;"},
+ {":macau:", ":flag macau sar china:", "&#x1f1f2;&#x1f1f4;"},
+ {":macedonia:", ":flag macedonia:", "&#x1f1f2;&#x1f1f0;"},
+ {":madagascar:", ":flag madagascar:", "&#x1f1f2;&#x1f1ec;"},
+ {":mag:", ":magnifying glass tilted left:", "&#x1f50d;"},
+ {":mag_right:", ":magnifying glass tilted right:", "&#x1f50e;"},
+ {":mahjong:", ":mahjong red dragon:", "&#x1f004;"},
+ {":mailbox:", ":closed mailbox with raised flag:", "&#x1f4eb;"},
+ {":mailbox_closed:", ":closed mailbox with lowered flag:", "&#x1f4ea;"},
+ {":mailbox_with_mail:", ":open mailbox with raised flag:", "&#x1f4ec;"},
+ {":mailbox_with_no_mail:", ":open mailbox with lowered flag:", "&#x1f4ed;"},
+ {":malawi:", ":flag malawi:", "&#x1f1f2;&#x1f1fc;"},
+ {":malaysia:", ":flag malaysia:", "&#x1f1f2;&#x1f1fe;"},
+ {":maldives:", ":flag maldives:", "&#x1f1f2;&#x1f1fb;"},
+ {":male_detective:", ":detective:", "&#x1f575;"},
+ {":mali:", ":flag mali:", "&#x1f1f2;&#x1f1f1;"},
+ {":malta:", ":flag malta:", "&#x1f1f2;&#x1f1f9;"},
+ {":man:", ":man:", "&#x1f468;"},
+ {":man_artist:", ":man artist:", "&#x1f468;&#x200d;&#x1f3a8;"},
+ {":man_astronaut:", ":man astronaut:", "&#x1f468;&#x200d;&#x1f680;"},
+ {":man_cartwheeling:", ":man cartwheeling:", "&#x1f938;&#x200d;&#x2642;&#xfe0f;"},
+ {":man_cook:", ":man cook:", "&#x1f468;&#x200d;&#x1f373;"},
+ {":man_dancing:", ":man dancing:", "&#x1f57a;"},
+ {":man_facepalming:", ":man facepalming:", "&#x1f926;&#x200d;&#x2642;&#xfe0f;"},
+ {":man_factory_worker:", ":man factory worker:", "&#x1f468;&#x200d;&#x1f3ed;"},
+ {":man_farmer:", ":man farmer:", "&#x1f468;&#x200d;&#x1f33e;"},
+ {":man_firefighter:", ":man firefighter:", "&#x1f468;&#x200d;&#x1f692;"},
+ {":man_health_worker:", ":man health worker:", "&#x1f468;&#x200d;&#x2695;&#xfe0f;"},
+ {":man_in_tuxedo:", ":man in tuxedo:", "&#x1f935;"},
+ {":man_judge:", ":man judge:", "&#x1f468;&#x200d;&#x2696;&#xfe0f;"},
+ {":man_juggling:", ":man juggling:", "&#x1f939;&#x200d;&#x2642;&#xfe0f;"},
+ {":man_mechanic:", ":man mechanic:", "&#x1f468;&#x200d;&#x1f527;"},
+ {":man_office_worker:", ":man office worker:", "&#x1f468;&#x200d;&#x1f4bc;"},
+ {":man_pilot:", ":man pilot:", "&#x1f468;&#x200d;&#x2708;&#xfe0f;"},
+ {":man_playing_handball:", ":man playing handball:", "&#x1f93e;&#x200d;&#x2642;&#xfe0f;"},
+ {":man_playing_water_polo:", ":man playing water polo:", "&#x1f93d;&#x200d;&#x2642;&#xfe0f;"},
+ {":man_scientist:", ":man scientist:", "&#x1f468;&#x200d;&#x1f52c;"},
+ {":man_shrugging:", ":man shrugging:", "&#x1f937;&#x200d;&#x2642;&#xfe0f;"},
+ {":man_singer:", ":man singer:", "&#x1f468;&#x200d;&#x1f3a4;"},
+ {":man_student:", ":man student:", "&#x1f468;&#x200d;&#x1f393;"},
+ {":man_teacher:", ":man teacher:", "&#x1f468;&#x200d;&#x1f3eb;"},
+ {":man_technologist:", ":man technologist:", "&#x1f468;&#x200d;&#x1f4bb;"},
+ {":man_with_gua_pi_mao:", ":man with chinese cap:", "&#x1f472;"},
+ {":man_with_turban:", ":person wearing turban:", "&#x1f473;"},
+ {":mandarin:", ":tangerine:", "&#x1f34a;"},
+ {":mans_shoe:", ":man's shoe:", "&#x1f45e;"},
+ {":mantelpiece_clock:", ":mantelpiece clock:", "&#x1f570;"},
+ {":maple_leaf:", ":maple leaf:", "&#x1f341;"},
+ {":marshall_islands:", ":flag marshall islands:", "&#x1f1f2;&#x1f1ed;"},
+ {":martial_arts_uniform:", ":martial arts uniform:", "&#x1f94b;"},
+ {":martinique:", ":flag martinique:", "&#x1f1f2;&#x1f1f6;"},
+ {":mask:", ":face with medical mask:", "&#x1f637;"},
+ {":massage:", ":person getting massage:", "&#x1f486;"},
+ {":massage_man:", ":man getting massage:", "&#x1f486;&#x200d;&#x2642;&#xfe0f;"},
+ {":massage_woman:", ":person getting massage:", "&#x1f486;"},
+ {":mauritania:", ":flag mauritania:", "&#x1f1f2;&#x1f1f7;"},
+ {":mauritius:", ":flag mauritius:", "&#x1f1f2;&#x1f1fa;"},
+ {":mayotte:", ":flag mayotte:", "&#x1f1fe;&#x1f1f9;"},
+ {":meat_on_bone:", ":meat on bone:", "&#x1f356;"},
+ {":medal_military:", ":military medal:", "&#x1f396;"},
+ {":medal_sports:", ":sports medal:", "&#x1f3c5;"},
+ {":mega:", ":megaphone:", "&#x1f4e3;"},
+ {":melon:", ":melon:", "&#x1f348;"},
+ {":memo:", ":memo:", "&#x1f4dd;"},
+ {":men_wrestling:", ":men wrestling:", "&#x1f93c;&#x200d;&#x2642;&#xfe0f;"},
+ {":menorah:", ":menorah:", "&#x1f54e;"},
+ {":mens:", ":men's room:", "&#x1f6b9;"},
+ {":metal:", ":sign of the horns:", "&#x1f918;"},
+ {":metro:", ":metro:", "&#x1f687;"},
+ {":mexico:", ":flag mexico:", "&#x1f1f2;&#x1f1fd;"},
+ {":micronesia:", ":flag micronesia:", "&#x1f1eb;&#x1f1f2;"},
+ {":microphone:", ":microphone:", "&#x1f3a4;"},
+ {":microscope:", ":microscope:", "&#x1f52c;"},
+ {":middle_finger:", ":middle finger:", "&#x1f595;"},
+ {":milk_glass:", ":glass of milk:", "&#x1f95b;"},
+ {":milky_way:", ":milky way:", "&#x1f30c;"},
+ {":minibus:", ":minibus:", "&#x1f690;"},
+ {":minidisc:", ":computer disk:", "&#x1f4bd;"},
+ {":mobile_phone_off:", ":mobile phone off:", "&#x1f4f4;"},
+ {":moldova:", ":flag moldova:", "&#x1f1f2;&#x1f1e9;"},
+ {":monaco:", ":flag monaco:", "&#x1f1f2;&#x1f1e8;"},
+ {":money_mouth_face:", ":money-mouth face:", "&#x1f911;"},
+ {":money_with_wings:", ":money with wings:", "&#x1f4b8;"},
+ {":moneybag:", ":money bag:", "&#x1f4b0;"},
+ {":mongolia:", ":flag mongolia:", "&#x1f1f2;&#x1f1f3;"},
+ {":monkey:", ":monkey:", "&#x1f412;"},
+ {":monkey_face:", ":monkey face:", "&#x1f435;"},
+ {":monorail:", ":monorail:", "&#x1f69d;"},
+ {":montenegro:", ":flag montenegro:", "&#x1f1f2;&#x1f1ea;"},
+ {":montserrat:", ":flag montserrat:", "&#x1f1f2;&#x1f1f8;"},
+ {":moon:", ":waxing gibbous moon:", "&#x1f314;"},
+ {":morocco:", ":flag morocco:", "&#x1f1f2;&#x1f1e6;"},
+ {":mortar_board:", ":graduation cap:", "&#x1f393;"},
+ {":mosque:", ":mosque:", "&#x1f54c;"},
+ {":motor_boat:", ":motor boat:", "&#x1f6e5;"},
+ {":motor_scooter:", ":motor scooter:", "&#x1f6f5;"},
+ {":motorcycle:", ":motorcycle:", "&#x1f3cd;"},
+ {":motorway:", ":motorway:", "&#x1f6e3;"},
+ {":mount_fuji:", ":mount fuji:", "&#x1f5fb;"},
+ {":mountain:", ":mountain:", "&#x26f0;"},
+ {":mountain_bicyclist:", ":person mountain biking:", "&#x1f6b5;"},
+ {":mountain_biking_man:", ":person mountain biking:", "&#x1f6b5;"},
+ {":mountain_biking_woman:", ":woman mountain biking:", "&#x1f6b5;&#x200d;&#x2640;&#xfe0f;"},
+ {":mountain_cableway:", ":mountain cableway:", "&#x1f6a0;"},
+ {":mountain_railway:", ":mountain railway:", "&#x1f69e;"},
+ {":mountain_snow:", ":snow-capped mountain:", "&#x1f3d4;"},
+ {":mouse:", ":mouse face:", "&#x1f42d;"},
+ {":mouse2:", ":mouse:", "&#x1f401;"},
+ {":movie_camera:", ":movie camera:", "&#x1f3a5;"},
+ {":moyai:", ":moai:", "&#x1f5ff;"},
+ {":mozambique:", ":flag mozambique:", "&#x1f1f2;&#x1f1ff;"},
+ {":mrs_claus:", ":mrs. claus:", "&#x1f936;"},
+ {":muscle:", ":flexed biceps:", "&#x1f4aa;"},
+ {":mushroom:", ":mushroom:", "&#x1f344;"},
+ {":musical_keyboard:", ":musical keyboard:", "&#x1f3b9;"},
+ {":musical_note:", ":musical note:", "&#x1f3b5;"},
+ {":musical_score:", ":musical score:", "&#x1f3bc;"},
+ {":mute:", ":muted speaker:", "&#x1f507;"},
+ {":myanmar:", ":flag myanmar (burma):", "&#x1f1f2;&#x1f1f2;"},
+ {":nail_care:", ":nail polish:", "&#x1f485;"},
+ {":name_badge:", ":name badge:", "&#x1f4db;"},
+ {":namibia:", ":flag namibia:", "&#x1f1f3;&#x1f1e6;"},
+ {":national_park:", ":national park:", "&#x1f3de;"},
+ {":nauru:", ":flag nauru:", "&#x1f1f3;&#x1f1f7;"},
+ {":nauseated_face:", ":nauseated face:", "&#x1f922;"},
+ {":necktie:", ":necktie:", "&#x1f454;"},
+ {":negative_squared_cross_mark:", ":cross mark button:", "&#x274e;"},
+ {":nepal:", ":flag nepal:", "&#x1f1f3;&#x1f1f5;"},
+ {":nerd_face:", ":nerd face:", "&#x1f913;"},
+ {":netherlands:", ":flag netherlands:", "&#x1f1f3;&#x1f1f1;"},
+ {":neutral_face:", ":neutral face:", "&#x1f610;"},
+ {":new:", ":new button:", "&#x1f195;"},
+ {":new_caledonia:", ":flag new caledonia:", "&#x1f1f3;&#x1f1e8;"},
+ {":new_moon:", ":new moon:", "&#x1f311;"},
+ {":new_moon_with_face:", ":new moon face:", "&#x1f31a;"},
+ {":new_zealand:", ":flag new zealand:", "&#x1f1f3;&#x1f1ff;"},
+ {":newspaper:", ":newspaper:", "&#x1f4f0;"},
+ {":newspaper_roll:", ":rolled-up newspaper:", "&#x1f5de;"},
+ {":next_track_button:", ":next track button:", "&#x23ed;"},
+ {":ng:", ":ng button:", "&#x1f196;"},
+ {":ng_man:", ":man gesturing no:", "&#x1f645;&#x200d;&#x2642;&#xfe0f;"},
+ {":ng_woman:", ":person gesturing no:", "&#x1f645;"},
+ {":nicaragua:", ":flag nicaragua:", "&#x1f1f3;&#x1f1ee;"},
+ {":niger:", ":flag niger:", "&#x1f1f3;&#x1f1ea;"},
+ {":nigeria:", ":flag nigeria:", "&#x1f1f3;&#x1f1ec;"},
+ {":night_with_stars:", ":night with stars:", "&#x1f303;"},
+ {":nine:", ":keycap 9:", "&#x0039;&#xfe0f;&#x20e3;"},
+ {":niue:", ":flag niue:", "&#x1f1f3;&#x1f1fa;"},
+ {":no_bell:", ":bell with slash:", "&#x1f515;"},
+ {":no_bicycles:", ":no bicycles:", "&#x1f6b3;"},
+ {":no_entry:", ":no entry:", "&#x26d4;"},
+ {":no_entry_sign:", ":prohibited:", "&#x1f6ab;"},
+ {":no_good:", ":person gesturing no:", "&#x1f645;"},
+ {":no_good_man:", ":man gesturing no:", "&#x1f645;&#x200d;&#x2642;&#xfe0f;"},
+ {":no_good_woman:", ":person gesturing no:", "&#x1f645;"},
+ {":no_mobile_phones:", ":no mobile phones:", "&#x1f4f5;"},
+ {":no_mouth:", ":face without mouth:", "&#x1f636;"},
+ {":no_pedestrians:", ":no pedestrians:", "&#x1f6b7;"},
+ {":no_smoking:", ":no smoking:", "&#x1f6ad;"},
+ {":non-potable_water:", ":non-potable water:", "&#x1f6b1;"},
+ {":norfolk_island:", ":flag norfolk island:", "&#x1f1f3;&#x1f1eb;"},
+ {":north_korea:", ":flag north korea:", "&#x1f1f0;&#x1f1f5;"},
+ {":northern_mariana_islands:", ":flag northern mariana islands:", "&#x1f1f2;&#x1f1f5;"},
+ {":norway:", ":flag norway:", "&#x1f1f3;&#x1f1f4;"},
+ {":nose:", ":nose:", "&#x1f443;"},
+ {":notebook:", ":notebook:", "&#x1f4d3;"},
+ {":notebook_with_decorative_cover:", ":notebook with decorative cover:", "&#x1f4d4;"},
+ {":notes:", ":musical notes:", "&#x1f3b6;"},
+ {":nut_and_bolt:", ":nut and bolt:", "&#x1f529;"},
+ {":o:", ":heavy large circle:", "&#x2b55;"},
+ {":o2:", ":o button (blood type):", "&#x1f17e;"},
+ {":ocean:", ":water wave:", "&#x1f30a;"},
+ {":octopus:", ":octopus:", "&#x1f419;"},
+ {":oden:", ":oden:", "&#x1f362;"},
+ {":office:", ":office building:", "&#x1f3e2;"},
+ {":oil_drum:", ":oil drum:", "&#x1f6e2;"},
+ {":ok:", ":ok button:", "&#x1f197;"},
+ {":ok_hand:", ":ok hand:", "&#x1f44c;"},
+ {":ok_man:", ":man gesturing ok:", "&#x1f646;&#x200d;&#x2642;&#xfe0f;"},
+ {":ok_woman:", ":person gesturing ok:", "&#x1f646;"},
+ {":old_key:", ":old key:", "&#x1f5dd;"},
+ {":older_man:", ":old man:", "&#x1f474;"},
+ {":older_woman:", ":old woman:", "&#x1f475;"},
+ {":om:", ":om:", "&#x1f549;"},
+ {":oman:", ":flag oman:", "&#x1f1f4;&#x1f1f2;"},
+ {":on:", ":on! arrow:", "&#x1f51b;"},
+ {":oncoming_automobile:", ":oncoming automobile:", "&#x1f698;"},
+ {":oncoming_bus:", ":oncoming bus:", "&#x1f68d;"},
+ {":oncoming_police_car:", ":oncoming police car:", "&#x1f694;"},
+ {":oncoming_taxi:", ":oncoming taxi:", "&#x1f696;"},
+ {":one:", ":keycap 1:", "&#x0031;&#xfe0f;&#x20e3;"},
+ {":open_book:", ":open book:", "&#x1f4d6;"},
+ {":open_file_folder:", ":open file folder:", "&#x1f4c2;"},
+ {":open_hands:", ":open hands:", "&#x1f450;"},
+ {":open_mouth:", ":face with open mouth:", "&#x1f62e;"},
+ {":open_umbrella:", ":umbrella:", "&#x2602;"},
+ {":ophiuchus:", ":ophiuchus:", "&#x26ce;"},
+ {":orange:", ":tangerine:", "&#x1f34a;"},
+ {":orange_book:", ":orange book:", "&#x1f4d9;"},
+ {":orthodox_cross:", ":orthodox cross:", "&#x2626;"},
+ {":outbox_tray:", ":outbox tray:", "&#x1f4e4;"},
+ {":owl:", ":owl:", "&#x1f989;"},
+ {":ox:", ":ox:", "&#x1f402;"},
+ {":package:", ":package:", "&#x1f4e6;"},
+ {":page_facing_up:", ":page facing up:", "&#x1f4c4;"},
+ {":page_with_curl:", ":page with curl:", "&#x1f4c3;"},
+ {":pager:", ":pager:", "&#x1f4df;"},
+ {":paintbrush:", ":paintbrush:", "&#x1f58c;"},
+ {":pakistan:", ":flag pakistan:", "&#x1f1f5;&#x1f1f0;"},
+ {":palau:", ":flag palau:", "&#x1f1f5;&#x1f1fc;"},
+ {":palestinian_territories:", ":flag palestinian territories:", "&#x1f1f5;&#x1f1f8;"},
+ {":palm_tree:", ":palm tree:", "&#x1f334;"},
+ {":panama:", ":flag panama:", "&#x1f1f5;&#x1f1e6;"},
+ {":pancakes:", ":pancakes:", "&#x1f95e;"},
+ {":panda_face:", ":panda face:", "&#x1f43c;"},
+ {":paperclip:", ":paperclip:", "&#x1f4ce;"},
+ {":paperclips:", ":linked paperclips:", "&#x1f587;"},
+ {":papua_new_guinea:", ":flag papua new guinea:", "&#x1f1f5;&#x1f1ec;"},
+ {":paraguay:", ":flag paraguay:", "&#x1f1f5;&#x1f1fe;"},
+ {":parasol_on_ground:", ":umbrella on ground:", "&#x26f1;"},
+ {":parking:", ":p button:", "&#x1f17f;"},
+ {":part_alternation_mark:", ":part alternation mark:", "&#x303d;"},
+ {":partly_sunny:", ":sun behind cloud:", "&#x26c5;"},
+ {":passenger_ship:", ":passenger ship:", "&#x1f6f3;"},
+ {":passport_control:", ":passport control:", "&#x1f6c2;"},
+ {":pause_button:", ":pause button:", "&#x23f8;"},
+ {":paw_prints:", ":paw prints:", "&#x1f43e;"},
+ {":peace_symbol:", ":peace symbol:", "&#x262e;"},
+ {":peach:", ":peach:", "&#x1f351;"},
+ {":peanuts:", ":peanuts:", "&#x1f95c;"},
+ {":pear:", ":pear:", "&#x1f350;"},
+ {":pen:", ":pen:", "&#x1f58a;"},
+ {":pencil:", ":memo:", "&#x1f4dd;"},
+ {":pencil2:", ":pencil:", "&#x270f;"},
+ {":penguin:", ":penguin:", "&#x1f427;"},
+ {":pensive:", ":pensive face:", "&#x1f614;"},
+ {":performing_arts:", ":performing arts:", "&#x1f3ad;"},
+ {":persevere:", ":persevering face:", "&#x1f623;"},
+ {":person_fencing:", ":person fencing:", "&#x1f93a;"},
+ {":person_frowning:", ":person frowning:", "&#x1f64d;"},
+ {":person_with_blond_hair:", ":person blond hair:", "&#x1f471;"},
+ {":person_with_pouting_face:", ":person pouting:", "&#x1f64e;"},
+ {":peru:", ":flag peru:", "&#x1f1f5;&#x1f1ea;"},
+ {":philippines:", ":flag philippines:", "&#x1f1f5;&#x1f1ed;"},
+ {":phone:", ":telephone:", "&#x260e;"},
+ {":pick:", ":pick:", "&#x26cf;"},
+ {":pig:", ":pig face:", "&#x1f437;"},
+ {":pig2:", ":pig:", "&#x1f416;"},
+ {":pig_nose:", ":pig nose:", "&#x1f43d;"},
+ {":pill:", ":pill:", "&#x1f48a;"},
+ {":pineapple:", ":pineapple:", "&#x1f34d;"},
+ {":ping_pong:", ":ping pong:", "&#x1f3d3;"},
+ {":pisces:", ":pisces:", "&#x2653;"},
+ {":pitcairn_islands:", ":flag pitcairn islands:", "&#x1f1f5;&#x1f1f3;"},
+ {":pizza:", ":pizza:", "&#x1f355;"},
+ {":place_of_worship:", ":place of worship:", "&#x1f6d0;"},
+ {":plate_with_cutlery:", ":fork and knife with plate:", "&#x1f37d;"},
+ {":play_or_pause_button:", ":play or pause button:", "&#x23ef;"},
+ {":point_down:", ":backhand index pointing down:", "&#x1f447;"},
+ {":point_left:", ":backhand index pointing left:", "&#x1f448;"},
+ {":point_right:", ":backhand index pointing right:", "&#x1f449;"},
+ {":point_up:", ":index pointing up:", "&#x261d;"},
+ {":point_up_2:", ":backhand index pointing up:", "&#x1f446;"},
+ {":poland:", ":flag poland:", "&#x1f1f5;&#x1f1f1;"},
+ {":police_car:", ":police car:", "&#x1f693;"},
+ {":policeman:", ":police officer:", "&#x1f46e;"},
+ {":policewoman:", ":woman police officer:", "&#x1f46e;&#x200d;&#x2640;&#xfe0f;"},
+ {":poodle:", ":poodle:", "&#x1f429;"},
+ {":poop:", ":pile of poo:", "&#x1f4a9;"},
+ {":popcorn:", ":popcorn:", "&#x1f37f;"},
+ {":portugal:", ":flag portugal:", "&#x1f1f5;&#x1f1f9;"},
+ {":post_office:", ":japanese post office:", "&#x1f3e3;"},
+ {":postal_horn:", ":postal horn:", "&#x1f4ef;"},
+ {":postbox:", ":postbox:", "&#x1f4ee;"},
+ {":potable_water:", ":potable water:", "&#x1f6b0;"},
+ {":potato:", ":potato:", "&#x1f954;"},
+ {":pouch:", ":clutch bag:", "&#x1f45d;"},
+ {":poultry_leg:", ":poultry leg:", "&#x1f357;"},
+ {":pound:", ":pound banknote:", "&#x1f4b7;"},
+ {":pout:", ":pouting face:", "&#x1f621;"},
+ {":pouting_cat:", ":pouting cat face:", "&#x1f63e;"},
+ {":pouting_man:", ":man pouting:", "&#x1f64e;&#x200d;&#x2642;&#xfe0f;"},
+ {":pouting_woman:", ":person pouting:", "&#x1f64e;"},
+ {":pray:", ":folded hands:", "&#x1f64f;"},
+ {":prayer_beads:", ":prayer beads:", "&#x1f4ff;"},
+ {":pregnant_woman:", ":pregnant woman:", "&#x1f930;"},
+ {":previous_track_button:", ":last track button:", "&#x23ee;"},
+ {":prince:", ":prince:", "&#x1f934;"},
+ {":princess:", ":princess:", "&#x1f478;"},
+ {":printer:", ":printer:", "&#x1f5a8;"},
+ {":puerto_rico:", ":flag puerto rico:", "&#x1f1f5;&#x1f1f7;"},
+ {":punch:", ":oncoming fist:", "&#x1f44a;"},
+ {":purple_heart:", ":purple heart:", "&#x1f49c;"},
+ {":purse:", ":purse:", "&#x1f45b;"},
+ {":pushpin:", ":pushpin:", "&#x1f4cc;"},
+ {":put_litter_in_its_place:", ":litter in bin sign:", "&#x1f6ae;"},
+ {":qatar:", ":flag qatar:", "&#x1f1f6;&#x1f1e6;"},
+ {":question:", ":question mark:", "&#x2753;"},
+ {":rabbit:", ":rabbit face:", "&#x1f430;"},
+ {":rabbit2:", ":rabbit:", "&#x1f407;"},
+ {":racehorse:", ":horse:", "&#x1f40e;"},
+ {":racing_car:", ":racing car:", "&#x1f3ce;"},
+ {":radio:", ":radio:", "&#x1f4fb;"},
+ {":radio_button:", ":radio button:", "&#x1f518;"},
+ {":radioactive:", ":radioactive:", "&#x2622;"},
+ {":rage:", ":pouting face:", "&#x1f621;"},
+ {":railway_car:", ":railway car:", "&#x1f683;"},
+ {":railway_track:", ":railway track:", "&#x1f6e4;"},
+ {":rainbow:", ":rainbow:", "&#x1f308;"},
+ {":rainbow_flag:", ":rainbow flag:", "&#x1f3f3;&#xfe0f;&#x200d;&#x1f308;"},
+ {":raised_back_of_hand:", ":raised back of hand:", "&#x1f91a;"},
+ {":raised_hand:", ":raised hand:", "&#x270b;"},
+ {":raised_hand_with_fingers_splayed:", ":hand with fingers splayed:", "&#x1f590;"},
+ {":raised_hands:", ":raising hands:", "&#x1f64c;"},
+ {":raising_hand:", ":person raising hand:", "&#x1f64b;"},
+ {":raising_hand_man:", ":man raising hand:", "&#x1f64b;&#x200d;&#x2642;&#xfe0f;"},
+ {":raising_hand_woman:", ":person raising hand:", "&#x1f64b;"},
+ {":ram:", ":ram:", "&#x1f40f;"},
+ {":ramen:", ":steaming bowl:", "&#x1f35c;"},
+ {":rat:", ":rat:", "&#x1f400;"},
+ {":record_button:", ":record button:", "&#x23fa;"},
+ {":recycle:", ":recycling symbol:", "&#x267b;"},
+ {":red_car:", ":automobile:", "&#x1f697;"},
+ {":red_circle:", ":red circle:", "&#x1f534;"},
+ {":registered:", ":registered:", "&#x00ae;"},
+ {":relaxed:", ":smiling face:", "&#x263a;"},
+ {":relieved:", ":relieved face:", "&#x1f60c;"},
+ {":reminder_ribbon:", ":reminder ribbon:", "&#x1f397;"},
+ {":repeat:", ":repeat button:", "&#x1f501;"},
+ {":repeat_one:", ":repeat single button:", "&#x1f502;"},
+ {":rescue_worker_helmet:", ":rescue worker's helmet:", "&#x26d1;"},
+ {":restroom:", ":restroom:", "&#x1f6bb;"},
+ {":reunion:", ":flag réunion:", "&#x1f1f7;&#x1f1ea;"},
+ {":revolving_hearts:", ":revolving hearts:", "&#x1f49e;"},
+ {":rewind:", ":fast reverse button:", "&#x23ea;"},
+ {":rhinoceros:", ":rhinoceros:", "&#x1f98f;"},
+ {":ribbon:", ":ribbon:", "&#x1f380;"},
+ {":rice:", ":cooked rice:", "&#x1f35a;"},
+ {":rice_ball:", ":rice ball:", "&#x1f359;"},
+ {":rice_cracker:", ":rice cracker:", "&#x1f358;"},
+ {":rice_scene:", ":moon viewing ceremony:", "&#x1f391;"},
+ {":right_anger_bubble:", ":right anger bubble:", "&#x1f5ef;"},
+ {":ring:", ":ring:", "&#x1f48d;"},
+ {":robot:", ":robot face:", "&#x1f916;"},
+ {":rocket:", ":rocket:", "&#x1f680;"},
+ {":rofl:", ":rolling on the floor laughing:", "&#x1f923;"},
+ {":roll_eyes:", ":face with rolling eyes:", "&#x1f644;"},
+ {":roller_coaster:", ":roller coaster:", "&#x1f3a2;"},
+ {":romania:", ":flag romania:", "&#x1f1f7;&#x1f1f4;"},
+ {":rooster:", ":rooster:", "&#x1f413;"},
+ {":rose:", ":rose:", "&#x1f339;"},
+ {":rosette:", ":rosette:", "&#x1f3f5;"},
+ {":rotating_light:", ":police car light:", "&#x1f6a8;"},
+ {":round_pushpin:", ":round pushpin:", "&#x1f4cd;"},
+ {":rowboat:", ":person rowing boat:", "&#x1f6a3;"},
+ {":rowing_man:", ":person rowing boat:", "&#x1f6a3;"},
+ {":rowing_woman:", ":woman rowing boat:", "&#x1f6a3;&#x200d;&#x2640;&#xfe0f;"},
+ {":ru:", ":flag russia:", "&#x1f1f7;&#x1f1fa;"},
+ {":rugby_football:", ":rugby football:", "&#x1f3c9;"},
+ {":runner:", ":person running:", "&#x1f3c3;"},
+ {":running:", ":person running:", "&#x1f3c3;"},
+ {":running_man:", ":person running:", "&#x1f3c3;"},
+ {":running_shirt_with_sash:", ":running shirt:", "&#x1f3bd;"},
+ {":running_woman:", ":woman running:", "&#x1f3c3;&#x200d;&#x2640;&#xfe0f;"},
+ {":rwanda:", ":flag rwanda:", "&#x1f1f7;&#x1f1fc;"},
+ {":sa:", ":japanese \"service charge\" button:", "&#x1f202;"},
+ {":sagittarius:", ":sagittarius:", "&#x2650;"},
+ {":sailboat:", ":sailboat:", "&#x26f5;"},
+ {":sake:", ":sake:", "&#x1f376;"},
+ {":samoa:", ":flag samoa:", "&#x1f1fc;&#x1f1f8;"},
+ {":san_marino:", ":flag san marino:", "&#x1f1f8;&#x1f1f2;"},
+ {":sandal:", ":woman's sandal:", "&#x1f461;"},
+ {":santa:", ":santa claus:", "&#x1f385;"},
+ {":sao_tome_principe:", ":flag sĂ£o tomĂ© & prĂ­ncipe:", "&#x1f1f8;&#x1f1f9;"},
+ {":satellite:", ":satellite antenna:", "&#x1f4e1;"},
+ {":satisfied:", ":grinning squinting face:", "&#x1f606;"},
+ {":saudi_arabia:", ":flag saudi arabia:", "&#x1f1f8;&#x1f1e6;"},
+ {":saxophone:", ":saxophone:", "&#x1f3b7;"},
+ {":school:", ":school:", "&#x1f3eb;"},
+ {":school_satchel:", ":backpack:", "&#x1f392;"},
+ {":scissors:", ":scissors:", "&#x2702;"},
+ {":scorpion:", ":scorpion:", "&#x1f982;"},
+ {":scorpius:", ":scorpio:", "&#x264f;"},
+ {":scream:", ":face screaming in fear:", "&#x1f631;"},
+ {":scream_cat:", ":weary cat face:", "&#x1f640;"},
+ {":scroll:", ":scroll:", "&#x1f4dc;"},
+ {":seat:", ":seat:", "&#x1f4ba;"},
+ {":secret:", ":japanese \"secret\" button:", "&#x3299;"},
+ {":see_no_evil:", ":see-no-evil monkey:", "&#x1f648;"},
+ {":seedling:", ":seedling:", "&#x1f331;"},
+ {":selfie:", ":selfie:", "&#x1f933;"},
+ {":senegal:", ":flag senegal:", "&#x1f1f8;&#x1f1f3;"},
+ {":serbia:", ":flag serbia:", "&#x1f1f7;&#x1f1f8;"},
+ {":seven:", ":keycap 7:", "&#x0037;&#xfe0f;&#x20e3;"},
+ {":seychelles:", ":flag seychelles:", "&#x1f1f8;&#x1f1e8;"},
+ {":shallow_pan_of_food:", ":shallow pan of food:", "&#x1f958;"},
+ {":shamrock:", ":shamrock:", "&#x2618;"},
+ {":shark:", ":shark:", "&#x1f988;"},
+ {":shaved_ice:", ":shaved ice:", "&#x1f367;"},
+ {":sheep:", ":ewe:", "&#x1f411;"},
+ {":shell:", ":spiral shell:", "&#x1f41a;"},
+ {":shield:", ":shield:", "&#x1f6e1;"},
+ {":shinto_shrine:", ":shinto shrine:", "&#x26e9;"},
+ {":ship:", ":ship:", "&#x1f6a2;"},
+ {":shirt:", ":t-shirt:", "&#x1f455;"},
+ {":shit:", ":pile of poo:", "&#x1f4a9;"},
+ {":shoe:", ":man's shoe:", "&#x1f45e;"},
+ {":shopping:", ":shopping bags:", "&#x1f6cd;"},
+ {":shopping_cart:", ":shopping cart:", "&#x1f6d2;"},
+ {":shower:", ":shower:", "&#x1f6bf;"},
+ {":shrimp:", ":shrimp:", "&#x1f990;"},
+ {":sierra_leone:", ":flag sierra leone:", "&#x1f1f8;&#x1f1f1;"},
+ {":signal_strength:", ":antenna bars:", "&#x1f4f6;"},
+ {":singapore:", ":flag singapore:", "&#x1f1f8;&#x1f1ec;"},
+ {":sint_maarten:", ":flag sint maarten:", "&#x1f1f8;&#x1f1fd;"},
+ {":six:", ":keycap 6:", "&#x0036;&#xfe0f;&#x20e3;"},
+ {":six_pointed_star:", ":dotted six-pointed star:", "&#x1f52f;"},
+ {":ski:", ":skis:", "&#x1f3bf;"},
+ {":skier:", ":skier:", "&#x26f7;"},
+ {":skull:", ":skull:", "&#x1f480;"},
+ {":skull_and_crossbones:", ":skull and crossbones:", "&#x2620;"},
+ {":sleeping:", ":sleeping face:", "&#x1f634;"},
+ {":sleeping_bed:", ":person in bed:", "&#x1f6cc;"},
+ {":sleepy:", ":sleepy face:", "&#x1f62a;"},
+ {":slightly_frowning_face:", ":slightly frowning face:", "&#x1f641;"},
+ {":slightly_smiling_face:", ":slightly smiling face:", "&#x1f642;"},
+ {":slot_machine:", ":slot machine:", "&#x1f3b0;"},
+ {":slovakia:", ":flag slovakia:", "&#x1f1f8;&#x1f1f0;"},
+ {":slovenia:", ":flag slovenia:", "&#x1f1f8;&#x1f1ee;"},
+ {":small_airplane:", ":small airplane:", "&#x1f6e9;"},
+ {":small_blue_diamond:", ":small blue diamond:", "&#x1f539;"},
+ {":small_orange_diamond:", ":small orange diamond:", "&#x1f538;"},
+ {":small_red_triangle:", ":red triangle pointed up:", "&#x1f53a;"},
+ {":small_red_triangle_down:", ":red triangle pointed down:", "&#x1f53b;"},
+ {":smile:", ":grinning face with smiling eyes:", "&#x1f604;"},
+ {":smile_cat:", ":grinning cat face with smiling eyes:", "&#x1f638;"},
+ {":smiley:", ":grinning face with big eyes:", "&#x1f603;"},
+ {":smiley_cat:", ":grinning cat face:", "&#x1f63a;"},
+ {":smiling_imp:", ":smiling face with horns:", "&#x1f608;"},
+ {":smirk:", ":smirking face:", "&#x1f60f;"},
+ {":smirk_cat:", ":cat face with wry smile:", "&#x1f63c;"},
+ {":smoking:", ":cigarette:", "&#x1f6ac;"},
+ {":snail:", ":snail:", "&#x1f40c;"},
+ {":snake:", ":snake:", "&#x1f40d;"},
+ {":sneezing_face:", ":sneezing face:", "&#x1f927;"},
+ {":snowboarder:", ":snowboarder:", "&#x1f3c2;"},
+ {":snowflake:", ":snowflake:", "&#x2744;"},
+ {":snowman:", ":snowman without snow:", "&#x26c4;"},
+ {":snowman_with_snow:", ":snowman:", "&#x2603;"},
+ {":sob:", ":loudly crying face:", "&#x1f62d;"},
+ {":soccer:", ":soccer ball:", "&#x26bd;"},
+ {":solomon_islands:", ":flag solomon islands:", "&#x1f1f8;&#x1f1e7;"},
+ {":somalia:", ":flag somalia:", "&#x1f1f8;&#x1f1f4;"},
+ {":soon:", ":soon arrow:", "&#x1f51c;"},
+ {":sos:", ":sos button:", "&#x1f198;"},
+ {":sound:", ":speaker medium volume:", "&#x1f509;"},
+ {":south_africa:", ":flag south africa:", "&#x1f1ff;&#x1f1e6;"},
+ {":south_georgia_south_sandwich_islands:", ":flag south georgia & south sandwich islands:", "&#x1f1ec;&#x1f1f8;"},
+ {":south_sudan:", ":flag south sudan:", "&#x1f1f8;&#x1f1f8;"},
+ {":space_invader:", ":alien monster:", "&#x1f47e;"},
+ {":spades:", ":spade suit:", "&#x2660;"},
+ {":spaghetti:", ":spaghetti:", "&#x1f35d;"},
+ {":sparkle:", ":sparkle:", "&#x2747;"},
+ {":sparkler:", ":sparkler:", "&#x1f387;"},
+ {":sparkles:", ":sparkles:", "&#x2728;"},
+ {":sparkling_heart:", ":sparkling heart:", "&#x1f496;"},
+ {":speak_no_evil:", ":speak-no-evil monkey:", "&#x1f64a;"},
+ {":speaker:", ":speaker low volume:", "&#x1f508;"},
+ {":speaking_head:", ":speaking head:", "&#x1f5e3;"},
+ {":speech_balloon:", ":speech balloon:", "&#x1f4ac;"},
+ {":speedboat:", ":speedboat:", "&#x1f6a4;"},
+ {":spider:", ":spider:", "&#x1f577;"},
+ {":spider_web:", ":spider web:", "&#x1f578;"},
+ {":spiral_calendar:", ":spiral calendar:", "&#x1f5d3;"},
+ {":spiral_notepad:", ":spiral notepad:", "&#x1f5d2;"},
+ {":spoon:", ":spoon:", "&#x1f944;"},
+ {":squid:", ":squid:", "&#x1f991;"},
+ {":sri_lanka:", ":flag sri lanka:", "&#x1f1f1;&#x1f1f0;"},
+ {":st_barthelemy:", ":flag st. barthélemy:", "&#x1f1e7;&#x1f1f1;"},
+ {":st_helena:", ":flag st. helena:", "&#x1f1f8;&#x1f1ed;"},
+ {":st_kitts_nevis:", ":flag st. kitts & nevis:", "&#x1f1f0;&#x1f1f3;"},
+ {":st_lucia:", ":flag st. lucia:", "&#x1f1f1;&#x1f1e8;"},
+ {":st_pierre_miquelon:", ":flag st. pierre & miquelon:", "&#x1f1f5;&#x1f1f2;"},
+ {":st_vincent_grenadines:", ":flag st. vincent & grenadines:", "&#x1f1fb;&#x1f1e8;"},
+ {":stadium:", ":stadium:", "&#x1f3df;"},
+ {":star:", ":star:", "&#x2b50;"},
+ {":star2:", ":glowing star:", "&#x1f31f;"},
+ {":star_and_crescent:", ":star and crescent:", "&#x262a;"},
+ {":star_of_david:", ":star of david:", "&#x2721;"},
+ {":stars:", ":shooting star:", "&#x1f320;"},
+ {":station:", ":station:", "&#x1f689;"},
+ {":statue_of_liberty:", ":statue of liberty:", "&#x1f5fd;"},
+ {":steam_locomotive:", ":locomotive:", "&#x1f682;"},
+ {":stew:", ":pot of food:", "&#x1f372;"},
+ {":stop_button:", ":stop button:", "&#x23f9;"},
+ {":stop_sign:", ":stop sign:", "&#x1f6d1;"},
+ {":stopwatch:", ":stopwatch:", "&#x23f1;"},
+ {":straight_ruler:", ":straight ruler:", "&#x1f4cf;"},
+ {":strawberry:", ":strawberry:", "&#x1f353;"},
+ {":stuck_out_tongue:", ":face with tongue:", "&#x1f61b;"},
+ {":stuck_out_tongue_closed_eyes:", ":squinting face with tongue:", "&#x1f61d;"},
+ {":stuck_out_tongue_winking_eye:", ":winking face with tongue:", "&#x1f61c;"},
+ {":studio_microphone:", ":studio microphone:", "&#x1f399;"},
+ {":stuffed_flatbread:", ":stuffed flatbread:", "&#x1f959;"},
+ {":sudan:", ":flag sudan:", "&#x1f1f8;&#x1f1e9;"},
+ {":sun_behind_large_cloud:", ":sun behind large cloud:", "&#x1f325;"},
+ {":sun_behind_rain_cloud:", ":sun behind rain cloud:", "&#x1f326;"},
+ {":sun_behind_small_cloud:", ":sun behind small cloud:", "&#x1f324;"},
+ {":sun_with_face:", ":sun with face:", "&#x1f31e;"},
+ {":sunflower:", ":sunflower:", "&#x1f33b;"},
+ {":sunglasses:", ":smiling face with sunglasses:", "&#x1f60e;"},
+ {":sunny:", ":sun:", "&#x2600;"},
+ {":sunrise:", ":sunrise:", "&#x1f305;"},
+ {":sunrise_over_mountains:", ":sunrise over mountains:", "&#x1f304;"},
+ {":surfer:", ":person surfing:", "&#x1f3c4;"},
+ {":surfing_man:", ":person surfing:", "&#x1f3c4;"},
+ {":surfing_woman:", ":woman surfing:", "&#x1f3c4;&#x200d;&#x2640;&#xfe0f;"},
+ {":suriname:", ":flag suriname:", "&#x1f1f8;&#x1f1f7;"},
+ {":sushi:", ":sushi:", "&#x1f363;"},
+ {":suspension_railway:", ":suspension railway:", "&#x1f69f;"},
+ {":swaziland:", ":flag swaziland:", "&#x1f1f8;&#x1f1ff;"},
+ {":sweat:", ":downcast face with sweat:", "&#x1f613;"},
+ {":sweat_drops:", ":sweat droplets:", "&#x1f4a6;"},
+ {":sweat_smile:", ":grinning face with sweat:", "&#x1f605;"},
+ {":sweden:", ":flag sweden:", "&#x1f1f8;&#x1f1ea;"},
+ {":sweet_potato:", ":roasted sweet potato:", "&#x1f360;"},
+ {":swimmer:", ":person swimming:", "&#x1f3ca;"},
+ {":swimming_man:", ":person swimming:", "&#x1f3ca;"},
+ {":swimming_woman:", ":woman swimming:", "&#x1f3ca;&#x200d;&#x2640;&#xfe0f;"},
+ {":switzerland:", ":flag switzerland:", "&#x1f1e8;&#x1f1ed;"},
+ {":symbols:", ":input symbols:", "&#x1f523;"},
+ {":synagogue:", ":synagogue:", "&#x1f54d;"},
+ {":syria:", ":flag syria:", "&#x1f1f8;&#x1f1fe;"},
+ {":syringe:", ":syringe:", "&#x1f489;"},
+ {":taco:", ":taco:", "&#x1f32e;"},
+ {":tada:", ":party popper:", "&#x1f389;"},
+ {":taiwan:", ":flag taiwan:", "&#x1f1f9;&#x1f1fc;"},
+ {":tajikistan:", ":flag tajikistan:", "&#x1f1f9;&#x1f1ef;"},
+ {":tanabata_tree:", ":tanabata tree:", "&#x1f38b;"},
+ {":tangerine:", ":tangerine:", "&#x1f34a;"},
+ {":tanzania:", ":flag tanzania:", "&#x1f1f9;&#x1f1ff;"},
+ {":taurus:", ":taurus:", "&#x2649;"},
+ {":taxi:", ":taxi:", "&#x1f695;"},
+ {":tea:", ":teacup without handle:", "&#x1f375;"},
+ {":telephone:", ":telephone:", "&#x260e;"},
+ {":telephone_receiver:", ":telephone receiver:", "&#x1f4de;"},
+ {":telescope:", ":telescope:", "&#x1f52d;"},
+ {":tennis:", ":tennis:", "&#x1f3be;"},
+ {":tent:", ":tent:", "&#x26fa;"},
+ {":thailand:", ":flag thailand:", "&#x1f1f9;&#x1f1ed;"},
+ {":thermometer:", ":thermometer:", "&#x1f321;"},
+ {":thinking:", ":thinking face:", "&#x1f914;"},
+ {":thought_balloon:", ":thought balloon:", "&#x1f4ad;"},
+ {":three:", ":keycap 3:", "&#x0033;&#xfe0f;&#x20e3;"},
+ {":thumbsdown:", ":thumbs down:", "&#x1f44e;"},
+ {":thumbsup:", ":thumbs up:", "&#x1f44d;"},
+ {":ticket:", ":ticket:", "&#x1f3ab;"},
+ {":tickets:", ":admission tickets:", "&#x1f39f;"},
+ {":tiger:", ":tiger face:", "&#x1f42f;"},
+ {":tiger2:", ":tiger:", "&#x1f405;"},
+ {":timer_clock:", ":timer clock:", "&#x23f2;"},
+ {":timor_leste:", ":flag timor-leste:", "&#x1f1f9;&#x1f1f1;"},
+ {":tipping_hand_man:", ":man tipping hand:", "&#x1f481;&#x200d;&#x2642;&#xfe0f;"},
+ {":tipping_hand_woman:", ":person tipping hand:", "&#x1f481;"},
+ {":tired_face:", ":tired face:", "&#x1f62b;"},
+ {":tm:", ":trade mark:", "&#x2122;"},
+ {":togo:", ":flag togo:", "&#x1f1f9;&#x1f1ec;"},
+ {":toilet:", ":toilet:", "&#x1f6bd;"},
+ {":tokelau:", ":flag tokelau:", "&#x1f1f9;&#x1f1f0;"},
+ {":tokyo_tower:", ":tokyo tower:", "&#x1f5fc;"},
+ {":tomato:", ":tomato:", "&#x1f345;"},
+ {":tonga:", ":flag tonga:", "&#x1f1f9;&#x1f1f4;"},
+ {":tongue:", ":tongue:", "&#x1f445;"},
+ {":top:", ":top arrow:", "&#x1f51d;"},
+ {":tophat:", ":top hat:", "&#x1f3a9;"},
+ {":tornado:", ":tornado:", "&#x1f32a;"},
+ {":tr:", ":flag turkey:", "&#x1f1f9;&#x1f1f7;"},
+ {":trackball:", ":trackball:", "&#x1f5b2;"},
+ {":tractor:", ":tractor:", "&#x1f69c;"},
+ {":traffic_light:", ":horizontal traffic light:", "&#x1f6a5;"},
+ {":train:", ":tram car:", "&#x1f68b;"},
+ {":train2:", ":train:", "&#x1f686;"},
+ {":tram:", ":tram:", "&#x1f68a;"},
+ {":triangular_flag_on_post:", ":triangular flag:", "&#x1f6a9;"},
+ {":triangular_ruler:", ":triangular ruler:", "&#x1f4d0;"},
+ {":trident:", ":trident emblem:", "&#x1f531;"},
+ {":trinidad_tobago:", ":flag trinidad & tobago:", "&#x1f1f9;&#x1f1f9;"},
+ {":triumph:", ":face with steam from nose:", "&#x1f624;"},
+ {":trolleybus:", ":trolleybus:", "&#x1f68e;"},
+ {":trophy:", ":trophy:", "&#x1f3c6;"},
+ {":tropical_drink:", ":tropical drink:", "&#x1f379;"},
+ {":tropical_fish:", ":tropical fish:", "&#x1f420;"},
+ {":truck:", ":delivery truck:", "&#x1f69a;"},
+ {":trumpet:", ":trumpet:", "&#x1f3ba;"},
+ {":tshirt:", ":t-shirt:", "&#x1f455;"},
+ {":tulip:", ":tulip:", "&#x1f337;"},
+ {":tumbler_glass:", ":tumbler glass:", "&#x1f943;"},
+ {":tunisia:", ":flag tunisia:", "&#x1f1f9;&#x1f1f3;"},
+ {":turkey:", ":turkey:", "&#x1f983;"},
+ {":turkmenistan:", ":flag turkmenistan:", "&#x1f1f9;&#x1f1f2;"},
+ {":turks_caicos_islands:", ":flag turks & caicos islands:", "&#x1f1f9;&#x1f1e8;"},
+ {":turtle:", ":turtle:", "&#x1f422;"},
+ {":tuvalu:", ":flag tuvalu:", "&#x1f1f9;&#x1f1fb;"},
+ {":tv:", ":television:", "&#x1f4fa;"},
+ {":twisted_rightwards_arrows:", ":shuffle tracks button:", "&#x1f500;"},
+ {":two:", ":keycap 2:", "&#x0032;&#xfe0f;&#x20e3;"},
+ {":two_hearts:", ":two hearts:", "&#x1f495;"},
+ {":two_men_holding_hands:", ":two men holding hands:", "&#x1f46c;"},
+ {":two_women_holding_hands:", ":two women holding hands:", "&#x1f46d;"},
+ {":u5272:", ":japanese \"discount\" button:", "&#x1f239;"},
+ {":u5408:", ":japanese \"passing grade\" button:", "&#x1f234;"},
+ {":u55b6:", ":japanese \"open for business\" button:", "&#x1f23a;"},
+ {":u6307:", ":japanese \"reserved\" button:", "&#x1f22f;"},
+ {":u6708:", ":japanese \"monthly amount\" button:", "&#x1f237;"},
+ {":u6709:", ":japanese \"not free of charge\" button:", "&#x1f236;"},
+ {":u6e80:", ":japanese \"no vacancy\" button:", "&#x1f235;"},
+ {":u7121:", ":japanese \"free of charge\" button:", "&#x1f21a;"},
+ {":u7533:", ":japanese \"application\" button:", "&#x1f238;"},
+ {":u7981:", ":japanese \"prohibited\" button:", "&#x1f232;"},
+ {":u7a7a:", ":japanese \"vacancy\" button:", "&#x1f233;"},
+ {":uganda:", ":flag uganda:", "&#x1f1fa;&#x1f1ec;"},
+ {":uk:", ":flag united kingdom:", "&#x1f1ec;&#x1f1e7;"},
+ {":ukraine:", ":flag ukraine:", "&#x1f1fa;&#x1f1e6;"},
+ {":umbrella:", ":umbrella with rain drops:", "&#x2614;"},
+ {":unamused:", ":unamused face:", "&#x1f612;"},
+ {":underage:", ":no one under eighteen:", "&#x1f51e;"},
+ {":unicorn:", ":unicorn face:", "&#x1f984;"},
+ {":united_arab_emirates:", ":flag united arab emirates:", "&#x1f1e6;&#x1f1ea;"},
+ {":unlock:", ":unlocked:", "&#x1f513;"},
+ {":up:", ":up! button:", "&#x1f199;"},
+ {":upside_down_face:", ":upside-down face:", "&#x1f643;"},
+ {":uruguay:", ":flag uruguay:", "&#x1f1fa;&#x1f1fe;"},
+ {":us:", ":flag united states:", "&#x1f1fa;&#x1f1f8;"},
+ {":us_virgin_islands:", ":flag u.s. virgin islands:", "&#x1f1fb;&#x1f1ee;"},
+ {":uzbekistan:", ":flag uzbekistan:", "&#x1f1fa;&#x1f1ff;"},
+ {":v:", ":victory hand:", "&#x270c;"},
+ {":vanuatu:", ":flag vanuatu:", "&#x1f1fb;&#x1f1fa;"},
+ {":vatican_city:", ":flag vatican city:", "&#x1f1fb;&#x1f1e6;"},
+ {":venezuela:", ":flag venezuela:", "&#x1f1fb;&#x1f1ea;"},
+ {":vertical_traffic_light:", ":vertical traffic light:", "&#x1f6a6;"},
+ {":vhs:", ":videocassette:", "&#x1f4fc;"},
+ {":vibration_mode:", ":vibration mode:", "&#x1f4f3;"},
+ {":video_camera:", ":video camera:", "&#x1f4f9;"},
+ {":video_game:", ":video game:", "&#x1f3ae;"},
+ {":vietnam:", ":flag vietnam:", "&#x1f1fb;&#x1f1f3;"},
+ {":violin:", ":violin:", "&#x1f3bb;"},
+ {":virgo:", ":virgo:", "&#x264d;"},
+ {":volcano:", ":volcano:", "&#x1f30b;"},
+ {":volleyball:", ":volleyball:", "&#x1f3d0;"},
+ {":vs:", ":vs button:", "&#x1f19a;"},
+ {":vulcan_salute:", ":vulcan salute:", "&#x1f596;"},
+ {":walking:", ":person walking:", "&#x1f6b6;"},
+ {":walking_man:", ":person walking:", "&#x1f6b6;"},
+ {":walking_woman:", ":woman walking:", "&#x1f6b6;&#x200d;&#x2640;&#xfe0f;"},
+ {":wallis_futuna:", ":flag wallis & futuna:", "&#x1f1fc;&#x1f1eb;"},
+ {":waning_crescent_moon:", ":waning crescent moon:", "&#x1f318;"},
+ {":waning_gibbous_moon:", ":waning gibbous moon:", "&#x1f316;"},
+ {":warning:", ":warning:", "&#x26a0;"},
+ {":wastebasket:", ":wastebasket:", "&#x1f5d1;"},
+ {":watch:", ":watch:", "&#x231a;"},
+ {":water_buffalo:", ":water buffalo:", "&#x1f403;"},
+ {":watermelon:", ":watermelon:", "&#x1f349;"},
+ {":wave:", ":waving hand:", "&#x1f44b;"},
+ {":wavy_dash:", ":wavy dash:", "&#x3030;"},
+ {":waxing_crescent_moon:", ":waxing crescent moon:", "&#x1f312;"},
+ {":waxing_gibbous_moon:", ":waxing gibbous moon:", "&#x1f314;"},
+ {":wc:", ":water closet:", "&#x1f6be;"},
+ {":weary:", ":weary face:", "&#x1f629;"},
+ {":wedding:", ":wedding:", "&#x1f492;"},
+ {":weight_lifting_man:", ":person lifting weights:", "&#x1f3cb;"},
+ {":weight_lifting_woman:", ":woman lifting weights:", "&#x1f3cb;&#xfe0f;&#x200d;&#x2640;&#xfe0f;"},
+ {":western_sahara:", ":flag western sahara:", "&#x1f1ea;&#x1f1ed;"},
+ {":whale:", ":spouting whale:", "&#x1f433;"},
+ {":whale2:", ":whale:", "&#x1f40b;"},
+ {":wheel_of_dharma:", ":wheel of dharma:", "&#x2638;"},
+ {":wheelchair:", ":wheelchair symbol:", "&#x267f;"},
+ {":white_check_mark:", ":white heavy check mark:", "&#x2705;"},
+ {":white_circle:", ":white circle:", "&#x26aa;"},
+ {":white_flag:", ":white flag:", "&#x1f3f3;"},
+ {":white_flower:", ":white flower:", "&#x1f4ae;"},
+ {":white_large_square:", ":white large square:", "&#x2b1c;"},
+ {":white_medium_small_square:", ":white medium-small square:", "&#x25fd;"},
+ {":white_medium_square:", ":white medium square:", "&#x25fb;"},
+ {":white_small_square:", ":white small square:", "&#x25ab;"},
+ {":white_square_button:", ":white square button:", "&#x1f533;"},
+ {":wilted_flower:", ":wilted flower:", "&#x1f940;"},
+ {":wind_chime:", ":wind chime:", "&#x1f390;"},
+ {":wind_face:", ":wind face:", "&#x1f32c;"},
+ {":wine_glass:", ":wine glass:", "&#x1f377;"},
+ {":wink:", ":winking face:", "&#x1f609;"},
+ {":wolf:", ":wolf face:", "&#x1f43a;"},
+ {":woman:", ":woman:", "&#x1f469;"},
+ {":woman_artist:", ":woman artist:", "&#x1f469;&#x200d;&#x1f3a8;"},
+ {":woman_astronaut:", ":woman astronaut:", "&#x1f469;&#x200d;&#x1f680;"},
+ {":woman_cartwheeling:", ":woman cartwheeling:", "&#x1f938;&#x200d;&#x2640;&#xfe0f;"},
+ {":woman_cook:", ":woman cook:", "&#x1f469;&#x200d;&#x1f373;"},
+ {":woman_facepalming:", ":woman facepalming:", "&#x1f926;&#x200d;&#x2640;&#xfe0f;"},
+ {":woman_factory_worker:", ":woman factory worker:", "&#x1f469;&#x200d;&#x1f3ed;"},
+ {":woman_farmer:", ":woman farmer:", "&#x1f469;&#x200d;&#x1f33e;"},
+ {":woman_firefighter:", ":woman firefighter:", "&#x1f469;&#x200d;&#x1f692;"},
+ {":woman_health_worker:", ":woman health worker:", "&#x1f469;&#x200d;&#x2695;&#xfe0f;"},
+ {":woman_judge:", ":woman judge:", "&#x1f469;&#x200d;&#x2696;&#xfe0f;"},
+ {":woman_juggling:", ":woman juggling:", "&#x1f939;&#x200d;&#x2640;&#xfe0f;"},
+ {":woman_mechanic:", ":woman mechanic:", "&#x1f469;&#x200d;&#x1f527;"},
+ {":woman_office_worker:", ":woman office worker:", "&#x1f469;&#x200d;&#x1f4bc;"},
+ {":woman_pilot:", ":woman pilot:", "&#x1f469;&#x200d;&#x2708;&#xfe0f;"},
+ {":woman_playing_handball:", ":woman playing handball:", "&#x1f93e;&#x200d;&#x2640;&#xfe0f;"},
+ {":woman_playing_water_polo:", ":woman playing water polo:", "&#x1f93d;&#x200d;&#x2640;&#xfe0f;"},
+ {":woman_scientist:", ":woman scientist:", "&#x1f469;&#x200d;&#x1f52c;"},
+ {":woman_shrugging:", ":woman shrugging:", "&#x1f937;&#x200d;&#x2640;&#xfe0f;"},
+ {":woman_singer:", ":woman singer:", "&#x1f469;&#x200d;&#x1f3a4;"},
+ {":woman_student:", ":woman student:", "&#x1f469;&#x200d;&#x1f393;"},
+ {":woman_teacher:", ":woman teacher:", "&#x1f469;&#x200d;&#x1f3eb;"},
+ {":woman_technologist:", ":woman technologist:", "&#x1f469;&#x200d;&#x1f4bb;"},
+ {":woman_with_turban:", ":woman wearing turban:", "&#x1f473;&#x200d;&#x2640;&#xfe0f;"},
+ {":womans_clothes:", ":woman's clothes:", "&#x1f45a;"},
+ {":womans_hat:", ":woman's hat:", "&#x1f452;"},
+ {":women_wrestling:", ":women wrestling:", "&#x1f93c;&#x200d;&#x2640;&#xfe0f;"},
+ {":womens:", ":women's room:", "&#x1f6ba;"},
+ {":world_map:", ":world map:", "&#x1f5fa;"},
+ {":worried:", ":worried face:", "&#x1f61f;"},
+ {":wrench:", ":wrench:", "&#x1f527;"},
+ {":writing_hand:", ":writing hand:", "&#x270d;"},
+ {":x:", ":cross mark:", "&#x274c;"},
+ {":yellow_heart:", ":yellow heart:", "&#x1f49b;"},
+ {":yemen:", ":flag yemen:", "&#x1f1fe;&#x1f1ea;"},
+ {":yen:", ":yen banknote:", "&#x1f4b4;"},
+ {":yin_yang:", ":yin yang:", "&#x262f;"},
+ {":yum:", ":face savoring food:", "&#x1f60b;"},
+ {":zambia:", ":flag zambia:", "&#x1f1ff;&#x1f1f2;"},
+ {":zap:", ":high voltage:", "&#x26a1;"},
+ {":zero:", ":keycap 0:", "&#x0030;&#xfe0f;&#x20e3;"},
+ {":zimbabwe:", ":flag zimbabwe:", "&#x1f1ff;&#x1f1fc;"},
+ {":zipper_mouth_face:", ":zipper-mouth face:", "&#x1f910;"},
+ {":zzz:", ":zzz:", "&#x1f4a4;"},
+ {"", ":smiling face with 3 hearts:", "&#x1f970;"},
+ {"", ":star-struck:", "&#x1f929;"},
+ {"", ":zany face:", "&#x1f92a;"},
+ {"", ":face with hand over mouth:", "&#x1f92d;"},
+ {"", ":shushing face:", "&#x1f92b;"},
+ {"", ":face with raised eyebrow:", "&#x1f928;"},
+ {"", ":face vomiting:", "&#x1f92e;"},
+ {"", ":hot face:", "&#x1f975;"},
+ {"", ":cold face:", "&#x1f976;"},
+ {"", ":woozy face:", "&#x1f974;"},
+ {"", ":exploding head:", "&#x1f92f;"},
+ {"", ":partying face:", "&#x1f973;"},
+ {"", ":face with monocle:", "&#x1f9d0;"},
+ {"", ":pleading face:", "&#x1f97a;"},
+ {"", ":face with symbols on mouth:", "&#x1f92c;"},
+ {"", ":orange heart:", "&#x1f9e1;"},
+ {"", ":left speech bubble:", "&#x1f5e8;"},
+ {"", ":love-you gesture:", "&#x1f91f;"},
+ {"", ":palms up together:", "&#x1f932;"},
+ {"", ":leg:", "&#x1f9b5;"},
+ {"", ":foot:", "&#x1f9b6;"},
+ {"", ":brain:", "&#x1f9e0;"},
+ {"", ":tooth:", "&#x1f9b7;"},
+ {"", ":bone:", "&#x1f9b4;"},
+ {"", ":eye:", "&#x1f441;"},
+ {"", ":child:", "&#x1f9d2;"},
+ {"", ":person:", "&#x1f9d1;"},
+ {"", ":man blond hair:", "&#x1f471;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man red hair:", "&#x1f468;&#x200d;&#x1f9b0;"},
+ {"", ":man curly hair:", "&#x1f468;&#x200d;&#x1f9b1;"},
+ {"", ":man white hair:", "&#x1f468;&#x200d;&#x1f9b3;"},
+ {"", ":man bald:", "&#x1f468;&#x200d;&#x1f9b2;"},
+ {"", ":man beard:", "&#x1f9d4;"},
+ {"", ":woman red hair:", "&#x1f469;&#x200d;&#x1f9b0;"},
+ {"", ":woman curly hair:", "&#x1f469;&#x200d;&#x1f9b1;"},
+ {"", ":woman white hair:", "&#x1f469;&#x200d;&#x1f9b3;"},
+ {"", ":woman bald:", "&#x1f469;&#x200d;&#x1f9b2;"},
+ {"", ":older person:", "&#x1f9d3;"},
+ {"", ":woman frowning:", "&#x1f64d;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman pouting:", "&#x1f64e;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman gesturing no:", "&#x1f645;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman gesturing ok:", "&#x1f646;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman tipping hand:", "&#x1f481;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman raising hand:", "&#x1f64b;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":man bowing:", "&#x1f647;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":person facepalming:", "&#x1f926;"},
+ {"", ":person shrugging:", "&#x1f937;"},
+ {"", ":man police officer:", "&#x1f46e;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man detective:", "&#x1f575;&#xfe0f;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man guard:", "&#x1f482;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man construction worker:", "&#x1f477;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man wearing turban:", "&#x1f473;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman with headscarf:", "&#x1f9d5;"},
+ {"", ":breast-feeding:", "&#x1f931;"},
+ {"", ":superhero:", "&#x1f9b8;"},
+ {"", ":man superhero:", "&#x1f9b8;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman superhero:", "&#x1f9b8;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":supervillain:", "&#x1f9b9;"},
+ {"", ":man supervillain:", "&#x1f9b9;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman supervillain:", "&#x1f9b9;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":mage:", "&#x1f9d9;"},
+ {"", ":man mage:", "&#x1f9d9;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman mage:", "&#x1f9d9;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":fairy:", "&#x1f9da;"},
+ {"", ":man fairy:", "&#x1f9da;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman fairy:", "&#x1f9da;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":vampire:", "&#x1f9db;"},
+ {"", ":man vampire:", "&#x1f9db;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman vampire:", "&#x1f9db;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":merperson:", "&#x1f9dc;"},
+ {"", ":merman:", "&#x1f9dc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":mermaid:", "&#x1f9dc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":elf:", "&#x1f9dd;"},
+ {"", ":man elf:", "&#x1f9dd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman elf:", "&#x1f9dd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":genie:", "&#x1f9de;"},
+ {"", ":man genie:", "&#x1f9de;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman genie:", "&#x1f9de;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":zombie:", "&#x1f9df;"},
+ {"", ":man zombie:", "&#x1f9df;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman zombie:", "&#x1f9df;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman getting massage:", "&#x1f486;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman getting haircut:", "&#x1f487;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":man walking:", "&#x1f6b6;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man running:", "&#x1f3c3;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":women with bunny ears:", "&#x1f46f;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person in steamy room:", "&#x1f9d6;"},
+ {"", ":man in steamy room:", "&#x1f9d6;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman in steamy room:", "&#x1f9d6;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person climbing:", "&#x1f9d7;"},
+ {"", ":man climbing:", "&#x1f9d7;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman climbing:", "&#x1f9d7;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":man golfing:", "&#x1f3cc;&#xfe0f;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man surfing:", "&#x1f3c4;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man rowing boat:", "&#x1f6a3;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man swimming:", "&#x1f3ca;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man bouncing ball:", "&#x26f9;&#xfe0f;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man lifting weights:", "&#x1f3cb;&#xfe0f;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man biking:", "&#x1f6b4;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man mountain biking:", "&#x1f6b5;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":person cartwheeling:", "&#x1f938;"},
+ {"", ":people wrestling:", "&#x1f93c;"},
+ {"", ":person playing water polo:", "&#x1f93d;"},
+ {"", ":person playing handball:", "&#x1f93e;"},
+ {"", ":person juggling:", "&#x1f939;"},
+ {"", ":person in lotus position:", "&#x1f9d8;"},
+ {"", ":man in lotus position:", "&#x1f9d8;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman in lotus position:", "&#x1f9d8;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":kiss woman, man:", "&#x1f469;&#x200d;&#x2764;&#xfe0f;&#x200d;&#x1f48b;&#x200d;&#x1f468;"},
+ {"", ":couple with heart woman, man:", "&#x1f469;&#x200d;&#x2764;&#xfe0f;&#x200d;&#x1f468;"},
+ {"", ":couple with heart man, man:", "&#x1f468;&#x200d;&#x2764;&#xfe0f;&#x200d;&#x1f468;"},
+ {"", ":couple with heart woman, woman:", "&#x1f469;&#x200d;&#x2764;&#xfe0f;&#x200d;&#x1f469;"},
+ {"", ":family man, boy:", "&#x1f468;&#x200d;&#x1f466;"},
+ {"", ":family man, boy, boy:", "&#x1f468;&#x200d;&#x1f466;&#x200d;&#x1f466;"},
+ {"", ":family man, girl:", "&#x1f468;&#x200d;&#x1f467;"},
+ {"", ":family man, girl, boy:", "&#x1f468;&#x200d;&#x1f467;&#x200d;&#x1f466;"},
+ {"", ":family man, girl, girl:", "&#x1f468;&#x200d;&#x1f467;&#x200d;&#x1f467;"},
+ {"", ":family woman, boy:", "&#x1f469;&#x200d;&#x1f466;"},
+ {"", ":family woman, boy, boy:", "&#x1f469;&#x200d;&#x1f466;&#x200d;&#x1f466;"},
+ {"", ":family woman, girl:", "&#x1f469;&#x200d;&#x1f467;"},
+ {"", ":family woman, girl, boy:", "&#x1f469;&#x200d;&#x1f467;&#x200d;&#x1f466;"},
+ {"", ":family woman, girl, girl:", "&#x1f469;&#x200d;&#x1f467;&#x200d;&#x1f467;"},
+ {"", ":red hair:", "&#x1f9b0;"},
+ {"", ":curly hair:", "&#x1f9b1;"},
+ {"", ":white hair:", "&#x1f9b3;"},
+ {"", ":bald:", "&#x1f9b2;"},
+ {"", ":female sign:", "&#x2640;"},
+ {"", ":male sign:", "&#x2642;"},
+ {"", ":raccoon:", "&#x1f99d;"},
+ {"", ":zebra:", "&#x1f993;"},
+ {"", ":llama:", "&#x1f999;"},
+ {"", ":giraffe:", "&#x1f992;"},
+ {"", ":hippopotamus:", "&#x1f99b;"},
+ {"", ":hedgehog:", "&#x1f994;"},
+ {"", ":kangaroo:", "&#x1f998;"},
+ {"", ":badger:", "&#x1f9a1;"},
+ {"", ":swan:", "&#x1f9a2;"},
+ {"", ":peacock:", "&#x1f99a;"},
+ {"", ":parrot:", "&#x1f99c;"},
+ {"", ":sauropod:", "&#x1f995;"},
+ {"", ":t-rex:", "&#x1f996;"},
+ {"", ":cricket:", "&#x1f997;"},
+ {"", ":mosquito:", "&#x1f99f;"},
+ {"", ":microbe:", "&#x1f9a0;"},
+ {"", ":mango:", "&#x1f96d;"},
+ {"", ":coconut:", "&#x1f965;"},
+ {"", ":leafy green:", "&#x1f96c;"},
+ {"", ":broccoli:", "&#x1f966;"},
+ {"", ":pretzel:", "&#x1f968;"},
+ {"", ":bagel:", "&#x1f96f;"},
+ {"", ":cut of meat:", "&#x1f969;"},
+ {"", ":sandwich:", "&#x1f96a;"},
+ {"", ":bowl with spoon:", "&#x1f963;"},
+ {"", ":salt:", "&#x1f9c2;"},
+ {"", ":canned food:", "&#x1f96b;"},
+ {"", ":moon cake:", "&#x1f96e;"},
+ {"", ":dumpling:", "&#x1f95f;"},
+ {"", ":fortune cookie:", "&#x1f960;"},
+ {"", ":takeout box:", "&#x1f961;"},
+ {"", ":lobster:", "&#x1f99e;"},
+ {"", ":cupcake:", "&#x1f9c1;"},
+ {"", ":pie:", "&#x1f967;"},
+ {"", ":cup with straw:", "&#x1f964;"},
+ {"", ":chopsticks:", "&#x1f962;"},
+ {"", ":compass:", "&#x1f9ed;"},
+ {"", ":brick:", "&#x1f9f1;"},
+ {"", ":skateboard:", "&#x1f6f9;"},
+ {"", ":flying saucer:", "&#x1f6f8;"},
+ {"", ":luggage:", "&#x1f9f3;"},
+ {"", ":firecracker:", "&#x1f9e8;"},
+ {"", ":red envelope:", "&#x1f9e7;"},
+ {"", ":softball:", "&#x1f94e;"},
+ {"", ":flying disc:", "&#x1f94f;"},
+ {"", ":lacrosse:", "&#x1f94d;"},
+ {"", ":sled:", "&#x1f6f7;"},
+ {"", ":curling stone:", "&#x1f94c;"},
+ {"", ":nazar amulet:", "&#x1f9ff;"},
+ {"", ":jigsaw:", "&#x1f9e9;"},
+ {"", ":teddy bear:", "&#x1f9f8;"},
+ {"", ":chess pawn:", "&#x265f;"},
+ {"", ":thread:", "&#x1f9f5;"},
+ {"", ":yarn:", "&#x1f9f6;"},
+ {"", ":goggles:", "&#x1f97d;"},
+ {"", ":lab coat:", "&#x1f97c;"},
+ {"", ":scarf:", "&#x1f9e3;"},
+ {"", ":gloves:", "&#x1f9e4;"},
+ {"", ":coat:", "&#x1f9e5;"},
+ {"", ":socks:", "&#x1f9e6;"},
+ {"", ":hiking boot:", "&#x1f97e;"},
+ {"", ":flat shoe:", "&#x1f97f;"},
+ {"", ":billed cap:", "&#x1f9e2;"},
+ {"", ":abacus:", "&#x1f9ee;"},
+ {"", ":receipt:", "&#x1f9fe;"},
+ {"", ":toolbox:", "&#x1f9f0;"},
+ {"", ":magnet:", "&#x1f9f2;"},
+ {"", ":test tube:", "&#x1f9ea;"},
+ {"", ":petri dish:", "&#x1f9eb;"},
+ {"", ":dna:", "&#x1f9ec;"},
+ {"", ":lotion bottle:", "&#x1f9f4;"},
+ {"", ":safety pin:", "&#x1f9f7;"},
+ {"", ":broom:", "&#x1f9f9;"},
+ {"", ":basket:", "&#x1f9fa;"},
+ {"", ":roll of paper:", "&#x1f9fb;"},
+ {"", ":soap:", "&#x1f9fc;"},
+ {"", ":sponge:", "&#x1f9fd;"},
+ {"", ":fire extinguisher:", "&#x1f9ef;"},
+ {"", ":eject button:", "&#x23cf;"},
+ {"", ":medical symbol:", "&#x2695;"},
+ {"", ":infinity:", "&#x267e;"},
+ {"", ":pirate flag:", "&#x1f3f4;&#x200d;&#x2620;&#xfe0f;"},
+ {"", ":flag ascension island:", "&#x1f1e6;&#x1f1e8;"},
+ {"", ":flag bouvet island:", "&#x1f1e7;&#x1f1fb;"},
+ {"", ":flag clipperton island:", "&#x1f1e8;&#x1f1f5;"},
+ {"", ":flag diego garcia:", "&#x1f1e9;&#x1f1ec;"},
+ {"", ":flag ceuta & melilla:", "&#x1f1ea;&#x1f1e6;"},
+ {"", ":flag heard & mcdonald islands:", "&#x1f1ed;&#x1f1f2;"},
+ {"", ":flag st. martin:", "&#x1f1f2;&#x1f1eb;"},
+ {"", ":flag svalbard & jan mayen:", "&#x1f1f8;&#x1f1ef;"},
+ {"", ":flag tristan da cunha:", "&#x1f1f9;&#x1f1e6;"},
+ {"", ":flag u.s. outlying islands:", "&#x1f1fa;&#x1f1f2;"},
+ {"", ":flag united nations:", "&#x1f1fa;&#x1f1f3;"},
+ {"", ":flag england:", "&#x1f3f4;&#xe0067;&#xe0062;&#xe0065;&#xe006e;&#xe0067;&#xe007f;"},
+ {"", ":flag scotland:", "&#x1f3f4;&#xe0067;&#xe0062;&#xe0073;&#xe0063;&#xe0074;&#xe007f;"},
+ {"", ":flag wales:", "&#x1f3f4;&#xe0067;&#xe0062;&#xe0077;&#xe006c;&#xe0073;&#xe007f;"},
+ {"", ":waving hand light skin tone:", "&#x1f44b;&#x1f3fb;"},
+ {"", ":waving hand medium-light skin tone:", "&#x1f44b;&#x1f3fc;"},
+ {"", ":waving hand medium skin tone:", "&#x1f44b;&#x1f3fd;"},
+ {"", ":waving hand medium-dark skin tone:", "&#x1f44b;&#x1f3fe;"},
+ {"", ":waving hand dark skin tone:", "&#x1f44b;&#x1f3ff;"},
+ {"", ":raised back of hand light skin tone:", "&#x1f91a;&#x1f3fb;"},
+ {"", ":raised back of hand medium-light skin tone:", "&#x1f91a;&#x1f3fc;"},
+ {"", ":raised back of hand medium skin tone:", "&#x1f91a;&#x1f3fd;"},
+ {"", ":raised back of hand medium-dark skin tone:", "&#x1f91a;&#x1f3fe;"},
+ {"", ":raised back of hand dark skin tone:", "&#x1f91a;&#x1f3ff;"},
+ {"", ":hand with fingers splayed light skin tone:", "&#x1f590;&#x1f3fb;"},
+ {"", ":hand with fingers splayed medium-light skin tone:", "&#x1f590;&#x1f3fc;"},
+ {"", ":hand with fingers splayed medium skin tone:", "&#x1f590;&#x1f3fd;"},
+ {"", ":hand with fingers splayed medium-dark skin tone:", "&#x1f590;&#x1f3fe;"},
+ {"", ":hand with fingers splayed dark skin tone:", "&#x1f590;&#x1f3ff;"},
+ {"", ":raised hand light skin tone:", "&#x270b;&#x1f3fb;"},
+ {"", ":raised hand medium-light skin tone:", "&#x270b;&#x1f3fc;"},
+ {"", ":raised hand medium skin tone:", "&#x270b;&#x1f3fd;"},
+ {"", ":raised hand medium-dark skin tone:", "&#x270b;&#x1f3fe;"},
+ {"", ":raised hand dark skin tone:", "&#x270b;&#x1f3ff;"},
+ {"", ":vulcan salute light skin tone:", "&#x1f596;&#x1f3fb;"},
+ {"", ":vulcan salute medium-light skin tone:", "&#x1f596;&#x1f3fc;"},
+ {"", ":vulcan salute medium skin tone:", "&#x1f596;&#x1f3fd;"},
+ {"", ":vulcan salute medium-dark skin tone:", "&#x1f596;&#x1f3fe;"},
+ {"", ":vulcan salute dark skin tone:", "&#x1f596;&#x1f3ff;"},
+ {"", ":ok hand light skin tone:", "&#x1f44c;&#x1f3fb;"},
+ {"", ":ok hand medium-light skin tone:", "&#x1f44c;&#x1f3fc;"},
+ {"", ":ok hand medium skin tone:", "&#x1f44c;&#x1f3fd;"},
+ {"", ":ok hand medium-dark skin tone:", "&#x1f44c;&#x1f3fe;"},
+ {"", ":ok hand dark skin tone:", "&#x1f44c;&#x1f3ff;"},
+ {"", ":victory hand light skin tone:", "&#x270c;&#x1f3fb;"},
+ {"", ":victory hand medium-light skin tone:", "&#x270c;&#x1f3fc;"},
+ {"", ":victory hand medium skin tone:", "&#x270c;&#x1f3fd;"},
+ {"", ":victory hand medium-dark skin tone:", "&#x270c;&#x1f3fe;"},
+ {"", ":victory hand dark skin tone:", "&#x270c;&#x1f3ff;"},
+ {"", ":crossed fingers light skin tone:", "&#x1f91e;&#x1f3fb;"},
+ {"", ":crossed fingers medium-light skin tone:", "&#x1f91e;&#x1f3fc;"},
+ {"", ":crossed fingers medium skin tone:", "&#x1f91e;&#x1f3fd;"},
+ {"", ":crossed fingers medium-dark skin tone:", "&#x1f91e;&#x1f3fe;"},
+ {"", ":crossed fingers dark skin tone:", "&#x1f91e;&#x1f3ff;"},
+ {"", ":love-you gesture light skin tone:", "&#x1f91f;&#x1f3fb;"},
+ {"", ":love-you gesture medium-light skin tone:", "&#x1f91f;&#x1f3fc;"},
+ {"", ":love-you gesture medium skin tone:", "&#x1f91f;&#x1f3fd;"},
+ {"", ":love-you gesture medium-dark skin tone:", "&#x1f91f;&#x1f3fe;"},
+ {"", ":love-you gesture dark skin tone:", "&#x1f91f;&#x1f3ff;"},
+ {"", ":sign of the horns light skin tone:", "&#x1f918;&#x1f3fb;"},
+ {"", ":sign of the horns medium-light skin tone:", "&#x1f918;&#x1f3fc;"},
+ {"", ":sign of the horns medium skin tone:", "&#x1f918;&#x1f3fd;"},
+ {"", ":sign of the horns medium-dark skin tone:", "&#x1f918;&#x1f3fe;"},
+ {"", ":sign of the horns dark skin tone:", "&#x1f918;&#x1f3ff;"},
+ {"", ":call me hand light skin tone:", "&#x1f919;&#x1f3fb;"},
+ {"", ":call me hand medium-light skin tone:", "&#x1f919;&#x1f3fc;"},
+ {"", ":call me hand medium skin tone:", "&#x1f919;&#x1f3fd;"},
+ {"", ":call me hand medium-dark skin tone:", "&#x1f919;&#x1f3fe;"},
+ {"", ":call me hand dark skin tone:", "&#x1f919;&#x1f3ff;"},
+ {"", ":backhand index pointing left light skin tone:", "&#x1f448;&#x1f3fb;"},
+ {"", ":backhand index pointing left medium-light skin tone:", "&#x1f448;&#x1f3fc;"},
+ {"", ":backhand index pointing left medium skin tone:", "&#x1f448;&#x1f3fd;"},
+ {"", ":backhand index pointing left medium-dark skin tone:", "&#x1f448;&#x1f3fe;"},
+ {"", ":backhand index pointing left dark skin tone:", "&#x1f448;&#x1f3ff;"},
+ {"", ":backhand index pointing right light skin tone:", "&#x1f449;&#x1f3fb;"},
+ {"", ":backhand index pointing right medium-light skin tone:", "&#x1f449;&#x1f3fc;"},
+ {"", ":backhand index pointing right medium skin tone:", "&#x1f449;&#x1f3fd;"},
+ {"", ":backhand index pointing right medium-dark skin tone:", "&#x1f449;&#x1f3fe;"},
+ {"", ":backhand index pointing right dark skin tone:", "&#x1f449;&#x1f3ff;"},
+ {"", ":backhand index pointing up light skin tone:", "&#x1f446;&#x1f3fb;"},
+ {"", ":backhand index pointing up medium-light skin tone:", "&#x1f446;&#x1f3fc;"},
+ {"", ":backhand index pointing up medium skin tone:", "&#x1f446;&#x1f3fd;"},
+ {"", ":backhand index pointing up medium-dark skin tone:", "&#x1f446;&#x1f3fe;"},
+ {"", ":backhand index pointing up dark skin tone:", "&#x1f446;&#x1f3ff;"},
+ {"", ":middle finger light skin tone:", "&#x1f595;&#x1f3fb;"},
+ {"", ":middle finger medium-light skin tone:", "&#x1f595;&#x1f3fc;"},
+ {"", ":middle finger medium skin tone:", "&#x1f595;&#x1f3fd;"},
+ {"", ":middle finger medium-dark skin tone:", "&#x1f595;&#x1f3fe;"},
+ {"", ":middle finger dark skin tone:", "&#x1f595;&#x1f3ff;"},
+ {"", ":backhand index pointing down light skin tone:", "&#x1f447;&#x1f3fb;"},
+ {"", ":backhand index pointing down medium-light skin tone:", "&#x1f447;&#x1f3fc;"},
+ {"", ":backhand index pointing down medium skin tone:", "&#x1f447;&#x1f3fd;"},
+ {"", ":backhand index pointing down medium-dark skin tone:", "&#x1f447;&#x1f3fe;"},
+ {"", ":backhand index pointing down dark skin tone:", "&#x1f447;&#x1f3ff;"},
+ {"", ":index pointing up light skin tone:", "&#x261d;&#x1f3fb;"},
+ {"", ":index pointing up medium-light skin tone:", "&#x261d;&#x1f3fc;"},
+ {"", ":index pointing up medium skin tone:", "&#x261d;&#x1f3fd;"},
+ {"", ":index pointing up medium-dark skin tone:", "&#x261d;&#x1f3fe;"},
+ {"", ":index pointing up dark skin tone:", "&#x261d;&#x1f3ff;"},
+ {"", ":thumbs up light skin tone:", "&#x1f44d;&#x1f3fb;"},
+ {"", ":thumbs up medium-light skin tone:", "&#x1f44d;&#x1f3fc;"},
+ {"", ":thumbs up medium skin tone:", "&#x1f44d;&#x1f3fd;"},
+ {"", ":thumbs up medium-dark skin tone:", "&#x1f44d;&#x1f3fe;"},
+ {"", ":thumbs up dark skin tone:", "&#x1f44d;&#x1f3ff;"},
+ {"", ":thumbs down light skin tone:", "&#x1f44e;&#x1f3fb;"},
+ {"", ":thumbs down medium-light skin tone:", "&#x1f44e;&#x1f3fc;"},
+ {"", ":thumbs down medium skin tone:", "&#x1f44e;&#x1f3fd;"},
+ {"", ":thumbs down medium-dark skin tone:", "&#x1f44e;&#x1f3fe;"},
+ {"", ":thumbs down dark skin tone:", "&#x1f44e;&#x1f3ff;"},
+ {"", ":raised fist light skin tone:", "&#x270a;&#x1f3fb;"},
+ {"", ":raised fist medium-light skin tone:", "&#x270a;&#x1f3fc;"},
+ {"", ":raised fist medium skin tone:", "&#x270a;&#x1f3fd;"},
+ {"", ":raised fist medium-dark skin tone:", "&#x270a;&#x1f3fe;"},
+ {"", ":raised fist dark skin tone:", "&#x270a;&#x1f3ff;"},
+ {"", ":oncoming fist light skin tone:", "&#x1f44a;&#x1f3fb;"},
+ {"", ":oncoming fist medium-light skin tone:", "&#x1f44a;&#x1f3fc;"},
+ {"", ":oncoming fist medium skin tone:", "&#x1f44a;&#x1f3fd;"},
+ {"", ":oncoming fist medium-dark skin tone:", "&#x1f44a;&#x1f3fe;"},
+ {"", ":oncoming fist dark skin tone:", "&#x1f44a;&#x1f3ff;"},
+ {"", ":left-facing fist light skin tone:", "&#x1f91b;&#x1f3fb;"},
+ {"", ":left-facing fist medium-light skin tone:", "&#x1f91b;&#x1f3fc;"},
+ {"", ":left-facing fist medium skin tone:", "&#x1f91b;&#x1f3fd;"},
+ {"", ":left-facing fist medium-dark skin tone:", "&#x1f91b;&#x1f3fe;"},
+ {"", ":left-facing fist dark skin tone:", "&#x1f91b;&#x1f3ff;"},
+ {"", ":right-facing fist light skin tone:", "&#x1f91c;&#x1f3fb;"},
+ {"", ":right-facing fist medium-light skin tone:", "&#x1f91c;&#x1f3fc;"},
+ {"", ":right-facing fist medium skin tone:", "&#x1f91c;&#x1f3fd;"},
+ {"", ":right-facing fist medium-dark skin tone:", "&#x1f91c;&#x1f3fe;"},
+ {"", ":right-facing fist dark skin tone:", "&#x1f91c;&#x1f3ff;"},
+ {"", ":clapping hands light skin tone:", "&#x1f44f;&#x1f3fb;"},
+ {"", ":clapping hands medium-light skin tone:", "&#x1f44f;&#x1f3fc;"},
+ {"", ":clapping hands medium skin tone:", "&#x1f44f;&#x1f3fd;"},
+ {"", ":clapping hands medium-dark skin tone:", "&#x1f44f;&#x1f3fe;"},
+ {"", ":clapping hands dark skin tone:", "&#x1f44f;&#x1f3ff;"},
+ {"", ":raising hands light skin tone:", "&#x1f64c;&#x1f3fb;"},
+ {"", ":raising hands medium-light skin tone:", "&#x1f64c;&#x1f3fc;"},
+ {"", ":raising hands medium skin tone:", "&#x1f64c;&#x1f3fd;"},
+ {"", ":raising hands medium-dark skin tone:", "&#x1f64c;&#x1f3fe;"},
+ {"", ":raising hands dark skin tone:", "&#x1f64c;&#x1f3ff;"},
+ {"", ":open hands light skin tone:", "&#x1f450;&#x1f3fb;"},
+ {"", ":open hands medium-light skin tone:", "&#x1f450;&#x1f3fc;"},
+ {"", ":open hands medium skin tone:", "&#x1f450;&#x1f3fd;"},
+ {"", ":open hands medium-dark skin tone:", "&#x1f450;&#x1f3fe;"},
+ {"", ":open hands dark skin tone:", "&#x1f450;&#x1f3ff;"},
+ {"", ":palms up together light skin tone:", "&#x1f932;&#x1f3fb;"},
+ {"", ":palms up together medium-light skin tone:", "&#x1f932;&#x1f3fc;"},
+ {"", ":palms up together medium skin tone:", "&#x1f932;&#x1f3fd;"},
+ {"", ":palms up together medium-dark skin tone:", "&#x1f932;&#x1f3fe;"},
+ {"", ":palms up together dark skin tone:", "&#x1f932;&#x1f3ff;"},
+ {"", ":folded hands light skin tone:", "&#x1f64f;&#x1f3fb;"},
+ {"", ":folded hands medium-light skin tone:", "&#x1f64f;&#x1f3fc;"},
+ {"", ":folded hands medium skin tone:", "&#x1f64f;&#x1f3fd;"},
+ {"", ":folded hands medium-dark skin tone:", "&#x1f64f;&#x1f3fe;"},
+ {"", ":folded hands dark skin tone:", "&#x1f64f;&#x1f3ff;"},
+ {"", ":writing hand light skin tone:", "&#x270d;&#x1f3fb;"},
+ {"", ":writing hand medium-light skin tone:", "&#x270d;&#x1f3fc;"},
+ {"", ":writing hand medium skin tone:", "&#x270d;&#x1f3fd;"},
+ {"", ":writing hand medium-dark skin tone:", "&#x270d;&#x1f3fe;"},
+ {"", ":writing hand dark skin tone:", "&#x270d;&#x1f3ff;"},
+ {"", ":nail polish light skin tone:", "&#x1f485;&#x1f3fb;"},
+ {"", ":nail polish medium-light skin tone:", "&#x1f485;&#x1f3fc;"},
+ {"", ":nail polish medium skin tone:", "&#x1f485;&#x1f3fd;"},
+ {"", ":nail polish medium-dark skin tone:", "&#x1f485;&#x1f3fe;"},
+ {"", ":nail polish dark skin tone:", "&#x1f485;&#x1f3ff;"},
+ {"", ":selfie light skin tone:", "&#x1f933;&#x1f3fb;"},
+ {"", ":selfie medium-light skin tone:", "&#x1f933;&#x1f3fc;"},
+ {"", ":selfie medium skin tone:", "&#x1f933;&#x1f3fd;"},
+ {"", ":selfie medium-dark skin tone:", "&#x1f933;&#x1f3fe;"},
+ {"", ":selfie dark skin tone:", "&#x1f933;&#x1f3ff;"},
+ {"", ":flexed biceps light skin tone:", "&#x1f4aa;&#x1f3fb;"},
+ {"", ":flexed biceps medium-light skin tone:", "&#x1f4aa;&#x1f3fc;"},
+ {"", ":flexed biceps medium skin tone:", "&#x1f4aa;&#x1f3fd;"},
+ {"", ":flexed biceps medium-dark skin tone:", "&#x1f4aa;&#x1f3fe;"},
+ {"", ":flexed biceps dark skin tone:", "&#x1f4aa;&#x1f3ff;"},
+ {"", ":leg light skin tone:", "&#x1f9b5;&#x1f3fb;"},
+ {"", ":leg medium-light skin tone:", "&#x1f9b5;&#x1f3fc;"},
+ {"", ":leg medium skin tone:", "&#x1f9b5;&#x1f3fd;"},
+ {"", ":leg medium-dark skin tone:", "&#x1f9b5;&#x1f3fe;"},
+ {"", ":leg dark skin tone:", "&#x1f9b5;&#x1f3ff;"},
+ {"", ":foot light skin tone:", "&#x1f9b6;&#x1f3fb;"},
+ {"", ":foot medium-light skin tone:", "&#x1f9b6;&#x1f3fc;"},
+ {"", ":foot medium skin tone:", "&#x1f9b6;&#x1f3fd;"},
+ {"", ":foot medium-dark skin tone:", "&#x1f9b6;&#x1f3fe;"},
+ {"", ":foot dark skin tone:", "&#x1f9b6;&#x1f3ff;"},
+ {"", ":ear light skin tone:", "&#x1f442;&#x1f3fb;"},
+ {"", ":ear medium-light skin tone:", "&#x1f442;&#x1f3fc;"},
+ {"", ":ear medium skin tone:", "&#x1f442;&#x1f3fd;"},
+ {"", ":ear medium-dark skin tone:", "&#x1f442;&#x1f3fe;"},
+ {"", ":ear dark skin tone:", "&#x1f442;&#x1f3ff;"},
+ {"", ":nose light skin tone:", "&#x1f443;&#x1f3fb;"},
+ {"", ":nose medium-light skin tone:", "&#x1f443;&#x1f3fc;"},
+ {"", ":nose medium skin tone:", "&#x1f443;&#x1f3fd;"},
+ {"", ":nose medium-dark skin tone:", "&#x1f443;&#x1f3fe;"},
+ {"", ":nose dark skin tone:", "&#x1f443;&#x1f3ff;"},
+ {"", ":baby light skin tone:", "&#x1f476;&#x1f3fb;"},
+ {"", ":baby medium-light skin tone:", "&#x1f476;&#x1f3fc;"},
+ {"", ":baby medium skin tone:", "&#x1f476;&#x1f3fd;"},
+ {"", ":baby medium-dark skin tone:", "&#x1f476;&#x1f3fe;"},
+ {"", ":baby dark skin tone:", "&#x1f476;&#x1f3ff;"},
+ {"", ":child light skin tone:", "&#x1f9d2;&#x1f3fb;"},
+ {"", ":child medium-light skin tone:", "&#x1f9d2;&#x1f3fc;"},
+ {"", ":child medium skin tone:", "&#x1f9d2;&#x1f3fd;"},
+ {"", ":child medium-dark skin tone:", "&#x1f9d2;&#x1f3fe;"},
+ {"", ":child dark skin tone:", "&#x1f9d2;&#x1f3ff;"},
+ {"", ":boy light skin tone:", "&#x1f466;&#x1f3fb;"},
+ {"", ":boy medium-light skin tone:", "&#x1f466;&#x1f3fc;"},
+ {"", ":boy medium skin tone:", "&#x1f466;&#x1f3fd;"},
+ {"", ":boy medium-dark skin tone:", "&#x1f466;&#x1f3fe;"},
+ {"", ":boy dark skin tone:", "&#x1f466;&#x1f3ff;"},
+ {"", ":girl light skin tone:", "&#x1f467;&#x1f3fb;"},
+ {"", ":girl medium-light skin tone:", "&#x1f467;&#x1f3fc;"},
+ {"", ":girl medium skin tone:", "&#x1f467;&#x1f3fd;"},
+ {"", ":girl medium-dark skin tone:", "&#x1f467;&#x1f3fe;"},
+ {"", ":girl dark skin tone:", "&#x1f467;&#x1f3ff;"},
+ {"", ":person light skin tone:", "&#x1f9d1;&#x1f3fb;"},
+ {"", ":person medium-light skin tone:", "&#x1f9d1;&#x1f3fc;"},
+ {"", ":person medium skin tone:", "&#x1f9d1;&#x1f3fd;"},
+ {"", ":person medium-dark skin tone:", "&#x1f9d1;&#x1f3fe;"},
+ {"", ":person dark skin tone:", "&#x1f9d1;&#x1f3ff;"},
+ {"", ":person light skin tone, blond hair:", "&#x1f471;&#x1f3fb;"},
+ {"", ":person medium-light skin tone, blond hair:", "&#x1f471;&#x1f3fc;"},
+ {"", ":person medium skin tone, blond hair:", "&#x1f471;&#x1f3fd;"},
+ {"", ":person medium-dark skin tone, blond hair:", "&#x1f471;&#x1f3fe;"},
+ {"", ":person dark skin tone, blond hair:", "&#x1f471;&#x1f3ff;"},
+ {"", ":man light skin tone:", "&#x1f468;&#x1f3fb;"},
+ {"", ":man medium-light skin tone:", "&#x1f468;&#x1f3fc;"},
+ {"", ":man medium skin tone:", "&#x1f468;&#x1f3fd;"},
+ {"", ":man medium-dark skin tone:", "&#x1f468;&#x1f3fe;"},
+ {"", ":man dark skin tone:", "&#x1f468;&#x1f3ff;"},
+ {"", ":man light skin tone, blond hair:", "&#x1f471;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man medium-light skin tone, blond hair:", "&#x1f471;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man medium skin tone, blond hair:", "&#x1f471;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man medium-dark skin tone, blond hair:", "&#x1f471;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man dark skin tone, blond hair:", "&#x1f471;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man light skin tone, red hair:", "&#x1f468;&#x1f3fb;&#x200d;&#x1f9b0;"},
+ {"", ":man medium-light skin tone, red hair:", "&#x1f468;&#x1f3fc;&#x200d;&#x1f9b0;"},
+ {"", ":man medium skin tone, red hair:", "&#x1f468;&#x1f3fd;&#x200d;&#x1f9b0;"},
+ {"", ":man medium-dark skin tone, red hair:", "&#x1f468;&#x1f3fe;&#x200d;&#x1f9b0;"},
+ {"", ":man dark skin tone, red hair:", "&#x1f468;&#x1f3ff;&#x200d;&#x1f9b0;"},
+ {"", ":man light skin tone, curly hair:", "&#x1f468;&#x1f3fb;&#x200d;&#x1f9b1;"},
+ {"", ":man medium-light skin tone, curly hair:", "&#x1f468;&#x1f3fc;&#x200d;&#x1f9b1;"},
+ {"", ":man medium skin tone, curly hair:", "&#x1f468;&#x1f3fd;&#x200d;&#x1f9b1;"},
+ {"", ":man medium-dark skin tone, curly hair:", "&#x1f468;&#x1f3fe;&#x200d;&#x1f9b1;"},
+ {"", ":man dark skin tone, curly hair:", "&#x1f468;&#x1f3ff;&#x200d;&#x1f9b1;"},
+ {"", ":man light skin tone, white hair:", "&#x1f468;&#x1f3fb;&#x200d;&#x1f9b3;"},
+ {"", ":man medium-light skin tone, white hair:", "&#x1f468;&#x1f3fc;&#x200d;&#x1f9b3;"},
+ {"", ":man medium skin tone, white hair:", "&#x1f468;&#x1f3fd;&#x200d;&#x1f9b3;"},
+ {"", ":man medium-dark skin tone, white hair:", "&#x1f468;&#x1f3fe;&#x200d;&#x1f9b3;"},
+ {"", ":man dark skin tone, white hair:", "&#x1f468;&#x1f3ff;&#x200d;&#x1f9b3;"},
+ {"", ":man light skin tone, bald:", "&#x1f468;&#x1f3fb;&#x200d;&#x1f9b2;"},
+ {"", ":man medium-light skin tone, bald:", "&#x1f468;&#x1f3fc;&#x200d;&#x1f9b2;"},
+ {"", ":man medium skin tone, bald:", "&#x1f468;&#x1f3fd;&#x200d;&#x1f9b2;"},
+ {"", ":man medium-dark skin tone, bald:", "&#x1f468;&#x1f3fe;&#x200d;&#x1f9b2;"},
+ {"", ":man dark skin tone, bald:", "&#x1f468;&#x1f3ff;&#x200d;&#x1f9b2;"},
+ {"", ":man light skin tone, beard:", "&#x1f9d4;&#x1f3fb;"},
+ {"", ":man medium-light skin tone, beard:", "&#x1f9d4;&#x1f3fc;"},
+ {"", ":man medium skin tone, beard:", "&#x1f9d4;&#x1f3fd;"},
+ {"", ":man medium-dark skin tone, beard:", "&#x1f9d4;&#x1f3fe;"},
+ {"", ":man dark skin tone, beard:", "&#x1f9d4;&#x1f3ff;"},
+ {"", ":woman light skin tone:", "&#x1f469;&#x1f3fb;"},
+ {"", ":woman medium-light skin tone:", "&#x1f469;&#x1f3fc;"},
+ {"", ":woman medium skin tone:", "&#x1f469;&#x1f3fd;"},
+ {"", ":woman medium-dark skin tone:", "&#x1f469;&#x1f3fe;"},
+ {"", ":woman dark skin tone:", "&#x1f469;&#x1f3ff;"},
+ {"", ":woman light skin tone, blond hair:", "&#x1f471;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman medium-light skin tone, blond hair:", "&#x1f471;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman medium skin tone, blond hair:", "&#x1f471;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman medium-dark skin tone, blond hair:", "&#x1f471;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman dark skin tone, blond hair:", "&#x1f471;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman light skin tone, red hair:", "&#x1f469;&#x1f3fb;&#x200d;&#x1f9b0;"},
+ {"", ":woman medium-light skin tone, red hair:", "&#x1f469;&#x1f3fc;&#x200d;&#x1f9b0;"},
+ {"", ":woman medium skin tone, red hair:", "&#x1f469;&#x1f3fd;&#x200d;&#x1f9b0;"},
+ {"", ":woman medium-dark skin tone, red hair:", "&#x1f469;&#x1f3fe;&#x200d;&#x1f9b0;"},
+ {"", ":woman dark skin tone, red hair:", "&#x1f469;&#x1f3ff;&#x200d;&#x1f9b0;"},
+ {"", ":woman light skin tone, curly hair:", "&#x1f469;&#x1f3fb;&#x200d;&#x1f9b1;"},
+ {"", ":woman medium-light skin tone, curly hair:", "&#x1f469;&#x1f3fc;&#x200d;&#x1f9b1;"},
+ {"", ":woman medium skin tone, curly hair:", "&#x1f469;&#x1f3fd;&#x200d;&#x1f9b1;"},
+ {"", ":woman medium-dark skin tone, curly hair:", "&#x1f469;&#x1f3fe;&#x200d;&#x1f9b1;"},
+ {"", ":woman dark skin tone, curly hair:", "&#x1f469;&#x1f3ff;&#x200d;&#x1f9b1;"},
+ {"", ":woman light skin tone, white hair:", "&#x1f469;&#x1f3fb;&#x200d;&#x1f9b3;"},
+ {"", ":woman medium-light skin tone, white hair:", "&#x1f469;&#x1f3fc;&#x200d;&#x1f9b3;"},
+ {"", ":woman medium skin tone, white hair:", "&#x1f469;&#x1f3fd;&#x200d;&#x1f9b3;"},
+ {"", ":woman medium-dark skin tone, white hair:", "&#x1f469;&#x1f3fe;&#x200d;&#x1f9b3;"},
+ {"", ":woman dark skin tone, white hair:", "&#x1f469;&#x1f3ff;&#x200d;&#x1f9b3;"},
+ {"", ":woman light skin tone, bald:", "&#x1f469;&#x1f3fb;&#x200d;&#x1f9b2;"},
+ {"", ":woman medium-light skin tone, bald:", "&#x1f469;&#x1f3fc;&#x200d;&#x1f9b2;"},
+ {"", ":woman medium skin tone, bald:", "&#x1f469;&#x1f3fd;&#x200d;&#x1f9b2;"},
+ {"", ":woman medium-dark skin tone, bald:", "&#x1f469;&#x1f3fe;&#x200d;&#x1f9b2;"},
+ {"", ":woman dark skin tone, bald:", "&#x1f469;&#x1f3ff;&#x200d;&#x1f9b2;"},
+ {"", ":older person light skin tone:", "&#x1f9d3;&#x1f3fb;"},
+ {"", ":older person medium-light skin tone:", "&#x1f9d3;&#x1f3fc;"},
+ {"", ":older person medium skin tone:", "&#x1f9d3;&#x1f3fd;"},
+ {"", ":older person medium-dark skin tone:", "&#x1f9d3;&#x1f3fe;"},
+ {"", ":older person dark skin tone:", "&#x1f9d3;&#x1f3ff;"},
+ {"", ":old man light skin tone:", "&#x1f474;&#x1f3fb;"},
+ {"", ":old man medium-light skin tone:", "&#x1f474;&#x1f3fc;"},
+ {"", ":old man medium skin tone:", "&#x1f474;&#x1f3fd;"},
+ {"", ":old man medium-dark skin tone:", "&#x1f474;&#x1f3fe;"},
+ {"", ":old man dark skin tone:", "&#x1f474;&#x1f3ff;"},
+ {"", ":old woman light skin tone:", "&#x1f475;&#x1f3fb;"},
+ {"", ":old woman medium-light skin tone:", "&#x1f475;&#x1f3fc;"},
+ {"", ":old woman medium skin tone:", "&#x1f475;&#x1f3fd;"},
+ {"", ":old woman medium-dark skin tone:", "&#x1f475;&#x1f3fe;"},
+ {"", ":old woman dark skin tone:", "&#x1f475;&#x1f3ff;"},
+ {"", ":person frowning light skin tone:", "&#x1f64d;&#x1f3fb;"},
+ {"", ":person frowning medium-light skin tone:", "&#x1f64d;&#x1f3fc;"},
+ {"", ":person frowning medium skin tone:", "&#x1f64d;&#x1f3fd;"},
+ {"", ":person frowning medium-dark skin tone:", "&#x1f64d;&#x1f3fe;"},
+ {"", ":person frowning dark skin tone:", "&#x1f64d;&#x1f3ff;"},
+ {"", ":man frowning light skin tone:", "&#x1f64d;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man frowning medium-light skin tone:", "&#x1f64d;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man frowning medium skin tone:", "&#x1f64d;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man frowning medium-dark skin tone:", "&#x1f64d;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man frowning dark skin tone:", "&#x1f64d;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman frowning light skin tone:", "&#x1f64d;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman frowning medium-light skin tone:", "&#x1f64d;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman frowning medium skin tone:", "&#x1f64d;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman frowning medium-dark skin tone:", "&#x1f64d;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman frowning dark skin tone:", "&#x1f64d;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person pouting light skin tone:", "&#x1f64e;&#x1f3fb;"},
+ {"", ":person pouting medium-light skin tone:", "&#x1f64e;&#x1f3fc;"},
+ {"", ":person pouting medium skin tone:", "&#x1f64e;&#x1f3fd;"},
+ {"", ":person pouting medium-dark skin tone:", "&#x1f64e;&#x1f3fe;"},
+ {"", ":person pouting dark skin tone:", "&#x1f64e;&#x1f3ff;"},
+ {"", ":man pouting light skin tone:", "&#x1f64e;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man pouting medium-light skin tone:", "&#x1f64e;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man pouting medium skin tone:", "&#x1f64e;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man pouting medium-dark skin tone:", "&#x1f64e;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man pouting dark skin tone:", "&#x1f64e;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman pouting light skin tone:", "&#x1f64e;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman pouting medium-light skin tone:", "&#x1f64e;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman pouting medium skin tone:", "&#x1f64e;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman pouting medium-dark skin tone:", "&#x1f64e;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman pouting dark skin tone:", "&#x1f64e;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person gesturing no light skin tone:", "&#x1f645;&#x1f3fb;"},
+ {"", ":person gesturing no medium-light skin tone:", "&#x1f645;&#x1f3fc;"},
+ {"", ":person gesturing no medium skin tone:", "&#x1f645;&#x1f3fd;"},
+ {"", ":person gesturing no medium-dark skin tone:", "&#x1f645;&#x1f3fe;"},
+ {"", ":person gesturing no dark skin tone:", "&#x1f645;&#x1f3ff;"},
+ {"", ":man gesturing no light skin tone:", "&#x1f645;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man gesturing no medium-light skin tone:", "&#x1f645;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man gesturing no medium skin tone:", "&#x1f645;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man gesturing no medium-dark skin tone:", "&#x1f645;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man gesturing no dark skin tone:", "&#x1f645;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman gesturing no light skin tone:", "&#x1f645;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman gesturing no medium-light skin tone:", "&#x1f645;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman gesturing no medium skin tone:", "&#x1f645;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman gesturing no medium-dark skin tone:", "&#x1f645;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman gesturing no dark skin tone:", "&#x1f645;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person gesturing ok light skin tone:", "&#x1f646;&#x1f3fb;"},
+ {"", ":person gesturing ok medium-light skin tone:", "&#x1f646;&#x1f3fc;"},
+ {"", ":person gesturing ok medium skin tone:", "&#x1f646;&#x1f3fd;"},
+ {"", ":person gesturing ok medium-dark skin tone:", "&#x1f646;&#x1f3fe;"},
+ {"", ":person gesturing ok dark skin tone:", "&#x1f646;&#x1f3ff;"},
+ {"", ":man gesturing ok light skin tone:", "&#x1f646;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man gesturing ok medium-light skin tone:", "&#x1f646;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man gesturing ok medium skin tone:", "&#x1f646;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man gesturing ok medium-dark skin tone:", "&#x1f646;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man gesturing ok dark skin tone:", "&#x1f646;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman gesturing ok light skin tone:", "&#x1f646;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman gesturing ok medium-light skin tone:", "&#x1f646;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman gesturing ok medium skin tone:", "&#x1f646;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman gesturing ok medium-dark skin tone:", "&#x1f646;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman gesturing ok dark skin tone:", "&#x1f646;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person tipping hand light skin tone:", "&#x1f481;&#x1f3fb;"},
+ {"", ":person tipping hand medium-light skin tone:", "&#x1f481;&#x1f3fc;"},
+ {"", ":person tipping hand medium skin tone:", "&#x1f481;&#x1f3fd;"},
+ {"", ":person tipping hand medium-dark skin tone:", "&#x1f481;&#x1f3fe;"},
+ {"", ":person tipping hand dark skin tone:", "&#x1f481;&#x1f3ff;"},
+ {"", ":man tipping hand light skin tone:", "&#x1f481;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man tipping hand medium-light skin tone:", "&#x1f481;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man tipping hand medium skin tone:", "&#x1f481;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man tipping hand medium-dark skin tone:", "&#x1f481;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man tipping hand dark skin tone:", "&#x1f481;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman tipping hand light skin tone:", "&#x1f481;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman tipping hand medium-light skin tone:", "&#x1f481;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman tipping hand medium skin tone:", "&#x1f481;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman tipping hand medium-dark skin tone:", "&#x1f481;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman tipping hand dark skin tone:", "&#x1f481;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person raising hand light skin tone:", "&#x1f64b;&#x1f3fb;"},
+ {"", ":person raising hand medium-light skin tone:", "&#x1f64b;&#x1f3fc;"},
+ {"", ":person raising hand medium skin tone:", "&#x1f64b;&#x1f3fd;"},
+ {"", ":person raising hand medium-dark skin tone:", "&#x1f64b;&#x1f3fe;"},
+ {"", ":person raising hand dark skin tone:", "&#x1f64b;&#x1f3ff;"},
+ {"", ":man raising hand light skin tone:", "&#x1f64b;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man raising hand medium-light skin tone:", "&#x1f64b;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man raising hand medium skin tone:", "&#x1f64b;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man raising hand medium-dark skin tone:", "&#x1f64b;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man raising hand dark skin tone:", "&#x1f64b;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman raising hand light skin tone:", "&#x1f64b;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman raising hand medium-light skin tone:", "&#x1f64b;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman raising hand medium skin tone:", "&#x1f64b;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman raising hand medium-dark skin tone:", "&#x1f64b;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman raising hand dark skin tone:", "&#x1f64b;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person bowing light skin tone:", "&#x1f647;&#x1f3fb;"},
+ {"", ":person bowing medium-light skin tone:", "&#x1f647;&#x1f3fc;"},
+ {"", ":person bowing medium skin tone:", "&#x1f647;&#x1f3fd;"},
+ {"", ":person bowing medium-dark skin tone:", "&#x1f647;&#x1f3fe;"},
+ {"", ":person bowing dark skin tone:", "&#x1f647;&#x1f3ff;"},
+ {"", ":man bowing light skin tone:", "&#x1f647;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man bowing medium-light skin tone:", "&#x1f647;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man bowing medium skin tone:", "&#x1f647;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man bowing medium-dark skin tone:", "&#x1f647;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man bowing dark skin tone:", "&#x1f647;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman bowing light skin tone:", "&#x1f647;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman bowing medium-light skin tone:", "&#x1f647;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman bowing medium skin tone:", "&#x1f647;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman bowing medium-dark skin tone:", "&#x1f647;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman bowing dark skin tone:", "&#x1f647;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person facepalming light skin tone:", "&#x1f926;&#x1f3fb;"},
+ {"", ":person facepalming medium-light skin tone:", "&#x1f926;&#x1f3fc;"},
+ {"", ":person facepalming medium skin tone:", "&#x1f926;&#x1f3fd;"},
+ {"", ":person facepalming medium-dark skin tone:", "&#x1f926;&#x1f3fe;"},
+ {"", ":person facepalming dark skin tone:", "&#x1f926;&#x1f3ff;"},
+ {"", ":man facepalming light skin tone:", "&#x1f926;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man facepalming medium-light skin tone:", "&#x1f926;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man facepalming medium skin tone:", "&#x1f926;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man facepalming medium-dark skin tone:", "&#x1f926;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man facepalming dark skin tone:", "&#x1f926;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman facepalming light skin tone:", "&#x1f926;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman facepalming medium-light skin tone:", "&#x1f926;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman facepalming medium skin tone:", "&#x1f926;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman facepalming medium-dark skin tone:", "&#x1f926;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman facepalming dark skin tone:", "&#x1f926;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person shrugging light skin tone:", "&#x1f937;&#x1f3fb;"},
+ {"", ":person shrugging medium-light skin tone:", "&#x1f937;&#x1f3fc;"},
+ {"", ":person shrugging medium skin tone:", "&#x1f937;&#x1f3fd;"},
+ {"", ":person shrugging medium-dark skin tone:", "&#x1f937;&#x1f3fe;"},
+ {"", ":person shrugging dark skin tone:", "&#x1f937;&#x1f3ff;"},
+ {"", ":man shrugging light skin tone:", "&#x1f937;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man shrugging medium-light skin tone:", "&#x1f937;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man shrugging medium skin tone:", "&#x1f937;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man shrugging medium-dark skin tone:", "&#x1f937;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man shrugging dark skin tone:", "&#x1f937;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman shrugging light skin tone:", "&#x1f937;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman shrugging medium-light skin tone:", "&#x1f937;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman shrugging medium skin tone:", "&#x1f937;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman shrugging medium-dark skin tone:", "&#x1f937;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman shrugging dark skin tone:", "&#x1f937;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":man health worker light skin tone:", "&#x1f468;&#x1f3fb;&#x200d;&#x2695;&#xfe0f;"},
+ {"", ":man health worker medium-light skin tone:", "&#x1f468;&#x1f3fc;&#x200d;&#x2695;&#xfe0f;"},
+ {"", ":man health worker medium skin tone:", "&#x1f468;&#x1f3fd;&#x200d;&#x2695;&#xfe0f;"},
+ {"", ":man health worker medium-dark skin tone:", "&#x1f468;&#x1f3fe;&#x200d;&#x2695;&#xfe0f;"},
+ {"", ":man health worker dark skin tone:", "&#x1f468;&#x1f3ff;&#x200d;&#x2695;&#xfe0f;"},
+ {"", ":woman health worker light skin tone:", "&#x1f469;&#x1f3fb;&#x200d;&#x2695;&#xfe0f;"},
+ {"", ":woman health worker medium-light skin tone:", "&#x1f469;&#x1f3fc;&#x200d;&#x2695;&#xfe0f;"},
+ {"", ":woman health worker medium skin tone:", "&#x1f469;&#x1f3fd;&#x200d;&#x2695;&#xfe0f;"},
+ {"", ":woman health worker medium-dark skin tone:", "&#x1f469;&#x1f3fe;&#x200d;&#x2695;&#xfe0f;"},
+ {"", ":woman health worker dark skin tone:", "&#x1f469;&#x1f3ff;&#x200d;&#x2695;&#xfe0f;"},
+ {"", ":man student light skin tone:", "&#x1f468;&#x1f3fb;&#x200d;&#x1f393;"},
+ {"", ":man student medium-light skin tone:", "&#x1f468;&#x1f3fc;&#x200d;&#x1f393;"},
+ {"", ":man student medium skin tone:", "&#x1f468;&#x1f3fd;&#x200d;&#x1f393;"},
+ {"", ":man student medium-dark skin tone:", "&#x1f468;&#x1f3fe;&#x200d;&#x1f393;"},
+ {"", ":man student dark skin tone:", "&#x1f468;&#x1f3ff;&#x200d;&#x1f393;"},
+ {"", ":woman student light skin tone:", "&#x1f469;&#x1f3fb;&#x200d;&#x1f393;"},
+ {"", ":woman student medium-light skin tone:", "&#x1f469;&#x1f3fc;&#x200d;&#x1f393;"},
+ {"", ":woman student medium skin tone:", "&#x1f469;&#x1f3fd;&#x200d;&#x1f393;"},
+ {"", ":woman student medium-dark skin tone:", "&#x1f469;&#x1f3fe;&#x200d;&#x1f393;"},
+ {"", ":woman student dark skin tone:", "&#x1f469;&#x1f3ff;&#x200d;&#x1f393;"},
+ {"", ":man teacher light skin tone:", "&#x1f468;&#x1f3fb;&#x200d;&#x1f3eb;"},
+ {"", ":man teacher medium-light skin tone:", "&#x1f468;&#x1f3fc;&#x200d;&#x1f3eb;"},
+ {"", ":man teacher medium skin tone:", "&#x1f468;&#x1f3fd;&#x200d;&#x1f3eb;"},
+ {"", ":man teacher medium-dark skin tone:", "&#x1f468;&#x1f3fe;&#x200d;&#x1f3eb;"},
+ {"", ":man teacher dark skin tone:", "&#x1f468;&#x1f3ff;&#x200d;&#x1f3eb;"},
+ {"", ":woman teacher light skin tone:", "&#x1f469;&#x1f3fb;&#x200d;&#x1f3eb;"},
+ {"", ":woman teacher medium-light skin tone:", "&#x1f469;&#x1f3fc;&#x200d;&#x1f3eb;"},
+ {"", ":woman teacher medium skin tone:", "&#x1f469;&#x1f3fd;&#x200d;&#x1f3eb;"},
+ {"", ":woman teacher medium-dark skin tone:", "&#x1f469;&#x1f3fe;&#x200d;&#x1f3eb;"},
+ {"", ":woman teacher dark skin tone:", "&#x1f469;&#x1f3ff;&#x200d;&#x1f3eb;"},
+ {"", ":man judge light skin tone:", "&#x1f468;&#x1f3fb;&#x200d;&#x2696;&#xfe0f;"},
+ {"", ":man judge medium-light skin tone:", "&#x1f468;&#x1f3fc;&#x200d;&#x2696;&#xfe0f;"},
+ {"", ":man judge medium skin tone:", "&#x1f468;&#x1f3fd;&#x200d;&#x2696;&#xfe0f;"},
+ {"", ":man judge medium-dark skin tone:", "&#x1f468;&#x1f3fe;&#x200d;&#x2696;&#xfe0f;"},
+ {"", ":man judge dark skin tone:", "&#x1f468;&#x1f3ff;&#x200d;&#x2696;&#xfe0f;"},
+ {"", ":woman judge light skin tone:", "&#x1f469;&#x1f3fb;&#x200d;&#x2696;&#xfe0f;"},
+ {"", ":woman judge medium-light skin tone:", "&#x1f469;&#x1f3fc;&#x200d;&#x2696;&#xfe0f;"},
+ {"", ":woman judge medium skin tone:", "&#x1f469;&#x1f3fd;&#x200d;&#x2696;&#xfe0f;"},
+ {"", ":woman judge medium-dark skin tone:", "&#x1f469;&#x1f3fe;&#x200d;&#x2696;&#xfe0f;"},
+ {"", ":woman judge dark skin tone:", "&#x1f469;&#x1f3ff;&#x200d;&#x2696;&#xfe0f;"},
+ {"", ":man farmer light skin tone:", "&#x1f468;&#x1f3fb;&#x200d;&#x1f33e;"},
+ {"", ":man farmer medium-light skin tone:", "&#x1f468;&#x1f3fc;&#x200d;&#x1f33e;"},
+ {"", ":man farmer medium skin tone:", "&#x1f468;&#x1f3fd;&#x200d;&#x1f33e;"},
+ {"", ":man farmer medium-dark skin tone:", "&#x1f468;&#x1f3fe;&#x200d;&#x1f33e;"},
+ {"", ":man farmer dark skin tone:", "&#x1f468;&#x1f3ff;&#x200d;&#x1f33e;"},
+ {"", ":woman farmer light skin tone:", "&#x1f469;&#x1f3fb;&#x200d;&#x1f33e;"},
+ {"", ":woman farmer medium-light skin tone:", "&#x1f469;&#x1f3fc;&#x200d;&#x1f33e;"},
+ {"", ":woman farmer medium skin tone:", "&#x1f469;&#x1f3fd;&#x200d;&#x1f33e;"},
+ {"", ":woman farmer medium-dark skin tone:", "&#x1f469;&#x1f3fe;&#x200d;&#x1f33e;"},
+ {"", ":woman farmer dark skin tone:", "&#x1f469;&#x1f3ff;&#x200d;&#x1f33e;"},
+ {"", ":man cook light skin tone:", "&#x1f468;&#x1f3fb;&#x200d;&#x1f373;"},
+ {"", ":man cook medium-light skin tone:", "&#x1f468;&#x1f3fc;&#x200d;&#x1f373;"},
+ {"", ":man cook medium skin tone:", "&#x1f468;&#x1f3fd;&#x200d;&#x1f373;"},
+ {"", ":man cook medium-dark skin tone:", "&#x1f468;&#x1f3fe;&#x200d;&#x1f373;"},
+ {"", ":man cook dark skin tone:", "&#x1f468;&#x1f3ff;&#x200d;&#x1f373;"},
+ {"", ":woman cook light skin tone:", "&#x1f469;&#x1f3fb;&#x200d;&#x1f373;"},
+ {"", ":woman cook medium-light skin tone:", "&#x1f469;&#x1f3fc;&#x200d;&#x1f373;"},
+ {"", ":woman cook medium skin tone:", "&#x1f469;&#x1f3fd;&#x200d;&#x1f373;"},
+ {"", ":woman cook medium-dark skin tone:", "&#x1f469;&#x1f3fe;&#x200d;&#x1f373;"},
+ {"", ":woman cook dark skin tone:", "&#x1f469;&#x1f3ff;&#x200d;&#x1f373;"},
+ {"", ":man mechanic light skin tone:", "&#x1f468;&#x1f3fb;&#x200d;&#x1f527;"},
+ {"", ":man mechanic medium-light skin tone:", "&#x1f468;&#x1f3fc;&#x200d;&#x1f527;"},
+ {"", ":man mechanic medium skin tone:", "&#x1f468;&#x1f3fd;&#x200d;&#x1f527;"},
+ {"", ":man mechanic medium-dark skin tone:", "&#x1f468;&#x1f3fe;&#x200d;&#x1f527;"},
+ {"", ":man mechanic dark skin tone:", "&#x1f468;&#x1f3ff;&#x200d;&#x1f527;"},
+ {"", ":woman mechanic light skin tone:", "&#x1f469;&#x1f3fb;&#x200d;&#x1f527;"},
+ {"", ":woman mechanic medium-light skin tone:", "&#x1f469;&#x1f3fc;&#x200d;&#x1f527;"},
+ {"", ":woman mechanic medium skin tone:", "&#x1f469;&#x1f3fd;&#x200d;&#x1f527;"},
+ {"", ":woman mechanic medium-dark skin tone:", "&#x1f469;&#x1f3fe;&#x200d;&#x1f527;"},
+ {"", ":woman mechanic dark skin tone:", "&#x1f469;&#x1f3ff;&#x200d;&#x1f527;"},
+ {"", ":man factory worker light skin tone:", "&#x1f468;&#x1f3fb;&#x200d;&#x1f3ed;"},
+ {"", ":man factory worker medium-light skin tone:", "&#x1f468;&#x1f3fc;&#x200d;&#x1f3ed;"},
+ {"", ":man factory worker medium skin tone:", "&#x1f468;&#x1f3fd;&#x200d;&#x1f3ed;"},
+ {"", ":man factory worker medium-dark skin tone:", "&#x1f468;&#x1f3fe;&#x200d;&#x1f3ed;"},
+ {"", ":man factory worker dark skin tone:", "&#x1f468;&#x1f3ff;&#x200d;&#x1f3ed;"},
+ {"", ":woman factory worker light skin tone:", "&#x1f469;&#x1f3fb;&#x200d;&#x1f3ed;"},
+ {"", ":woman factory worker medium-light skin tone:", "&#x1f469;&#x1f3fc;&#x200d;&#x1f3ed;"},
+ {"", ":woman factory worker medium skin tone:", "&#x1f469;&#x1f3fd;&#x200d;&#x1f3ed;"},
+ {"", ":woman factory worker medium-dark skin tone:", "&#x1f469;&#x1f3fe;&#x200d;&#x1f3ed;"},
+ {"", ":woman factory worker dark skin tone:", "&#x1f469;&#x1f3ff;&#x200d;&#x1f3ed;"},
+ {"", ":man office worker light skin tone:", "&#x1f468;&#x1f3fb;&#x200d;&#x1f4bc;"},
+ {"", ":man office worker medium-light skin tone:", "&#x1f468;&#x1f3fc;&#x200d;&#x1f4bc;"},
+ {"", ":man office worker medium skin tone:", "&#x1f468;&#x1f3fd;&#x200d;&#x1f4bc;"},
+ {"", ":man office worker medium-dark skin tone:", "&#x1f468;&#x1f3fe;&#x200d;&#x1f4bc;"},
+ {"", ":man office worker dark skin tone:", "&#x1f468;&#x1f3ff;&#x200d;&#x1f4bc;"},
+ {"", ":woman office worker light skin tone:", "&#x1f469;&#x1f3fb;&#x200d;&#x1f4bc;"},
+ {"", ":woman office worker medium-light skin tone:", "&#x1f469;&#x1f3fc;&#x200d;&#x1f4bc;"},
+ {"", ":woman office worker medium skin tone:", "&#x1f469;&#x1f3fd;&#x200d;&#x1f4bc;"},
+ {"", ":woman office worker medium-dark skin tone:", "&#x1f469;&#x1f3fe;&#x200d;&#x1f4bc;"},
+ {"", ":woman office worker dark skin tone:", "&#x1f469;&#x1f3ff;&#x200d;&#x1f4bc;"},
+ {"", ":man scientist light skin tone:", "&#x1f468;&#x1f3fb;&#x200d;&#x1f52c;"},
+ {"", ":man scientist medium-light skin tone:", "&#x1f468;&#x1f3fc;&#x200d;&#x1f52c;"},
+ {"", ":man scientist medium skin tone:", "&#x1f468;&#x1f3fd;&#x200d;&#x1f52c;"},
+ {"", ":man scientist medium-dark skin tone:", "&#x1f468;&#x1f3fe;&#x200d;&#x1f52c;"},
+ {"", ":man scientist dark skin tone:", "&#x1f468;&#x1f3ff;&#x200d;&#x1f52c;"},
+ {"", ":woman scientist light skin tone:", "&#x1f469;&#x1f3fb;&#x200d;&#x1f52c;"},
+ {"", ":woman scientist medium-light skin tone:", "&#x1f469;&#x1f3fc;&#x200d;&#x1f52c;"},
+ {"", ":woman scientist medium skin tone:", "&#x1f469;&#x1f3fd;&#x200d;&#x1f52c;"},
+ {"", ":woman scientist medium-dark skin tone:", "&#x1f469;&#x1f3fe;&#x200d;&#x1f52c;"},
+ {"", ":woman scientist dark skin tone:", "&#x1f469;&#x1f3ff;&#x200d;&#x1f52c;"},
+ {"", ":man technologist light skin tone:", "&#x1f468;&#x1f3fb;&#x200d;&#x1f4bb;"},
+ {"", ":man technologist medium-light skin tone:", "&#x1f468;&#x1f3fc;&#x200d;&#x1f4bb;"},
+ {"", ":man technologist medium skin tone:", "&#x1f468;&#x1f3fd;&#x200d;&#x1f4bb;"},
+ {"", ":man technologist medium-dark skin tone:", "&#x1f468;&#x1f3fe;&#x200d;&#x1f4bb;"},
+ {"", ":man technologist dark skin tone:", "&#x1f468;&#x1f3ff;&#x200d;&#x1f4bb;"},
+ {"", ":woman technologist light skin tone:", "&#x1f469;&#x1f3fb;&#x200d;&#x1f4bb;"},
+ {"", ":woman technologist medium-light skin tone:", "&#x1f469;&#x1f3fc;&#x200d;&#x1f4bb;"},
+ {"", ":woman technologist medium skin tone:", "&#x1f469;&#x1f3fd;&#x200d;&#x1f4bb;"},
+ {"", ":woman technologist medium-dark skin tone:", "&#x1f469;&#x1f3fe;&#x200d;&#x1f4bb;"},
+ {"", ":woman technologist dark skin tone:", "&#x1f469;&#x1f3ff;&#x200d;&#x1f4bb;"},
+ {"", ":man singer light skin tone:", "&#x1f468;&#x1f3fb;&#x200d;&#x1f3a4;"},
+ {"", ":man singer medium-light skin tone:", "&#x1f468;&#x1f3fc;&#x200d;&#x1f3a4;"},
+ {"", ":man singer medium skin tone:", "&#x1f468;&#x1f3fd;&#x200d;&#x1f3a4;"},
+ {"", ":man singer medium-dark skin tone:", "&#x1f468;&#x1f3fe;&#x200d;&#x1f3a4;"},
+ {"", ":man singer dark skin tone:", "&#x1f468;&#x1f3ff;&#x200d;&#x1f3a4;"},
+ {"", ":woman singer light skin tone:", "&#x1f469;&#x1f3fb;&#x200d;&#x1f3a4;"},
+ {"", ":woman singer medium-light skin tone:", "&#x1f469;&#x1f3fc;&#x200d;&#x1f3a4;"},
+ {"", ":woman singer medium skin tone:", "&#x1f469;&#x1f3fd;&#x200d;&#x1f3a4;"},
+ {"", ":woman singer medium-dark skin tone:", "&#x1f469;&#x1f3fe;&#x200d;&#x1f3a4;"},
+ {"", ":woman singer dark skin tone:", "&#x1f469;&#x1f3ff;&#x200d;&#x1f3a4;"},
+ {"", ":man artist light skin tone:", "&#x1f468;&#x1f3fb;&#x200d;&#x1f3a8;"},
+ {"", ":man artist medium-light skin tone:", "&#x1f468;&#x1f3fc;&#x200d;&#x1f3a8;"},
+ {"", ":man artist medium skin tone:", "&#x1f468;&#x1f3fd;&#x200d;&#x1f3a8;"},
+ {"", ":man artist medium-dark skin tone:", "&#x1f468;&#x1f3fe;&#x200d;&#x1f3a8;"},
+ {"", ":man artist dark skin tone:", "&#x1f468;&#x1f3ff;&#x200d;&#x1f3a8;"},
+ {"", ":woman artist light skin tone:", "&#x1f469;&#x1f3fb;&#x200d;&#x1f3a8;"},
+ {"", ":woman artist medium-light skin tone:", "&#x1f469;&#x1f3fc;&#x200d;&#x1f3a8;"},
+ {"", ":woman artist medium skin tone:", "&#x1f469;&#x1f3fd;&#x200d;&#x1f3a8;"},
+ {"", ":woman artist medium-dark skin tone:", "&#x1f469;&#x1f3fe;&#x200d;&#x1f3a8;"},
+ {"", ":woman artist dark skin tone:", "&#x1f469;&#x1f3ff;&#x200d;&#x1f3a8;"},
+ {"", ":man pilot light skin tone:", "&#x1f468;&#x1f3fb;&#x200d;&#x2708;&#xfe0f;"},
+ {"", ":man pilot medium-light skin tone:", "&#x1f468;&#x1f3fc;&#x200d;&#x2708;&#xfe0f;"},
+ {"", ":man pilot medium skin tone:", "&#x1f468;&#x1f3fd;&#x200d;&#x2708;&#xfe0f;"},
+ {"", ":man pilot medium-dark skin tone:", "&#x1f468;&#x1f3fe;&#x200d;&#x2708;&#xfe0f;"},
+ {"", ":man pilot dark skin tone:", "&#x1f468;&#x1f3ff;&#x200d;&#x2708;&#xfe0f;"},
+ {"", ":woman pilot light skin tone:", "&#x1f469;&#x1f3fb;&#x200d;&#x2708;&#xfe0f;"},
+ {"", ":woman pilot medium-light skin tone:", "&#x1f469;&#x1f3fc;&#x200d;&#x2708;&#xfe0f;"},
+ {"", ":woman pilot medium skin tone:", "&#x1f469;&#x1f3fd;&#x200d;&#x2708;&#xfe0f;"},
+ {"", ":woman pilot medium-dark skin tone:", "&#x1f469;&#x1f3fe;&#x200d;&#x2708;&#xfe0f;"},
+ {"", ":woman pilot dark skin tone:", "&#x1f469;&#x1f3ff;&#x200d;&#x2708;&#xfe0f;"},
+ {"", ":man astronaut light skin tone:", "&#x1f468;&#x1f3fb;&#x200d;&#x1f680;"},
+ {"", ":man astronaut medium-light skin tone:", "&#x1f468;&#x1f3fc;&#x200d;&#x1f680;"},
+ {"", ":man astronaut medium skin tone:", "&#x1f468;&#x1f3fd;&#x200d;&#x1f680;"},
+ {"", ":man astronaut medium-dark skin tone:", "&#x1f468;&#x1f3fe;&#x200d;&#x1f680;"},
+ {"", ":man astronaut dark skin tone:", "&#x1f468;&#x1f3ff;&#x200d;&#x1f680;"},
+ {"", ":woman astronaut light skin tone:", "&#x1f469;&#x1f3fb;&#x200d;&#x1f680;"},
+ {"", ":woman astronaut medium-light skin tone:", "&#x1f469;&#x1f3fc;&#x200d;&#x1f680;"},
+ {"", ":woman astronaut medium skin tone:", "&#x1f469;&#x1f3fd;&#x200d;&#x1f680;"},
+ {"", ":woman astronaut medium-dark skin tone:", "&#x1f469;&#x1f3fe;&#x200d;&#x1f680;"},
+ {"", ":woman astronaut dark skin tone:", "&#x1f469;&#x1f3ff;&#x200d;&#x1f680;"},
+ {"", ":man firefighter light skin tone:", "&#x1f468;&#x1f3fb;&#x200d;&#x1f692;"},
+ {"", ":man firefighter medium-light skin tone:", "&#x1f468;&#x1f3fc;&#x200d;&#x1f692;"},
+ {"", ":man firefighter medium skin tone:", "&#x1f468;&#x1f3fd;&#x200d;&#x1f692;"},
+ {"", ":man firefighter medium-dark skin tone:", "&#x1f468;&#x1f3fe;&#x200d;&#x1f692;"},
+ {"", ":man firefighter dark skin tone:", "&#x1f468;&#x1f3ff;&#x200d;&#x1f692;"},
+ {"", ":woman firefighter light skin tone:", "&#x1f469;&#x1f3fb;&#x200d;&#x1f692;"},
+ {"", ":woman firefighter medium-light skin tone:", "&#x1f469;&#x1f3fc;&#x200d;&#x1f692;"},
+ {"", ":woman firefighter medium skin tone:", "&#x1f469;&#x1f3fd;&#x200d;&#x1f692;"},
+ {"", ":woman firefighter medium-dark skin tone:", "&#x1f469;&#x1f3fe;&#x200d;&#x1f692;"},
+ {"", ":woman firefighter dark skin tone:", "&#x1f469;&#x1f3ff;&#x200d;&#x1f692;"},
+ {"", ":police officer light skin tone:", "&#x1f46e;&#x1f3fb;"},
+ {"", ":police officer medium-light skin tone:", "&#x1f46e;&#x1f3fc;"},
+ {"", ":police officer medium skin tone:", "&#x1f46e;&#x1f3fd;"},
+ {"", ":police officer medium-dark skin tone:", "&#x1f46e;&#x1f3fe;"},
+ {"", ":police officer dark skin tone:", "&#x1f46e;&#x1f3ff;"},
+ {"", ":man police officer light skin tone:", "&#x1f46e;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man police officer medium-light skin tone:", "&#x1f46e;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man police officer medium skin tone:", "&#x1f46e;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man police officer medium-dark skin tone:", "&#x1f46e;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man police officer dark skin tone:", "&#x1f46e;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman police officer light skin tone:", "&#x1f46e;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman police officer medium-light skin tone:", "&#x1f46e;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman police officer medium skin tone:", "&#x1f46e;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman police officer medium-dark skin tone:", "&#x1f46e;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman police officer dark skin tone:", "&#x1f46e;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":detective light skin tone:", "&#x1f575;&#x1f3fb;"},
+ {"", ":detective medium-light skin tone:", "&#x1f575;&#x1f3fc;"},
+ {"", ":detective medium skin tone:", "&#x1f575;&#x1f3fd;"},
+ {"", ":detective medium-dark skin tone:", "&#x1f575;&#x1f3fe;"},
+ {"", ":detective dark skin tone:", "&#x1f575;&#x1f3ff;"},
+ {"", ":man detective light skin tone:", "&#x1f575;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man detective medium-light skin tone:", "&#x1f575;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man detective medium skin tone:", "&#x1f575;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man detective medium-dark skin tone:", "&#x1f575;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man detective dark skin tone:", "&#x1f575;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman detective light skin tone:", "&#x1f575;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman detective medium-light skin tone:", "&#x1f575;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman detective medium skin tone:", "&#x1f575;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman detective medium-dark skin tone:", "&#x1f575;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman detective dark skin tone:", "&#x1f575;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":guard light skin tone:", "&#x1f482;&#x1f3fb;"},
+ {"", ":guard medium-light skin tone:", "&#x1f482;&#x1f3fc;"},
+ {"", ":guard medium skin tone:", "&#x1f482;&#x1f3fd;"},
+ {"", ":guard medium-dark skin tone:", "&#x1f482;&#x1f3fe;"},
+ {"", ":guard dark skin tone:", "&#x1f482;&#x1f3ff;"},
+ {"", ":man guard light skin tone:", "&#x1f482;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man guard medium-light skin tone:", "&#x1f482;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man guard medium skin tone:", "&#x1f482;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man guard medium-dark skin tone:", "&#x1f482;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man guard dark skin tone:", "&#x1f482;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman guard light skin tone:", "&#x1f482;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman guard medium-light skin tone:", "&#x1f482;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman guard medium skin tone:", "&#x1f482;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman guard medium-dark skin tone:", "&#x1f482;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman guard dark skin tone:", "&#x1f482;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":construction worker light skin tone:", "&#x1f477;&#x1f3fb;"},
+ {"", ":construction worker medium-light skin tone:", "&#x1f477;&#x1f3fc;"},
+ {"", ":construction worker medium skin tone:", "&#x1f477;&#x1f3fd;"},
+ {"", ":construction worker medium-dark skin tone:", "&#x1f477;&#x1f3fe;"},
+ {"", ":construction worker dark skin tone:", "&#x1f477;&#x1f3ff;"},
+ {"", ":man construction worker light skin tone:", "&#x1f477;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man construction worker medium-light skin tone:", "&#x1f477;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man construction worker medium skin tone:", "&#x1f477;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man construction worker medium-dark skin tone:", "&#x1f477;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man construction worker dark skin tone:", "&#x1f477;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman construction worker light skin tone:", "&#x1f477;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman construction worker medium-light skin tone:", "&#x1f477;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman construction worker medium skin tone:", "&#x1f477;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman construction worker medium-dark skin tone:", "&#x1f477;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman construction worker dark skin tone:", "&#x1f477;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":prince light skin tone:", "&#x1f934;&#x1f3fb;"},
+ {"", ":prince medium-light skin tone:", "&#x1f934;&#x1f3fc;"},
+ {"", ":prince medium skin tone:", "&#x1f934;&#x1f3fd;"},
+ {"", ":prince medium-dark skin tone:", "&#x1f934;&#x1f3fe;"},
+ {"", ":prince dark skin tone:", "&#x1f934;&#x1f3ff;"},
+ {"", ":princess light skin tone:", "&#x1f478;&#x1f3fb;"},
+ {"", ":princess medium-light skin tone:", "&#x1f478;&#x1f3fc;"},
+ {"", ":princess medium skin tone:", "&#x1f478;&#x1f3fd;"},
+ {"", ":princess medium-dark skin tone:", "&#x1f478;&#x1f3fe;"},
+ {"", ":princess dark skin tone:", "&#x1f478;&#x1f3ff;"},
+ {"", ":person wearing turban light skin tone:", "&#x1f473;&#x1f3fb;"},
+ {"", ":person wearing turban medium-light skin tone:", "&#x1f473;&#x1f3fc;"},
+ {"", ":person wearing turban medium skin tone:", "&#x1f473;&#x1f3fd;"},
+ {"", ":person wearing turban medium-dark skin tone:", "&#x1f473;&#x1f3fe;"},
+ {"", ":person wearing turban dark skin tone:", "&#x1f473;&#x1f3ff;"},
+ {"", ":man wearing turban light skin tone:", "&#x1f473;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man wearing turban medium-light skin tone:", "&#x1f473;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man wearing turban medium skin tone:", "&#x1f473;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man wearing turban medium-dark skin tone:", "&#x1f473;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man wearing turban dark skin tone:", "&#x1f473;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman wearing turban light skin tone:", "&#x1f473;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman wearing turban medium-light skin tone:", "&#x1f473;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman wearing turban medium skin tone:", "&#x1f473;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman wearing turban medium-dark skin tone:", "&#x1f473;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman wearing turban dark skin tone:", "&#x1f473;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":man with chinese cap light skin tone:", "&#x1f472;&#x1f3fb;"},
+ {"", ":man with chinese cap medium-light skin tone:", "&#x1f472;&#x1f3fc;"},
+ {"", ":man with chinese cap medium skin tone:", "&#x1f472;&#x1f3fd;"},
+ {"", ":man with chinese cap medium-dark skin tone:", "&#x1f472;&#x1f3fe;"},
+ {"", ":man with chinese cap dark skin tone:", "&#x1f472;&#x1f3ff;"},
+ {"", ":woman with headscarf light skin tone:", "&#x1f9d5;&#x1f3fb;"},
+ {"", ":woman with headscarf medium-light skin tone:", "&#x1f9d5;&#x1f3fc;"},
+ {"", ":woman with headscarf medium skin tone:", "&#x1f9d5;&#x1f3fd;"},
+ {"", ":woman with headscarf medium-dark skin tone:", "&#x1f9d5;&#x1f3fe;"},
+ {"", ":woman with headscarf dark skin tone:", "&#x1f9d5;&#x1f3ff;"},
+ {"", ":man in tuxedo light skin tone:", "&#x1f935;&#x1f3fb;"},
+ {"", ":man in tuxedo medium-light skin tone:", "&#x1f935;&#x1f3fc;"},
+ {"", ":man in tuxedo medium skin tone:", "&#x1f935;&#x1f3fd;"},
+ {"", ":man in tuxedo medium-dark skin tone:", "&#x1f935;&#x1f3fe;"},
+ {"", ":man in tuxedo dark skin tone:", "&#x1f935;&#x1f3ff;"},
+ {"", ":bride with veil light skin tone:", "&#x1f470;&#x1f3fb;"},
+ {"", ":bride with veil medium-light skin tone:", "&#x1f470;&#x1f3fc;"},
+ {"", ":bride with veil medium skin tone:", "&#x1f470;&#x1f3fd;"},
+ {"", ":bride with veil medium-dark skin tone:", "&#x1f470;&#x1f3fe;"},
+ {"", ":bride with veil dark skin tone:", "&#x1f470;&#x1f3ff;"},
+ {"", ":pregnant woman light skin tone:", "&#x1f930;&#x1f3fb;"},
+ {"", ":pregnant woman medium-light skin tone:", "&#x1f930;&#x1f3fc;"},
+ {"", ":pregnant woman medium skin tone:", "&#x1f930;&#x1f3fd;"},
+ {"", ":pregnant woman medium-dark skin tone:", "&#x1f930;&#x1f3fe;"},
+ {"", ":pregnant woman dark skin tone:", "&#x1f930;&#x1f3ff;"},
+ {"", ":breast-feeding light skin tone:", "&#x1f931;&#x1f3fb;"},
+ {"", ":breast-feeding medium-light skin tone:", "&#x1f931;&#x1f3fc;"},
+ {"", ":breast-feeding medium skin tone:", "&#x1f931;&#x1f3fd;"},
+ {"", ":breast-feeding medium-dark skin tone:", "&#x1f931;&#x1f3fe;"},
+ {"", ":breast-feeding dark skin tone:", "&#x1f931;&#x1f3ff;"},
+ {"", ":baby angel light skin tone:", "&#x1f47c;&#x1f3fb;"},
+ {"", ":baby angel medium-light skin tone:", "&#x1f47c;&#x1f3fc;"},
+ {"", ":baby angel medium skin tone:", "&#x1f47c;&#x1f3fd;"},
+ {"", ":baby angel medium-dark skin tone:", "&#x1f47c;&#x1f3fe;"},
+ {"", ":baby angel dark skin tone:", "&#x1f47c;&#x1f3ff;"},
+ {"", ":santa claus light skin tone:", "&#x1f385;&#x1f3fb;"},
+ {"", ":santa claus medium-light skin tone:", "&#x1f385;&#x1f3fc;"},
+ {"", ":santa claus medium skin tone:", "&#x1f385;&#x1f3fd;"},
+ {"", ":santa claus medium-dark skin tone:", "&#x1f385;&#x1f3fe;"},
+ {"", ":santa claus dark skin tone:", "&#x1f385;&#x1f3ff;"},
+ {"", ":mrs. claus light skin tone:", "&#x1f936;&#x1f3fb;"},
+ {"", ":mrs. claus medium-light skin tone:", "&#x1f936;&#x1f3fc;"},
+ {"", ":mrs. claus medium skin tone:", "&#x1f936;&#x1f3fd;"},
+ {"", ":mrs. claus medium-dark skin tone:", "&#x1f936;&#x1f3fe;"},
+ {"", ":mrs. claus dark skin tone:", "&#x1f936;&#x1f3ff;"},
+ {"", ":superhero light skin tone:", "&#x1f9b8;&#x1f3fb;"},
+ {"", ":superhero medium-light skin tone:", "&#x1f9b8;&#x1f3fc;"},
+ {"", ":superhero medium skin tone:", "&#x1f9b8;&#x1f3fd;"},
+ {"", ":superhero medium-dark skin tone:", "&#x1f9b8;&#x1f3fe;"},
+ {"", ":superhero dark skin tone:", "&#x1f9b8;&#x1f3ff;"},
+ {"", ":man superhero light skin tone:", "&#x1f9b8;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man superhero medium-light skin tone:", "&#x1f9b8;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man superhero medium skin tone:", "&#x1f9b8;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man superhero medium-dark skin tone:", "&#x1f9b8;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man superhero dark skin tone:", "&#x1f9b8;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman superhero light skin tone:", "&#x1f9b8;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman superhero medium-light skin tone:", "&#x1f9b8;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman superhero medium skin tone:", "&#x1f9b8;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman superhero medium-dark skin tone:", "&#x1f9b8;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman superhero dark skin tone:", "&#x1f9b8;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":supervillain light skin tone:", "&#x1f9b9;&#x1f3fb;"},
+ {"", ":supervillain medium-light skin tone:", "&#x1f9b9;&#x1f3fc;"},
+ {"", ":supervillain medium skin tone:", "&#x1f9b9;&#x1f3fd;"},
+ {"", ":supervillain medium-dark skin tone:", "&#x1f9b9;&#x1f3fe;"},
+ {"", ":supervillain dark skin tone:", "&#x1f9b9;&#x1f3ff;"},
+ {"", ":man supervillain light skin tone:", "&#x1f9b9;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man supervillain medium-light skin tone:", "&#x1f9b9;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man supervillain medium skin tone:", "&#x1f9b9;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man supervillain medium-dark skin tone:", "&#x1f9b9;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man supervillain dark skin tone:", "&#x1f9b9;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman supervillain light skin tone:", "&#x1f9b9;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman supervillain medium-light skin tone:", "&#x1f9b9;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman supervillain medium skin tone:", "&#x1f9b9;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman supervillain medium-dark skin tone:", "&#x1f9b9;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman supervillain dark skin tone:", "&#x1f9b9;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":mage light skin tone:", "&#x1f9d9;&#x1f3fb;"},
+ {"", ":mage medium-light skin tone:", "&#x1f9d9;&#x1f3fc;"},
+ {"", ":mage medium skin tone:", "&#x1f9d9;&#x1f3fd;"},
+ {"", ":mage medium-dark skin tone:", "&#x1f9d9;&#x1f3fe;"},
+ {"", ":mage dark skin tone:", "&#x1f9d9;&#x1f3ff;"},
+ {"", ":man mage light skin tone:", "&#x1f9d9;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man mage medium-light skin tone:", "&#x1f9d9;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man mage medium skin tone:", "&#x1f9d9;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man mage medium-dark skin tone:", "&#x1f9d9;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man mage dark skin tone:", "&#x1f9d9;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman mage light skin tone:", "&#x1f9d9;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman mage medium-light skin tone:", "&#x1f9d9;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman mage medium skin tone:", "&#x1f9d9;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman mage medium-dark skin tone:", "&#x1f9d9;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman mage dark skin tone:", "&#x1f9d9;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":fairy light skin tone:", "&#x1f9da;&#x1f3fb;"},
+ {"", ":fairy medium-light skin tone:", "&#x1f9da;&#x1f3fc;"},
+ {"", ":fairy medium skin tone:", "&#x1f9da;&#x1f3fd;"},
+ {"", ":fairy medium-dark skin tone:", "&#x1f9da;&#x1f3fe;"},
+ {"", ":fairy dark skin tone:", "&#x1f9da;&#x1f3ff;"},
+ {"", ":man fairy light skin tone:", "&#x1f9da;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man fairy medium-light skin tone:", "&#x1f9da;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man fairy medium skin tone:", "&#x1f9da;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man fairy medium-dark skin tone:", "&#x1f9da;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man fairy dark skin tone:", "&#x1f9da;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman fairy light skin tone:", "&#x1f9da;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman fairy medium-light skin tone:", "&#x1f9da;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman fairy medium skin tone:", "&#x1f9da;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman fairy medium-dark skin tone:", "&#x1f9da;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman fairy dark skin tone:", "&#x1f9da;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":vampire light skin tone:", "&#x1f9db;&#x1f3fb;"},
+ {"", ":vampire medium-light skin tone:", "&#x1f9db;&#x1f3fc;"},
+ {"", ":vampire medium skin tone:", "&#x1f9db;&#x1f3fd;"},
+ {"", ":vampire medium-dark skin tone:", "&#x1f9db;&#x1f3fe;"},
+ {"", ":vampire dark skin tone:", "&#x1f9db;&#x1f3ff;"},
+ {"", ":man vampire light skin tone:", "&#x1f9db;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man vampire medium-light skin tone:", "&#x1f9db;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man vampire medium skin tone:", "&#x1f9db;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man vampire medium-dark skin tone:", "&#x1f9db;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man vampire dark skin tone:", "&#x1f9db;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman vampire light skin tone:", "&#x1f9db;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman vampire medium-light skin tone:", "&#x1f9db;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman vampire medium skin tone:", "&#x1f9db;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman vampire medium-dark skin tone:", "&#x1f9db;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman vampire dark skin tone:", "&#x1f9db;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":merperson light skin tone:", "&#x1f9dc;&#x1f3fb;"},
+ {"", ":merperson medium-light skin tone:", "&#x1f9dc;&#x1f3fc;"},
+ {"", ":merperson medium skin tone:", "&#x1f9dc;&#x1f3fd;"},
+ {"", ":merperson medium-dark skin tone:", "&#x1f9dc;&#x1f3fe;"},
+ {"", ":merperson dark skin tone:", "&#x1f9dc;&#x1f3ff;"},
+ {"", ":merman light skin tone:", "&#x1f9dc;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":merman medium-light skin tone:", "&#x1f9dc;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":merman medium skin tone:", "&#x1f9dc;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":merman medium-dark skin tone:", "&#x1f9dc;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":merman dark skin tone:", "&#x1f9dc;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":mermaid light skin tone:", "&#x1f9dc;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":mermaid medium-light skin tone:", "&#x1f9dc;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":mermaid medium skin tone:", "&#x1f9dc;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":mermaid medium-dark skin tone:", "&#x1f9dc;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":mermaid dark skin tone:", "&#x1f9dc;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":elf light skin tone:", "&#x1f9dd;&#x1f3fb;"},
+ {"", ":elf medium-light skin tone:", "&#x1f9dd;&#x1f3fc;"},
+ {"", ":elf medium skin tone:", "&#x1f9dd;&#x1f3fd;"},
+ {"", ":elf medium-dark skin tone:", "&#x1f9dd;&#x1f3fe;"},
+ {"", ":elf dark skin tone:", "&#x1f9dd;&#x1f3ff;"},
+ {"", ":man elf light skin tone:", "&#x1f9dd;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man elf medium-light skin tone:", "&#x1f9dd;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man elf medium skin tone:", "&#x1f9dd;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man elf medium-dark skin tone:", "&#x1f9dd;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man elf dark skin tone:", "&#x1f9dd;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman elf light skin tone:", "&#x1f9dd;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman elf medium-light skin tone:", "&#x1f9dd;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman elf medium skin tone:", "&#x1f9dd;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman elf medium-dark skin tone:", "&#x1f9dd;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman elf dark skin tone:", "&#x1f9dd;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person getting massage light skin tone:", "&#x1f486;&#x1f3fb;"},
+ {"", ":person getting massage medium-light skin tone:", "&#x1f486;&#x1f3fc;"},
+ {"", ":person getting massage medium skin tone:", "&#x1f486;&#x1f3fd;"},
+ {"", ":person getting massage medium-dark skin tone:", "&#x1f486;&#x1f3fe;"},
+ {"", ":person getting massage dark skin tone:", "&#x1f486;&#x1f3ff;"},
+ {"", ":man getting massage light skin tone:", "&#x1f486;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man getting massage medium-light skin tone:", "&#x1f486;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man getting massage medium skin tone:", "&#x1f486;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man getting massage medium-dark skin tone:", "&#x1f486;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man getting massage dark skin tone:", "&#x1f486;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman getting massage light skin tone:", "&#x1f486;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman getting massage medium-light skin tone:", "&#x1f486;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman getting massage medium skin tone:", "&#x1f486;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman getting massage medium-dark skin tone:", "&#x1f486;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman getting massage dark skin tone:", "&#x1f486;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person getting haircut light skin tone:", "&#x1f487;&#x1f3fb;"},
+ {"", ":person getting haircut medium-light skin tone:", "&#x1f487;&#x1f3fc;"},
+ {"", ":person getting haircut medium skin tone:", "&#x1f487;&#x1f3fd;"},
+ {"", ":person getting haircut medium-dark skin tone:", "&#x1f487;&#x1f3fe;"},
+ {"", ":person getting haircut dark skin tone:", "&#x1f487;&#x1f3ff;"},
+ {"", ":man getting haircut light skin tone:", "&#x1f487;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man getting haircut medium-light skin tone:", "&#x1f487;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man getting haircut medium skin tone:", "&#x1f487;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man getting haircut medium-dark skin tone:", "&#x1f487;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man getting haircut dark skin tone:", "&#x1f487;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman getting haircut light skin tone:", "&#x1f487;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman getting haircut medium-light skin tone:", "&#x1f487;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman getting haircut medium skin tone:", "&#x1f487;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman getting haircut medium-dark skin tone:", "&#x1f487;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman getting haircut dark skin tone:", "&#x1f487;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person walking light skin tone:", "&#x1f6b6;&#x1f3fb;"},
+ {"", ":person walking medium-light skin tone:", "&#x1f6b6;&#x1f3fc;"},
+ {"", ":person walking medium skin tone:", "&#x1f6b6;&#x1f3fd;"},
+ {"", ":person walking medium-dark skin tone:", "&#x1f6b6;&#x1f3fe;"},
+ {"", ":person walking dark skin tone:", "&#x1f6b6;&#x1f3ff;"},
+ {"", ":man walking light skin tone:", "&#x1f6b6;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man walking medium-light skin tone:", "&#x1f6b6;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man walking medium skin tone:", "&#x1f6b6;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man walking medium-dark skin tone:", "&#x1f6b6;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man walking dark skin tone:", "&#x1f6b6;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman walking light skin tone:", "&#x1f6b6;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman walking medium-light skin tone:", "&#x1f6b6;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman walking medium skin tone:", "&#x1f6b6;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman walking medium-dark skin tone:", "&#x1f6b6;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman walking dark skin tone:", "&#x1f6b6;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person running light skin tone:", "&#x1f3c3;&#x1f3fb;"},
+ {"", ":person running medium-light skin tone:", "&#x1f3c3;&#x1f3fc;"},
+ {"", ":person running medium skin tone:", "&#x1f3c3;&#x1f3fd;"},
+ {"", ":person running medium-dark skin tone:", "&#x1f3c3;&#x1f3fe;"},
+ {"", ":person running dark skin tone:", "&#x1f3c3;&#x1f3ff;"},
+ {"", ":man running light skin tone:", "&#x1f3c3;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man running medium-light skin tone:", "&#x1f3c3;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man running medium skin tone:", "&#x1f3c3;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man running medium-dark skin tone:", "&#x1f3c3;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man running dark skin tone:", "&#x1f3c3;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman running light skin tone:", "&#x1f3c3;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman running medium-light skin tone:", "&#x1f3c3;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman running medium skin tone:", "&#x1f3c3;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman running medium-dark skin tone:", "&#x1f3c3;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman running dark skin tone:", "&#x1f3c3;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman dancing light skin tone:", "&#x1f483;&#x1f3fb;"},
+ {"", ":woman dancing medium-light skin tone:", "&#x1f483;&#x1f3fc;"},
+ {"", ":woman dancing medium skin tone:", "&#x1f483;&#x1f3fd;"},
+ {"", ":woman dancing medium-dark skin tone:", "&#x1f483;&#x1f3fe;"},
+ {"", ":woman dancing dark skin tone:", "&#x1f483;&#x1f3ff;"},
+ {"", ":man dancing light skin tone:", "&#x1f57a;&#x1f3fb;"},
+ {"", ":man dancing medium-light skin tone:", "&#x1f57a;&#x1f3fc;"},
+ {"", ":man dancing medium skin tone:", "&#x1f57a;&#x1f3fd;"},
+ {"", ":man dancing medium-dark skin tone:", "&#x1f57a;&#x1f3fe;"},
+ {"", ":man dancing dark skin tone:", "&#x1f57a;&#x1f3ff;"},
+ {"", ":man in suit levitating light skin tone:", "&#x1f574;&#x1f3fb;"},
+ {"", ":man in suit levitating medium-light skin tone:", "&#x1f574;&#x1f3fc;"},
+ {"", ":man in suit levitating medium skin tone:", "&#x1f574;&#x1f3fd;"},
+ {"", ":man in suit levitating medium-dark skin tone:", "&#x1f574;&#x1f3fe;"},
+ {"", ":man in suit levitating dark skin tone:", "&#x1f574;&#x1f3ff;"},
+ {"", ":person in steamy room light skin tone:", "&#x1f9d6;&#x1f3fb;"},
+ {"", ":person in steamy room medium-light skin tone:", "&#x1f9d6;&#x1f3fc;"},
+ {"", ":person in steamy room medium skin tone:", "&#x1f9d6;&#x1f3fd;"},
+ {"", ":person in steamy room medium-dark skin tone:", "&#x1f9d6;&#x1f3fe;"},
+ {"", ":person in steamy room dark skin tone:", "&#x1f9d6;&#x1f3ff;"},
+ {"", ":man in steamy room light skin tone:", "&#x1f9d6;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man in steamy room medium-light skin tone:", "&#x1f9d6;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man in steamy room medium skin tone:", "&#x1f9d6;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man in steamy room medium-dark skin tone:", "&#x1f9d6;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man in steamy room dark skin tone:", "&#x1f9d6;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman in steamy room light skin tone:", "&#x1f9d6;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman in steamy room medium-light skin tone:", "&#x1f9d6;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman in steamy room medium skin tone:", "&#x1f9d6;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman in steamy room medium-dark skin tone:", "&#x1f9d6;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman in steamy room dark skin tone:", "&#x1f9d6;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person climbing light skin tone:", "&#x1f9d7;&#x1f3fb;"},
+ {"", ":person climbing medium-light skin tone:", "&#x1f9d7;&#x1f3fc;"},
+ {"", ":person climbing medium skin tone:", "&#x1f9d7;&#x1f3fd;"},
+ {"", ":person climbing medium-dark skin tone:", "&#x1f9d7;&#x1f3fe;"},
+ {"", ":person climbing dark skin tone:", "&#x1f9d7;&#x1f3ff;"},
+ {"", ":man climbing light skin tone:", "&#x1f9d7;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man climbing medium-light skin tone:", "&#x1f9d7;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man climbing medium skin tone:", "&#x1f9d7;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man climbing medium-dark skin tone:", "&#x1f9d7;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man climbing dark skin tone:", "&#x1f9d7;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman climbing light skin tone:", "&#x1f9d7;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman climbing medium-light skin tone:", "&#x1f9d7;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman climbing medium skin tone:", "&#x1f9d7;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman climbing medium-dark skin tone:", "&#x1f9d7;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman climbing dark skin tone:", "&#x1f9d7;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":horse racing light skin tone:", "&#x1f3c7;&#x1f3fb;"},
+ {"", ":horse racing medium-light skin tone:", "&#x1f3c7;&#x1f3fc;"},
+ {"", ":horse racing medium skin tone:", "&#x1f3c7;&#x1f3fd;"},
+ {"", ":horse racing medium-dark skin tone:", "&#x1f3c7;&#x1f3fe;"},
+ {"", ":horse racing dark skin tone:", "&#x1f3c7;&#x1f3ff;"},
+ {"", ":snowboarder light skin tone:", "&#x1f3c2;&#x1f3fb;"},
+ {"", ":snowboarder medium-light skin tone:", "&#x1f3c2;&#x1f3fc;"},
+ {"", ":snowboarder medium skin tone:", "&#x1f3c2;&#x1f3fd;"},
+ {"", ":snowboarder medium-dark skin tone:", "&#x1f3c2;&#x1f3fe;"},
+ {"", ":snowboarder dark skin tone:", "&#x1f3c2;&#x1f3ff;"},
+ {"", ":person golfing light skin tone:", "&#x1f3cc;&#x1f3fb;"},
+ {"", ":person golfing medium-light skin tone:", "&#x1f3cc;&#x1f3fc;"},
+ {"", ":person golfing medium skin tone:", "&#x1f3cc;&#x1f3fd;"},
+ {"", ":person golfing medium-dark skin tone:", "&#x1f3cc;&#x1f3fe;"},
+ {"", ":person golfing dark skin tone:", "&#x1f3cc;&#x1f3ff;"},
+ {"", ":man golfing light skin tone:", "&#x1f3cc;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man golfing medium-light skin tone:", "&#x1f3cc;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man golfing medium skin tone:", "&#x1f3cc;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man golfing medium-dark skin tone:", "&#x1f3cc;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man golfing dark skin tone:", "&#x1f3cc;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman golfing light skin tone:", "&#x1f3cc;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman golfing medium-light skin tone:", "&#x1f3cc;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman golfing medium skin tone:", "&#x1f3cc;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman golfing medium-dark skin tone:", "&#x1f3cc;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman golfing dark skin tone:", "&#x1f3cc;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person surfing light skin tone:", "&#x1f3c4;&#x1f3fb;"},
+ {"", ":person surfing medium-light skin tone:", "&#x1f3c4;&#x1f3fc;"},
+ {"", ":person surfing medium skin tone:", "&#x1f3c4;&#x1f3fd;"},
+ {"", ":person surfing medium-dark skin tone:", "&#x1f3c4;&#x1f3fe;"},
+ {"", ":person surfing dark skin tone:", "&#x1f3c4;&#x1f3ff;"},
+ {"", ":man surfing light skin tone:", "&#x1f3c4;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man surfing medium-light skin tone:", "&#x1f3c4;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man surfing medium skin tone:", "&#x1f3c4;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man surfing medium-dark skin tone:", "&#x1f3c4;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man surfing dark skin tone:", "&#x1f3c4;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman surfing light skin tone:", "&#x1f3c4;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman surfing medium-light skin tone:", "&#x1f3c4;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman surfing medium skin tone:", "&#x1f3c4;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman surfing medium-dark skin tone:", "&#x1f3c4;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman surfing dark skin tone:", "&#x1f3c4;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person rowing boat light skin tone:", "&#x1f6a3;&#x1f3fb;"},
+ {"", ":person rowing boat medium-light skin tone:", "&#x1f6a3;&#x1f3fc;"},
+ {"", ":person rowing boat medium skin tone:", "&#x1f6a3;&#x1f3fd;"},
+ {"", ":person rowing boat medium-dark skin tone:", "&#x1f6a3;&#x1f3fe;"},
+ {"", ":person rowing boat dark skin tone:", "&#x1f6a3;&#x1f3ff;"},
+ {"", ":man rowing boat light skin tone:", "&#x1f6a3;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man rowing boat medium-light skin tone:", "&#x1f6a3;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man rowing boat medium skin tone:", "&#x1f6a3;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man rowing boat medium-dark skin tone:", "&#x1f6a3;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man rowing boat dark skin tone:", "&#x1f6a3;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman rowing boat light skin tone:", "&#x1f6a3;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman rowing boat medium-light skin tone:", "&#x1f6a3;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman rowing boat medium skin tone:", "&#x1f6a3;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman rowing boat medium-dark skin tone:", "&#x1f6a3;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman rowing boat dark skin tone:", "&#x1f6a3;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person swimming light skin tone:", "&#x1f3ca;&#x1f3fb;"},
+ {"", ":person swimming medium-light skin tone:", "&#x1f3ca;&#x1f3fc;"},
+ {"", ":person swimming medium skin tone:", "&#x1f3ca;&#x1f3fd;"},
+ {"", ":person swimming medium-dark skin tone:", "&#x1f3ca;&#x1f3fe;"},
+ {"", ":person swimming dark skin tone:", "&#x1f3ca;&#x1f3ff;"},
+ {"", ":man swimming light skin tone:", "&#x1f3ca;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man swimming medium-light skin tone:", "&#x1f3ca;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man swimming medium skin tone:", "&#x1f3ca;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man swimming medium-dark skin tone:", "&#x1f3ca;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man swimming dark skin tone:", "&#x1f3ca;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman swimming light skin tone:", "&#x1f3ca;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman swimming medium-light skin tone:", "&#x1f3ca;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman swimming medium skin tone:", "&#x1f3ca;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman swimming medium-dark skin tone:", "&#x1f3ca;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman swimming dark skin tone:", "&#x1f3ca;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person bouncing ball light skin tone:", "&#x26f9;&#x1f3fb;"},
+ {"", ":person bouncing ball medium-light skin tone:", "&#x26f9;&#x1f3fc;"},
+ {"", ":person bouncing ball medium skin tone:", "&#x26f9;&#x1f3fd;"},
+ {"", ":person bouncing ball medium-dark skin tone:", "&#x26f9;&#x1f3fe;"},
+ {"", ":person bouncing ball dark skin tone:", "&#x26f9;&#x1f3ff;"},
+ {"", ":man bouncing ball light skin tone:", "&#x26f9;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man bouncing ball medium-light skin tone:", "&#x26f9;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man bouncing ball medium skin tone:", "&#x26f9;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man bouncing ball medium-dark skin tone:", "&#x26f9;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man bouncing ball dark skin tone:", "&#x26f9;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman bouncing ball light skin tone:", "&#x26f9;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman bouncing ball medium-light skin tone:", "&#x26f9;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman bouncing ball medium skin tone:", "&#x26f9;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman bouncing ball medium-dark skin tone:", "&#x26f9;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman bouncing ball dark skin tone:", "&#x26f9;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person lifting weights light skin tone:", "&#x1f3cb;&#x1f3fb;"},
+ {"", ":person lifting weights medium-light skin tone:", "&#x1f3cb;&#x1f3fc;"},
+ {"", ":person lifting weights medium skin tone:", "&#x1f3cb;&#x1f3fd;"},
+ {"", ":person lifting weights medium-dark skin tone:", "&#x1f3cb;&#x1f3fe;"},
+ {"", ":person lifting weights dark skin tone:", "&#x1f3cb;&#x1f3ff;"},
+ {"", ":man lifting weights light skin tone:", "&#x1f3cb;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man lifting weights medium-light skin tone:", "&#x1f3cb;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man lifting weights medium skin tone:", "&#x1f3cb;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man lifting weights medium-dark skin tone:", "&#x1f3cb;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man lifting weights dark skin tone:", "&#x1f3cb;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman lifting weights light skin tone:", "&#x1f3cb;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman lifting weights medium-light skin tone:", "&#x1f3cb;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman lifting weights medium skin tone:", "&#x1f3cb;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman lifting weights medium-dark skin tone:", "&#x1f3cb;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman lifting weights dark skin tone:", "&#x1f3cb;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person biking light skin tone:", "&#x1f6b4;&#x1f3fb;"},
+ {"", ":person biking medium-light skin tone:", "&#x1f6b4;&#x1f3fc;"},
+ {"", ":person biking medium skin tone:", "&#x1f6b4;&#x1f3fd;"},
+ {"", ":person biking medium-dark skin tone:", "&#x1f6b4;&#x1f3fe;"},
+ {"", ":person biking dark skin tone:", "&#x1f6b4;&#x1f3ff;"},
+ {"", ":man biking light skin tone:", "&#x1f6b4;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man biking medium-light skin tone:", "&#x1f6b4;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man biking medium skin tone:", "&#x1f6b4;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man biking medium-dark skin tone:", "&#x1f6b4;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man biking dark skin tone:", "&#x1f6b4;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman biking light skin tone:", "&#x1f6b4;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman biking medium-light skin tone:", "&#x1f6b4;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman biking medium skin tone:", "&#x1f6b4;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman biking medium-dark skin tone:", "&#x1f6b4;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman biking dark skin tone:", "&#x1f6b4;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person mountain biking light skin tone:", "&#x1f6b5;&#x1f3fb;"},
+ {"", ":person mountain biking medium-light skin tone:", "&#x1f6b5;&#x1f3fc;"},
+ {"", ":person mountain biking medium skin tone:", "&#x1f6b5;&#x1f3fd;"},
+ {"", ":person mountain biking medium-dark skin tone:", "&#x1f6b5;&#x1f3fe;"},
+ {"", ":person mountain biking dark skin tone:", "&#x1f6b5;&#x1f3ff;"},
+ {"", ":man mountain biking light skin tone:", "&#x1f6b5;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man mountain biking medium-light skin tone:", "&#x1f6b5;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man mountain biking medium skin tone:", "&#x1f6b5;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man mountain biking medium-dark skin tone:", "&#x1f6b5;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man mountain biking dark skin tone:", "&#x1f6b5;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman mountain biking light skin tone:", "&#x1f6b5;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman mountain biking medium-light skin tone:", "&#x1f6b5;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman mountain biking medium skin tone:", "&#x1f6b5;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman mountain biking medium-dark skin tone:", "&#x1f6b5;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman mountain biking dark skin tone:", "&#x1f6b5;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person cartwheeling light skin tone:", "&#x1f938;&#x1f3fb;"},
+ {"", ":person cartwheeling medium-light skin tone:", "&#x1f938;&#x1f3fc;"},
+ {"", ":person cartwheeling medium skin tone:", "&#x1f938;&#x1f3fd;"},
+ {"", ":person cartwheeling medium-dark skin tone:", "&#x1f938;&#x1f3fe;"},
+ {"", ":person cartwheeling dark skin tone:", "&#x1f938;&#x1f3ff;"},
+ {"", ":man cartwheeling light skin tone:", "&#x1f938;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man cartwheeling medium-light skin tone:", "&#x1f938;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man cartwheeling medium skin tone:", "&#x1f938;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man cartwheeling medium-dark skin tone:", "&#x1f938;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man cartwheeling dark skin tone:", "&#x1f938;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman cartwheeling light skin tone:", "&#x1f938;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman cartwheeling medium-light skin tone:", "&#x1f938;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman cartwheeling medium skin tone:", "&#x1f938;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman cartwheeling medium-dark skin tone:", "&#x1f938;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman cartwheeling dark skin tone:", "&#x1f938;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person playing water polo light skin tone:", "&#x1f93d;&#x1f3fb;"},
+ {"", ":person playing water polo medium-light skin tone:", "&#x1f93d;&#x1f3fc;"},
+ {"", ":person playing water polo medium skin tone:", "&#x1f93d;&#x1f3fd;"},
+ {"", ":person playing water polo medium-dark skin tone:", "&#x1f93d;&#x1f3fe;"},
+ {"", ":person playing water polo dark skin tone:", "&#x1f93d;&#x1f3ff;"},
+ {"", ":man playing water polo light skin tone:", "&#x1f93d;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man playing water polo medium-light skin tone:", "&#x1f93d;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man playing water polo medium skin tone:", "&#x1f93d;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man playing water polo medium-dark skin tone:", "&#x1f93d;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man playing water polo dark skin tone:", "&#x1f93d;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman playing water polo light skin tone:", "&#x1f93d;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman playing water polo medium-light skin tone:", "&#x1f93d;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman playing water polo medium skin tone:", "&#x1f93d;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman playing water polo medium-dark skin tone:", "&#x1f93d;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman playing water polo dark skin tone:", "&#x1f93d;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person playing handball light skin tone:", "&#x1f93e;&#x1f3fb;"},
+ {"", ":person playing handball medium-light skin tone:", "&#x1f93e;&#x1f3fc;"},
+ {"", ":person playing handball medium skin tone:", "&#x1f93e;&#x1f3fd;"},
+ {"", ":person playing handball medium-dark skin tone:", "&#x1f93e;&#x1f3fe;"},
+ {"", ":person playing handball dark skin tone:", "&#x1f93e;&#x1f3ff;"},
+ {"", ":man playing handball light skin tone:", "&#x1f93e;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man playing handball medium-light skin tone:", "&#x1f93e;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man playing handball medium skin tone:", "&#x1f93e;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man playing handball medium-dark skin tone:", "&#x1f93e;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man playing handball dark skin tone:", "&#x1f93e;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman playing handball light skin tone:", "&#x1f93e;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman playing handball medium-light skin tone:", "&#x1f93e;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman playing handball medium skin tone:", "&#x1f93e;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman playing handball medium-dark skin tone:", "&#x1f93e;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman playing handball dark skin tone:", "&#x1f93e;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person juggling light skin tone:", "&#x1f939;&#x1f3fb;"},
+ {"", ":person juggling medium-light skin tone:", "&#x1f939;&#x1f3fc;"},
+ {"", ":person juggling medium skin tone:", "&#x1f939;&#x1f3fd;"},
+ {"", ":person juggling medium-dark skin tone:", "&#x1f939;&#x1f3fe;"},
+ {"", ":person juggling dark skin tone:", "&#x1f939;&#x1f3ff;"},
+ {"", ":man juggling light skin tone:", "&#x1f939;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man juggling medium-light skin tone:", "&#x1f939;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man juggling medium skin tone:", "&#x1f939;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man juggling medium-dark skin tone:", "&#x1f939;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man juggling dark skin tone:", "&#x1f939;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman juggling light skin tone:", "&#x1f939;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman juggling medium-light skin tone:", "&#x1f939;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman juggling medium skin tone:", "&#x1f939;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman juggling medium-dark skin tone:", "&#x1f939;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman juggling dark skin tone:", "&#x1f939;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person in lotus position light skin tone:", "&#x1f9d8;&#x1f3fb;"},
+ {"", ":person in lotus position medium-light skin tone:", "&#x1f9d8;&#x1f3fc;"},
+ {"", ":person in lotus position medium skin tone:", "&#x1f9d8;&#x1f3fd;"},
+ {"", ":person in lotus position medium-dark skin tone:", "&#x1f9d8;&#x1f3fe;"},
+ {"", ":person in lotus position dark skin tone:", "&#x1f9d8;&#x1f3ff;"},
+ {"", ":man in lotus position light skin tone:", "&#x1f9d8;&#x1f3fb;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man in lotus position medium-light skin tone:", "&#x1f9d8;&#x1f3fc;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man in lotus position medium skin tone:", "&#x1f9d8;&#x1f3fd;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man in lotus position medium-dark skin tone:", "&#x1f9d8;&#x1f3fe;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":man in lotus position dark skin tone:", "&#x1f9d8;&#x1f3ff;&#x200d;&#x2642;&#xfe0f;"},
+ {"", ":woman in lotus position light skin tone:", "&#x1f9d8;&#x1f3fb;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman in lotus position medium-light skin tone:", "&#x1f9d8;&#x1f3fc;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman in lotus position medium skin tone:", "&#x1f9d8;&#x1f3fd;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman in lotus position medium-dark skin tone:", "&#x1f9d8;&#x1f3fe;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":woman in lotus position dark skin tone:", "&#x1f9d8;&#x1f3ff;&#x200d;&#x2640;&#xfe0f;"},
+ {"", ":person taking bath light skin tone:", "&#x1f6c0;&#x1f3fb;"},
+ {"", ":person taking bath medium-light skin tone:", "&#x1f6c0;&#x1f3fc;"},
+ {"", ":person taking bath medium skin tone:", "&#x1f6c0;&#x1f3fd;"},
+ {"", ":person taking bath medium-dark skin tone:", "&#x1f6c0;&#x1f3fe;"},
+ {"", ":person taking bath dark skin tone:", "&#x1f6c0;&#x1f3ff;"},
+ {"", ":person in bed light skin tone:", "&#x1f6cc;&#x1f3fb;"},
+ {"", ":person in bed medium-light skin tone:", "&#x1f6cc;&#x1f3fc;"},
+ {"", ":person in bed medium skin tone:", "&#x1f6cc;&#x1f3fd;"},
+ {"", ":person in bed medium-dark skin tone:", "&#x1f6cc;&#x1f3fe;"},
+ {"", ":person in bed dark skin tone:", "&#x1f6cc;&#x1f3ff;"},
+ {"", ":light skin tone:", "&#x1f3fb;"},
+ {"", ":medium-light skin tone:", "&#x1f3fc;"},
+ {"", ":medium skin tone:", "&#x1f3fd;"},
+ {"", ":medium-dark skin tone:", "&#x1f3fe;"},
+ {"", ":dark skin tone:", "&#x1f3ff;"},
+}
+;
+
+static const int g_numEmojiEntities = (int)(sizeof(g_emojiEntities)/ sizeof(*g_emojiEntities));
+
+EmojiEntityMapper *EmojiEntityMapper::s_instance = 0;
+
+EmojiEntityMapper::EmojiEntityMapper()
+{
+ m_name2symGh = new QDict<int>(1009);
+ m_name2symUni = new QDict<int>(1009);
+ m_name2symStripUni = new QDict<int>(10);
+ m_name2symGh->setAutoDelete(TRUE);
+ m_name2symUni->setAutoDelete(TRUE);
+ m_name2symStripUni->setAutoDelete(TRUE);
+ // 2 loops to be able to give precedence to the unicodeName (CLDR)
+ for (int i = 0; i < g_numEmojiEntities; i++)
+ {
+ if (strlen(g_emojiEntities[i].githubName)) m_name2symGh->insert(g_emojiEntities[i].githubName, new int(i+1));
+ }
+ for (int i = 0; i < g_numEmojiEntities; i++)
+ {
+ m_name2symUni->insert(g_emojiEntities[i].unicodeName, new int(-(i+1)));
+ QCString strippedUnicodeName = g_emojiEntities[i].unicodeName;
+ // A ring -> a ring
+ strippedUnicodeName = substitute(strippedUnicodeName,"\xc3\x85","\xc3\xa5");
+ if (strippedUnicodeName != g_emojiEntities[i].unicodeName)
+ {
+ m_name2symStripUni->insert(strippedUnicodeName, new int(-(i+1)));
+ }
+ // a ring -> a
+ strippedUnicodeName = substitute(strippedUnicodeName,"\xc3\xa5","a");
+ // c cedille -> c
+ strippedUnicodeName = substitute(strippedUnicodeName,"\xc3\xa7","c");
+ // o circumflex -> o
+ strippedUnicodeName = substitute(strippedUnicodeName,"\xc3\xb4","o");
+ // e acute -> e
+ strippedUnicodeName = substitute(strippedUnicodeName,"\xc3\xa9","e");
+ // a tilde -> a
+ strippedUnicodeName = substitute(strippedUnicodeName,"\xc3\xa3","a");
+ // i acute -> i
+ strippedUnicodeName = substitute(strippedUnicodeName,"\xc3\xad","i");
+ if (strippedUnicodeName != g_emojiEntities[i].unicodeName)
+ {
+ m_name2symStripUni->insert(strippedUnicodeName, new int(-(i+1)));
+ }
+ }
+}
+
+EmojiEntityMapper::~EmojiEntityMapper()
+{
+ delete m_name2symGh;
+ delete m_name2symUni;
+ delete m_name2symStripUni;
+}
+
+/** Returns the one and only instance of the Emoji entity mapper */
+EmojiEntityMapper *EmojiEntityMapper::instance()
+{
+ if (s_instance==0)
+ {
+ s_instance = new EmojiEntityMapper;
+ }
+ return s_instance;
+}
+
+/** Deletes the one and only instance of the Emoji entity mapper */
+void EmojiEntityMapper::deleteInstance()
+{
+ delete s_instance;
+ s_instance=0;
+}
+
+
+/*! @brief Access routine to the UTF8 code of the Emoji entity
+ *
+ * @param symb Code of the requested Emoji entity
+ * @param useInPrintf If TRUE the result will be escaped such that it can be
+ * used in a printf string pattern
+ * @return the UTF8 code of the Emoji entity,
+ * in case the UTF code is unknown \c NULL is returned.
+ */
+const char *EmojiEntityMapper::utf8(int symb) const
+{
+ if (symb > 0) return g_emojiEntities[symb-1].githubName;
+ else if (symb < 0) return g_emojiEntities[abs(symb)-1].unicodeName;
+ else return NULL;
+}
+
+/*! @brief Access routine to the html code of the Emoji entity
+ *
+ * @param symb Code of the requested Emoji entity
+ * @param useInPrintf If TRUE the result will be escaped such that it can be
+ * used in a printf string pattern
+ * @return the html representation of the Emoji entity,
+ * in case the html code is unknown \c NULL is returned.
+ */
+const char *EmojiEntityMapper::html(int symb) const
+{
+ return g_emojiEntities[abs(symb) - 1].code;
+}
+
+/*! @brief Access routine to the XML code of the Emoji entity
+ *
+ * @param symb Code of the requested Emoji entity
+ * @return the XML code of the Emoji entity,
+ * in case the XML code is unknown \c NULL is returned.
+ */
+const char *EmojiEntityMapper::xml(int symb) const
+{
+ return g_emojiEntities[abs(symb) - 1].code;
+}
+/*! @brief Access routine to the docbook code of the Emoji entity
+ *
+ * @param symb Code of the requested Emoji entity
+ * @return the docbook code of the Emoji entity,
+ * in case the docbook code is unknown \c NULL is returned.
+ */
+const char *EmojiEntityMapper::docbook(int symb) const
+{
+ return g_emojiEntities[abs(symb) - 1].code;
+}
+
+/*! @brief Access routine to the LaTeX code of the Emoji entity
+ *
+ * @param symb Code of the requested Emoji entity
+ * @return the LaTeX code of the Emoji entity,
+ * in case the LaTeX code is unknown \c NULL is returned.
+ */
+const char *EmojiEntityMapper::latex(int symb) const
+{
+ if (symb > 0) return g_emojiEntities[symb-1].githubName;
+ else if (symb < 0) return g_emojiEntities[abs(symb)-1].unicodeName;
+ else return NULL;
+}
+
+/*! @brief Access routine to the man code of the Emoji entity
+ *
+ * @param symb Code of the requested Emoji entity
+ * @return the man of the Emoji entity,
+ * in case the man code is unknown \c NULL is returned.
+ */
+const char *EmojiEntityMapper::man(int symb) const
+{
+ if (symb > 0) return g_emojiEntities[symb-1].githubName;
+ else if (symb < 0) return g_emojiEntities[abs(symb)-1].unicodeName;
+ else return NULL;
+}
+
+/*! @brief Access routine to the RTF code of the Emoji entity
+ *
+ * @param symb Code of the requested Emoji entity
+ * @return the RTF of the Emoji entity,
+ * in case the RTF code is unknown \c NULL is returned.
+ */
+const char *EmojiEntityMapper::rtf(int symb) const
+{
+ return g_emojiEntities[abs(symb) - 1].code;
+}
+
+/*! @brief Access routine to the perl struct with the perl code of the Emoji entity
+ *
+ * @param symb Code of the requested Emoji entity
+ * @return the pointer to perl struct with the perl code of the Emoji entity,
+ * in case the perl code does not exists the NULL pointer is entered in the
+ * \c symb field and in the `DocSymbol::Perl_unknown` in the \c type field.
+ */
+const char *EmojiEntityMapper::perl(int symb) const
+{
+ if (symb > 0) return g_emojiEntities[symb-1].githubName;
+ else if (symb < 0) return g_emojiEntities[abs(symb)-1].unicodeName;
+ else return NULL;
+}
+
+/*!
+ * @brief Give code of the requested Emoji entity name
+ * @param symName Emoji entity name
+ * @return the code for the requested Emoji entity name,
+ * in case the requested Emoji item does not exist `0` is returned.
+ */
+int EmojiEntityMapper::name2sym(const QCString &symName) const
+{
+ QCString locSymName = symName.lower();
+ int *pSymb = m_name2symUni->find(locSymName);
+ if (!pSymb) pSymb = m_name2symStripUni->find(locSymName);
+ if (!pSymb) pSymb = m_name2symGh->find(locSymName);
+ return pSymb ? (*pSymb) : 0;
+}
+void EmojiEntityMapper::writeEmojiFile(QFile &file)
+{
+ FTextStream t(&file);
+
+ for (int i = 0; i < g_numEmojiEntities; i++)
+ {
+ t << g_emojiEntities[i].unicodeName << endl;
+ }
+ for (int i = 0; i < g_numEmojiEntities; i++)
+ {
+ if (strlen(g_emojiEntities[i].githubName)) t << g_emojiEntities[i].githubName << endl;
+ }
+}
+/*! @brief Access routine to the code of the Emoji entity
+ *
+ * @param symb Code of the requested Emoji entity
+ * @return the code of the Emoji entity,
+ */
+const char *EmojiEntityMapper::code(int symb) const
+{
+ return g_emojiEntities[abs(symb) - 1].code;
+}
+
+/*! @brief Access routine to the text of the Emoji entity
+ *
+ * @param symb Code of the requested Emoji entity
+ * @return the text of the Emoji entity,
+ */
+const char *EmojiEntityMapper::text(int symb) const
+{
+ if (symb > 0) return g_emojiEntities[symb-1].githubName;
+ else if (symb < 0) return g_emojiEntities[abs(symb)-1].unicodeName;
+ else return NULL;
+}
+/// \file
+/// to generate the content of the table with the emoji definitions and code the following procedure has been used:
+///
+/// <pre>
+/// wget https://api.github.com/emojis
+/// wget https://www.unicode.org/emoji/charts/full-emoji-list.html
+/// wget http://www.unicode.org/emoji/charts/full-emoji-modifiers.html
+///
+/// grep -v "[{}]" emojis | sed -e "s/https:.*\///" | sed -e "s%.png.*%%" | sed -e "s/ //" | sed -e "s/://" | tr ' ' '\n' | tr '\042' ' ' | sed -e "s/ //g" > emojis.res
+///
+/// grep -A 14 "<tr><td class='rchars'>[0-9]" full-emoji-list.html | grep -v "class='andr" | grep -v "class='[r]*chars'" | sed -e "s/<[^>]*>//g" | sed -e "s/://" | tr [A-Z] [a-z] | sed -e "s/^[^a-z][^a-z][^a-z] //" | grep -v "\-\-" | sed -e "s/&amp;/\&/" | sed -e "s/ u+/;\&#x/g" | sed -e "s/^u+\(.*\)/\&#x\1;/" > full.res
+/// grep -A 14 "<tr><td class='rchars'>[0-9]" full-emoji-modifiers.html | grep -v "class='andr" | grep -v "class='[r]*chars'" | sed -e "s/<[^>]*>//g" | sed -e "s/://" | tr [A-Z] [a-z] | sed -e "s/^[^a-z][^a-z][^a-z] //" | grep -v "\-\-" | sed -e "s/&amp;/\&/" | sed -e "s/ u+/;\&#x/g" | sed -e "s/^u+\(.*\)/\&#x\1;/" >> full.res
+///
+///
+/// python transform.py full.res emojis.res > transform.res
+/// </pre>
+/// where the contents of `transform.py` is:
+/// \code{.py}
+///import sys
+///
+///# read first file (unicode names)
+///# read second files (github names)
+///
+///uniFile = open(sys.argv[1])
+///emoFile = open(sys.argv[2])
+///
+///uniLines = uniFile.readlines()
+///emoLines = emoFile.readlines()
+///
+///uniFile.close()
+///emoFile.close()
+///
+///uniMaxLen = 0
+///emoMaxLen = 0
+///
+///for i in range(0, len(uniLines), 2):
+/// if (len(uniLines[i]) > uniMaxLen):
+/// uniMaxLen = len(uniLines[i])
+///
+///for i in range(0, len(emoLines), 2):
+/// if (len(emoLines[i]) > emoMaxLen):
+/// emoMaxLen = len(emoLines[i])
+///
+///uniProcessed = [False]*(len(uniLines) / 2)
+///
+///# replace "strange" single and double quotes.
+///for i in range(0, len(uniLines), 2):
+/// uniLines[i+1] = uniLines[i+1].replace("\342\200\234",'\\"').replace("\342\200\235",'\\"')
+/// uniLines[i+1] = uniLines[i+1].replace("\342\200\231","'").replace("\342\200\231","'")
+///
+///for i in range(0, len(emoLines), 2):
+/// emoCode = emoLines[i+1].split('-')
+/// found = False
+/// emoCode = [e.replace('\n', '') for e in emoCode]
+/// for u in range(0, len(uniLines), 2):
+/// cnt = 0
+/// beg = 0
+/// for j in emoCode:
+/// pos = uniLines[u].find(j, beg)
+/// if pos != -1:
+/// # in case of 'u+': 2, '&#x': 3
+/// if (beg == 0 and j == emoCode[0] and pos != 3):
+/// break
+/// cnt += 1
+/// beg = pos + 1
+/// if (cnt == len(emoCode)):
+/// uniProcessed[u/2] = True
+/// found = True
+/// print ' {":'+emoLines[i].replace('\n','')+':",'+(emoMaxLen-len(emoLines[i].replace('\n',''))+1)*' '+'":'+uniLines[u+1].replace('\n','')+':",'+(uniMaxLen-len(uniLines[u+1].replace('\n',''))+1)*' '+'"'+uniLines[u].replace('\n','')+'"},'
+/// break
+/// if not found:
+/// # github name but no unicode version
+/// # print ' ONLY_GITHUB_NAME "'+emoLines[i].replace('\n','')+'" "'+emoLines[i+1].replace('\n','')+'"'
+/// pass
+///
+///for u in range(0, len(uniProcessed)):
+/// if not uniProcessed[u]:
+/// print ' {"",'+(emoMaxLen+1)*' '+'":'+uniLines[u*2+1].replace('\n','')+':",'+(uniMaxLen-len(uniLines[u*2+1].replace('\n',''))+1)*' '+'"'+uniLines[u*2].replace('\n','')+'"},'
+///
+/// \endcode
diff --git a/src/emoji.h b/src/emoji.h
new file mode 100644
index 0000000..daa63e8
--- /dev/null
+++ b/src/emoji.h
@@ -0,0 +1,50 @@
+/******************************************************************************
+ *
+ * Copyright (C) 1997-2015 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ */
+#ifndef EMOJIENTITY_H
+#define EMOJIENTITY_H
+
+#include <qdict.h>
+#include <qfile.h>
+
+class FTextStream;
+
+/** @brief Singleton helper class to map emoji entities to other formats */
+class EmojiEntityMapper
+{
+ public:
+ static EmojiEntityMapper *instance();
+ static void deleteInstance();
+ int name2sym(const QCString &symName) const;
+ const char *utf8(int symb) const;
+ const char *html(int symb) const;
+ const char *xml(int symb) const;
+ const char *docbook(int symb) const;
+ const char *latex(int symb) const;
+ const char *man(int symb) const;
+ const char *rtf(int symb) const;
+ const char *perl(int symb) const;
+ const char *code(int symb) const;
+ const char *text(int symb) const;
+ void writeEmojiFile(QFile &file);
+ private:
+ EmojiEntityMapper();
+ ~EmojiEntityMapper();
+ static EmojiEntityMapper *s_instance;
+ QDict<int> *m_name2symGh;
+ QDict<int> *m_name2symUni;
+ QDict<int> *m_name2symStripUni;
+};
+
+#endif
diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp
index 6e0c62d..0af5b16 100644
--- a/src/htmldocvisitor.cpp
+++ b/src/htmldocvisitor.cpp
@@ -34,6 +34,7 @@
#include "filedef.h"
#include "memberdef.h"
#include "htmlentity.h"
+#include "emoji.h"
#include "plantuml.h"
static const int NUM_HTML_LIST_TYPES = 4;
@@ -234,6 +235,20 @@ void HtmlDocVisitor::visit(DocSymbol *s)
}
}
+void HtmlDocVisitor::visit(DocEmoji *s)
+{
+ if (m_hide) return;
+ const char *res = EmojiEntityMapper::instance()->html(s->emoji());
+ if (res)
+ {
+ m_t << res;
+ }
+ else
+ {
+ err("HTML: non supported Emoji-entity found: %s\n",EmojiEntityMapper::instance()->html(s->emoji()));
+ }
+}
+
void HtmlDocVisitor::writeObfuscatedMailAddress(const QCString &url)
{
m_t << "<a href=\"#\" onclick=\"location.href='mai'+'lto:'";
diff --git a/src/htmldocvisitor.h b/src/htmldocvisitor.h
index 2ff9f75..7184f0f 100644
--- a/src/htmldocvisitor.h
+++ b/src/htmldocvisitor.h
@@ -43,6 +43,7 @@ class HtmlDocVisitor : public DocVisitor
void visit(DocLinkedWord *);
void visit(DocWhiteSpace *);
void visit(DocSymbol *);
+ void visit(DocEmoji *);
void visit(DocURL *);
void visit(DocLineBreak *);
void visit(DocHorRuler *);
diff --git a/src/htmlentity.cpp b/src/htmlentity.cpp
index 3d95705..e95b817 100644
--- a/src/htmlentity.cpp
+++ b/src/htmlentity.cpp
@@ -314,7 +314,8 @@ static struct htmlEntityInfo
{ SYM(Quot), "\"", "\"", "\"", "&quot;", "\"", "\"", "\"", { "\"", DocSymbol::Perl_char }},
{ SYM(Minus), "-", "-", "-", "-", "-\\/", "-", "-", { "-", DocSymbol::Perl_char }},
{ SYM(Plus), "+", "+", "+", "+", "+", "+", "+", { "+", DocSymbol::Perl_char }},
- { SYM(Dot), ".", ".", ".", ".", ".", ".", ".", { ".", DocSymbol::Perl_char }}
+ { SYM(Dot), ".", ".", ".", ".", ".", ".", ".", { ".", DocSymbol::Perl_char }},
+ { SYM(Colon), ":", ":", ":", ":", ":", ":", ":", { ":", DocSymbol::Perl_char }}
};
static const int g_numHtmlEntities = (int)(sizeof(g_htmlEntities)/ sizeof(*g_htmlEntities));
diff --git a/src/latexdocvisitor.h b/src/latexdocvisitor.h
index 881863a..7ea8ae1 100644
--- a/src/latexdocvisitor.h
+++ b/src/latexdocvisitor.h
@@ -42,6 +42,7 @@ class LatexDocVisitor : public DocVisitor
void visit(DocLinkedWord *);
void visit(DocWhiteSpace *);
void visit(DocSymbol *);
+ void visit(DocEmoji *);
void visit(DocURL *);
void visit(DocLineBreak *);
void visit(DocHorRuler *);
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index 50d4242..06f2baf 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -485,6 +485,10 @@ static void writeDefaultHeaderPart1(FTextStream &t)
if (Config_getBool(LATEX_BATCHMODE))
t << "\\batchmode\n";
+ // to overcome problems wit too many open files
+ t << "\\let\\mypdfximage\\pdfximage"
+ "\\def\\pdfximage{\\immediate\\mypdfximage}";
+
// Set document class depending on configuration
QCString documentClass;
if (Config_getBool(COMPACT_LATEX))
@@ -564,6 +568,18 @@ static void writeDefaultHeaderPart1(FTextStream &t)
"\\newcommand{\\+}{\\discretionary{\\mbox{\\scriptsize$\\hookleftarrow$}}{}{}}\n"
"\n";
+ QCString emojiDir=Config_getString(LATEX_EMOJI_DIRECTORY);
+ if (emojiDir.isEmpty()) emojiDir = ".";
+ emojiDir = substitute(emojiDir,"\\","/");
+ t << "% Arguments of doxygenemoji:\n"
+ "% 1) ':<text>:' form of the emoji, already \"LaTeX\"-escaped\n"
+ "% 2) unicode of the emoji inlorm like: 'U+1F603' or 'U+0031U+FE0FU+20E3' depending on the emoji\n"
+ "% 3) file name in form like: '1F603' or '0031-FE0F-20E3' depending on the emoji\n"
+ "% in case image exist use this otherwise use the ':<text>:' form\n";
+ t << "\\newcommand{\\doxygenemoji}[3]{%\n"
+ " \\IfFileExists{" << emojiDir << "/#3.png}{\\raisebox{-0.1em}{\\includegraphics[height=0.9em]{" << emojiDir << "/#3.png}}}{#1}%\n"
+ "}\n";
+
// Define page & text layout
QCString paperName=Config_getEnum(PAPER_TYPE);
// "a4wide" package is obsolete (see bug 563698)
diff --git a/src/mandocvisitor.cpp b/src/mandocvisitor.cpp
index e09cc8e..8a9e6c1 100644
--- a/src/mandocvisitor.cpp
+++ b/src/mandocvisitor.cpp
@@ -30,6 +30,7 @@
#include "parserintf.h"
#include "filedef.h"
#include "htmlentity.h"
+#include "emoji.h"
ManDocVisitor::ManDocVisitor(FTextStream &t,CodeOutputInterface &ci,
const char *langExt)
@@ -89,6 +90,22 @@ void ManDocVisitor::visit(DocSymbol *s)
m_firstCol=FALSE;
}
+void ManDocVisitor::visit(DocEmoji *s)
+{
+ if (m_hide) return;
+ const char *res = EmojiEntityMapper::instance()->man(s->emoji());
+ if (res)
+ {
+ m_t << res;
+ }
+ else
+ {
+ // no error or warning to be supplied
+ // err("man: non supported HTML-entity found: &%s;\n",get_symbol_item(s->emoji()));
+ }
+ m_firstCol=FALSE;
+}
+
void ManDocVisitor::visit(DocURL *u)
{
if (m_hide) return;
diff --git a/src/mandocvisitor.h b/src/mandocvisitor.h
index d248c87..8efc223 100644
--- a/src/mandocvisitor.h
+++ b/src/mandocvisitor.h
@@ -40,6 +40,7 @@ class ManDocVisitor : public DocVisitor
void visit(DocLinkedWord *);
void visit(DocWhiteSpace *);
void visit(DocSymbol *);
+ void visit(DocEmoji *);
void visit(DocURL *);
void visit(DocLineBreak *);
void visit(DocHorRuler *);
diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp
index 5b4b6ea..27c2fa8 100644
--- a/src/perlmodgen.cpp
+++ b/src/perlmodgen.cpp
@@ -43,6 +43,7 @@
#include "section.h"
#include "util.h"
#include "htmlentity.h"
+#include "emoji.h"
#define PERLOUTPUT_MAX_INDENTATION 40
@@ -299,6 +300,7 @@ public:
void visit(DocLinkedWord *);
void visit(DocWhiteSpace *);
void visit(DocSymbol *);
+ void visit(DocEmoji *);
void visit(DocURL *);
void visit(DocLineBreak *);
void visit(DocHorRuler *);
@@ -609,6 +611,11 @@ void PerlModDocVisitor::visit(DocSymbol *sy)
err("perl: non supported HTML-entity found: %s\n",HtmlEntityMapper::instance()->html(sy->symbol(),TRUE));
}
}
+void PerlModDocVisitor::visit(DocEmoji *sy)
+{
+ enterText();
+ m_output.add(EmojiEntityMapper::instance()->perl(sy->emoji()));
+}
void PerlModDocVisitor::visit(DocURL *u)
{
diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h
index 8d9a2b9..44dd884 100644
--- a/src/printdocvisitor.h
+++ b/src/printdocvisitor.h
@@ -22,6 +22,7 @@
#include <qglobal.h>
#include "docvisitor.h"
#include "htmlentity.h"
+#include "emoji.h"
#include "message.h"
/*! Concrete visitor implementation for pretty printing */
@@ -68,6 +69,19 @@ class PrintDocVisitor : public DocVisitor
printf("print: non supported HTML-entity found: %s\n",HtmlEntityMapper::instance()->html(s->symbol(),TRUE));
}
}
+ void visit(DocEmoji *s)
+ {
+ indent_leaf();
+ const char *res = EmojiEntityMapper::instance()->utf8(s->emoji());
+ if (res)
+ {
+ printf("%s",res);
+ }
+ else
+ {
+ printf("print: non supported Emoji-entity found: %s\n",EmojiEntityMapper::instance()->html(s->emoji()));
+ }
+ }
void visit(DocURL *u)
{
indent_leaf();
diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp
index 7fbfdc8..941b937 100644
--- a/src/rtfdocvisitor.cpp
+++ b/src/rtfdocvisitor.cpp
@@ -34,6 +34,7 @@
#include "filedef.h"
#include "config.h"
#include "htmlentity.h"
+#include "emoji.h"
#include "plantuml.h"
//#define DBG_RTF(x) m_t << x
@@ -136,6 +137,48 @@ void RTFDocVisitor::visit(DocSymbol *s)
m_lastIsPara=FALSE;
}
+void RTFDocVisitor::visit(DocEmoji *s)
+{
+ if (m_hide) return;
+ DBG_RTF("{\\comment RTFDocVisitor::visit(DocEmoji)}\n");
+ const char *res = EmojiEntityMapper::instance()->rtf(s->emoji());
+ if (res)
+ {
+ const char *p = res;
+ int val = 0;
+ int val1 = 0;
+ while (*p)
+ {
+ switch(*p)
+ {
+ case '&': case '#': case 'x':
+ break;
+ case ';':
+ val1 = val;
+ val = 0xd800 + ( ( val1 - 0x10000 ) & 0xffc00 ) / 0x400 - 0x10000;
+ m_t << "\\u" << val << "?";
+ val = 0xdC00 + ( ( val1 - 0x10000 ) & 0x3ff ) - 0x10000 ;
+ m_t << "\\u" << val << "?";
+ val = 0;
+ break;
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ val = val * 16 + *p - '0';
+ break;
+ case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+ val = val * 16 + *p - 'a' + 10;
+ break;
+ }
+ p++;
+ }
+ }
+ else
+ {
+ err("RTF: non supported Emoji-entity found: %s\n",EmojiEntityMapper::instance()->html(s->emoji()));
+ }
+ m_lastIsPara=FALSE;
+}
+
void RTFDocVisitor::visit(DocURL *u)
{
if (m_hide) return;
diff --git a/src/rtfdocvisitor.h b/src/rtfdocvisitor.h
index 1e927e7..ac78a85 100644
--- a/src/rtfdocvisitor.h
+++ b/src/rtfdocvisitor.h
@@ -40,6 +40,7 @@ class RTFDocVisitor : public DocVisitor
void visit(DocLinkedWord *);
void visit(DocWhiteSpace *);
void visit(DocSymbol *);
+ void visit(DocEmoji *);
void visit(DocURL *);
void visit(DocLineBreak *);
void visit(DocHorRuler *);
diff --git a/src/textdocvisitor.cpp b/src/textdocvisitor.cpp
index c899232..691e426 100644
--- a/src/textdocvisitor.cpp
+++ b/src/textdocvisitor.cpp
@@ -21,6 +21,7 @@
#include "message.h"
#include "util.h"
#include "htmlentity.h"
+#include "emoji.h"
//-------------------------------------------------------------------------
@@ -37,6 +38,18 @@ void TextDocVisitor::visit(DocSymbol *s)
}
}
+void TextDocVisitor::visit(DocEmoji *s)
+{
+ const char *res = EmojiEntityMapper::instance()->html(s->emoji());
+ if (res)
+ {
+ filter(res);
+ }
+ else
+ {
+ err("text: non supported Emoji-entity found: %s\n",EmojiEntityMapper::instance()->html(s->emoji()));
+ }
+}
void TextDocVisitor::filter(const char *str)
{
diff --git a/src/textdocvisitor.h b/src/textdocvisitor.h
index 1bbc357..bbc70e8 100644
--- a/src/textdocvisitor.h
+++ b/src/textdocvisitor.h
@@ -40,6 +40,7 @@ class TextDocVisitor : public DocVisitor
void visit(DocLinkedWord *w) { filter(w->word()); }
void visit(DocWhiteSpace *) { m_t << " "; }
void visit(DocSymbol *);
+ void visit(DocEmoji *);
void visit(DocURL *u) { filter(u->url()); }
void visit(DocLineBreak *) { m_t << " "; }
void visit(DocHorRuler *) {}
diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp
index 525dbf5..cd72c7d 100644
--- a/src/xmldocvisitor.cpp
+++ b/src/xmldocvisitor.cpp
@@ -31,6 +31,7 @@
#include "filename.h"
#include "config.h"
#include "htmlentity.h"
+#include "emoji.h"
static void visitCaption(XmlDocVisitor *parent, QList<DocNode> children)
{
@@ -133,6 +134,20 @@ void XmlDocVisitor::visit(DocSymbol *s)
}
}
+void XmlDocVisitor::visit(DocEmoji *s)
+{
+ if (m_hide) return;
+ const char *res = EmojiEntityMapper::instance()->xml(s->emoji());
+ if (res)
+ {
+ m_t << res;
+ }
+ else
+ {
+ err("XML: non supported Emoji-entity found: %s\n",EmojiEntityMapper::instance()->html(s->emoji()));
+ }
+}
+
void XmlDocVisitor::visit(DocURL *u)
{
if (m_hide) return;