diff --git a/404.php b/404.php index a9a29c36..b28dbd25 100644 --- a/404.php +++ b/404.php @@ -1,6 +1,7 @@ = 5.3 -2. MySQL/MariaDB server -3. [mbstring](http://www.php.net/manual/en/mbstring.installation.php) -4. [PHP GD](http://www.php.net/manual/en/intro.image.php) -5. [PHP PDO](http://www.php.net/manual/en/intro.pdo.php) - -We try to make sure vichan is compatible with all major web servers and -operating systems. vichan does not include an Apache ```.htaccess``` file nor does -it need one. - -### Recommended -1. MySQL/MariaDB server >= 5.5.3 -2. ImageMagick (command-line ImageMagick or GraphicsMagick preferred). -3. [APC (Alternative PHP Cache)](http://php.net/manual/en/book.apc.php), - [XCache](http://xcache.lighttpd.net/) or - [Memcached](http://www.php.net/manual/en/intro.memcached.php) - -Contributing ------------- -You can contribute to vichan by: -* Developing patches/improvements/translations and using GitHub to submit pull requests -* Providing feedback and suggestions -* Writing/editing documentation - -If you need help developing a patch, please join our IRC channel. - -Installation -------------- -1. Download and extract Tinyboard to your web directory or get the latest - development version with: - - git clone git://github.com/ctrlcctrlv/8chan.git - -2. Copy secrets.example.php to secrets.php and edit it. - -3. Navigate to ```install.php``` in your web browser and follow the - prompts. -4. vichan should now be installed. Log in to ```mod.php``` with the - default username and password combination: **admin / password**. - -Please remember to change the administrator account password. - -See also: [Configuration Basics](http://tinyboard.org/docs/?p=Config). - -Upgrade -------- -To upgrade from any version of Tinyboard or vichan: - -Either run ```git pull``` to update your files, if you used git, or -backup your ```inc/instance-config.php```, replace all your files in place -(don't remove boards etc.), then put ```inc/instance-config.php``` back and -finally run ```install.php```. - -Support --------- -vichan is still beta software -- there are bound to be bugs. If you find a -bug, please report it. - -If you need assistance with installing, configuring, or using vichan, you may -find support from a variety of sources: - -* If you're unsure about how to enable or configure certain features, make - sure you have read the comments in ```inc/config.php```. -* Check out an [official vichan board](http://int.vichan.net/devel/). -* You can join vichan's IRC channel for support - [irc.6irc.net #vichan-devel](irc://irc.6irc.net/vichan-devel) - -### Tinyboard support -8chan is based on a Tinyboard, so both engines have very much in common. These -links may be helpful for you as well: - -* Tinyboard documentation can be found [here](http://tinyboard.org/docs/). -* You can join Tinyboard's IRC channel for support and general queries: - [irc.datnode.net #tinyboard](irc://irc.datnode.net/tinyboard). -* You may find help at [tinyboard.org](http://tinyboard.org/#help). - -Donations ---------- -Do you like our work? You can motivate us financially to do better ;) -* Bitcoin: [![tip for next commit](http://tip4commit.com/projects/708.svg)](http://tip4commit.com/projects/708) - -You can also ask us to develop some feature specially for you <3. Join our IRC -channel and ask for a quote (there are a few of us, who work with the codebase -and are skilled enough to develop such features pretty quickly). - -CLI tools ------------------ -There are a few command line interface tools, based on Tinyboard-Tools. These need -to be launched from a Unix shell account (SSH, or something). They are located in a ```tools/``` -directory. - -You actually don't need these tools for your imageboard functioning, they are aimed -at the power users. You won't be able to run these from shared hosting accounts -(i.e. all free web servers). - -Localisation ------------- -Want to have vichan/8chan in your language? You can contribute your translations at this URL: - -https://www.transifex.com/projects/p/tinyboard-vichan-devel/ - -Oekaki ------- -vichan makes use of [wPaint](https://github.com/websanova/wPaint) for oekaki. After you pull the repository, however, you will need to download wPaint separately using git's `submodule` feature. Use the following commands: +Because I cannot be bothered to maintain `install.php`, the install process is as such: ``` -git submodule init -git submodule update +mysql -uroot 8chan < install.sql +echo '8chan' > .installed ``` -To enable oekaki, add all the scripts listed in `js/wpaint.js` to your `instance-config.php`. +Here's my install script as of 11/14/2014 for the 8chan servers which run Ubuntu 14.04: -WebM support ------------- -Read `inc/lib/webm/README.md` for information about enabling webm. - -Static Pages ------------- -Some pages like `/faq.html` need to be pre-generated: ``` -$ php faq.php > faq.html +apt-get install graphicsmagick gifsicle php5-fpm mysql-client php5-mysql php5-cli php-pear php5-apcu; add-apt-repository ppa:jon-severinsson/ffmpeg; add-apt-repository ppa:nginx/stable; apt-get update; apt-get install nginx ffmpeg; pear install Net_DNS2 ``` -vichan API ----------- -vichan provides by default a 4chan-compatible JSON API. For documentation on this, see: -https://github.com/vichan-devel/vichan-API/ . - -License --------- -See [LICENSE.md](http://github.com/vichan-devel/vichan/blob/master/LICENSE.md). - +Have fun! diff --git a/banned.php b/banned.php deleted file mode 100644 index 57e4a9bc..00000000 --- a/banned.php +++ /dev/null @@ -1,7 +0,0 @@ -"._("Banned?").""; - print "

"._("You are not banned.")."

"; - print ""; -?> diff --git a/banners.php b/banners.php index 10604ea8..fd345cc9 100644 --- a/banners.php +++ b/banners.php @@ -8,7 +8,7 @@ header("Expires: 0"); function get_custom_banner(&$b) { # Validate the board name - if (!(isset($b) && preg_match('/^[a-z0-9]{1,10}$/', $b))) + if (!(isset($b) && preg_match('/^[a-z0-9+]{1,30}$/', $b))) return null; # Check if directory exists diff --git a/boards.php b/boards.php index f22cb524..de7f15e8 100644 --- a/boards.php +++ b/boards.php @@ -10,10 +10,17 @@ if (php_sapi_name() == 'fpm-fcgi' && !$admin) { error('Cannot be run directly.'); } $boards = listBoards(); - +$all_tags = array(); $total_posts_hour = 0; $total_posts = 0; +function to_tag($str) { + $str = trim($str); + $str = strtolower($str); + $str = str_replace(['_', ' '], '-', $str); + return $str; +} + foreach ($boards as $i => $board) { //$query = prepare(sprintf("SELECT (SELECT MAX(id) from ``posts_%s``) AS max, (SELECT MAX(id) FROM ``posts_%s`` WHERE FROM_UNIXTIME(time) < DATE_SUB(NOW(), INTERVAL 1 HOUR)) AS oldmax, (SELECT MAX(id) from ``posts_%s``) AS max_d, (SELECT MAX(id) FROM ``posts_%s`` WHERE FROM_UNIXTIME(time) < DATE_SUB(NOW(), INTERVAL 1 DAY)) AS oldmax_d, (SELECT count(id) FROM ``posts_%s``) AS count;", $board['uri'], $board['uri'], $board['uri'], $board['uri'], $board['uri'])); @@ -28,6 +35,23 @@ SELECT MAX(id) max, (SELECT COUNT(*) FROM ``posts_%s`` WHERE FROM_UNIXTIME(time) $query->execute() or error(db_error($query)); $r = $query->fetch(PDO::FETCH_ASSOC); + $tquery = prepare("SELECT `tag` FROM ``board_tags`` WHERE `uri` = :uri"); + $tquery->execute([":uri" => $board['uri']]) or error(db_error($tquery)); + $r2 = $tquery->fetchAll(PDO::FETCH_ASSOC); + + $tags = array(); + if ($r2) { + foreach ($r2 as $ii => $t) { + $tag=to_tag($t['tag']); + $tags[] = $tag; + if (!isset($all_tags[$tag])) { + $all_tags[$tag] = (int)$r['uniq_ip']; + } else { + $all_tags[$tag] += $r['uniq_ip']; + } + } + } + $pph = $r['pph']; $ppd = $r['ppd']; @@ -38,6 +62,7 @@ SELECT MAX(id) max, (SELECT COUNT(*) FROM ``posts_%s`` WHERE FROM_UNIXTIME(time) $boards[$i]['ppd'] = $ppd; $boards[$i]['max'] = $r['max']; $boards[$i]['uniq_ip'] = $r['uniq_ip']; + $boards[$i]['tags'] = $tags; } usort($boards, @@ -86,14 +111,18 @@ foreach ($boards as $i => &$board) { $n_boards = sizeof($boards); $t_boards = $hidden_boards_total + $n_boards; +$boards = array_values($boards); +arsort($all_tags); + $config['additional_javascript'] = array('js/jquery.min.js', 'js/jquery.tablesorter.min.js'); -$body = Element("8chan/boards.html", array("config" => $config, "n_boards" => $n_boards, "t_boards" => $t_boards, "hidden_boards_total" => $hidden_boards_total, "total_posts" => $total_posts, "total_posts_hour" => $total_posts_hour, "boards" => $boards, "last_update" => date('r'), "uptime_p" => shell_exec('uptime -p'))); +$body = Element("8chan/boards-tags.html", array("config" => $config, "n_boards" => $n_boards, "t_boards" => $t_boards, "hidden_boards_total" => $hidden_boards_total, "total_posts" => $total_posts, "total_posts_hour" => $total_posts_hour, "boards" => $boards, "last_update" => date('r'), "uptime_p" => shell_exec('uptime -p'), 'tags' => $all_tags)); $html = Element("page.html", array("config" => $config, "body" => $body, "title" => "Boards on ∞chan")); if ($admin) { echo $html; } else { file_write("boards.json", json_encode($boards)); + file_write("tags.json", json_encode($all_tags)); foreach ($boards as $i => $b) { if (in_array($b['uri'], $config['no_top_bar_boards'])) { unset($boards[$i]); diff --git a/claim.php b/claim.php index edc6669a..a07ccadf 100644 --- a/claim.php +++ b/claim.php @@ -1,5 +1,61 @@ execute(); + $row = $query->fetch(); + $ago = (new DateTime)->sub(new DateInterval('P1W')); + $mod_ago = (new DateTime)->sub(new DateInterval('P2W')); -error('Automatic claiming is no longer available. To claim a board, send your request to admin@8chan.co along with the IP you used to post on that board.'); + $last_activity_date = new DateTime(); + $last_mod_date = new DateTime(); + + $last_activity_date->setTimestamp($row['time']); + + $query = query("SELECT id, username FROM mods WHERE boards = '$board' AND type = 20"); + $mods = $query->fetchAll(); + + if ($mods) { + $mod = $mods[0]['id']; + $query = query("SELECT MAX(time) AS time FROM modlogs WHERE `mod` = $mod"); + $a = $query->fetchAll(PDO::FETCH_COLUMN); + + if ($a[0]) { + $last_mod_date->setTimestamp($a[0]); + if (!$row['time']) + $last_activity_date->setTimestamp($a[0]); + } else {// no one ever logged in, try board creation time + $query = query("SELECT UNIX_TIMESTAMP(time) AS time FROM board_create WHERE uri = '$board'"); + $crt = $query->fetchAll(PDO::FETCH_COLUMN); + $last_activity_date->setTimestamp($crt[0]); + $last_mod_date = false; + } + } + + if ($mods and ($last_activity_date < $ago or ($last_mod_date and $last_mod_date < $mod_ago))) { + return array($last_activity_date, $last_mod_date, $mods); + } + else { + return false; + } +} +$q = query("SELECT uri FROM boards"); +$boards = $q->fetchAll(PDO::FETCH_COLUMN); +$delete = array(); +foreach($boards as $board) { + $last_activity = last_activity($board); + + if ($last_activity) { + list($last_activity_date, $last_mod_date, $mods) = $last_activity; + + $last_mod_f = $last_mod_date ? $last_mod_date->format('Y-m-d H:i:s') : 'never'; + $last_activity_f = $last_activity_date ? $last_activity_date->format('Y-m-d H:i:s') : 'never'; + $delete[] = array('board' => $board, 'last_activity_date' => $last_activity_f, 'last_mod' => $last_mod_date, 'last_mod_f' => $last_mod_f); + } +} +$body = Element("8chan/claim.html", array("config" => $config, "delete" => $delete)); +echo Element("page.html", array("config" => $config, "body" => $body, "title" => _("Claim"), "subtitle" => _("Take deserted boards back from their owners"))); diff --git a/expire.php b/expire.php index e24b69cf..8ca0789f 100644 --- a/expire.php +++ b/expire.php @@ -8,8 +8,8 @@ $protected = array('burgers', 'cow', 'wilno', 'cute', 'yoga'); $q = query("SELECT uri FROM boards"); $boards = $q->fetchAll(PDO::FETCH_COLUMN); $now = new DateTime(); -$ago = (new DateTime)->sub(new DateInterval('P3D')); -$mod_ago = (new DateTime)->sub(new DateInterval('P7D')); +$ago = (new DateTime)->sub(new DateInterval('P7D')); +$mod_ago = (new DateTime)->sub(new DateInterval('P14D')); // Find out the last activity for our board $delete = array(); diff --git a/faq.php b/faq.php index 6c039741..6261af42 100644 --- a/faq.php +++ b/faq.php @@ -26,6 +26,7 @@ $body = <<Do not post, request, or link to any content illegal in the United States of America. Do not create boards with the sole purpose of posting or spreading such content.

Other than that, you are free to institute whatever rules you want on your board.

+

More information about US obscenity laws and how they relate to 8chan boards

How do I add more volunteers?

You may do this in your board settings, click on "Edit board volunteers".

How do I manage my board?

@@ -34,9 +35,9 @@ $body = <<The admin can be reached at admin at 8chan dot co.

Help! My board has been deleted!

-

Were you inactive for longer than one week? Were there no posts on the board for 72 hours?

+

As of November 13th, 2014, board expiration no longer occurs.

-

If either of those is true, the board was deleted automatically. You are free to recreate it. I cannot restore it, so don't bother emailing me about it.

+

You still may lose access to your board, however, if you fail to log in for two weeks or it receives no posts for a week. See here for a list of boards that are available for reclaiming.

How do I post as a volunteer on my board?

Make sure you are using the volunteer interface to view your board. The URL of your browser should be https://8chan.co/mod.php?/yourboard.

@@ -47,7 +48,7 @@ $body = <<If they are doing something illegal, email me.

Can you give me X board?

-

If the owner of the board is inactive or the board is broken due to bad CSS, sure. Send me an email.

+

If the owner of the board is inactive or the board is broken due to bad CSS, sure. Send me an email. You can see a list of boards that qualify for being taken over here.

Can you add some new feature?

Open a Github issue. Better yet, write it yourself and open a pull request. @@ -65,9 +66,9 @@ $body = <<

How are featured boards chosen?

-

Top fifteen boards excluding /meta/, /b/ and /int/.

+

Top fifteen boards excluding /meta/, /b/ and /news+/.

-

Who owns /meta/, /b/, and /int/?

+

Who owns /meta/ and /b/?

No one, so they are de facto property of the administration.

Where's the mobile app?

@@ -76,12 +77,22 @@ $body = <<I don't provide support for this app, ask the developer of it if you have a problem with it.

Where's the archive?

-

There isn't one yet and there will never be an official archive.

+

There isn't one yet and there will never be an official archive.

+

Given that archives are inevitable and will be created anyway via archive.today, Google cache, and anyone who installs Asagi, I'm softening my stance on this. Currently, 8archive.moe provides our archive, and I may set up an official one. All archives officially partnered with us will be opt-in by our board owners, not opt-out. Archives who archive boards that have not opted in will be considered pirate archives, and legal action may be taken.

+ +

I got an email from an @8chan.co email address, is that you?

+

8chan.co uses cock.li to manage our domain's email. cock.li allows anyone to create an email account @8chan.co.

+

That said, we have quite a few official 8chan.co email addresses. They are:

+
    +
  • admin at 8chan dot co
  • +
  • dmca at 8chan dot co
  • +
  • claim at 8chan dot co
  • +

How do I donate?

-

Donations can be sent to 1NpQaXqmCBji6gfX8UgaQEmEstvVY7U32C (Bitcoin) or LUPgSCJt3iGeJXUETVhmnbQ89Riaq1yjZm (Litecoin). PayPal is also accepted @ fredrick.brennan1@gmail.com .

+

Donations can be sent to 1NpQaXqmCBji6gfX8UgaQEmEstvVY7U32C (Bitcoin) or LUPgSCJt3iGeJXUETVhmnbQ89Riaq1yjZm (Litecoin).

+

I am also a big fan of Monero (XMR). You can send XMR to our OpenAlias in the simplewallet client, or simply send to 49dBJhGhYFxJEfydS6hH6GRyg1W4cDgupdNVtw7j1WtcUY7xPXwNLw6fUVay644viaCcEhMFG1Z7SjjxRXEFDdNWJdvH9kS.

You may also donate monthly via Patreon at http://www.patreon.com/user?u=162165. -

Are you really a cripple?

Yes.

diff --git a/inc/8chan-mod-pages.php b/inc/8chan-mod-pages.php index 1474cf20..aa9bc376 100644 --- a/inc/8chan-mod-pages.php +++ b/inc/8chan-mod-pages.php @@ -20,6 +20,9 @@ $config['mod']['noticeboard_post'] = GLOBALVOLUNTEER; $config['mod']['search'] = GLOBALVOLUNTEER; $config['mod']['clean_global'] = GLOBALVOLUNTEER; + $config['mod']['view_notes'] = DISABLED; + $config['mod']['create_notes'] = DISABLED; + $config['mod']['edit_config'] = DISABLED; $config['mod']['debug_recent'] = ADMIN; $config['mod']['debug_antispam'] = ADMIN; $config['mod']['noticeboard_post'] = ADMIN; @@ -29,6 +32,7 @@ $config['mod']['edit_flags'] = MOD; $config['mod']['edit_settings'] = MOD; $config['mod']['edit_volunteers'] = MOD; + $config['mod']['edit_tags'] = MOD; $config['mod']['clean'] = BOARDVOLUNTEER; // new perms @@ -49,6 +53,87 @@ $config['mod']['ban_appeals'] = BOARDVOLUNTEER; $config['mod']['view_ban_appeals'] = BOARDVOLUNTEER; $config['mod']['view_ban'] = BOARDVOLUNTEER; + $config['mod']['reassign_board'] = ADMIN; + + $config['mod']['custom_pages']['/tags/(\%b)'] = function ($b) { + global $board, $config; + + if (!openBoard($b)) + error("Could not open board!"); + + if (!hasPermission($config['mod']['edit_tags'], $b)) + error($config['error']['noaccess']); + + if (isset($_POST['tags'])) { + if (sizeof($_POST['tags']) > 5) + error(_('Too many tags.')); + + $delete = prepare('DELETE FROM ``board_tags`` WHERE uri = :uri'); + $delete->bindValue(':uri', $b); + $delete->execute(); + + foreach ($_POST['tags'] as $i => $tag) { + if ($tag) { + if (strlen($tag) > 255) + continue; + + $insert = prepare('INSERT INTO ``board_tags``(uri, tag) VALUES (:uri, :tag)'); + $insert->bindValue(':uri', $b); + $insert->bindValue(':tag', utf8tohtml($tag)); + $insert->execute(); + } + } + + $update = prepare('UPDATE ``boards`` SET sfw = :sfw WHERE uri = :uri'); + $update->bindValue(':uri', $b); + $update->bindValue(':sfw', isset($_POST['sfw'])); + $update->execute(); + } + $query = prepare('SELECT * FROM ``board_tags`` WHERE uri = :uri'); + $query->bindValue(':uri', $b); + $query->execute(); + + $tags = $query->fetchAll(); + + $query = prepare('SELECT `sfw` FROM ``boards`` WHERE uri = :uri'); + $query->bindValue(':uri', $b); + $query->execute(); + + $sfw = $query->fetchColumn(); + + mod_page(_('Edit tags'), 'mod/tags.html', array('board'=>$board,'token'=>make_secure_link_token('reassign/'.$board['uri']), 'tags'=>$tags, 'sfw'=>$sfw)); + }; + + $config['mod']['custom_pages']['/reassign/(\%b)'] = function($b) { + global $board, $config; + + if (!openBoard($b)) + error("Could not open board!"); + + if (!hasPermission($config['mod']['reassign_board'], $b)) + error($config['error']['noaccess']); + + $query = query("SELECT id, username FROM mods WHERE boards = '$b' AND type = 20"); + $mods = $query->fetchAll(); + + if (!$mods) { + error('No mods?'); + } + + $password = base64_encode(openssl_random_pseudo_bytes(9)); + $salt = generate_salt(); + $hashed = hash('sha256', $salt . sha1($password)); + + $query = prepare('UPDATE ``mods`` SET `password` = :hashed, `salt` = :salt WHERE BINARY username = :mod'); + $query->bindValue(':hashed', $hashed); + $query->bindValue(':salt', $salt); + $query->bindValue(':mod', $mods[0]['username']); + $query->execute(); + + $body = "Thanks for your interest in this board. Kindly find the username and password below. You can login at 8chan.co/mod.php.
Username: {$mods[0]['username']}
Password: {$password}
Thanks for using 8chan.co!"; + + mod_page(_('Edit reassign'), 'blank.html', array('board'=>$board,'token'=>make_secure_link_token('reassign/'.$board['uri']),'body'=>$body)); + }; $config['mod']['custom_pages']['/volunteers/(\%b)'] = function($b) { global $board, $config, $pdo; @@ -71,14 +156,16 @@ error(sprintf($config['error']['required'], 'username')); if ($_POST['password'] == '') error(sprintf($config['error']['required'], 'password')); + if (!preg_match('/^[a-zA-Z0-9._]{1,30}$/', $_POST['username'])) + error(_('Invalid username')); if ($count > 10) { error(_('Too many board volunteers!')); } foreach ($volunteers as $i => $v) { - if ($_POST['username'] == $v['username']) { - error(_('Refusing to create a volunteer with the same username as an existing one.')); + if (strtolower($_POST['username']) == strtolower($v['username'])) { + error(_('Refusing to create a volunteer with the same username as an existing one.')); } } @@ -175,7 +262,7 @@ error($config['error']['invalidimg']); } - if ($size[0] > 20 or $size[0] < 11 or $size[1] != 11){ + if ($size[0] > 20 or $size[0] < 11 or $size[1] > 16 or $size[1] < 11){ error(_('Image wrong size!')); } if (sizeof($banners) > 256) { @@ -317,6 +404,9 @@ FLAGS; $code_tags = isset($_POST['code_tags']) ? '$config[\'additional_javascript\'][] = \'js/code_tags/run_prettify.js\';$config[\'markup\'][] = array("/\[code\](.+?)\[\/code\]/ms", "
\$1
");' : ''; $katex = isset($_POST['katex']) ? '$config[\'katex\'] = true;$config[\'additional_javascript\'][] = \'js/katex/katex.min.js\'; $config[\'markup\'][] = array("/\[tex\](.+?)\[\/tex\]/ms", "\$1"); $config[\'additional_javascript\'][] = \'js/katex-enable.js\';' : ''; $user_flags = isset($_POST['user_flags']) ? "if (file_exists('$b/flags.php')) { include 'flags.php'; }\n" : ''; + $captcha = isset($_POST['captcha']) ? 'true' : 'false'; + $force_subject_op = isset($_POST['force_subject_op']) ? 'true' : 'false'; + $oekaki_js = <<?«»“”‘’]))'; + + $matched = array(); + + preg_match_all("#$match_urls#im", $clean_css, $matched); + + $allowed_urls = array('https://i.imgur.com/', 'https://media.8chan.co/', 'https://a.pomf.se/', 'https://fonts.googleapis.com/', 'http://8ch.net/'); + $error = false; + + if (isset($matched[0])) { + foreach ($matched[0] as $i => $v) { + $error = true; + foreach ($allowed_urls as $ii => $url) { + if (strpos($v, $url) === 0) { + $error = false; + break; + } + } + } + } + + if ($error) { + error(_('Off-site links are not allowed in board stylesheets!')); + } + $query = query('SELECT `uri`, `title`, `subtitle` FROM ``boards`` WHERE `8archive` = TRUE'); file_write('8archive.json', json_encode($query->fetchAll(PDO::FETCH_ASSOC))); file_write($b.'/config.php', $config_file); - file_write('stylesheets/board/'.$b.'.css', $_POST['css']); + file_write('stylesheets/board/'.$b.'.css', $clean_css); file_write($b.'/rules.html', Element('page.html', array('title'=>'Rules', 'subtitle'=>'', 'config'=>$config, 'body'=>'
'.purify($_POST['rules']).'
'))); file_write($b.'/rules.txt', $_POST['rules']); $_config = $config; - openBoard($b); + // Faster than openBoard and bypasses cache...we're trusting the PHP output + // to be safe enough to run with every request, we can eval it here. + eval(str_replace('flags.php', "$b/flags.php", preg_replace('/^\<\?php$/m', '', $config_file))); // be smarter about rebuilds...only some changes really require us to rebuild all threads - if ($_config['blotter'] != $config['blotter'] || $_config['field_disable_name'] != $config['field_disable_name'] || $_config['show_sages'] != $config['show_sages']) { + if ($_config['captcha']['enabled'] != $config['captcha']['enabled'] + || $_config['captcha']['extra'] != $config['captcha']['extra'] + || $_config['blotter'] != $config['blotter'] + || $_config['field_disable_name'] != $config['field_disable_name'] + || $_config['show_sages'] != (isset($config['show_sages']) && $config['show_sages'])) { buildIndex(); $query = query(sprintf("SELECT `id` FROM ``posts_%s`` WHERE `thread` IS NULL", $b)) or error(db_error()); while ($post = $query->fetch(PDO::FETCH_ASSOC)) { diff --git a/inc/bans.php b/inc/bans.php index 14b7f939..215ff279 100644 --- a/inc/bans.php +++ b/inc/bans.php @@ -218,14 +218,8 @@ class Bans { } unset($ban['type']); if ($filter_ips || ($board_access !== false && !in_array($ban['board'], $board_access))) { - @list($ban['mask'], $subnet) = explode("/", $ban['mask']); - $ban['mask'] = preg_split("/[\.:]/", $ban['mask']); - $ban['mask'] = array_slice($ban['mask'], 0, 2); - $ban['mask'] = implode(".", $ban['mask']); - $ban['mask'] .= ".x.x"; - if (isset ($subnet)) { - $ban['mask'] .= "/$subnet"; - } + $ban['mask'] = @less_ip($ban['mask']); + $ban['masked'] = true; } diff --git a/inc/config.php b/inc/config.php index 10c9faa5..1769ed6a 100644 --- a/inc/config.php +++ b/inc/config.php @@ -272,6 +272,8 @@ 'embed', 'recaptcha_challenge_field', 'recaptcha_response_field', + 'captcha_cookie', + 'captcha_text', 'spoiler', 'page', 'file_url', @@ -300,6 +302,19 @@ $config['recaptcha_public'] = '6LcXTcUSAAAAAKBxyFWIt2SO8jwx4W7wcSMRoN3f'; $config['recaptcha_private'] = '6LcXTcUSAAAAAOGVbVdhmEM1_SyRF4xTKe8jbzf_'; + $config['captcha'] = array(); + + // Enable custom captcha provider + $config['captcha']['enabled'] = false; + + // Custom captcha provider path + $config['captcha']['provider_get'] = 'http://8chan.vichan.net/captcha/entrypoint.php'; + $config['captcha']['provider_check'] = 'http://8chan.vichan.net/captcha/entrypoint.php'; + + // Custom captcha extra field (eg. charset) + $config['captcha']['extra'] = 'abcdefghijklmnopqrstuvwxyz'; + + /* * Custom filters detect certain posts and reject/ban accordingly. They are made up of a condition and an * action (for when ALL conditions are met). As every single post has to be put through each filter, @@ -602,6 +617,17 @@ // How many ban appeals can be made for a single ban? $config['ban_appeals_max'] = 1; + + // Blacklisted board names. Default values to protect existing folders in the core codebase. + $config['banned_boards'] = array( + '.git', + 'inc', + 'js', + 'static', + 'stylesheets', + 'templates', + 'tools' + ); // Show moderator name on ban page. $config['show_modname'] = false; @@ -727,7 +753,6 @@ // Allowed image file extensions. $config['allowed_ext'][] = 'jpg'; $config['allowed_ext'][] = 'jpeg'; - $config['allowed_ext'][] = 'bmp'; $config['allowed_ext'][] = 'gif'; $config['allowed_ext'][] = 'png'; // $config['allowed_ext'][] = 'svg'; @@ -745,6 +770,7 @@ $config['file_icons']['default'] = 'file.png'; $config['file_icons']['zip'] = 'zip.png'; $config['file_icons']['webm'] = 'video.png'; + $config['file_icons']['mp4'] = 'video.png'; // Example: Custom thumbnail for certain file extension. // $config['file_icons']['extension'] = 'some_file.png'; @@ -858,7 +884,7 @@ $config['thread_subject_in_title'] = false; // Additional lines added to the footer of all pages. - $config['footer'][] = _('All trademarks, copyrights, comments, and images on this page are owned by and are the responsibility of their respective parties.'); + // $config['footer'][] = _('All trademarks, copyrights, comments, and images on this page are owned by and are the responsibility of their respective parties.'); // Characters used to generate a random password (with Javascript). $config['genpassword_chars'] = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+'; @@ -1057,6 +1083,7 @@ $config['error']['youaremuted'] = _('You are muted! Expires in %d seconds.'); $config['error']['dnsbl'] = _('Your IP address is listed in %s.'); $config['error']['toomanylinks'] = _('Too many links; flood detected.'); + $config['error']['notenoughlinks'] = _('OPs are required to have at least %d links on this board.'); $config['error']['toomanycites'] = _('Too many cites; post discarded.'); $config['error']['toomanycross'] = _('Too many cross-board links; post discarded.'); $config['error']['nodelete'] = _('You didn\'t select anything to delete.'); @@ -1326,8 +1353,8 @@ // Capcode permissions. $config['mod']['capcode'] = array( // JANITOR => array('Janitor'), - MOD => array('Mod'), - ADMIN => true + MOD => array('Mod'), + ADMIN => true ); // Example: Allow mods to post with "## Moderator" as well @@ -1410,7 +1437,7 @@ $config['mod']['view_banlist'] = MOD; // View the username of the mod who made a ban $config['mod']['view_banstaff'] = MOD; - // If the moderator doesn't fit the $config['mod']['view_banstaff''] (previous) permission, show him just + // If the moderator doesn't fit the $config['mod']['view_banstaff'] (previous) permission, show him just // a "?" instead. Otherwise, it will be "Mod" or "Admin". $config['mod']['view_banquestionmark'] = false; // Show expired bans in the ban list (they are kept in cache until the culprit returns) @@ -1654,10 +1681,17 @@ // Regex for board URIs. Don't add "`" character or any Unicode that MySQL can't handle. 58 characters // is the absolute maximum, because MySQL cannot handle table names greater than 64 characters. - $config['board_regex'] = '[0-9a-zA-Z$_\x{0080}-\x{FFFF}]{1,58}'; + $config['board_regex'] = '[0-9a-zA-Z\+$_\x{0080}-\x{FFFF}]{1,58}'; // Youtube.js embed HTML code $config['youtube_js_html'] = ''; + + // Use read.php? + // read.php is a file that dynamically displays pages to users instead of the build on demand system in use in Tinyboard since 2010. + // + // read.php is basically a watered down mod.php -- if coupled with caching, it improves performance and allows for easier replication + // across machines. + $config['use_read_php'] = false; diff --git a/inc/display.php b/inc/display.php index a58d92f4..9561c4b8 100644 --- a/inc/display.php +++ b/inc/display.php @@ -406,9 +406,13 @@ class Post { } public function getClean( ) { - global $board; + global $board, $config; if( !isset( $this->clean ) ) { + if ($config['cache']['enabled'] && $this->clean = cache::get("post_clean_{$board['uri']}_{$this->id}")) { + return $this->clean; + } + $query = prepare("SELECT * FROM `post_clean` WHERE `post_id` = :post AND `board_id` = :board"); $query->bindValue( ':board', $board['uri'] ); $query->bindValue( ':post', $this->id ); @@ -424,6 +428,8 @@ class Post { 'clean_local_mod_id' => null, 'clean_global_mod_id' => null, ); + + cache::set("post_clean_{$board['uri']}_{$this->id}", $this->clean); } } diff --git a/inc/functions.php b/inc/functions.php index 3504cc38..e72708fd 100755 --- a/inc/functions.php +++ b/inc/functions.php @@ -29,14 +29,16 @@ mb_internal_encoding('UTF-8'); loadConfig(); function init_locale($locale, $error='error') { - if (_setlocale(LC_ALL, $locale) === false) { - $error('The specified locale (' . $locale . ') does not exist on your platform!'); - } + if ($locale === 'en') + $locale = 'en_US.utf8'; + if (extension_loaded('gettext')) { + setlocale(LC_ALL, $locale); bindtextdomain('tinyboard', './inc/locale'); bind_textdomain_codeset('tinyboard', 'UTF-8'); textdomain('tinyboard'); } else { + _setlocale(LC_ALL, $locale); _bindtextdomain('tinyboard', './inc/locale'); _bind_textdomain_codeset('tinyboard', 'UTF-8'); _textdomain('tinyboard'); @@ -430,7 +432,8 @@ function setupBoard($array) { $board = array( 'uri' => $array['uri'], 'title' => $array['title'], - 'subtitle' => $array['subtitle'] + 'subtitle' => $array['subtitle'], + 'indexed' => $array['indexed'] ); // older versions @@ -680,7 +683,7 @@ function listBoards($just_uri = false, $indexed_only = false) { return $boards; if (!$just_uri) { - $query = query("SELECT ``boards``.`uri` uri, ``boards``.`title` title, ``boards``.`subtitle` subtitle, ``board_create``.`time` time, ``boards``.`indexed` indexed FROM ``boards``" . ( $indexed_only ? " WHERE `indexed` = 1 " : "" ) . "LEFT JOIN ``board_create`` ON ``boards``.`uri` = ``board_create``.`uri` ORDER BY ``boards``.`uri`") or error(db_error()); + $query = query("SELECT ``boards``.`uri` uri, ``boards``.`title` title, ``boards``.`subtitle` subtitle, ``board_create``.`time` time, ``boards``.`indexed` indexed, ``boards``.`sfw` sfw FROM ``boards``" . ( $indexed_only ? " WHERE `indexed` = 1 " : "" ) . "LEFT JOIN ``board_create`` ON ``boards``.`uri` = ``board_create``.`uri` ORDER BY ``boards``.`uri`") or error(db_error()); $boards = $query->fetchAll(PDO::FETCH_ASSOC); } else { $boards = array(); @@ -1091,9 +1094,9 @@ function deletePost($id, $error_if_doesnt_exist=true, $rebuild_after=true) { if (!$post['thread']) { // Delete thread HTML page - file_unlink($board['dir'] . $config['dir']['res'] . sprintf($config['file_page'], $post['id'])); - file_unlink($board['dir'] . $config['dir']['res'] . sprintf($config['file_page50'], $post['id'])); - file_unlink($board['dir'] . $config['dir']['res'] . sprintf('%d.json', $post['id'])); + @file_unlink($board['dir'] . $config['dir']['res'] . sprintf($config['file_page'], $post['id'])); + @file_unlink($board['dir'] . $config['dir']['res'] . sprintf($config['file_page50'], $post['id'])); + @file_unlink($board['dir'] . $config['dir']['res'] . sprintf('%d.json', $post['id'])); $antispam_query = prepare('DELETE FROM ``antispam`` WHERE `board` = :board AND `thread` = :thread'); $antispam_query->bindValue(':board', $board['uri']); @@ -1106,9 +1109,9 @@ function deletePost($id, $error_if_doesnt_exist=true, $rebuild_after=true) { if ($post['files']) { // Delete file foreach (json_decode($post['files']) as $i => $f) { - if ($f->file !== 'deleted') { - file_unlink($config['dir']['img_root'] . $board['dir'] . $config['dir']['img'] . $f->file); - file_unlink($config['dir']['img_root'] . $board['dir'] . $config['dir']['thumb'] . $f->thumb); + if (isset($f->file, $f->thumb) && $f->file !== 'deleted') { + @file_unlink($config['dir']['img_root'] . $board['dir'] . $config['dir']['img'] . $f->file); + @file_unlink($config['dir']['img_root'] . $board['dir'] . $config['dir']['thumb'] . $f->thumb); } } } @@ -1329,23 +1332,26 @@ function getPages($mod=false) { // Stolen with permission from PlainIB (by Frank Usrs) function make_comment_hex($str) { + global $config; // remove cross-board citations // the numbers don't matter - $str = preg_replace('!>>>/[A-Za-z0-9]+/!', '', $str); + $str = preg_replace("!>>>/[A-Za-z0-9]+/!", '', $str); - if (function_exists('iconv')) { - // remove diacritics and other noise - // FIXME: this removes cyrillic entirely - $oldstr = $str; - $str = @iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $str); - if (!$str) $str = $oldstr; + if ($config['robot_enable']) { + if (function_exists('iconv')) { + // remove diacritics and other noise + // FIXME: this removes cyrillic entirely + $oldstr = $str; + $str = @iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $str); + if (!$str) $str = $oldstr; + } + + $str = strtolower($str); + + // strip all non-alphabet characters + $str = preg_replace('/[^a-z]/', '', $str); } - $str = strtolower($str); - - // strip all non-alphabet characters - $str = preg_replace('/[^a-z]/', '', $str); - return md5($str); } @@ -1701,7 +1707,7 @@ function extract_modifiers($body) { return $modifiers; } -function markup(&$body, $track_cites = false) { +function markup(&$body, $track_cites = false, $op = false) { global $board, $config, $markup_urls; $modifiers = extract_modifiers($body); @@ -1739,6 +1745,9 @@ function markup(&$body, $track_cites = false) { if ($num_links > $config['max_links']) error($config['error']['toomanylinks']); + + if ($num_links < $config['min_links'] && $op) + error(sprintf($config['error']['notenoughlinks'], $config['min_links'])); } if ($config['markup_repair_tidy']) @@ -2427,6 +2436,8 @@ function diceRoller($post) { } function less_ip($ip) { + global $config; + $ipv6 = (strstr($ip, ':') !== false); $has_range = (strstr($ip, '/') !== false); @@ -2446,7 +2457,15 @@ function less_ip($ip) { } $final = inet_ntop($in_addr & $mask); - return str_replace(array(':0', '.0'), array(':x', '.x'), $final) . (isset($range) ? '/'.$range : ''); + $masked = str_replace(array(':0', '.0'), array(':x', '.x'), $final); + + if ($config['hash_masked_ip']) { + $masked = substr(sha1(sha1($masked) . $config['secure_trip_salt']), 0, 10); + } + + $masked .= (isset($range) ? '/'.$range : ''); + + return $masked; } function less_hostmask($hostmask) { diff --git a/inc/instance-config.php b/inc/instance-config.php index d888b71f..de7affe2 100644 --- a/inc/instance-config.php +++ b/inc/instance-config.php @@ -61,6 +61,7 @@ $config['spoiler_images'] = true; $config['image_reject_repost'] = true; $config['allowed_ext_files'][] = 'webm'; + $config['allowed_ext_files'][] = 'mp4'; $config['webm']['use_ffmpeg'] = true; $config['webm']['allow_audio'] = true; $config['webm']['max_length'] = 60 * 15; @@ -73,7 +74,7 @@ $config['mod']['capcode'][MOD] = array('Board Owner'); $config['mod']['capcode'][GLOBALVOLUNTEER] = array('Global Volunteer'); $config['custom_capcode']['Admin'] = array( - ' %s', + ' 8chan.co Administrator', ); //$config['mod']['view_banlist'] = GLOBALVOLUNTEER; $config['mod']['recent_reports'] = 65535; @@ -90,7 +91,9 @@ //$config['default_stylesheet'] = array('Notsuba', 'notsuba.css'); $config['additional_javascript'][] = 'js/jquery.min.js'; $config['additional_javascript'][] = 'js/jquery.mixitup.min.js'; + $config['additional_javascript'][] = 'js/jquery-ui.custom.min.js'; $config['additional_javascript'][] = 'js/catalog.js'; + $config['additional_javascript'][] = 'js/captcha.js'; $config['additional_javascript'][] = 'js/jquery.tablesorter.min.js'; $config['additional_javascript'][] = 'js/options.js'; $config['additional_javascript'][] = 'js/style-select.js'; @@ -135,6 +138,9 @@ $config['additional_javascript'][] = 'js/youtube.js'; $config['additional_javascript'][] = 'js/comment-toolbar.js'; $config['additional_javascript'][] = 'js/catalog-search.js'; + $config['additional_javascript'][] = 'js/thread-stats.js'; + $config['additional_javascript'][] = 'js/quote-selection.js'; + $config['additional_javascript'][] = 'js/twemoji/twemoji.js'; //$config['font_awesome_css'] = '/netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css'; @@ -146,16 +152,18 @@ $config['markup'][] = array("/\[spoiler\](.+?)\[\/spoiler\]/", "\$1"); $config['markup'][] = array("/~~(.+?)~~/", "\$1"); $config['markup'][] = array("/__(.+?)__/", "\$1"); + $config['markup'][] = array("/###([^\s']+)###/", "###\$1###"); - $config['boards'] = array(array('' => '/', '' => '/boards.html', '' => '/faq.html', '' => '/random.php', '' => '/create.php', '' => '/bans.html', '' => '/search.php', '' => '/mod.php', '' => 'https://qchat.rizon.net/?channels=#8chan'), array('b', 'meta'), array(''=>'https://twitter.com/infinitechan')); + $config['boards'] = array(array('' => '/', '' => '/boards.html', '' => '/faq.html', '' => '/random.php', '' => '/create.php', '' => '/bans.html', '' => '/search.php', '' => '/mod.php', '' => 'https://qchat.rizon.net/?channels=#8chan'), array('b', 'meta', 'news+'), array(''=>'https://twitter.com/infinitechan')); //$config['boards'] = array(array('' => '/', '' => '/boards.html', '' => '/faq.html', '' => '/random.php', '' => '/create.php', '' => '/search.php', '' => '/mod.php', '' => 'https://qchat.rizon.net/?channels=#8chan'), array('b', 'meta', 'int'), array('v', 'a', 'tg', 'fit', 'pol', 'tech', 'mu', 'co', 'sp', 'boards'), array(''=>'https://twitter.com/infinitechan')); + $config['footer'][] = 'All posts on 8chan.co are the responsibility of the individual poster and not the administration of 8chan.co, pursuant to 47 U.S.C. § 230.'; + $config['footer'][] = 'We have not been served any secret court orders and are not under any gag orders.'; $config['footer'][] = 'Contribute to 8chan.co development at github'; - $config['footer'][] = 'To make a DMCA request or report illegal content, please email admin@8chan.co or use the "Global Report" functionality on every page.'; + $config['footer'][] = 'To make a DMCA request or report illegal content, please email admin@8chan.co.'; $config['search']['enable'] = true; -//$config['debug'] = true; $config['syslog'] = true; $config['wordfilters'][] = array('\rule', ''); // 'true' means it's a regular expression @@ -189,6 +197,10 @@ ); $config['gzip_static'] = false; +$config['hash_masked_ip'] = true; +$config['force_subject_op'] = false; +$config['min_links'] = 0; +$config['min_body'] = 0; // 8chan specific mod pages require '8chan-mod-pages.php'; diff --git a/inc/lib/webm/ffmpeg.php b/inc/lib/webm/ffmpeg.php index 935b5932..8e4076d1 100644 --- a/inc/lib/webm/ffmpeg.php +++ b/inc/lib/webm/ffmpeg.php @@ -30,8 +30,17 @@ function is_valid_webm($ffprobe_out) { if (empty($ffprobe_out)) return array('code' => 1, 'msg' => $config['error']['genwebmerror']); - if ($ffprobe_out['format']['format_name'] != 'matroska,webm') - return array('code' => 2, 'msg' => $config['error']['invalidwebm']); + $extension = pathinfo($ffprobe_out['format']['filename'], PATHINFO_EXTENSION); + + if ($extension === 'webm') { + if ($ffprobe_out['format']['format_name'] != 'matroska,webm') + return array('code' => 2, 'msg' => $config['error']['invalidwebm']); + } elseif ($extension === 'mp4') { + if ($ffprobe_out['streams'][0]['codec_name'] != 'h264' && $ffprobe_out['streams'][1]['codec_name'] != 'aac') + return array('code' => 2, 'msg' => $config['error']['invalidwebm']); + } else { + return array('code' => 1, 'msg' => $config['error']['genwebmerror']); + } if ((count($ffprobe_out['streams']) > 1) && (!$config['webm']['allow_audio'])) return array('code' => 3, 'msg' => $config['error']['webmhasaudio']); @@ -49,11 +58,11 @@ function make_webm_thumbnail($filename, $thumbnail, $width, $height) { $filename = escapeshellarg($filename); $thumbnail = escapeshellarg($thumbnail); // Should be safe by default but you // can never be too safe. - $ffmpeg = $config['webm']['ffmpeg_path']; + + $ret = 0; $ffmpeg_out = array(); + exec("$ffmpeg -strict -2 -i $filename -v quiet -ss 00:00:00 -an -vframes 1 -f mjpeg -vf scale=$width:$height $thumbnail 2>&1", $ffmpeg_out, $ret); - exec("$ffmpeg -strict -2 -i $filename -v quiet -ss 00:00:00 -an -vframes 1 -f mjpeg -vf scale=$width:$height $thumbnail 2>&1"); - - return count($ffmpeg_out); + return $ret; } diff --git a/inc/lib/webm/posthandler.php b/inc/lib/webm/posthandler.php index a5b7429b..18b4186f 100644 --- a/inc/lib/webm/posthandler.php +++ b/inc/lib/webm/posthandler.php @@ -5,7 +5,7 @@ function postHandler($post) { global $board, $config; - if ($post->has_file) foreach ($post->files as &$file) if ($file->extension == 'webm') { + if ($post->has_file) foreach ($post->files as &$file) if ($file->extension == 'webm' || $file->extension == 'mp4') { if ($config['webm']['use_ffmpeg']) { require_once dirname(__FILE__) . '/ffmpeg.php'; $webminfo = get_webm_info($file->file_path); @@ -21,7 +21,7 @@ function postHandler($post) { $file = set_thumbnail_dimensions($post, $file); $tn_path = $board['dir'] . $config['dir']['thumb'] . $file->file_id . '.jpg'; - if(false == make_webm_thumbnail($file->file_path, $tn_path, $file->thumbwidth, $file->thumbheight)) { + if(0 == make_webm_thumbnail($file->file_path, $tn_path, $file->thumbwidth, $file->thumbheight)) { $file->thumb = $file->file_id . '.jpg'; } else { diff --git a/inc/locale/en/LC_MESSAGES/tinyboard.po b/inc/locale/en/LC_MESSAGES/tinyboard.po index e1b8f64b..97fc01ac 100644 --- a/inc/locale/en/LC_MESSAGES/tinyboard.po +++ b/inc/locale/en/LC_MESSAGES/tinyboard.po @@ -689,7 +689,7 @@ msgstr "" msgid "You seem to have mistyped the verification." msgstr "" -#. Moderator errors +#. Volunteer errors #: ../../../../inc/config.php:906 ../../../../inc/config.php:1011 #: ../../../../inc/config.php:1002 ../../../../inc/config.php:1004 #: ../../../../inc/config.php:1006 ../../../../inc/config.php:1022 @@ -879,7 +879,7 @@ msgstr "" #: ../../../../inc/mod/pages.php:671 ../../../../inc/mod/pages.php:698 #: ../../../../templates/cache/72/7e/271125664718133518fd942f20fb724224e100f8a0d47cb0b52f895ac12f.php:300 #: ../../../../templates/cache/73/f8/5e3142a8a6f8d7e40422ff577e83b0dedf55a7cb9bc7082839b24f653545.php:75 -msgid "Moderation log" +msgid "Volunteer log" msgstr "" #. line 104 @@ -3489,7 +3489,7 @@ msgid "There are no active posts." msgstr "" #: ../../../../templates/cache/ba/55/2553cc018aecf7d29a62331aec4bedc71b646817c7e4c4e7d1a885263676.php:49 -msgid "Show only bans from boards I moderate" +msgid "Show only bans from boards I volunteer on" msgstr "" #: ../../../../templates/cache/ba/55/2553cc018aecf7d29a62331aec4bedc71b646817c7e4c4e7d1a885263676.php:55 diff --git a/inc/mod/pages.php b/inc/mod/pages.php index 1a56c99c..734a936e 100644 --- a/inc/mod/pages.php +++ b/inc/mod/pages.php @@ -495,7 +495,15 @@ function mod_new_board() { if (openBoard($_POST['uri'])) { error(sprintf($config['error']['boardexists'], $board['url'])); } - + foreach ($config['banned_boards'] as $i => $w) { + if ($w[0] !== '/') { + if (strpos($_POST['uri'],$w) !== false) + error(_("Cannot create board with banned word $w")); + } else { + if (preg_match($w,$_POST['uri'])) + error(_("Cannot create board matching banned pattern $w")); + } + } $query = prepare('INSERT INTO ``boards`` (``uri``, ``title``, ``subtitle``) VALUES (:uri, :title, :subtitle)'); $query->bindValue(':uri', $_POST['uri']); $query->bindValue(':title', $_POST['title']); @@ -625,7 +633,7 @@ function mod_news($page_no = 1) { rebuildThemes('news'); - header('Location: ?/news#' . $pdo->lastInsertId(), true, $config['redirect_http']); + header('Location: ?/edit_news#' . $pdo->lastInsertId(), true, $config['redirect_http']); } $query = prepare("SELECT * FROM ``news`` ORDER BY `id` DESC LIMIT :offset, :limit"); @@ -638,14 +646,14 @@ function mod_news($page_no = 1) { error($config['error']['404']); foreach ($news as &$entry) { - $entry['delete_token'] = make_secure_link_token('news/delete/' . $entry['id']); + $entry['delete_token'] = make_secure_link_token('edit_news/delete/' . $entry['id']); } $query = prepare("SELECT COUNT(*) FROM ``news``"); $query->execute() or error(db_error($query)); $count = $query->fetchColumn(); - mod_page(_('News'), 'mod/news.html', array('news' => $news, 'count' => $count, 'token' => make_secure_link_token('news'))); + mod_page(_('News'), 'mod/news.html', array('news' => $news, 'count' => $count, 'token' => make_secure_link_token('edit_news'))); } function mod_news_delete($id) { @@ -660,7 +668,7 @@ function mod_news_delete($id) { modLog('Deleted a news entry'); - header('Location: ?/news', true, $config['redirect_http']); + header('Location: ?/edit_news', true, $config['redirect_http']); } function mod_log($page_no = 1) { @@ -1591,12 +1599,13 @@ function mod_edit_post($board, $edit_raw_html, $postID) { error($config['error']['404']); if (isset($_POST['name'], $_POST['email'], $_POST['subject'], $_POST['body'])) { + $trip = isset($_POST['remove_trip']) ? ' `trip` = NULL,' : ''; if ($edit_raw_html) - $query = prepare(sprintf('UPDATE ``posts_%s`` SET `name` = :name, `email` = :email, `subject` = :subject, `body` = :body, `body_nomarkup` = :body_nomarkup, `edited_at` = NOW() WHERE `id` = :id', $board)); + $query = prepare(sprintf('UPDATE ``posts_%s`` SET `name` = :name,'. $trip .' `email` = :email, `subject` = :subject, `body` = :body, `body_nomarkup` = :body_nomarkup, `edited_at` = NOW() WHERE `id` = :id', $board)); else - $query = prepare(sprintf('UPDATE ``posts_%s`` SET `name` = :name, `email` = :email, `subject` = :subject, `body_nomarkup` = :body, `edited_at` = NOW() WHERE `id` = :id', $board)); + $query = prepare(sprintf('UPDATE ``posts_%s`` SET `name` = :name,'. $trip .' `email` = :email, `subject` = :subject, `body_nomarkup` = :body, `edited_at` = NOW() WHERE `id` = :id', $board)); $query->bindValue(':id', $postID); - $query->bindValue('name', $_POST['name']); + $query->bindValue(':name', $_POST['name'] ? $_POST['name'] : $config['anonymous']); $query->bindValue(':email', $_POST['email']); $query->bindValue(':subject', $_POST['subject']); $query->bindValue(':body', $_POST['body']); @@ -2987,6 +2996,9 @@ function mod_report_clean( $global_reports, $board, $unclean, $post, $global, $l $log_action = ($unclean ? "Closed" : "Re-opened" ); $log_scope = ($local && $global ? "local and global" : ($local ? "local" : "global" ) ); modLog( "{$log_action} reports for post #{$post} in {$log_scope}.", $board); + if ($config['cache']['enabled']) { + cache::delete("post_clean_{$board}_{$post}"); + } rebuildPost( $post ); } diff --git a/install.sql b/install.sql index 812349c1..9a03736f 100644 --- a/install.sql +++ b/install.sql @@ -67,6 +67,8 @@ CREATE TABLE IF NOT EXISTS `boards` ( `subtitle` tinytext, `indexed` boolean default true, `public_bans` boolean default true, + `8archive` boolean default false, + `sfw` boolean default false, PRIMARY KEY (`uri`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4; @@ -75,13 +77,6 @@ CREATE TABLE IF NOT EXISTS `board_create` ( `uri` text NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; --- --- Dumping data for table `boards` --- - -INSERT INTO `boards` VALUES -('b', 'Random', NULL); - -- -------------------------------------------------------- -- @@ -227,6 +222,7 @@ CREATE TABLE IF NOT EXISTS `reports` ( `board` varchar(58) CHARACTER SET utf8 DEFAULT NULL, `post` int(11) NOT NULL, `reason` text NOT NULL, + `local` tinyint(1) NOT NULL DEFAULT '0', `global` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1 ; @@ -322,6 +318,19 @@ CREATE TABLE `post_clean` ( UNIQUE KEY `clean_id_UNIQUE` (`clean_id`) ); +-- -------------------------------------------------------- + +-- +-- Table structure for table `board_tags` +-- + +CREATE TABLE `board_tags` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `uri` varchar(30) DEFAULT NULL, + `tag` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +); + /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/js/ajax.js b/js/ajax.js index 663f4426..a80ae541 100644 --- a/js/ajax.js +++ b/js/ajax.js @@ -55,7 +55,7 @@ $(window).ready(function() { } return xhr; }, - success: function(post_response) { + success: function(post_response, textStatus, xhr) { if (post_response.error) { if (post_response.banned) { // You are banned. Must post the form normally so the user can see the ban message. @@ -109,23 +109,15 @@ $(window).ready(function() { $(form).find('input[type="submit"]').val(_('Posted...')); $(document).trigger("ajax_after_post", post_response); } else { + console.log(xhr); alert(_('An unknown error occured when posting!')); $(form).find('input[type="submit"]').val(submit_txt); $(form).find('input[type="submit"]').removeAttr('disabled'); } }, error: function(xhr, status, er) { - // An error occured - do_not_ajax = true; - $(form).find('input[type="submit"]').each(function() { - var $replacement = $(''); - $replacement.attr('name', $(this).attr('name')); - $replacement.val(submit_txt); - $(this) - .after($replacement) - .replaceWith($('').val(submit_txt)); - }); - $(form).submit(); + console.log(xhr); + alert(_('The server returned an error or truncated response -- your post was probably still submitted. If it wasn\'t, 8chan.co might be experiencing issues right now -- please try your post again later.')); }, data: formData, cache: false, diff --git a/js/captcha.js b/js/captcha.js new file mode 100644 index 00000000..1824214b --- /dev/null +++ b/js/captcha.js @@ -0,0 +1,44 @@ +var tout; + +function redo_events(provider, extra) { + $('.captcha .captcha_text, textarea[id="body"]').off("focus").one("focus", function() { actually_load_captcha(provider, extra); }); +} + +function actually_load_captcha(provider, extra) { + $('.captcha .captcha_text, textarea[id="body"]').off("focus"); + + if (tout !== undefined) { + clearTimeout(tout); + } + + $.getJSON(provider, {mode: 'get', extra: extra}, function(json) { + $(".captcha .captcha_cookie").val(json.cookie); + $(".captcha .captcha_html").html(json.captchahtml); + + setTimeout(function() { + redo_events(provider, extra); + }, json.expires_in * 1000); + }); +} + +function load_captcha(provider, extra) { + $(function() { + $(".captcha>td").html(""+ + ""+ + "
"); + + $("#quick-reply .captcha .captcha_text").prop("placeholder", _("Verification")); + + $(".captcha .captcha_html").on("click", function() { actually_load_captcha(provider, extra); }); + $(document).on("ajax_after_post", function() { actually_load_captcha(provider, extra); }); + redo_events(provider, extra); + + $(window).on("quick-reply", function() { + redo_events(provider, extra); + $("#quick-reply .captcha .captcha_html").html($("form:not(#quick-reply) .captcha .captcha_html").html()); + $("#quick-reply .captcha .captcha_cookie").val($("form:not(#quick-reply) .captcha .captcha_cookie").html()); + $("#quick-reply .captcha .captcha_html").on("click", function() { actually_load_captcha(provider, extra); }); + }); + }); +} + diff --git a/js/disable-styles.js b/js/disable-styles.js new file mode 100644 index 00000000..c69f4e2d --- /dev/null +++ b/js/disable-styles.js @@ -0,0 +1,35 @@ +/* Adds a checkbox in the General options tab to disable and enable board style sheets. */ + +$(document).ready(function () { + var disableStyles = localStorage['disablestylesheet'] ? true : false; + /* only search for and disable board stylesheets if the user is on a page that uses them */ + if(active_page == 'ukko' || active_page == 'thread' || active_page == 'index' || active_page == 'catalog') + { + var i = 0 + while(i' + ' Disable board specific style sheets' + '') + $('#disablestyle').find('input').prop('checked', disableStyles) + } + + $('#disablestyle').on('change', function() { + if(disableStyles) { + delete localStorage.disablestylesheet + } else { + localStorage.disablestylesheet = true + } + disableStyles =! disableStyles + if(active_page == 'ukko' || active_page == 'thread' || active_page == 'index' || active_page == 'catalog') document.styleSheets[sheet].disabled = disableStyles + }) +}) diff --git a/js/expand-too-long.js b/js/expand-too-long.js index d6ea43af..6e8b5080 100644 --- a/js/expand-too-long.js +++ b/js/expand-too-long.js @@ -26,6 +26,9 @@ $(function() { var content = $(data).find('#'+url.split('#')[1]).parent().parent().find(".body").first().html(); body.html(content); + + var post = $(body).parents('.post'); + $(document).trigger('new_post', post); } }); }); diff --git a/js/expand-video.js b/js/expand-video.js index 79872510..6d04b858 100644 --- a/js/expand-video.js +++ b/js/expand-video.js @@ -204,13 +204,13 @@ function setupVideo(thumb, url) { function setupVideosIn(element) { var thumbs = element.querySelectorAll("a.file"); for (var i = 0; i < thumbs.length; i++) { - if (/\.webm$/.test(thumbs[i].pathname)) { + if (/(\.webm)|(\.mp4)$/.test(thumbs[i].pathname)) { setupVideo(thumbs[i], thumbs[i].href); } else { var m = thumbs[i].search.match(/\bv=([^&]*)/); if (m != null) { var url = decodeURIComponent(m[1]); - if (/\.webm$/.test(url)) setupVideo(thumbs[i], url); + if (/(\.webm)|(\.mp4)$/.test(url)) setupVideo(thumbs[i], url); } } } diff --git a/js/favorites.js b/js/favorites.js index 39bae783..acef9c7e 100644 --- a/js/favorites.js +++ b/js/favorites.js @@ -56,7 +56,6 @@ if (active_page == 'thread' || active_page == 'index' || active_page == 'catalog $(document).ready(function(){ var favorites = JSON.parse(localStorage.favorites); var is_board_favorite = ~$.inArray(board_name, favorites); - console.log(is_board_favorite); $('header>h1').append('\u2605'); add_favorites(); diff --git a/js/inline-expanding.js b/js/inline-expanding.js index cf8cab81..05300138 100644 --- a/js/inline-expanding.js +++ b/js/inline-expanding.js @@ -19,7 +19,7 @@ onready(function(){ for (var i = 0; i < link.length; i++) { if (typeof link[i] == "object" && link[i].childNodes && typeof link[i].childNodes[0] !== 'undefined' && link[i].childNodes[0].src && link[i].childNodes[0].className.match(/post-image/) && !link[i].className.match(/file/)) { link[i].onclick = function(e) { - var img, post_body, still_open; + var img, post_body, still_open, canvas; var thumb = this.childNodes[0]; var padding = 5; var boardlist = $('.boardlist')[0]; @@ -43,8 +43,10 @@ onready(function(){ this.dataset.expanded = 'true'; if (thumb.tagName === 'CANVAS') { - this.removeChild(thumb); - thumb.style.display = 'block'; + canvas = thumb; + thumb = thumb.nextSibling; + this.removeChild(canvas); + canvas.style.display = 'block'; } thumb.style.opacity = '0.4'; @@ -72,10 +74,10 @@ onready(function(){ if (still_open > 1) { if (e.target.getBoundingClientRect().top - padding < 0) - $('body').scrollTop($(e.target).parent().parent().offset().top - padding); + $(document).scrollTop($(e.target).parent().parent().offset().top - padding); } else { if (post_body[0].getBoundingClientRect().top - padding < 0) - $('body').scrollTop(post_body.offset().top - padding); + $(document).scrollTop(post_body.offset().top - padding); } } diff --git a/js/jquery.tablesorter.min.js b/js/jquery.tablesorter.min.js new file mode 100644 index 00000000..b8605df1 --- /dev/null +++ b/js/jquery.tablesorter.min.js @@ -0,0 +1,4 @@ + +(function($){$.extend({tablesorter:new +function(){var parsers=[],widgets=[];this.defaults={cssHeader:"header",cssAsc:"headerSortUp",cssDesc:"headerSortDown",cssChildRow:"expand-child",sortInitialOrder:"asc",sortMultiSortKey:"shiftKey",sortForce:null,sortAppend:null,sortLocaleCompare:true,textExtraction:"simple",parsers:{},widgets:[],widgetZebra:{css:["even","odd"]},headers:{},widthFixed:false,cancelSelection:true,sortList:[],headerList:[],dateFormat:"us",decimal:'/\.|\,/g',onRenderHeader:null,selectorHeaders:'thead th',debug:false};function benchmark(s,d){log(s+","+(new Date().getTime()-d.getTime())+"ms");}this.benchmark=benchmark;function log(s){if(typeof console!="undefined"&&typeof console.debug!="undefined"){console.log(s);}else{alert(s);}}function buildParserCache(table,$headers){if(table.config.debug){var parsersDebug="";}if(table.tBodies.length==0)return;var rows=table.tBodies[0].rows;if(rows[0]){var list=[],cells=rows[0].cells,l=cells.length;for(var i=0;i1){arr=arr.concat(checkCellColSpan(table,headerArr,row++));}else{if(table.tHead.length==1||(cell.rowSpan>1||!r[row+1])){arr.push(cell);}}}return arr;};function checkHeaderMetadata(cell){if(($.metadata)&&($(cell).metadata().sorter===false)){return true;};return false;}function checkHeaderOptions(table,i){if((table.config.headers[i])&&(table.config.headers[i].sorter===false)){return true;};return false;}function checkHeaderOptionsSortingLocked(table,i){if((table.config.headers[i])&&(table.config.headers[i].lockedOrder))return table.config.headers[i].lockedOrder;return false;}function applyWidget(table){var c=table.config.widgets;var l=c.length;for(var i=0;i');$("tr:first td",table.tBodies[0]).each(function(){colgroup.append($('').css('width',$(this).width()));});$(table).prepend(colgroup);};}function updateHeaderSortCount(table,sortList){var c=table.config,l=sortList.length;for(var i=0;i b["+i+"]) ? 1 : 0));";};function makeSortTextDesc(i){return"((b["+i+"] < a["+i+"]) ? -1 : ((b["+i+"] > a["+i+"]) ? 1 : 0));";};function makeSortNumeric(i){return"a["+i+"]-b["+i+"];";};function makeSortNumericDesc(i){return"b["+i+"]-a["+i+"];";};function sortText(a,b){if(table.config.sortLocaleCompare)return a.localeCompare(b);return((ab)?1:0));};function sortTextDesc(a,b){if(table.config.sortLocaleCompare)return b.localeCompare(a);return((ba)?1:0));};function sortNumeric(a,b){return a-b;};function sortNumericDesc(a,b){return b-a;};function getCachedSortType(parsers,i){return parsers[i].type;};this.construct=function(settings){return this.each(function(){if(!this.tHead||!this.tBodies)return;var $this,$document,$headers,cache,config,shiftDown=0,sortOrder;this.config={};config=$.extend(this.config,$.tablesorter.defaults,settings);$this=$(this);$.data(this,"tablesorter",config);$headers=buildHeaders(this);this.config.parsers=buildParserCache(this,$headers);cache=buildCache(this);var sortCSS=[config.cssDesc,config.cssAsc];fixColumnWidth(this);$headers.click(function(e){var totalRows=($this[0].tBodies[0]&&$this[0].tBodies[0].rows.length)||0;if(!this.sortDisabled&&totalRows>0){$this.trigger("sortStart");var $cell=$(this);var i=this.column;this.order=this.count++%2;if(this.lockedOrder)this.order=this.lockedOrder;if(!e[config.sortMultiSortKey]){config.sortList=[];if(config.sortForce!=null){var a=config.sortForce;for(var j=0;j0){$this.trigger("sorton",[config.sortList]);}applyWidget(this);});};this.addParser=function(parser){var l=parsers.length,a=true;for(var i=0;i 0) return; + if (active_page === "catalog") var c = $(''); else diff --git a/js/post-hover.js b/js/post-hover.js index eefb3875..94841cc5 100644 --- a/js/post-hover.js +++ b/js/post-hover.js @@ -73,6 +73,7 @@ onready(function(){ .css('font-style', 'normal') .css('z-index', '100') .css('left', '0') + .css('margin-left', '') .addClass('reply').addClass('post') .appendTo(link.closest('div.post')) diff --git a/js/quick-reply.js b/js/quick-reply.js index 07fe4aef..7156b224 100644 --- a/js/quick-reply.js +++ b/js/quick-reply.js @@ -87,7 +87,7 @@ -webkit-box-sizing:border-box;\ -moz-box-sizing: border-box;\ font-size: 10pt;\ - resize: vertical;\ + resize: both;\ }\ #quick-reply input, #quick-reply select, #quick-reply textarea {\ margin: 0 0 1px 0;\ @@ -149,14 +149,14 @@ .removeAttr('size') .attr('placeholder', $th.clone().children().remove().end().text()); } - + // Move anti-spam nonsense and remove $th.contents().filter(function() { return this.nodeType == 3; // Node.TEXT_NODE }).remove(); $th.contents().appendTo($dummyStuff); $th.remove(); - + if ($td.find('input[name="password"]').length) { // Hide password field $(this).hide(); @@ -280,7 +280,7 @@ $postForm.find('textarea[name="body"]').removeAttr('id').removeAttr('cols').attr('placeholder', _('Comment')); - $postForm.find('textarea:not([name="body"]),input[type="hidden"]').removeAttr('id').appendTo($dummyStuff); + $postForm.find('textarea:not([name="body"]),input[type="hidden"]:not(.captcha_cookie)').removeAttr('id').appendTo($dummyStuff); $postForm.find('br').remove(); $postForm.find('table').prepend('\ diff --git a/js/show-backlinks.js b/js/show-backlinks.js index fa4865fd..8410fc6e 100644 --- a/js/show-backlinks.js +++ b/js/show-backlinks.js @@ -15,7 +15,7 @@ onready(function(){ var showBackLinks = function() { - var reply_id = $(this).attr('id').replace(/^reply_/, ''); + var reply_id = $(this).attr('id').replace(/^(reply|op)_/, ''); $(this).find('div.body a:not([rel="nofollow"])').each(function() { var id, post, $mentioned; @@ -26,6 +26,9 @@ onready(function(){ return; $post = $('#reply_' + id); + if($post.length == 0) + $post = $('#op_' + id); + if($post.length == 0) return; @@ -38,7 +41,8 @@ onready(function(){ var $link = $('>>' + reply_id + ''); - $link.appendTo($mentioned) + $link.appendTo($mentioned); + $link.after(" "); if (window.init_hover) { $link.each(init_hover); diff --git a/js/thread-stats.js b/js/thread-stats.js index 59fed912..c66916f1 100644 --- a/js/thread-stats.js +++ b/js/thread-stats.js @@ -1,4 +1,4 @@ -/* +/* * thread-stats.js * - Adds statistics of the thread below the posts area * - Shows ID post count beside each postID on hover @@ -8,8 +8,9 @@ * $config['additional_javascript'][] = 'js/thread-stats.js'; */ if (active_page == 'thread') { +$(document).ready(function(){ //check if page uses unique ID - var IDsupport = ($('.poster_id').length > 0); + var IDsupport = ($('.poster_id').length > 0); var thread_id = (document.location.pathname + document.location.search).split('/'); thread_id = thread_id[thread_id.length -1].split('+')[0].split('.')[0]; @@ -49,9 +50,12 @@ if (active_page == 'thread') { ids[opID] = 0; } ids[opID]++; + var cur = op.find('>.intro >.poster_id'); + cur.find('+.posts_by_id').remove(); + cur.after(' ('+ ids[cur.text()] +')'); replies.each(function(){ - var cur = $(this).find('> .intro > .poster_id'); - cur.find('+ .posts_by_id').remove(); + cur = $(this).find('>.intro >.poster_id'); + cur.find('+.posts_by_id').remove(); cur.after(' ('+ ids[cur.text()] +')'); }); var size = function(obj) { @@ -64,7 +68,7 @@ if (active_page == 'thread') { $('#thread_stats_uids').text(size(ids)); } $.getJSON('//'+ document.location.host +'/'+ board_name +'/threads.json').success(function(data){ - var found, page = 'Pruned or Deleted'; + var found, page = '???'; for (var i=0;data[i];i++){ var threads = data[i].threads; for (var j=0; threads[j]; j++){ @@ -78,13 +82,14 @@ if (active_page == 'thread') { } $('#thread_stats_page').text(page); if (!found) $('#thread_stats_page').css('color','red'); + else $('#thread_stats_page').css('color',''); }); } // load the current page the thread is on. // uses ajax call so it gets loaded on a delay (depending on network resources available) var thread_stats_page_timer = setInterval(function(){ $.getJSON('//'+ document.location.host +'/'+ board_name +'/threads.json').success(function(data){ - var found, page = 'Pruned or Deleted'; + var found, page = '???'; for (var i=0;data[i];i++){ var threads = data[i].threads; for (var j=0; threads[j]; j++){ @@ -98,12 +103,12 @@ if (active_page == 'thread') { } $('#thread_stats_page').text(page); if (!found) $('#thread_stats_page').css('color','red'); + else $('#thread_stats_page').css('color',''); }); },30000); - $(document).ready(function(){ $('body').append(''); update_thread_stats(); $('#update_thread').click(update_thread_stats); $(document).on('new_post',update_thread_stats); - }); -} \ No newline at end of file +}); +} diff --git a/js/thread-watcher.js b/js/thread-watcher.js index b66dc657..7f20e028 100644 --- a/js/thread-watcher.js +++ b/js/thread-watcher.js @@ -147,15 +147,16 @@ $(document).ready(function(){ } //Append the watchlist toggle button. - $('.boardlist').append('[ watchlist ]'); + $('.boardlist').append('[ watchlist ]'); //Append a watch thread button after every OP. - $('.op>.intro').append('[Watch Thread]'); + $('.op>.intro').append('[Watch Thread]'); //Draw the watchlist, hidden. watchlist.render(); //Show or hide the watchlist. - $('#watchlist-toggle').on('click', function(e) { + $('.watchlist-toggle').on('click', function(e) { + e.preventDefault(); //if ctrl+click, reset the watchlist. if (e.ctrlKey) { watchlist.render(true); @@ -169,7 +170,8 @@ $(document).ready(function(){ //Trigger the watchlist add function. //The selector is passed as an argument in case the page is not a thread. - $('.watchThread').on('click', function() { + $('.watchThread').on('click', function(e) { + e.preventDefault(); watchlist.add(this).render(); }); diff --git a/js/treeview.js b/js/treeview.js index 78ad620b..1709debb 100644 --- a/js/treeview.js +++ b/js/treeview.js @@ -11,14 +11,28 @@ * */ +if (active_page == 'thread' || active_page == 'ukko' || active_page == 'index') +$(function() { + if (window.Options && Options.get_tab('general')) { + var selector = '#treeview-global>input'; + Options.extend_tab("general", ""); + $(selector).on('change', function() { + if (localStorage.treeview === 'true') { + localStorage.treeview = 'false'; + } else { + localStorage.treeview = 'true'; + } + }); + if (localStorage.treeview === 'true') { + $(selector).attr('checked', 'checked'); + } + } +}); + if (active_page == 'thread') $(function() { - $('hr:first').before('
'); - $('div#treeview a') - .text(_('Tree view')) - .click(function(e) { - e.preventDefault(); - + var treeview = function(enable) { + if (enable === true) { $('.post.reply').each(function(){ var references = []; $(this).find('.body a').each(function(){ @@ -26,7 +40,6 @@ $(function() { references.push(parseInt($(this).html().replace('>>', ''))); } }); - var maxref = references.reduce(function(a,b) { return a > b ? a : b; }, 0); var parent_post = $("#reply_"+maxref); @@ -39,7 +52,24 @@ $(function() { post.detach().css("margin-left", margin).insertAfter(parent_post.next()); br.detach().insertAfter(post); - }); - }); + } else { + $('.post.reply').sort(function(a,b) { + return parseInt(a.id.replace('reply_', '')) - parseInt(b.id.replace('reply_', '')); + }).each(function () { + var post = $(this); + var br = post.next(); + post.detach().css('margin-left', '').appendTo('.thread'); + br.detach().insertAfter(post); + }); + } + } + + $('hr:first').before('
'); + $('input#treeview').on('change', function(e) { treeview($(this).is(':checked')); }); + + if (localStorage.treeview === 'true') { + treeview(true); + $('input#treeview').attr('checked', true); + } }); diff --git a/js/twemoji/16x16/1f004.png b/js/twemoji/16x16/1f004.png new file mode 100644 index 00000000..0eb8396e Binary files /dev/null and b/js/twemoji/16x16/1f004.png differ diff --git a/js/twemoji/16x16/1f0cf.png b/js/twemoji/16x16/1f0cf.png new file mode 100644 index 00000000..890a3a1a Binary files /dev/null and b/js/twemoji/16x16/1f0cf.png differ diff --git a/js/twemoji/16x16/1f170.png b/js/twemoji/16x16/1f170.png new file mode 100644 index 00000000..84ab0c15 Binary files /dev/null and b/js/twemoji/16x16/1f170.png differ diff --git a/js/twemoji/16x16/1f171.png b/js/twemoji/16x16/1f171.png new file mode 100644 index 00000000..dec77999 Binary files /dev/null and b/js/twemoji/16x16/1f171.png differ diff --git a/js/twemoji/16x16/1f17e.png b/js/twemoji/16x16/1f17e.png new file mode 100644 index 00000000..f872a674 Binary files /dev/null and b/js/twemoji/16x16/1f17e.png differ diff --git a/js/twemoji/16x16/1f17f.png b/js/twemoji/16x16/1f17f.png new file mode 100644 index 00000000..2e5f5f03 Binary files /dev/null and b/js/twemoji/16x16/1f17f.png differ diff --git a/js/twemoji/16x16/1f18e.png b/js/twemoji/16x16/1f18e.png new file mode 100644 index 00000000..531fee13 Binary files /dev/null and b/js/twemoji/16x16/1f18e.png differ diff --git a/js/twemoji/16x16/1f191.png b/js/twemoji/16x16/1f191.png new file mode 100644 index 00000000..b28ebb4b Binary files /dev/null and b/js/twemoji/16x16/1f191.png differ diff --git a/js/twemoji/16x16/1f192.png b/js/twemoji/16x16/1f192.png new file mode 100644 index 00000000..ee9334b9 Binary files /dev/null and b/js/twemoji/16x16/1f192.png differ diff --git a/js/twemoji/16x16/1f193.png b/js/twemoji/16x16/1f193.png new file mode 100644 index 00000000..4f3c0594 Binary files /dev/null and b/js/twemoji/16x16/1f193.png differ diff --git a/js/twemoji/16x16/1f194.png b/js/twemoji/16x16/1f194.png new file mode 100644 index 00000000..12d07c3d Binary files /dev/null and b/js/twemoji/16x16/1f194.png differ diff --git a/js/twemoji/16x16/1f195.png b/js/twemoji/16x16/1f195.png new file mode 100644 index 00000000..91c03875 Binary files /dev/null and b/js/twemoji/16x16/1f195.png differ diff --git a/js/twemoji/16x16/1f196.png b/js/twemoji/16x16/1f196.png new file mode 100644 index 00000000..07403604 Binary files /dev/null and b/js/twemoji/16x16/1f196.png differ diff --git a/js/twemoji/16x16/1f197.png b/js/twemoji/16x16/1f197.png new file mode 100644 index 00000000..e912a012 Binary files /dev/null and b/js/twemoji/16x16/1f197.png differ diff --git a/js/twemoji/16x16/1f198.png b/js/twemoji/16x16/1f198.png new file mode 100644 index 00000000..3611b53f Binary files /dev/null and b/js/twemoji/16x16/1f198.png differ diff --git a/js/twemoji/16x16/1f199.png b/js/twemoji/16x16/1f199.png new file mode 100644 index 00000000..8b5d23a2 Binary files /dev/null and b/js/twemoji/16x16/1f199.png differ diff --git a/js/twemoji/16x16/1f19a.png b/js/twemoji/16x16/1f19a.png new file mode 100644 index 00000000..737c950c Binary files /dev/null and b/js/twemoji/16x16/1f19a.png differ diff --git a/js/twemoji/16x16/1f1e6.png b/js/twemoji/16x16/1f1e6.png new file mode 100644 index 00000000..7ed03ac8 Binary files /dev/null and b/js/twemoji/16x16/1f1e6.png differ diff --git a/js/twemoji/16x16/1f1e7.png b/js/twemoji/16x16/1f1e7.png new file mode 100644 index 00000000..9f629458 Binary files /dev/null and b/js/twemoji/16x16/1f1e7.png differ diff --git a/js/twemoji/16x16/1f1e8-1f1f3.png b/js/twemoji/16x16/1f1e8-1f1f3.png new file mode 100644 index 00000000..5b56f0fd Binary files /dev/null and b/js/twemoji/16x16/1f1e8-1f1f3.png differ diff --git a/js/twemoji/16x16/1f1e8.png b/js/twemoji/16x16/1f1e8.png new file mode 100644 index 00000000..a8ca3b42 Binary files /dev/null and b/js/twemoji/16x16/1f1e8.png differ diff --git a/js/twemoji/16x16/1f1e9-1f1ea.png b/js/twemoji/16x16/1f1e9-1f1ea.png new file mode 100644 index 00000000..a2a3cba0 Binary files /dev/null and b/js/twemoji/16x16/1f1e9-1f1ea.png differ diff --git a/js/twemoji/16x16/1f1e9.png b/js/twemoji/16x16/1f1e9.png new file mode 100644 index 00000000..dd3c8fcb Binary files /dev/null and b/js/twemoji/16x16/1f1e9.png differ diff --git a/js/twemoji/16x16/1f1ea-1f1f8.png b/js/twemoji/16x16/1f1ea-1f1f8.png new file mode 100644 index 00000000..c2c054fa Binary files /dev/null and b/js/twemoji/16x16/1f1ea-1f1f8.png differ diff --git a/js/twemoji/16x16/1f1ea.png b/js/twemoji/16x16/1f1ea.png new file mode 100644 index 00000000..1b50ff76 Binary files /dev/null and b/js/twemoji/16x16/1f1ea.png differ diff --git a/js/twemoji/16x16/1f1eb-1f1f7.png b/js/twemoji/16x16/1f1eb-1f1f7.png new file mode 100644 index 00000000..c0133dd4 Binary files /dev/null and b/js/twemoji/16x16/1f1eb-1f1f7.png differ diff --git a/js/twemoji/16x16/1f1eb.png b/js/twemoji/16x16/1f1eb.png new file mode 100644 index 00000000..4e223d4c Binary files /dev/null and b/js/twemoji/16x16/1f1eb.png differ diff --git a/js/twemoji/16x16/1f1ec-1f1e7.png b/js/twemoji/16x16/1f1ec-1f1e7.png new file mode 100644 index 00000000..cc485e4c Binary files /dev/null and b/js/twemoji/16x16/1f1ec-1f1e7.png differ diff --git a/js/twemoji/16x16/1f1ec.png b/js/twemoji/16x16/1f1ec.png new file mode 100644 index 00000000..9af52998 Binary files /dev/null and b/js/twemoji/16x16/1f1ec.png differ diff --git a/js/twemoji/16x16/1f1ed.png b/js/twemoji/16x16/1f1ed.png new file mode 100644 index 00000000..74e2deda Binary files /dev/null and b/js/twemoji/16x16/1f1ed.png differ diff --git a/js/twemoji/16x16/1f1ee-1f1f9.png b/js/twemoji/16x16/1f1ee-1f1f9.png new file mode 100644 index 00000000..529b435c Binary files /dev/null and b/js/twemoji/16x16/1f1ee-1f1f9.png differ diff --git a/js/twemoji/16x16/1f1ee.png b/js/twemoji/16x16/1f1ee.png new file mode 100644 index 00000000..7f0a8caa Binary files /dev/null and b/js/twemoji/16x16/1f1ee.png differ diff --git a/js/twemoji/16x16/1f1ef-1f1f5.png b/js/twemoji/16x16/1f1ef-1f1f5.png new file mode 100644 index 00000000..808a3807 Binary files /dev/null and b/js/twemoji/16x16/1f1ef-1f1f5.png differ diff --git a/js/twemoji/16x16/1f1ef.png b/js/twemoji/16x16/1f1ef.png new file mode 100644 index 00000000..b2b351b6 Binary files /dev/null and b/js/twemoji/16x16/1f1ef.png differ diff --git a/js/twemoji/16x16/1f1f0-1f1f7.png b/js/twemoji/16x16/1f1f0-1f1f7.png new file mode 100644 index 00000000..1ac962e2 Binary files /dev/null and b/js/twemoji/16x16/1f1f0-1f1f7.png differ diff --git a/js/twemoji/16x16/1f1f0.png b/js/twemoji/16x16/1f1f0.png new file mode 100644 index 00000000..0e2dd102 Binary files /dev/null and b/js/twemoji/16x16/1f1f0.png differ diff --git a/js/twemoji/16x16/1f1f1.png b/js/twemoji/16x16/1f1f1.png new file mode 100644 index 00000000..4fdec336 Binary files /dev/null and b/js/twemoji/16x16/1f1f1.png differ diff --git a/js/twemoji/16x16/1f1f2.png b/js/twemoji/16x16/1f1f2.png new file mode 100644 index 00000000..ecb1bf3c Binary files /dev/null and b/js/twemoji/16x16/1f1f2.png differ diff --git a/js/twemoji/16x16/1f1f3.png b/js/twemoji/16x16/1f1f3.png new file mode 100644 index 00000000..d52f06ae Binary files /dev/null and b/js/twemoji/16x16/1f1f3.png differ diff --git a/js/twemoji/16x16/1f1f4.png b/js/twemoji/16x16/1f1f4.png new file mode 100644 index 00000000..a12dafa1 Binary files /dev/null and b/js/twemoji/16x16/1f1f4.png differ diff --git a/js/twemoji/16x16/1f1f5.png b/js/twemoji/16x16/1f1f5.png new file mode 100644 index 00000000..e9136ed4 Binary files /dev/null and b/js/twemoji/16x16/1f1f5.png differ diff --git a/js/twemoji/16x16/1f1f6.png b/js/twemoji/16x16/1f1f6.png new file mode 100644 index 00000000..08b800d7 Binary files /dev/null and b/js/twemoji/16x16/1f1f6.png differ diff --git a/js/twemoji/16x16/1f1f7-1f1fa.png b/js/twemoji/16x16/1f1f7-1f1fa.png new file mode 100644 index 00000000..25dc951b Binary files /dev/null and b/js/twemoji/16x16/1f1f7-1f1fa.png differ diff --git a/js/twemoji/16x16/1f1f7.png b/js/twemoji/16x16/1f1f7.png new file mode 100644 index 00000000..e7f1ede6 Binary files /dev/null and b/js/twemoji/16x16/1f1f7.png differ diff --git a/js/twemoji/16x16/1f1f8.png b/js/twemoji/16x16/1f1f8.png new file mode 100644 index 00000000..0fe9064d Binary files /dev/null and b/js/twemoji/16x16/1f1f8.png differ diff --git a/js/twemoji/16x16/1f1f9.png b/js/twemoji/16x16/1f1f9.png new file mode 100644 index 00000000..d54b4059 Binary files /dev/null and b/js/twemoji/16x16/1f1f9.png differ diff --git a/js/twemoji/16x16/1f1fa-1f1f8.png b/js/twemoji/16x16/1f1fa-1f1f8.png new file mode 100644 index 00000000..06c50885 Binary files /dev/null and b/js/twemoji/16x16/1f1fa-1f1f8.png differ diff --git a/js/twemoji/16x16/1f1fa.png b/js/twemoji/16x16/1f1fa.png new file mode 100644 index 00000000..19d5e5ed Binary files /dev/null and b/js/twemoji/16x16/1f1fa.png differ diff --git a/js/twemoji/16x16/1f1fb.png b/js/twemoji/16x16/1f1fb.png new file mode 100644 index 00000000..c9752744 Binary files /dev/null and b/js/twemoji/16x16/1f1fb.png differ diff --git a/js/twemoji/16x16/1f1fc.png b/js/twemoji/16x16/1f1fc.png new file mode 100644 index 00000000..ba7a32b6 Binary files /dev/null and b/js/twemoji/16x16/1f1fc.png differ diff --git a/js/twemoji/16x16/1f1fd.png b/js/twemoji/16x16/1f1fd.png new file mode 100644 index 00000000..c3095177 Binary files /dev/null and b/js/twemoji/16x16/1f1fd.png differ diff --git a/js/twemoji/16x16/1f1fe.png b/js/twemoji/16x16/1f1fe.png new file mode 100644 index 00000000..493619db Binary files /dev/null and b/js/twemoji/16x16/1f1fe.png differ diff --git a/js/twemoji/16x16/1f1ff.png b/js/twemoji/16x16/1f1ff.png new file mode 100644 index 00000000..79b34cb7 Binary files /dev/null and b/js/twemoji/16x16/1f1ff.png differ diff --git a/js/twemoji/16x16/1f201.png b/js/twemoji/16x16/1f201.png new file mode 100644 index 00000000..833b0b15 Binary files /dev/null and b/js/twemoji/16x16/1f201.png differ diff --git a/js/twemoji/16x16/1f202.png b/js/twemoji/16x16/1f202.png new file mode 100644 index 00000000..1e26dfa7 Binary files /dev/null and b/js/twemoji/16x16/1f202.png differ diff --git a/js/twemoji/16x16/1f21a.png b/js/twemoji/16x16/1f21a.png new file mode 100644 index 00000000..5aef59d9 Binary files /dev/null and b/js/twemoji/16x16/1f21a.png differ diff --git a/js/twemoji/16x16/1f22f.png b/js/twemoji/16x16/1f22f.png new file mode 100644 index 00000000..d2f0fa97 Binary files /dev/null and b/js/twemoji/16x16/1f22f.png differ diff --git a/js/twemoji/16x16/1f232.png b/js/twemoji/16x16/1f232.png new file mode 100644 index 00000000..2be9f183 Binary files /dev/null and b/js/twemoji/16x16/1f232.png differ diff --git a/js/twemoji/16x16/1f233.png b/js/twemoji/16x16/1f233.png new file mode 100644 index 00000000..e600ee5f Binary files /dev/null and b/js/twemoji/16x16/1f233.png differ diff --git a/js/twemoji/16x16/1f234.png b/js/twemoji/16x16/1f234.png new file mode 100644 index 00000000..26fd10eb Binary files /dev/null and b/js/twemoji/16x16/1f234.png differ diff --git a/js/twemoji/16x16/1f235.png b/js/twemoji/16x16/1f235.png new file mode 100644 index 00000000..6e945fb6 Binary files /dev/null and b/js/twemoji/16x16/1f235.png differ diff --git a/js/twemoji/16x16/1f236.png b/js/twemoji/16x16/1f236.png new file mode 100644 index 00000000..2b7c245d Binary files /dev/null and b/js/twemoji/16x16/1f236.png differ diff --git a/js/twemoji/16x16/1f237.png b/js/twemoji/16x16/1f237.png new file mode 100644 index 00000000..7ac3ab54 Binary files /dev/null and b/js/twemoji/16x16/1f237.png differ diff --git a/js/twemoji/16x16/1f238.png b/js/twemoji/16x16/1f238.png new file mode 100644 index 00000000..f49ae52f Binary files /dev/null and b/js/twemoji/16x16/1f238.png differ diff --git a/js/twemoji/16x16/1f239.png b/js/twemoji/16x16/1f239.png new file mode 100644 index 00000000..5ea044b0 Binary files /dev/null and b/js/twemoji/16x16/1f239.png differ diff --git a/js/twemoji/16x16/1f23a.png b/js/twemoji/16x16/1f23a.png new file mode 100644 index 00000000..5be6c4b9 Binary files /dev/null and b/js/twemoji/16x16/1f23a.png differ diff --git a/js/twemoji/16x16/1f250.png b/js/twemoji/16x16/1f250.png new file mode 100644 index 00000000..a652386d Binary files /dev/null and b/js/twemoji/16x16/1f250.png differ diff --git a/js/twemoji/16x16/1f251.png b/js/twemoji/16x16/1f251.png new file mode 100644 index 00000000..5bf16234 Binary files /dev/null and b/js/twemoji/16x16/1f251.png differ diff --git a/js/twemoji/16x16/1f300.png b/js/twemoji/16x16/1f300.png new file mode 100644 index 00000000..61ef6edc Binary files /dev/null and b/js/twemoji/16x16/1f300.png differ diff --git a/js/twemoji/16x16/1f301.png b/js/twemoji/16x16/1f301.png new file mode 100644 index 00000000..e714735e Binary files /dev/null and b/js/twemoji/16x16/1f301.png differ diff --git a/js/twemoji/16x16/1f302.png b/js/twemoji/16x16/1f302.png new file mode 100644 index 00000000..e84757e4 Binary files /dev/null and b/js/twemoji/16x16/1f302.png differ diff --git a/js/twemoji/16x16/1f303.png b/js/twemoji/16x16/1f303.png new file mode 100644 index 00000000..96562953 Binary files /dev/null and b/js/twemoji/16x16/1f303.png differ diff --git a/js/twemoji/16x16/1f304.png b/js/twemoji/16x16/1f304.png new file mode 100644 index 00000000..7056f1c3 Binary files /dev/null and b/js/twemoji/16x16/1f304.png differ diff --git a/js/twemoji/16x16/1f305.png b/js/twemoji/16x16/1f305.png new file mode 100644 index 00000000..7780a9b5 Binary files /dev/null and b/js/twemoji/16x16/1f305.png differ diff --git a/js/twemoji/16x16/1f306.png b/js/twemoji/16x16/1f306.png new file mode 100644 index 00000000..75bbdc26 Binary files /dev/null and b/js/twemoji/16x16/1f306.png differ diff --git a/js/twemoji/16x16/1f307.png b/js/twemoji/16x16/1f307.png new file mode 100644 index 00000000..389b077a Binary files /dev/null and b/js/twemoji/16x16/1f307.png differ diff --git a/js/twemoji/16x16/1f308.png b/js/twemoji/16x16/1f308.png new file mode 100644 index 00000000..e3576e18 Binary files /dev/null and b/js/twemoji/16x16/1f308.png differ diff --git a/js/twemoji/16x16/1f309.png b/js/twemoji/16x16/1f309.png new file mode 100644 index 00000000..65b29635 Binary files /dev/null and b/js/twemoji/16x16/1f309.png differ diff --git a/js/twemoji/16x16/1f30a.png b/js/twemoji/16x16/1f30a.png new file mode 100644 index 00000000..3ff32a81 Binary files /dev/null and b/js/twemoji/16x16/1f30a.png differ diff --git a/js/twemoji/16x16/1f30b.png b/js/twemoji/16x16/1f30b.png new file mode 100644 index 00000000..1b4c7619 Binary files /dev/null and b/js/twemoji/16x16/1f30b.png differ diff --git a/js/twemoji/16x16/1f30c.png b/js/twemoji/16x16/1f30c.png new file mode 100644 index 00000000..75edffca Binary files /dev/null and b/js/twemoji/16x16/1f30c.png differ diff --git a/js/twemoji/16x16/1f30d.png b/js/twemoji/16x16/1f30d.png new file mode 100644 index 00000000..b175ff56 Binary files /dev/null and b/js/twemoji/16x16/1f30d.png differ diff --git a/js/twemoji/16x16/1f30e.png b/js/twemoji/16x16/1f30e.png new file mode 100644 index 00000000..b9a9ce5f Binary files /dev/null and b/js/twemoji/16x16/1f30e.png differ diff --git a/js/twemoji/16x16/1f30f.png b/js/twemoji/16x16/1f30f.png new file mode 100644 index 00000000..fd7bb3e8 Binary files /dev/null and b/js/twemoji/16x16/1f30f.png differ diff --git a/js/twemoji/16x16/1f310.png b/js/twemoji/16x16/1f310.png new file mode 100644 index 00000000..25733292 Binary files /dev/null and b/js/twemoji/16x16/1f310.png differ diff --git a/js/twemoji/16x16/1f311.png b/js/twemoji/16x16/1f311.png new file mode 100644 index 00000000..c66bf2af Binary files /dev/null and b/js/twemoji/16x16/1f311.png differ diff --git a/js/twemoji/16x16/1f312.png b/js/twemoji/16x16/1f312.png new file mode 100644 index 00000000..fd554274 Binary files /dev/null and b/js/twemoji/16x16/1f312.png differ diff --git a/js/twemoji/16x16/1f313.png b/js/twemoji/16x16/1f313.png new file mode 100644 index 00000000..0c162386 Binary files /dev/null and b/js/twemoji/16x16/1f313.png differ diff --git a/js/twemoji/16x16/1f314.png b/js/twemoji/16x16/1f314.png new file mode 100644 index 00000000..84575165 Binary files /dev/null and b/js/twemoji/16x16/1f314.png differ diff --git a/js/twemoji/16x16/1f315.png b/js/twemoji/16x16/1f315.png new file mode 100644 index 00000000..8dd7db23 Binary files /dev/null and b/js/twemoji/16x16/1f315.png differ diff --git a/js/twemoji/16x16/1f316.png b/js/twemoji/16x16/1f316.png new file mode 100644 index 00000000..fbf42517 Binary files /dev/null and b/js/twemoji/16x16/1f316.png differ diff --git a/js/twemoji/16x16/1f317.png b/js/twemoji/16x16/1f317.png new file mode 100644 index 00000000..0c162386 Binary files /dev/null and b/js/twemoji/16x16/1f317.png differ diff --git a/js/twemoji/16x16/1f318.png b/js/twemoji/16x16/1f318.png new file mode 100644 index 00000000..84575165 Binary files /dev/null and b/js/twemoji/16x16/1f318.png differ diff --git a/js/twemoji/16x16/1f319.png b/js/twemoji/16x16/1f319.png new file mode 100644 index 00000000..9890176a Binary files /dev/null and b/js/twemoji/16x16/1f319.png differ diff --git a/js/twemoji/16x16/1f31a.png b/js/twemoji/16x16/1f31a.png new file mode 100644 index 00000000..fd79b2eb Binary files /dev/null and b/js/twemoji/16x16/1f31a.png differ diff --git a/js/twemoji/16x16/1f31b.png b/js/twemoji/16x16/1f31b.png new file mode 100644 index 00000000..00ce38cc Binary files /dev/null and b/js/twemoji/16x16/1f31b.png differ diff --git a/js/twemoji/16x16/1f31c.png b/js/twemoji/16x16/1f31c.png new file mode 100644 index 00000000..fd6a7e19 Binary files /dev/null and b/js/twemoji/16x16/1f31c.png differ diff --git a/js/twemoji/16x16/1f31d.png b/js/twemoji/16x16/1f31d.png new file mode 100644 index 00000000..5845549c Binary files /dev/null and b/js/twemoji/16x16/1f31d.png differ diff --git a/js/twemoji/16x16/1f31e.png b/js/twemoji/16x16/1f31e.png new file mode 100644 index 00000000..f80014b5 Binary files /dev/null and b/js/twemoji/16x16/1f31e.png differ diff --git a/js/twemoji/16x16/1f31f.png b/js/twemoji/16x16/1f31f.png new file mode 100644 index 00000000..a475167a Binary files /dev/null and b/js/twemoji/16x16/1f31f.png differ diff --git a/js/twemoji/16x16/1f320.png b/js/twemoji/16x16/1f320.png new file mode 100644 index 00000000..a5f805c7 Binary files /dev/null and b/js/twemoji/16x16/1f320.png differ diff --git a/js/twemoji/16x16/1f330.png b/js/twemoji/16x16/1f330.png new file mode 100644 index 00000000..4115839b Binary files /dev/null and b/js/twemoji/16x16/1f330.png differ diff --git a/js/twemoji/16x16/1f331.png b/js/twemoji/16x16/1f331.png new file mode 100644 index 00000000..3d77413f Binary files /dev/null and b/js/twemoji/16x16/1f331.png differ diff --git a/js/twemoji/16x16/1f332.png b/js/twemoji/16x16/1f332.png new file mode 100644 index 00000000..0ad3ffdd Binary files /dev/null and b/js/twemoji/16x16/1f332.png differ diff --git a/js/twemoji/16x16/1f333.png b/js/twemoji/16x16/1f333.png new file mode 100644 index 00000000..6ad90fdd Binary files /dev/null and b/js/twemoji/16x16/1f333.png differ diff --git a/js/twemoji/16x16/1f334.png b/js/twemoji/16x16/1f334.png new file mode 100644 index 00000000..5eac82e3 Binary files /dev/null and b/js/twemoji/16x16/1f334.png differ diff --git a/js/twemoji/16x16/1f335.png b/js/twemoji/16x16/1f335.png new file mode 100644 index 00000000..41d7684f Binary files /dev/null and b/js/twemoji/16x16/1f335.png differ diff --git a/js/twemoji/16x16/1f337.png b/js/twemoji/16x16/1f337.png new file mode 100644 index 00000000..e98971d2 Binary files /dev/null and b/js/twemoji/16x16/1f337.png differ diff --git a/js/twemoji/16x16/1f338.png b/js/twemoji/16x16/1f338.png new file mode 100644 index 00000000..b49998b6 Binary files /dev/null and b/js/twemoji/16x16/1f338.png differ diff --git a/js/twemoji/16x16/1f339.png b/js/twemoji/16x16/1f339.png new file mode 100644 index 00000000..259c72c8 Binary files /dev/null and b/js/twemoji/16x16/1f339.png differ diff --git a/js/twemoji/16x16/1f33a.png b/js/twemoji/16x16/1f33a.png new file mode 100644 index 00000000..8747d016 Binary files /dev/null and b/js/twemoji/16x16/1f33a.png differ diff --git a/js/twemoji/16x16/1f33b.png b/js/twemoji/16x16/1f33b.png new file mode 100644 index 00000000..342fad4c Binary files /dev/null and b/js/twemoji/16x16/1f33b.png differ diff --git a/js/twemoji/16x16/1f33c.png b/js/twemoji/16x16/1f33c.png new file mode 100644 index 00000000..4061d487 Binary files /dev/null and b/js/twemoji/16x16/1f33c.png differ diff --git a/js/twemoji/16x16/1f33d.png b/js/twemoji/16x16/1f33d.png new file mode 100644 index 00000000..c0e26432 Binary files /dev/null and b/js/twemoji/16x16/1f33d.png differ diff --git a/js/twemoji/16x16/1f33e.png b/js/twemoji/16x16/1f33e.png new file mode 100644 index 00000000..e44d204c Binary files /dev/null and b/js/twemoji/16x16/1f33e.png differ diff --git a/js/twemoji/16x16/1f33f.png b/js/twemoji/16x16/1f33f.png new file mode 100644 index 00000000..b58dcd1e Binary files /dev/null and b/js/twemoji/16x16/1f33f.png differ diff --git a/js/twemoji/16x16/1f340.png b/js/twemoji/16x16/1f340.png new file mode 100644 index 00000000..c6146a0f Binary files /dev/null and b/js/twemoji/16x16/1f340.png differ diff --git a/js/twemoji/16x16/1f341.png b/js/twemoji/16x16/1f341.png new file mode 100644 index 00000000..5b2b8d13 Binary files /dev/null and b/js/twemoji/16x16/1f341.png differ diff --git a/js/twemoji/16x16/1f342.png b/js/twemoji/16x16/1f342.png new file mode 100644 index 00000000..ed152829 Binary files /dev/null and b/js/twemoji/16x16/1f342.png differ diff --git a/js/twemoji/16x16/1f343.png b/js/twemoji/16x16/1f343.png new file mode 100644 index 00000000..c1a544bc Binary files /dev/null and b/js/twemoji/16x16/1f343.png differ diff --git a/js/twemoji/16x16/1f344.png b/js/twemoji/16x16/1f344.png new file mode 100644 index 00000000..d419e594 Binary files /dev/null and b/js/twemoji/16x16/1f344.png differ diff --git a/js/twemoji/16x16/1f345.png b/js/twemoji/16x16/1f345.png new file mode 100644 index 00000000..b1d39a27 Binary files /dev/null and b/js/twemoji/16x16/1f345.png differ diff --git a/js/twemoji/16x16/1f346.png b/js/twemoji/16x16/1f346.png new file mode 100644 index 00000000..d156a503 Binary files /dev/null and b/js/twemoji/16x16/1f346.png differ diff --git a/js/twemoji/16x16/1f347.png b/js/twemoji/16x16/1f347.png new file mode 100644 index 00000000..f94a3feb Binary files /dev/null and b/js/twemoji/16x16/1f347.png differ diff --git a/js/twemoji/16x16/1f348.png b/js/twemoji/16x16/1f348.png new file mode 100644 index 00000000..33b0fa16 Binary files /dev/null and b/js/twemoji/16x16/1f348.png differ diff --git a/js/twemoji/16x16/1f349.png b/js/twemoji/16x16/1f349.png new file mode 100644 index 00000000..00119af1 Binary files /dev/null and b/js/twemoji/16x16/1f349.png differ diff --git a/js/twemoji/16x16/1f34a.png b/js/twemoji/16x16/1f34a.png new file mode 100644 index 00000000..62882df2 Binary files /dev/null and b/js/twemoji/16x16/1f34a.png differ diff --git a/js/twemoji/16x16/1f34b.png b/js/twemoji/16x16/1f34b.png new file mode 100644 index 00000000..43a7df6d Binary files /dev/null and b/js/twemoji/16x16/1f34b.png differ diff --git a/js/twemoji/16x16/1f34c.png b/js/twemoji/16x16/1f34c.png new file mode 100644 index 00000000..ec1a4ba1 Binary files /dev/null and b/js/twemoji/16x16/1f34c.png differ diff --git a/js/twemoji/16x16/1f34d.png b/js/twemoji/16x16/1f34d.png new file mode 100644 index 00000000..80c72cd1 Binary files /dev/null and b/js/twemoji/16x16/1f34d.png differ diff --git a/js/twemoji/16x16/1f34e.png b/js/twemoji/16x16/1f34e.png new file mode 100644 index 00000000..45a72e90 Binary files /dev/null and b/js/twemoji/16x16/1f34e.png differ diff --git a/js/twemoji/16x16/1f34f.png b/js/twemoji/16x16/1f34f.png new file mode 100644 index 00000000..601e66d8 Binary files /dev/null and b/js/twemoji/16x16/1f34f.png differ diff --git a/js/twemoji/16x16/1f350.png b/js/twemoji/16x16/1f350.png new file mode 100644 index 00000000..684dff12 Binary files /dev/null and b/js/twemoji/16x16/1f350.png differ diff --git a/js/twemoji/16x16/1f351.png b/js/twemoji/16x16/1f351.png new file mode 100644 index 00000000..21328144 Binary files /dev/null and b/js/twemoji/16x16/1f351.png differ diff --git a/js/twemoji/16x16/1f352.png b/js/twemoji/16x16/1f352.png new file mode 100644 index 00000000..e8d7af7d Binary files /dev/null and b/js/twemoji/16x16/1f352.png differ diff --git a/js/twemoji/16x16/1f353.png b/js/twemoji/16x16/1f353.png new file mode 100644 index 00000000..cc12d821 Binary files /dev/null and b/js/twemoji/16x16/1f353.png differ diff --git a/js/twemoji/16x16/1f354.png b/js/twemoji/16x16/1f354.png new file mode 100644 index 00000000..9f7b66c2 Binary files /dev/null and b/js/twemoji/16x16/1f354.png differ diff --git a/js/twemoji/16x16/1f355.png b/js/twemoji/16x16/1f355.png new file mode 100644 index 00000000..582dd1f1 Binary files /dev/null and b/js/twemoji/16x16/1f355.png differ diff --git a/js/twemoji/16x16/1f356.png b/js/twemoji/16x16/1f356.png new file mode 100644 index 00000000..a18f7d37 Binary files /dev/null and b/js/twemoji/16x16/1f356.png differ diff --git a/js/twemoji/16x16/1f357.png b/js/twemoji/16x16/1f357.png new file mode 100644 index 00000000..c274db07 Binary files /dev/null and b/js/twemoji/16x16/1f357.png differ diff --git a/js/twemoji/16x16/1f358.png b/js/twemoji/16x16/1f358.png new file mode 100644 index 00000000..f505517c Binary files /dev/null and b/js/twemoji/16x16/1f358.png differ diff --git a/js/twemoji/16x16/1f359.png b/js/twemoji/16x16/1f359.png new file mode 100644 index 00000000..b520dfcb Binary files /dev/null and b/js/twemoji/16x16/1f359.png differ diff --git a/js/twemoji/16x16/1f35a.png b/js/twemoji/16x16/1f35a.png new file mode 100644 index 00000000..b6b44a79 Binary files /dev/null and b/js/twemoji/16x16/1f35a.png differ diff --git a/js/twemoji/16x16/1f35b.png b/js/twemoji/16x16/1f35b.png new file mode 100644 index 00000000..fcc098d0 Binary files /dev/null and b/js/twemoji/16x16/1f35b.png differ diff --git a/js/twemoji/16x16/1f35c.png b/js/twemoji/16x16/1f35c.png new file mode 100644 index 00000000..eb15ac16 Binary files /dev/null and b/js/twemoji/16x16/1f35c.png differ diff --git a/js/twemoji/16x16/1f35d.png b/js/twemoji/16x16/1f35d.png new file mode 100644 index 00000000..d05d4f61 Binary files /dev/null and b/js/twemoji/16x16/1f35d.png differ diff --git a/js/twemoji/16x16/1f35e.png b/js/twemoji/16x16/1f35e.png new file mode 100644 index 00000000..5cf14217 Binary files /dev/null and b/js/twemoji/16x16/1f35e.png differ diff --git a/js/twemoji/16x16/1f35f.png b/js/twemoji/16x16/1f35f.png new file mode 100644 index 00000000..8e85bac6 Binary files /dev/null and b/js/twemoji/16x16/1f35f.png differ diff --git a/js/twemoji/16x16/1f360.png b/js/twemoji/16x16/1f360.png new file mode 100644 index 00000000..549a0a3e Binary files /dev/null and b/js/twemoji/16x16/1f360.png differ diff --git a/js/twemoji/16x16/1f361.png b/js/twemoji/16x16/1f361.png new file mode 100644 index 00000000..cdd8bc26 Binary files /dev/null and b/js/twemoji/16x16/1f361.png differ diff --git a/js/twemoji/16x16/1f362.png b/js/twemoji/16x16/1f362.png new file mode 100644 index 00000000..7fe1b59d Binary files /dev/null and b/js/twemoji/16x16/1f362.png differ diff --git a/js/twemoji/16x16/1f363.png b/js/twemoji/16x16/1f363.png new file mode 100644 index 00000000..f1010d8c Binary files /dev/null and b/js/twemoji/16x16/1f363.png differ diff --git a/js/twemoji/16x16/1f364.png b/js/twemoji/16x16/1f364.png new file mode 100644 index 00000000..272dd38c Binary files /dev/null and b/js/twemoji/16x16/1f364.png differ diff --git a/js/twemoji/16x16/1f365.png b/js/twemoji/16x16/1f365.png new file mode 100644 index 00000000..0adc148f Binary files /dev/null and b/js/twemoji/16x16/1f365.png differ diff --git a/js/twemoji/16x16/1f366.png b/js/twemoji/16x16/1f366.png new file mode 100644 index 00000000..ee6bb4c1 Binary files /dev/null and b/js/twemoji/16x16/1f366.png differ diff --git a/js/twemoji/16x16/1f367.png b/js/twemoji/16x16/1f367.png new file mode 100644 index 00000000..45ef259d Binary files /dev/null and b/js/twemoji/16x16/1f367.png differ diff --git a/js/twemoji/16x16/1f368.png b/js/twemoji/16x16/1f368.png new file mode 100644 index 00000000..6c6b3548 Binary files /dev/null and b/js/twemoji/16x16/1f368.png differ diff --git a/js/twemoji/16x16/1f369.png b/js/twemoji/16x16/1f369.png new file mode 100644 index 00000000..fcaf000a Binary files /dev/null and b/js/twemoji/16x16/1f369.png differ diff --git a/js/twemoji/16x16/1f36a.png b/js/twemoji/16x16/1f36a.png new file mode 100644 index 00000000..cd2d7e20 Binary files /dev/null and b/js/twemoji/16x16/1f36a.png differ diff --git a/js/twemoji/16x16/1f36b.png b/js/twemoji/16x16/1f36b.png new file mode 100644 index 00000000..44a7c62e Binary files /dev/null and b/js/twemoji/16x16/1f36b.png differ diff --git a/js/twemoji/16x16/1f36c.png b/js/twemoji/16x16/1f36c.png new file mode 100644 index 00000000..25cf3590 Binary files /dev/null and b/js/twemoji/16x16/1f36c.png differ diff --git a/js/twemoji/16x16/1f36d.png b/js/twemoji/16x16/1f36d.png new file mode 100644 index 00000000..3f363120 Binary files /dev/null and b/js/twemoji/16x16/1f36d.png differ diff --git a/js/twemoji/16x16/1f36e.png b/js/twemoji/16x16/1f36e.png new file mode 100644 index 00000000..7035dc4f Binary files /dev/null and b/js/twemoji/16x16/1f36e.png differ diff --git a/js/twemoji/16x16/1f36f.png b/js/twemoji/16x16/1f36f.png new file mode 100644 index 00000000..1f419034 Binary files /dev/null and b/js/twemoji/16x16/1f36f.png differ diff --git a/js/twemoji/16x16/1f370.png b/js/twemoji/16x16/1f370.png new file mode 100644 index 00000000..0bb40e88 Binary files /dev/null and b/js/twemoji/16x16/1f370.png differ diff --git a/js/twemoji/16x16/1f371.png b/js/twemoji/16x16/1f371.png new file mode 100644 index 00000000..de8190b6 Binary files /dev/null and b/js/twemoji/16x16/1f371.png differ diff --git a/js/twemoji/16x16/1f372.png b/js/twemoji/16x16/1f372.png new file mode 100644 index 00000000..f27dc599 Binary files /dev/null and b/js/twemoji/16x16/1f372.png differ diff --git a/js/twemoji/16x16/1f373.png b/js/twemoji/16x16/1f373.png new file mode 100644 index 00000000..df02e5b7 Binary files /dev/null and b/js/twemoji/16x16/1f373.png differ diff --git a/js/twemoji/16x16/1f374.png b/js/twemoji/16x16/1f374.png new file mode 100644 index 00000000..ac1b2c65 Binary files /dev/null and b/js/twemoji/16x16/1f374.png differ diff --git a/js/twemoji/16x16/1f375.png b/js/twemoji/16x16/1f375.png new file mode 100644 index 00000000..0020e243 Binary files /dev/null and b/js/twemoji/16x16/1f375.png differ diff --git a/js/twemoji/16x16/1f376.png b/js/twemoji/16x16/1f376.png new file mode 100644 index 00000000..e009a954 Binary files /dev/null and b/js/twemoji/16x16/1f376.png differ diff --git a/js/twemoji/16x16/1f377.png b/js/twemoji/16x16/1f377.png new file mode 100644 index 00000000..2145f129 Binary files /dev/null and b/js/twemoji/16x16/1f377.png differ diff --git a/js/twemoji/16x16/1f378.png b/js/twemoji/16x16/1f378.png new file mode 100644 index 00000000..73c75bd1 Binary files /dev/null and b/js/twemoji/16x16/1f378.png differ diff --git a/js/twemoji/16x16/1f379.png b/js/twemoji/16x16/1f379.png new file mode 100644 index 00000000..06cd8c36 Binary files /dev/null and b/js/twemoji/16x16/1f379.png differ diff --git a/js/twemoji/16x16/1f37a.png b/js/twemoji/16x16/1f37a.png new file mode 100644 index 00000000..7e729ed1 Binary files /dev/null and b/js/twemoji/16x16/1f37a.png differ diff --git a/js/twemoji/16x16/1f37b.png b/js/twemoji/16x16/1f37b.png new file mode 100644 index 00000000..7e2697aa Binary files /dev/null and b/js/twemoji/16x16/1f37b.png differ diff --git a/js/twemoji/16x16/1f37c.png b/js/twemoji/16x16/1f37c.png new file mode 100644 index 00000000..b22b4bdb Binary files /dev/null and b/js/twemoji/16x16/1f37c.png differ diff --git a/js/twemoji/16x16/1f380.png b/js/twemoji/16x16/1f380.png new file mode 100644 index 00000000..4c2326f3 Binary files /dev/null and b/js/twemoji/16x16/1f380.png differ diff --git a/js/twemoji/16x16/1f381.png b/js/twemoji/16x16/1f381.png new file mode 100644 index 00000000..b76987dd Binary files /dev/null and b/js/twemoji/16x16/1f381.png differ diff --git a/js/twemoji/16x16/1f382.png b/js/twemoji/16x16/1f382.png new file mode 100644 index 00000000..e019cfea Binary files /dev/null and b/js/twemoji/16x16/1f382.png differ diff --git a/js/twemoji/16x16/1f383.png b/js/twemoji/16x16/1f383.png new file mode 100644 index 00000000..68dbb512 Binary files /dev/null and b/js/twemoji/16x16/1f383.png differ diff --git a/js/twemoji/16x16/1f384.png b/js/twemoji/16x16/1f384.png new file mode 100644 index 00000000..451052e6 Binary files /dev/null and b/js/twemoji/16x16/1f384.png differ diff --git a/js/twemoji/16x16/1f385.png b/js/twemoji/16x16/1f385.png new file mode 100644 index 00000000..3ebc6d34 Binary files /dev/null and b/js/twemoji/16x16/1f385.png differ diff --git a/js/twemoji/16x16/1f386.png b/js/twemoji/16x16/1f386.png new file mode 100644 index 00000000..5a9eea90 Binary files /dev/null and b/js/twemoji/16x16/1f386.png differ diff --git a/js/twemoji/16x16/1f387.png b/js/twemoji/16x16/1f387.png new file mode 100644 index 00000000..a525ffd5 Binary files /dev/null and b/js/twemoji/16x16/1f387.png differ diff --git a/js/twemoji/16x16/1f388.png b/js/twemoji/16x16/1f388.png new file mode 100644 index 00000000..9526eedf Binary files /dev/null and b/js/twemoji/16x16/1f388.png differ diff --git a/js/twemoji/16x16/1f389.png b/js/twemoji/16x16/1f389.png new file mode 100644 index 00000000..d03364a0 Binary files /dev/null and b/js/twemoji/16x16/1f389.png differ diff --git a/js/twemoji/16x16/1f38a.png b/js/twemoji/16x16/1f38a.png new file mode 100644 index 00000000..bc44b0b0 Binary files /dev/null and b/js/twemoji/16x16/1f38a.png differ diff --git a/js/twemoji/16x16/1f38b.png b/js/twemoji/16x16/1f38b.png new file mode 100644 index 00000000..dd2f0101 Binary files /dev/null and b/js/twemoji/16x16/1f38b.png differ diff --git a/js/twemoji/16x16/1f38c.png b/js/twemoji/16x16/1f38c.png new file mode 100644 index 00000000..690d111b Binary files /dev/null and b/js/twemoji/16x16/1f38c.png differ diff --git a/js/twemoji/16x16/1f38d.png b/js/twemoji/16x16/1f38d.png new file mode 100644 index 00000000..7dc83297 Binary files /dev/null and b/js/twemoji/16x16/1f38d.png differ diff --git a/js/twemoji/16x16/1f38e.png b/js/twemoji/16x16/1f38e.png new file mode 100644 index 00000000..42f2165e Binary files /dev/null and b/js/twemoji/16x16/1f38e.png differ diff --git a/js/twemoji/16x16/1f38f.png b/js/twemoji/16x16/1f38f.png new file mode 100644 index 00000000..a1f93e4d Binary files /dev/null and b/js/twemoji/16x16/1f38f.png differ diff --git a/js/twemoji/16x16/1f390.png b/js/twemoji/16x16/1f390.png new file mode 100644 index 00000000..47bd7b68 Binary files /dev/null and b/js/twemoji/16x16/1f390.png differ diff --git a/js/twemoji/16x16/1f391.png b/js/twemoji/16x16/1f391.png new file mode 100644 index 00000000..b9118f37 Binary files /dev/null and b/js/twemoji/16x16/1f391.png differ diff --git a/js/twemoji/16x16/1f392.png b/js/twemoji/16x16/1f392.png new file mode 100644 index 00000000..81bcedae Binary files /dev/null and b/js/twemoji/16x16/1f392.png differ diff --git a/js/twemoji/16x16/1f393.png b/js/twemoji/16x16/1f393.png new file mode 100644 index 00000000..b44cd8ac Binary files /dev/null and b/js/twemoji/16x16/1f393.png differ diff --git a/js/twemoji/16x16/1f3a0.png b/js/twemoji/16x16/1f3a0.png new file mode 100644 index 00000000..bfe5075e Binary files /dev/null and b/js/twemoji/16x16/1f3a0.png differ diff --git a/js/twemoji/16x16/1f3a1.png b/js/twemoji/16x16/1f3a1.png new file mode 100644 index 00000000..8f8c9c1f Binary files /dev/null and b/js/twemoji/16x16/1f3a1.png differ diff --git a/js/twemoji/16x16/1f3a2.png b/js/twemoji/16x16/1f3a2.png new file mode 100644 index 00000000..84a43dbd Binary files /dev/null and b/js/twemoji/16x16/1f3a2.png differ diff --git a/js/twemoji/16x16/1f3a3.png b/js/twemoji/16x16/1f3a3.png new file mode 100644 index 00000000..14759a6e Binary files /dev/null and b/js/twemoji/16x16/1f3a3.png differ diff --git a/js/twemoji/16x16/1f3a4.png b/js/twemoji/16x16/1f3a4.png new file mode 100644 index 00000000..d306a5ac Binary files /dev/null and b/js/twemoji/16x16/1f3a4.png differ diff --git a/js/twemoji/16x16/1f3a5.png b/js/twemoji/16x16/1f3a5.png new file mode 100644 index 00000000..1a30a92d Binary files /dev/null and b/js/twemoji/16x16/1f3a5.png differ diff --git a/js/twemoji/16x16/1f3a6.png b/js/twemoji/16x16/1f3a6.png new file mode 100644 index 00000000..59955014 Binary files /dev/null and b/js/twemoji/16x16/1f3a6.png differ diff --git a/js/twemoji/16x16/1f3a7.png b/js/twemoji/16x16/1f3a7.png new file mode 100644 index 00000000..c7aa8a42 Binary files /dev/null and b/js/twemoji/16x16/1f3a7.png differ diff --git a/js/twemoji/16x16/1f3a8.png b/js/twemoji/16x16/1f3a8.png new file mode 100644 index 00000000..ffcb9269 Binary files /dev/null and b/js/twemoji/16x16/1f3a8.png differ diff --git a/js/twemoji/16x16/1f3a9.png b/js/twemoji/16x16/1f3a9.png new file mode 100644 index 00000000..ef52d609 Binary files /dev/null and b/js/twemoji/16x16/1f3a9.png differ diff --git a/js/twemoji/16x16/1f3aa.png b/js/twemoji/16x16/1f3aa.png new file mode 100644 index 00000000..52587d38 Binary files /dev/null and b/js/twemoji/16x16/1f3aa.png differ diff --git a/js/twemoji/16x16/1f3ab.png b/js/twemoji/16x16/1f3ab.png new file mode 100644 index 00000000..269fabad Binary files /dev/null and b/js/twemoji/16x16/1f3ab.png differ diff --git a/js/twemoji/16x16/1f3ac.png b/js/twemoji/16x16/1f3ac.png new file mode 100644 index 00000000..4af39ce9 Binary files /dev/null and b/js/twemoji/16x16/1f3ac.png differ diff --git a/js/twemoji/16x16/1f3ad.png b/js/twemoji/16x16/1f3ad.png new file mode 100644 index 00000000..9e84d4f3 Binary files /dev/null and b/js/twemoji/16x16/1f3ad.png differ diff --git a/js/twemoji/16x16/1f3ae.png b/js/twemoji/16x16/1f3ae.png new file mode 100644 index 00000000..95ad25fb Binary files /dev/null and b/js/twemoji/16x16/1f3ae.png differ diff --git a/js/twemoji/16x16/1f3af.png b/js/twemoji/16x16/1f3af.png new file mode 100644 index 00000000..51d4213d Binary files /dev/null and b/js/twemoji/16x16/1f3af.png differ diff --git a/js/twemoji/16x16/1f3b0.png b/js/twemoji/16x16/1f3b0.png new file mode 100644 index 00000000..b9682c54 Binary files /dev/null and b/js/twemoji/16x16/1f3b0.png differ diff --git a/js/twemoji/16x16/1f3b1.png b/js/twemoji/16x16/1f3b1.png new file mode 100644 index 00000000..c9bec7a2 Binary files /dev/null and b/js/twemoji/16x16/1f3b1.png differ diff --git a/js/twemoji/16x16/1f3b2.png b/js/twemoji/16x16/1f3b2.png new file mode 100644 index 00000000..e82f4e5d Binary files /dev/null and b/js/twemoji/16x16/1f3b2.png differ diff --git a/js/twemoji/16x16/1f3b3.png b/js/twemoji/16x16/1f3b3.png new file mode 100644 index 00000000..e373147b Binary files /dev/null and b/js/twemoji/16x16/1f3b3.png differ diff --git a/js/twemoji/16x16/1f3b4.png b/js/twemoji/16x16/1f3b4.png new file mode 100644 index 00000000..0362d9ce Binary files /dev/null and b/js/twemoji/16x16/1f3b4.png differ diff --git a/js/twemoji/16x16/1f3b5.png b/js/twemoji/16x16/1f3b5.png new file mode 100644 index 00000000..3506d2e3 Binary files /dev/null and b/js/twemoji/16x16/1f3b5.png differ diff --git a/js/twemoji/16x16/1f3b6.png b/js/twemoji/16x16/1f3b6.png new file mode 100644 index 00000000..b5ac4212 Binary files /dev/null and b/js/twemoji/16x16/1f3b6.png differ diff --git a/js/twemoji/16x16/1f3b7.png b/js/twemoji/16x16/1f3b7.png new file mode 100644 index 00000000..c6ed6a70 Binary files /dev/null and b/js/twemoji/16x16/1f3b7.png differ diff --git a/js/twemoji/16x16/1f3b8.png b/js/twemoji/16x16/1f3b8.png new file mode 100644 index 00000000..f58dcd75 Binary files /dev/null and b/js/twemoji/16x16/1f3b8.png differ diff --git a/js/twemoji/16x16/1f3b9.png b/js/twemoji/16x16/1f3b9.png new file mode 100644 index 00000000..65da203b Binary files /dev/null and b/js/twemoji/16x16/1f3b9.png differ diff --git a/js/twemoji/16x16/1f3ba.png b/js/twemoji/16x16/1f3ba.png new file mode 100644 index 00000000..be52ea06 Binary files /dev/null and b/js/twemoji/16x16/1f3ba.png differ diff --git a/js/twemoji/16x16/1f3bb.png b/js/twemoji/16x16/1f3bb.png new file mode 100644 index 00000000..2955ae88 Binary files /dev/null and b/js/twemoji/16x16/1f3bb.png differ diff --git a/js/twemoji/16x16/1f3bc.png b/js/twemoji/16x16/1f3bc.png new file mode 100644 index 00000000..a5798d74 Binary files /dev/null and b/js/twemoji/16x16/1f3bc.png differ diff --git a/js/twemoji/16x16/1f3bd.png b/js/twemoji/16x16/1f3bd.png new file mode 100644 index 00000000..26aaf37d Binary files /dev/null and b/js/twemoji/16x16/1f3bd.png differ diff --git a/js/twemoji/16x16/1f3be.png b/js/twemoji/16x16/1f3be.png new file mode 100644 index 00000000..01c6fbfd Binary files /dev/null and b/js/twemoji/16x16/1f3be.png differ diff --git a/js/twemoji/16x16/1f3bf.png b/js/twemoji/16x16/1f3bf.png new file mode 100644 index 00000000..0f4d0b89 Binary files /dev/null and b/js/twemoji/16x16/1f3bf.png differ diff --git a/js/twemoji/16x16/1f3c0.png b/js/twemoji/16x16/1f3c0.png new file mode 100644 index 00000000..6d0a5f63 Binary files /dev/null and b/js/twemoji/16x16/1f3c0.png differ diff --git a/js/twemoji/16x16/1f3c1.png b/js/twemoji/16x16/1f3c1.png new file mode 100644 index 00000000..81b1ba2d Binary files /dev/null and b/js/twemoji/16x16/1f3c1.png differ diff --git a/js/twemoji/16x16/1f3c2.png b/js/twemoji/16x16/1f3c2.png new file mode 100644 index 00000000..57d0891e Binary files /dev/null and b/js/twemoji/16x16/1f3c2.png differ diff --git a/js/twemoji/16x16/1f3c3.png b/js/twemoji/16x16/1f3c3.png new file mode 100644 index 00000000..329e72ad Binary files /dev/null and b/js/twemoji/16x16/1f3c3.png differ diff --git a/js/twemoji/16x16/1f3c4.png b/js/twemoji/16x16/1f3c4.png new file mode 100644 index 00000000..07f0d77f Binary files /dev/null and b/js/twemoji/16x16/1f3c4.png differ diff --git a/js/twemoji/16x16/1f3c6.png b/js/twemoji/16x16/1f3c6.png new file mode 100644 index 00000000..ce552ab5 Binary files /dev/null and b/js/twemoji/16x16/1f3c6.png differ diff --git a/js/twemoji/16x16/1f3c7.png b/js/twemoji/16x16/1f3c7.png new file mode 100644 index 00000000..bcffc0de Binary files /dev/null and b/js/twemoji/16x16/1f3c7.png differ diff --git a/js/twemoji/16x16/1f3c8.png b/js/twemoji/16x16/1f3c8.png new file mode 100644 index 00000000..caf59094 Binary files /dev/null and b/js/twemoji/16x16/1f3c8.png differ diff --git a/js/twemoji/16x16/1f3c9.png b/js/twemoji/16x16/1f3c9.png new file mode 100644 index 00000000..ccba6757 Binary files /dev/null and b/js/twemoji/16x16/1f3c9.png differ diff --git a/js/twemoji/16x16/1f3ca.png b/js/twemoji/16x16/1f3ca.png new file mode 100644 index 00000000..e603918d Binary files /dev/null and b/js/twemoji/16x16/1f3ca.png differ diff --git a/js/twemoji/16x16/1f3e0.png b/js/twemoji/16x16/1f3e0.png new file mode 100644 index 00000000..9537eae4 Binary files /dev/null and b/js/twemoji/16x16/1f3e0.png differ diff --git a/js/twemoji/16x16/1f3e1.png b/js/twemoji/16x16/1f3e1.png new file mode 100644 index 00000000..dcc6b036 Binary files /dev/null and b/js/twemoji/16x16/1f3e1.png differ diff --git a/js/twemoji/16x16/1f3e2.png b/js/twemoji/16x16/1f3e2.png new file mode 100644 index 00000000..86d778ab Binary files /dev/null and b/js/twemoji/16x16/1f3e2.png differ diff --git a/js/twemoji/16x16/1f3e3.png b/js/twemoji/16x16/1f3e3.png new file mode 100644 index 00000000..f44688be Binary files /dev/null and b/js/twemoji/16x16/1f3e3.png differ diff --git a/js/twemoji/16x16/1f3e4.png b/js/twemoji/16x16/1f3e4.png new file mode 100644 index 00000000..5e58fc6d Binary files /dev/null and b/js/twemoji/16x16/1f3e4.png differ diff --git a/js/twemoji/16x16/1f3e5.png b/js/twemoji/16x16/1f3e5.png new file mode 100644 index 00000000..b1671e84 Binary files /dev/null and b/js/twemoji/16x16/1f3e5.png differ diff --git a/js/twemoji/16x16/1f3e6.png b/js/twemoji/16x16/1f3e6.png new file mode 100644 index 00000000..5fd4d34c Binary files /dev/null and b/js/twemoji/16x16/1f3e6.png differ diff --git a/js/twemoji/16x16/1f3e7.png b/js/twemoji/16x16/1f3e7.png new file mode 100644 index 00000000..ed3a8ab7 Binary files /dev/null and b/js/twemoji/16x16/1f3e7.png differ diff --git a/js/twemoji/16x16/1f3e8.png b/js/twemoji/16x16/1f3e8.png new file mode 100644 index 00000000..1c516a2b Binary files /dev/null and b/js/twemoji/16x16/1f3e8.png differ diff --git a/js/twemoji/16x16/1f3e9.png b/js/twemoji/16x16/1f3e9.png new file mode 100644 index 00000000..fb39a43d Binary files /dev/null and b/js/twemoji/16x16/1f3e9.png differ diff --git a/js/twemoji/16x16/1f3ea.png b/js/twemoji/16x16/1f3ea.png new file mode 100644 index 00000000..e1e41923 Binary files /dev/null and b/js/twemoji/16x16/1f3ea.png differ diff --git a/js/twemoji/16x16/1f3eb.png b/js/twemoji/16x16/1f3eb.png new file mode 100644 index 00000000..a6a2ceab Binary files /dev/null and b/js/twemoji/16x16/1f3eb.png differ diff --git a/js/twemoji/16x16/1f3ec.png b/js/twemoji/16x16/1f3ec.png new file mode 100644 index 00000000..0747a784 Binary files /dev/null and b/js/twemoji/16x16/1f3ec.png differ diff --git a/js/twemoji/16x16/1f3ed.png b/js/twemoji/16x16/1f3ed.png new file mode 100644 index 00000000..db95ed4d Binary files /dev/null and b/js/twemoji/16x16/1f3ed.png differ diff --git a/js/twemoji/16x16/1f3ee.png b/js/twemoji/16x16/1f3ee.png new file mode 100644 index 00000000..8f9b4a02 Binary files /dev/null and b/js/twemoji/16x16/1f3ee.png differ diff --git a/js/twemoji/16x16/1f3ef.png b/js/twemoji/16x16/1f3ef.png new file mode 100644 index 00000000..91cc1e70 Binary files /dev/null and b/js/twemoji/16x16/1f3ef.png differ diff --git a/js/twemoji/16x16/1f3f0.png b/js/twemoji/16x16/1f3f0.png new file mode 100644 index 00000000..85982f9d Binary files /dev/null and b/js/twemoji/16x16/1f3f0.png differ diff --git a/js/twemoji/16x16/1f400.png b/js/twemoji/16x16/1f400.png new file mode 100644 index 00000000..6b8f1fd6 Binary files /dev/null and b/js/twemoji/16x16/1f400.png differ diff --git a/js/twemoji/16x16/1f401.png b/js/twemoji/16x16/1f401.png new file mode 100644 index 00000000..4772c904 Binary files /dev/null and b/js/twemoji/16x16/1f401.png differ diff --git a/js/twemoji/16x16/1f402.png b/js/twemoji/16x16/1f402.png new file mode 100644 index 00000000..99031f8a Binary files /dev/null and b/js/twemoji/16x16/1f402.png differ diff --git a/js/twemoji/16x16/1f403.png b/js/twemoji/16x16/1f403.png new file mode 100644 index 00000000..b69396e7 Binary files /dev/null and b/js/twemoji/16x16/1f403.png differ diff --git a/js/twemoji/16x16/1f404.png b/js/twemoji/16x16/1f404.png new file mode 100644 index 00000000..5a6420f2 Binary files /dev/null and b/js/twemoji/16x16/1f404.png differ diff --git a/js/twemoji/16x16/1f405.png b/js/twemoji/16x16/1f405.png new file mode 100644 index 00000000..6dbdcb42 Binary files /dev/null and b/js/twemoji/16x16/1f405.png differ diff --git a/js/twemoji/16x16/1f406.png b/js/twemoji/16x16/1f406.png new file mode 100644 index 00000000..a0ece598 Binary files /dev/null and b/js/twemoji/16x16/1f406.png differ diff --git a/js/twemoji/16x16/1f407.png b/js/twemoji/16x16/1f407.png new file mode 100644 index 00000000..2fbb9a17 Binary files /dev/null and b/js/twemoji/16x16/1f407.png differ diff --git a/js/twemoji/16x16/1f408.png b/js/twemoji/16x16/1f408.png new file mode 100644 index 00000000..8df8f03e Binary files /dev/null and b/js/twemoji/16x16/1f408.png differ diff --git a/js/twemoji/16x16/1f409.png b/js/twemoji/16x16/1f409.png new file mode 100644 index 00000000..f5903034 Binary files /dev/null and b/js/twemoji/16x16/1f409.png differ diff --git a/js/twemoji/16x16/1f40a.png b/js/twemoji/16x16/1f40a.png new file mode 100644 index 00000000..41bef121 Binary files /dev/null and b/js/twemoji/16x16/1f40a.png differ diff --git a/js/twemoji/16x16/1f40b.png b/js/twemoji/16x16/1f40b.png new file mode 100644 index 00000000..6c94493b Binary files /dev/null and b/js/twemoji/16x16/1f40b.png differ diff --git a/js/twemoji/16x16/1f40c.png b/js/twemoji/16x16/1f40c.png new file mode 100644 index 00000000..5dbdd53f Binary files /dev/null and b/js/twemoji/16x16/1f40c.png differ diff --git a/js/twemoji/16x16/1f40d.png b/js/twemoji/16x16/1f40d.png new file mode 100644 index 00000000..64c24ff8 Binary files /dev/null and b/js/twemoji/16x16/1f40d.png differ diff --git a/js/twemoji/16x16/1f40e.png b/js/twemoji/16x16/1f40e.png new file mode 100644 index 00000000..ae72a94c Binary files /dev/null and b/js/twemoji/16x16/1f40e.png differ diff --git a/js/twemoji/16x16/1f40f.png b/js/twemoji/16x16/1f40f.png new file mode 100644 index 00000000..c5bb22c7 Binary files /dev/null and b/js/twemoji/16x16/1f40f.png differ diff --git a/js/twemoji/16x16/1f410.png b/js/twemoji/16x16/1f410.png new file mode 100644 index 00000000..70e4a9d2 Binary files /dev/null and b/js/twemoji/16x16/1f410.png differ diff --git a/js/twemoji/16x16/1f411.png b/js/twemoji/16x16/1f411.png new file mode 100644 index 00000000..38728fb2 Binary files /dev/null and b/js/twemoji/16x16/1f411.png differ diff --git a/js/twemoji/16x16/1f412.png b/js/twemoji/16x16/1f412.png new file mode 100644 index 00000000..37691b7e Binary files /dev/null and b/js/twemoji/16x16/1f412.png differ diff --git a/js/twemoji/16x16/1f413.png b/js/twemoji/16x16/1f413.png new file mode 100644 index 00000000..b8753a69 Binary files /dev/null and b/js/twemoji/16x16/1f413.png differ diff --git a/js/twemoji/16x16/1f414.png b/js/twemoji/16x16/1f414.png new file mode 100644 index 00000000..aad94b78 Binary files /dev/null and b/js/twemoji/16x16/1f414.png differ diff --git a/js/twemoji/16x16/1f415.png b/js/twemoji/16x16/1f415.png new file mode 100644 index 00000000..d3843976 Binary files /dev/null and b/js/twemoji/16x16/1f415.png differ diff --git a/js/twemoji/16x16/1f416.png b/js/twemoji/16x16/1f416.png new file mode 100644 index 00000000..fb62390d Binary files /dev/null and b/js/twemoji/16x16/1f416.png differ diff --git a/js/twemoji/16x16/1f417.png b/js/twemoji/16x16/1f417.png new file mode 100644 index 00000000..4300f313 Binary files /dev/null and b/js/twemoji/16x16/1f417.png differ diff --git a/js/twemoji/16x16/1f418.png b/js/twemoji/16x16/1f418.png new file mode 100644 index 00000000..8c7a6fcd Binary files /dev/null and b/js/twemoji/16x16/1f418.png differ diff --git a/js/twemoji/16x16/1f419.png b/js/twemoji/16x16/1f419.png new file mode 100644 index 00000000..2b501a3d Binary files /dev/null and b/js/twemoji/16x16/1f419.png differ diff --git a/js/twemoji/16x16/1f41a.png b/js/twemoji/16x16/1f41a.png new file mode 100644 index 00000000..3f91247a Binary files /dev/null and b/js/twemoji/16x16/1f41a.png differ diff --git a/js/twemoji/16x16/1f41b.png b/js/twemoji/16x16/1f41b.png new file mode 100644 index 00000000..fbd2b335 Binary files /dev/null and b/js/twemoji/16x16/1f41b.png differ diff --git a/js/twemoji/16x16/1f41c.png b/js/twemoji/16x16/1f41c.png new file mode 100644 index 00000000..2a03278a Binary files /dev/null and b/js/twemoji/16x16/1f41c.png differ diff --git a/js/twemoji/16x16/1f41d.png b/js/twemoji/16x16/1f41d.png new file mode 100644 index 00000000..00fa1878 Binary files /dev/null and b/js/twemoji/16x16/1f41d.png differ diff --git a/js/twemoji/16x16/1f41e.png b/js/twemoji/16x16/1f41e.png new file mode 100644 index 00000000..10f84598 Binary files /dev/null and b/js/twemoji/16x16/1f41e.png differ diff --git a/js/twemoji/16x16/1f41f.png b/js/twemoji/16x16/1f41f.png new file mode 100644 index 00000000..c3189825 Binary files /dev/null and b/js/twemoji/16x16/1f41f.png differ diff --git a/js/twemoji/16x16/1f420.png b/js/twemoji/16x16/1f420.png new file mode 100644 index 00000000..5de9bcaa Binary files /dev/null and b/js/twemoji/16x16/1f420.png differ diff --git a/js/twemoji/16x16/1f421.png b/js/twemoji/16x16/1f421.png new file mode 100644 index 00000000..5d2bf538 Binary files /dev/null and b/js/twemoji/16x16/1f421.png differ diff --git a/js/twemoji/16x16/1f422.png b/js/twemoji/16x16/1f422.png new file mode 100644 index 00000000..03d12c12 Binary files /dev/null and b/js/twemoji/16x16/1f422.png differ diff --git a/js/twemoji/16x16/1f423.png b/js/twemoji/16x16/1f423.png new file mode 100644 index 00000000..ffa60112 Binary files /dev/null and b/js/twemoji/16x16/1f423.png differ diff --git a/js/twemoji/16x16/1f424.png b/js/twemoji/16x16/1f424.png new file mode 100644 index 00000000..d618d12c Binary files /dev/null and b/js/twemoji/16x16/1f424.png differ diff --git a/js/twemoji/16x16/1f425.png b/js/twemoji/16x16/1f425.png new file mode 100644 index 00000000..1b75c262 Binary files /dev/null and b/js/twemoji/16x16/1f425.png differ diff --git a/js/twemoji/16x16/1f426.png b/js/twemoji/16x16/1f426.png new file mode 100644 index 00000000..e8ac684b Binary files /dev/null and b/js/twemoji/16x16/1f426.png differ diff --git a/js/twemoji/16x16/1f427.png b/js/twemoji/16x16/1f427.png new file mode 100644 index 00000000..be3d6a6d Binary files /dev/null and b/js/twemoji/16x16/1f427.png differ diff --git a/js/twemoji/16x16/1f428.png b/js/twemoji/16x16/1f428.png new file mode 100644 index 00000000..c6c82f5b Binary files /dev/null and b/js/twemoji/16x16/1f428.png differ diff --git a/js/twemoji/16x16/1f429.png b/js/twemoji/16x16/1f429.png new file mode 100644 index 00000000..cf9f2280 Binary files /dev/null and b/js/twemoji/16x16/1f429.png differ diff --git a/js/twemoji/16x16/1f42a.png b/js/twemoji/16x16/1f42a.png new file mode 100644 index 00000000..7375498b Binary files /dev/null and b/js/twemoji/16x16/1f42a.png differ diff --git a/js/twemoji/16x16/1f42b.png b/js/twemoji/16x16/1f42b.png new file mode 100644 index 00000000..5aa6598d Binary files /dev/null and b/js/twemoji/16x16/1f42b.png differ diff --git a/js/twemoji/16x16/1f42c.png b/js/twemoji/16x16/1f42c.png new file mode 100644 index 00000000..8671bf72 Binary files /dev/null and b/js/twemoji/16x16/1f42c.png differ diff --git a/js/twemoji/16x16/1f42d.png b/js/twemoji/16x16/1f42d.png new file mode 100644 index 00000000..f7ec5e5d Binary files /dev/null and b/js/twemoji/16x16/1f42d.png differ diff --git a/js/twemoji/16x16/1f42e.png b/js/twemoji/16x16/1f42e.png new file mode 100644 index 00000000..6389b849 Binary files /dev/null and b/js/twemoji/16x16/1f42e.png differ diff --git a/js/twemoji/16x16/1f42f.png b/js/twemoji/16x16/1f42f.png new file mode 100644 index 00000000..7149cfd5 Binary files /dev/null and b/js/twemoji/16x16/1f42f.png differ diff --git a/js/twemoji/16x16/1f430.png b/js/twemoji/16x16/1f430.png new file mode 100644 index 00000000..20f75819 Binary files /dev/null and b/js/twemoji/16x16/1f430.png differ diff --git a/js/twemoji/16x16/1f431.png b/js/twemoji/16x16/1f431.png new file mode 100644 index 00000000..ecfb3d8a Binary files /dev/null and b/js/twemoji/16x16/1f431.png differ diff --git a/js/twemoji/16x16/1f432.png b/js/twemoji/16x16/1f432.png new file mode 100644 index 00000000..980c4444 Binary files /dev/null and b/js/twemoji/16x16/1f432.png differ diff --git a/js/twemoji/16x16/1f433.png b/js/twemoji/16x16/1f433.png new file mode 100644 index 00000000..2ccb8991 Binary files /dev/null and b/js/twemoji/16x16/1f433.png differ diff --git a/js/twemoji/16x16/1f434.png b/js/twemoji/16x16/1f434.png new file mode 100644 index 00000000..04a935ed Binary files /dev/null and b/js/twemoji/16x16/1f434.png differ diff --git a/js/twemoji/16x16/1f435.png b/js/twemoji/16x16/1f435.png new file mode 100644 index 00000000..30425ae8 Binary files /dev/null and b/js/twemoji/16x16/1f435.png differ diff --git a/js/twemoji/16x16/1f436.png b/js/twemoji/16x16/1f436.png new file mode 100644 index 00000000..c6e780b0 Binary files /dev/null and b/js/twemoji/16x16/1f436.png differ diff --git a/js/twemoji/16x16/1f437.png b/js/twemoji/16x16/1f437.png new file mode 100644 index 00000000..2ab10427 Binary files /dev/null and b/js/twemoji/16x16/1f437.png differ diff --git a/js/twemoji/16x16/1f438.png b/js/twemoji/16x16/1f438.png new file mode 100644 index 00000000..9b2aa16c Binary files /dev/null and b/js/twemoji/16x16/1f438.png differ diff --git a/js/twemoji/16x16/1f439.png b/js/twemoji/16x16/1f439.png new file mode 100644 index 00000000..e3d4523f Binary files /dev/null and b/js/twemoji/16x16/1f439.png differ diff --git a/js/twemoji/16x16/1f43a.png b/js/twemoji/16x16/1f43a.png new file mode 100644 index 00000000..93206353 Binary files /dev/null and b/js/twemoji/16x16/1f43a.png differ diff --git a/js/twemoji/16x16/1f43b.png b/js/twemoji/16x16/1f43b.png new file mode 100644 index 00000000..edc5b55b Binary files /dev/null and b/js/twemoji/16x16/1f43b.png differ diff --git a/js/twemoji/16x16/1f43c.png b/js/twemoji/16x16/1f43c.png new file mode 100644 index 00000000..b98cd471 Binary files /dev/null and b/js/twemoji/16x16/1f43c.png differ diff --git a/js/twemoji/16x16/1f43d.png b/js/twemoji/16x16/1f43d.png new file mode 100644 index 00000000..2b278f4c Binary files /dev/null and b/js/twemoji/16x16/1f43d.png differ diff --git a/js/twemoji/16x16/1f43e.png b/js/twemoji/16x16/1f43e.png new file mode 100644 index 00000000..f03d257a Binary files /dev/null and b/js/twemoji/16x16/1f43e.png differ diff --git a/js/twemoji/16x16/1f440.png b/js/twemoji/16x16/1f440.png new file mode 100644 index 00000000..bc2c5afd Binary files /dev/null and b/js/twemoji/16x16/1f440.png differ diff --git a/js/twemoji/16x16/1f442.png b/js/twemoji/16x16/1f442.png new file mode 100644 index 00000000..842fb58e Binary files /dev/null and b/js/twemoji/16x16/1f442.png differ diff --git a/js/twemoji/16x16/1f443.png b/js/twemoji/16x16/1f443.png new file mode 100644 index 00000000..253956e1 Binary files /dev/null and b/js/twemoji/16x16/1f443.png differ diff --git a/js/twemoji/16x16/1f444.png b/js/twemoji/16x16/1f444.png new file mode 100644 index 00000000..b899e40e Binary files /dev/null and b/js/twemoji/16x16/1f444.png differ diff --git a/js/twemoji/16x16/1f445.png b/js/twemoji/16x16/1f445.png new file mode 100644 index 00000000..db81c71c Binary files /dev/null and b/js/twemoji/16x16/1f445.png differ diff --git a/js/twemoji/16x16/1f446.png b/js/twemoji/16x16/1f446.png new file mode 100644 index 00000000..a8aec46d Binary files /dev/null and b/js/twemoji/16x16/1f446.png differ diff --git a/js/twemoji/16x16/1f447.png b/js/twemoji/16x16/1f447.png new file mode 100644 index 00000000..540d4d49 Binary files /dev/null and b/js/twemoji/16x16/1f447.png differ diff --git a/js/twemoji/16x16/1f448.png b/js/twemoji/16x16/1f448.png new file mode 100644 index 00000000..b3864261 Binary files /dev/null and b/js/twemoji/16x16/1f448.png differ diff --git a/js/twemoji/16x16/1f449.png b/js/twemoji/16x16/1f449.png new file mode 100644 index 00000000..b5e2ce1d Binary files /dev/null and b/js/twemoji/16x16/1f449.png differ diff --git a/js/twemoji/16x16/1f44a.png b/js/twemoji/16x16/1f44a.png new file mode 100644 index 00000000..18fb74b1 Binary files /dev/null and b/js/twemoji/16x16/1f44a.png differ diff --git a/js/twemoji/16x16/1f44b.png b/js/twemoji/16x16/1f44b.png new file mode 100644 index 00000000..35a4129b Binary files /dev/null and b/js/twemoji/16x16/1f44b.png differ diff --git a/js/twemoji/16x16/1f44c.png b/js/twemoji/16x16/1f44c.png new file mode 100644 index 00000000..90d755b0 Binary files /dev/null and b/js/twemoji/16x16/1f44c.png differ diff --git a/js/twemoji/16x16/1f44d.png b/js/twemoji/16x16/1f44d.png new file mode 100644 index 00000000..6e9a22dd Binary files /dev/null and b/js/twemoji/16x16/1f44d.png differ diff --git a/js/twemoji/16x16/1f44e.png b/js/twemoji/16x16/1f44e.png new file mode 100644 index 00000000..e9926c14 Binary files /dev/null and b/js/twemoji/16x16/1f44e.png differ diff --git a/js/twemoji/16x16/1f44f.png b/js/twemoji/16x16/1f44f.png new file mode 100644 index 00000000..d20c3a0b Binary files /dev/null and b/js/twemoji/16x16/1f44f.png differ diff --git a/js/twemoji/16x16/1f450.png b/js/twemoji/16x16/1f450.png new file mode 100644 index 00000000..71326da5 Binary files /dev/null and b/js/twemoji/16x16/1f450.png differ diff --git a/js/twemoji/16x16/1f451.png b/js/twemoji/16x16/1f451.png new file mode 100644 index 00000000..a6120842 Binary files /dev/null and b/js/twemoji/16x16/1f451.png differ diff --git a/js/twemoji/16x16/1f452.png b/js/twemoji/16x16/1f452.png new file mode 100644 index 00000000..23475363 Binary files /dev/null and b/js/twemoji/16x16/1f452.png differ diff --git a/js/twemoji/16x16/1f453.png b/js/twemoji/16x16/1f453.png new file mode 100644 index 00000000..cf41c1cf Binary files /dev/null and b/js/twemoji/16x16/1f453.png differ diff --git a/js/twemoji/16x16/1f454.png b/js/twemoji/16x16/1f454.png new file mode 100644 index 00000000..74443284 Binary files /dev/null and b/js/twemoji/16x16/1f454.png differ diff --git a/js/twemoji/16x16/1f455.png b/js/twemoji/16x16/1f455.png new file mode 100644 index 00000000..46e333ff Binary files /dev/null and b/js/twemoji/16x16/1f455.png differ diff --git a/js/twemoji/16x16/1f456.png b/js/twemoji/16x16/1f456.png new file mode 100644 index 00000000..1ebb64a7 Binary files /dev/null and b/js/twemoji/16x16/1f456.png differ diff --git a/js/twemoji/16x16/1f457.png b/js/twemoji/16x16/1f457.png new file mode 100644 index 00000000..67d9cd3d Binary files /dev/null and b/js/twemoji/16x16/1f457.png differ diff --git a/js/twemoji/16x16/1f458.png b/js/twemoji/16x16/1f458.png new file mode 100644 index 00000000..e2e7bebb Binary files /dev/null and b/js/twemoji/16x16/1f458.png differ diff --git a/js/twemoji/16x16/1f459.png b/js/twemoji/16x16/1f459.png new file mode 100644 index 00000000..78353345 Binary files /dev/null and b/js/twemoji/16x16/1f459.png differ diff --git a/js/twemoji/16x16/1f45a.png b/js/twemoji/16x16/1f45a.png new file mode 100644 index 00000000..ad2572e0 Binary files /dev/null and b/js/twemoji/16x16/1f45a.png differ diff --git a/js/twemoji/16x16/1f45b.png b/js/twemoji/16x16/1f45b.png new file mode 100644 index 00000000..9cab8719 Binary files /dev/null and b/js/twemoji/16x16/1f45b.png differ diff --git a/js/twemoji/16x16/1f45c.png b/js/twemoji/16x16/1f45c.png new file mode 100644 index 00000000..a2f75b39 Binary files /dev/null and b/js/twemoji/16x16/1f45c.png differ diff --git a/js/twemoji/16x16/1f45d.png b/js/twemoji/16x16/1f45d.png new file mode 100644 index 00000000..dccc29a7 Binary files /dev/null and b/js/twemoji/16x16/1f45d.png differ diff --git a/js/twemoji/16x16/1f45e.png b/js/twemoji/16x16/1f45e.png new file mode 100644 index 00000000..feb4ac42 Binary files /dev/null and b/js/twemoji/16x16/1f45e.png differ diff --git a/js/twemoji/16x16/1f45f.png b/js/twemoji/16x16/1f45f.png new file mode 100644 index 00000000..4e50636e Binary files /dev/null and b/js/twemoji/16x16/1f45f.png differ diff --git a/js/twemoji/16x16/1f460.png b/js/twemoji/16x16/1f460.png new file mode 100644 index 00000000..0fee19c9 Binary files /dev/null and b/js/twemoji/16x16/1f460.png differ diff --git a/js/twemoji/16x16/1f461.png b/js/twemoji/16x16/1f461.png new file mode 100644 index 00000000..502845cc Binary files /dev/null and b/js/twemoji/16x16/1f461.png differ diff --git a/js/twemoji/16x16/1f462.png b/js/twemoji/16x16/1f462.png new file mode 100644 index 00000000..bbe7721e Binary files /dev/null and b/js/twemoji/16x16/1f462.png differ diff --git a/js/twemoji/16x16/1f463.png b/js/twemoji/16x16/1f463.png new file mode 100644 index 00000000..974ad977 Binary files /dev/null and b/js/twemoji/16x16/1f463.png differ diff --git a/js/twemoji/16x16/1f464.png b/js/twemoji/16x16/1f464.png new file mode 100644 index 00000000..e6ff0707 Binary files /dev/null and b/js/twemoji/16x16/1f464.png differ diff --git a/js/twemoji/16x16/1f465.png b/js/twemoji/16x16/1f465.png new file mode 100644 index 00000000..ee083bb6 Binary files /dev/null and b/js/twemoji/16x16/1f465.png differ diff --git a/js/twemoji/16x16/1f466.png b/js/twemoji/16x16/1f466.png new file mode 100644 index 00000000..ec8fffe5 Binary files /dev/null and b/js/twemoji/16x16/1f466.png differ diff --git a/js/twemoji/16x16/1f467.png b/js/twemoji/16x16/1f467.png new file mode 100644 index 00000000..4c518b4a Binary files /dev/null and b/js/twemoji/16x16/1f467.png differ diff --git a/js/twemoji/16x16/1f468.png b/js/twemoji/16x16/1f468.png new file mode 100644 index 00000000..7349e255 Binary files /dev/null and b/js/twemoji/16x16/1f468.png differ diff --git a/js/twemoji/16x16/1f469.png b/js/twemoji/16x16/1f469.png new file mode 100644 index 00000000..ba7e88c6 Binary files /dev/null and b/js/twemoji/16x16/1f469.png differ diff --git a/js/twemoji/16x16/1f46a.png b/js/twemoji/16x16/1f46a.png new file mode 100644 index 00000000..319231c3 Binary files /dev/null and b/js/twemoji/16x16/1f46a.png differ diff --git a/js/twemoji/16x16/1f46b.png b/js/twemoji/16x16/1f46b.png new file mode 100644 index 00000000..d3ec8050 Binary files /dev/null and b/js/twemoji/16x16/1f46b.png differ diff --git a/js/twemoji/16x16/1f46c.png b/js/twemoji/16x16/1f46c.png new file mode 100644 index 00000000..fd1807cf Binary files /dev/null and b/js/twemoji/16x16/1f46c.png differ diff --git a/js/twemoji/16x16/1f46d.png b/js/twemoji/16x16/1f46d.png new file mode 100644 index 00000000..6ce51d83 Binary files /dev/null and b/js/twemoji/16x16/1f46d.png differ diff --git a/js/twemoji/16x16/1f46e.png b/js/twemoji/16x16/1f46e.png new file mode 100644 index 00000000..b616b51e Binary files /dev/null and b/js/twemoji/16x16/1f46e.png differ diff --git a/js/twemoji/16x16/1f46f.png b/js/twemoji/16x16/1f46f.png new file mode 100644 index 00000000..a05b5ff3 Binary files /dev/null and b/js/twemoji/16x16/1f46f.png differ diff --git a/js/twemoji/16x16/1f470.png b/js/twemoji/16x16/1f470.png new file mode 100644 index 00000000..b72bd36f Binary files /dev/null and b/js/twemoji/16x16/1f470.png differ diff --git a/js/twemoji/16x16/1f471.png b/js/twemoji/16x16/1f471.png new file mode 100644 index 00000000..91f6a992 Binary files /dev/null and b/js/twemoji/16x16/1f471.png differ diff --git a/js/twemoji/16x16/1f472.png b/js/twemoji/16x16/1f472.png new file mode 100644 index 00000000..712fc549 Binary files /dev/null and b/js/twemoji/16x16/1f472.png differ diff --git a/js/twemoji/16x16/1f473.png b/js/twemoji/16x16/1f473.png new file mode 100644 index 00000000..62589fed Binary files /dev/null and b/js/twemoji/16x16/1f473.png differ diff --git a/js/twemoji/16x16/1f474.png b/js/twemoji/16x16/1f474.png new file mode 100644 index 00000000..738e5c71 Binary files /dev/null and b/js/twemoji/16x16/1f474.png differ diff --git a/js/twemoji/16x16/1f475.png b/js/twemoji/16x16/1f475.png new file mode 100644 index 00000000..7ab887e7 Binary files /dev/null and b/js/twemoji/16x16/1f475.png differ diff --git a/js/twemoji/16x16/1f476.png b/js/twemoji/16x16/1f476.png new file mode 100644 index 00000000..e3f1d849 Binary files /dev/null and b/js/twemoji/16x16/1f476.png differ diff --git a/js/twemoji/16x16/1f477.png b/js/twemoji/16x16/1f477.png new file mode 100644 index 00000000..e0639ce9 Binary files /dev/null and b/js/twemoji/16x16/1f477.png differ diff --git a/js/twemoji/16x16/1f478.png b/js/twemoji/16x16/1f478.png new file mode 100644 index 00000000..fd23fdc3 Binary files /dev/null and b/js/twemoji/16x16/1f478.png differ diff --git a/js/twemoji/16x16/1f479.png b/js/twemoji/16x16/1f479.png new file mode 100644 index 00000000..1e774083 Binary files /dev/null and b/js/twemoji/16x16/1f479.png differ diff --git a/js/twemoji/16x16/1f47a.png b/js/twemoji/16x16/1f47a.png new file mode 100644 index 00000000..42d17499 Binary files /dev/null and b/js/twemoji/16x16/1f47a.png differ diff --git a/js/twemoji/16x16/1f47b.png b/js/twemoji/16x16/1f47b.png new file mode 100644 index 00000000..e2798f50 Binary files /dev/null and b/js/twemoji/16x16/1f47b.png differ diff --git a/js/twemoji/16x16/1f47c.png b/js/twemoji/16x16/1f47c.png new file mode 100644 index 00000000..9e3a94d0 Binary files /dev/null and b/js/twemoji/16x16/1f47c.png differ diff --git a/js/twemoji/16x16/1f47d.png b/js/twemoji/16x16/1f47d.png new file mode 100644 index 00000000..909c4376 Binary files /dev/null and b/js/twemoji/16x16/1f47d.png differ diff --git a/js/twemoji/16x16/1f47e.png b/js/twemoji/16x16/1f47e.png new file mode 100644 index 00000000..3f932004 Binary files /dev/null and b/js/twemoji/16x16/1f47e.png differ diff --git a/js/twemoji/16x16/1f47f.png b/js/twemoji/16x16/1f47f.png new file mode 100644 index 00000000..55c07d05 Binary files /dev/null and b/js/twemoji/16x16/1f47f.png differ diff --git a/js/twemoji/16x16/1f480.png b/js/twemoji/16x16/1f480.png new file mode 100644 index 00000000..6c6f2a86 Binary files /dev/null and b/js/twemoji/16x16/1f480.png differ diff --git a/js/twemoji/16x16/1f481.png b/js/twemoji/16x16/1f481.png new file mode 100644 index 00000000..4f68e8f3 Binary files /dev/null and b/js/twemoji/16x16/1f481.png differ diff --git a/js/twemoji/16x16/1f482.png b/js/twemoji/16x16/1f482.png new file mode 100644 index 00000000..21551052 Binary files /dev/null and b/js/twemoji/16x16/1f482.png differ diff --git a/js/twemoji/16x16/1f483.png b/js/twemoji/16x16/1f483.png new file mode 100644 index 00000000..8bc6640c Binary files /dev/null and b/js/twemoji/16x16/1f483.png differ diff --git a/js/twemoji/16x16/1f484.png b/js/twemoji/16x16/1f484.png new file mode 100644 index 00000000..00c1fdc6 Binary files /dev/null and b/js/twemoji/16x16/1f484.png differ diff --git a/js/twemoji/16x16/1f485.png b/js/twemoji/16x16/1f485.png new file mode 100644 index 00000000..955b143f Binary files /dev/null and b/js/twemoji/16x16/1f485.png differ diff --git a/js/twemoji/16x16/1f486.png b/js/twemoji/16x16/1f486.png new file mode 100644 index 00000000..43eb5c62 Binary files /dev/null and b/js/twemoji/16x16/1f486.png differ diff --git a/js/twemoji/16x16/1f487.png b/js/twemoji/16x16/1f487.png new file mode 100644 index 00000000..0ce94ba2 Binary files /dev/null and b/js/twemoji/16x16/1f487.png differ diff --git a/js/twemoji/16x16/1f488.png b/js/twemoji/16x16/1f488.png new file mode 100644 index 00000000..a8cf2f3d Binary files /dev/null and b/js/twemoji/16x16/1f488.png differ diff --git a/js/twemoji/16x16/1f489.png b/js/twemoji/16x16/1f489.png new file mode 100644 index 00000000..a5f7a0e7 Binary files /dev/null and b/js/twemoji/16x16/1f489.png differ diff --git a/js/twemoji/16x16/1f48a.png b/js/twemoji/16x16/1f48a.png new file mode 100644 index 00000000..9f79220f Binary files /dev/null and b/js/twemoji/16x16/1f48a.png differ diff --git a/js/twemoji/16x16/1f48b.png b/js/twemoji/16x16/1f48b.png new file mode 100644 index 00000000..5f33aa85 Binary files /dev/null and b/js/twemoji/16x16/1f48b.png differ diff --git a/js/twemoji/16x16/1f48c.png b/js/twemoji/16x16/1f48c.png new file mode 100644 index 00000000..359c488c Binary files /dev/null and b/js/twemoji/16x16/1f48c.png differ diff --git a/js/twemoji/16x16/1f48d.png b/js/twemoji/16x16/1f48d.png new file mode 100644 index 00000000..3bd96992 Binary files /dev/null and b/js/twemoji/16x16/1f48d.png differ diff --git a/js/twemoji/16x16/1f48e.png b/js/twemoji/16x16/1f48e.png new file mode 100644 index 00000000..24cc2633 Binary files /dev/null and b/js/twemoji/16x16/1f48e.png differ diff --git a/js/twemoji/16x16/1f48f.png b/js/twemoji/16x16/1f48f.png new file mode 100644 index 00000000..3499cad5 Binary files /dev/null and b/js/twemoji/16x16/1f48f.png differ diff --git a/js/twemoji/16x16/1f490.png b/js/twemoji/16x16/1f490.png new file mode 100644 index 00000000..2de3c5aa Binary files /dev/null and b/js/twemoji/16x16/1f490.png differ diff --git a/js/twemoji/16x16/1f491.png b/js/twemoji/16x16/1f491.png new file mode 100644 index 00000000..6dcd1cab Binary files /dev/null and b/js/twemoji/16x16/1f491.png differ diff --git a/js/twemoji/16x16/1f492.png b/js/twemoji/16x16/1f492.png new file mode 100644 index 00000000..157b533e Binary files /dev/null and b/js/twemoji/16x16/1f492.png differ diff --git a/js/twemoji/16x16/1f493.png b/js/twemoji/16x16/1f493.png new file mode 100644 index 00000000..9d95c5d3 Binary files /dev/null and b/js/twemoji/16x16/1f493.png differ diff --git a/js/twemoji/16x16/1f494.png b/js/twemoji/16x16/1f494.png new file mode 100644 index 00000000..b4adea1d Binary files /dev/null and b/js/twemoji/16x16/1f494.png differ diff --git a/js/twemoji/16x16/1f495.png b/js/twemoji/16x16/1f495.png new file mode 100644 index 00000000..6a4218d2 Binary files /dev/null and b/js/twemoji/16x16/1f495.png differ diff --git a/js/twemoji/16x16/1f496.png b/js/twemoji/16x16/1f496.png new file mode 100644 index 00000000..b78423b4 Binary files /dev/null and b/js/twemoji/16x16/1f496.png differ diff --git a/js/twemoji/16x16/1f497.png b/js/twemoji/16x16/1f497.png new file mode 100644 index 00000000..3a6e7918 Binary files /dev/null and b/js/twemoji/16x16/1f497.png differ diff --git a/js/twemoji/16x16/1f498.png b/js/twemoji/16x16/1f498.png new file mode 100644 index 00000000..a72c0ad4 Binary files /dev/null and b/js/twemoji/16x16/1f498.png differ diff --git a/js/twemoji/16x16/1f499.png b/js/twemoji/16x16/1f499.png new file mode 100644 index 00000000..48854f08 Binary files /dev/null and b/js/twemoji/16x16/1f499.png differ diff --git a/js/twemoji/16x16/1f49a.png b/js/twemoji/16x16/1f49a.png new file mode 100644 index 00000000..abfe81e2 Binary files /dev/null and b/js/twemoji/16x16/1f49a.png differ diff --git a/js/twemoji/16x16/1f49b.png b/js/twemoji/16x16/1f49b.png new file mode 100644 index 00000000..0aee6532 Binary files /dev/null and b/js/twemoji/16x16/1f49b.png differ diff --git a/js/twemoji/16x16/1f49c.png b/js/twemoji/16x16/1f49c.png new file mode 100644 index 00000000..063bd430 Binary files /dev/null and b/js/twemoji/16x16/1f49c.png differ diff --git a/js/twemoji/16x16/1f49d.png b/js/twemoji/16x16/1f49d.png new file mode 100644 index 00000000..5935fe7e Binary files /dev/null and b/js/twemoji/16x16/1f49d.png differ diff --git a/js/twemoji/16x16/1f49e.png b/js/twemoji/16x16/1f49e.png new file mode 100644 index 00000000..355b29d9 Binary files /dev/null and b/js/twemoji/16x16/1f49e.png differ diff --git a/js/twemoji/16x16/1f49f.png b/js/twemoji/16x16/1f49f.png new file mode 100644 index 00000000..aa6605d4 Binary files /dev/null and b/js/twemoji/16x16/1f49f.png differ diff --git a/js/twemoji/16x16/1f4a0.png b/js/twemoji/16x16/1f4a0.png new file mode 100644 index 00000000..9533d8a9 Binary files /dev/null and b/js/twemoji/16x16/1f4a0.png differ diff --git a/js/twemoji/16x16/1f4a1.png b/js/twemoji/16x16/1f4a1.png new file mode 100644 index 00000000..bb6bdc46 Binary files /dev/null and b/js/twemoji/16x16/1f4a1.png differ diff --git a/js/twemoji/16x16/1f4a2.png b/js/twemoji/16x16/1f4a2.png new file mode 100644 index 00000000..68d0e7b4 Binary files /dev/null and b/js/twemoji/16x16/1f4a2.png differ diff --git a/js/twemoji/16x16/1f4a3.png b/js/twemoji/16x16/1f4a3.png new file mode 100644 index 00000000..7cbac955 Binary files /dev/null and b/js/twemoji/16x16/1f4a3.png differ diff --git a/js/twemoji/16x16/1f4a4.png b/js/twemoji/16x16/1f4a4.png new file mode 100644 index 00000000..eca4540f Binary files /dev/null and b/js/twemoji/16x16/1f4a4.png differ diff --git a/js/twemoji/16x16/1f4a5.png b/js/twemoji/16x16/1f4a5.png new file mode 100644 index 00000000..f0f065e8 Binary files /dev/null and b/js/twemoji/16x16/1f4a5.png differ diff --git a/js/twemoji/16x16/1f4a6.png b/js/twemoji/16x16/1f4a6.png new file mode 100644 index 00000000..ff3b4010 Binary files /dev/null and b/js/twemoji/16x16/1f4a6.png differ diff --git a/js/twemoji/16x16/1f4a7.png b/js/twemoji/16x16/1f4a7.png new file mode 100644 index 00000000..ac64479f Binary files /dev/null and b/js/twemoji/16x16/1f4a7.png differ diff --git a/js/twemoji/16x16/1f4a8.png b/js/twemoji/16x16/1f4a8.png new file mode 100644 index 00000000..01ada421 Binary files /dev/null and b/js/twemoji/16x16/1f4a8.png differ diff --git a/js/twemoji/16x16/1f4a9.png b/js/twemoji/16x16/1f4a9.png new file mode 100644 index 00000000..9cf30be0 Binary files /dev/null and b/js/twemoji/16x16/1f4a9.png differ diff --git a/js/twemoji/16x16/1f4aa.png b/js/twemoji/16x16/1f4aa.png new file mode 100644 index 00000000..b46ec109 Binary files /dev/null and b/js/twemoji/16x16/1f4aa.png differ diff --git a/js/twemoji/16x16/1f4ab.png b/js/twemoji/16x16/1f4ab.png new file mode 100644 index 00000000..02b1bf6d Binary files /dev/null and b/js/twemoji/16x16/1f4ab.png differ diff --git a/js/twemoji/16x16/1f4ac.png b/js/twemoji/16x16/1f4ac.png new file mode 100644 index 00000000..ad1a6b75 Binary files /dev/null and b/js/twemoji/16x16/1f4ac.png differ diff --git a/js/twemoji/16x16/1f4ad.png b/js/twemoji/16x16/1f4ad.png new file mode 100644 index 00000000..375381f0 Binary files /dev/null and b/js/twemoji/16x16/1f4ad.png differ diff --git a/js/twemoji/16x16/1f4ae.png b/js/twemoji/16x16/1f4ae.png new file mode 100644 index 00000000..64436f48 Binary files /dev/null and b/js/twemoji/16x16/1f4ae.png differ diff --git a/js/twemoji/16x16/1f4af.png b/js/twemoji/16x16/1f4af.png new file mode 100644 index 00000000..c6473a81 Binary files /dev/null and b/js/twemoji/16x16/1f4af.png differ diff --git a/js/twemoji/16x16/1f4b0.png b/js/twemoji/16x16/1f4b0.png new file mode 100644 index 00000000..201d744b Binary files /dev/null and b/js/twemoji/16x16/1f4b0.png differ diff --git a/js/twemoji/16x16/1f4b1.png b/js/twemoji/16x16/1f4b1.png new file mode 100644 index 00000000..71d12d69 Binary files /dev/null and b/js/twemoji/16x16/1f4b1.png differ diff --git a/js/twemoji/16x16/1f4b2.png b/js/twemoji/16x16/1f4b2.png new file mode 100644 index 00000000..4667f903 Binary files /dev/null and b/js/twemoji/16x16/1f4b2.png differ diff --git a/js/twemoji/16x16/1f4b3.png b/js/twemoji/16x16/1f4b3.png new file mode 100644 index 00000000..17a15c84 Binary files /dev/null and b/js/twemoji/16x16/1f4b3.png differ diff --git a/js/twemoji/16x16/1f4b4.png b/js/twemoji/16x16/1f4b4.png new file mode 100644 index 00000000..fb91cc11 Binary files /dev/null and b/js/twemoji/16x16/1f4b4.png differ diff --git a/js/twemoji/16x16/1f4b5.png b/js/twemoji/16x16/1f4b5.png new file mode 100644 index 00000000..a8ea2fdc Binary files /dev/null and b/js/twemoji/16x16/1f4b5.png differ diff --git a/js/twemoji/16x16/1f4b6.png b/js/twemoji/16x16/1f4b6.png new file mode 100644 index 00000000..1507577f Binary files /dev/null and b/js/twemoji/16x16/1f4b6.png differ diff --git a/js/twemoji/16x16/1f4b7.png b/js/twemoji/16x16/1f4b7.png new file mode 100644 index 00000000..d00f6f95 Binary files /dev/null and b/js/twemoji/16x16/1f4b7.png differ diff --git a/js/twemoji/16x16/1f4b8.png b/js/twemoji/16x16/1f4b8.png new file mode 100644 index 00000000..83d1edf8 Binary files /dev/null and b/js/twemoji/16x16/1f4b8.png differ diff --git a/js/twemoji/16x16/1f4b9.png b/js/twemoji/16x16/1f4b9.png new file mode 100644 index 00000000..b75a5600 Binary files /dev/null and b/js/twemoji/16x16/1f4b9.png differ diff --git a/js/twemoji/16x16/1f4ba.png b/js/twemoji/16x16/1f4ba.png new file mode 100644 index 00000000..9c39bb41 Binary files /dev/null and b/js/twemoji/16x16/1f4ba.png differ diff --git a/js/twemoji/16x16/1f4bb.png b/js/twemoji/16x16/1f4bb.png new file mode 100644 index 00000000..d8301801 Binary files /dev/null and b/js/twemoji/16x16/1f4bb.png differ diff --git a/js/twemoji/16x16/1f4bc.png b/js/twemoji/16x16/1f4bc.png new file mode 100644 index 00000000..177437bd Binary files /dev/null and b/js/twemoji/16x16/1f4bc.png differ diff --git a/js/twemoji/16x16/1f4bd.png b/js/twemoji/16x16/1f4bd.png new file mode 100644 index 00000000..2ea1326c Binary files /dev/null and b/js/twemoji/16x16/1f4bd.png differ diff --git a/js/twemoji/16x16/1f4be.png b/js/twemoji/16x16/1f4be.png new file mode 100644 index 00000000..beeb9f81 Binary files /dev/null and b/js/twemoji/16x16/1f4be.png differ diff --git a/js/twemoji/16x16/1f4bf.png b/js/twemoji/16x16/1f4bf.png new file mode 100644 index 00000000..6da9e704 Binary files /dev/null and b/js/twemoji/16x16/1f4bf.png differ diff --git a/js/twemoji/16x16/1f4c0.png b/js/twemoji/16x16/1f4c0.png new file mode 100644 index 00000000..cf5412cf Binary files /dev/null and b/js/twemoji/16x16/1f4c0.png differ diff --git a/js/twemoji/16x16/1f4c1.png b/js/twemoji/16x16/1f4c1.png new file mode 100644 index 00000000..65cd995a Binary files /dev/null and b/js/twemoji/16x16/1f4c1.png differ diff --git a/js/twemoji/16x16/1f4c2.png b/js/twemoji/16x16/1f4c2.png new file mode 100644 index 00000000..1af63533 Binary files /dev/null and b/js/twemoji/16x16/1f4c2.png differ diff --git a/js/twemoji/16x16/1f4c3.png b/js/twemoji/16x16/1f4c3.png new file mode 100644 index 00000000..1ef3afea Binary files /dev/null and b/js/twemoji/16x16/1f4c3.png differ diff --git a/js/twemoji/16x16/1f4c4.png b/js/twemoji/16x16/1f4c4.png new file mode 100644 index 00000000..7be5ece0 Binary files /dev/null and b/js/twemoji/16x16/1f4c4.png differ diff --git a/js/twemoji/16x16/1f4c5.png b/js/twemoji/16x16/1f4c5.png new file mode 100644 index 00000000..c75f60ba Binary files /dev/null and b/js/twemoji/16x16/1f4c5.png differ diff --git a/js/twemoji/16x16/1f4c6.png b/js/twemoji/16x16/1f4c6.png new file mode 100644 index 00000000..939d1107 Binary files /dev/null and b/js/twemoji/16x16/1f4c6.png differ diff --git a/js/twemoji/16x16/1f4c7.png b/js/twemoji/16x16/1f4c7.png new file mode 100644 index 00000000..e8c05976 Binary files /dev/null and b/js/twemoji/16x16/1f4c7.png differ diff --git a/js/twemoji/16x16/1f4c8.png b/js/twemoji/16x16/1f4c8.png new file mode 100644 index 00000000..a6bee6e1 Binary files /dev/null and b/js/twemoji/16x16/1f4c8.png differ diff --git a/js/twemoji/16x16/1f4c9.png b/js/twemoji/16x16/1f4c9.png new file mode 100644 index 00000000..72270c33 Binary files /dev/null and b/js/twemoji/16x16/1f4c9.png differ diff --git a/js/twemoji/16x16/1f4ca.png b/js/twemoji/16x16/1f4ca.png new file mode 100644 index 00000000..acc40148 Binary files /dev/null and b/js/twemoji/16x16/1f4ca.png differ diff --git a/js/twemoji/16x16/1f4cb.png b/js/twemoji/16x16/1f4cb.png new file mode 100644 index 00000000..fc29917b Binary files /dev/null and b/js/twemoji/16x16/1f4cb.png differ diff --git a/js/twemoji/16x16/1f4cc.png b/js/twemoji/16x16/1f4cc.png new file mode 100644 index 00000000..9a1fd0b9 Binary files /dev/null and b/js/twemoji/16x16/1f4cc.png differ diff --git a/js/twemoji/16x16/1f4cd.png b/js/twemoji/16x16/1f4cd.png new file mode 100644 index 00000000..b1769509 Binary files /dev/null and b/js/twemoji/16x16/1f4cd.png differ diff --git a/js/twemoji/16x16/1f4ce.png b/js/twemoji/16x16/1f4ce.png new file mode 100644 index 00000000..907a48db Binary files /dev/null and b/js/twemoji/16x16/1f4ce.png differ diff --git a/js/twemoji/16x16/1f4cf.png b/js/twemoji/16x16/1f4cf.png new file mode 100644 index 00000000..4623112d Binary files /dev/null and b/js/twemoji/16x16/1f4cf.png differ diff --git a/js/twemoji/16x16/1f4d0.png b/js/twemoji/16x16/1f4d0.png new file mode 100644 index 00000000..410ba750 Binary files /dev/null and b/js/twemoji/16x16/1f4d0.png differ diff --git a/js/twemoji/16x16/1f4d1.png b/js/twemoji/16x16/1f4d1.png new file mode 100644 index 00000000..54f2701b Binary files /dev/null and b/js/twemoji/16x16/1f4d1.png differ diff --git a/js/twemoji/16x16/1f4d2.png b/js/twemoji/16x16/1f4d2.png new file mode 100644 index 00000000..613a6869 Binary files /dev/null and b/js/twemoji/16x16/1f4d2.png differ diff --git a/js/twemoji/16x16/1f4d3.png b/js/twemoji/16x16/1f4d3.png new file mode 100644 index 00000000..18823b0d Binary files /dev/null and b/js/twemoji/16x16/1f4d3.png differ diff --git a/js/twemoji/16x16/1f4d4.png b/js/twemoji/16x16/1f4d4.png new file mode 100644 index 00000000..37db50d3 Binary files /dev/null and b/js/twemoji/16x16/1f4d4.png differ diff --git a/js/twemoji/16x16/1f4d5.png b/js/twemoji/16x16/1f4d5.png new file mode 100644 index 00000000..134a577f Binary files /dev/null and b/js/twemoji/16x16/1f4d5.png differ diff --git a/js/twemoji/16x16/1f4d6.png b/js/twemoji/16x16/1f4d6.png new file mode 100644 index 00000000..be57beb6 Binary files /dev/null and b/js/twemoji/16x16/1f4d6.png differ diff --git a/js/twemoji/16x16/1f4d7.png b/js/twemoji/16x16/1f4d7.png new file mode 100644 index 00000000..104439d3 Binary files /dev/null and b/js/twemoji/16x16/1f4d7.png differ diff --git a/js/twemoji/16x16/1f4d8.png b/js/twemoji/16x16/1f4d8.png new file mode 100644 index 00000000..967c90c8 Binary files /dev/null and b/js/twemoji/16x16/1f4d8.png differ diff --git a/js/twemoji/16x16/1f4d9.png b/js/twemoji/16x16/1f4d9.png new file mode 100644 index 00000000..ad68ef87 Binary files /dev/null and b/js/twemoji/16x16/1f4d9.png differ diff --git a/js/twemoji/16x16/1f4da.png b/js/twemoji/16x16/1f4da.png new file mode 100644 index 00000000..fb7009dc Binary files /dev/null and b/js/twemoji/16x16/1f4da.png differ diff --git a/js/twemoji/16x16/1f4db.png b/js/twemoji/16x16/1f4db.png new file mode 100644 index 00000000..0e017bc5 Binary files /dev/null and b/js/twemoji/16x16/1f4db.png differ diff --git a/js/twemoji/16x16/1f4dc.png b/js/twemoji/16x16/1f4dc.png new file mode 100644 index 00000000..effda5d2 Binary files /dev/null and b/js/twemoji/16x16/1f4dc.png differ diff --git a/js/twemoji/16x16/1f4dd.png b/js/twemoji/16x16/1f4dd.png new file mode 100644 index 00000000..2868ebff Binary files /dev/null and b/js/twemoji/16x16/1f4dd.png differ diff --git a/js/twemoji/16x16/1f4de.png b/js/twemoji/16x16/1f4de.png new file mode 100644 index 00000000..e937b927 Binary files /dev/null and b/js/twemoji/16x16/1f4de.png differ diff --git a/js/twemoji/16x16/1f4df.png b/js/twemoji/16x16/1f4df.png new file mode 100644 index 00000000..fd7ea2a7 Binary files /dev/null and b/js/twemoji/16x16/1f4df.png differ diff --git a/js/twemoji/16x16/1f4e0.png b/js/twemoji/16x16/1f4e0.png new file mode 100644 index 00000000..24e4dc83 Binary files /dev/null and b/js/twemoji/16x16/1f4e0.png differ diff --git a/js/twemoji/16x16/1f4e1.png b/js/twemoji/16x16/1f4e1.png new file mode 100644 index 00000000..5d519360 Binary files /dev/null and b/js/twemoji/16x16/1f4e1.png differ diff --git a/js/twemoji/16x16/1f4e2.png b/js/twemoji/16x16/1f4e2.png new file mode 100644 index 00000000..0d80e193 Binary files /dev/null and b/js/twemoji/16x16/1f4e2.png differ diff --git a/js/twemoji/16x16/1f4e3.png b/js/twemoji/16x16/1f4e3.png new file mode 100644 index 00000000..63dabe54 Binary files /dev/null and b/js/twemoji/16x16/1f4e3.png differ diff --git a/js/twemoji/16x16/1f4e4.png b/js/twemoji/16x16/1f4e4.png new file mode 100644 index 00000000..ca5f6a58 Binary files /dev/null and b/js/twemoji/16x16/1f4e4.png differ diff --git a/js/twemoji/16x16/1f4e5.png b/js/twemoji/16x16/1f4e5.png new file mode 100644 index 00000000..62c6c374 Binary files /dev/null and b/js/twemoji/16x16/1f4e5.png differ diff --git a/js/twemoji/16x16/1f4e6.png b/js/twemoji/16x16/1f4e6.png new file mode 100644 index 00000000..8c1152ac Binary files /dev/null and b/js/twemoji/16x16/1f4e6.png differ diff --git a/js/twemoji/16x16/1f4e7.png b/js/twemoji/16x16/1f4e7.png new file mode 100644 index 00000000..546c79b6 Binary files /dev/null and b/js/twemoji/16x16/1f4e7.png differ diff --git a/js/twemoji/16x16/1f4e8.png b/js/twemoji/16x16/1f4e8.png new file mode 100644 index 00000000..9f812fa2 Binary files /dev/null and b/js/twemoji/16x16/1f4e8.png differ diff --git a/js/twemoji/16x16/1f4e9.png b/js/twemoji/16x16/1f4e9.png new file mode 100644 index 00000000..04d76641 Binary files /dev/null and b/js/twemoji/16x16/1f4e9.png differ diff --git a/js/twemoji/16x16/1f4ea.png b/js/twemoji/16x16/1f4ea.png new file mode 100644 index 00000000..105a9c84 Binary files /dev/null and b/js/twemoji/16x16/1f4ea.png differ diff --git a/js/twemoji/16x16/1f4eb.png b/js/twemoji/16x16/1f4eb.png new file mode 100644 index 00000000..ab0330f4 Binary files /dev/null and b/js/twemoji/16x16/1f4eb.png differ diff --git a/js/twemoji/16x16/1f4ec.png b/js/twemoji/16x16/1f4ec.png new file mode 100644 index 00000000..5d3ec3ba Binary files /dev/null and b/js/twemoji/16x16/1f4ec.png differ diff --git a/js/twemoji/16x16/1f4ed.png b/js/twemoji/16x16/1f4ed.png new file mode 100644 index 00000000..17227002 Binary files /dev/null and b/js/twemoji/16x16/1f4ed.png differ diff --git a/js/twemoji/16x16/1f4ee.png b/js/twemoji/16x16/1f4ee.png new file mode 100644 index 00000000..119aa18d Binary files /dev/null and b/js/twemoji/16x16/1f4ee.png differ diff --git a/js/twemoji/16x16/1f4ef.png b/js/twemoji/16x16/1f4ef.png new file mode 100644 index 00000000..74593e5b Binary files /dev/null and b/js/twemoji/16x16/1f4ef.png differ diff --git a/js/twemoji/16x16/1f4f0.png b/js/twemoji/16x16/1f4f0.png new file mode 100644 index 00000000..c08813f6 Binary files /dev/null and b/js/twemoji/16x16/1f4f0.png differ diff --git a/js/twemoji/16x16/1f4f1.png b/js/twemoji/16x16/1f4f1.png new file mode 100644 index 00000000..c4d93172 Binary files /dev/null and b/js/twemoji/16x16/1f4f1.png differ diff --git a/js/twemoji/16x16/1f4f2.png b/js/twemoji/16x16/1f4f2.png new file mode 100644 index 00000000..2c0cfdf3 Binary files /dev/null and b/js/twemoji/16x16/1f4f2.png differ diff --git a/js/twemoji/16x16/1f4f3.png b/js/twemoji/16x16/1f4f3.png new file mode 100644 index 00000000..7a8a3c89 Binary files /dev/null and b/js/twemoji/16x16/1f4f3.png differ diff --git a/js/twemoji/16x16/1f4f4.png b/js/twemoji/16x16/1f4f4.png new file mode 100644 index 00000000..396571cb Binary files /dev/null and b/js/twemoji/16x16/1f4f4.png differ diff --git a/js/twemoji/16x16/1f4f5.png b/js/twemoji/16x16/1f4f5.png new file mode 100644 index 00000000..aa45898a Binary files /dev/null and b/js/twemoji/16x16/1f4f5.png differ diff --git a/js/twemoji/16x16/1f4f6.png b/js/twemoji/16x16/1f4f6.png new file mode 100644 index 00000000..2fcccc4e Binary files /dev/null and b/js/twemoji/16x16/1f4f6.png differ diff --git a/js/twemoji/16x16/1f4f7.png b/js/twemoji/16x16/1f4f7.png new file mode 100644 index 00000000..13df236b Binary files /dev/null and b/js/twemoji/16x16/1f4f7.png differ diff --git a/js/twemoji/16x16/1f4f9.png b/js/twemoji/16x16/1f4f9.png new file mode 100644 index 00000000..15c0b0df Binary files /dev/null and b/js/twemoji/16x16/1f4f9.png differ diff --git a/js/twemoji/16x16/1f4fa.png b/js/twemoji/16x16/1f4fa.png new file mode 100644 index 00000000..eda9d7b7 Binary files /dev/null and b/js/twemoji/16x16/1f4fa.png differ diff --git a/js/twemoji/16x16/1f4fb.png b/js/twemoji/16x16/1f4fb.png new file mode 100644 index 00000000..b139f654 Binary files /dev/null and b/js/twemoji/16x16/1f4fb.png differ diff --git a/js/twemoji/16x16/1f4fc.png b/js/twemoji/16x16/1f4fc.png new file mode 100644 index 00000000..33dfa348 Binary files /dev/null and b/js/twemoji/16x16/1f4fc.png differ diff --git a/js/twemoji/16x16/1f500.png b/js/twemoji/16x16/1f500.png new file mode 100644 index 00000000..ecf3d640 Binary files /dev/null and b/js/twemoji/16x16/1f500.png differ diff --git a/js/twemoji/16x16/1f501.png b/js/twemoji/16x16/1f501.png new file mode 100644 index 00000000..5d69a679 Binary files /dev/null and b/js/twemoji/16x16/1f501.png differ diff --git a/js/twemoji/16x16/1f502.png b/js/twemoji/16x16/1f502.png new file mode 100644 index 00000000..d02780d6 Binary files /dev/null and b/js/twemoji/16x16/1f502.png differ diff --git a/js/twemoji/16x16/1f503.png b/js/twemoji/16x16/1f503.png new file mode 100644 index 00000000..825ff4b9 Binary files /dev/null and b/js/twemoji/16x16/1f503.png differ diff --git a/js/twemoji/16x16/1f504.png b/js/twemoji/16x16/1f504.png new file mode 100644 index 00000000..5c46ddf4 Binary files /dev/null and b/js/twemoji/16x16/1f504.png differ diff --git a/js/twemoji/16x16/1f505.png b/js/twemoji/16x16/1f505.png new file mode 100644 index 00000000..af99617e Binary files /dev/null and b/js/twemoji/16x16/1f505.png differ diff --git a/js/twemoji/16x16/1f506.png b/js/twemoji/16x16/1f506.png new file mode 100644 index 00000000..509eeabc Binary files /dev/null and b/js/twemoji/16x16/1f506.png differ diff --git a/js/twemoji/16x16/1f507.png b/js/twemoji/16x16/1f507.png new file mode 100644 index 00000000..dcf67df8 Binary files /dev/null and b/js/twemoji/16x16/1f507.png differ diff --git a/js/twemoji/16x16/1f508.png b/js/twemoji/16x16/1f508.png new file mode 100644 index 00000000..fce35bd0 Binary files /dev/null and b/js/twemoji/16x16/1f508.png differ diff --git a/js/twemoji/16x16/1f509.png b/js/twemoji/16x16/1f509.png new file mode 100644 index 00000000..ec333947 Binary files /dev/null and b/js/twemoji/16x16/1f509.png differ diff --git a/js/twemoji/16x16/1f50a.png b/js/twemoji/16x16/1f50a.png new file mode 100644 index 00000000..529bb7f5 Binary files /dev/null and b/js/twemoji/16x16/1f50a.png differ diff --git a/js/twemoji/16x16/1f50b.png b/js/twemoji/16x16/1f50b.png new file mode 100644 index 00000000..9cf4db71 Binary files /dev/null and b/js/twemoji/16x16/1f50b.png differ diff --git a/js/twemoji/16x16/1f50c.png b/js/twemoji/16x16/1f50c.png new file mode 100644 index 00000000..140bfaf2 Binary files /dev/null and b/js/twemoji/16x16/1f50c.png differ diff --git a/js/twemoji/16x16/1f50d.png b/js/twemoji/16x16/1f50d.png new file mode 100644 index 00000000..8b9b6d6e Binary files /dev/null and b/js/twemoji/16x16/1f50d.png differ diff --git a/js/twemoji/16x16/1f50e.png b/js/twemoji/16x16/1f50e.png new file mode 100644 index 00000000..e6d9902b Binary files /dev/null and b/js/twemoji/16x16/1f50e.png differ diff --git a/js/twemoji/16x16/1f50f.png b/js/twemoji/16x16/1f50f.png new file mode 100644 index 00000000..b1d1894c Binary files /dev/null and b/js/twemoji/16x16/1f50f.png differ diff --git a/js/twemoji/16x16/1f510.png b/js/twemoji/16x16/1f510.png new file mode 100644 index 00000000..7c30fff0 Binary files /dev/null and b/js/twemoji/16x16/1f510.png differ diff --git a/js/twemoji/16x16/1f511.png b/js/twemoji/16x16/1f511.png new file mode 100644 index 00000000..e3fa048d Binary files /dev/null and b/js/twemoji/16x16/1f511.png differ diff --git a/js/twemoji/16x16/1f512.png b/js/twemoji/16x16/1f512.png new file mode 100644 index 00000000..a0f59ee5 Binary files /dev/null and b/js/twemoji/16x16/1f512.png differ diff --git a/js/twemoji/16x16/1f513.png b/js/twemoji/16x16/1f513.png new file mode 100644 index 00000000..43abe91c Binary files /dev/null and b/js/twemoji/16x16/1f513.png differ diff --git a/js/twemoji/16x16/1f514.png b/js/twemoji/16x16/1f514.png new file mode 100644 index 00000000..65e329a8 Binary files /dev/null and b/js/twemoji/16x16/1f514.png differ diff --git a/js/twemoji/16x16/1f515.png b/js/twemoji/16x16/1f515.png new file mode 100644 index 00000000..a4b792db Binary files /dev/null and b/js/twemoji/16x16/1f515.png differ diff --git a/js/twemoji/16x16/1f516.png b/js/twemoji/16x16/1f516.png new file mode 100644 index 00000000..69369e56 Binary files /dev/null and b/js/twemoji/16x16/1f516.png differ diff --git a/js/twemoji/16x16/1f517.png b/js/twemoji/16x16/1f517.png new file mode 100644 index 00000000..377ba21b Binary files /dev/null and b/js/twemoji/16x16/1f517.png differ diff --git a/js/twemoji/16x16/1f518.png b/js/twemoji/16x16/1f518.png new file mode 100644 index 00000000..b78e5da3 Binary files /dev/null and b/js/twemoji/16x16/1f518.png differ diff --git a/js/twemoji/16x16/1f519.png b/js/twemoji/16x16/1f519.png new file mode 100644 index 00000000..d7159c1a Binary files /dev/null and b/js/twemoji/16x16/1f519.png differ diff --git a/js/twemoji/16x16/1f51a.png b/js/twemoji/16x16/1f51a.png new file mode 100644 index 00000000..a539f20d Binary files /dev/null and b/js/twemoji/16x16/1f51a.png differ diff --git a/js/twemoji/16x16/1f51b.png b/js/twemoji/16x16/1f51b.png new file mode 100644 index 00000000..7a576867 Binary files /dev/null and b/js/twemoji/16x16/1f51b.png differ diff --git a/js/twemoji/16x16/1f51c.png b/js/twemoji/16x16/1f51c.png new file mode 100644 index 00000000..1c680d44 Binary files /dev/null and b/js/twemoji/16x16/1f51c.png differ diff --git a/js/twemoji/16x16/1f51d.png b/js/twemoji/16x16/1f51d.png new file mode 100644 index 00000000..002cc463 Binary files /dev/null and b/js/twemoji/16x16/1f51d.png differ diff --git a/js/twemoji/16x16/1f51e.png b/js/twemoji/16x16/1f51e.png new file mode 100644 index 00000000..23e1c9ee Binary files /dev/null and b/js/twemoji/16x16/1f51e.png differ diff --git a/js/twemoji/16x16/1f51f.png b/js/twemoji/16x16/1f51f.png new file mode 100644 index 00000000..a32d8267 Binary files /dev/null and b/js/twemoji/16x16/1f51f.png differ diff --git a/js/twemoji/16x16/1f520.png b/js/twemoji/16x16/1f520.png new file mode 100644 index 00000000..0143e310 Binary files /dev/null and b/js/twemoji/16x16/1f520.png differ diff --git a/js/twemoji/16x16/1f521.png b/js/twemoji/16x16/1f521.png new file mode 100644 index 00000000..b4f8eddb Binary files /dev/null and b/js/twemoji/16x16/1f521.png differ diff --git a/js/twemoji/16x16/1f522.png b/js/twemoji/16x16/1f522.png new file mode 100644 index 00000000..3b5991e4 Binary files /dev/null and b/js/twemoji/16x16/1f522.png differ diff --git a/js/twemoji/16x16/1f523.png b/js/twemoji/16x16/1f523.png new file mode 100644 index 00000000..c456ebb5 Binary files /dev/null and b/js/twemoji/16x16/1f523.png differ diff --git a/js/twemoji/16x16/1f524.png b/js/twemoji/16x16/1f524.png new file mode 100644 index 00000000..28b5b76d Binary files /dev/null and b/js/twemoji/16x16/1f524.png differ diff --git a/js/twemoji/16x16/1f525.png b/js/twemoji/16x16/1f525.png new file mode 100644 index 00000000..7417f151 Binary files /dev/null and b/js/twemoji/16x16/1f525.png differ diff --git a/js/twemoji/16x16/1f526.png b/js/twemoji/16x16/1f526.png new file mode 100644 index 00000000..00430f1d Binary files /dev/null and b/js/twemoji/16x16/1f526.png differ diff --git a/js/twemoji/16x16/1f527.png b/js/twemoji/16x16/1f527.png new file mode 100644 index 00000000..90f27869 Binary files /dev/null and b/js/twemoji/16x16/1f527.png differ diff --git a/js/twemoji/16x16/1f528.png b/js/twemoji/16x16/1f528.png new file mode 100644 index 00000000..eefd550a Binary files /dev/null and b/js/twemoji/16x16/1f528.png differ diff --git a/js/twemoji/16x16/1f529.png b/js/twemoji/16x16/1f529.png new file mode 100644 index 00000000..640408ba Binary files /dev/null and b/js/twemoji/16x16/1f529.png differ diff --git a/js/twemoji/16x16/1f52a.png b/js/twemoji/16x16/1f52a.png new file mode 100644 index 00000000..c891b667 Binary files /dev/null and b/js/twemoji/16x16/1f52a.png differ diff --git a/js/twemoji/16x16/1f52b.png b/js/twemoji/16x16/1f52b.png new file mode 100644 index 00000000..90eb029b Binary files /dev/null and b/js/twemoji/16x16/1f52b.png differ diff --git a/js/twemoji/16x16/1f52c.png b/js/twemoji/16x16/1f52c.png new file mode 100644 index 00000000..617e4dc3 Binary files /dev/null and b/js/twemoji/16x16/1f52c.png differ diff --git a/js/twemoji/16x16/1f52d.png b/js/twemoji/16x16/1f52d.png new file mode 100644 index 00000000..1f224a7b Binary files /dev/null and b/js/twemoji/16x16/1f52d.png differ diff --git a/js/twemoji/16x16/1f52e.png b/js/twemoji/16x16/1f52e.png new file mode 100644 index 00000000..1a341bc4 Binary files /dev/null and b/js/twemoji/16x16/1f52e.png differ diff --git a/js/twemoji/16x16/1f52f.png b/js/twemoji/16x16/1f52f.png new file mode 100644 index 00000000..257090e4 Binary files /dev/null and b/js/twemoji/16x16/1f52f.png differ diff --git a/js/twemoji/16x16/1f530.png b/js/twemoji/16x16/1f530.png new file mode 100644 index 00000000..bd8aa7e2 Binary files /dev/null and b/js/twemoji/16x16/1f530.png differ diff --git a/js/twemoji/16x16/1f531.png b/js/twemoji/16x16/1f531.png new file mode 100644 index 00000000..bd813a90 Binary files /dev/null and b/js/twemoji/16x16/1f531.png differ diff --git a/js/twemoji/16x16/1f532.png b/js/twemoji/16x16/1f532.png new file mode 100644 index 00000000..df13c3b0 Binary files /dev/null and b/js/twemoji/16x16/1f532.png differ diff --git a/js/twemoji/16x16/1f533.png b/js/twemoji/16x16/1f533.png new file mode 100644 index 00000000..31902681 Binary files /dev/null and b/js/twemoji/16x16/1f533.png differ diff --git a/js/twemoji/16x16/1f534.png b/js/twemoji/16x16/1f534.png new file mode 100644 index 00000000..db2d88cc Binary files /dev/null and b/js/twemoji/16x16/1f534.png differ diff --git a/js/twemoji/16x16/1f535.png b/js/twemoji/16x16/1f535.png new file mode 100644 index 00000000..39117914 Binary files /dev/null and b/js/twemoji/16x16/1f535.png differ diff --git a/js/twemoji/16x16/1f536.png b/js/twemoji/16x16/1f536.png new file mode 100644 index 00000000..c25a3b11 Binary files /dev/null and b/js/twemoji/16x16/1f536.png differ diff --git a/js/twemoji/16x16/1f537.png b/js/twemoji/16x16/1f537.png new file mode 100644 index 00000000..6584321e Binary files /dev/null and b/js/twemoji/16x16/1f537.png differ diff --git a/js/twemoji/16x16/1f538.png b/js/twemoji/16x16/1f538.png new file mode 100644 index 00000000..1ca2f651 Binary files /dev/null and b/js/twemoji/16x16/1f538.png differ diff --git a/js/twemoji/16x16/1f539.png b/js/twemoji/16x16/1f539.png new file mode 100644 index 00000000..212974b9 Binary files /dev/null and b/js/twemoji/16x16/1f539.png differ diff --git a/js/twemoji/16x16/1f53a.png b/js/twemoji/16x16/1f53a.png new file mode 100644 index 00000000..637d2789 Binary files /dev/null and b/js/twemoji/16x16/1f53a.png differ diff --git a/js/twemoji/16x16/1f53b.png b/js/twemoji/16x16/1f53b.png new file mode 100644 index 00000000..44fa24bb Binary files /dev/null and b/js/twemoji/16x16/1f53b.png differ diff --git a/js/twemoji/16x16/1f53c.png b/js/twemoji/16x16/1f53c.png new file mode 100644 index 00000000..08ececc7 Binary files /dev/null and b/js/twemoji/16x16/1f53c.png differ diff --git a/js/twemoji/16x16/1f53d.png b/js/twemoji/16x16/1f53d.png new file mode 100644 index 00000000..eb94b4fe Binary files /dev/null and b/js/twemoji/16x16/1f53d.png differ diff --git a/js/twemoji/16x16/1f550.png b/js/twemoji/16x16/1f550.png new file mode 100644 index 00000000..974b8561 Binary files /dev/null and b/js/twemoji/16x16/1f550.png differ diff --git a/js/twemoji/16x16/1f551.png b/js/twemoji/16x16/1f551.png new file mode 100644 index 00000000..1621874a Binary files /dev/null and b/js/twemoji/16x16/1f551.png differ diff --git a/js/twemoji/16x16/1f552.png b/js/twemoji/16x16/1f552.png new file mode 100644 index 00000000..71d8eb5d Binary files /dev/null and b/js/twemoji/16x16/1f552.png differ diff --git a/js/twemoji/16x16/1f553.png b/js/twemoji/16x16/1f553.png new file mode 100644 index 00000000..5514c0cf Binary files /dev/null and b/js/twemoji/16x16/1f553.png differ diff --git a/js/twemoji/16x16/1f554.png b/js/twemoji/16x16/1f554.png new file mode 100644 index 00000000..f86b092e Binary files /dev/null and b/js/twemoji/16x16/1f554.png differ diff --git a/js/twemoji/16x16/1f555.png b/js/twemoji/16x16/1f555.png new file mode 100644 index 00000000..78b24cc7 Binary files /dev/null and b/js/twemoji/16x16/1f555.png differ diff --git a/js/twemoji/16x16/1f556.png b/js/twemoji/16x16/1f556.png new file mode 100644 index 00000000..dc9320e4 Binary files /dev/null and b/js/twemoji/16x16/1f556.png differ diff --git a/js/twemoji/16x16/1f557.png b/js/twemoji/16x16/1f557.png new file mode 100644 index 00000000..189907ea Binary files /dev/null and b/js/twemoji/16x16/1f557.png differ diff --git a/js/twemoji/16x16/1f558.png b/js/twemoji/16x16/1f558.png new file mode 100644 index 00000000..95ee4038 Binary files /dev/null and b/js/twemoji/16x16/1f558.png differ diff --git a/js/twemoji/16x16/1f559.png b/js/twemoji/16x16/1f559.png new file mode 100644 index 00000000..1bc1de0b Binary files /dev/null and b/js/twemoji/16x16/1f559.png differ diff --git a/js/twemoji/16x16/1f55a.png b/js/twemoji/16x16/1f55a.png new file mode 100644 index 00000000..179d531d Binary files /dev/null and b/js/twemoji/16x16/1f55a.png differ diff --git a/js/twemoji/16x16/1f55b.png b/js/twemoji/16x16/1f55b.png new file mode 100644 index 00000000..2e415aa7 Binary files /dev/null and b/js/twemoji/16x16/1f55b.png differ diff --git a/js/twemoji/16x16/1f55c.png b/js/twemoji/16x16/1f55c.png new file mode 100644 index 00000000..aa6cf7fc Binary files /dev/null and b/js/twemoji/16x16/1f55c.png differ diff --git a/js/twemoji/16x16/1f55d.png b/js/twemoji/16x16/1f55d.png new file mode 100644 index 00000000..24f9be23 Binary files /dev/null and b/js/twemoji/16x16/1f55d.png differ diff --git a/js/twemoji/16x16/1f55e.png b/js/twemoji/16x16/1f55e.png new file mode 100644 index 00000000..c830b3b4 Binary files /dev/null and b/js/twemoji/16x16/1f55e.png differ diff --git a/js/twemoji/16x16/1f55f.png b/js/twemoji/16x16/1f55f.png new file mode 100644 index 00000000..724b00c9 Binary files /dev/null and b/js/twemoji/16x16/1f55f.png differ diff --git a/js/twemoji/16x16/1f560.png b/js/twemoji/16x16/1f560.png new file mode 100644 index 00000000..b3a9c758 Binary files /dev/null and b/js/twemoji/16x16/1f560.png differ diff --git a/js/twemoji/16x16/1f561.png b/js/twemoji/16x16/1f561.png new file mode 100644 index 00000000..dbae91e9 Binary files /dev/null and b/js/twemoji/16x16/1f561.png differ diff --git a/js/twemoji/16x16/1f562.png b/js/twemoji/16x16/1f562.png new file mode 100644 index 00000000..d2f8fcdc Binary files /dev/null and b/js/twemoji/16x16/1f562.png differ diff --git a/js/twemoji/16x16/1f563.png b/js/twemoji/16x16/1f563.png new file mode 100644 index 00000000..7f991a44 Binary files /dev/null and b/js/twemoji/16x16/1f563.png differ diff --git a/js/twemoji/16x16/1f564.png b/js/twemoji/16x16/1f564.png new file mode 100644 index 00000000..7147c64b Binary files /dev/null and b/js/twemoji/16x16/1f564.png differ diff --git a/js/twemoji/16x16/1f565.png b/js/twemoji/16x16/1f565.png new file mode 100644 index 00000000..e17690a5 Binary files /dev/null and b/js/twemoji/16x16/1f565.png differ diff --git a/js/twemoji/16x16/1f566.png b/js/twemoji/16x16/1f566.png new file mode 100644 index 00000000..32bd18bc Binary files /dev/null and b/js/twemoji/16x16/1f566.png differ diff --git a/js/twemoji/16x16/1f567.png b/js/twemoji/16x16/1f567.png new file mode 100644 index 00000000..bdc9ce7d Binary files /dev/null and b/js/twemoji/16x16/1f567.png differ diff --git a/js/twemoji/16x16/1f5fb.png b/js/twemoji/16x16/1f5fb.png new file mode 100644 index 00000000..6eafb513 Binary files /dev/null and b/js/twemoji/16x16/1f5fb.png differ diff --git a/js/twemoji/16x16/1f5fc.png b/js/twemoji/16x16/1f5fc.png new file mode 100644 index 00000000..49d12b2f Binary files /dev/null and b/js/twemoji/16x16/1f5fc.png differ diff --git a/js/twemoji/16x16/1f5fd.png b/js/twemoji/16x16/1f5fd.png new file mode 100644 index 00000000..c96e143f Binary files /dev/null and b/js/twemoji/16x16/1f5fd.png differ diff --git a/js/twemoji/16x16/1f5fe.png b/js/twemoji/16x16/1f5fe.png new file mode 100644 index 00000000..a2f996ef Binary files /dev/null and b/js/twemoji/16x16/1f5fe.png differ diff --git a/js/twemoji/16x16/1f5ff.png b/js/twemoji/16x16/1f5ff.png new file mode 100644 index 00000000..3e5f0b2a Binary files /dev/null and b/js/twemoji/16x16/1f5ff.png differ diff --git a/js/twemoji/16x16/1f600.png b/js/twemoji/16x16/1f600.png new file mode 100644 index 00000000..4f6132c6 Binary files /dev/null and b/js/twemoji/16x16/1f600.png differ diff --git a/js/twemoji/16x16/1f601.png b/js/twemoji/16x16/1f601.png new file mode 100644 index 00000000..8dc90eb8 Binary files /dev/null and b/js/twemoji/16x16/1f601.png differ diff --git a/js/twemoji/16x16/1f602.png b/js/twemoji/16x16/1f602.png new file mode 100644 index 00000000..24926b6f Binary files /dev/null and b/js/twemoji/16x16/1f602.png differ diff --git a/js/twemoji/16x16/1f603.png b/js/twemoji/16x16/1f603.png new file mode 100644 index 00000000..bdf5b557 Binary files /dev/null and b/js/twemoji/16x16/1f603.png differ diff --git a/js/twemoji/16x16/1f604.png b/js/twemoji/16x16/1f604.png new file mode 100644 index 00000000..36235235 Binary files /dev/null and b/js/twemoji/16x16/1f604.png differ diff --git a/js/twemoji/16x16/1f605.png b/js/twemoji/16x16/1f605.png new file mode 100644 index 00000000..72fb1c6b Binary files /dev/null and b/js/twemoji/16x16/1f605.png differ diff --git a/js/twemoji/16x16/1f606.png b/js/twemoji/16x16/1f606.png new file mode 100644 index 00000000..d818c199 Binary files /dev/null and b/js/twemoji/16x16/1f606.png differ diff --git a/js/twemoji/16x16/1f607.png b/js/twemoji/16x16/1f607.png new file mode 100644 index 00000000..3ab1a4c0 Binary files /dev/null and b/js/twemoji/16x16/1f607.png differ diff --git a/js/twemoji/16x16/1f608.png b/js/twemoji/16x16/1f608.png new file mode 100644 index 00000000..a3fe6a3b Binary files /dev/null and b/js/twemoji/16x16/1f608.png differ diff --git a/js/twemoji/16x16/1f609.png b/js/twemoji/16x16/1f609.png new file mode 100644 index 00000000..74d88743 Binary files /dev/null and b/js/twemoji/16x16/1f609.png differ diff --git a/js/twemoji/16x16/1f60a.png b/js/twemoji/16x16/1f60a.png new file mode 100644 index 00000000..b5a31b43 Binary files /dev/null and b/js/twemoji/16x16/1f60a.png differ diff --git a/js/twemoji/16x16/1f60b.png b/js/twemoji/16x16/1f60b.png new file mode 100644 index 00000000..5f9e19d0 Binary files /dev/null and b/js/twemoji/16x16/1f60b.png differ diff --git a/js/twemoji/16x16/1f60c.png b/js/twemoji/16x16/1f60c.png new file mode 100644 index 00000000..78e4b8e6 Binary files /dev/null and b/js/twemoji/16x16/1f60c.png differ diff --git a/js/twemoji/16x16/1f60d.png b/js/twemoji/16x16/1f60d.png new file mode 100644 index 00000000..8d15ec91 Binary files /dev/null and b/js/twemoji/16x16/1f60d.png differ diff --git a/js/twemoji/16x16/1f60e.png b/js/twemoji/16x16/1f60e.png new file mode 100644 index 00000000..e0dac37e Binary files /dev/null and b/js/twemoji/16x16/1f60e.png differ diff --git a/js/twemoji/16x16/1f60f.png b/js/twemoji/16x16/1f60f.png new file mode 100644 index 00000000..0c02e357 Binary files /dev/null and b/js/twemoji/16x16/1f60f.png differ diff --git a/js/twemoji/16x16/1f610.png b/js/twemoji/16x16/1f610.png new file mode 100644 index 00000000..d40bfda5 Binary files /dev/null and b/js/twemoji/16x16/1f610.png differ diff --git a/js/twemoji/16x16/1f611.png b/js/twemoji/16x16/1f611.png new file mode 100644 index 00000000..a51cbbf5 Binary files /dev/null and b/js/twemoji/16x16/1f611.png differ diff --git a/js/twemoji/16x16/1f612.png b/js/twemoji/16x16/1f612.png new file mode 100644 index 00000000..8829f133 Binary files /dev/null and b/js/twemoji/16x16/1f612.png differ diff --git a/js/twemoji/16x16/1f613.png b/js/twemoji/16x16/1f613.png new file mode 100644 index 00000000..4140c6b6 Binary files /dev/null and b/js/twemoji/16x16/1f613.png differ diff --git a/js/twemoji/16x16/1f614.png b/js/twemoji/16x16/1f614.png new file mode 100644 index 00000000..29d91266 Binary files /dev/null and b/js/twemoji/16x16/1f614.png differ diff --git a/js/twemoji/16x16/1f615.png b/js/twemoji/16x16/1f615.png new file mode 100644 index 00000000..8ebd2d43 Binary files /dev/null and b/js/twemoji/16x16/1f615.png differ diff --git a/js/twemoji/16x16/1f616.png b/js/twemoji/16x16/1f616.png new file mode 100644 index 00000000..8b5ce4e4 Binary files /dev/null and b/js/twemoji/16x16/1f616.png differ diff --git a/js/twemoji/16x16/1f617.png b/js/twemoji/16x16/1f617.png new file mode 100644 index 00000000..baa3ddeb Binary files /dev/null and b/js/twemoji/16x16/1f617.png differ diff --git a/js/twemoji/16x16/1f618.png b/js/twemoji/16x16/1f618.png new file mode 100644 index 00000000..84a0c879 Binary files /dev/null and b/js/twemoji/16x16/1f618.png differ diff --git a/js/twemoji/16x16/1f619.png b/js/twemoji/16x16/1f619.png new file mode 100644 index 00000000..e8d9966a Binary files /dev/null and b/js/twemoji/16x16/1f619.png differ diff --git a/js/twemoji/16x16/1f61a.png b/js/twemoji/16x16/1f61a.png new file mode 100644 index 00000000..f527d8d1 Binary files /dev/null and b/js/twemoji/16x16/1f61a.png differ diff --git a/js/twemoji/16x16/1f61b.png b/js/twemoji/16x16/1f61b.png new file mode 100644 index 00000000..202611bd Binary files /dev/null and b/js/twemoji/16x16/1f61b.png differ diff --git a/js/twemoji/16x16/1f61c.png b/js/twemoji/16x16/1f61c.png new file mode 100644 index 00000000..7922c7c8 Binary files /dev/null and b/js/twemoji/16x16/1f61c.png differ diff --git a/js/twemoji/16x16/1f61d.png b/js/twemoji/16x16/1f61d.png new file mode 100644 index 00000000..da8852b2 Binary files /dev/null and b/js/twemoji/16x16/1f61d.png differ diff --git a/js/twemoji/16x16/1f61e.png b/js/twemoji/16x16/1f61e.png new file mode 100644 index 00000000..9a54327c Binary files /dev/null and b/js/twemoji/16x16/1f61e.png differ diff --git a/js/twemoji/16x16/1f61f.png b/js/twemoji/16x16/1f61f.png new file mode 100644 index 00000000..259dcc6a Binary files /dev/null and b/js/twemoji/16x16/1f61f.png differ diff --git a/js/twemoji/16x16/1f620.png b/js/twemoji/16x16/1f620.png new file mode 100644 index 00000000..9e232e03 Binary files /dev/null and b/js/twemoji/16x16/1f620.png differ diff --git a/js/twemoji/16x16/1f621.png b/js/twemoji/16x16/1f621.png new file mode 100644 index 00000000..d738da57 Binary files /dev/null and b/js/twemoji/16x16/1f621.png differ diff --git a/js/twemoji/16x16/1f622.png b/js/twemoji/16x16/1f622.png new file mode 100644 index 00000000..cfc38552 Binary files /dev/null and b/js/twemoji/16x16/1f622.png differ diff --git a/js/twemoji/16x16/1f623.png b/js/twemoji/16x16/1f623.png new file mode 100644 index 00000000..df7a627b Binary files /dev/null and b/js/twemoji/16x16/1f623.png differ diff --git a/js/twemoji/16x16/1f624.png b/js/twemoji/16x16/1f624.png new file mode 100644 index 00000000..46f5f11d Binary files /dev/null and b/js/twemoji/16x16/1f624.png differ diff --git a/js/twemoji/16x16/1f625.png b/js/twemoji/16x16/1f625.png new file mode 100644 index 00000000..e90a4eb4 Binary files /dev/null and b/js/twemoji/16x16/1f625.png differ diff --git a/js/twemoji/16x16/1f626.png b/js/twemoji/16x16/1f626.png new file mode 100644 index 00000000..c56a1573 Binary files /dev/null and b/js/twemoji/16x16/1f626.png differ diff --git a/js/twemoji/16x16/1f627.png b/js/twemoji/16x16/1f627.png new file mode 100644 index 00000000..4dc428a2 Binary files /dev/null and b/js/twemoji/16x16/1f627.png differ diff --git a/js/twemoji/16x16/1f628.png b/js/twemoji/16x16/1f628.png new file mode 100644 index 00000000..5eab274b Binary files /dev/null and b/js/twemoji/16x16/1f628.png differ diff --git a/js/twemoji/16x16/1f629.png b/js/twemoji/16x16/1f629.png new file mode 100644 index 00000000..1a0a81b7 Binary files /dev/null and b/js/twemoji/16x16/1f629.png differ diff --git a/js/twemoji/16x16/1f62a.png b/js/twemoji/16x16/1f62a.png new file mode 100644 index 00000000..838f7896 Binary files /dev/null and b/js/twemoji/16x16/1f62a.png differ diff --git a/js/twemoji/16x16/1f62b.png b/js/twemoji/16x16/1f62b.png new file mode 100644 index 00000000..52b0d455 Binary files /dev/null and b/js/twemoji/16x16/1f62b.png differ diff --git a/js/twemoji/16x16/1f62c.png b/js/twemoji/16x16/1f62c.png new file mode 100644 index 00000000..8a74e484 Binary files /dev/null and b/js/twemoji/16x16/1f62c.png differ diff --git a/js/twemoji/16x16/1f62d.png b/js/twemoji/16x16/1f62d.png new file mode 100644 index 00000000..e1c93ac6 Binary files /dev/null and b/js/twemoji/16x16/1f62d.png differ diff --git a/js/twemoji/16x16/1f62e.png b/js/twemoji/16x16/1f62e.png new file mode 100644 index 00000000..f1979b06 Binary files /dev/null and b/js/twemoji/16x16/1f62e.png differ diff --git a/js/twemoji/16x16/1f62f.png b/js/twemoji/16x16/1f62f.png new file mode 100644 index 00000000..d7bbd48c Binary files /dev/null and b/js/twemoji/16x16/1f62f.png differ diff --git a/js/twemoji/16x16/1f630.png b/js/twemoji/16x16/1f630.png new file mode 100644 index 00000000..4be41d8f Binary files /dev/null and b/js/twemoji/16x16/1f630.png differ diff --git a/js/twemoji/16x16/1f631.png b/js/twemoji/16x16/1f631.png new file mode 100644 index 00000000..edb20bba Binary files /dev/null and b/js/twemoji/16x16/1f631.png differ diff --git a/js/twemoji/16x16/1f632.png b/js/twemoji/16x16/1f632.png new file mode 100644 index 00000000..29e1966a Binary files /dev/null and b/js/twemoji/16x16/1f632.png differ diff --git a/js/twemoji/16x16/1f633.png b/js/twemoji/16x16/1f633.png new file mode 100644 index 00000000..e9d280e1 Binary files /dev/null and b/js/twemoji/16x16/1f633.png differ diff --git a/js/twemoji/16x16/1f634.png b/js/twemoji/16x16/1f634.png new file mode 100644 index 00000000..bea6bdee Binary files /dev/null and b/js/twemoji/16x16/1f634.png differ diff --git a/js/twemoji/16x16/1f635.png b/js/twemoji/16x16/1f635.png new file mode 100644 index 00000000..2a543d8e Binary files /dev/null and b/js/twemoji/16x16/1f635.png differ diff --git a/js/twemoji/16x16/1f636.png b/js/twemoji/16x16/1f636.png new file mode 100644 index 00000000..3964520e Binary files /dev/null and b/js/twemoji/16x16/1f636.png differ diff --git a/js/twemoji/16x16/1f637.png b/js/twemoji/16x16/1f637.png new file mode 100644 index 00000000..6b7be89d Binary files /dev/null and b/js/twemoji/16x16/1f637.png differ diff --git a/js/twemoji/16x16/1f638.png b/js/twemoji/16x16/1f638.png new file mode 100644 index 00000000..935519df Binary files /dev/null and b/js/twemoji/16x16/1f638.png differ diff --git a/js/twemoji/16x16/1f639.png b/js/twemoji/16x16/1f639.png new file mode 100644 index 00000000..2d000e10 Binary files /dev/null and b/js/twemoji/16x16/1f639.png differ diff --git a/js/twemoji/16x16/1f63a.png b/js/twemoji/16x16/1f63a.png new file mode 100644 index 00000000..f316bcd5 Binary files /dev/null and b/js/twemoji/16x16/1f63a.png differ diff --git a/js/twemoji/16x16/1f63b.png b/js/twemoji/16x16/1f63b.png new file mode 100644 index 00000000..35565e20 Binary files /dev/null and b/js/twemoji/16x16/1f63b.png differ diff --git a/js/twemoji/16x16/1f63c.png b/js/twemoji/16x16/1f63c.png new file mode 100644 index 00000000..8f16417b Binary files /dev/null and b/js/twemoji/16x16/1f63c.png differ diff --git a/js/twemoji/16x16/1f63d.png b/js/twemoji/16x16/1f63d.png new file mode 100644 index 00000000..0b1338ed Binary files /dev/null and b/js/twemoji/16x16/1f63d.png differ diff --git a/js/twemoji/16x16/1f63e.png b/js/twemoji/16x16/1f63e.png new file mode 100644 index 00000000..efc8cbc1 Binary files /dev/null and b/js/twemoji/16x16/1f63e.png differ diff --git a/js/twemoji/16x16/1f63f.png b/js/twemoji/16x16/1f63f.png new file mode 100644 index 00000000..ef429e02 Binary files /dev/null and b/js/twemoji/16x16/1f63f.png differ diff --git a/js/twemoji/16x16/1f640.png b/js/twemoji/16x16/1f640.png new file mode 100644 index 00000000..c41cb4ad Binary files /dev/null and b/js/twemoji/16x16/1f640.png differ diff --git a/js/twemoji/16x16/1f645.png b/js/twemoji/16x16/1f645.png new file mode 100644 index 00000000..e1ce2b5f Binary files /dev/null and b/js/twemoji/16x16/1f645.png differ diff --git a/js/twemoji/16x16/1f646.png b/js/twemoji/16x16/1f646.png new file mode 100644 index 00000000..8fbed009 Binary files /dev/null and b/js/twemoji/16x16/1f646.png differ diff --git a/js/twemoji/16x16/1f647.png b/js/twemoji/16x16/1f647.png new file mode 100644 index 00000000..8755a7cd Binary files /dev/null and b/js/twemoji/16x16/1f647.png differ diff --git a/js/twemoji/16x16/1f648.png b/js/twemoji/16x16/1f648.png new file mode 100644 index 00000000..0c903f69 Binary files /dev/null and b/js/twemoji/16x16/1f648.png differ diff --git a/js/twemoji/16x16/1f649.png b/js/twemoji/16x16/1f649.png new file mode 100644 index 00000000..4b078c26 Binary files /dev/null and b/js/twemoji/16x16/1f649.png differ diff --git a/js/twemoji/16x16/1f64a.png b/js/twemoji/16x16/1f64a.png new file mode 100644 index 00000000..9b5a9bbf Binary files /dev/null and b/js/twemoji/16x16/1f64a.png differ diff --git a/js/twemoji/16x16/1f64b.png b/js/twemoji/16x16/1f64b.png new file mode 100644 index 00000000..34ace838 Binary files /dev/null and b/js/twemoji/16x16/1f64b.png differ diff --git a/js/twemoji/16x16/1f64c.png b/js/twemoji/16x16/1f64c.png new file mode 100644 index 00000000..2d7f2e11 Binary files /dev/null and b/js/twemoji/16x16/1f64c.png differ diff --git a/js/twemoji/16x16/1f64d.png b/js/twemoji/16x16/1f64d.png new file mode 100644 index 00000000..7a777746 Binary files /dev/null and b/js/twemoji/16x16/1f64d.png differ diff --git a/js/twemoji/16x16/1f64e.png b/js/twemoji/16x16/1f64e.png new file mode 100644 index 00000000..96daf5dc Binary files /dev/null and b/js/twemoji/16x16/1f64e.png differ diff --git a/js/twemoji/16x16/1f64f.png b/js/twemoji/16x16/1f64f.png new file mode 100644 index 00000000..86a9acdd Binary files /dev/null and b/js/twemoji/16x16/1f64f.png differ diff --git a/js/twemoji/16x16/1f680.png b/js/twemoji/16x16/1f680.png new file mode 100644 index 00000000..1392f1e6 Binary files /dev/null and b/js/twemoji/16x16/1f680.png differ diff --git a/js/twemoji/16x16/1f681.png b/js/twemoji/16x16/1f681.png new file mode 100644 index 00000000..818492ce Binary files /dev/null and b/js/twemoji/16x16/1f681.png differ diff --git a/js/twemoji/16x16/1f682.png b/js/twemoji/16x16/1f682.png new file mode 100644 index 00000000..3c9fc735 Binary files /dev/null and b/js/twemoji/16x16/1f682.png differ diff --git a/js/twemoji/16x16/1f683.png b/js/twemoji/16x16/1f683.png new file mode 100644 index 00000000..2e4a8afb Binary files /dev/null and b/js/twemoji/16x16/1f683.png differ diff --git a/js/twemoji/16x16/1f684.png b/js/twemoji/16x16/1f684.png new file mode 100644 index 00000000..2149c949 Binary files /dev/null and b/js/twemoji/16x16/1f684.png differ diff --git a/js/twemoji/16x16/1f685.png b/js/twemoji/16x16/1f685.png new file mode 100644 index 00000000..18499737 Binary files /dev/null and b/js/twemoji/16x16/1f685.png differ diff --git a/js/twemoji/16x16/1f686.png b/js/twemoji/16x16/1f686.png new file mode 100644 index 00000000..86f009f2 Binary files /dev/null and b/js/twemoji/16x16/1f686.png differ diff --git a/js/twemoji/16x16/1f687.png b/js/twemoji/16x16/1f687.png new file mode 100644 index 00000000..a9193c52 Binary files /dev/null and b/js/twemoji/16x16/1f687.png differ diff --git a/js/twemoji/16x16/1f688.png b/js/twemoji/16x16/1f688.png new file mode 100644 index 00000000..65a124d4 Binary files /dev/null and b/js/twemoji/16x16/1f688.png differ diff --git a/js/twemoji/16x16/1f689.png b/js/twemoji/16x16/1f689.png new file mode 100644 index 00000000..4f4242cd Binary files /dev/null and b/js/twemoji/16x16/1f689.png differ diff --git a/js/twemoji/16x16/1f68a.png b/js/twemoji/16x16/1f68a.png new file mode 100644 index 00000000..8b92ea56 Binary files /dev/null and b/js/twemoji/16x16/1f68a.png differ diff --git a/js/twemoji/16x16/1f68b.png b/js/twemoji/16x16/1f68b.png new file mode 100644 index 00000000..023078a2 Binary files /dev/null and b/js/twemoji/16x16/1f68b.png differ diff --git a/js/twemoji/16x16/1f68c.png b/js/twemoji/16x16/1f68c.png new file mode 100644 index 00000000..d2e5a25c Binary files /dev/null and b/js/twemoji/16x16/1f68c.png differ diff --git a/js/twemoji/16x16/1f68d.png b/js/twemoji/16x16/1f68d.png new file mode 100644 index 00000000..703a93a6 Binary files /dev/null and b/js/twemoji/16x16/1f68d.png differ diff --git a/js/twemoji/16x16/1f68e.png b/js/twemoji/16x16/1f68e.png new file mode 100644 index 00000000..cb5e7813 Binary files /dev/null and b/js/twemoji/16x16/1f68e.png differ diff --git a/js/twemoji/16x16/1f68f.png b/js/twemoji/16x16/1f68f.png new file mode 100644 index 00000000..647b9592 Binary files /dev/null and b/js/twemoji/16x16/1f68f.png differ diff --git a/js/twemoji/16x16/1f690.png b/js/twemoji/16x16/1f690.png new file mode 100644 index 00000000..2913785a Binary files /dev/null and b/js/twemoji/16x16/1f690.png differ diff --git a/js/twemoji/16x16/1f691.png b/js/twemoji/16x16/1f691.png new file mode 100644 index 00000000..7cc9ce0c Binary files /dev/null and b/js/twemoji/16x16/1f691.png differ diff --git a/js/twemoji/16x16/1f692.png b/js/twemoji/16x16/1f692.png new file mode 100644 index 00000000..30fe43d9 Binary files /dev/null and b/js/twemoji/16x16/1f692.png differ diff --git a/js/twemoji/16x16/1f693.png b/js/twemoji/16x16/1f693.png new file mode 100644 index 00000000..ea1f919a Binary files /dev/null and b/js/twemoji/16x16/1f693.png differ diff --git a/js/twemoji/16x16/1f694.png b/js/twemoji/16x16/1f694.png new file mode 100644 index 00000000..43aff4e8 Binary files /dev/null and b/js/twemoji/16x16/1f694.png differ diff --git a/js/twemoji/16x16/1f695.png b/js/twemoji/16x16/1f695.png new file mode 100644 index 00000000..11b19272 Binary files /dev/null and b/js/twemoji/16x16/1f695.png differ diff --git a/js/twemoji/16x16/1f696.png b/js/twemoji/16x16/1f696.png new file mode 100644 index 00000000..0528cdba Binary files /dev/null and b/js/twemoji/16x16/1f696.png differ diff --git a/js/twemoji/16x16/1f697.png b/js/twemoji/16x16/1f697.png new file mode 100644 index 00000000..925c94ce Binary files /dev/null and b/js/twemoji/16x16/1f697.png differ diff --git a/js/twemoji/16x16/1f698.png b/js/twemoji/16x16/1f698.png new file mode 100644 index 00000000..3a456696 Binary files /dev/null and b/js/twemoji/16x16/1f698.png differ diff --git a/js/twemoji/16x16/1f699.png b/js/twemoji/16x16/1f699.png new file mode 100644 index 00000000..5f9fa971 Binary files /dev/null and b/js/twemoji/16x16/1f699.png differ diff --git a/js/twemoji/16x16/1f69a.png b/js/twemoji/16x16/1f69a.png new file mode 100644 index 00000000..2501b22c Binary files /dev/null and b/js/twemoji/16x16/1f69a.png differ diff --git a/js/twemoji/16x16/1f69b.png b/js/twemoji/16x16/1f69b.png new file mode 100644 index 00000000..e6f143ed Binary files /dev/null and b/js/twemoji/16x16/1f69b.png differ diff --git a/js/twemoji/16x16/1f69c.png b/js/twemoji/16x16/1f69c.png new file mode 100644 index 00000000..523d2964 Binary files /dev/null and b/js/twemoji/16x16/1f69c.png differ diff --git a/js/twemoji/16x16/1f69d.png b/js/twemoji/16x16/1f69d.png new file mode 100644 index 00000000..8e554c0f Binary files /dev/null and b/js/twemoji/16x16/1f69d.png differ diff --git a/js/twemoji/16x16/1f69e.png b/js/twemoji/16x16/1f69e.png new file mode 100644 index 00000000..4d603fff Binary files /dev/null and b/js/twemoji/16x16/1f69e.png differ diff --git a/js/twemoji/16x16/1f69f.png b/js/twemoji/16x16/1f69f.png new file mode 100644 index 00000000..580dfc6d Binary files /dev/null and b/js/twemoji/16x16/1f69f.png differ diff --git a/js/twemoji/16x16/1f6a0.png b/js/twemoji/16x16/1f6a0.png new file mode 100644 index 00000000..426c9f4e Binary files /dev/null and b/js/twemoji/16x16/1f6a0.png differ diff --git a/js/twemoji/16x16/1f6a1.png b/js/twemoji/16x16/1f6a1.png new file mode 100644 index 00000000..3dc82914 Binary files /dev/null and b/js/twemoji/16x16/1f6a1.png differ diff --git a/js/twemoji/16x16/1f6a2.png b/js/twemoji/16x16/1f6a2.png new file mode 100644 index 00000000..aa5d978b Binary files /dev/null and b/js/twemoji/16x16/1f6a2.png differ diff --git a/js/twemoji/16x16/1f6a3.png b/js/twemoji/16x16/1f6a3.png new file mode 100644 index 00000000..a8ef8141 Binary files /dev/null and b/js/twemoji/16x16/1f6a3.png differ diff --git a/js/twemoji/16x16/1f6a4.png b/js/twemoji/16x16/1f6a4.png new file mode 100644 index 00000000..e29b4203 Binary files /dev/null and b/js/twemoji/16x16/1f6a4.png differ diff --git a/js/twemoji/16x16/1f6a5.png b/js/twemoji/16x16/1f6a5.png new file mode 100644 index 00000000..142a45a9 Binary files /dev/null and b/js/twemoji/16x16/1f6a5.png differ diff --git a/js/twemoji/16x16/1f6a6.png b/js/twemoji/16x16/1f6a6.png new file mode 100644 index 00000000..a2d6fde2 Binary files /dev/null and b/js/twemoji/16x16/1f6a6.png differ diff --git a/js/twemoji/16x16/1f6a7.png b/js/twemoji/16x16/1f6a7.png new file mode 100644 index 00000000..58fae5ef Binary files /dev/null and b/js/twemoji/16x16/1f6a7.png differ diff --git a/js/twemoji/16x16/1f6a8.png b/js/twemoji/16x16/1f6a8.png new file mode 100644 index 00000000..e88f5941 Binary files /dev/null and b/js/twemoji/16x16/1f6a8.png differ diff --git a/js/twemoji/16x16/1f6a9.png b/js/twemoji/16x16/1f6a9.png new file mode 100644 index 00000000..111b5474 Binary files /dev/null and b/js/twemoji/16x16/1f6a9.png differ diff --git a/js/twemoji/16x16/1f6aa.png b/js/twemoji/16x16/1f6aa.png new file mode 100644 index 00000000..ae039d9b Binary files /dev/null and b/js/twemoji/16x16/1f6aa.png differ diff --git a/js/twemoji/16x16/1f6ab.png b/js/twemoji/16x16/1f6ab.png new file mode 100644 index 00000000..1667f26c Binary files /dev/null and b/js/twemoji/16x16/1f6ab.png differ diff --git a/js/twemoji/16x16/1f6ac.png b/js/twemoji/16x16/1f6ac.png new file mode 100644 index 00000000..109aa1d2 Binary files /dev/null and b/js/twemoji/16x16/1f6ac.png differ diff --git a/js/twemoji/16x16/1f6ad.png b/js/twemoji/16x16/1f6ad.png new file mode 100644 index 00000000..87097372 Binary files /dev/null and b/js/twemoji/16x16/1f6ad.png differ diff --git a/js/twemoji/16x16/1f6ae.png b/js/twemoji/16x16/1f6ae.png new file mode 100644 index 00000000..ff856ff3 Binary files /dev/null and b/js/twemoji/16x16/1f6ae.png differ diff --git a/js/twemoji/16x16/1f6af.png b/js/twemoji/16x16/1f6af.png new file mode 100644 index 00000000..3de7491b Binary files /dev/null and b/js/twemoji/16x16/1f6af.png differ diff --git a/js/twemoji/16x16/1f6b0.png b/js/twemoji/16x16/1f6b0.png new file mode 100644 index 00000000..52e5ba3c Binary files /dev/null and b/js/twemoji/16x16/1f6b0.png differ diff --git a/js/twemoji/16x16/1f6b1.png b/js/twemoji/16x16/1f6b1.png new file mode 100644 index 00000000..36c0b47c Binary files /dev/null and b/js/twemoji/16x16/1f6b1.png differ diff --git a/js/twemoji/16x16/1f6b2.png b/js/twemoji/16x16/1f6b2.png new file mode 100644 index 00000000..0531e288 Binary files /dev/null and b/js/twemoji/16x16/1f6b2.png differ diff --git a/js/twemoji/16x16/1f6b3.png b/js/twemoji/16x16/1f6b3.png new file mode 100644 index 00000000..62322bfb Binary files /dev/null and b/js/twemoji/16x16/1f6b3.png differ diff --git a/js/twemoji/16x16/1f6b4.png b/js/twemoji/16x16/1f6b4.png new file mode 100644 index 00000000..7015f782 Binary files /dev/null and b/js/twemoji/16x16/1f6b4.png differ diff --git a/js/twemoji/16x16/1f6b5.png b/js/twemoji/16x16/1f6b5.png new file mode 100644 index 00000000..8e9dd136 Binary files /dev/null and b/js/twemoji/16x16/1f6b5.png differ diff --git a/js/twemoji/16x16/1f6b6.png b/js/twemoji/16x16/1f6b6.png new file mode 100644 index 00000000..de8daf48 Binary files /dev/null and b/js/twemoji/16x16/1f6b6.png differ diff --git a/js/twemoji/16x16/1f6b7.png b/js/twemoji/16x16/1f6b7.png new file mode 100644 index 00000000..e84263b8 Binary files /dev/null and b/js/twemoji/16x16/1f6b7.png differ diff --git a/js/twemoji/16x16/1f6b8.png b/js/twemoji/16x16/1f6b8.png new file mode 100644 index 00000000..2506c248 Binary files /dev/null and b/js/twemoji/16x16/1f6b8.png differ diff --git a/js/twemoji/16x16/1f6b9.png b/js/twemoji/16x16/1f6b9.png new file mode 100644 index 00000000..a724df70 Binary files /dev/null and b/js/twemoji/16x16/1f6b9.png differ diff --git a/js/twemoji/16x16/1f6ba.png b/js/twemoji/16x16/1f6ba.png new file mode 100644 index 00000000..2a5d488b Binary files /dev/null and b/js/twemoji/16x16/1f6ba.png differ diff --git a/js/twemoji/16x16/1f6bb.png b/js/twemoji/16x16/1f6bb.png new file mode 100644 index 00000000..8c36f7b7 Binary files /dev/null and b/js/twemoji/16x16/1f6bb.png differ diff --git a/js/twemoji/16x16/1f6bc.png b/js/twemoji/16x16/1f6bc.png new file mode 100644 index 00000000..70dbc55a Binary files /dev/null and b/js/twemoji/16x16/1f6bc.png differ diff --git a/js/twemoji/16x16/1f6bd.png b/js/twemoji/16x16/1f6bd.png new file mode 100644 index 00000000..762c3062 Binary files /dev/null and b/js/twemoji/16x16/1f6bd.png differ diff --git a/js/twemoji/16x16/1f6be.png b/js/twemoji/16x16/1f6be.png new file mode 100644 index 00000000..8aa44a6b Binary files /dev/null and b/js/twemoji/16x16/1f6be.png differ diff --git a/js/twemoji/16x16/1f6bf.png b/js/twemoji/16x16/1f6bf.png new file mode 100644 index 00000000..d4d0c0ec Binary files /dev/null and b/js/twemoji/16x16/1f6bf.png differ diff --git a/js/twemoji/16x16/1f6c0.png b/js/twemoji/16x16/1f6c0.png new file mode 100644 index 00000000..dbe08122 Binary files /dev/null and b/js/twemoji/16x16/1f6c0.png differ diff --git a/js/twemoji/16x16/1f6c1.png b/js/twemoji/16x16/1f6c1.png new file mode 100644 index 00000000..ff6ef3b9 Binary files /dev/null and b/js/twemoji/16x16/1f6c1.png differ diff --git a/js/twemoji/16x16/1f6c2.png b/js/twemoji/16x16/1f6c2.png new file mode 100644 index 00000000..d9d139ae Binary files /dev/null and b/js/twemoji/16x16/1f6c2.png differ diff --git a/js/twemoji/16x16/1f6c3.png b/js/twemoji/16x16/1f6c3.png new file mode 100644 index 00000000..a75ff22c Binary files /dev/null and b/js/twemoji/16x16/1f6c3.png differ diff --git a/js/twemoji/16x16/1f6c4.png b/js/twemoji/16x16/1f6c4.png new file mode 100644 index 00000000..1b4bd4ad Binary files /dev/null and b/js/twemoji/16x16/1f6c4.png differ diff --git a/js/twemoji/16x16/1f6c5.png b/js/twemoji/16x16/1f6c5.png new file mode 100644 index 00000000..f25ffcbd Binary files /dev/null and b/js/twemoji/16x16/1f6c5.png differ diff --git a/js/twemoji/16x16/203c.png b/js/twemoji/16x16/203c.png new file mode 100644 index 00000000..c4518dcf Binary files /dev/null and b/js/twemoji/16x16/203c.png differ diff --git a/js/twemoji/16x16/2049.png b/js/twemoji/16x16/2049.png new file mode 100644 index 00000000..d5b761a6 Binary files /dev/null and b/js/twemoji/16x16/2049.png differ diff --git a/js/twemoji/16x16/2122.png b/js/twemoji/16x16/2122.png new file mode 100644 index 00000000..ff867db6 Binary files /dev/null and b/js/twemoji/16x16/2122.png differ diff --git a/js/twemoji/16x16/2139.png b/js/twemoji/16x16/2139.png new file mode 100644 index 00000000..eeca5136 Binary files /dev/null and b/js/twemoji/16x16/2139.png differ diff --git a/js/twemoji/16x16/2194.png b/js/twemoji/16x16/2194.png new file mode 100644 index 00000000..8abc8061 Binary files /dev/null and b/js/twemoji/16x16/2194.png differ diff --git a/js/twemoji/16x16/2195.png b/js/twemoji/16x16/2195.png new file mode 100644 index 00000000..9ceaaeb6 Binary files /dev/null and b/js/twemoji/16x16/2195.png differ diff --git a/js/twemoji/16x16/2196.png b/js/twemoji/16x16/2196.png new file mode 100644 index 00000000..e0e3874c Binary files /dev/null and b/js/twemoji/16x16/2196.png differ diff --git a/js/twemoji/16x16/2197.png b/js/twemoji/16x16/2197.png new file mode 100644 index 00000000..14a081c5 Binary files /dev/null and b/js/twemoji/16x16/2197.png differ diff --git a/js/twemoji/16x16/2198.png b/js/twemoji/16x16/2198.png new file mode 100644 index 00000000..fa5769d2 Binary files /dev/null and b/js/twemoji/16x16/2198.png differ diff --git a/js/twemoji/16x16/2199.png b/js/twemoji/16x16/2199.png new file mode 100644 index 00000000..dc837767 Binary files /dev/null and b/js/twemoji/16x16/2199.png differ diff --git a/js/twemoji/16x16/21a9.png b/js/twemoji/16x16/21a9.png new file mode 100644 index 00000000..51f5ed32 Binary files /dev/null and b/js/twemoji/16x16/21a9.png differ diff --git a/js/twemoji/16x16/21aa.png b/js/twemoji/16x16/21aa.png new file mode 100644 index 00000000..88f3fbd6 Binary files /dev/null and b/js/twemoji/16x16/21aa.png differ diff --git a/js/twemoji/16x16/23-20e3.png b/js/twemoji/16x16/23-20e3.png new file mode 100644 index 00000000..9994e634 Binary files /dev/null and b/js/twemoji/16x16/23-20e3.png differ diff --git a/js/twemoji/16x16/231a.png b/js/twemoji/16x16/231a.png new file mode 100644 index 00000000..2dfa11e5 Binary files /dev/null and b/js/twemoji/16x16/231a.png differ diff --git a/js/twemoji/16x16/231b.png b/js/twemoji/16x16/231b.png new file mode 100644 index 00000000..5dba6dc9 Binary files /dev/null and b/js/twemoji/16x16/231b.png differ diff --git a/js/twemoji/16x16/23e9.png b/js/twemoji/16x16/23e9.png new file mode 100644 index 00000000..9446630e Binary files /dev/null and b/js/twemoji/16x16/23e9.png differ diff --git a/js/twemoji/16x16/23ea.png b/js/twemoji/16x16/23ea.png new file mode 100644 index 00000000..cbd99654 Binary files /dev/null and b/js/twemoji/16x16/23ea.png differ diff --git a/js/twemoji/16x16/23eb.png b/js/twemoji/16x16/23eb.png new file mode 100644 index 00000000..15dd4882 Binary files /dev/null and b/js/twemoji/16x16/23eb.png differ diff --git a/js/twemoji/16x16/23ec.png b/js/twemoji/16x16/23ec.png new file mode 100644 index 00000000..dfed7878 Binary files /dev/null and b/js/twemoji/16x16/23ec.png differ diff --git a/js/twemoji/16x16/23f0.png b/js/twemoji/16x16/23f0.png new file mode 100644 index 00000000..4381e5a1 Binary files /dev/null and b/js/twemoji/16x16/23f0.png differ diff --git a/js/twemoji/16x16/23f3.png b/js/twemoji/16x16/23f3.png new file mode 100644 index 00000000..e9a4a401 Binary files /dev/null and b/js/twemoji/16x16/23f3.png differ diff --git a/js/twemoji/16x16/24c2.png b/js/twemoji/16x16/24c2.png new file mode 100644 index 00000000..1cf572c0 Binary files /dev/null and b/js/twemoji/16x16/24c2.png differ diff --git a/js/twemoji/16x16/25aa.png b/js/twemoji/16x16/25aa.png new file mode 100644 index 00000000..4212c017 Binary files /dev/null and b/js/twemoji/16x16/25aa.png differ diff --git a/js/twemoji/16x16/25ab.png b/js/twemoji/16x16/25ab.png new file mode 100644 index 00000000..c578bfe3 Binary files /dev/null and b/js/twemoji/16x16/25ab.png differ diff --git a/js/twemoji/16x16/25b6.png b/js/twemoji/16x16/25b6.png new file mode 100644 index 00000000..aa0977c4 Binary files /dev/null and b/js/twemoji/16x16/25b6.png differ diff --git a/js/twemoji/16x16/25c0.png b/js/twemoji/16x16/25c0.png new file mode 100644 index 00000000..2bc3cdf7 Binary files /dev/null and b/js/twemoji/16x16/25c0.png differ diff --git a/js/twemoji/16x16/25fb.png b/js/twemoji/16x16/25fb.png new file mode 100644 index 00000000..08354780 Binary files /dev/null and b/js/twemoji/16x16/25fb.png differ diff --git a/js/twemoji/16x16/25fc.png b/js/twemoji/16x16/25fc.png new file mode 100644 index 00000000..682caecb Binary files /dev/null and b/js/twemoji/16x16/25fc.png differ diff --git a/js/twemoji/16x16/25fd.png b/js/twemoji/16x16/25fd.png new file mode 100644 index 00000000..2289f48d Binary files /dev/null and b/js/twemoji/16x16/25fd.png differ diff --git a/js/twemoji/16x16/25fe.png b/js/twemoji/16x16/25fe.png new file mode 100644 index 00000000..34e418a0 Binary files /dev/null and b/js/twemoji/16x16/25fe.png differ diff --git a/js/twemoji/16x16/2600.png b/js/twemoji/16x16/2600.png new file mode 100644 index 00000000..6f87a2dd Binary files /dev/null and b/js/twemoji/16x16/2600.png differ diff --git a/js/twemoji/16x16/2601.png b/js/twemoji/16x16/2601.png new file mode 100644 index 00000000..72c190b4 Binary files /dev/null and b/js/twemoji/16x16/2601.png differ diff --git a/js/twemoji/16x16/260e.png b/js/twemoji/16x16/260e.png new file mode 100644 index 00000000..55b36e1d Binary files /dev/null and b/js/twemoji/16x16/260e.png differ diff --git a/js/twemoji/16x16/2611.png b/js/twemoji/16x16/2611.png new file mode 100644 index 00000000..964c7de6 Binary files /dev/null and b/js/twemoji/16x16/2611.png differ diff --git a/js/twemoji/16x16/2614.png b/js/twemoji/16x16/2614.png new file mode 100644 index 00000000..314a609b Binary files /dev/null and b/js/twemoji/16x16/2614.png differ diff --git a/js/twemoji/16x16/2615.png b/js/twemoji/16x16/2615.png new file mode 100644 index 00000000..9d0f3e36 Binary files /dev/null and b/js/twemoji/16x16/2615.png differ diff --git a/js/twemoji/16x16/261d.png b/js/twemoji/16x16/261d.png new file mode 100644 index 00000000..9eb63327 Binary files /dev/null and b/js/twemoji/16x16/261d.png differ diff --git a/js/twemoji/16x16/263a.png b/js/twemoji/16x16/263a.png new file mode 100644 index 00000000..4622b213 Binary files /dev/null and b/js/twemoji/16x16/263a.png differ diff --git a/js/twemoji/16x16/2648.png b/js/twemoji/16x16/2648.png new file mode 100644 index 00000000..8cd932dc Binary files /dev/null and b/js/twemoji/16x16/2648.png differ diff --git a/js/twemoji/16x16/2649.png b/js/twemoji/16x16/2649.png new file mode 100644 index 00000000..3e29af13 Binary files /dev/null and b/js/twemoji/16x16/2649.png differ diff --git a/js/twemoji/16x16/264a.png b/js/twemoji/16x16/264a.png new file mode 100644 index 00000000..4c89087f Binary files /dev/null and b/js/twemoji/16x16/264a.png differ diff --git a/js/twemoji/16x16/264b.png b/js/twemoji/16x16/264b.png new file mode 100644 index 00000000..0e8c73af Binary files /dev/null and b/js/twemoji/16x16/264b.png differ diff --git a/js/twemoji/16x16/264c.png b/js/twemoji/16x16/264c.png new file mode 100644 index 00000000..41da6721 Binary files /dev/null and b/js/twemoji/16x16/264c.png differ diff --git a/js/twemoji/16x16/264d.png b/js/twemoji/16x16/264d.png new file mode 100644 index 00000000..c68f46c4 Binary files /dev/null and b/js/twemoji/16x16/264d.png differ diff --git a/js/twemoji/16x16/264e.png b/js/twemoji/16x16/264e.png new file mode 100644 index 00000000..089126b1 Binary files /dev/null and b/js/twemoji/16x16/264e.png differ diff --git a/js/twemoji/16x16/264f.png b/js/twemoji/16x16/264f.png new file mode 100644 index 00000000..c5bc85e8 Binary files /dev/null and b/js/twemoji/16x16/264f.png differ diff --git a/js/twemoji/16x16/2650.png b/js/twemoji/16x16/2650.png new file mode 100644 index 00000000..a8092efe Binary files /dev/null and b/js/twemoji/16x16/2650.png differ diff --git a/js/twemoji/16x16/2651.png b/js/twemoji/16x16/2651.png new file mode 100644 index 00000000..18275aa1 Binary files /dev/null and b/js/twemoji/16x16/2651.png differ diff --git a/js/twemoji/16x16/2652.png b/js/twemoji/16x16/2652.png new file mode 100644 index 00000000..a5e7e28c Binary files /dev/null and b/js/twemoji/16x16/2652.png differ diff --git a/js/twemoji/16x16/2653.png b/js/twemoji/16x16/2653.png new file mode 100644 index 00000000..c5549491 Binary files /dev/null and b/js/twemoji/16x16/2653.png differ diff --git a/js/twemoji/16x16/2660.png b/js/twemoji/16x16/2660.png new file mode 100644 index 00000000..63ec650a Binary files /dev/null and b/js/twemoji/16x16/2660.png differ diff --git a/js/twemoji/16x16/2663.png b/js/twemoji/16x16/2663.png new file mode 100644 index 00000000..57c26908 Binary files /dev/null and b/js/twemoji/16x16/2663.png differ diff --git a/js/twemoji/16x16/2665.png b/js/twemoji/16x16/2665.png new file mode 100644 index 00000000..f6a667b9 Binary files /dev/null and b/js/twemoji/16x16/2665.png differ diff --git a/js/twemoji/16x16/2666.png b/js/twemoji/16x16/2666.png new file mode 100644 index 00000000..14a87f16 Binary files /dev/null and b/js/twemoji/16x16/2666.png differ diff --git a/js/twemoji/16x16/2668.png b/js/twemoji/16x16/2668.png new file mode 100644 index 00000000..046d380d Binary files /dev/null and b/js/twemoji/16x16/2668.png differ diff --git a/js/twemoji/16x16/267b.png b/js/twemoji/16x16/267b.png new file mode 100644 index 00000000..502fcd63 Binary files /dev/null and b/js/twemoji/16x16/267b.png differ diff --git a/js/twemoji/16x16/267f.png b/js/twemoji/16x16/267f.png new file mode 100644 index 00000000..bafd2ae6 Binary files /dev/null and b/js/twemoji/16x16/267f.png differ diff --git a/js/twemoji/16x16/2693.png b/js/twemoji/16x16/2693.png new file mode 100644 index 00000000..dff27caa Binary files /dev/null and b/js/twemoji/16x16/2693.png differ diff --git a/js/twemoji/16x16/26a0.png b/js/twemoji/16x16/26a0.png new file mode 100644 index 00000000..6d24a5a1 Binary files /dev/null and b/js/twemoji/16x16/26a0.png differ diff --git a/js/twemoji/16x16/26a1.png b/js/twemoji/16x16/26a1.png new file mode 100644 index 00000000..c92564bf Binary files /dev/null and b/js/twemoji/16x16/26a1.png differ diff --git a/js/twemoji/16x16/26aa.png b/js/twemoji/16x16/26aa.png new file mode 100644 index 00000000..d31a9d9c Binary files /dev/null and b/js/twemoji/16x16/26aa.png differ diff --git a/js/twemoji/16x16/26ab.png b/js/twemoji/16x16/26ab.png new file mode 100644 index 00000000..ced56282 Binary files /dev/null and b/js/twemoji/16x16/26ab.png differ diff --git a/js/twemoji/16x16/26bd.png b/js/twemoji/16x16/26bd.png new file mode 100644 index 00000000..93f358e4 Binary files /dev/null and b/js/twemoji/16x16/26bd.png differ diff --git a/js/twemoji/16x16/26be.png b/js/twemoji/16x16/26be.png new file mode 100644 index 00000000..c5526849 Binary files /dev/null and b/js/twemoji/16x16/26be.png differ diff --git a/js/twemoji/16x16/26c4.png b/js/twemoji/16x16/26c4.png new file mode 100644 index 00000000..94e06029 Binary files /dev/null and b/js/twemoji/16x16/26c4.png differ diff --git a/js/twemoji/16x16/26c5.png b/js/twemoji/16x16/26c5.png new file mode 100644 index 00000000..f32bf773 Binary files /dev/null and b/js/twemoji/16x16/26c5.png differ diff --git a/js/twemoji/16x16/26ce.png b/js/twemoji/16x16/26ce.png new file mode 100644 index 00000000..9d446fde Binary files /dev/null and b/js/twemoji/16x16/26ce.png differ diff --git a/js/twemoji/16x16/26d4.png b/js/twemoji/16x16/26d4.png new file mode 100644 index 00000000..23ca1a41 Binary files /dev/null and b/js/twemoji/16x16/26d4.png differ diff --git a/js/twemoji/16x16/26ea.png b/js/twemoji/16x16/26ea.png new file mode 100644 index 00000000..352506fd Binary files /dev/null and b/js/twemoji/16x16/26ea.png differ diff --git a/js/twemoji/16x16/26f2.png b/js/twemoji/16x16/26f2.png new file mode 100644 index 00000000..a51437b6 Binary files /dev/null and b/js/twemoji/16x16/26f2.png differ diff --git a/js/twemoji/16x16/26f3.png b/js/twemoji/16x16/26f3.png new file mode 100644 index 00000000..62139fd1 Binary files /dev/null and b/js/twemoji/16x16/26f3.png differ diff --git a/js/twemoji/16x16/26f5.png b/js/twemoji/16x16/26f5.png new file mode 100644 index 00000000..01026dcc Binary files /dev/null and b/js/twemoji/16x16/26f5.png differ diff --git a/js/twemoji/16x16/26fa.png b/js/twemoji/16x16/26fa.png new file mode 100644 index 00000000..4639f7b8 Binary files /dev/null and b/js/twemoji/16x16/26fa.png differ diff --git a/js/twemoji/16x16/26fd.png b/js/twemoji/16x16/26fd.png new file mode 100644 index 00000000..2c8f05e5 Binary files /dev/null and b/js/twemoji/16x16/26fd.png differ diff --git a/js/twemoji/16x16/2702.png b/js/twemoji/16x16/2702.png new file mode 100644 index 00000000..4905e6fe Binary files /dev/null and b/js/twemoji/16x16/2702.png differ diff --git a/js/twemoji/16x16/2705.png b/js/twemoji/16x16/2705.png new file mode 100644 index 00000000..a9713de4 Binary files /dev/null and b/js/twemoji/16x16/2705.png differ diff --git a/js/twemoji/16x16/2708.png b/js/twemoji/16x16/2708.png new file mode 100644 index 00000000..0433b313 Binary files /dev/null and b/js/twemoji/16x16/2708.png differ diff --git a/js/twemoji/16x16/2709.png b/js/twemoji/16x16/2709.png new file mode 100644 index 00000000..cacc4e06 Binary files /dev/null and b/js/twemoji/16x16/2709.png differ diff --git a/js/twemoji/16x16/270a.png b/js/twemoji/16x16/270a.png new file mode 100644 index 00000000..23eb49a6 Binary files /dev/null and b/js/twemoji/16x16/270a.png differ diff --git a/js/twemoji/16x16/270b.png b/js/twemoji/16x16/270b.png new file mode 100644 index 00000000..9f2f105d Binary files /dev/null and b/js/twemoji/16x16/270b.png differ diff --git a/js/twemoji/16x16/270c.png b/js/twemoji/16x16/270c.png new file mode 100644 index 00000000..ad00002f Binary files /dev/null and b/js/twemoji/16x16/270c.png differ diff --git a/js/twemoji/16x16/270f.png b/js/twemoji/16x16/270f.png new file mode 100644 index 00000000..e208de7b Binary files /dev/null and b/js/twemoji/16x16/270f.png differ diff --git a/js/twemoji/16x16/2712.png b/js/twemoji/16x16/2712.png new file mode 100644 index 00000000..9c070e46 Binary files /dev/null and b/js/twemoji/16x16/2712.png differ diff --git a/js/twemoji/16x16/2714.png b/js/twemoji/16x16/2714.png new file mode 100644 index 00000000..5a249a51 Binary files /dev/null and b/js/twemoji/16x16/2714.png differ diff --git a/js/twemoji/16x16/2716.png b/js/twemoji/16x16/2716.png new file mode 100644 index 00000000..0d4b2fbf Binary files /dev/null and b/js/twemoji/16x16/2716.png differ diff --git a/js/twemoji/16x16/2728.png b/js/twemoji/16x16/2728.png new file mode 100644 index 00000000..78515449 Binary files /dev/null and b/js/twemoji/16x16/2728.png differ diff --git a/js/twemoji/16x16/2733.png b/js/twemoji/16x16/2733.png new file mode 100644 index 00000000..b05babdf Binary files /dev/null and b/js/twemoji/16x16/2733.png differ diff --git a/js/twemoji/16x16/2734.png b/js/twemoji/16x16/2734.png new file mode 100644 index 00000000..d92d62dd Binary files /dev/null and b/js/twemoji/16x16/2734.png differ diff --git a/js/twemoji/16x16/2744.png b/js/twemoji/16x16/2744.png new file mode 100644 index 00000000..3d186126 Binary files /dev/null and b/js/twemoji/16x16/2744.png differ diff --git a/js/twemoji/16x16/2747.png b/js/twemoji/16x16/2747.png new file mode 100644 index 00000000..5ed8df20 Binary files /dev/null and b/js/twemoji/16x16/2747.png differ diff --git a/js/twemoji/16x16/274c.png b/js/twemoji/16x16/274c.png new file mode 100644 index 00000000..bcb50745 Binary files /dev/null and b/js/twemoji/16x16/274c.png differ diff --git a/js/twemoji/16x16/274e.png b/js/twemoji/16x16/274e.png new file mode 100644 index 00000000..42871450 Binary files /dev/null and b/js/twemoji/16x16/274e.png differ diff --git a/js/twemoji/16x16/2753.png b/js/twemoji/16x16/2753.png new file mode 100644 index 00000000..a1a903e6 Binary files /dev/null and b/js/twemoji/16x16/2753.png differ diff --git a/js/twemoji/16x16/2754.png b/js/twemoji/16x16/2754.png new file mode 100644 index 00000000..5c9c1a0c Binary files /dev/null and b/js/twemoji/16x16/2754.png differ diff --git a/js/twemoji/16x16/2755.png b/js/twemoji/16x16/2755.png new file mode 100644 index 00000000..18464d86 Binary files /dev/null and b/js/twemoji/16x16/2755.png differ diff --git a/js/twemoji/16x16/2757.png b/js/twemoji/16x16/2757.png new file mode 100644 index 00000000..afe0abe1 Binary files /dev/null and b/js/twemoji/16x16/2757.png differ diff --git a/js/twemoji/16x16/2764.png b/js/twemoji/16x16/2764.png new file mode 100644 index 00000000..931fcc1d Binary files /dev/null and b/js/twemoji/16x16/2764.png differ diff --git a/js/twemoji/16x16/2795.png b/js/twemoji/16x16/2795.png new file mode 100644 index 00000000..607685ee Binary files /dev/null and b/js/twemoji/16x16/2795.png differ diff --git a/js/twemoji/16x16/2796.png b/js/twemoji/16x16/2796.png new file mode 100644 index 00000000..fbd9c14b Binary files /dev/null and b/js/twemoji/16x16/2796.png differ diff --git a/js/twemoji/16x16/2797.png b/js/twemoji/16x16/2797.png new file mode 100644 index 00000000..e07e53e8 Binary files /dev/null and b/js/twemoji/16x16/2797.png differ diff --git a/js/twemoji/16x16/27a1.png b/js/twemoji/16x16/27a1.png new file mode 100644 index 00000000..76615c8b Binary files /dev/null and b/js/twemoji/16x16/27a1.png differ diff --git a/js/twemoji/16x16/27b0.png b/js/twemoji/16x16/27b0.png new file mode 100644 index 00000000..2fbdfebf Binary files /dev/null and b/js/twemoji/16x16/27b0.png differ diff --git a/js/twemoji/16x16/27bf.png b/js/twemoji/16x16/27bf.png new file mode 100644 index 00000000..12d297d3 Binary files /dev/null and b/js/twemoji/16x16/27bf.png differ diff --git a/js/twemoji/16x16/2934.png b/js/twemoji/16x16/2934.png new file mode 100644 index 00000000..17e3e7b7 Binary files /dev/null and b/js/twemoji/16x16/2934.png differ diff --git a/js/twemoji/16x16/2935.png b/js/twemoji/16x16/2935.png new file mode 100644 index 00000000..ffa96e2d Binary files /dev/null and b/js/twemoji/16x16/2935.png differ diff --git a/js/twemoji/16x16/2b05.png b/js/twemoji/16x16/2b05.png new file mode 100644 index 00000000..a4b9ecac Binary files /dev/null and b/js/twemoji/16x16/2b05.png differ diff --git a/js/twemoji/16x16/2b06.png b/js/twemoji/16x16/2b06.png new file mode 100644 index 00000000..7becfb10 Binary files /dev/null and b/js/twemoji/16x16/2b06.png differ diff --git a/js/twemoji/16x16/2b07.png b/js/twemoji/16x16/2b07.png new file mode 100644 index 00000000..cc4cf6fc Binary files /dev/null and b/js/twemoji/16x16/2b07.png differ diff --git a/js/twemoji/16x16/2b1b.png b/js/twemoji/16x16/2b1b.png new file mode 100644 index 00000000..395aca1a Binary files /dev/null and b/js/twemoji/16x16/2b1b.png differ diff --git a/js/twemoji/16x16/2b1c.png b/js/twemoji/16x16/2b1c.png new file mode 100644 index 00000000..73870ddc Binary files /dev/null and b/js/twemoji/16x16/2b1c.png differ diff --git a/js/twemoji/16x16/2b50.png b/js/twemoji/16x16/2b50.png new file mode 100644 index 00000000..a1c2a184 Binary files /dev/null and b/js/twemoji/16x16/2b50.png differ diff --git a/js/twemoji/16x16/2b55.png b/js/twemoji/16x16/2b55.png new file mode 100644 index 00000000..562f2faa Binary files /dev/null and b/js/twemoji/16x16/2b55.png differ diff --git a/js/twemoji/16x16/30-20e3.png b/js/twemoji/16x16/30-20e3.png new file mode 100644 index 00000000..054b5e2a Binary files /dev/null and b/js/twemoji/16x16/30-20e3.png differ diff --git a/js/twemoji/16x16/3030.png b/js/twemoji/16x16/3030.png new file mode 100644 index 00000000..814ee6df Binary files /dev/null and b/js/twemoji/16x16/3030.png differ diff --git a/js/twemoji/16x16/303d.png b/js/twemoji/16x16/303d.png new file mode 100644 index 00000000..5ba4521b Binary files /dev/null and b/js/twemoji/16x16/303d.png differ diff --git a/js/twemoji/16x16/31-20e3.png b/js/twemoji/16x16/31-20e3.png new file mode 100644 index 00000000..84cd47b6 Binary files /dev/null and b/js/twemoji/16x16/31-20e3.png differ diff --git a/js/twemoji/16x16/32-20e3.png b/js/twemoji/16x16/32-20e3.png new file mode 100644 index 00000000..934ff4d4 Binary files /dev/null and b/js/twemoji/16x16/32-20e3.png differ diff --git a/js/twemoji/16x16/3297.png b/js/twemoji/16x16/3297.png new file mode 100644 index 00000000..eab2ee0d Binary files /dev/null and b/js/twemoji/16x16/3297.png differ diff --git a/js/twemoji/16x16/3299.png b/js/twemoji/16x16/3299.png new file mode 100644 index 00000000..7c855df2 Binary files /dev/null and b/js/twemoji/16x16/3299.png differ diff --git a/js/twemoji/16x16/33-20e3.png b/js/twemoji/16x16/33-20e3.png new file mode 100644 index 00000000..a70e9bae Binary files /dev/null and b/js/twemoji/16x16/33-20e3.png differ diff --git a/js/twemoji/16x16/34-20e3.png b/js/twemoji/16x16/34-20e3.png new file mode 100644 index 00000000..e92505fe Binary files /dev/null and b/js/twemoji/16x16/34-20e3.png differ diff --git a/js/twemoji/16x16/35-20e3.png b/js/twemoji/16x16/35-20e3.png new file mode 100644 index 00000000..c20e1f55 Binary files /dev/null and b/js/twemoji/16x16/35-20e3.png differ diff --git a/js/twemoji/16x16/36-20e3.png b/js/twemoji/16x16/36-20e3.png new file mode 100644 index 00000000..2da1b368 Binary files /dev/null and b/js/twemoji/16x16/36-20e3.png differ diff --git a/js/twemoji/16x16/37-20e3.png b/js/twemoji/16x16/37-20e3.png new file mode 100644 index 00000000..3d0a91b5 Binary files /dev/null and b/js/twemoji/16x16/37-20e3.png differ diff --git a/js/twemoji/16x16/38-20e3.png b/js/twemoji/16x16/38-20e3.png new file mode 100644 index 00000000..5e6315b3 Binary files /dev/null and b/js/twemoji/16x16/38-20e3.png differ diff --git a/js/twemoji/16x16/39-20e3.png b/js/twemoji/16x16/39-20e3.png new file mode 100644 index 00000000..3e025fdd Binary files /dev/null and b/js/twemoji/16x16/39-20e3.png differ diff --git a/js/twemoji/16x16/a9.png b/js/twemoji/16x16/a9.png new file mode 100644 index 00000000..7b1a1cbb Binary files /dev/null and b/js/twemoji/16x16/a9.png differ diff --git a/js/twemoji/16x16/ae.png b/js/twemoji/16x16/ae.png new file mode 100644 index 00000000..a54bb46c Binary files /dev/null and b/js/twemoji/16x16/ae.png differ diff --git a/js/twemoji/16x16/e50a.png b/js/twemoji/16x16/e50a.png new file mode 100644 index 00000000..0f2a4a71 Binary files /dev/null and b/js/twemoji/16x16/e50a.png differ diff --git a/js/twemoji/LICENSE b/js/twemoji/LICENSE new file mode 100644 index 00000000..52f19222 --- /dev/null +++ b/js/twemoji/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2014 Twitter, Inc and other contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/js/twemoji/LICENSE-GRAPHICS b/js/twemoji/LICENSE-GRAPHICS new file mode 100644 index 00000000..dc8853a7 --- /dev/null +++ b/js/twemoji/LICENSE-GRAPHICS @@ -0,0 +1,393 @@ +Attribution 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More_considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution 4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution 4.0 International Public License ("Public License"). To the +extent this Public License may be interpreted as a contract, You are +granted the Licensed Rights in consideration of Your acceptance of +these terms and conditions, and the Licensor grants You such rights in +consideration of benefits the Licensor receives from making the +Licensed Material available under these terms and conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + d. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + e. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + f. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + g. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + h. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + i. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + j. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + k. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + 4. If You Share Adapted Material You produce, the Adapter's + License You apply must not prevent recipients of the Adapted + Material from complying with this Public License. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material; and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public licenses. +Notwithstanding, Creative Commons may elect to apply one of its public +licenses to material it publishes and in those instances will be +considered the "Licensor." Except for the limited purpose of indicating +that material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the public +licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/js/twemoji/README.md b/js/twemoji/README.md new file mode 100644 index 00000000..3840800f --- /dev/null +++ b/js/twemoji/README.md @@ -0,0 +1,288 @@ +# Twitter Emoji (Twemoji) [![Build Status](https://travis-ci.org/twitter/twemoji.svg?branch=gh-pages)](https://travis-ci.org/twitter/twemoji) + +A simple library that provides standard Unicode [emoji](http://en.wikipedia.org/wiki/Emoji) support across all platforms. + +## CDN Support + +The folks over at [MaxCDN](https://www.maxcdn.com) graciously provide CDN support. + +Just use the following in the `` tag of your HTML document(s): + +```html + +``` + +## API + +Following all methods exposed through the `twemoji` namespace. + +### twemoji.parse( ... ) + +This is the main parsing utility and has 3 overloads per each parsing type. + +There are mainly two kind of parsing: [string parsing](https://github.com/twitter/twemoji#string-parsing) and [DOM parsing](https://github.com/twitter/twemoji#dom-parsing). + +Each of them accept a callback to generate each image source or an options object with parsing info. + +Here is a walk through all parsing possibilities: + +##### string parsing +Given a generic string, it will replace all emoji with an `` tag. + +While this can be used to inject via `innerHTML` emoji image tags, please note that this method does not sanitize the string or prevent malicious code from being executed. As an example, if the text contains a `'); + } + } + + //if (!(($post['op'] && $_POST['post'] == $config['button_newtopic']) || + //(!$post['op'] && $_POST['post'] == $config['button_reply']))) //error($config['error']['bot']); // Check the referrer if ($config['referer_match'] !== false && - (!isset($_SERVER['HTTP_REFERER']) || !preg_match($config['referer_match'], rawurldecode($_SERVER['HTTP_REFERER'])))) + (!isset($_SERVER['HTTP_REFERER']) || !preg_match($config['referer_match'], rawurldecode($_SERVER['HTTP_REFERER'])))) { error($config['error']['referer']); - + } + checkDNSBL(); // Check if banned @@ -378,11 +394,19 @@ elseif (isset($_POST['post'])) { $post['has_file'] = (!isset($post['embed']) && (($post['op'] && !isset($post['no_longer_require_an_image_for_op']) && $config['force_image_op']) || !empty($_FILES['file']['name']))); if (!($post['has_file'] || isset($post['embed'])) || (($post['op'] && $config['force_body_op']) || (!$post['op'] && $config['force_body']))) { - $stripped_whitespace = preg_replace('/[\s]/u', '', $post['body']); + // http://stackoverflow.com/a/4167053 + $stripped_whitespace = preg_replace('/^[\pZ\pC]+|[\pZ\pC]+$/u', '', $post['body']); if ($stripped_whitespace == '') { error($config['error']['tooshort_body']); } } + + if ($config['force_subject_op'] && $post['op']) { + $stripped_whitespace = preg_replace('/^[\pZ\pC]+|[\pZ\pC]+$/u', '', $post['subject']); + if ($stripped_whitespace == '') { + error(_('It is required to enter a subject when starting a new thread on this board.')); + } + } if (!$post['op']) { // Check if thread is locked @@ -507,6 +531,8 @@ elseif (isset($_POST['post'])) { error(sprintf($config['error']['toolong'], 'subject')); if (!$mod && mb_strlen($post['body']) > $config['max_body']) error($config['error']['toolong_body']); + if (mb_strlen($post['body']) < $config['min_body'] && $post['op']) + error(_(sprintf('OP must be at least %d chars on this board.', $config['min_body']))); if (mb_strlen($post['password']) > 20) error(sprintf($config['error']['toolong'], 'password')); @@ -572,7 +598,7 @@ elseif (isset($_POST['post'])) { } } - $post['tracked_cites'] = markup($post['body'], true); + $post['tracked_cites'] = markup($post['body'], true, $post['op']); @@ -836,8 +862,10 @@ elseif (isset($_POST['post'])) { bumpThread($post['thread']); } - buildThread($post['op'] ? $id : $post['thread']); - + $pid = $post['op'] ? $id : $post['thread']; + + buildThread($pid); + if ($config['try_smarter'] && $post['op']) $build_pages = range(1, $config['max_pages']); diff --git a/stylesheets/style.css b/stylesheets/style.css index bebd4813..0dc481a9 100644 --- a/stylesheets/style.css +++ b/stylesheets/style.css @@ -257,7 +257,7 @@ p.intro span.capcode,p.intro a.capcode,p.intro a.nametag { } p.intro a { - margin-left: 8px; + margin-left: 5px; } div.delete { @@ -819,7 +819,7 @@ pre { margin-top: 1em; } -.new-threads { +.new-threads, .board-settings { text-align: center; } @@ -858,7 +858,7 @@ pre { #options_div { width: 600px; - height: 300px; + height: 320px; } #alert_div { @@ -925,6 +925,7 @@ pre { right: 0px; text-align: left; font-size: 12px; + overflow-y: auto; } .options_tab h2 { @@ -939,10 +940,6 @@ pre { margin-top: 0px; } -.mentioned { - word-wrap: break-word; -} - .poster_id { cursor: pointer; } diff --git a/templates/8chan/boards-tags.html b/templates/8chan/boards-tags.html new file mode 100644 index 00000000..7ac4bcc3 --- /dev/null +++ b/templates/8chan/boards-tags.html @@ -0,0 +1,157 @@ + + +

{% trans %}There are currently {{n_boards}} boards + {{hidden_boards_total}} unindexed boards = {{t_boards}} total boards. Site-wide, {{total_posts_hour}} posts have been made in the last hour, with {{total_posts}} being made on all active boards since October 23, 2013.{% endtrans %}

+ +
+ Tags:  + {% for tag, pop in tags %} + {% if pop > 1000 %} + {{ tag }} + {% elseif pop > 500 %} + {{ tag }} + {% elseif pop > 100 %} + {{ tag }} + {% else %} + {{ tag }} + {% endif %} + {% endfor %} +
+ + + + + + + + + + + +{% for board in boards %} + + + + + + + + +{% endfor %} +
B{% trans %}Board{% endtrans %}{% trans %}Title{% endtrans %}{% trans %}PPH{% endtrans %}{% trans %}Total posts{% endtrans %}{% trans %}Active users{% endtrans %}{% trans %}Tags{% endtrans %}
{{ board.img|raw }} {% if board['sfw'] %}{% else %}{% endif %}
/{{board['uri']}}/{{lock|raw}}
{{ board['title'] }}
{{board['pph']}}{{board['max']}}{{board['uniq_ip']}}
{% for tag in board.tags %}{{ tag }} {% endfor %}
+

Page last updated: {{last_update}}

+

{{uptime_p}} without interruption (read)

+ + diff --git a/templates/8chan/create.html b/templates/8chan/create.html index f99fa727..91ed9262 100644 --- a/templates/8chan/create.html +++ b/templates/8chan/create.html @@ -1,3 +1,4 @@ +

Did you know? Many boards with popular names have been abandoned by their owners and can be claimed. See here for a full list.

diff --git a/templates/8chan/create_success.html b/templates/8chan/create_success.html index b129787c..25fe4177 100644 --- a/templates/8chan/create_success.html +++ b/templates/8chan/create_success.html @@ -1,5 +1,5 @@

{% trans %}Your new board is created and is live at{% endtrans %} /{{ uri }}/.

-

{% trans %}Make sure you don't forget your password, {{ password }}!{% endtrans %}

+

{% trans %}Make sure you don't forget your password, {{ password }}{% endtrans %}

{% trans %}You can manage your board at http://8chan.co/mod.php?/.{% endtrans %}

diff --git a/templates/8chan/index.html b/templates/8chan/index.html index dc120787..406c7fbe 100644 --- a/templates/8chan/index.html +++ b/templates/8chan/index.html @@ -235,7 +235,7 @@
{% trans %}Welcome to ∞chan, the infinitely expanding imageboard.{% endtrans %}
- {% trans %}Featured boards:{% endtrans %} + {% trans %}Top 15 boards:{% endtrans %}
@@ -295,7 +295,7 @@
-

{% trans %}On ∞chan, you can create your own imageboard for free with no experience or programming knowledge needed. As long as the admin logs in once per week and it gets one new post every 72 hours, the board will be hosted forever.{% endtrans %}

+

{% trans %}On ∞chan, you can create your own imageboard for free with no experience or programming knowledge needed.{% endtrans %}

{% trans %}Warning: Some boards on this site might contain content of an adult or offensive nature. Please cease use of this site if it is illegal for you to view such content. The boards on this site are made entirely by the users and do not represent the opinions of the administration of 8chan.co. In the interest of free speech, only content that directly violates the DMCA or other US laws is deleted.{% endtrans %}

{% trans %}Create your board{% endtrans %} diff --git a/templates/index.html b/templates/index.html index 5638fd65..e422b8bc 100644 --- a/templates/index.html +++ b/templates/index.html @@ -18,7 +18,7 @@ {{ boardlist.top }} {% if pm %}
You have an unread PM{% if pm.waiting > 0 %}, plus {{ pm.waiting }} more waiting{% endif %}.

{% endif %} - {% if config.url_banner %}{% endif %} + {% if config.url_banner %}{% endif %}

{{ board.url }} - {{ board.title|e }}

diff --git a/templates/main.js b/templates/main.js index 0156e23b..74cf40e6 100644 --- a/templates/main.js +++ b/templates/main.js @@ -1,5 +1,4 @@ {% raw %} - /* gettext-compatible _ function, example of usage: * * > // Loading pl_PL.json here (containing polish translation strings generated by tools/i18n_compile.php) @@ -188,7 +187,7 @@ function changeStyle(styleName, link) { {% endraw %} function init_stylechooser() { - var matches = document.URL.match(/\/(\w+)\/($|{{ config.dir.res|replace({'/': '\\/'}) }}{{ config.file_page|replace({'%d': '\\d+', '.': '\\.'}) }}|{{ config.file_index|replace({'.': '\\.'}) }}|{{ config.dir.res|replace({'/': '\\/'}) }}{{ config.file_page50|replace({'+': '\\+', '%d': '\\d+', '.': '\\.'}) }}|{{ config.file_page|replace({'%d': '\\d+', '.': '\\.'}) }}|{{ config.catalog_link|replace({'.': '\\.'}) }})/); + var matches = document.URL.match(/\/([0-9a-zA-Z\+$_\u0080-\uFFFF]{1,58})\/($|{{ config.dir.res|replace({'/': '\\/'}) }}{{ config.file_page|replace({'%d': '\\d+', '.': '\\.'}) }}|{{ config.file_index|replace({'.': '\\.'}) }}|{{ config.dir.res|replace({'/': '\\/'}) }}{{ config.file_page50|replace({'+': '\\+', '%d': '\\d+', '.': '\\.'}) }}|{{ config.file_page|replace({'%d': '\\d+', '.': '\\.'}) }}|{{ config.catalog_link|replace({'.': '\\.'}) }})/); var newElement = document.createElement('div'); newElement.className = 'styles'; @@ -255,9 +254,10 @@ function get_cookie(cookie_name) { } function highlightReply(id) { - if (typeof window.event != "undefined" && event.which == 2) { + if (typeof window.event != "undefined") { // don't highlight on middle click - return true; + if (event.which == 2) return true; + if (active_page == 'thread' && typeof window.event.preventDefault != "undefined") window.event.preventDefault(); } var divs = document.getElementsByTagName('div'); @@ -268,9 +268,18 @@ function highlightReply(id) { } if (id) { var post = document.getElementById('reply_'+id); - if (post) + if (post) { post.className += ' highlighted'; window.location.hash = id; + + // Better offset to keep in mind new hovering boardlist + var post_top = post.getBoundingClientRect().top; + var body_top = document.body.getBoundingClientRect().top; + var boardlist_height = document.getElementsByClassName('boardlist')[0].getBoundingClientRect().height; + var offset = (post_top - body_top) - boardlist_height; + + window.scrollTo(0, offset); + } } return true; } @@ -424,6 +433,9 @@ function ready() { var post_date = "{{ config.post_date }}"; var max_images = {{ config.max_images }}; +if (typeof active_page === "undefined") { + active_page = "page"; +} {% if config.google_analytics %}{% raw %} diff --git a/templates/mod/dashboard.html b/templates/mod/dashboard.html index fe6c6a3e..5481f49b 100644 --- a/templates/mod/dashboard.html +++ b/templates/mod/dashboard.html @@ -127,6 +127,7 @@ {% endif %} {% if mod|hasPermission(config.mod.manageboards) %} [{% trans 'edit' %}] + [{% trans 'settings' %}] {% endif %} {% endif %} diff --git a/templates/mod/edit_post_form.html b/templates/mod/edit_post_form.html index a2980d35..09dc3fcd 100644 --- a/templates/mod/edit_post_form.html +++ b/templates/mod/edit_post_form.html @@ -10,6 +10,14 @@ +
+ + + + @@ -44,6 +45,7 @@ +
+ {% trans %}Tripcode{% endtrans %} + + Remove? +
{% trans %}Email{% endtrans %} diff --git a/templates/mod/flags.html b/templates/mod/flags.html index 756b2486..d78f8e21 100644 --- a/templates/mod/flags.html +++ b/templates/mod/flags.html @@ -5,7 +5,7 @@

{% trans %}Upload flag{% endtrans %}

-

{% trans %}Flags must be a maximum of 48KB and 16 x 11 pixels.{% endtrans %}
{% trans %}A maximum of 256 custom flags per board is enforced.{% endtrans %}

+

{% trans %}Flags must be a maximum of 48KB and 11-20 x 11-16 pixels.{% endtrans %}
{% trans %}A maximum of 256 custom flags per board is enforced.{% endtrans %}

{% trans %}Important: Flags must be accompanied by a description of the flag that will be shown to the users to your board. The description must not exceed 255 characters. To use flags, you also must have "Enable user flags" enabled on your board settings page as well as having flags uploaded on this page.{% endtrans %}

diff --git a/templates/mod/settings.html b/templates/mod/settings.html index 487f82d8..9a75bf01 100644 --- a/templates/mod/settings.html +++ b/templates/mod/settings.html @@ -29,6 +29,7 @@
{% trans %}Forced anonymous{% endtrans %}
{% trans %}YouTube/Voocaroo embedding{% endtrans %}
{% trans %}Require image for OP{% endtrans %}
{% trans %}Require subject for OP{% endtrans %}
{% trans %}Disable images{% endtrans %}
{% trans %}Poster ID's{% endtrans %}
{% trans %}Display SAGE! after saged posts{% endtrans %}
{% trans %}Enable dice rolling{% endtrans %}
{% trans %}Don't allow users to repost images{% endtrans %}
{% trans %}Allow a poster to delete his own posts{% endtrans %}
{% trans %}Enable CAPTCHA{% endtrans %}
This is not ReCAPTCHA, it is custom to 8chan
{% trans %}Language{% endtrans %}
{% trans %}To contribute translations, register at Transifex{% endtrans %}
diff --git a/templates/post/image.html b/templates/post/image.html index 9b5449ad..3dd6b260 100644 --- a/templates/post/image.html +++ b/templates/post/image.html @@ -1,16 +1,16 @@ - {% if post.thumb|extension == 'webm' %} + {% if post.thumb|extension == 'webm' or post.thumb|extension == 'mp4' %} @@ -167,3 +178,15 @@ + +

+{% if not config.disable_images %} +Allowed file types: {{ config.allowed_ext|join(', ') }}{% if config.allowed_ext_files %}, {{ config.allowed_ext_files|join(', ') }}{% endif %}
+Max filesize is {{ config.max_filesize|filesize }}.
+Max image dimensions are {{ config.max_height }} x {{ config.max_width }}.
+You may upload {{ config.max_images }} per post.
+{% endif %} +{% if config.allow_roll %} +You may roll dice on this board, type "dice XdY+Z" in the email field where X is number of dice, Y is max roll and Z is modifier.
+{% endif %} +

diff --git a/templates/thread.html b/templates/thread.html index 0a78f274..0785f7fe 100644 --- a/templates/thread.html +++ b/templates/thread.html @@ -8,12 +8,12 @@ {% include 'header.html' %} - {{ board.url }} - {% if config.thread_subject_in_title and thread.subject %}{{ thread.subject }}{% else %}{{ board.title|e }}{% endif %} + {{ board.url }} - {% if config.thread_subject_in_title and thread.subject %}{{ thread.subject }}{% else %}{{ thread.body_nomarkup[:256]|e }}{% endif %} {{ boardlist.top }} {% if pm %}
You have an unread PM{% if pm.waiting > 0 %}, plus {{ pm.waiting }} more waiting{% endif %}.

{% endif %} - {% if config.url_banner %}{% endif %} + {% if config.url_banner %}{% endif %}

{{ board.url }} - {{ board.title|e }}

{% trans %}Default poster name{% endtrans %}
{% trans %}Flag{% endtrans %}