Reddit Downloader

Download your saved posts or directly posts from your feed with support for Direct links (png, jpg, gif, mp4...), (Gypcat kinda), Redgify, Imgur (Only when supplied with an API key)

当前为 2020-08-23 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Reddit Downloader
  3. // @namespace https://github.com/felixire/Reddit-Downloader
  4. // @version 0.1.2
  5. // @description Download your saved posts or directly posts from your feed with support for Direct links (png, jpg, gif, mp4...), (Gypcat kinda), Redgify, Imgur (Only when supplied with an API key)
  6. // @author felixire
  7. // @match https://www.reddit.com/*
  8. // @require https://greasyfork.org/scripts/28536-gm-config/code/GM_config.js?version=184529
  9. // @grant GM_download
  10. // @grant GM_setValue
  11. // @grant GM_getValue
  12. // @grant GM_registerMenuCommand
  13. // ==/UserScript==
  14.  
  15. // @match https://www.reddit.com/user/*
  16.  
  17. const DEBUG = false;
  18. //const _CreateSubredditFolders = true;
  19. //const _OnlyCertainSubreddits = true;
  20. //const _SubredditFilter = []
  21. //const _RedditUsername = GM_getValue('RedditName', null);
  22.  
  23. //let _ImgurClientID = GM_getValue('ImgurClientID', null);
  24. //let _DownloadLocation = GM_getValue('DownloadLocation', 'Reddit/Stuff/Stuff/');
  25. let _LastDownloadedID = GM_getValue('LastDownloaded', '');
  26.  
  27. let _IsOnUserPage = window.location.href.includes('saved');
  28.  
  29. //#region Helpers
  30. function wait(ms){
  31. return new Promise(res => setTimeout(res, ms));
  32. }
  33.  
  34. function randomName(length=16){
  35. let chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  36. let name = '';
  37. for (let index = 0; index < length; index++) {
  38. let ind = Math.floor(Math.random() * chars.length);
  39. name += chars.charAt(ind);
  40. }
  41. return name;
  42. }
  43.  
  44. function waitForElements(selectors, timeout = 1000) {
  45. return new Promise(async (res, rej) => {
  46. let time = 0;
  47. if (!Array.isArray(selectors))
  48. selectors = [selectors];
  49.  
  50. let eles = [];
  51.  
  52. selectors.forEach(async (sel, i) => {
  53. let ele = document.querySelector(sel);
  54. while (ele == null || ele == undefined) {
  55. if (time >= timeout) {
  56. utils.error("Timed out while waiting for: ", sel);
  57. rej();
  58. return;
  59. }
  60.  
  61. time += 10;
  62. await wait(10);
  63. ele = document.querySelector(sel);
  64. }
  65. eles.push(ele);
  66. if (i == (selectors.length - 1))
  67. res(eles);
  68. });
  69. })
  70. }
  71. //#endregion
  72.  
  73. //#region Location listener and Post Download button addener
  74. (async () => {
  75. let isAdded = false;
  76. while(true){
  77. await wait(50);
  78. _IsOnUserPage = window.location.href.includes('reddit.com/user');
  79.  
  80. if(!_IsOnUserPage){
  81. isAdded = false;
  82. if(window.RedditDownloader != undefined) await window.RedditDownloader.addPostDownloadButton().catch(() => {});
  83. }
  84. if(!isAdded && _IsOnUserPage){
  85. if(window.RedditDownloader != undefined){
  86. await wait(50);
  87. isAdded = window.RedditDownloader.addSavedDownloadButton();
  88. }
  89. }
  90. }
  91. })();
  92. //#endregion
  93.  
  94. //#region Supported Downloaders
  95. class DownloadSite{
  96. constructor(){
  97.  
  98. }
  99.  
  100. checkSupport(href){
  101. throw new Error('NOT IMPLEMENTD!');
  102. }
  103.  
  104. async downloadImages(href, folder=''){
  105. return new Promise(async res => {
  106. href = this._removeParams(href);
  107. let links = await this.getDownloadLinks(href);
  108. if(!Array.isArray(links)) links = [links];
  109. if(links.length > 1)
  110. await this._downloadBulk(links, folder, `/${randomName()}/`);
  111. else
  112. this._download(links[0], folder);
  113.  
  114. res();
  115. });
  116. }
  117.  
  118. /**
  119. * @return {Promise<Array<string>>}
  120. */
  121. getDownloadLinks(href){
  122. throw new Error('NOT IMPLEMENTD!');
  123. }
  124.  
  125. _getExtension(href){
  126. return href.replace(/.*\./, '');
  127. }
  128.  
  129. _removeParams(href){
  130. return href.replace(/\?.*/gim, '');
  131. }
  132.  
  133. async _downloadBulk(links, folder='', locationAppend=''){
  134. return new Promise(async res => {
  135. for (let index = 0; index < links.length; index++) {
  136. const url = links[index];
  137. const name = `[${index}] ${randomName()}.${this._getExtension(url)}`;
  138. this._download(url, folder, name, locationAppend);
  139. await wait(100);
  140. }
  141.  
  142. res();
  143. })
  144. }
  145.  
  146. _download(url, folder='', name=randomName(), locationAppend=''){
  147. let details = {
  148. url: url,
  149. name: GM_config.get('download_location') + ((folder != '' && folder != null) ? `/${folder}/` : '') + locationAppend + name + '.' + this._getExtension(url),
  150. saveAs: false
  151. }
  152.  
  153. GM_download(details);
  154. }
  155. }
  156.  
  157. class DirectDownload extends DownloadSite{
  158. constructor(){
  159. super();
  160. this.supportedExtensions = ['png', 'jpg', 'jpeg', 'gif', 'gifv', 'mp4', 'mp3'];
  161. }
  162.  
  163. checkSupport(href){
  164. return this.supportedExtensions.includes(this._getExtension(href));
  165. }
  166.  
  167. getDownloadLinks(href){
  168. if(href.endsWith('.gifv')) href = href.replace('gifv', 'mp4');
  169. return [href];
  170. }
  171. }
  172.  
  173. class Imgur extends DownloadSite{
  174. constructor(){
  175. super();
  176.  
  177. this._ApiEndpoint = 'https://api.imgur.com/3/';
  178. }
  179.  
  180. checkSupport(href){
  181. return (href.includes('imgur.com/') && !href.includes('i.imgur.com/'));
  182. }
  183.  
  184. getDownloadLinks(href){
  185. let id = href.replace(/.*\//igm, '');
  186. let isAlbum = href.replace(/.*imgur.com\//igm, '').startsWith('a');
  187. return isAlbum ? this.getAlbumLinks(id) : this.getGalleryLinks(id);
  188. }
  189.  
  190. getGalleryLinks(galleryID){
  191. return new Promise((res, rej) => {
  192. if(!GM_config.get('imgur_client_id')){
  193. rej('NO CLIENT ID!');
  194. return;
  195. }
  196. fetch(this._ApiEndpoint + `gallery/${galleryID}/images?client_id=${GM_config.get('imgur_client_id')}`)
  197. .then(body => body.text())
  198. .then(text => {
  199. let data = JSON.parse(text);
  200. if(data.data.images == undefined){
  201. res([]);
  202. return;
  203. }
  204. let links = data.data.images.reduce((a, c) => {
  205. console.log(a, c);
  206. a.push(c.link);
  207. return a;
  208. }, []);
  209.  
  210.  
  211. console.log(links)
  212. res(links);
  213. });
  214. })
  215. }
  216.  
  217. getAlbumLinks(albumID){
  218. return new Promise((res, rej) => {
  219. if(!GM_config.get('imgur_client_id')){
  220. rej('NO CLIENT ID!');
  221. return;
  222. }
  223. fetch(this._ApiEndpoint + `album/${albumID}/images?client_id=${GM_config.get('imgur_client_id')}`)
  224. .then(body => body.text())
  225. .then(text => {
  226. let data = JSON.parse(text);
  227. let links = data.data.reduce((a, c) => {
  228. a.push(c.link);
  229. return a;
  230. }, []);
  231.  
  232. res(links);
  233. });
  234. })
  235. }
  236. }
  237.  
  238. class Gfycat extends DownloadSite{
  239. constructor(){
  240. super();
  241. }
  242.  
  243. checkSupport(href){
  244. return (href.includes('//gfycat.com/') || href.includes('www.gfycat.com/'));
  245. }
  246.  
  247. getDownloadLinks(href){
  248. //media => oembed => thumbnail_url
  249. //https://thumbs.gfycat.com/<ID>-size_restricted.gif
  250.  
  251. return href.replace('thumbs', 'giant').replace('-size_restricted.gif', '.mp4');
  252. }
  253. }
  254.  
  255. class Redgifs extends DownloadSite{
  256. constructor(){
  257. super();
  258.  
  259. this.gypcatList = [
  260. 'aardvark',
  261. 'aardwolf',
  262. 'abalone',
  263. 'abyssiniancat',
  264. 'abyssiniangroundhornbill',
  265. 'acaciarat',
  266. 'achillestang',
  267. 'acornbarnacle',
  268. 'acornweevil',
  269. 'acornwoodpecker',
  270. 'acouchi',
  271. 'adamsstaghornedbeetle',
  272. 'addax',
  273. 'adder',
  274. 'adeliepenguin',
  275. 'admiralbutterfly',
  276. 'adouri',
  277. 'aegeancat',
  278. 'affenpinscher',
  279. 'afghanhound',
  280. 'africanaugurbuzzard',
  281. 'africanbushviper',
  282. 'africancivet',
  283. 'africanclawedfrog',
  284. 'africanelephant',
  285. 'africanfisheagle',
  286. 'africangoldencat',
  287. 'africangroundhornbill',
  288. 'africanharrierhawk',
  289. 'africanhornbill',
  290. 'africanjacana',
  291. 'africanmolesnake',
  292. 'africanparadiseflycatcher',
  293. 'africanpiedkingfisher',
  294. 'africanporcupine',
  295. 'africanrockpython',
  296. 'africanwildcat',
  297. 'africanwilddog',
  298. 'agama',
  299. 'agouti',
  300. 'aidi',
  301. 'airedale',
  302. 'airedaleterrier',
  303. 'akitainu',
  304. 'alabamamapturtle',
  305. 'alaskajingle',
  306. 'alaskanhusky',
  307. 'alaskankleekai',
  308. 'alaskanmalamute',
  309. 'albacoretuna',
  310. 'albatross',
  311. 'albertosaurus',
  312. 'albino',
  313. 'aldabratortoise',
  314. 'allensbigearedbat',
  315. 'alleycat',
  316. 'alligator',
  317. 'alligatorgar',
  318. 'alligatorsnappingturtle',
  319. 'allosaurus',
  320. 'alpaca',
  321. 'alpinegoat',
  322. 'alpineroadguidetigerbeetle',
  323. 'altiplanochinchillamouse',
  324. 'amazondolphin',
  325. 'amazonparrot',
  326. 'amazontreeboa',
  327. 'amberpenshell',
  328. 'ambushbug',
  329. 'americanalligator',
  330. 'americanavocet',
  331. 'americanbadger',
  332. 'americanbittern',
  333. 'americanblackvulture',
  334. 'americanbobtail',
  335. 'americanbulldog',
  336. 'americancicada',
  337. 'americancrayfish',
  338. 'americancreamdraft',
  339. 'americancrocodile',
  340. 'americancrow',
  341. 'americancurl',
  342. 'americangoldfinch',
  343. 'americanindianhorse',
  344. 'americankestrel',
  345. 'americanlobster',
  346. 'americanmarten',
  347. 'americanpainthorse',
  348. 'americanquarterhorse',
  349. 'americanratsnake',
  350. 'americanredsquirrel',
  351. 'americanriverotter',
  352. 'americanrobin',
  353. 'americansaddlebred',
  354. 'americanshorthair',
  355. 'americantoad',
  356. 'americanwarmblood',
  357. 'americanwigeon',
  358. 'americanwirehair',
  359. 'amethystgemclam',
  360. 'amethystinepython',
  361. 'amethystsunbird',
  362. 'ammonite',
  363. 'amoeba',
  364. 'amphibian',
  365. 'amphiuma',
  366. 'amurminnow',
  367. 'amurratsnake',
  368. 'amurstarfish',
  369. 'anaconda',
  370. 'anchovy',
  371. 'andalusianhorse',
  372. 'andeancat',
  373. 'andeancockoftherock',
  374. 'andeancondor',
  375. 'anemone',
  376. 'anemonecrab',
  377. 'anemoneshrimp',
  378. 'angelfish',
  379. 'angelwingmussel',
  380. 'anglerfish',
  381. 'angora',
  382. 'angwantibo',
  383. 'anhinga',
  384. 'ankole',
  385. 'ankolewatusi',
  386. 'annashummingbird',
  387. 'annelid',
  388. 'annelida',
  389. 'anole',
  390. 'anophelesmosquito',
  391. 'ant',
  392. 'antarcticfurseal',
  393. 'antarcticgiantpetrel',
  394. 'antbear',
  395. 'anteater',
  396. 'antelope',
  397. 'antelopegroundsquirrel',
  398. 'antipodesgreenparakeet',
  399. 'antlion',
  400. 'anura',
  401. 'aoudad',
  402. 'apatosaur',
  403. 'ape',
  404. 'aphid',
  405. 'apisdorsatalaboriosa',
  406. 'aplomadofalcon',
  407. 'appaloosa',
  408. 'aquaticleech',
  409. 'arabianhorse',
  410. 'arabianoryx',
  411. 'arabianwildcat',
  412. 'aracari',
  413. 'arachnid',
  414. 'arawana',
  415. 'archaeocete',
  416. 'archaeopteryx',
  417. 'archerfish',
  418. 'arcticduck',
  419. 'arcticfox',
  420. 'arctichare',
  421. 'arcticseal',
  422. 'arcticwolf',
  423. 'argali',
  424. 'argentinehornedfrog',
  425. 'argentineruddyduck',
  426. 'argusfish',
  427. 'arieltoucan',
  428. 'arizonaalligatorlizard',
  429. 'arkshell',
  430. 'armadillo',
  431. 'armedcrab',
  432. 'armednylonshrimp',
  433. 'armyant',
  434. 'armyworm',
  435. 'arrowana',
  436. 'arrowcrab',
  437. 'arrowworm',
  438. 'arthropods',
  439. 'aruanas',
  440. 'asianconstablebutterfly',
  441. 'asiandamselfly',
  442. 'asianelephant',
  443. 'asianlion',
  444. 'asianpiedstarling',
  445. 'asianporcupine',
  446. 'asiansmallclawedotter',
  447. 'asiantrumpetfish',
  448. 'asianwaterbuffalo',
  449. 'asiaticgreaterfreshwaterclam',
  450. 'asiaticlesserfreshwaterclam',
  451. 'asiaticmouflon',
  452. 'asiaticwildass',
  453. 'asp',
  454. 'ass',
  455. 'assassinbug',
  456. 'astarte',
  457. 'astrangiacoral',
  458. 'atlanticblackgoby',
  459. 'atlanticbluetang',
  460. 'atlanticridleyturtle',
  461. 'atlanticsharpnosepuffer',
  462. 'atlanticspadefish',
  463. 'atlasmoth',
  464. 'attwatersprairiechicken',
  465. 'auk',
  466. 'auklet',
  467. 'aurochs',
  468. 'australiancattledog',
  469. 'australiancurlew',
  470. 'australianfreshwatercrocodile',
  471. 'australianfurseal',
  472. 'australiankelpie',
  473. 'australiankestrel',
  474. 'australianshelduck',
  475. 'australiansilkyterrier',
  476. 'austrianpinscher',
  477. 'avians',
  478. 'avocet',
  479. 'axisdeer',
  480. 'axolotl',
  481. 'ayeaye',
  482. 'aztecant',
  483. 'azurevase',
  484. 'azurevasesponge',
  485. 'azurewingedmagpie',
  486. 'babirusa',
  487. 'baboon',
  488. 'backswimmer',
  489. 'bactrian',
  490. 'badger',
  491. 'bagworm',
  492. 'baiji',
  493. 'baldeagle',
  494. 'baleenwhale',
  495. 'balloonfish',
  496. 'ballpython',
  497. 'bandicoot',
  498. 'bangeltiger',
  499. 'bantamrooster',
  500. 'banteng',
  501. 'barasinga',
  502. 'barasingha',
  503. 'barb',
  504. 'barbet',
  505. 'barebirdbat',
  506. 'barnacle',
  507. 'barnowl',
  508. 'barnswallow',
  509. 'barracuda',
  510. 'basenji',
  511. 'basil',
  512. 'basilisk',
  513. 'bass',
  514. 'bassethound',
  515. 'bat',
  516. 'bats',
  517. 'beagle',
  518. 'bear',
  519. 'beardedcollie',
  520. 'beardeddragon',
  521. 'beauceron',
  522. 'beaver',
  523. 'bedbug',
  524. 'bedlingtonterrier',
  525. 'bee',
  526. 'beetle',
  527. 'bellfrog',
  528. 'bellsnake',
  529. 'belugawhale',
  530. 'bengaltiger',
  531. 'bergerpicard',
  532. 'bernesemountaindog',
  533. 'betafish',
  534. 'bettong',
  535. 'bichonfrise',
  536. 'bighorn',
  537. 'bighornedsheep',
  538. 'bighornsheep',
  539. 'bigmouthbass',
  540. 'bilby',
  541. 'billygoat',
  542. 'binturong',
  543. 'bird',
  544. 'birdofparadise',
  545. 'bison',
  546. 'bittern',
  547. 'blackandtancoonhound',
  548. 'blackbear',
  549. 'blackbird',
  550. 'blackbuck',
  551. 'blackcrappie',
  552. 'blackfish',
  553. 'blackfly',
  554. 'blackfootedferret',
  555. 'blacklab',
  556. 'blacklemur',
  557. 'blackmamba',
  558. 'blacknorwegianelkhound',
  559. 'blackpanther',
  560. 'blackrhino',
  561. 'blackrussianterrier',
  562. 'blackwidowspider',
  563. 'blesbok',
  564. 'blobfish',
  565. 'blowfish',
  566. 'blueandgoldmackaw',
  567. 'bluebird',
  568. 'bluebottle',
  569. 'bluebottlejellyfish',
  570. 'bluebreastedkookaburra',
  571. 'bluefintuna',
  572. 'bluefish',
  573. 'bluegill',
  574. 'bluejay',
  575. 'bluemorphobutterfly',
  576. 'blueshark',
  577. 'bluet',
  578. 'bluetickcoonhound',
  579. 'bluetonguelizard',
  580. 'bluewhale',
  581. 'boa',
  582. 'boaconstrictor',
  583. 'boar',
  584. 'bobcat',
  585. 'bobolink',
  586. 'bobwhite',
  587. 'boilweevil',
  588. 'bongo',
  589. 'bonobo',
  590. 'booby',
  591. 'bordercollie',
  592. 'borderterrier',
  593. 'borer',
  594. 'borzoi',
  595. 'boto',
  596. 'boubou',
  597. 'boutu',
  598. 'bovine',
  599. 'brahmanbull',
  600. 'brahmancow',
  601. 'brant',
  602. 'bream',
  603. 'brocketdeer',
  604. 'bronco',
  605. 'brontosaurus',
  606. 'brownbear',
  607. 'brownbutterfly',
  608. 'bubblefish',
  609. 'buck',
  610. 'buckeyebutterfly',
  611. 'budgie',
  612. 'bufeo',
  613. 'buffalo',
  614. 'bufflehead',
  615. 'bug',
  616. 'bull',
  617. 'bullfrog',
  618. 'bullmastiff',
  619. 'bumblebee',
  620. 'bunny',
  621. 'bunting',
  622. 'burro',
  623. 'bushbaby',
  624. 'bushsqueaker',
  625. 'bustard',
  626. 'butterfly',
  627. 'buzzard',
  628. 'caecilian',
  629. 'caiman',
  630. 'caimanlizard',
  631. 'calf',
  632. 'camel',
  633. 'canadagoose',
  634. 'canary',
  635. 'canine',
  636. 'canvasback',
  637. 'capeghostfrog',
  638. 'capybara',
  639. 'caracal',
  640. 'cardinal',
  641. 'caribou',
  642. 'carp',
  643. 'carpenterant',
  644. 'cassowary',
  645. 'cat',
  646. 'catbird',
  647. 'caterpillar',
  648. 'catfish',
  649. 'cats',
  650. 'cattle',
  651. 'caudata',
  652. 'cavy',
  653. 'centipede',
  654. 'cero',
  655. 'chafer',
  656. 'chameleon',
  657. 'chamois',
  658. 'chanticleer',
  659. 'cheetah',
  660. 'chevrotain',
  661. 'chick',
  662. 'chickadee',
  663. 'chicken',
  664. 'chihuahua',
  665. 'chimneyswift',
  666. 'chimpanzee',
  667. 'chinchilla',
  668. 'chinesecrocodilelizard',
  669. 'chipmunk',
  670. 'chital',
  671. 'chrysalis',
  672. 'chrysomelid',
  673. 'chuckwalla',
  674. 'chupacabra',
  675. 'cicada',
  676. 'cirriped',
  677. 'civet',
  678. 'clam',
  679. 'cleanerwrasse',
  680. 'clingfish',
  681. 'clownanemonefish',
  682. 'clumber',
  683. 'coati',
  684. 'cob',
  685. 'cobra',
  686. 'cock',
  687. 'cockatiel',
  688. 'cockatoo',
  689. 'cockerspaniel',
  690. 'cockroach',
  691. 'cod',
  692. 'coelacanth',
  693. 'collardlizard',
  694. 'collie',
  695. 'colt',
  696. 'comet',
  697. 'commabutterfly',
  698. 'commongonolek',
  699. 'conch',
  700. 'condor',
  701. 'coney',
  702. 'conure',
  703. 'cony',
  704. 'coot',
  705. 'cooter',
  706. 'copepod',
  707. 'copperbutterfly',
  708. 'copperhead',
  709. 'coqui',
  710. 'coral',
  711. 'cormorant',
  712. 'cornsnake',
  713. 'corydorascatfish',
  714. 'cottonmouth',
  715. 'cottontail',
  716. 'cougar',
  717. 'cow',
  718. 'cowbird',
  719. 'cowrie',
  720. 'coyote',
  721. 'coypu',
  722. 'crab',
  723. 'crane',
  724. 'cranefly',
  725. 'crayfish',
  726. 'creature',
  727. 'cricket',
  728. 'crocodile',
  729. 'crocodileskink',
  730. 'crossbill',
  731. 'crow',
  732. 'crownofthornsstarfish',
  733. 'crustacean',
  734. 'cub',
  735. 'cuckoo',
  736. 'cur',
  737. 'curassow',
  738. 'curlew',
  739. 'cuscus',
  740. 'cusimanse',
  741. 'cuttlefish',
  742. 'cutworm',
  743. 'cygnet',
  744. 'dachshund',
  745. 'daddylonglegs',
  746. 'dairycow',
  747. 'dalmatian',
  748. 'damselfly',
  749. 'danishswedishfarmdog',
  750. 'darklingbeetle',
  751. 'dartfrog',
  752. 'darwinsfox',
  753. 'dassie',
  754. 'dassierat',
  755. 'davidstiger',
  756. 'deer',
  757. 'deermouse',
  758. 'degu',
  759. 'degus',
  760. 'deinonychus',
  761. 'desertpupfish',
  762. 'devilfish',
  763. 'deviltasmanian',
  764. 'diamondbackrattlesnake',
  765. 'dikdik',
  766. 'dikkops',
  767. 'dingo',
  768. 'dinosaur',
  769. 'diplodocus',
  770. 'dipper',
  771. 'discus',
  772. 'dobermanpinscher',
  773. 'doctorfish',
  774. 'dodo',
  775. 'dodobird',
  776. 'doe',
  777. 'dog',
  778. 'dogfish',
  779. 'dogwoodclubgall',
  780. 'dogwoodtwigborer',
  781. 'dolphin',
  782. 'donkey',
  783. 'dorado',
  784. 'dore',
  785. 'dorking',
  786. 'dormouse',
  787. 'dotterel',
  788. 'douglasfirbarkbeetle',
  789. 'dove',
  790. 'dowitcher',
  791. 'drafthorse',
  792. 'dragon',
  793. 'dragonfly',
  794. 'drake',
  795. 'drever',
  796. 'dromaeosaur',
  797. 'dromedary',
  798. 'drongo',
  799. 'duck',
  800. 'duckbillcat',
  801. 'duckbillplatypus',
  802. 'duckling',
  803. 'dugong',
  804. 'duiker',
  805. 'dungbeetle',
  806. 'dungenesscrab',
  807. 'dunlin',
  808. 'dunnart',
  809. 'dutchshepherddog',
  810. 'dutchsmoushond',
  811. 'dwarfmongoose',
  812. 'dwarfrabbit',
  813. 'eagle',
  814. 'earthworm',
  815. 'earwig',
  816. 'easternglasslizard',
  817. 'easternnewt',
  818. 'easteuropeanshepherd',
  819. 'eastrussiancoursinghounds',
  820. 'eastsiberianlaika',
  821. 'echidna',
  822. 'eel',
  823. 'eelelephant',
  824. 'eeve',
  825. 'eft',
  826. 'egg',
  827. 'egret',
  828. 'eider',
  829. 'eidolonhelvum',
  830. 'ekaltadeta',
  831. 'eland',
  832. 'electriceel',
  833. 'elephant',
  834. 'elephantbeetle',
  835. 'elephantseal',
  836. 'elk',
  837. 'elkhound',
  838. 'elver',
  839. 'emeraldtreeskink',
  840. 'emperorpenguin',
  841. 'emperorshrimp',
  842. 'emu',
  843. 'englishpointer',
  844. 'englishsetter',
  845. 'equestrian',
  846. 'equine',
  847. 'erin',
  848. 'ermine',
  849. 'erne',
  850. 'eskimodog',
  851. 'esok',
  852. 'estuarinecrocodile',
  853. 'ethiopianwolf',
  854. 'europeanfiresalamander',
  855. 'europeanpolecat',
  856. 'ewe',
  857. 'eyas',
  858. 'eyelashpitviper',
  859. 'eyra',
  860. 'fairybluebird',
  861. 'fairyfly',
  862. 'falcon',
  863. 'fallowdeer',
  864. 'fantail',
  865. 'fanworms',
  866. 'fattaileddunnart',
  867. 'fawn',
  868. 'feline',
  869. 'fennecfox',
  870. 'ferret',
  871. 'fiddlercrab',
  872. 'fieldmouse',
  873. 'fieldspaniel',
  874. 'finch',
  875. 'finnishspitz',
  876. 'finwhale',
  877. 'fireant',
  878. 'firebelliedtoad',
  879. 'firecrest',
  880. 'firefly',
  881. 'fish',
  882. 'fishingcat',
  883. 'flamingo',
  884. 'flatcoatretriever',
  885. 'flatfish',
  886. 'flea',
  887. 'flee',
  888. 'flicker',
  889. 'flickertailsquirrel',
  890. 'flies',
  891. 'flounder',
  892. 'fluke',
  893. 'fly',
  894. 'flycatcher',
  895. 'flyingfish',
  896. 'flyingfox',
  897. 'flyinglemur',
  898. 'flyingsquirrel',
  899. 'foal',
  900. 'fossa',
  901. 'fowl',
  902. 'fox',
  903. 'foxhound',
  904. 'foxterrier',
  905. 'frenchbulldog',
  906. 'freshwatereel',
  907. 'frigatebird',
  908. 'frilledlizard',
  909. 'frillneckedlizard',
  910. 'fritillarybutterfly',
  911. 'frog',
  912. 'frogmouth',
  913. 'fruitbat',
  914. 'fruitfly',
  915. 'fugu',
  916. 'fulmar',
  917. 'funnelweaverspider',
  918. 'furseal',
  919. 'gadwall',
  920. 'galago',
  921. 'galah',
  922. 'galapagosalbatross',
  923. 'galapagosdove',
  924. 'galapagoshawk',
  925. 'galapagosmockingbird',
  926. 'galapagospenguin',
  927. 'galapagossealion',
  928. 'galapagostortoise',
  929. 'gallinule',
  930. 'gallowaycow',
  931. 'gander',
  932. 'gangesdolphin',
  933. 'gannet',
  934. 'gar',
  935. 'gardensnake',
  936. 'garpike',
  937. 'gartersnake',
  938. 'gaur',
  939. 'gavial',
  940. 'gazelle',
  941. 'gecko',
  942. 'geese',
  943. 'gelada',
  944. 'gelding',
  945. 'gemsbok',
  946. 'gemsbuck',
  947. 'genet',
  948. 'gentoopenguin',
  949. 'gerbil',
  950. 'gerenuk',
  951. 'germanpinscher',
  952. 'germanshepherd',
  953. 'germanshorthairedpointer',
  954. 'germanspaniel',
  955. 'germanspitz',
  956. 'germanwirehairedpointer',
  957. 'gharial',
  958. 'ghostshrimp',
  959. 'giantschnauzer',
  960. 'gibbon',
  961. 'gilamonster',
  962. 'giraffe',
  963. 'glassfrog',
  964. 'globefish',
  965. 'glowworm',
  966. 'gnat',
  967. 'gnatcatcher',
  968. 'gnu',
  969. 'goa',
  970. 'goat',
  971. 'godwit',
  972. 'goitered',
  973. 'goldeneye',
  974. 'goldenmantledgroundsquirrel',
  975. 'goldenretriever',
  976. 'goldfinch',
  977. 'goldfish',
  978. 'gonolek',
  979. 'goose',
  980. 'goosefish',
  981. 'gopher',
  982. 'goral',
  983. 'gordonsetter',
  984. 'gorilla',
  985. 'goshawk',
  986. 'gosling',
  987. 'gossamerwingedbutterfly',
  988. 'gourami',
  989. 'grackle',
  990. 'grasshopper',
  991. 'grassspider',
  992. 'grayfox',
  993. 'grayling',
  994. 'grayreefshark',
  995. 'graysquirrel',
  996. 'graywolf',
  997. 'greatargus',
  998. 'greatdane',
  999. 'greathornedowl',
  1000. 'greatwhiteshark',
  1001. 'grebe',
  1002. 'greendarnerdragonfly',
  1003. 'greyhounddog',
  1004. 'grison',
  1005. 'grizzlybear',
  1006. 'grosbeak',
  1007. 'groundbeetle',
  1008. 'groundhog',
  1009. 'grouper',
  1010. 'grouse',
  1011. 'grub',
  1012. 'grunion',
  1013. 'guanaco',
  1014. 'guernseycow',
  1015. 'guillemot',
  1016. 'guineafowl',
  1017. 'guineapig',
  1018. 'gull',
  1019. 'guppy',
  1020. 'gypsymoth',
  1021. 'gyrfalcon',
  1022. 'hackee',
  1023. 'haddock',
  1024. 'hadrosaurus',
  1025. 'hagfish',
  1026. 'hairstreak',
  1027. 'hairstreakbutterfly',
  1028. 'hake',
  1029. 'halcyon',
  1030. 'halibut',
  1031. 'halicore',
  1032. 'hamadryad',
  1033. 'hamadryas',
  1034. 'hammerheadbird',
  1035. 'hammerheadshark',
  1036. 'hammerkop',
  1037. 'hamster',
  1038. 'hanumanmonkey',
  1039. 'hapuka',
  1040. 'hapuku',
  1041. 'harborporpoise',
  1042. 'harborseal',
  1043. 'hare',
  1044. 'harlequinbug',
  1045. 'harpseal',
  1046. 'harpyeagle',
  1047. 'harrier',
  1048. 'harrierhawk',
  1049. 'hart',
  1050. 'hartebeest',
  1051. 'harvestmen',
  1052. 'harvestmouse',
  1053. 'hatchetfish',
  1054. 'hawaiianmonkseal',
  1055. 'hawk',
  1056. 'hectorsdolphin',
  1057. 'hedgehog',
  1058. 'heifer',
  1059. 'hellbender',
  1060. 'hen',
  1061. 'herald',
  1062. 'herculesbeetle',
  1063. 'hermitcrab',
  1064. 'heron',
  1065. 'herring',
  1066. 'heterodontosaurus',
  1067. 'hind',
  1068. 'hippopotamus',
  1069. 'hoatzin',
  1070. 'hochstettersfrog',
  1071. 'hog',
  1072. 'hogget',
  1073. 'hoiho',
  1074. 'hoki',
  1075. 'homalocephale',
  1076. 'honeybadger',
  1077. 'honeybee',
  1078. 'honeycreeper',
  1079. 'honeyeater',
  1080. 'hookersealion',
  1081. 'hoopoe',
  1082. 'hornbill',
  1083. 'hornedtoad',
  1084. 'hornedviper',
  1085. 'hornet',
  1086. 'hornshark',
  1087. 'horse',
  1088. 'horsechestnutleafminer',
  1089. 'horsefly',
  1090. 'horsemouse',
  1091. 'horseshoebat',
  1092. 'horseshoecrab',
  1093. 'hound',
  1094. 'housefly',
  1095. 'hoverfly',
  1096. 'howlermonkey',
  1097. 'huemul',
  1098. 'huia',
  1099. 'human',
  1100. 'hummingbird',
  1101. 'humpbackwhale',
  1102. 'husky',
  1103. 'hydatidtapeworm',
  1104. 'hydra',
  1105. 'hyena',
  1106. 'hylaeosaurus',
  1107. 'hypacrosaurus',
  1108. 'hypsilophodon',
  1109. 'hyracotherium',
  1110. 'hyrax',
  1111. 'iaerismetalmark',
  1112. 'ibadanmalimbe',
  1113. 'iberianbarbel',
  1114. 'iberianchiffchaff',
  1115. 'iberianemeraldlizard',
  1116. 'iberianlynx',
  1117. 'iberianmidwifetoad',
  1118. 'iberianmole',
  1119. 'iberiannase',
  1120. 'ibex',
  1121. 'ibis',
  1122. 'ibisbill',
  1123. 'ibizanhound',
  1124. 'iceblueredtopzebra',
  1125. 'icefish',
  1126. 'icelandgull',
  1127. 'icelandichorse',
  1128. 'icelandicsheepdog',
  1129. 'ichidna',
  1130. 'ichneumonfly',
  1131. 'ichthyosaurs',
  1132. 'ichthyostega',
  1133. 'icterinewarbler',
  1134. 'iggypops',
  1135. 'iguana',
  1136. 'iguanodon',
  1137. 'illadopsis',
  1138. 'ilsamochadegu',
  1139. 'imago',
  1140. 'impala',
  1141. 'imperatorangel',
  1142. 'imperialeagle',
  1143. 'incatern',
  1144. 'inchworm',
  1145. 'indianabat',
  1146. 'indiancow',
  1147. 'indianelephant',
  1148. 'indianglassfish',
  1149. 'indianhare',
  1150. 'indianjackal',
  1151. 'indianpalmsquirrel',
  1152. 'indianpangolin',
  1153. 'indianrhinoceros',
  1154. 'indianringneckparakeet',
  1155. 'indianrockpython',
  1156. 'indianskimmer',
  1157. 'indianspinyloach',
  1158. 'indigobunting',
  1159. 'indigowingedparrot',
  1160. 'indochinahogdeer',
  1161. 'indochinesetiger',
  1162. 'indri',
  1163. 'indusriverdolphin',
  1164. 'inexpectatumpleco',
  1165. 'inganue',
  1166. 'insect',
  1167. 'intermediateegret',
  1168. 'invisiblerail',
  1169. 'iraniangroundjay',
  1170. 'iridescentshark',
  1171. 'iriomotecat',
  1172. 'irishdraughthorse',
  1173. 'irishredandwhitesetter',
  1174. 'irishsetter',
  1175. 'irishterrier',
  1176. 'irishwaterspaniel',
  1177. 'irishwolfhound',
  1178. 'irrawaddydolphin',
  1179. 'irukandjijellyfish',
  1180. 'isabellineshrike',
  1181. 'isabellinewheatear',
  1182. 'islandcanary',
  1183. 'islandwhistler',
  1184. 'isopod',
  1185. 'italianbrownbear',
  1186. 'italiangreyhound',
  1187. 'ivorybackedwoodswallow',
  1188. 'ivorybilledwoodpecker',
  1189. 'ivorygull',
  1190. 'izuthrush',
  1191. 'jabiru',
  1192. 'jackal',
  1193. 'jackrabbit',
  1194. 'jaeger',
  1195. 'jaguar',
  1196. 'jaguarundi',
  1197. 'janenschia',
  1198. 'japanesebeetle',
  1199. 'javalina',
  1200. 'jay',
  1201. 'jellyfish',
  1202. 'jenny',
  1203. 'jerboa',
  1204. 'joey',
  1205. 'johndory',
  1206. 'juliabutterfly',
  1207. 'jumpingbean',
  1208. 'junco',
  1209. 'junebug',
  1210. 'kagu',
  1211. 'kakapo',
  1212. 'kakarikis',
  1213. 'kangaroo',
  1214. 'karakul',
  1215. 'katydid',
  1216. 'kawala',
  1217. 'kentrosaurus',
  1218. 'kestrel',
  1219. 'kid',
  1220. 'killdeer',
  1221. 'killerwhale',
  1222. 'killifish',
  1223. 'kingbird',
  1224. 'kingfisher',
  1225. 'kinglet',
  1226. 'kingsnake',
  1227. 'kinkajou',
  1228. 'kiskadee',
  1229. 'kissingbug',
  1230. 'kite',
  1231. 'kitfox',
  1232. 'kitten',
  1233. 'kittiwake',
  1234. 'kitty',
  1235. 'kiwi',
  1236. 'koala',
  1237. 'koalabear',
  1238. 'kob',
  1239. 'kodiakbear',
  1240. 'koi',
  1241. 'komododragon',
  1242. 'koodoo',
  1243. 'kookaburra',
  1244. 'kouprey',
  1245. 'krill',
  1246. 'kronosaurus',
  1247. 'kudu',
  1248. 'kusimanse',
  1249. 'labradorretriever',
  1250. 'lacewing',
  1251. 'ladybird',
  1252. 'ladybug',
  1253. 'lamb',
  1254. 'lamprey',
  1255. 'langur',
  1256. 'lark',
  1257. 'larva',
  1258. 'laughingthrush',
  1259. 'lcont',
  1260. 'leafbird',
  1261. 'leafcutterant',
  1262. 'leafhopper',
  1263. 'leafwing',
  1264. 'leech',
  1265. 'lemming',
  1266. 'lemur',
  1267. 'leonberger',
  1268. 'leopard',
  1269. 'leopardseal',
  1270. 'leveret',
  1271. 'lhasaapso',
  1272. 'lice',
  1273. 'liger',
  1274. 'lightningbug',
  1275. 'limpet',
  1276. 'limpkin',
  1277. 'ling',
  1278. 'lion',
  1279. 'lionfish',
  1280. 'littlenightmonkeys',
  1281. 'lizard',
  1282. 'llama',
  1283. 'lobo',
  1284. 'lobster',
  1285. 'locust',
  1286. 'loggerheadturtle',
  1287. 'longhorn',
  1288. 'longhornbeetle',
  1289. 'longspur',
  1290. 'loon',
  1291. 'lorikeet',
  1292. 'loris',
  1293. 'louse',
  1294. 'lovebird',
  1295. 'lowchen',
  1296. 'lunamoth',
  1297. 'lungfish',
  1298. 'lynx',
  1299. 'lynxÂ',
  1300. 'macaque',
  1301. 'macaw',
  1302. 'macropod',
  1303. 'madagascarhissingroach',
  1304. 'maggot',
  1305. 'magpie',
  1306. 'maiasaura',
  1307. 'majungatholus',
  1308. 'malamute',
  1309. 'mallard',
  1310. 'maltesedog',
  1311. 'mamba',
  1312. 'mamenchisaurus',
  1313. 'mammal',
  1314. 'mammoth',
  1315. 'manatee',
  1316. 'mandrill',
  1317. 'mangabey',
  1318. 'manta',
  1319. 'mantaray',
  1320. 'mantid',
  1321. 'mantis',
  1322. 'mantisray',
  1323. 'manxcat',
  1324. 'mara',
  1325. 'marabou',
  1326. 'marbledmurrelet',
  1327. 'mare',
  1328. 'marlin',
  1329. 'marmoset',
  1330. 'marmot',
  1331. 'marten',
  1332. 'martin',
  1333. 'massasauga',
  1334. 'massospondylus',
  1335. 'mastiff',
  1336. 'mastodon',
  1337. 'mayfly',
  1338. 'meadowhawk',
  1339. 'meadowlark',
  1340. 'mealworm',
  1341. 'meerkat',
  1342. 'megalosaurus',
  1343. 'megalotomusquinquespinosus',
  1344. 'megaraptor',
  1345. 'merganser',
  1346. 'merlin',
  1347. 'metalmarkbutterfly',
  1348. 'metamorphosis',
  1349. 'mice',
  1350. 'microvenator',
  1351. 'midge',
  1352. 'milksnake',
  1353. 'milkweedbug',
  1354. 'millipede',
  1355. 'minibeast',
  1356. 'mink',
  1357. 'minnow',
  1358. 'mite',
  1359. 'moa',
  1360. 'mockingbird',
  1361. 'mole',
  1362. 'mollies',
  1363. 'mollusk',
  1364. 'molly',
  1365. 'monarch',
  1366. 'mongoose',
  1367. 'mongrel',
  1368. 'monkey',
  1369. 'monkfishÂ',
  1370. 'monoclonius',
  1371. 'montanoceratops',
  1372. 'moorhen',
  1373. 'moose',
  1374. 'moray',
  1375. 'morayeel',
  1376. 'morpho',
  1377. 'mosasaur',
  1378. 'mosquito',
  1379. 'moth',
  1380. 'motmot',
  1381. 'mouflon',
  1382. 'mountaincat',
  1383. 'mountainlion',
  1384. 'mouse',
  1385. 'mouse / mice',
  1386. 'mousebird',
  1387. 'mudpuppy',
  1388. 'mule',
  1389. 'mullet',
  1390. 'muntjac',
  1391. 'murrelet',
  1392. 'muskox',
  1393. 'muskrat',
  1394. 'mussaurus',
  1395. 'mussel',
  1396. 'mustang',
  1397. 'mutt',
  1398. 'myna',
  1399. 'mynah',
  1400. 'myotisÂ',
  1401. 'nabarlek',
  1402. 'nag',
  1403. 'naga',
  1404. 'nagapies',
  1405. 'nakedmolerat',
  1406. 'nandine',
  1407. 'nandoo',
  1408. 'nandu',
  1409. 'narwhal',
  1410. 'narwhale',
  1411. 'natterjacktoad',
  1412. 'nauplius',
  1413. 'nautilus',
  1414. 'needlefish',
  1415. 'needletail',
  1416. 'nematode',
  1417. 'nene',
  1418. 'neonblueguppy',
  1419. 'neonbluehermitcrab',
  1420. 'neondwarfgourami',
  1421. 'neonrainbowfish',
  1422. 'neonredguppy',
  1423. 'neontetra',
  1424. 'nerka',
  1425. 'nettlefish',
  1426. 'newfoundlanddog',
  1427. 'newt',
  1428. 'newtnutria',
  1429. 'nightcrawler',
  1430. 'nighthawk',
  1431. 'nightheron',
  1432. 'nightingale',
  1433. 'nightjar',
  1434. 'nijssenissdwarfchihlid',
  1435. 'nilgai',
  1436. 'ninebandedarmadillo',
  1437. 'noctilio',
  1438. 'noctule',
  1439. 'noddy',
  1440. 'noolbenger',
  1441. 'northerncardinals',
  1442. 'northernelephantseal',
  1443. 'northernflyingsquirrel',
  1444. 'northernfurseal',
  1445. 'northernhairynosedwombat',
  1446. 'northernpike',
  1447. 'northernseahorse',
  1448. 'northernspottedowl',
  1449. 'norwaylobster',
  1450. 'norwayrat',
  1451. 'nubiangoat',
  1452. 'nudibranch',
  1453. 'numbat',
  1454. 'nurseshark',
  1455. 'nutcracker',
  1456. 'nuthatch',
  1457. 'nutria',
  1458. 'nyala',
  1459. 'nymph',
  1460. 'ocelot',
  1461. 'octopus',
  1462. 'okapi',
  1463. 'olingo',
  1464. 'olm',
  1465. 'opossum',
  1466. 'orangutan',
  1467. 'orca',
  1468. 'oregonsilverspotbutterfly',
  1469. 'oriole',
  1470. 'oropendola',
  1471. 'oropendula',
  1472. 'oryx',
  1473. 'osprey',
  1474. 'ostracod',
  1475. 'ostrich',
  1476. 'otter',
  1477. 'ovenbird',
  1478. 'owl',
  1479. 'owlbutterfly',
  1480. 'ox',
  1481. 'oxen',
  1482. 'oxpecker',
  1483. 'oyster',
  1484. 'ozarkbigearedbat',
  1485. 'pacaÂ',
  1486. 'pachyderm',
  1487. 'pacificparrotlet',
  1488. 'paddlefish',
  1489. 'paintedladybutterfly',
  1490. 'panda',
  1491. 'pangolin',
  1492. 'panther',
  1493. 'paperwasp',
  1494. 'papillon',
  1495. 'parakeet',
  1496. 'parrot',
  1497. 'partridge',
  1498. 'peacock',
  1499. 'peafowl',
  1500. 'peccary',
  1501. 'pekingese',
  1502. 'pelican',
  1503. 'pelicinuspetrel',
  1504. 'penguin',
  1505. 'perch',
  1506. 'peregrinefalcon',
  1507. 'pewee',
  1508. 'phalarope',
  1509. 'pharaohhound',
  1510. 'pheasant',
  1511. 'phoebe',
  1512. 'phoenix',
  1513. 'pig',
  1514. 'pigeon',
  1515. 'piglet',
  1516. 'pika',
  1517. 'pike',
  1518. 'pikeperchÂ',
  1519. 'pilchard',
  1520. 'pinemarten',
  1521. 'pinkriverdolphin',
  1522. 'pinniped',
  1523. 'pintail',
  1524. 'pipistrelle',
  1525. 'pipit',
  1526. 'piranha',
  1527. 'pitbull',
  1528. 'pittabird',
  1529. 'plainsqueaker',
  1530. 'plankton',
  1531. 'planthopper',
  1532. 'platypus',
  1533. 'plover',
  1534. 'polarbear',
  1535. 'polecat',
  1536. 'polliwog',
  1537. 'polyp',
  1538. 'polyturator',
  1539. 'pomeranian',
  1540. 'pondskater',
  1541. 'pony',
  1542. 'pooch',
  1543. 'poodle',
  1544. 'porcupine',
  1545. 'porpoise',
  1546. 'portuguesemanofwar',
  1547. 'possum',
  1548. 'prairiedog',
  1549. 'prawn',
  1550. 'prayingmantid',
  1551. 'prayingmantis',
  1552. 'primate',
  1553. 'pronghorn',
  1554. 'pseudodynerusquadrisectus',
  1555. 'ptarmigan',
  1556. 'pterodactyls',
  1557. 'pterosaurs',
  1558. 'puffer',
  1559. 'pufferfish',
  1560. 'puffin',
  1561. 'pug',
  1562. 'pullet',
  1563. 'puma',
  1564. 'pupa',
  1565. 'pupfish',
  1566. 'puppy',
  1567. 'purplemarten',
  1568. 'pussycat',
  1569. 'pygmy',
  1570. 'python',
  1571. 'quadrisectus',
  1572. 'quagga',
  1573. 'quahog',
  1574. 'quail',
  1575. 'queenalexandrasbirdwing',
  1576. 'queenalexandrasbirdwingbutterfly',
  1577. 'queenant',
  1578. 'queenbee',
  1579. 'queenconch',
  1580. 'queenslandgrouper',
  1581. 'queenslandheeler',
  1582. 'queensnake',
  1583. 'quelea',
  1584. 'quetzal',
  1585. 'quetzalcoatlus',
  1586. 'quillback',
  1587. 'quinquespinosus',
  1588. 'quokka',
  1589. 'quoll',
  1590. 'rabbit',
  1591. 'rabidsquirrel',
  1592. 'raccoon',
  1593. 'racer',
  1594. 'racerunner',
  1595. 'ragfish',
  1596. 'rail',
  1597. 'rainbowfish',
  1598. 'rainbowlorikeet',
  1599. 'rainbowtrout',
  1600. 'ram',
  1601. 'raptors',
  1602. 'rasbora',
  1603. 'rat',
  1604. 'ratfish',
  1605. 'rattail',
  1606. 'rattlesnake',
  1607. 'raven',
  1608. 'ray',
  1609. 'redhead',
  1610. 'redheadedwoodpecker',
  1611. 'redpoll',
  1612. 'redstart',
  1613. 'redtailedhawk',
  1614. 'reindeer',
  1615. 'reptile',
  1616. 'reynard',
  1617. 'rhea',
  1618. 'rhesusmonkey',
  1619. 'rhino',
  1620. 'rhinoceros',
  1621. 'rhinocerosbeetle',
  1622. 'rhodesianridgeback',
  1623. 'ringtailedlemur',
  1624. 'ringworm',
  1625. 'riograndeescuerzo',
  1626. 'roach',
  1627. 'roadrunner',
  1628. 'roan',
  1629. 'robberfly',
  1630. 'robin',
  1631. 'rockrat',
  1632. 'rodent',
  1633. 'roebuck',
  1634. 'roller',
  1635. 'rook',
  1636. 'rooster',
  1637. 'rottweiler',
  1638. 'sable',
  1639. 'sableantelope',
  1640. 'sablefishÂ',
  1641. 'saiga',
  1642. 'sakimonkey',
  1643. 'salamander',
  1644. 'salmon',
  1645. 'saltwatercrocodile',
  1646. 'sambar',
  1647. 'samoyeddog',
  1648. 'sandbarshark',
  1649. 'sanddollar',
  1650. 'sanderling',
  1651. 'sandpiper',
  1652. 'sapsucker',
  1653. 'sardine',
  1654. 'sawfish',
  1655. 'scallop',
  1656. 'scarab',
  1657. 'scarletibis',
  1658. 'scaup',
  1659. 'schapendoes',
  1660. 'schipperke',
  1661. 'schnauzer',
  1662. 'scorpion',
  1663. 'scoter',
  1664. 'screamer',
  1665. 'seabird',
  1666. 'seagull',
  1667. 'seahog',
  1668. 'seahorse',
  1669. 'seal',
  1670. 'sealion',
  1671. 'seamonkey',
  1672. 'seaslug',
  1673. 'seaurchin',
  1674. 'senegalpython',
  1675. 'seriema',
  1676. 'serpent',
  1677. 'serval',
  1678. 'shark',
  1679. 'shearwater',
  1680. 'sheep',
  1681. 'sheldrake',
  1682. 'shelduck',
  1683. 'shibainu',
  1684. 'shihtzu',
  1685. 'shorebird',
  1686. 'shoveler',
  1687. 'shrew',
  1688. 'shrike',
  1689. 'shrimp',
  1690. 'siamang',
  1691. 'siamesecat',
  1692. 'siberiantiger',
  1693. 'sidewinder',
  1694. 'sifaka',
  1695. 'silkworm',
  1696. 'silverfish',
  1697. 'silverfox',
  1698. 'silversidefish',
  1699. 'siskin',
  1700. 'skimmer',
  1701. 'skink',
  1702. 'skipper',
  1703. 'skua',
  1704. 'skunk',
  1705. 'skylark',
  1706. 'sloth',
  1707. 'slothbear',
  1708. 'slug',
  1709. 'smelts',
  1710. 'smew',
  1711. 'snail',
  1712. 'snake',
  1713. 'snipe',
  1714. 'snoutbutterfly',
  1715. 'snowdog',
  1716. 'snowgeese',
  1717. 'snowleopard',
  1718. 'snowmonkey',
  1719. 'snowyowl',
  1720. 'sockeyesalmon',
  1721. 'solenodon',
  1722. 'solitaire',
  1723. 'songbird',
  1724. 'sora',
  1725. 'southernhairnosedwombat',
  1726. 'sow',
  1727. 'spadefoot',
  1728. 'sparrow',
  1729. 'sphinx',
  1730. 'spider',
  1731. 'spidermonkey',
  1732. 'spiketail',
  1733. 'spittlebug',
  1734. 'sponge',
  1735. 'spoonbill',
  1736. 'spotteddolphin',
  1737. 'spreadwing',
  1738. 'springbok',
  1739. 'springpeeper',
  1740. 'springtail',
  1741. 'squab',
  1742. 'squamata',
  1743. 'squeaker',
  1744. 'squid',
  1745. 'squirrel',
  1746. 'stag',
  1747. 'stagbeetle',
  1748. 'stallion',
  1749. 'starfish',
  1750. 'starling',
  1751. 'steed',
  1752. 'steer',
  1753. 'stegosaurus',
  1754. 'stickinsect',
  1755. 'stickleback',
  1756. 'stilt',
  1757. 'stingray',
  1758. 'stinkbug',
  1759. 'stinkpot',
  1760. 'stoat',
  1761. 'stonefly',
  1762. 'stork',
  1763. 'stud',
  1764. 'sturgeon',
  1765. 'sugarglider',
  1766. 'sulphurbutterfly',
  1767. 'sunbear',
  1768. 'sunbittern',
  1769. 'sunfish',
  1770. 'swallow',
  1771. 'swallowtail',
  1772. 'swallowtailbutterfly',
  1773. 'swan',
  1774. 'swellfish',
  1775. 'swift',
  1776. 'swordfish',
  1777. 'tadpole',
  1778. 'tahr',
  1779. 'takin',
  1780. 'tamarin',
  1781. 'tanager',
  1782. 'tapaculo',
  1783. 'tapeworm',
  1784. 'tapir',
  1785. 'tarantula',
  1786. 'tarpan',
  1787. 'tarsier',
  1788. 'taruca',
  1789. 'tasmaniandevil',
  1790. 'tasmaniantiger',
  1791. 'tattler',
  1792. 'tayra',
  1793. 'teal',
  1794. 'tegus',
  1795. 'teledu',
  1796. 'tench',
  1797. 'tenrec',
  1798. 'termite',
  1799. 'tern',
  1800. 'terrapin',
  1801. 'terrier',
  1802. 'thoroughbred',
  1803. 'thrasher',
  1804. 'thrip',
  1805. 'thrush',
  1806. 'thunderbird',
  1807. 'thylacine',
  1808. 'tick',
  1809. 'tiger',
  1810. 'tigerbeetle',
  1811. 'tigermoth',
  1812. 'tigershark',
  1813. 'tilefish',
  1814. 'tinamou',
  1815. 'titi',
  1816. 'titmouse',
  1817. 'toad',
  1818. 'toadfish',
  1819. 'tomtitÂ',
  1820. 'topi',
  1821. 'tortoise',
  1822. 'toucan',
  1823. 'towhee',
  1824. 'tragopan',
  1825. 'treecreeper',
  1826. 'trex',
  1827. 'triceratops',
  1828. 'trogon',
  1829. 'trout',
  1830. 'trumpeterbird',
  1831. 'trumpeterswan',
  1832. 'tsetsefly',
  1833. 'tuatara',
  1834. 'tuna',
  1835. 'turaco',
  1836. 'turkey',
  1837. 'turnstone',
  1838. 'turtle',
  1839. 'turtledove',
  1840. 'uakari',
  1841. 'ugandakob',
  1842. 'uintagroundsquirrel',
  1843. 'ulyssesbutterfly',
  1844. 'umbrellabird',
  1845. 'umbrette',
  1846. 'unau',
  1847. 'ungulate',
  1848. 'unicorn',
  1849. 'upupa',
  1850. 'urchin',
  1851. 'urial',
  1852. 'uromastyxmaliensis',
  1853. 'uromastyxspinipes',
  1854. 'urson',
  1855. 'urubu',
  1856. 'urus',
  1857. 'urutu',
  1858. 'urva',
  1859. 'utahprairiedog',
  1860. 'vampirebat',
  1861. 'vaquita',
  1862. 'veery',
  1863. 'velociraptor',
  1864. 'velvetcrab',
  1865. 'velvetworm',
  1866. 'venomoussnake',
  1867. 'verdin',
  1868. 'vervet',
  1869. 'viceroybutterfly',
  1870. 'vicuna',
  1871. 'viper',
  1872. 'viperfish',
  1873. 'vipersquid',
  1874. 'vireo',
  1875. 'virginiaopossum',
  1876. 'vixen',
  1877. 'vole',
  1878. 'volvox',
  1879. 'vulpesvelox',
  1880. 'vulpesvulpes',
  1881. 'vulture',
  1882. 'walkingstick',
  1883. 'wallaby',
  1884. 'wallaroo',
  1885. 'walleye',
  1886. 'walrus',
  1887. 'warbler',
  1888. 'warthog',
  1889. 'wasp',
  1890. 'waterboatman',
  1891. 'waterbuck',
  1892. 'waterbuffalo',
  1893. 'waterbug',
  1894. 'waterdogs',
  1895. 'waterdragons',
  1896. 'watermoccasin',
  1897. 'waterstrider',
  1898. 'waterthrush',
  1899. 'wattlebird',
  1900. 'watussi',
  1901. 'waxwing',
  1902. 'weasel',
  1903. 'weaverbird',
  1904. 'weevil',
  1905. 'westafricanantelope',
  1906. 'whale',
  1907. 'whapuku',
  1908. 'whelp',
  1909. 'whimbrel',
  1910. 'whippet',
  1911. 'whippoorwill',
  1912. 'whitebeakeddolphin',
  1913. 'whiteeye',
  1914. 'whitepelican',
  1915. 'whiterhino',
  1916. 'whitetaileddeer',
  1917. 'whitetippedreefshark',
  1918. 'whooper',
  1919. 'whoopingcrane',
  1920. 'widgeon',
  1921. 'widowspider',
  1922. 'wildcat',
  1923. 'wildebeast',
  1924. 'wildebeest',
  1925. 'willet',
  1926. 'wireworm',
  1927. 'wisent',
  1928. 'wobbegongshark',
  1929. 'wolf',
  1930. 'wolfspider',
  1931. 'wolverine',
  1932. 'wombat',
  1933. 'woodborer',
  1934. 'woodchuck',
  1935. 'woodcock',
  1936. 'woodnymphbutterfly',
  1937. 'woodpecker',
  1938. 'woodstorks',
  1939. 'woollybearcaterpillar',
  1940. 'worm',
  1941. 'wrasse',
  1942. 'wreckfish',
  1943. 'wren',
  1944. 'wrenchbird',
  1945. 'wryneck',
  1946. 'wuerhosaurus',
  1947. 'wyvern',
  1948. 'xanclomys',
  1949. 'xanthareel',
  1950. 'xantus',
  1951. 'xantusmurrelet',
  1952. 'xeme',
  1953. 'xenarthra',
  1954. 'xenoposeidon',
  1955. 'xenops',
  1956. 'xenopterygii',
  1957. 'xenopus',
  1958. 'xenotarsosaurus',
  1959. 'xenurine',
  1960. 'xenurusunicinctus',
  1961. 'xerus',
  1962. 'xiaosaurus',
  1963. 'xinjiangovenator',
  1964. 'xiphias',
  1965. 'xiphiasgladius',
  1966. 'xiphosuran',
  1967. 'xoloitzcuintli',
  1968. 'xoni',
  1969. 'xrayfish',
  1970. 'xraytetra',
  1971. 'xuanhanosaurus',
  1972. 'xuanhuaceratops',
  1973. 'xuanhuasaurus',
  1974. 'yaffle',
  1975. 'yak',
  1976. 'yapok',
  1977. 'yardant',
  1978. 'yearling',
  1979. 'yellowbelliedmarmot',
  1980. 'yellowbellylizard',
  1981. 'yellowhammer',
  1982. 'yellowjacket',
  1983. 'yellowlegs',
  1984. 'yellowthroat',
  1985. 'yellowwhitebutterfly',
  1986. 'yeti',
  1987. 'ynambu',
  1988. 'yorkshireterrier',
  1989. 'yosemitetoad',
  1990. 'yucker',
  1991. 'zander',
  1992. 'zanzibardaygecko',
  1993. 'zebra',
  1994. 'zebradove',
  1995. 'zebrafinch',
  1996. 'zebrafish',
  1997. 'zebralongwingbutterfly',
  1998. 'zebraswallowtailbutterfly',
  1999. 'zebratailedlizard',
  2000. 'zebu',
  2001. 'zenaida',
  2002. 'zeren',
  2003. 'zethusspinipes',
  2004. 'zethuswasp',
  2005. 'zigzagsalamander',
  2006. 'zonetailedpigeon',
  2007. 'zooplankton',
  2008. 'zopilote',
  2009. 'zorilla',
  2010. 'abandoned',
  2011. 'able',
  2012. 'absolute',
  2013. 'academic',
  2014. 'acceptable',
  2015. 'acclaimed',
  2016. 'accomplished',
  2017. 'accurate',
  2018. 'aching',
  2019. 'acidic',
  2020. 'acrobatic',
  2021. 'adorable',
  2022. 'adventurous',
  2023. 'babyish',
  2024. 'back',
  2025. 'bad',
  2026. 'baggy',
  2027. 'bare',
  2028. 'barren',
  2029. 'basic',
  2030. 'beautiful',
  2031. 'belated',
  2032. 'beloved',
  2033. 'calculating',
  2034. 'calm',
  2035. 'candid',
  2036. 'canine',
  2037. 'capital',
  2038. 'carefree',
  2039. 'careful',
  2040. 'careless',
  2041. 'caring',
  2042. 'cautious',
  2043. 'cavernous',
  2044. 'celebrated',
  2045. 'charming',
  2046. 'damaged',
  2047. 'damp',
  2048. 'dangerous',
  2049. 'dapper',
  2050. 'daring',
  2051. 'dark',
  2052. 'darling',
  2053. 'dazzling',
  2054. 'dead',
  2055. 'deadly',
  2056. 'deafening',
  2057. 'dear',
  2058. 'dearest',
  2059. 'each',
  2060. 'eager',
  2061. 'early',
  2062. 'earnest',
  2063. 'easy',
  2064. 'easygoing',
  2065. 'ecstatic',
  2066. 'edible',
  2067. 'educated',
  2068. 'fabulous',
  2069. 'failing',
  2070. 'faint',
  2071. 'fair',
  2072. 'faithful',
  2073. 'fake',
  2074. 'familiar',
  2075. 'famous',
  2076. 'fancy',
  2077. 'fantastic',
  2078. 'far',
  2079. 'faraway',
  2080. 'farflung',
  2081. 'faroff',
  2082. 'gargantuan',
  2083. 'gaseous',
  2084. 'general',
  2085. 'generous',
  2086. 'gentle',
  2087. 'genuine',
  2088. 'giant',
  2089. 'giddy',
  2090. 'gigantic',
  2091. 'hairy',
  2092. 'half',
  2093. 'handmade',
  2094. 'handsome',
  2095. 'handy',
  2096. 'happy',
  2097. 'happygolucky',
  2098. 'hard',
  2099. 'icky',
  2100. 'icy',
  2101. 'ideal',
  2102. 'idealistic',
  2103. 'identical',
  2104. 'idiotic',
  2105. 'idle',
  2106. 'idolized',
  2107. 'ignorant',
  2108. 'ill',
  2109. 'illegal',
  2110. 'jaded',
  2111. 'jagged',
  2112. 'jampacked',
  2113. 'kaleidoscopic',
  2114. 'keen',
  2115. 'lame',
  2116. 'lanky',
  2117. 'large',
  2118. 'last',
  2119. 'lasting',
  2120. 'late',
  2121. 'lavish',
  2122. 'lawful',
  2123. 'mad',
  2124. 'madeup',
  2125. 'magnificent',
  2126. 'majestic',
  2127. 'major',
  2128. 'male',
  2129. 'mammoth',
  2130. 'married',
  2131. 'marvelous',
  2132. 'naive',
  2133. 'narrow',
  2134. 'nasty',
  2135. 'natural',
  2136. 'naughty',
  2137. 'obedient',
  2138. 'obese',
  2139. 'oblong',
  2140. 'oblong',
  2141. 'obvious',
  2142. 'occasional',
  2143. 'oily',
  2144. 'palatable',
  2145. 'pale',
  2146. 'paltry',
  2147. 'parallel',
  2148. 'parched',
  2149. 'partial',
  2150. 'passionate',
  2151. 'past',
  2152. 'pastel',
  2153. 'peaceful',
  2154. 'peppery',
  2155. 'perfect',
  2156. 'perfumed',
  2157. 'quaint',
  2158. 'qualified',
  2159. 'radiant',
  2160. 'ragged',
  2161. 'rapid',
  2162. 'rare',
  2163. 'rash',
  2164. 'raw',
  2165. 'recent',
  2166. 'reckless',
  2167. 'rectangular',
  2168. 'sad',
  2169. 'safe',
  2170. 'salty',
  2171. 'same',
  2172. 'sandy',
  2173. 'sane',
  2174. 'sarcastic',
  2175. 'sardonic',
  2176. 'satisfied',
  2177. 'scaly',
  2178. 'scarce',
  2179. 'scared',
  2180. 'scary',
  2181. 'scented',
  2182. 'scholarly',
  2183. 'scientific',
  2184. 'scornful',
  2185. 'scratchy',
  2186. 'scrawny',
  2187. 'second',
  2188. 'secondary',
  2189. 'secondhand',
  2190. 'secret',
  2191. 'selfassured',
  2192. 'selfish',
  2193. 'selfreliant',
  2194. 'sentimental',
  2195. 'talkative',
  2196. 'tall',
  2197. 'tame',
  2198. 'tan',
  2199. 'tangible',
  2200. 'tart',
  2201. 'tasty',
  2202. 'tattered',
  2203. 'taut',
  2204. 'tedious',
  2205. 'teeming',
  2206. 'ugly',
  2207. 'ultimate',
  2208. 'unacceptable',
  2209. 'unaware',
  2210. 'uncomfortable',
  2211. 'uncommon',
  2212. 'unconscious',
  2213. 'understated',
  2214. 'unequaled',
  2215. 'vacant',
  2216. 'vague',
  2217. 'vain',
  2218. 'valid',
  2219. 'wan',
  2220. 'warlike',
  2221. 'warm',
  2222. 'warmhearted',
  2223. 'warped',
  2224. 'wary',
  2225. 'wasteful',
  2226. 'watchful',
  2227. 'waterlogged',
  2228. 'watery',
  2229. 'wavy',
  2230. 'yawning',
  2231. 'yearly',
  2232. 'zany',
  2233. 'false',
  2234. 'active',
  2235. 'actual',
  2236. 'adept',
  2237. 'admirable',
  2238. 'admired',
  2239. 'adolescent',
  2240. 'adorable',
  2241. 'adored',
  2242. 'advanced',
  2243. 'affectionate',
  2244. 'afraid',
  2245. 'aged',
  2246. 'aggravating',
  2247. 'beneficial',
  2248. 'best',
  2249. 'better',
  2250. 'bewitched',
  2251. 'big',
  2252. 'bighearted',
  2253. 'biodegradable',
  2254. 'bitesized',
  2255. 'bitter',
  2256. 'black',
  2257. 'cheap',
  2258. 'cheerful',
  2259. 'cheery',
  2260. 'chief',
  2261. 'chilly',
  2262. 'chubby',
  2263. 'circular',
  2264. 'classic',
  2265. 'clean',
  2266. 'clear',
  2267. 'clearcut',
  2268. 'clever',
  2269. 'close',
  2270. 'closed',
  2271. 'decent',
  2272. 'decimal',
  2273. 'decisive',
  2274. 'deep',
  2275. 'defenseless',
  2276. 'defensive',
  2277. 'defiant',
  2278. 'deficient',
  2279. 'definite',
  2280. 'definitive',
  2281. 'delayed',
  2282. 'delectable',
  2283. 'delicious',
  2284. 'elaborate',
  2285. 'elastic',
  2286. 'elated',
  2287. 'elderly',
  2288. 'electric',
  2289. 'elegant',
  2290. 'elementary',
  2291. 'elliptical',
  2292. 'embarrassed',
  2293. 'fast',
  2294. 'fat',
  2295. 'fatal',
  2296. 'fatherly',
  2297. 'favorable',
  2298. 'favorite',
  2299. 'fearful',
  2300. 'fearless',
  2301. 'feisty',
  2302. 'feline',
  2303. 'female',
  2304. 'feminine',
  2305. 'few',
  2306. 'fickle',
  2307. 'gifted',
  2308. 'giving',
  2309. 'glamorous',
  2310. 'glaring',
  2311. 'glass',
  2312. 'gleaming',
  2313. 'gleeful',
  2314. 'glistening',
  2315. 'glittering',
  2316. 'hardtofind',
  2317. 'harmful',
  2318. 'harmless',
  2319. 'harmonious',
  2320. 'harsh',
  2321. 'hasty',
  2322. 'hateful',
  2323. 'haunting',
  2324. 'illfated',
  2325. 'illinformed',
  2326. 'illiterate',
  2327. 'illustrious',
  2328. 'imaginary',
  2329. 'imaginative',
  2330. 'immaculate',
  2331. 'immaterial',
  2332. 'immediate',
  2333. 'immense',
  2334. 'impassioned',
  2335. 'jaunty',
  2336. 'jealous',
  2337. 'jittery',
  2338. 'key',
  2339. 'kind',
  2340. 'lazy',
  2341. 'leading',
  2342. 'leafy',
  2343. 'lean',
  2344. 'left',
  2345. 'legal',
  2346. 'legitimate',
  2347. 'light',
  2348. 'masculine',
  2349. 'massive',
  2350. 'mature',
  2351. 'meager',
  2352. 'mealy',
  2353. 'mean',
  2354. 'measly',
  2355. 'meaty',
  2356. 'medical',
  2357. 'mediocre',
  2358. 'nautical',
  2359. 'near',
  2360. 'neat',
  2361. 'necessary',
  2362. 'needy',
  2363. 'odd',
  2364. 'oddball',
  2365. 'offbeat',
  2366. 'offensive',
  2367. 'official',
  2368. 'old',
  2369. 'periodic',
  2370. 'perky',
  2371. 'personal',
  2372. 'pertinent',
  2373. 'pesky',
  2374. 'pessimistic',
  2375. 'petty',
  2376. 'phony',
  2377. 'physical',
  2378. 'piercing',
  2379. 'pink',
  2380. 'pitiful',
  2381. 'plain',
  2382. 'quarrelsome',
  2383. 'quarterly',
  2384. 'ready',
  2385. 'real',
  2386. 'realistic',
  2387. 'reasonable',
  2388. 'red',
  2389. 'reflecting',
  2390. 'regal',
  2391. 'regular',
  2392. 'separate',
  2393. 'serene',
  2394. 'serious',
  2395. 'serpentine',
  2396. 'several',
  2397. 'severe',
  2398. 'shabby',
  2399. 'shadowy',
  2400. 'shady',
  2401. 'shallow',
  2402. 'shameful',
  2403. 'shameless',
  2404. 'sharp',
  2405. 'shimmering',
  2406. 'shiny',
  2407. 'shocked',
  2408. 'shocking',
  2409. 'shoddy',
  2410. 'short',
  2411. 'shortterm',
  2412. 'showy',
  2413. 'shrill',
  2414. 'shy',
  2415. 'sick',
  2416. 'silent',
  2417. 'silky',
  2418. 'tempting',
  2419. 'tender',
  2420. 'tense',
  2421. 'tepid',
  2422. 'terrible',
  2423. 'terrific',
  2424. 'testy',
  2425. 'thankful',
  2426. 'that',
  2427. 'these',
  2428. 'uneven',
  2429. 'unfinished',
  2430. 'unfit',
  2431. 'unfolded',
  2432. 'unfortunate',
  2433. 'unhappy',
  2434. 'unhealthy',
  2435. 'uniform',
  2436. 'unimportant',
  2437. 'unique',
  2438. 'valuable',
  2439. 'vapid',
  2440. 'variable',
  2441. 'vast',
  2442. 'velvety',
  2443. 'weak',
  2444. 'wealthy',
  2445. 'weary',
  2446. 'webbed',
  2447. 'wee',
  2448. 'weekly',
  2449. 'weepy',
  2450. 'weighty',
  2451. 'weird',
  2452. 'welcome',
  2453. 'welldocumented',
  2454. 'yellow',
  2455. 'zealous',
  2456. 'aggressive',
  2457. 'agile',
  2458. 'agitated',
  2459. 'agonizing',
  2460. 'agreeable',
  2461. 'ajar',
  2462. 'alarmed',
  2463. 'alarming',
  2464. 'alert',
  2465. 'alienated',
  2466. 'alive',
  2467. 'all',
  2468. 'altruistic',
  2469. 'blackandwhite',
  2470. 'bland',
  2471. 'blank',
  2472. 'blaring',
  2473. 'bleak',
  2474. 'blind',
  2475. 'blissful',
  2476. 'blond',
  2477. 'blue',
  2478. 'blushing',
  2479. 'cloudy',
  2480. 'clueless',
  2481. 'clumsy',
  2482. 'cluttered',
  2483. 'coarse',
  2484. 'cold',
  2485. 'colorful',
  2486. 'colorless',
  2487. 'colossal',
  2488. 'comfortable',
  2489. 'common',
  2490. 'compassionate',
  2491. 'competent',
  2492. 'complete',
  2493. 'delightful',
  2494. 'delirious',
  2495. 'demanding',
  2496. 'dense',
  2497. 'dental',
  2498. 'dependable',
  2499. 'dependent',
  2500. 'descriptive',
  2501. 'deserted',
  2502. 'detailed',
  2503. 'determined',
  2504. 'devoted',
  2505. 'different',
  2506. 'embellished',
  2507. 'eminent',
  2508. 'emotional',
  2509. 'empty',
  2510. 'enchanted',
  2511. 'enchanting',
  2512. 'energetic',
  2513. 'enlightened',
  2514. 'enormous',
  2515. 'filthy',
  2516. 'fine',
  2517. 'finished',
  2518. 'firm',
  2519. 'first',
  2520. 'firsthand',
  2521. 'fitting',
  2522. 'fixed',
  2523. 'flaky',
  2524. 'flamboyant',
  2525. 'flashy',
  2526. 'flat',
  2527. 'flawed',
  2528. 'flawless',
  2529. 'flickering',
  2530. 'gloomy',
  2531. 'glorious',
  2532. 'glossy',
  2533. 'glum',
  2534. 'golden',
  2535. 'good',
  2536. 'goodnatured',
  2537. 'gorgeous',
  2538. 'graceful',
  2539. 'healthy',
  2540. 'heartfelt',
  2541. 'hearty',
  2542. 'heavenly',
  2543. 'heavy',
  2544. 'hefty',
  2545. 'helpful',
  2546. 'helpless',
  2547. 'impartial',
  2548. 'impeccable',
  2549. 'imperfect',
  2550. 'imperturbable',
  2551. 'impish',
  2552. 'impolite',
  2553. 'important',
  2554. 'impossible',
  2555. 'impractical',
  2556. 'impressionable',
  2557. 'impressive',
  2558. 'improbable',
  2559. 'joint',
  2560. 'jolly',
  2561. 'jovial',
  2562. 'kindhearted',
  2563. 'kindly',
  2564. 'lighthearted',
  2565. 'likable',
  2566. 'likely',
  2567. 'limited',
  2568. 'limp',
  2569. 'limping',
  2570. 'linear',
  2571. 'lined',
  2572. 'liquid',
  2573. 'medium',
  2574. 'meek',
  2575. 'mellow',
  2576. 'melodic',
  2577. 'memorable',
  2578. 'menacing',
  2579. 'merry',
  2580. 'messy',
  2581. 'metallic',
  2582. 'mild',
  2583. 'negative',
  2584. 'neglected',
  2585. 'negligible',
  2586. 'neighboring',
  2587. 'nervous',
  2588. 'new',
  2589. 'oldfashioned',
  2590. 'only',
  2591. 'open',
  2592. 'optimal',
  2593. 'optimistic',
  2594. 'opulent',
  2595. 'plaintive',
  2596. 'plastic',
  2597. 'playful',
  2598. 'pleasant',
  2599. 'pleased',
  2600. 'pleasing',
  2601. 'plump',
  2602. 'plush',
  2603. 'pointed',
  2604. 'pointless',
  2605. 'poised',
  2606. 'polished',
  2607. 'polite',
  2608. 'political',
  2609. 'queasy',
  2610. 'querulous',
  2611. 'reliable',
  2612. 'relieved',
  2613. 'remarkable',
  2614. 'remorseful',
  2615. 'remote',
  2616. 'repentant',
  2617. 'required',
  2618. 'respectful',
  2619. 'responsible',
  2620. 'silly',
  2621. 'silver',
  2622. 'similar',
  2623. 'simple',
  2624. 'simplistic',
  2625. 'sinful',
  2626. 'single',
  2627. 'sizzling',
  2628. 'skeletal',
  2629. 'skinny',
  2630. 'sleepy',
  2631. 'slight',
  2632. 'slim',
  2633. 'slimy',
  2634. 'slippery',
  2635. 'slow',
  2636. 'slushy',
  2637. 'small',
  2638. 'smart',
  2639. 'smoggy',
  2640. 'smooth',
  2641. 'smug',
  2642. 'snappy',
  2643. 'snarling',
  2644. 'sneaky',
  2645. 'sniveling',
  2646. 'snoopy',
  2647. 'thick',
  2648. 'thin',
  2649. 'third',
  2650. 'thirsty',
  2651. 'this',
  2652. 'thorny',
  2653. 'thorough',
  2654. 'those',
  2655. 'thoughtful',
  2656. 'threadbare',
  2657. 'united',
  2658. 'unkempt',
  2659. 'unknown',
  2660. 'unlawful',
  2661. 'unlined',
  2662. 'unlucky',
  2663. 'unnatural',
  2664. 'unpleasant',
  2665. 'unrealistic',
  2666. 'venerated',
  2667. 'vengeful',
  2668. 'verifiable',
  2669. 'vibrant',
  2670. 'vicious',
  2671. 'wellgroomed',
  2672. 'wellinformed',
  2673. 'welllit',
  2674. 'wellmade',
  2675. 'welloff',
  2676. 'welltodo',
  2677. 'wellworn',
  2678. 'wet',
  2679. 'which',
  2680. 'whimsical',
  2681. 'whirlwind',
  2682. 'whispered',
  2683. 'yellowish',
  2684. 'zesty',
  2685. 'amazing',
  2686. 'ambitious',
  2687. 'ample',
  2688. 'amused',
  2689. 'amusing',
  2690. 'anchored',
  2691. 'ancient',
  2692. 'angelic',
  2693. 'angry',
  2694. 'anguished',
  2695. 'animated',
  2696. 'annual',
  2697. 'another',
  2698. 'antique',
  2699. 'bogus',
  2700. 'boiling',
  2701. 'bold',
  2702. 'bony',
  2703. 'boring',
  2704. 'bossy',
  2705. 'both',
  2706. 'bouncy',
  2707. 'bountiful',
  2708. 'bowed',
  2709. 'complex',
  2710. 'complicated',
  2711. 'composed',
  2712. 'concerned',
  2713. 'concrete',
  2714. 'confused',
  2715. 'conscious',
  2716. 'considerate',
  2717. 'constant',
  2718. 'content',
  2719. 'conventional',
  2720. 'cooked',
  2721. 'cool',
  2722. 'cooperative',
  2723. 'difficult',
  2724. 'digital',
  2725. 'diligent',
  2726. 'dim',
  2727. 'dimpled',
  2728. 'dimwitted',
  2729. 'direct',
  2730. 'disastrous',
  2731. 'discrete',
  2732. 'disfigured',
  2733. 'disgusting',
  2734. 'disloyal',
  2735. 'dismal',
  2736. 'enraged',
  2737. 'entire',
  2738. 'envious',
  2739. 'equal',
  2740. 'equatorial',
  2741. 'essential',
  2742. 'esteemed',
  2743. 'ethical',
  2744. 'euphoric',
  2745. 'flimsy',
  2746. 'flippant',
  2747. 'flowery',
  2748. 'fluffy',
  2749. 'fluid',
  2750. 'flustered',
  2751. 'focused',
  2752. 'fond',
  2753. 'foolhardy',
  2754. 'foolish',
  2755. 'forceful',
  2756. 'forked',
  2757. 'formal',
  2758. 'forsaken',
  2759. 'gracious',
  2760. 'grand',
  2761. 'grandiose',
  2762. 'granular',
  2763. 'grateful',
  2764. 'grave',
  2765. 'gray',
  2766. 'great',
  2767. 'greedy',
  2768. 'green',
  2769. 'hidden',
  2770. 'hideous',
  2771. 'high',
  2772. 'highlevel',
  2773. 'hilarious',
  2774. 'hoarse',
  2775. 'hollow',
  2776. 'homely',
  2777. 'impure',
  2778. 'inborn',
  2779. 'incomparable',
  2780. 'incompatible',
  2781. 'incomplete',
  2782. 'inconsequential',
  2783. 'incredible',
  2784. 'indelible',
  2785. 'indolent',
  2786. 'inexperienced',
  2787. 'infamous',
  2788. 'infantile',
  2789. 'joyful',
  2790. 'joyous',
  2791. 'jubilant',
  2792. 'klutzy',
  2793. 'knobby',
  2794. 'little',
  2795. 'live',
  2796. 'lively',
  2797. 'livid',
  2798. 'loathsome',
  2799. 'lone',
  2800. 'lonely',
  2801. 'long',
  2802. 'milky',
  2803. 'mindless',
  2804. 'miniature',
  2805. 'minor',
  2806. 'minty',
  2807. 'miserable',
  2808. 'miserly',
  2809. 'misguided',
  2810. 'misty',
  2811. 'mixed',
  2812. 'next',
  2813. 'nice',
  2814. 'nifty',
  2815. 'nimble',
  2816. 'nippy',
  2817. 'orange',
  2818. 'orderly',
  2819. 'ordinary',
  2820. 'organic',
  2821. 'ornate',
  2822. 'ornery',
  2823. 'poor',
  2824. 'popular',
  2825. 'portly',
  2826. 'posh',
  2827. 'positive',
  2828. 'possible',
  2829. 'potable',
  2830. 'powerful',
  2831. 'powerless',
  2832. 'practical',
  2833. 'precious',
  2834. 'present',
  2835. 'prestigious',
  2836. 'questionable',
  2837. 'quick',
  2838. 'repulsive',
  2839. 'revolving',
  2840. 'rewarding',
  2841. 'rich',
  2842. 'right',
  2843. 'rigid',
  2844. 'ringed',
  2845. 'ripe',
  2846. 'sociable',
  2847. 'soft',
  2848. 'soggy',
  2849. 'solid',
  2850. 'somber',
  2851. 'some',
  2852. 'sophisticated',
  2853. 'sore',
  2854. 'sorrowful',
  2855. 'soulful',
  2856. 'soupy',
  2857. 'sour',
  2858. 'spanish',
  2859. 'sparkling',
  2860. 'sparse',
  2861. 'specific',
  2862. 'spectacular',
  2863. 'speedy',
  2864. 'spherical',
  2865. 'spicy',
  2866. 'spiffy',
  2867. 'spirited',
  2868. 'spiteful',
  2869. 'splendid',
  2870. 'spotless',
  2871. 'spotted',
  2872. 'spry',
  2873. 'thrifty',
  2874. 'thunderous',
  2875. 'tidy',
  2876. 'tight',
  2877. 'timely',
  2878. 'tinted',
  2879. 'tiny',
  2880. 'tired',
  2881. 'torn',
  2882. 'total',
  2883. 'unripe',
  2884. 'unruly',
  2885. 'unselfish',
  2886. 'unsightly',
  2887. 'unsteady',
  2888. 'unsung',
  2889. 'untidy',
  2890. 'untimely',
  2891. 'untried',
  2892. 'victorious',
  2893. 'vigilant',
  2894. 'vigorous',
  2895. 'villainous',
  2896. 'violet',
  2897. 'white',
  2898. 'whole',
  2899. 'whopping',
  2900. 'wicked',
  2901. 'wide',
  2902. 'wideeyed',
  2903. 'wiggly',
  2904. 'wild',
  2905. 'willing',
  2906. 'wilted',
  2907. 'winding',
  2908. 'windy',
  2909. 'young',
  2910. 'zigzag',
  2911. 'anxious',
  2912. 'any',
  2913. 'apprehensive',
  2914. 'appropriate',
  2915. 'apt',
  2916. 'arctic',
  2917. 'arid',
  2918. 'aromatic',
  2919. 'artistic',
  2920. 'ashamed',
  2921. 'assured',
  2922. 'astonishing',
  2923. 'athletic',
  2924. 'brave',
  2925. 'breakable',
  2926. 'brief',
  2927. 'bright',
  2928. 'brilliant',
  2929. 'brisk',
  2930. 'broken',
  2931. 'bronze',
  2932. 'brown',
  2933. 'bruised',
  2934. 'coordinated',
  2935. 'corny',
  2936. 'corrupt',
  2937. 'costly',
  2938. 'courageous',
  2939. 'courteous',
  2940. 'crafty',
  2941. 'crazy',
  2942. 'creamy',
  2943. 'creative',
  2944. 'creepy',
  2945. 'criminal',
  2946. 'crisp',
  2947. 'dirty',
  2948. 'disguised',
  2949. 'dishonest',
  2950. 'dismal',
  2951. 'distant',
  2952. 'distant',
  2953. 'distinct',
  2954. 'distorted',
  2955. 'dizzy',
  2956. 'dopey',
  2957. 'downright',
  2958. 'dreary',
  2959. 'even',
  2960. 'evergreen',
  2961. 'everlasting',
  2962. 'every',
  2963. 'evil',
  2964. 'exalted',
  2965. 'excellent',
  2966. 'excitable',
  2967. 'exemplary',
  2968. 'exhausted',
  2969. 'forthright',
  2970. 'fortunate',
  2971. 'fragrant',
  2972. 'frail',
  2973. 'frank',
  2974. 'frayed',
  2975. 'free',
  2976. 'french',
  2977. 'frequent',
  2978. 'fresh',
  2979. 'friendly',
  2980. 'frightened',
  2981. 'frightening',
  2982. 'frigid',
  2983. 'gregarious',
  2984. 'grim',
  2985. 'grimy',
  2986. 'gripping',
  2987. 'grizzled',
  2988. 'gross',
  2989. 'grotesque',
  2990. 'grouchy',
  2991. 'grounded',
  2992. 'honest',
  2993. 'honorable',
  2994. 'honored',
  2995. 'hopeful',
  2996. 'horrible',
  2997. 'hospitable',
  2998. 'hot',
  2999. 'huge',
  3000. 'infatuated',
  3001. 'inferior',
  3002. 'infinite',
  3003. 'informal',
  3004. 'innocent',
  3005. 'insecure',
  3006. 'insidious',
  3007. 'insignificant',
  3008. 'insistent',
  3009. 'instructive',
  3010. 'insubstantial',
  3011. 'judicious',
  3012. 'juicy',
  3013. 'jumbo',
  3014. 'knotty',
  3015. 'knowing',
  3016. 'knowledgeable',
  3017. 'longterm',
  3018. 'loose',
  3019. 'lopsided',
  3020. 'lost',
  3021. 'loud',
  3022. 'lovable',
  3023. 'lovely',
  3024. 'loving',
  3025. 'modern',
  3026. 'modest',
  3027. 'moist',
  3028. 'monstrous',
  3029. 'monthly',
  3030. 'monumental',
  3031. 'moral',
  3032. 'mortified',
  3033. 'motherly',
  3034. 'motionless',
  3035. 'nocturnal',
  3036. 'noisy',
  3037. 'nonstop',
  3038. 'normal',
  3039. 'notable',
  3040. 'noted',
  3041. 'original',
  3042. 'other',
  3043. 'our',
  3044. 'outgoing',
  3045. 'outlandish',
  3046. 'outlying',
  3047. 'precious',
  3048. 'pretty',
  3049. 'previous',
  3050. 'pricey',
  3051. 'prickly',
  3052. 'primary',
  3053. 'prime',
  3054. 'pristine',
  3055. 'private',
  3056. 'prize',
  3057. 'probable',
  3058. 'productive',
  3059. 'profitable',
  3060. 'quickwitted',
  3061. 'quiet',
  3062. 'quintessential',
  3063. 'roasted',
  3064. 'robust',
  3065. 'rosy',
  3066. 'rotating',
  3067. 'rotten',
  3068. 'rough',
  3069. 'round',
  3070. 'rowdy',
  3071. 'square',
  3072. 'squeaky',
  3073. 'squiggly',
  3074. 'stable',
  3075. 'staid',
  3076. 'stained',
  3077. 'stale',
  3078. 'standard',
  3079. 'starchy',
  3080. 'stark',
  3081. 'starry',
  3082. 'steel',
  3083. 'steep',
  3084. 'sticky',
  3085. 'stiff',
  3086. 'stimulating',
  3087. 'stingy',
  3088. 'stormy',
  3089. 'straight',
  3090. 'strange',
  3091. 'strict',
  3092. 'strident',
  3093. 'striking',
  3094. 'striped',
  3095. 'strong',
  3096. 'studious',
  3097. 'stunning',
  3098. 'tough',
  3099. 'tragic',
  3100. 'trained',
  3101. 'traumatic',
  3102. 'treasured',
  3103. 'tremendous',
  3104. 'tremendous',
  3105. 'triangular',
  3106. 'tricky',
  3107. 'trifling',
  3108. 'trim',
  3109. 'untrue',
  3110. 'unused',
  3111. 'unusual',
  3112. 'unwelcome',
  3113. 'unwieldy',
  3114. 'unwilling',
  3115. 'unwitting',
  3116. 'unwritten',
  3117. 'upbeat',
  3118. 'violent',
  3119. 'virtual',
  3120. 'virtuous',
  3121. 'visible',
  3122. 'winged',
  3123. 'wiry',
  3124. 'wise',
  3125. 'witty',
  3126. 'wobbly',
  3127. 'woeful',
  3128. 'wonderful',
  3129. 'wooden',
  3130. 'woozy',
  3131. 'wordy',
  3132. 'worldly',
  3133. 'worn',
  3134. 'youthful',
  3135. 'attached',
  3136. 'attentive',
  3137. 'attractive',
  3138. 'austere',
  3139. 'authentic',
  3140. 'authorized',
  3141. 'automatic',
  3142. 'avaricious',
  3143. 'average',
  3144. 'aware',
  3145. 'awesome',
  3146. 'awful',
  3147. 'awkward',
  3148. 'bubbly',
  3149. 'bulky',
  3150. 'bumpy',
  3151. 'buoyant',
  3152. 'burdensome',
  3153. 'burly',
  3154. 'bustling',
  3155. 'busy',
  3156. 'buttery',
  3157. 'buzzing',
  3158. 'critical',
  3159. 'crooked',
  3160. 'crowded',
  3161. 'cruel',
  3162. 'crushing',
  3163. 'cuddly',
  3164. 'cultivated',
  3165. 'cultured',
  3166. 'cumbersome',
  3167. 'curly',
  3168. 'curvy',
  3169. 'cute',
  3170. 'cylindrical',
  3171. 'doting',
  3172. 'double',
  3173. 'downright',
  3174. 'drab',
  3175. 'drafty',
  3176. 'dramatic',
  3177. 'dreary',
  3178. 'droopy',
  3179. 'dry',
  3180. 'dual',
  3181. 'dull',
  3182. 'dutiful',
  3183. 'excited',
  3184. 'exciting',
  3185. 'exotic',
  3186. 'expensive',
  3187. 'experienced',
  3188. 'expert',
  3189. 'extralarge',
  3190. 'extraneous',
  3191. 'extrasmall',
  3192. 'extroverted',
  3193. 'frilly',
  3194. 'frivolous',
  3195. 'frizzy',
  3196. 'front',
  3197. 'frosty',
  3198. 'frozen',
  3199. 'frugal',
  3200. 'fruitful',
  3201. 'full',
  3202. 'fumbling',
  3203. 'functional',
  3204. 'funny',
  3205. 'fussy',
  3206. 'fuzzy',
  3207. 'growing',
  3208. 'growling',
  3209. 'grown',
  3210. 'grubby',
  3211. 'gruesome',
  3212. 'grumpy',
  3213. 'guilty',
  3214. 'gullible',
  3215. 'gummy',
  3216. 'humble',
  3217. 'humiliating',
  3218. 'humming',
  3219. 'humongous',
  3220. 'hungry',
  3221. 'hurtful',
  3222. 'husky',
  3223. 'intelligent',
  3224. 'intent',
  3225. 'intentional',
  3226. 'interesting',
  3227. 'internal',
  3228. 'international',
  3229. 'intrepid',
  3230. 'ironclad',
  3231. 'irresponsible',
  3232. 'irritating',
  3233. 'itchy',
  3234. 'jumpy',
  3235. 'junior',
  3236. 'juvenile',
  3237. 'known',
  3238. 'kooky',
  3239. 'kosher',
  3240. 'low',
  3241. 'loyal',
  3242. 'lucky',
  3243. 'lumbering',
  3244. 'luminous',
  3245. 'lumpy',
  3246. 'lustrous',
  3247. 'luxurious',
  3248. 'mountainous',
  3249. 'muddy',
  3250. 'muffled',
  3251. 'multicolored',
  3252. 'mundane',
  3253. 'murky',
  3254. 'mushy',
  3255. 'musty',
  3256. 'muted',
  3257. 'mysterious',
  3258. 'noteworthy',
  3259. 'novel',
  3260. 'noxious',
  3261. 'numb',
  3262. 'nutritious',
  3263. 'nutty',
  3264. 'onerlooked',
  3265. 'outrageous',
  3266. 'outstanding',
  3267. 'oval',
  3268. 'overcooked',
  3269. 'overdue',
  3270. 'overjoyed',
  3271. 'profuse',
  3272. 'proper',
  3273. 'proud',
  3274. 'prudent',
  3275. 'punctual',
  3276. 'pungent',
  3277. 'puny',
  3278. 'pure',
  3279. 'purple',
  3280. 'pushy',
  3281. 'putrid',
  3282. 'puzzled',
  3283. 'puzzling',
  3284. 'quirky',
  3285. 'quixotic',
  3286. 'quizzical',
  3287. 'royal',
  3288. 'rubbery',
  3289. 'ruddy',
  3290. 'rude',
  3291. 'rundown',
  3292. 'runny',
  3293. 'rural',
  3294. 'rusty',
  3295. 'stupendous',
  3296. 'stupid',
  3297. 'sturdy',
  3298. 'stylish',
  3299. 'subdued',
  3300. 'submissive',
  3301. 'substantial',
  3302. 'subtle',
  3303. 'suburban',
  3304. 'sudden',
  3305. 'sugary',
  3306. 'sunny',
  3307. 'super',
  3308. 'superb',
  3309. 'superficial',
  3310. 'superior',
  3311. 'supportive',
  3312. 'surefooted',
  3313. 'surprised',
  3314. 'suspicious',
  3315. 'svelte',
  3316. 'sweaty',
  3317. 'sweet',
  3318. 'sweltering',
  3319. 'swift',
  3320. 'sympathetic',
  3321. 'trivial',
  3322. 'troubled',
  3323. 'trusting',
  3324. 'trustworthy',
  3325. 'trusty',
  3326. 'truthful',
  3327. 'tubby',
  3328. 'turbulent',
  3329. 'twin',
  3330. 'upright',
  3331. 'upset',
  3332. 'urban',
  3333. 'usable',
  3334. 'used',
  3335. 'useful',
  3336. 'useless',
  3337. 'utilized',
  3338. 'utter',
  3339. 'vital',
  3340. 'vivacious',
  3341. 'vivid',
  3342. 'voluminous',
  3343. 'worried',
  3344. 'worrisome',
  3345. 'worse',
  3346. 'worst',
  3347. 'worthless',
  3348. 'worthwhile',
  3349. 'worthy',
  3350. 'wrathful',
  3351. 'wretched',
  3352. 'writhing',
  3353. 'wrong',
  3354. 'wry',
  3355. 'yummy',
  3356. 'true',
  3357. 'aliceblue',
  3358. 'antiquewhite',
  3359. 'aqua',
  3360. 'aquamarine',
  3361. 'azure',
  3362. 'beige',
  3363. 'bisque',
  3364. 'black',
  3365. 'blanchedalmond',
  3366. 'blue',
  3367. 'blueviolet',
  3368. 'brown',
  3369. 'burlywood',
  3370. 'cadetblue',
  3371. 'chartreuse',
  3372. 'chocolate',
  3373. 'coral',
  3374. 'cornflowerblue',
  3375. 'cornsilk',
  3376. 'crimson',
  3377. 'cyan',
  3378. 'darkblue',
  3379. 'darkcyan',
  3380. 'darkgoldenrod',
  3381. 'darkgray',
  3382. 'darkgreen',
  3383. 'darkgrey',
  3384. 'darkkhaki',
  3385. 'darkmagenta',
  3386. 'darkolivegreen',
  3387. 'darkorange',
  3388. 'darkorchid',
  3389. 'darkred',
  3390. 'darksalmon',
  3391. 'darkseagreen',
  3392. 'darkslateblue',
  3393. 'darkslategray',
  3394. 'darkslategrey',
  3395. 'darkturquoise',
  3396. 'darkviolet',
  3397. 'deeppink',
  3398. 'deepskyblue',
  3399. 'dimgray',
  3400. 'dimgrey',
  3401. 'dodgerblue',
  3402. 'firebrick',
  3403. 'floralwhite',
  3404. 'forestgreen',
  3405. 'fractal',
  3406. 'fuchsia',
  3407. 'gainsboro',
  3408. 'ghostwhite',
  3409. 'gold',
  3410. 'goldenrod',
  3411. 'gray',
  3412. 'green',
  3413. 'greenyellow',
  3414. 'honeydew',
  3415. 'hotpink',
  3416. 'indianred',
  3417. 'indigo',
  3418. 'ivory',
  3419. 'khaki',
  3420. 'lavender',
  3421. 'lavenderblush',
  3422. 'lawngreen',
  3423. 'lemonchiffon',
  3424. 'lightblue',
  3425. 'lightcoral',
  3426. 'lightcyan',
  3427. 'lightgoldenrod',
  3428. 'lightgoldenrodyellow',
  3429. 'lightgray',
  3430. 'lightgreen',
  3431. 'lightgrey',
  3432. 'lightpink',
  3433. 'lightsalmon',
  3434. 'lightseagreen',
  3435. 'lightskyblue',
  3436. 'lightslateblue',
  3437. 'lightslategray',
  3438. 'lightsteelblue',
  3439. 'lightyellow',
  3440. 'lime',
  3441. 'limegreen',
  3442. 'linen',
  3443. 'magenta',
  3444. 'maroon',
  3445. 'mediumaquamarine',
  3446. 'mediumblue',
  3447. 'mediumforestgreen',
  3448. 'mediumgoldenrod',
  3449. 'mediumorchid',
  3450. 'mediumpurple',
  3451. 'mediumseagreen',
  3452. 'mediumslateblue',
  3453. 'mediumspringgreen',
  3454. 'mediumturquoise',
  3455. 'mediumvioletred',
  3456. 'midnightblue',
  3457. 'mintcream',
  3458. 'mistyrose',
  3459. 'moccasin',
  3460. 'navajowhite',
  3461. 'navy',
  3462. 'navyblue',
  3463. 'oldlace',
  3464. 'olive',
  3465. 'olivedrab',
  3466. 'opaque',
  3467. 'orange',
  3468. 'orangered',
  3469. 'orchid',
  3470. 'palegoldenrod',
  3471. 'palegreen',
  3472. 'paleturquoise',
  3473. 'palevioletred',
  3474. 'papayawhip',
  3475. 'peachpuff',
  3476. 'peru',
  3477. 'pink',
  3478. 'plum',
  3479. 'powderblue',
  3480. 'purple',
  3481. 'red',
  3482. 'rosybrown',
  3483. 'royalblue',
  3484. 'saddlebrown',
  3485. 'salmon',
  3486. 'sandybrown',
  3487. 'seagreen',
  3488. 'seashell',
  3489. 'sienna',
  3490. 'silver',
  3491. 'skyblue',
  3492. 'slateblue',
  3493. 'slategray',
  3494. 'slategrey',
  3495. 'snow',
  3496. 'springgreen',
  3497. 'steelblue',
  3498. 'tan',
  3499. 'teal',
  3500. 'thistle',
  3501. 'tomato',
  3502. 'transparent',
  3503. 'turquoise',
  3504. 'violet',
  3505. 'violetred',
  3506. 'wheat',
  3507. 'white',
  3508. 'whitesmoke',
  3509. 'yellow',
  3510. 'yellowgreen'
  3511. ]
  3512. }
  3513.  
  3514. checkSupport(href){
  3515. return (href.includes('//redgifs.com/') || href.includes('www.redgifs.com/'));
  3516. }
  3517.  
  3518. capatilizeWords(word){
  3519. let words = [];
  3520. let remaing = word;
  3521. let ind = 0;
  3522. while(remaing.length > 0 && ind <= remaing.length){
  3523. let word = remaing.slice(0, ++ind);
  3524. if(this.gypcatList.includes(word)){
  3525. remaing = remaing.slice(ind);
  3526. words.push(word);
  3527. ind = 0;
  3528. }
  3529. }
  3530.  
  3531. return words.map(val => val[0].toUpperCase() + val.slice(1)).join('');
  3532. }
  3533.  
  3534. getDownloadLinks(href){
  3535. //media => oembed => thumbnail_url
  3536. //https://thcf2.redgifs.com/<ID>.mp4
  3537. //https://redgifs.com/watch/<ID>
  3538.  
  3539. let words = href.split('/');
  3540. let cWords = this.capatilizeWords(words[words.length-1]);
  3541. let url = words.slice(0, words.length-1);
  3542. url = url.join('/').replace('/watch', '').replace('redgifs', 'thcf2.redgifs') +'/'+cWords+ '.mp4'
  3543. return url;
  3544. }
  3545. }
  3546.  
  3547. const _SupportedSites = [new DirectDownload(), new Imgur(), new Gfycat(), new Redgifs()];
  3548. //#endregion
  3549.  
  3550. //#region Downloader Class
  3551. class RedditDownloader{
  3552. constructor(){
  3553.  
  3554. //this.addSavedDownloadButton();
  3555. }
  3556.  
  3557. addSavedDownloadButton(){
  3558. let aEles = document.querySelectorAll('a');
  3559. for (let index = 0; index < aEles.length; index++) {
  3560. const x = aEles[index];
  3561. if(x.innerText.toLowerCase().indexOf('overview') > -1){
  3562. console.log(x);
  3563.  
  3564. let className = x.className;
  3565.  
  3566. let btn = document.createElement('a');
  3567. btn.className = className + ' download';
  3568. btn.innerText = 'DOWNLOAD';
  3569. btn.onclick = () => {this.downloadAll()};
  3570. x.parentNode.appendChild(btn);
  3571.  
  3572. return true;
  3573. }
  3574. }
  3575.  
  3576. return false;
  3577. }
  3578.  
  3579. async addPostDownloadButton(){
  3580. return new Promise(async (res, rej) => {
  3581. let postEles = [...document.querySelectorAll('.Post')];
  3582. let commentButton = document.querySelector('.icon-comment');
  3583. if(commentButton == null || commentButton == undefined) {rej();return;}
  3584. let buttonClassName = commentButton.parentElement.parentElement.className;
  3585. let promises = []
  3586. for (let i = 0; i < postEles.length; i++) {
  3587. const post = postEles[i];
  3588. if(post.classList.contains('TMP_DOWNLOAD_ADDED') || post.querySelector('a[Reddit_Downloader="download"]') != null || post.classList.contains('promotedvideolink') || post == undefined) continue;
  3589. //console.log(post);
  3590. const link = post.querySelector('a[data-click-id="body"]');
  3591. if(link == undefined || link == null) continue;
  3592. const url = link.href;
  3593. console.log(`Getting Data from post: ${url}`);
  3594. post.classList.add('TMP_DOWNLOAD_ADDED')
  3595. promises.push(this._getPostData(url)
  3596. .then(data => {
  3597. if(!document.body.contains(post)){
  3598. rej();
  3599. return;
  3600. }
  3601. const info = this._parseData(data[0].data.children[0]);
  3602.  
  3603. // TODO clean this shit up
  3604. let dwnBTN = document.createElement('a');
  3605. dwnBTN.className = buttonClassName;
  3606. dwnBTN.innerText = 'DOWNLOAD';
  3607. dwnBTN.setAttribute('Reddit_Downloader', 'download')
  3608. dwnBTN.onclick = () => this.downloadSingle(info);
  3609. post.querySelector('.icon-comment').parentElement.parentElement.parentNode.appendChild(dwnBTN);
  3610. }).catch(() => {}));
  3611. /*const data = (await this._getPostData(url))[0].data.children[0];
  3612. const info = this._parseData(data);
  3613. // TODO clean this shit up
  3614. let dwnBTN = document.createElement('a');
  3615. dwnBTN.className = buttonClassName;
  3616. dwnBTN.innerText = 'DOWNLOAD';
  3617. dwnBTN.setAttribute('Reddit_Downloader', 'download')
  3618. dwnBTN.onclick = () => this.downloadSingle(info);
  3619. post.querySelector('.icon-save').parentElement.parentElement.parentNode.appendChild(dwnBTN);
  3620. post.classList.add('TMP_DOWNLOAD_ADDED');*/
  3621. }
  3622.  
  3623. Promise.all(promises).then(values => {
  3624. res();
  3625. })
  3626. })
  3627.  
  3628. // for (let i = 0; i < postsEles.length; i++) {
  3629. // const ele = postsEles[i];
  3630. // if(ele.classList.contains('TMP_DOWNLOAD')) continue;
  3631.  
  3632. // let dwnBTN = document.createElement('a');
  3633. // dwnBTN.className = ele.className;
  3634. // dwnBTN.innerText = 'DOWNLOAD';
  3635. // dwnBTN.onclick = () => alert('TODO!');
  3636. // ele.parentNode.appendChild(dwnBTN);
  3637.  
  3638. // ele.classList.add('TMP_DOWNLOAD');
  3639. // }
  3640. }
  3641.  
  3642. _getSavedPostsData(after=null){
  3643. return new Promise((res, rej) => {
  3644. let username;
  3645. if(_IsOnUserPage){
  3646. username = document.location.href.split('/');
  3647. username = username[username.indexOf('user')+1];
  3648. }else if(GM_config.get('reddit_username') != ''){
  3649. username = _RedditUsername;
  3650. }
  3651.  
  3652. fetch(`https://www.reddit.com/user/${username}/saved/.json?limit=20${after != null ? '&after=' + after : ''}`)
  3653. .then(resp => resp.text())
  3654. .then(text => res(JSON.parse(text)));
  3655. })
  3656. }
  3657.  
  3658. _getPostData(url){
  3659. return new Promise((res, rej) => {
  3660. fetch(`${url}/.json`)
  3661. .then(resp => resp.text())
  3662. .then(text => res(JSON.parse(text)));
  3663. })
  3664. }
  3665.  
  3666. _parseData(data){
  3667. return {
  3668. id: data.data.name,
  3669. url: data.data.url,
  3670. subreddit: data.data.subreddit
  3671. }
  3672. }
  3673.  
  3674. _getFilterArray(){
  3675. return new Promise((res, rej) => {
  3676. let str = GM_config.get('create_for_filter');
  3677. let arr = str.split(',').map(val => val.trim());
  3678. res(arr);
  3679. });
  3680. }
  3681.  
  3682. async downloadSingle(info, filter=null){
  3683. return new Promise(async(res, rej) => {
  3684. if(filter == null) filter = await this._getFilterArray();
  3685. const url = info.url;
  3686. if(url == undefined){
  3687. rej();
  3688. return;
  3689. };
  3690. for (let index = 0; index < _SupportedSites.length; index++) {
  3691. const site = _SupportedSites[index];
  3692. if(site.checkSupport(url)){
  3693. let folder = null;
  3694. if(GM_config.get('create_subreddit_folder')){
  3695. if(!GM_config.get('create_only_for_selected') || filter.includes(info.subreddit)){
  3696. folder = info.subreddit;
  3697. }
  3698. }
  3699. await site.downloadImages(url, folder);
  3700. await wait(20);
  3701. break;
  3702. }
  3703. }
  3704. res();
  3705. })
  3706. }
  3707.  
  3708. async downloadAll(){
  3709. console.log('DOWNLOADING!');
  3710. //_SupportedSites.forEach(downloader => {
  3711. // downloader.checkSupport()
  3712. //})
  3713.  
  3714. //Before = newly added to page so page 1 => when using an id you go up the list
  3715. //Thats why you use Before as Paramter
  3716.  
  3717. //^^^ Screw that shit am i right
  3718.  
  3719. //resp.data.after => Pagnation
  3720. //resp.data.children[].data.name => ID
  3721. //resp.data.children[].data.url => url
  3722. //resp.data.children[].data.subreddit => subreddit
  3723.  
  3724. let running = true;
  3725. let after = null;
  3726. let postInfos = [];
  3727. let first = true;
  3728. let stopAt = _LastDownloadedID;
  3729. let filter = await this._getFilterArray();
  3730. while(running){
  3731. let data = (await this._getSavedPostsData(after)).data;
  3732. after = data.after;
  3733. if(after == null||after == 'null') running = false;
  3734. for (let index = 0; index < data.children.length; index++) {
  3735. const postData = data.children[index];
  3736. const info = this._parseData(postData);
  3737.  
  3738. if(info.id == stopAt){
  3739. running = false;
  3740. break;
  3741. }
  3742.  
  3743. if(first){
  3744. first = false;
  3745. _LastDownloadedID = info.id;
  3746. GM_setValue('LastDownloaded', info.id);
  3747. }
  3748.  
  3749. postInfos.push(info);
  3750. }
  3751. }
  3752.  
  3753. let tmp_title = document.title;
  3754.  
  3755. for (let index = 0; index < postInfos.length; index++) {
  3756. document.title = `${index+1}/${postInfos.length}`;
  3757. const info = postInfos[index];
  3758. await this.downloadSingle(info, filter);
  3759. /*const url = info.url;
  3760. //console.log(`Downloading ${index+1}/${links.length} - ${url}`);
  3761.  
  3762. if(url == undefined) continue;
  3763.  
  3764. for (let index = 0; index < _SupportedSites.length; index++) {
  3765. const site = _SupportedSites[index];
  3766. if(site.checkSupport(url)){
  3767. let folder = null;
  3768. if(GM_config.get('create_subreddit_folder')){
  3769. if(!GM_config.get('create_only_for_selected') || filter.includes(info.subreddit)){
  3770. folder = info.subreddit;
  3771. }
  3772. }
  3773. await site.downloadImages(url, folder);
  3774. await wait(20);
  3775. break;
  3776. }
  3777. }*/
  3778. }
  3779.  
  3780. document.title = tmp_title;
  3781. }
  3782. }
  3783. //#endregion
  3784.  
  3785.  
  3786. (async() => {
  3787. if(DEBUG){
  3788. //let imgur = new Imgur();
  3789. //await imgur.downloadImages('https://imgur.com/a/w0ouO');
  3790.  
  3791. //let direct = new DirectDownload();
  3792. //await direct.downloadImages('')
  3793.  
  3794. //let redgif = new Redgifs();
  3795. //await redgif.downloadImages('');
  3796. }
  3797. })()
  3798.  
  3799. window.addEventListener('load', async () => {
  3800. await wait(100);
  3801. window.RedditDownloader = new RedditDownloader();
  3802.  
  3803. GM_config.init({
  3804. 'id': 'Reddit_Downloader',
  3805. 'fields': {
  3806. 'create_subreddit_folder': {
  3807. 'label': 'Create a subreddit folder which stores all subreddit entries.',
  3808. 'type': 'checkbox',
  3809. 'default': false
  3810. },
  3811. 'create_only_for_selected': {
  3812. 'label': 'Create a folder only if it passes the filter.',
  3813. 'type': 'checkbox',
  3814. 'default': false
  3815. },
  3816. 'create_for_filter': {
  3817. 'label': 'The names of the subreddits to create a folder for. (comma seperated)',
  3818. 'type': 'text',
  3819. 'size': 9999999,
  3820. 'default': ''
  3821. },
  3822. 'reddit_username': {
  3823. 'label': 'Your Reddit username. Not actually needed right now.',
  3824. 'type': 'text',
  3825. 'size': 9999999,
  3826. 'default': ''
  3827. },
  3828. 'imgur_client_id': {
  3829. 'label': 'Your imgur Client ID. Incase you want to download imgur images/albums.',
  3830. 'type': 'text',
  3831. 'size': 9999999,
  3832. 'default': ''
  3833. },
  3834. 'download_location': {
  3835. 'label': 'The download location of the files. Inside of your Downloads folder.',
  3836. 'type': 'text',
  3837. 'size': 9999999,
  3838. 'default': 'Reddit/Stuff/Stuff/'
  3839. }
  3840. }
  3841. })
  3842.  
  3843. GM_registerMenuCommand('Manage Settings', (() => {GM_config.open();}));
  3844. })