module.exports = s => s.replace(/&[#a-z0-9]+?;/ig, m => {
			const entities = {
				// grave accented letters
				'À': 'À',
				'È': 'È',
				'Ì': 'Ì',
				'Ò': 'Ò',
				'Ù': 'Ù',
				'à': 'à',
				'è': 'è',
				'ì': 'ì',
				'ò': 'ò',
				'ù': 'ù',
				// acute accented letters
				'Á': 'Á',
				'É': 'É',
				'Í': 'Í',
				'Ó': 'Ó',
				'Ú': 'Ú',
				'Ý': 'Ý',
				'á': 'á',
				'é': 'é',
				'í': 'í',
				'ó': 'ó',
				'ú': 'ú',
				'ý': 'ý',
				// circumflex accented letters
				'Â': 'Â',
				'Ê': 'Ê',
				'Î': 'Î',
				'Ô': 'Ô',
				'Û': 'Û',
				'â': 'â',
				'ê': 'ê',
				'î': 'î',
				'ô': 'ô',
				'û': 'û',
				// tilde accented letters
				'Ã': 'Ã',
				'Ñ': 'Ñ',
				'Õ': 'Õ',
				'ã': 'ã',
				'ñ': 'ñ',
				'õ': 'õ',
				// umlaut accented letters
				'Ä': 'Ä',
				'Ë': 'Ë',
				'Ï': 'Ï',
				'Ö': 'Ö',
				'Ü': 'Ü',
				'Ÿ': 'Ÿ',
				'ä': 'ä',
				'ë': 'ë',
				'ï': 'ï',
				'ö': 'ö',
				'ü': 'ü',
				'ÿ': 'ÿ',
				// other foreign characters
				'¡': '¡',
				'¿': '¿',
				'Ç': 'Ç',
				'ç': 'ç',
				'Œ': 'Œ',
				'œ': 'œ',
				'º': 'º',
				'ª': 'ª',
				'ß': 'ß',
				'Ø': 'Ø',
				'ø': 'ø',
				'Å': 'Å',
				'å': 'å',
				'Æ': 'Æ',
				'æ': 'æ',
				'Þ': 'Þ',
				'þ': 'þ',
				'Ð': 'Ð',
				'ð': 'ð',
				// currency units
				'¢': '¢',
				'£': '£',
				'¥': '¥',
				'€': '€',
				'¤': '¤',
				'ƒ': 'ƒ',
				// math symbols
				'>': '>',
				'&lt;': '<',
				'&divide;': '÷',
				'&deg;': '°',
				'&not;': '¬',
				'&plusmn;': '±',
				'&micro;': 'µ',
				'&there4;': '∴',
				'&ne;': '≠',
				'&ge;': '≥',
				'&le;': '≤',
				'&asymp;': '≈',
				'&radic;': '√',
				'&infin;': '∞',
				'&int;': '∫',
				'&part;': '∂',
				'&prime;': '′',
				'&Prime;': '″',
				'&sum;': '∑',
				'&prod;': '∏',
				'&permil;': '‰',
				'&equiv;': '≡',
				'&oline;': '‾',
				'&frasl;': '⁄',
				'&weierp;': '℘',
				'&image;': 'ℑ',
				'&real;': 'ℜ',
				'&alefsym;': 'ℵ',
				'&forall;': '∀',
				'&exist;': '∃',
				'&empty;': '∅',
				'&nabla;': '∇',
				'&isin;': '∈',
				'&notin;': '∉',
				'&ni;': '∋',
				'&minus;': '−',
				'&lowast;': '∗',
				'&prop;': '∝',
				'&ang;': '∠',
				'&and;': '∧',
				'&or;': '∨',
				'&cap;': '∩',
				'&cup;': '∪',
				'&sim;': '∼',
				'&cong;': '≅',
				'&asymp;': '≈',
				'&sub;': '⊂',
				'&sup;': '⊃',
				'&nsub;': '⊄',
				'&sube;': '⊆',
				'&supe;': '⊇',
				'&oplus;': '⊕',
				'&otimes;': '⊗',
				'&perp;': '⊥',
				'&sdot;': '⋅',
				'&lceil;': '⌈',
				'&rceil;': '⌉',
				'&lfloor;': '⌊',
				'&rfloor;': '⌋',
				'&lang;': '〈',
				'&rang;': '〉',
				// punctuations and others
				'&nbsp;': ' ',
				'&amp;': '&',
				'&apos;': '\'',
				'&quot;': '"',
				'&laquo;': '«',
				'&raquo;': '»',
				'&lsaquo;': '‹',
				'&rsaquo;': '›',
				'&sbquo;': '‚',
				'&bdquo;': '„',
				'&ldquo;': '“',
				'&rdquo;': '”',
				'&lsquo;': '‘',
				'&rsquo;': '’',
				'&hellip;': '…',
				'&reg;': '®',
				'&copy;': '©',
				'&trade;': '™',
				'&para;': '¶',
				'&bull;': '•',
				'&middot;': '·',
				'&sect;': '§',
				'&ndash;': '–',
				'&mdash;': '—',
				'&dagger;': '†',
				'&Dagger;': '‡',
				'&loz;': '◊',
				'&uarr;': '↑',
				'&darr;': '↓',
				'&larr;': '←',
				'&rarr;': '→',
				'&harr;': '↔',
				'&crarr;': '↵',
				'&lArr;': '⇐',
				'&uArr;': '⇑',
				'&rArr;': '⇒',
				'&dArr;': '⇓',
				'&hArr;': '⇔',
				'&spades;': '♠',
				'&clubs;': '♣',
				'&hearts;': '♥',
				'&diams;': '♦',
				// Greek letters
				'&Alpha;': 'Α',
				'&Beta;': 'Β',
				'&Gamma;': 'Γ',
				'&Delta;': 'Δ',
				'&Epsilon;': 'Ε',
				'&Zeta;': 'Ζ',
				'&Eta;': 'Η',
				'&Theta;': 'Θ',
				'&Iota;': 'Ι',
				'&Kappa;': 'Κ',
				'&Lambda;': 'Λ',
				'&Mu;': 'Μ',
				'&Nu;': 'Ν',
				'&Xi;': 'Ξ',
				'&Omicron;': 'Ο',
				'&Pi;': 'Π',
				'&Rho;': 'Ρ',
				'&Sigma;': 'Σ',
				'&Tau;': 'Τ',
				'&Upsilon;': 'Υ',
				'&Phi;': 'Φ',
				'&Chi;': 'Χ',
				'&Psi;': 'Ψ',
				'&Omega;': 'Ω',
				'&alpha;': 'α',
				'&beta;': 'β',
				'&gamma;': 'γ',
				'&delta;': 'δ',
				'&epsilon;': 'ε',
				'&zeta;': 'ζ',
				'&eta;': 'η',
				'&theta;': 'θ',
				'&iota;': 'ι',
				'&kappa;': 'κ',
				'&lambda;': 'λ',
				'&mu;': 'μ',
				'&nu;': 'ν',
				'&xi;': 'ξ',
				'&omicron;': 'ο',
				'&pi;': 'π',
				'&rho;': 'ρ',
				'&sigmaf;': 'ς',
				'&sigma;': 'σ',
				'&tau;': 'τ',
				'&upsilon;': 'υ',
				'&phi;': 'φ',
				'&chi;': 'χ',
				'&psi;': 'ψ',
				'&omega;': 'ω',
				'&thetasym;': 'ϑ',
				'&upsih;': 'ϒ',
				'&piv;': 'ϖ'
			};
			let c = entities[m];
			if (c) return c;
			if (m.match(/^&#[0-9]{1,4};$/i)) return String.fromCharCode(parseInt(/^&#([0-9a-f]+);$/i.exec(m)[1]));
			if (m.match(/^&#x[0-9a-f]{1,4};$/i)) return String.fromCharCode(parseInt(/^&#x([0-9a-f]+);$/i.exec(m)[1], 16));
			return m;
		});