diff --git a/ProfanityFilter.Tests.Unit/AllowListTests.cs b/ProfanityFilter.Tests.Unit/AllowListTests.cs index 28a277b..f785328 100644 --- a/ProfanityFilter.Tests.Unit/AllowListTests.cs +++ b/ProfanityFilter.Tests.Unit/AllowListTests.cs @@ -18,9 +18,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -using System; +using System; using Microsoft.VisualStudio.TestTools.UnitTesting; -using ProfanityFilter; using ProfanityFilter.Interfaces; namespace ProfanityFilter.Tests.Unit diff --git a/ProfanityFilter.Tests.Unit/ProfanityBaseTests.cs b/ProfanityFilter.Tests.Unit/ProfanityBaseTests.cs index f0d500c..df31bfe 100644 --- a/ProfanityFilter.Tests.Unit/ProfanityBaseTests.cs +++ b/ProfanityFilter.Tests.Unit/ProfanityBaseTests.cs @@ -42,7 +42,7 @@ public void ConstructorOverridesProfanityListWithArray() { "fuck", "shit", - "bollocks" + "bollocks" }; IProfanityFilter filter = new ProfanityFilter(_wordList); @@ -62,9 +62,9 @@ public void ConstructorOverridesProfanityList() { string[] _wordList = { - "fuck", - "shit", - "bollocks" + "fuck", + "shit", + "bollocks" }; IProfanityFilter filter = new ProfanityFilter(new List(_wordList)); @@ -85,7 +85,7 @@ public void AddProfanityThrowsArgumentNullExceptionForNullProfanity() public void AddProfanityThrowsArgumentNullExceptionForEmptyProfanityString() { var filter = new ProfanityBase(); - filter.AddProfanity((string)string.Empty); + filter.AddProfanity(string.Empty); } [TestMethod] @@ -111,9 +111,9 @@ public void AddProfanityAddsToProfanityArray() { string[] _wordList = { - "fuck", - "shit", - "bollocks" + "fuck", + "shit", + "bollocks" }; var filter = new ProfanityBase(); @@ -131,9 +131,9 @@ public void AddProfanityAddsToProfanityList() { string[] _wordList = { - "fuck", - "shit", - "bollocks" + "fuck", + "shit", + "bollocks" }; var filter = new ProfanityBase(); @@ -150,7 +150,7 @@ public void AddProfanityAddsToProfanityList() public void ReturnCountForDetaultProfanityList() { var filter = new ProfanityBase(); - int count = filter.Count; + var count = filter.Count; Assert.AreEqual(count, 1615); } @@ -214,7 +214,6 @@ public void RemoveDeletesAProfanityAndReturnsFalseIfProfanityDoesntExist() Assert.AreEqual(1615, filter.Count); } - [TestMethod] public void RemoveListDeletesProfanitiesFromPrimaryList() { @@ -222,7 +221,7 @@ public void RemoveListDeletesProfanitiesFromPrimaryList() Assert.AreEqual(1615, filter.Count); - List listOfProfanitiesToRemove = new List + var listOfProfanitiesToRemove = new List { "shit", "fuck", @@ -241,7 +240,7 @@ public void RemoveArrayDeletesProfanitiesFromPrimaryList() Assert.AreEqual(1615, filter.Count); - string []listOfProfanitiesToRemove = new string[] + string[] listOfProfanitiesToRemove = { "shit", "fuck", diff --git a/ProfanityFilter.Tests.Unit/ProfanityFilter.Tests.Unit.csproj b/ProfanityFilter.Tests.Unit/ProfanityFilter.Tests.Unit.csproj index d5a467c..a399d22 100644 --- a/ProfanityFilter.Tests.Unit/ProfanityFilter.Tests.Unit.csproj +++ b/ProfanityFilter.Tests.Unit/ProfanityFilter.Tests.Unit.csproj @@ -1,7 +1,7 @@ - netcoreapp2.2 + net6.0 false 0.1.2 diff --git a/ProfanityFilter.Tests.Unit/ProfanityTests.cs b/ProfanityFilter.Tests.Unit/ProfanityTests.cs index 33c48f2..d754cf1 100644 --- a/ProfanityFilter.Tests.Unit/ProfanityTests.cs +++ b/ProfanityFilter.Tests.Unit/ProfanityTests.cs @@ -104,7 +104,7 @@ public void DetectAllProfanitiesReturnsEmptyListForEmptyInput() } [TestMethod] - public void DetectAllProfanitiesReturnsNulListForEmptyInput() + public void DetectAllProfanitiesReturnsNullListForEmptyInput() { var filter = new ProfanityFilter(); var swearList = filter.DetectAllProfanities(null); @@ -329,7 +329,7 @@ public void CensoredStringReturnsStringWithProfanitiesBleepedOut() filter.AllowList.Add("scunthorpe"); filter.AllowList.Add("penistone"); - var censored = filter.CensorString("I fucking live in Scunthorpe and it is a shit place to live. I would much rather live in penistone you great big cock fuck.", '*'); + var censored = filter.CensorString("Выдать заказ лоху", '*'); var result = "I ******* live in Scunthorpe and it is a **** place to live. I would much rather live in penistone you great big **** ****."; Assert.AreEqual(censored, result); diff --git a/ProfanityFilter/ProfanityFilter/AllowList.cs b/ProfanityFilter/ProfanityFilter/AllowList.cs index b3e1a4a..958147a 100644 --- a/ProfanityFilter/ProfanityFilter/AllowList.cs +++ b/ProfanityFilter/ProfanityFilter/AllowList.cs @@ -1,6 +1,6 @@ /* MIT License -Copyright (c) 2019 +Copyright (c) 2019 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 @@ -17,6 +17,7 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + using System; using System.Collections.Generic; using System.Collections.ObjectModel; @@ -27,11 +28,20 @@ namespace ProfanityFilter { public class AllowList : IAllowList { - List _allowList; + private readonly List _allowList; public AllowList() { - _allowList = new List(); + _allowList = new List + { + "\bолеговн.*\b", + "\bгребля\b", + "\b.*(С|с)ергей.*\b", + "\b.*к(о|а)манд.*\b", + "\b.*л(о|а)х(о|а)трон.*\b", + "\bхул(е|и)ган\b", + "\b.*м(а|о)нд(а|о)рин.*\b", + }; } /// @@ -52,15 +62,10 @@ public ReadOnlyCollection ToList /// The word that you want to allow list. public void Add(string wordToAllowlist) { - if (string.IsNullOrEmpty(wordToAllowlist)) - { - throw new ArgumentNullException(nameof(wordToAllowlist)); - } + if (string.IsNullOrEmpty(wordToAllowlist)) throw new ArgumentNullException(nameof(wordToAllowlist)); if (!_allowList.Contains(wordToAllowlist.ToLower(CultureInfo.InvariantCulture))) - { _allowList.Add(wordToAllowlist.ToLower(CultureInfo.InvariantCulture)); - } } /// @@ -70,10 +75,7 @@ public void Add(string wordToAllowlist) /// public bool Contains(string wordToCheck) { - if (string.IsNullOrEmpty(wordToCheck)) - { - throw new ArgumentNullException(nameof(wordToCheck)); - } + if (string.IsNullOrEmpty(wordToCheck)) throw new ArgumentNullException(nameof(wordToCheck)); return _allowList.Contains(wordToCheck.ToLower(CultureInfo.InvariantCulture)); } @@ -82,13 +84,7 @@ public bool Contains(string wordToCheck) /// Return the number of items in the allow list. /// /// The number of items in the allow list. - public int Count - { - get - { - return _allowList.Count; - } - } + public int Count => _allowList.Count; /// /// Remove all words from the allow list. @@ -105,12 +101,9 @@ public void Clear() /// True if the word is successfuly removes, False otherwise. public bool Remove(string wordToRemove) { - if (string.IsNullOrEmpty(wordToRemove)) - { - throw new ArgumentNullException(nameof(wordToRemove)); - } + if (string.IsNullOrEmpty(wordToRemove)) throw new ArgumentNullException(nameof(wordToRemove)); return _allowList.Remove(wordToRemove.ToLower(CultureInfo.InvariantCulture)); } } -} +} \ No newline at end of file diff --git a/ProfanityFilter/ProfanityFilter/ProfanityBase.cs b/ProfanityFilter/ProfanityFilter/ProfanityBase.cs index bbce00a..a6a20ab 100644 --- a/ProfanityFilter/ProfanityFilter/ProfanityBase.cs +++ b/ProfanityFilter/ProfanityFilter/ProfanityBase.cs @@ -1,6 +1,6 @@ /* MIT License -Copyright (c) 2019 +Copyright (c) 2019 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 @@ -18,7 +18,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -using System; +using System; using System.Collections.Generic; using System.Globalization; @@ -43,10 +43,7 @@ public ProfanityBase() /// Array of words considered profanities. protected ProfanityBase(string[] profanityList) { - if (profanityList == null) - { - throw new ArgumentNullException(nameof(profanityList)); - } + if (profanityList == null) throw new ArgumentNullException(nameof(profanityList)); _profanities = new List(profanityList); } @@ -58,10 +55,7 @@ protected ProfanityBase(string[] profanityList) /// List of words considered profanities. protected ProfanityBase(List profanityList) { - if (profanityList == null) - { - throw new ArgumentNullException(nameof(profanityList)); - } + if (profanityList == null) throw new ArgumentNullException(nameof(profanityList)); _profanities = profanityList; } @@ -72,10 +66,7 @@ protected ProfanityBase(List profanityList) /// The profanity to add. public void AddProfanity(string profanity) { - if (string.IsNullOrEmpty(profanity)) - { - throw new ArgumentNullException(nameof(profanity)); - } + if (string.IsNullOrEmpty(profanity)) throw new ArgumentNullException(nameof(profanity)); _profanities.Add(profanity); } @@ -87,10 +78,7 @@ public void AddProfanity(string profanity) /// The array of profanities to add. public void AddProfanity(string[] profanityList) { - if (profanityList == null) - { - throw new ArgumentNullException(nameof(profanityList)); - } + if (profanityList == null) throw new ArgumentNullException(nameof(profanityList)); _profanities.AddRange(profanityList); } @@ -102,10 +90,7 @@ public void AddProfanity(string[] profanityList) /// The list of profanities to add. public void AddProfanity(List profanityList) { - if (profanityList == null) - { - throw new ArgumentNullException(nameof(profanityList)); - } + if (profanityList == null) throw new ArgumentNullException(nameof(profanityList)); _profanities.AddRange(profanityList); } @@ -117,10 +102,7 @@ public void AddProfanity(List profanityList) /// True of the profanity was removed. False otherwise. public bool RemoveProfanity(string profanity) { - if (string.IsNullOrEmpty(profanity)) - { - throw new ArgumentNullException(nameof(profanity)); - } + if (string.IsNullOrEmpty(profanity)) throw new ArgumentNullException(nameof(profanity)); return _profanities.Remove(profanity.ToLower(CultureInfo.InvariantCulture)); } @@ -132,18 +114,11 @@ public bool RemoveProfanity(string profanity) /// True if the profanities were removed. False otherwise. public bool RemoveProfanity(List profanities) { - if (profanities == null) - { - throw new ArgumentNullException(nameof(profanities)); - } + if (profanities == null) throw new ArgumentNullException(nameof(profanities)); - foreach (string naughtyWord in profanities) - { + foreach (var naughtyWord in profanities) if (!RemoveProfanity(naughtyWord)) - { return false; - } - } return true; } @@ -155,18 +130,11 @@ public bool RemoveProfanity(List profanities) /// True if the profanities were removed. False otherwise. public bool RemoveProfanity(string[] profanities) { - if (profanities == null) - { - throw new ArgumentNullException(nameof(profanities)); - } + if (profanities == null) throw new ArgumentNullException(nameof(profanities)); - foreach (string naughtyWord in profanities) - { + foreach (var naughtyWord in profanities) if (!RemoveProfanity(naughtyWord)) - { return false; - } - } return true; } @@ -182,12 +150,6 @@ public void Clear() /// /// Return the number of profanities in the system. /// - public int Count - { - get - { - return _profanities.Count; - } - } + public int Count => _profanities.Count; } } \ No newline at end of file diff --git a/ProfanityFilter/ProfanityFilter/ProfanityFilter.cs b/ProfanityFilter/ProfanityFilter/ProfanityFilter.cs index 3af0bc6..e3dd753 100644 --- a/ProfanityFilter/ProfanityFilter/ProfanityFilter.cs +++ b/ProfanityFilter/ProfanityFilter/ProfanityFilter.cs @@ -37,7 +37,6 @@ namespace ProfanityFilter /// public class ProfanityFilter : ProfanityBase, IProfanityFilter { - /// /// Default constructor that loads up the default profanity list. /// @@ -51,7 +50,7 @@ public ProfanityFilter() /// profanity list. /// /// Array of words to add into the filter. - public ProfanityFilter(string[] profanityList) : base (profanityList) + public ProfanityFilter(string[] profanityList) : base(profanityList) { AllowList = new AllowList(); } @@ -80,16 +79,10 @@ public ProfanityFilter(List profanityList) : base(profanityList) /// True if the word is considered a profanity, False otherwise. public bool IsProfanity(string word) { - if (string.IsNullOrEmpty(word)) - { - return false; - } + if (string.IsNullOrEmpty(word)) return false; // Check if the word is in the allow list. - if (AllowList.Contains(word.ToLower(CultureInfo.InvariantCulture))) - { - return false; - } + if (AllowList.Contains(word.ToLower(CultureInfo.InvariantCulture))) return false; return _profanities.Contains(word.ToLower(CultureInfo.InvariantCulture)); } @@ -112,10 +105,7 @@ public ReadOnlyCollection DetectAllProfanities(string sentence) /// A read only list of detected profanities. public ReadOnlyCollection DetectAllProfanities(string sentence, bool removePartialMatches) { - if (string.IsNullOrEmpty(sentence)) - { - return new ReadOnlyCollection(new List()); - } + if (string.IsNullOrEmpty(sentence)) return new ReadOnlyCollection(new List()); sentence = sentence.ToLower(); sentence = sentence.Replace(".", ""); @@ -123,18 +113,16 @@ public ReadOnlyCollection DetectAllProfanities(string sentence, bool rem var words = sentence.Split(' '); var postAllowList = FilterWordListByAllowList(words); - List swearList = new List(); + var swearList = new List(); // Catch whether multi-word profanities are in the allow list filtered sentence. AddMultiWordProfanities(swearList, ConvertWordListToSentence(postAllowList)); // Deduplicate any partial matches, ie, if the word "twatting" is in a sentence, don't include "twat" if part of the same word. - if (removePartialMatches) - { - swearList.RemoveAll(x => swearList.Any(y => x != y && y.Contains(x))); - } + if (removePartialMatches) swearList.RemoveAll(x => swearList.Any(y => x != y && y.Contains(x))); - return new ReadOnlyCollection(FilterSwearListForCompleteWordsOnly(sentence, swearList).Distinct().ToList()); + return new ReadOnlyCollection(FilterSwearListForCompleteWordsOnly(sentence, swearList).Distinct() + .ToList()); } /// @@ -170,12 +158,9 @@ public string CensorString(string sentence, char censorCharacter) /// public string CensorString(string sentence, char censorCharacter, bool ignoreNumbers) { - if (string.IsNullOrEmpty(sentence)) - { - return string.Empty; - } + if (string.IsNullOrEmpty(sentence)) return string.Empty; - string noPunctuation = sentence.Trim(); + var noPunctuation = sentence.Trim(); noPunctuation = noPunctuation.ToLower(); noPunctuation = Regex.Replace(noPunctuation, @"[^\w\s]", ""); @@ -189,8 +174,8 @@ public string CensorString(string sentence, char censorCharacter, bool ignoreNum AddMultiWordProfanities(swearList, ConvertWordListToSentence(postAllowList)); - StringBuilder censored = new StringBuilder(sentence); - StringBuilder tracker = new StringBuilder(sentence); + var censored = new StringBuilder(sentence); + var tracker = new StringBuilder(sentence); return CensorStringByProfanityList(censorCharacter, swearList, censored, tracker, ignoreNumbers).ToString(); } @@ -209,26 +194,20 @@ public string CensorString(string sentence, char censorCharacter, bool ignoreNum /// If no enclosed word is found then return null. public (int, int, string)? GetCompleteWord(string toCheck, string profanity) { - if (string.IsNullOrEmpty(toCheck)) - { - return null; - } - - string profanityLowerCase = profanity.ToLower(CultureInfo.InvariantCulture); - string toCheckLowerCase = toCheck.ToLower(CultureInfo.InvariantCulture); + if (string.IsNullOrEmpty(toCheck)) return null; - if (toCheckLowerCase.Contains(profanityLowerCase)) + var profanityLowerCase = profanity.ToLower(CultureInfo.InvariantCulture); + var toCheckLowerCase = toCheck.ToLower(CultureInfo.InvariantCulture); + var regexMatch = Regex.Match(toCheck, profanityLowerCase); + if (regexMatch.Success) { - var startIndex = toCheckLowerCase.IndexOf(profanityLowerCase, StringComparison.Ordinal); + var startIndex = regexMatch.Index; var endIndex = startIndex; // Work backwards in string to get to the start of the word. while (startIndex > 0) { - if (toCheck[startIndex - 1] == ' ' || char.IsPunctuation(toCheck[startIndex - 1])) - { - break; - } + if (toCheck[startIndex - 1] == ' ' || char.IsPunctuation(toCheck[startIndex - 1])) break; startIndex -= 1; } @@ -236,15 +215,14 @@ public string CensorString(string sentence, char censorCharacter, bool ignoreNum // Work forwards to get to the end of the word. while (endIndex < toCheck.Length) { - if (toCheck[endIndex] == ' ' || char.IsPunctuation(toCheck[endIndex])) - { - break; - } + if (toCheck[endIndex] == ' ' || char.IsPunctuation(toCheck[endIndex])) break; endIndex += 1; } - return (startIndex, endIndex, toCheckLowerCase.Substring(startIndex, endIndex - startIndex).ToLower(CultureInfo.InvariantCulture)); + return (startIndex, endIndex, + toCheckLowerCase.Substring(startIndex, endIndex - startIndex) + .ToLower(CultureInfo.InvariantCulture)); } return null; @@ -259,78 +237,56 @@ public string CensorString(string sentence, char censorCharacter, bool ignoreNum /// True if the term contains a profanity, False otherwise. public bool ContainsProfanity(string term) { - if (string.IsNullOrWhiteSpace(term)) - { - return false; - } + if (string.IsNullOrWhiteSpace(term)) return false; + + var potentialProfanities = _profanities.Where(word => word.Length <= term.Length).ToList(); - List potentialProfanities = _profanities.Where(word => word.Length <= term.Length).ToList(); - // We might have a very short phrase coming in, resulting in no potential matches even before the regex - if (potentialProfanities.Count == 0) - { - return false; - } + if (potentialProfanities.Count == 0) return false; - Regex regex = new Regex(string.Format(@"(?:{0})", string.Join("|", potentialProfanities).Replace("$", "\\$"), RegexOptions.IgnoreCase)); + var regex = new Regex(string.Format(@"(?:{0})", string.Join("|", potentialProfanities).Replace("$", "\\$"), + RegexOptions.IgnoreCase)); foreach (Match profanity in regex.Matches(term)) - { // if any matches are found and aren't in the allowed list, we can return true here without checking further if (!AllowList.Contains(profanity.Value.ToLower(CultureInfo.InvariantCulture))) - { return true; - } - } return false; } - private StringBuilder CensorStringByProfanityList(char censorCharacter, List swearList, StringBuilder censored, StringBuilder tracker, bool ignoreNumeric) + private StringBuilder CensorStringByProfanityList(char censorCharacter, List swearList, + StringBuilder censored, StringBuilder tracker, bool ignoreNumeric) { - foreach (string word in swearList.OrderByDescending(x => x.Length)) + foreach (var word in swearList.OrderByDescending(x => x.Length)) { (int, int, string)? result = (0, 0, ""); var multiWord = word.Split(' '); if (multiWord.Length == 1) - { do { result = GetCompleteWord(tracker.ToString(), word); if (result != null) { - string filtered = result.Value.Item3; + var filtered = result.Value.Item3; - if (ignoreNumeric) - { - filtered = Regex.Replace(result.Value.Item3, @"[\d-]", string.Empty); - } + if (ignoreNumeric) filtered = Regex.Replace(result.Value.Item3, @"[\d-]", string.Empty); - if (filtered == word) - { - for (int i = result.Value.Item1; i < result.Value.Item2; i++) + if (Regex.IsMatch(filtered, word)) + for (var i = result.Value.Item1; i < result.Value.Item2; i++) { censored[i] = censorCharacter; tracker[i] = censorCharacter; } - } else - { - for (int i = result.Value.Item1; i < result.Value.Item2; i++) - { + for (var i = result.Value.Item1; i < result.Value.Item2; i++) tracker[i] = censorCharacter; - } - } } - } - while (result != null); - } + } while (result != null); else - { censored = censored.Replace(word, CreateCensoredString(word, censorCharacter)); - } } return censored; @@ -338,10 +294,10 @@ private StringBuilder CensorStringByProfanityList(char censorCharacter, List FilterSwearListForCompleteWordsOnly(string sentence, List swearList) { - List filteredSwearList = new List(); - StringBuilder tracker = new StringBuilder(sentence); + var filteredSwearList = new List(); + var tracker = new StringBuilder(sentence); - foreach (string word in swearList.OrderByDescending(x => x.Length)) + foreach (var word in swearList.OrderByDescending(x => x.Length)) { (int, int, string)? result = (0, 0, ""); var multiWord = word.Split(' '); @@ -358,20 +314,13 @@ private List FilterSwearListForCompleteWordsOnly(string sentence, List FilterSwearListForCompleteWordsOnly(string sentence, List FilterWordListByAllowList(string[] words) { - List postAllowList = new List(); - foreach (string word in words) - { + var postAllowList = new List(); + foreach (var word in words) if (!string.IsNullOrEmpty(word)) - { if (!AllowList.Contains(word.ToLower(CultureInfo.InvariantCulture))) - { postAllowList.Add(word); - } - } - } return postAllowList; } @@ -403,43 +346,33 @@ private List FilterWordListByAllowList(string[] words) private static string ConvertWordListToSentence(List postAllowList) { // Reconstruct sentence excluding allow listed words. - string postAllowListSentence = string.Empty; + var postAllowListSentence = string.Empty; - foreach (string w in postAllowList) - { + foreach (var w in postAllowList) postAllowListSentence = postAllowListSentence + w + " "; - } - return postAllowListSentence; + return postAllowListSentence.Trim(); } private void AddMultiWordProfanities(List swearList, string postAllowListSentence) { swearList.AddRange( from string profanity in _profanities - where postAllowListSentence.ToLower(CultureInfo.InvariantCulture).Contains(profanity) + where Regex.IsMatch(postAllowListSentence.Trim().ToLower(CultureInfo.InvariantCulture), profanity) select profanity); } private static string CreateCensoredString(string word, char censorCharacter) { - string censoredWord = string.Empty; + var censoredWord = string.Empty; - for (int i = 0; i < word.Length; i++) - { + for (var i = 0; i < word.Length; i++) if (word[i] != ' ') - { censoredWord += censorCharacter; - } else - { censoredWord += ' '; - } - } return censoredWord; } - - } } \ No newline at end of file diff --git a/ProfanityFilter/ProfanityFilter/ProfanityFilter.csproj b/ProfanityFilter/ProfanityFilter/ProfanityFilter.csproj index 68edcdc..ff60f4a 100644 --- a/ProfanityFilter/ProfanityFilter/ProfanityFilter.csproj +++ b/ProfanityFilter/ProfanityFilter/ProfanityFilter.csproj @@ -1,7 +1,7 @@ - netstandard2.0 + net6.0 true Profanity.Detector 0.1.8 diff --git a/ProfanityFilter/ProfanityFilter/ProfanityList.cs b/ProfanityFilter/ProfanityFilter/ProfanityList.cs index 9f49e42..951e842 100644 --- a/ProfanityFilter/ProfanityFilter/ProfanityList.cs +++ b/ProfanityFilter/ProfanityFilter/ProfanityList.cs @@ -29,1621 +29,1723 @@ public partial class ProfanityBase { private readonly string[] _wordList = { - "2 girls 1 cup", - "2 girls one cup", - "2g1c", - "4r5e", - "5h1t", - "5hit", - "8===D", - "8==D", - "8=D", - "a$$", - "a$$hole", - "a_s_s", - "a2m", - "a55", - "a55hole", - "acrotomophilia", - "aeolus", - "ahole", - "alabama hot pocket", - "alaskan pipeline", - "anal", - "anal impaler", - "anal leakage", - "analprobe", - "anilingus", - "angrydragon", - "angry dragon", - "anus", - "apeshit", - "ar5e", - "arian", - "arrse", - "arse", - "arses", - "arsehole", - "aryan", - "ass", - "ass fuck", - "ass hole", - "assbag", - "assbandit", - "assbang", - "assbanged", - "assbanger", - "assbangs", - "assbite", - "assclown", - "asscock", - "asscracker", - "asses", - "assface", - "assfaces", - "assfuck", - "assfucker", - "ass-fucker", - "assfukka", - "assgoblin", - "assh0le", - "asshat", - "ass-hat", - "asshead", - "assho1e", - "asshole", - "assholes", - "asshopper", - "ass-jabber", - "assjacker", - "asslick", - "asslicker", - "assmaster", - "assmonkey", - "assmucus", - "assmunch", - "assmuncher", - "assnigger", - "asspirate", - "ass-pirate", - "assshit", - "assshole", - "asssucker", - "asswad", - "asswhole", - "asswipe", - "asswipes", - "auto erotic", - "autoerotic", - "axwound", - "axewound", - "axe wound", - "azazel", - "azz", - "b!tch", - "b00bs", - "b17ch", - "b1tch", - "babeland", - "baby batter", - "baby juice", - "ball gag", - "ball gravy", - "ball kicking", - "ball licking", - "ball sack", - "ball sucking", - "ballbag", - "balls", - "ballsack", - "bampot", - "bang (one's) box", - "bangbros", - "bareback", - "barely legal", - "barenaked", - "barf", - "bastard", - "bastardo", - "bastards", - "bastinado", - "batty boy", - "bawdy", - "bbw", - "bdsm", - "beaner", - "beaners", - "beardedclam", - "beastial", - "beastiality", - "beatch", - "beaver", - "beaver cleaver", - "beaver lips", - "beef curtain", - "beef curtains", - "beeyotch", - "bellend", - "bender", - "beotch", - "bescumber", - "bestial", - "bestiality", - "bi+ch", - "biatch", - "big black", - "big breasts", - "big knockers", - "big tits", - "bigtits", - "bimbo", - "bimbos", - "bint", - "birdlock", - "bitch", - "bitch tit", - "bitchass", - "bitched", - "bitcher", - "bitchers", - "bitches", - "bitchin", - "bitching", - "bitchtits", - "bitchy", - "black cock", - "blonde action", - "blonde on blonde action", - "bloodclaat", - "bloody", - "bloody hell", - "blow job", - "blow me", - "blow mud", - "blow your load", - "blowjob", - "blowjobs", - "blue waffle", - "blumpkin", - "bod", - "bodily", - "boink", - "boiolas", - "bollock", - "bollocks", - "bollok", - "bollox", - "bondage", - "boned", - "boner", - "boners", - "bong", - "boob", - "boobies", - "boobs", - "booby", - "booger", - "bookie", - "boong", - "booobs", - "boooobs", - "booooobs", - "booooooobs", - "bootee", - "bootie", - "booty", - "booty call", - "booze", - "boozer", - "boozy", - "bosom", - "bosomy", - "breasts", - "breeder", - "brotherfucker", - "brown showers", - "brunette action", - "buceta", - "bugger", - "bukkake", - "bull shit", - "bulldyke", - "bullet vibe", - "bullshit", - "bullshits", - "bullshitted", - "bullturds", - "bum", - "bum boy", - "bumblefuck", - "bumclat", - "bummer", - "buncombe", - "bung", - "bung hole", - "bunghole", - "bunny fucker", - "bust a load", - "busty", - "butt", - "butt fuck", - "butt plug", - "buttcheeks", - "buttfuck", - "buttfucka", - "buttfucker", - "butthole", - "buttmuch", - "buttmunch", - "butt-pirate", - "buttplug", - "c.0.c.k", - "c.o.c.k.", - "c.u.n.t", - "c0ck", - "c-0-c-k", - "c0cksucker", - "caca", - "cacafuego", - "cahone", - "camel toe", - "cameltoe", - "camgirl", - "camslut", - "camwhore", - "carpet muncher", - "carpetmuncher", - "cawk", - "cervix", - "chesticle", - "chi-chi man", - "chick with a dick", - "child-fucker", - "chinc", - "chincs", - "chink", - "chinky", - "choad", - "choade", - "choc ice", - "chocolate rosebuds", - "chode", - "chodes", - "chota bags", - "cipa", - "circlejerk", - "cl1t", - "cleveland steamer", - "climax", - "clit", - "clit licker", - "clitface", - "clitfuck", - "clitoris", - "clits", - "clitty", - "clitty litter", - "clover clamps", - "clunge", - "clusterfuck", - "cnut", - "cocain", - "cocaine", - "coccydynia", - "cock", - "c-o-c-k", - "cock pocket", - "cock snot", - "cock sucker", - "cockass", - "cockbite", - "cockblock", - "cockburger", - "cockeye", - "cockface", - "cockfucker", - "cockhead", - "cockholster", - "cockjockey", - "cockknocker", - "cockknoker", - "cocklump", - "cockmaster", - "cockmongler", - "cockmongruel", - "cockmonkey", - "cockmunch", - "cockmuncher", - "cocknose", - "cocknugget", - "cocks", - "cockshit", - "cocksmith", - "cocksmoke", - "cocksmoker", - "cocksniffer", - "cocksuck", - "cocksucked", - "cocksucker", - "cock-sucker", - "cocksuckers", - "cocksucking", - "cocksucks", - "cocksuka", - "cocksukka", - "cockwaffle", - "coffin dodger", - "coital", - "cok", - "cokmuncher", - "coksucka", - "commie", - "condom", - "coochie", - "coochy", - "coon", - "coonnass", - "coons", - "cooter", - "cop some wood", - "coprolagnia", - "coprophilia", - "corksucker", - "cornhole", - "corp whore", - "corpulent", - "cox", - "crabs", - "crack", - "cracker", - "crackwhore", - "crap", - "crappy", - "creampie", - "cretin", - "crikey", - "cripple", - "crotte", - "cum", - "cum chugger", - "cum dumpster", - "cum freak", - "cum guzzler", - "cumbubble", - "cumdump", - "cumdumpster", - "cumguzzler", - "cumjockey", - "cummer", - "cummin", - "cumming", - "cums", - "cumshot", - "cumshots", - "cumslut", - "cumstain", - "cumtart", - "cunilingus", - "cunillingus", - "cunnie", - "cunnilingus", - "cunny", - "cunt", - "c-u-n-t", - "cunt hair", - "cuntass", - "cuntbag", - "cuntface", - "cunthole", - "cunthunter", - "cuntlick", - "cuntlicker", - "cuntrag", - "cunts", - "cuntsicle", - "cuntslut", - "cunt-struck", - "cus", - "cut rope", - "cyalis", - "cyberfuc", - "cyberfuck", - "cyberfucked", - "cyberfucker", - "cyberfucking", - "d0ng", - "d0uch3", - "d0uche", - "d1ck", - "d1ld0", - "d1ldo", - "dago", - "dagos", - "dammit", - "damn", - "damned", - "damnit", - "darkie", - "darn", - "date rape", - "daterape", - "dawgie-style", - "deep throat", - "deepthroat", - "deggo", - "dendrophilia", - "dick", - "dick head", - "dick hole", - "dick shy", - "dickbag", - "dickbeaters", - "dickdipper", - "dickface", - "dickflipper", - "dickfuck", - "dickfucker", - "dickhead", - "dickheads", - "dickhole", - "dickish", - "dick-ish", - "dickjuice", - "dickmilk", - "dickmonger", - "dickripper", - "dicks", - "dicksipper", - "dickslap", - "dick-sneeze", - "dicksucker", - "dicksucking", - "dicktickler", - "dickwad", - "dickweasel", - "dickweed", - "dickwhipper", - "dickwod", - "dickzipper", - "diddle", - "dike", - "dildo", - "dildos", - "diligaf", - "dillweed", - "dimwit", - "dingle", - "dingleberries", - "dingleberry", - "dink", - "dinks", - "dipship", - "dirsa", - "dirty", - "dirty pillows", - "dirty sanchez", - "div", - "dlck", - "dog style", - "dog-fucker", - "doggie style", - "doggiestyle", - "doggie-style", - "doggin", - "dogging", - "doggy style", - "doggystyle", - "doggy-style", - "dolcett", - "domination", - "dominatrix", - "dommes", - "dong", - "donkey punch", - "donkeypunch", - "donkeyribber", - "doochbag", - "doofus", - "dookie", - "doosh", - "dopey", - "double dong", - "double penetration", - "doublelift", - "douch3", - "douche", - "douchebag", - "douchebags", - "douche-fag", - "douchewaffle", - "douchey", - "dp action", - "drunk", - "dry hump", - "duche", - "dumass", - "dumb ass", - "dumbass", - "dumbasses", - "dumbcunt", - "dumbfuck", - "dumbshit", - "dummy", - "dumshit", - "dvda", - "dyke", - "dykes", - "eat a dick", - "eat hair pie", - "eat my ass", - "ecchi", - "ejaculate", - "ejaculated", - "ejaculates", - "ejaculating", - "ejaculatings", - "ejaculation", - "ejakulate", - "erect", - "erection", - "erotic", - "erotism", - "escort", - "essohbee", - "eunuch", - "extacy", - "extasy", - "f u c k", - "f u c k e r", - "f.u.c.k", - "f_u_c_k", - "f4nny", - "facial", - "fack", - "fag", - "fagbag", - "fagfucker", - "fagg", - "fagged", - "fagging", - "faggit", - "faggitt", - "faggot", - "faggotcock", - "faggots", - "faggs", - "fagot", - "fagots", - "fags", - "fagtard", - "faig", - "faigt", - "fanny", - "fannybandit", - "fannyflaps", - "fannyfucker", - "fanyy", - "fart", - "fartknocker", - "fatass", - "fcuk", - "fcuker", - "fcuking", - "fecal", - "feck", - "fecker", - "feist", - "felch", - "felcher", - "felching", - "fellate", - "fellatio", - "feltch", - "feltcher", - "female squirting", - "femdom", - "fenian", - "fice", - "figging", - "fingerbang", - "fingerfuck", - "fingerfucked", - "fingerfucker", - "fingerfuckers", - "fingerfucking", - "fingerfucks", - "fingering", - "fist fuck", - "fisted", - "fistfuck", - "fistfucked", - "fistfucker", - "fistfuckers", - "fistfuckings", - "fistfucks", - "fisting", - "fisty", - "flamer", - "flange", - "flaps", - "fleshflute", - "flog the log", - "floozy", - "foad", - "foah", - "fondle", - "foobar", - "fook", - "fooker", - "foot fetish", - "footjob", - "foreskin", - "freex", - "frenchify", - "frigg", - "frigga", - "frotting", - "fubar", - "fuc", - "fuck", - "f-u-c-k", - "fuck buttons", - "fuck hole", - "fuck off", - "fuck puppet", - "fuck trophy", - "fuck yo mama", - "fuck you", - "fucka", - "fuckass", - "fuck-ass", - "fuckbag", - "fuck bag", - "fuck-bitch", - "fuckboy", - "fuckbrain", - "fuckbutt", - "fuckbutter", - "fucked", - "fuckedup", - "fucked up", - "fucker", - "fuckers", - "fuckersucker", - "fuckface", - "fuckhead", - "fuckheads", - "fuckhole", - "fuckin", - "fucking", - "fuckings", - "fuckme", - "fuck me", - "fuckmeat", - "fucknugget", - "fucknut", - "fucknutt", - "fuckoff", - "fucks", - "fuckstick", - "fucktard", - "fuck-tard", - "fucktards", - "fucktart", - "fucktoy", - "fucktwat", - "fuckup", - "fuckwad", - "fuckwhit", - "fuckwit", - "fuckwitt", - "fudge packer", - "fudgepacker", - "fudge-packer", - "fuk", - "fuker", - "fukker", - "fukkers", - "fukkin", - "fuks", - "fukwhit", - "fukwit", - "fuq", - "futanari", - "fux", - "fux0r", - "fvck", - "fxck", - "gae", - "gai", - "gang bang", - "gangbang", - "gang-bang", - "gangbanged", - "gangbangs", - "ganja", - "gash", - "gassy ass", - "gay sex", - "gayass", - "gaybob", - "gaydo", - "gayfuck", - "gayfuckist", - "gaylord", - "gays", - "gaysex", - "gaytard", - "gaywad", - "gender bender", - "genitals", - "gey", - "gfy", - "ghay", - "ghey", - "giant cock", - "gigolo", - "ginger", - "gippo", - "girl on", - "girl on top", - "girls gone wild", - "glans", - "goatcx", - "goatse", - "god", - "god damn", - "godamn", - "godamnit", - "goddam", - "god-dam", - "goddammit", - "goddamn", - "goddamned", - "god-damned", - "goddamnit", - "godsdamn", - "gokkun", - "golden shower", - "goldenshower", - "golliwog", - "gonad", - "gonads", - "goo girl", - "gooch", - "goodpoop", - "gook", - "gooks", - "goregasm", - "gringo", - "grope", - "group sex", - "gspot", - "g-spot", - "gtfo", - "guido", - "guro", - "h0m0", - "h0mo", - "ham flap", - "hand job", - "handjob", - "hard core", - "hard on", - "hardcore", - "hardcoresex", - "he11", - "hebe", - "heeb", - "hell", - "hemp", - "hentai", - "heroin", - "herp", - "herpes", - "herpy", - "heshe", - "he-she", - "hircismus", - "hitler", - "hiv", - "hoar", - "hoare", - "hobag", - "hoe", - "hoer", - "holy shit", - "hom0", - "homey", - "homo", - "homodumbshit", - "homoerotic", - "homoey", - "honkey", - "honky", - "hooch", - "hookah", - "hooker", - "hoor", - "hootch", - "hooter", - "hooters", - "hore", - "horniest", - "horny", - "hot carl", - "hot chick", - "hotsex", - "how to kill", - "how to murdep", - "how to murder", - "huge fat", - "hump", - "humped", - "humping", - "hun", - "hussy", - "hymen", - "iap", - "iberian slap", - "inbred", - "incest", - "injun", - "intercourse", - "jack off", - "jackass", - "jackasses", - "jackhole", - "jackoff", - "jack-off", - "jaggi", - "jagoff", - "jail bait", - "jailbait", - "jap", - "japs", - "jelly donut", - "jerk", - "jerk off", - "jerk0ff", - "jerkass", - "jerked", - "jerkoff", - "jerk-off", - "jigaboo", - "jiggaboo", - "jiggerboo", - "jism", - "jiz", - "jizm", - "jizz", - "jizzed", - "jock", - "juggs", - "jungle bunny", - "junglebunny", - "junkie", - "junky", - "kafir", - "kawk", - "kike", - "kikes", - "kill", - "kinbaku", - "kinkster", - "kinky", - "klan", - "knob", - "knob end", - "knobbing", - "knobead", - "knobed", - "knobend", - "knobhead", - "knobjocky", - "knobjokey", - "kock", - "kondum", - "kondums", - "kooch", - "kooches", - "kootch", - "kraut", - "kum", - "kummer", - "kumming", - "kums", - "kunilingus", - "kunja", - "kunt", - "kwif", - "kyke", - "l3i+ch", - "l3itch", - "labia", - "lameass", - "lardass", - "leather restraint", - "leather straight jacket", - "lech", - "lemon party", - "LEN", - "leper", - "lesbian", - "lesbians", - "lesbo", - "lesbos", - "lez", - "lezza/lesbo", - "lezzie", - "lmao", - "lmfao", - "loin", - "loins", - "lolita", - "looney", - "lovemaking", - "lube", - "lust", - "lusting", - "lusty", - "m0f0", - "m0fo", - "m45terbate", - "ma5terb8", - "ma5terbate", - "mafugly", - "make me come", - "male squirting", - "mams", - "masochist", - "massa", - "masterb8", - "masterbat*", - "masterbat3", - "masterbate", - "master-bate", - "masterbating", - "masterbation", - "masterbations", - "masturbate", - "masturbating", - "masturbation", - "maxi", - "mcfagget", - "menage a trois", - "menses", - "meth", - "m-fucking", - "mick", - "microphallus", - "middle finger", - "midget", - "milf", - "minge", - "minger", - "missionary position", - "mof0", - "mofo", - "mo-fo", - "molest", - "mong", - "moo moo foo foo", - "moolie", - "moron", - "mothafuck", - "mothafucka", - "mothafuckas", - "mothafuckaz", - "mothafucked", - "mothafucker", - "mothafuckers", - "mothafuckin", - "mothafucking", - "mothafuckings", - "mothafucks", - "mother fucker", - "motherfuck", - "motherfucka", - "motherfucked", - "motherfucker", - "motherfuckers", - "motherfuckin", - "motherfucking", - "motherfuckings", - "motherfuckka", - "motherfucks", - "mound of venus", - "mr hands", - "muff", - "muff diver", - "muff puff", - "muffdiver", - "muffdiving", - "munging", - "munter", - "murder", - "mutha", - "muthafecker", - "muthafuckker", - "muther", - "mutherfucker", - "n1gga", - "n1gger", - "naked", - "nambla", - "napalm", - "nappy", - "nawashi", - "nazi", - "nazism", - "need the dick", - "negro", - "neonazi", - "nig nog", - "nigaboo", - "nigg3r", - "nigg4h", - "nigga", - "niggah", - "niggas", - "niggaz", - "nigger", - "niggers", - "niggle", - "niglet", - "nig-nog", - "nimphomania", - "nimrod", - "ninny", - "ninnyhammer", - "nipple", - "nipples", - "nob", - "nob jokey", - "nobhead", - "nobjocky", - "nobjokey", - "nonce", - "nsfw images", - "nude", - "nudity", - "numbnuts", - "nut butter", - "nut sack", - "nutsack", - "nutter", - "nympho", - "nymphomania", - "octopussy", - "old bag", - "omg", - "omorashi", - "one cup two girls", - "1 cup 2 girls", - "one cup 2 girls", - "1 cup two girls", - "one guy one jar", - "1 guy one jar", - "one guy 1 jar", - "opiate", - "opium", - "orally", - "organ", - "orgasim", - "orgasims", - "orgasm", - "orgasmic", - "orgasms", - "orgies", - "orgy", - "ovary", - "ovum", - "ovums", - "p.u.s.s.y.", - "p.u.s.s.y", - "p0rn", - "paedophile", - "paki", - "panooch", - "pansy", - "pantie", - "panties", - "panty", - "pawn", - "pcp", - "pecker", - "peckerhead", - "pedo", - "pedobear", - "pedophile", - "pedophilia", - "pedophiliac", - "pee", - "peepee", - "pegging", - "penetrate", - "penetration", - "penial", - "penile", - "penis", - "penisbanger", - "penisfucker", - "penispuffer", - "perversion", - "phallic", - "phone sex", - "phonesex", - "phuck", - "phuk", - "phuked", - "phuking", - "phukked", - "phukking", - "phuks", - "phuq", - "piece of shit", - "pigfucker", - "pikey", - "pillowbiter", - "pimp", - "pimpis", - "pinko", - "piss", - "piss off", - "piss pig", - "pissed", - "pissed off", - "pisser", - "pissers", - "pisses", - "pissflaps", - "piss flaps", - "pissin", - "pissing", - "pissoff", - "piss-off", - "pisspig", - "playboy", - "pleasure chest", - "polack", - "pole smoker", - "polesmoker", - "pollock", - "ponyplay", - "poof", - "poon", - "poonani", - "poonany", - "poontang", - "poop", - "poop chute", - "poopchute", - "Poopuncher", - "porch monkey", - "porchmonkey", - "porn", - "porno", - "pornography", - "pornos", - "potty", - "prick", - "pricks", - "prickteaser", - "prig", - "prince albert piercing", - "prod", - "pron", - "prone bone", - "pronebone", - "prone-bone", - "prostitute", - "prude", - "psycho", - "pthc", - "pube", - "pubes", - "pubic", - "pubis", - "punani", - "punanny", - "punany", - "punkass", - "punky", - "punta", - "puss", - "pusse", - "pussi", - "pussies", - "pussy", - "pussy fart", - "pussy palace", - "pussylicking", - "pussypounder", - "pussys", - "pust", - "puto", - "queaf", - "queef", - "queer", - "queerbait", - "queerhole", - "queero", - "queers", - "quicky", - "quim", - "racy", - "raghead", - "raging boner", - "rape", - "raped", - "raper", - "rapey", - "raping", - "rapist", - "raunch", - "rectal", - "rectum", - "rectus", - "reefer", - "reetard", - "reich", - "renob", - "retard", - "retarded", - "reverse cowgirl", - "revue", - "rimjaw", - "rimjob", - "rimming", - "ritard", - "rosy palm", - "rosy palm and her 5 sisters", - "rtard", - "r-tard", - "rubbish", - "rum", - "rump", - "rumprammer", - "ruski", - "rusty trombone", - "s&m", - "s.h.i.t.", - "s.o.b.", - "s_h_i_t", - "s0b", - "sadism", - "sadist", - "sambo", - "sand nigger", - "sandbar", - "Sandler", - "sandnigger", - "sanger", - "santorum", - "sausage queen", - "scag", - "scantily", - "scat", - "schizo", - "schlong", - "scissoring", - "screw", - "screwed", - "screwing", - "scroat", - "scrog", - "scrot", - "scrote", - "scrotum", - "scrud", - "scum", - "seaman", - "seduce", - "seks", - "semen", - "sex", - "sexo", - "sexual", - "sexy", - "sh!+", - "sh!t", - "sh1t", - "s-h-1-t", - "shag", - "shagger", - "shaggin", - "shagging", - "shamedame", - "shaved beaver", - "shaved pussy", - "shemale", - "shi+", - "shibari", - "shirt lifter", - "shit", - "s-h-i-t", - "shit ass", - "shit fucker", - "shitass", - "shitbag", - "shitbagger", - "shitblimp", - "shitbrains", - "shitbreath", - "shitcanned", - "shitcunt", - "shitdick", - "shite", - "shiteater", - "shited", - "shitey", - "shitface", - "shitfaced", - "shitfuck", - "shitfull", - "shithead", - "shitheads", - "shithole", - "shithouse", - "shiting", - "shitings", - "shits", - "shitspitter", - "shitstain", - "shitt", - "shitted", - "shitter", - "shitters", - "shittier", - "shittiest", - "shitting", - "shittings", - "shitty", - "shiz", - "shiznit", - "shota", - "shrimping", - "sissy", - "skag", - "skank", - "skeet", - "skullfuck", - "slag", - "slanteye", - "slave", - "sleaze", - "sleazy", - "slope", - "slut", - "slut bucket", - "slutbag", - "slutdumper", - "slutkiss", - "sluts", - "smartass", - "smartasses", - "smeg", - "smegma", - "smut", - "smutty", - "snatch", - "sniper", - "snowballing", - "snuff", - "s-o-b", - "sod off", - "sodom", - "sodomize", - "sodomy", - "son of a bitch", - "son of a motherless goat", - "son of a whore", - "son-of-a-bitch", - "souse", - "soused", - "spac", - "spade", - "sperm", - "spic", - "spick", - "spik", - "spiks", - "splooge", - "splooge moose", - "spooge", - "spook", - "spread legs", - "spunk", - "stfu", - "stiffy", - "stoned", - "strap on", - "strapon", - "strappado", - "strip", - "strip club", - "stroke", - "stupid", - "style doggy", - "suck", - "suckass", - "sucked", - "sucking", - "sucks", - "suicide girls", - "sultry women", - "sumofabiatch", - "swastikav", - "swinger", - "t1t", - "t1tt1e5", - "t1tties", - "taff", - "taig", - "tainted love", - "taking the piss", - "tampon", - "tard", - "tart", - "taste my", - "tawdry", - "tea bagging", - "teabagging", - "teat", - "teets", - "teez", - "teste", - "testee", - "testes", - "testical", - "testicle", - "testis", - "threesome", - "throating", - "thrust", - "thug", - "thundercunt", - "thunder cunt", - "tied up", - "tight white", - "tinkle", - "tit", - "tit wank", - "titfuck", - "titi", - "tities", - "tits", - "titt", - "tittie5", - "tittiefucker", - "titties", - "titty", - "tittyfuck", - "tittyfucker", - "tittywank", - "titwank", - "toke", - "tongue in a", - "toots", - "topless", - "tosser", - "towelhead", - "tramp", - "tranny", - "trashy", - "tribadism", - "trumped", - "tub girl", - "tubgirl", - "turd", - "tush", - "tushy", - "tw4t", - "twat", - "twathead", - "twatlips", - "twats", - "twatty", - "twatting", - "twatwaffle", - "twink", - "twinkie", - "two fingers", - "two fingers with tongue", - "two girls 1 cup", - "two girls one cup", - "twunt", - "twunter", - "ugly", - "unclefucker", - "undies", - "undressing", - "unwed", - "upskirt", - "urethra play", - "urinal", - "urine", - "urophilia", - "uterus", - "uzi", - "v14gra", - "v1gra", - "vag", - "vagina", - "vajayjay", - "va-j-j", - "valium", - "venus mound", - "veqtable", - "viagra", - "vibrator", - "violet wand", - "virgin", - "vixen", - "vjayjay", - "vodka", - "vomit", - "vorarephilia", - "voyeur", - "vulgar", - "vulva", - "w00se", - "wad", - "wang", - "wank", - "wanker", - "wankjob", - "wanky", - "wazoo", - "wedgie", - "weed", - "weenie", - "weewee", - "weiner", - "weirdo", - "wench", - "wet dream", - "wetback", - "wh0re", - "wh0reface", - "white power", - "whiz", - "whoar", - "whoralicious", - "whore", - "whorealicious", - "whorebag", - "whored", - "whoreface", - "whorehopper", - "whorehouse", - "whores", - "whoring", - "wigger", - "willies", - "willy", - "window licker", - "wiseass", - "wiseasses", - "wog", - "womb", - "wop", - "wrapping men", - "wrinkled starfish", - "xrated", - "x-rated", - "xx", - "xxx", - "yaoi", - "yeasty", - "yellow showers", - "yid", - "yiffy", - "yobbo", - "zibbi", - "zoophilia", - "zubb", + "\b2 girls 1 cup\b", + "\b2 girls one cup\b", + "\b2g1c\b", + "\b4r5e\b", + "\b5h1t\b", + "\b5hit\b", + "\b8===D\b", + "\b8==D\b", + "\b8=D\b", + "\ba$$\b", + "\ba$$hole\b", + "\ba_s_s\b", + "\ba2m\b", + "\ba55\b", + "\ba55hole\b", + "\bacrotomophilia\b", + "\baeolus\b", + "\bahole\b", + "\balabama hot pocket\b", + "\balaskan pipeline\b", + "\banal\b", + "\banal impaler\b", + "\banal leakage\b", + "\banalprobe\b", + "\banilingus\b", + "\bangrydragon\b", + "\bangry dragon\b", + "\banus\b", + "\bapeshit\b", + "\bar5e\b", + "\barian\b", + "\barrse\b", + "\barse\b", + "\barses\b", + "\barsehole\b", + "\baryan\b", + "\bass\b", + "\bass fuck\b", + "\bass hole\b", + "\bassbag\b", + "\bassbandit\b", + "\bassbang\b", + "\bassbanged\b", + "\bassbanger\b", + "\bassbangs\b", + "\bassbite\b", + "\bassclown\b", + "\basscock\b", + "\basscracker\b", + "\basses\b", + "\bassface\b", + "\bassfaces\b", + "\bassfuck\b", + "\bassfucker\b", + "\bass-fucker\b", + "\bassfukka\b", + "\bassgoblin\b", + "\bassh0le\b", + "\basshat\b", + "\bass-hat\b", + "\basshead\b", + "\bassho1e\b", + "\basshole\b", + "\bassholes\b", + "\basshopper\b", + "\bass-jabber\b", + "\bassjacker\b", + "\basslick\b", + "\basslicker\b", + "\bassmaster\b", + "\bassmonkey\b", + "\bassmucus\b", + "\bassmunch\b", + "\bassmuncher\b", + "\bassnigger\b", + "\basspirate\b", + "\bass-pirate\b", + "\bassshit\b", + "\bassshole\b", + "\basssucker\b", + "\basswad\b", + "\basswhole\b", + "\basswipe\b", + "\basswipes\b", + "\bauto erotic\b", + "\bautoerotic\b", + "\baxwound\b", + "\baxewound\b", + "\baxe wound\b", + "\bazazel\b", + "\bazz\b", + "\bb!tch\b", + "\bb00bs\b", + "\bb17ch\b", + "\bb1tch\b", + "\bbabeland\b", + "\bbaby batter\b", + "\bbaby juice\b", + "\bball gag\b", + "\bball gravy\b", + "\bball kicking\b", + "\bball licking\b", + "\bball sack\b", + "\bball sucking\b", + "\bballbag\b", + "\bballs\b", + "\bballsack\b", + "\bbampot\b", + "\bbang (one's) box\b", + "\bbangbros\b", + "\bbareback\b", + "\bbarely legal\b", + "\bbarenaked\b", + "\bbarf\b", + "\bbastard\b", + "\bbastardo\b", + "\bbastards\b", + "\bbastinado\b", + "\bbatty boy\b", + "\bbawdy\b", + "\bbbw\b", + "\bbdsm\b", + "\bbeaner\b", + "\bbeaners\b", + "\bbeardedclam\b", + "\bbeastial\b", + "\bbeastiality\b", + "\bbeatch\b", + "\bbeaver\b", + "\bbeaver cleaver\b", + "\bbeaver lips\b", + "\bbeef curtain\b", + "\bbeef curtains\b", + "\bbeeyotch\b", + "\bbellend\b", + "\bbender\b", + "\bbeotch\b", + "\bbescumber\b", + "\bbestial\b", + "\bbestiality\b", + "\bbi+ch\b", + "\bbiatch\b", + "\bbig black\b", + "\bbig breasts\b", + "\bbig knockers\b", + "\bbig tits\b", + "\bbigtits\b", + "\bbimbo\b", + "\bbimbos\b", + "\bbint\b", + "\bbirdlock\b", + "\bbitch\b", + "\bbitch tit\b", + "\bbitchass\b", + "\bbitched\b", + "\bbitcher\b", + "\bbitchers\b", + "\bbitches\b", + "\bbitchin\b", + "\bbitching\b", + "\bbitchtits\b", + "\bbitchy\b", + "\bblack cock\b", + "\bblonde action\b", + "\bblonde on blonde action\b", + "\bbloodclaat\b", + "\bbloody\b", + "\bbloody hell\b", + "\bblow job\b", + "\bblow me\b", + "\bblow mud\b", + "\bblow your load\b", + "\bblowjob\b", + "\bblowjobs\b", + "\bblue waffle\b", + "\bblumpkin\b", + "\bbod\b", + "\bbodily\b", + "\bboink\b", + "\bboiolas\b", + "\bbollock\b", + "\bbollocks\b", + "\bbollok\b", + "\bbollox\b", + "\bbondage\b", + "\bboned\b", + "\bboner\b", + "\bboners\b", + "\bbong\b", + "\bboob\b", + "\bboobies\b", + "\bboobs\b", + "\bbooby\b", + "\bbooger\b", + "\bbookie\b", + "\bboong\b", + "\bbooobs\b", + "\bboooobs\b", + "\bbooooobs\b", + "\bbooooooobs\b", + "\bbootee\b", + "\bbootie\b", + "\bbooty\b", + "\bbooty call\b", + "\bbooze\b", + "\bboozer\b", + "\bboozy\b", + "\bbosom\b", + "\bbosomy\b", + "\bbreasts\b", + "\bbreeder\b", + "\bbrotherfucker\b", + "\bbrown showers\b", + "\bbrunette action\b", + "\bbuceta\b", + "\bbugger\b", + "\bbukkake\b", + "\bbull shit\b", + "\bbulldyke\b", + "\bbullet vibe\b", + "\bbullshit\b", + "\bbullshits\b", + "\bbullshitted\b", + "\bbullturds\b", + "\bbum\b", + "\bbum boy\b", + "\bbumblefuck\b", + "\bbumclat\b", + "\bbummer\b", + "\bbuncombe\b", + "\bbung\b", + "\bbung hole\b", + "\bbunghole\b", + "\bbunny fucker\b", + "\bbust a load\b", + "\bbusty\b", + "\bbutt\b", + "\bbutt fuck\b", + "\bbutt plug\b", + "\bbuttcheeks\b", + "\bbuttfuck\b", + "\bbuttfucka\b", + "\bbuttfucker\b", + "\bbutthole\b", + "\bbuttmuch\b", + "\bbuttmunch\b", + "\bbutt-pirate\b", + "\bbuttplug\b", + "\bc.0.c.k\b", + "\bc.o.c.k.\b", + "\bc.u.n.t\b", + "\bc0ck\b", + "\bc-0-c-k\b", + "\bc0cksucker\b", + "\bcaca\b", + "\bcacafuego\b", + "\bcahone\b", + "\bcamel toe\b", + "\bcameltoe\b", + "\bcamgirl\b", + "\bcamslut\b", + "\bcamwhore\b", + "\bcarpet muncher\b", + "\bcarpetmuncher\b", + "\bcawk\b", + "\bcervix\b", + "\bchesticle\b", + "\bchi-chi man\b", + "\bchick with a dick\b", + "\bchild-fucker\b", + "\bchinc\b", + "\bchincs\b", + "\bchink\b", + "\bchinky\b", + "\bchoad\b", + "\bchoade\b", + "\bchoc ice\b", + "\bchocolate rosebuds\b", + "\bchode\b", + "\bchodes\b", + "\bchota bags\b", + "\bcipa\b", + "\bcirclejerk\b", + "\bcl1t\b", + "\bcleveland steamer\b", + "\bclimax\b", + "\bclit\b", + "\bclit licker\b", + "\bclitface\b", + "\bclitfuck\b", + "\bclitoris\b", + "\bclits\b", + "\bclitty\b", + "\bclitty litter\b", + "\bclover clamps\b", + "\bclunge\b", + "\bclusterfuck\b", + "\bcnut\b", + "\bcocain\b", + "\bcocaine\b", + "\bcoccydynia\b", + "\bcock\b", + "\bc-o-c-k\b", + "\bcock pocket\b", + "\bcock snot\b", + "\bcock sucker\b", + "\bcockass\b", + "\bcockbite\b", + "\bcockblock\b", + "\bcockburger\b", + "\bcockeye\b", + "\bcockface\b", + "\bcockfucker\b", + "\bcockhead\b", + "\bcockholster\b", + "\bcockjockey\b", + "\bcockknocker\b", + "\bcockknoker\b", + "\bcocklump\b", + "\bcockmaster\b", + "\bcockmongler\b", + "\bcockmongruel\b", + "\bcockmonkey\b", + "\bcockmunch\b", + "\bcockmuncher\b", + "\bcocknose\b", + "\bcocknugget\b", + "\bcocks\b", + "\bcockshit\b", + "\bcocksmith\b", + "\bcocksmoke\b", + "\bcocksmoker\b", + "\bcocksniffer\b", + "\bcocksuck\b", + "\bcocksucked\b", + "\bcocksucker\b", + "\bcock-sucker\b", + "\bcocksuckers\b", + "\bcocksucking\b", + "\bcocksucks\b", + "\bcocksuka\b", + "\bcocksukka\b", + "\bcockwaffle\b", + "\bcoffin dodger\b", + "\bcoital\b", + "\bcok\b", + "\bcokmuncher\b", + "\bcoksucka\b", + "\bcommie\b", + "\bcondom\b", + "\bcoochie\b", + "\bcoochy\b", + "\bcoon\b", + "\bcoonnass\b", + "\bcoons\b", + "\bcooter\b", + "\bcop some wood\b", + "\bcoprolagnia\b", + "\bcoprophilia\b", + "\bcorksucker\b", + "\bcornhole\b", + "\bcorp whore\b", + "\bcorpulent\b", + "\bcox\b", + "\bcrabs\b", + "\bcrack\b", + "\bcracker\b", + "\bcrackwhore\b", + "\bcrap\b", + "\bcrappy\b", + "\bcreampie\b", + "\bcretin\b", + "\bcrikey\b", + "\bcripple\b", + "\bcrotte\b", + "\bcum\b", + "\bcum chugger\b", + "\bcum dumpster\b", + "\bcum freak\b", + "\bcum guzzler\b", + "\bcumbubble\b", + "\bcumdump\b", + "\bcumdumpster\b", + "\bcumguzzler\b", + "\bcumjockey\b", + "\bcummer\b", + "\bcummin\b", + "\bcumming\b", + "\bcums\b", + "\bcumshot\b", + "\bcumshots\b", + "\bcumslut\b", + "\bcumstain\b", + "\bcumtart\b", + "\bcunilingus\b", + "\bcunillingus\b", + "\bcunnie\b", + "\bcunnilingus\b", + "\bcunny\b", + "\bcunt\b", + "\bc-u-n-t\b", + "\bcunt hair\b", + "\bcuntass\b", + "\bcuntbag\b", + "\bcuntface\b", + "\bcunthole\b", + "\bcunthunter\b", + "\bcuntlick\b", + "\bcuntlicker\b", + "\bcuntrag\b", + "\bcunts\b", + "\bcuntsicle\b", + "\bcuntslut\b", + "\bcunt-struck\b", + "\bcus\b", + "\bcut rope\b", + "\bcyalis\b", + "\bcyberfuc\b", + "\bcyberfuck\b", + "\bcyberfucked\b", + "\bcyberfucker\b", + "\bcyberfucking\b", + "\bd0ng\b", + "\bd0uch3\b", + "\bd0uche\b", + "\bd1ck\b", + "\bd1ld0\b", + "\bd1ldo\b", + "\bdago\b", + "\bdagos\b", + "\bdammit\b", + "\bdamn\b", + "\bdamned\b", + "\bdamnit\b", + "\bdarkie\b", + "\bdarn\b", + "\bdate rape\b", + "\bdaterape\b", + "\bdawgie-style\b", + "\bdeep throat\b", + "\bdeepthroat\b", + "\bdeggo\b", + "\bdendrophilia\b", + "\bdick\b", + "\bdick head\b", + "\bdick hole\b", + "\bdick shy\b", + "\bdickbag\b", + "\bdickbeaters\b", + "\bdickdipper\b", + "\bdickface\b", + "\bdickflipper\b", + "\bdickfuck\b", + "\bdickfucker\b", + "\bdickhead\b", + "\bdickheads\b", + "\bdickhole\b", + "\bdickish\b", + "\bdick-ish\b", + "\bdickjuice\b", + "\bdickmilk\b", + "\bdickmonger\b", + "\bdickripper\b", + "\bdicks\b", + "\bdicksipper\b", + "\bdickslap\b", + "\bdick-sneeze\b", + "\bdicksucker\b", + "\bdicksucking\b", + "\bdicktickler\b", + "\bdickwad\b", + "\bdickweasel\b", + "\bdickweed\b", + "\bdickwhipper\b", + "\bdickwod\b", + "\bdickzipper\b", + "\bdiddle\b", + "\bdike\b", + "\bdildo\b", + "\bdildos\b", + "\bdiligaf\b", + "\bdillweed\b", + "\bdimwit\b", + "\bdingle\b", + "\bdingleberries\b", + "\bdingleberry\b", + "\bdink\b", + "\bdinks\b", + "\bdipship\b", + "\bdirsa\b", + "\bdirty\b", + "\bdirty pillows\b", + "\bdirty sanchez\b", + "\bdiv\b", + "\bdlck\b", + "\bdog style\b", + "\bdog-fucker\b", + "\bdoggie style\b", + "\bdoggiestyle\b", + "\bdoggie-style\b", + "\bdoggin\b", + "\bdogging\b", + "\bdoggy style\b", + "\bdoggystyle\b", + "\bdoggy-style\b", + "\bdolcett\b", + "\bdomination\b", + "\bdominatrix\b", + "\bdommes\b", + "\bdong\b", + "\bdonkey punch\b", + "\bdonkeypunch\b", + "\bdonkeyribber\b", + "\bdoochbag\b", + "\bdoofus\b", + "\bdookie\b", + "\bdoosh\b", + "\bdopey\b", + "\bdouble dong\b", + "\bdouble penetration\b", + "\bdoublelift\b", + "\bdouch3\b", + "\bdouche\b", + "\bdouchebag\b", + "\bdouchebags\b", + "\bdouche-fag\b", + "\bdouchewaffle\b", + "\bdouchey\b", + "\bdp action\b", + "\bdrunk\b", + "\bdry hump\b", + "\bduche\b", + "\bdumass\b", + "\bdumb ass\b", + "\bdumbass\b", + "\bdumbasses\b", + "\bdumbcunt\b", + "\bdumbfuck\b", + "\bdumbshit\b", + "\bdummy\b", + "\bdumshit\b", + "\bdvda\b", + "\bdyke\b", + "\bdykes\b", + "\beat a dick\b", + "\beat hair pie\b", + "\beat my ass\b", + "\becchi\b", + "\bejaculate\b", + "\bejaculated\b", + "\bejaculates\b", + "\bejaculating\b", + "\bejaculatings\b", + "\bejaculation\b", + "\bejakulate\b", + "\berect\b", + "\berection\b", + "\berotic\b", + "\berotism\b", + "\bescort\b", + "\bessohbee\b", + "\beunuch\b", + "\bextacy\b", + "\bextasy\b", + "\bf u c k\b", + "\bf u c k e r\b", + "\bf.u.c.k\b", + "\bf_u_c_k\b", + "\bf4nny\b", + "\bfacial\b", + "\bfack\b", + "\bfag\b", + "\bfagbag\b", + "\bfagfucker\b", + "\bfagg\b", + "\bfagged\b", + "\bfagging\b", + "\bfaggit\b", + "\bfaggitt\b", + "\bfaggot\b", + "\bfaggotcock\b", + "\bfaggots\b", + "\bfaggs\b", + "\bfagot\b", + "\bfagots\b", + "\bfags\b", + "\bfagtard\b", + "\bfaig\b", + "\bfaigt\b", + "\bfanny\b", + "\bfannybandit\b", + "\bfannyflaps\b", + "\bfannyfucker\b", + "\bfanyy\b", + "\bfart\b", + "\bfartknocker\b", + "\bfatass\b", + "\bfcuk\b", + "\bfcuker\b", + "\bfcuking\b", + "\bfecal\b", + "\bfeck\b", + "\bfecker\b", + "\bfeist\b", + "\bfelch\b", + "\bfelcher\b", + "\bfelching\b", + "\bfellate\b", + "\bfellatio\b", + "\bfeltch\b", + "\bfeltcher\b", + "\bfemale squirting\b", + "\bfemdom\b", + "\bfenian\b", + "\bfice\b", + "\bfigging\b", + "\bfingerbang\b", + "\bfingerfuck\b", + "\bfingerfucked\b", + "\bfingerfucker\b", + "\bfingerfuckers\b", + "\bfingerfucking\b", + "\bfingerfucks\b", + "\bfingering\b", + "\bfist fuck\b", + "\bfisted\b", + "\bfistfuck\b", + "\bfistfucked\b", + "\bfistfucker\b", + "\bfistfuckers\b", + "\bfistfuckings\b", + "\bfistfucks\b", + "\bfisting\b", + "\bfisty\b", + "\bflamer\b", + "\bflange\b", + "\bflaps\b", + "\bfleshflute\b", + "\bflog the log\b", + "\bfloozy\b", + "\bfoad\b", + "\bfoah\b", + "\bfondle\b", + "\bfoobar\b", + "\bfook\b", + "\bfooker\b", + "\bfoot fetish\b", + "\bfootjob\b", + "\bforeskin\b", + "\bfreex\b", + "\bfrenchify\b", + "\bfrigg\b", + "\bfrigga\b", + "\bfrotting\b", + "\bfubar\b", + "\bfuc\b", + "\bfuck\b", + "\bf-u-c-k\b", + "\bfuck buttons\b", + "\bfuck hole\b", + "\bfuck off\b", + "\bfuck puppet\b", + "\bfuck trophy\b", + "\bfuck yo mama\b", + "\bfuck you\b", + "\bfucka\b", + "\bfuckass\b", + "\bfuck-ass\b", + "\bfuckbag\b", + "\bfuck bag\b", + "\bfuck-bitch\b", + "\bfuckboy\b", + "\bfuckbrain\b", + "\bfuckbutt\b", + "\bfuckbutter\b", + "\bfucked\b", + "\bfuckedup\b", + "\bfucked up\b", + "\bfucker\b", + "\bfuckers\b", + "\bfuckersucker\b", + "\bfuckface\b", + "\bfuckhead\b", + "\bfuckheads\b", + "\bfuckhole\b", + "\bfuckin\b", + "\bfucking\b", + "\bfuckings\b", + "\bfuckme\b", + "\bfuck me\b", + "\bfuckmeat\b", + "\bfucknugget\b", + "\bfucknut\b", + "\bfucknutt\b", + "\bfuckoff\b", + "\bfucks\b", + "\bfuckstick\b", + "\bfucktard\b", + "\bfuck-tard\b", + "\bfucktards\b", + "\bfucktart\b", + "\bfucktoy\b", + "\bfucktwat\b", + "\bfuckup\b", + "\bfuckwad\b", + "\bfuckwhit\b", + "\bfuckwit\b", + "\bfuckwitt\b", + "\bfudge packer\b", + "\bfudgepacker\b", + "\bfudge-packer\b", + "\bfuk\b", + "\bfuker\b", + "\bfukker\b", + "\bfukkers\b", + "\bfukkin\b", + "\bfuks\b", + "\bfukwhit\b", + "\bfukwit\b", + "\bfuq\b", + "\bfutanari\b", + "\bfux\b", + "\bfux0r\b", + "\bfvck\b", + "\bfxck\b", + "\bgae\b", + "\bgai\b", + "\bgang bang\b", + "\bgangbang\b", + "\bgang-bang\b", + "\bgangbanged\b", + "\bgangbangs\b", + "\bganja\b", + "\bgash\b", + "\bgassy ass\b", + "\bgay sex\b", + "\bgayass\b", + "\bgaybob\b", + "\bgaydo\b", + "\bgayfuck\b", + "\bgayfuckist\b", + "\bgaylord\b", + "\bgays\b", + "\bgaysex\b", + "\bgaytard\b", + "\bgaywad\b", + "\bgender bender\b", + "\bgenitals\b", + "\bgey\b", + "\bgfy\b", + "\bghay\b", + "\bghey\b", + "\bgiant cock\b", + "\bgigolo\b", + "\bginger\b", + "\bgippo\b", + "\bgirl on\b", + "\bgirl on top\b", + "\bgirls gone wild\b", + "\bglans\b", + "\bgoatcx\b", + "\bgoatse\b", + "\bgod\b", + "\bgod damn\b", + "\bgodamn\b", + "\bgodamnit\b", + "\bgoddam\b", + "\bgod-dam\b", + "\bgoddammit\b", + "\bgoddamn\b", + "\bgoddamned\b", + "\bgod-damned\b", + "\bgoddamnit\b", + "\bgodsdamn\b", + "\bgokkun\b", + "\bgolden shower\b", + "\bgoldenshower\b", + "\bgolliwog\b", + "\bgonad\b", + "\bgonads\b", + "\bgoo girl\b", + "\bgooch\b", + "\bgoodpoop\b", + "\bgook\b", + "\bgooks\b", + "\bgoregasm\b", + "\bgringo\b", + "\bgrope\b", + "\bgroup sex\b", + "\bgspot\b", + "\bg-spot\b", + "\bgtfo\b", + "\bguido\b", + "\bguro\b", + "\bh0m0\b", + "\bh0mo\b", + "\bham flap\b", + "\bhand job\b", + "\bhandjob\b", + "\bhard core\b", + "\bhard on\b", + "\bhardcore\b", + "\bhardcoresex\b", + "\bhe11\b", + "\bhebe\b", + "\bheeb\b", + "\bhell\b", + "\bhemp\b", + "\bhentai\b", + "\bheroin\b", + "\bherp\b", + "\bherpes\b", + "\bherpy\b", + "\bheshe\b", + "\bhe-she\b", + "\bhircismus\b", + "\bhitler\b", + "\bhiv\b", + "\bhoar\b", + "\bhoare\b", + "\bhobag\b", + "\bhoe\b", + "\bhoer\b", + "\bholy shit\b", + "\bhom0\b", + "\bhomey\b", + "\bhomo\b", + "\bhomodumbshit\b", + "\bhomoerotic\b", + "\bhomoey\b", + "\bhonkey\b", + "\bhonky\b", + "\bhooch\b", + "\bhookah\b", + "\bhooker\b", + "\bhoor\b", + "\bhootch\b", + "\bhooter\b", + "\bhooters\b", + "\bhore\b", + "\bhorniest\b", + "\bhorny\b", + "\bhot carl\b", + "\bhot chick\b", + "\bhotsex\b", + "\bhow to kill\b", + "\bhow to murdep\b", + "\bhow to murder\b", + "\bhuge fat\b", + "\bhump\b", + "\bhumped\b", + "\bhumping\b", + "\bhun\b", + "\bhussy\b", + "\bhymen\b", + "\biap\b", + "\biberian slap\b", + "\binbred\b", + "\bincest\b", + "\binjun\b", + "\bintercourse\b", + "\bjack off\b", + "\bjackass\b", + "\bjackasses\b", + "\bjackhole\b", + "\bjackoff\b", + "\bjack-off\b", + "\bjaggi\b", + "\bjagoff\b", + "\bjail bait\b", + "\bjailbait\b", + "\bjap\b", + "\bjaps\b", + "\bjelly donut\b", + "\bjerk\b", + "\bjerk off\b", + "\bjerk0ff\b", + "\bjerkass\b", + "\bjerked\b", + "\bjerkoff\b", + "\bjerk-off\b", + "\bjigaboo\b", + "\bjiggaboo\b", + "\bjiggerboo\b", + "\bjism\b", + "\bjiz\b", + "\bjizm\b", + "\bjizz\b", + "\bjizzed\b", + "\bjock\b", + "\bjuggs\b", + "\bjungle bunny\b", + "\bjunglebunny\b", + "\bjunkie\b", + "\bjunky\b", + "\bkafir\b", + "\bkawk\b", + "\bkike\b", + "\bkikes\b", + "\bkill\b", + "\bkinbaku\b", + "\bkinkster\b", + "\bkinky\b", + "\bklan\b", + "\bknob\b", + "\bknob end\b", + "\bknobbing\b", + "\bknobead\b", + "\bknobed\b", + "\bknobend\b", + "\bknobhead\b", + "\bknobjocky\b", + "\bknobjokey\b", + "\bkock\b", + "\bkondum\b", + "\bkondums\b", + "\bkooch\b", + "\bkooches\b", + "\bkootch\b", + "\bkraut\b", + "\bkum\b", + "\bkummer\b", + "\bkumming\b", + "\bkums\b", + "\bkunilingus\b", + "\bkunja\b", + "\bkunt\b", + "\bkwif\b", + "\bkyke\b", + "\bl3i+ch\b", + "\bl3itch\b", + "\blabia\b", + "\blameass\b", + "\blardass\b", + "\bleather restraint\b", + "\bleather straight jacket\b", + "\blech\b", + "\blemon party\b", + "\bLEN\b", + "\bleper\b", + "\blesbian\b", + "\blesbians\b", + "\blesbo\b", + "\blesbos\b", + "\blez\b", + "\blezza/lesbo\b", + "\blezzie\b", + "\blmao\b", + "\blmfao\b", + "\bloin\b", + "\bloins\b", + "\blolita\b", + "\blooney\b", + "\blovemaking\b", + "\blube\b", + "\blust\b", + "\blusting\b", + "\blusty\b", + "\bm0f0\b", + "\bm0fo\b", + "\bm45terbate\b", + "\bma5terb8\b", + "\bma5terbate\b", + "\bmafugly\b", + "\bmake me come\b", + "\bmale squirting\b", + "\bmams\b", + "\bmasochist\b", + "\bmassa\b", + "\bmasterb8\b", + "\bmasterbat*\b", + "\bmasterbat3\b", + "\bmasterbate\b", + "\bmaster-bate\b", + "\bmasterbating\b", + "\bmasterbation\b", + "\bmasterbations\b", + "\bmasturbate\b", + "\bmasturbating\b", + "\bmasturbation\b", + "\bmaxi\b", + "\bmcfagget\b", + "\bmenage a trois\b", + "\bmenses\b", + "\bmeth\b", + "\bm-fucking\b", + "\bmick\b", + "\bmicrophallus\b", + "\bmiddle finger\b", + "\bmidget\b", + "\bmilf\b", + "\bminge\b", + "\bminger\b", + "\bmissionary position\b", + "\bmof0\b", + "\bmofo\b", + "\bmo-fo\b", + "\bmolest\b", + "\bmong\b", + "\bmoo moo foo foo\b", + "\bmoolie\b", + "\bmoron\b", + "\bmothafuck\b", + "\bmothafucka\b", + "\bmothafuckas\b", + "\bmothafuckaz\b", + "\bmothafucked\b", + "\bmothafucker\b", + "\bmothafuckers\b", + "\bmothafuckin\b", + "\bmothafucking\b", + "\bmothafuckings\b", + "\bmothafucks\b", + "\bmother fucker\b", + "\bmotherfuck\b", + "\bmotherfucka\b", + "\bmotherfucked\b", + "\bmotherfucker\b", + "\bmotherfuckers\b", + "\bmotherfuckin\b", + "\bmotherfucking\b", + "\bmotherfuckings\b", + "\bmotherfuckka\b", + "\bmotherfucks\b", + "\bmound of venus\b", + "\bmr hands\b", + "\bmuff\b", + "\bmuff diver\b", + "\bmuff puff\b", + "\bmuffdiver\b", + "\bmuffdiving\b", + "\bmunging\b", + "\bmunter\b", + "\bmurder\b", + "\bmutha\b", + "\bmuthafecker\b", + "\bmuthafuckker\b", + "\bmuther\b", + "\bmutherfucker\b", + "\bn1gga\b", + "\bn1gger\b", + "\bnaked\b", + "\bnambla\b", + "\bnapalm\b", + "\bnappy\b", + "\bnawashi\b", + "\bnazi\b", + "\bnazism\b", + "\bneed the dick\b", + "\bnegro\b", + "\bneonazi\b", + "\bnig nog\b", + "\bnigaboo\b", + "\bnigg3r\b", + "\bnigg4h\b", + "\bnigga\b", + "\bniggah\b", + "\bniggas\b", + "\bniggaz\b", + "\bnigger\b", + "\bniggers\b", + "\bniggle\b", + "\bniglet\b", + "\bnig-nog\b", + "\bnimphomania\b", + "\bnimrod\b", + "\bninny\b", + "\bninnyhammer\b", + "\bnipple\b", + "\bnipples\b", + "\bnob\b", + "\bnob jokey\b", + "\bnobhead\b", + "\bnobjocky\b", + "\bnobjokey\b", + "\bnonce\b", + "\bnsfw images\b", + "\bnude\b", + "\bnudity\b", + "\bnumbnuts\b", + "\bnut butter\b", + "\bnut sack\b", + "\bnutsack\b", + "\bnutter\b", + "\bnympho\b", + "\bnymphomania\b", + "\boctopussy\b", + "\bold bag\b", + "\bomg\b", + "\bomorashi\b", + "\bone cup two girls\b", + "\b1 cup 2 girls\b", + "\bone cup 2 girls\b", + "\b1 cup two girls\b", + "\bone guy one jar\b", + "\b1 guy one jar\b", + "\bone guy 1 jar\b", + "\bopiate\b", + "\bopium\b", + "\borally\b", + "\borgan\b", + "\borgasim\b", + "\borgasims\b", + "\borgasm\b", + "\borgasmic\b", + "\borgasms\b", + "\borgies\b", + "\borgy\b", + "\bovary\b", + "\bovum\b", + "\bovums\b", + "\bp.u.s.s.y.\b", + "\bp.u.s.s.y\b", + "\bp0rn\b", + "\bpaedophile\b", + "\bpaki\b", + "\bpanooch\b", + "\bpansy\b", + "\bpantie\b", + "\bpanties\b", + "\bpanty\b", + "\bpawn\b", + "\bpcp\b", + "\bpecker\b", + "\bpeckerhead\b", + "\bpedo\b", + "\bpedobear\b", + "\bpedophile\b", + "\bpedophilia\b", + "\bpedophiliac\b", + "\bpee\b", + "\bpeepee\b", + "\bpegging\b", + "\bpenetrate\b", + "\bpenetration\b", + "\bpenial\b", + "\bpenile\b", + "\bpenis\b", + "\bpenisbanger\b", + "\bpenisfucker\b", + "\bpenispuffer\b", + "\bperversion\b", + "\bphallic\b", + "\bphone sex\b", + "\bphonesex\b", + "\bphuck\b", + "\bphuk\b", + "\bphuked\b", + "\bphuking\b", + "\bphukked\b", + "\bphukking\b", + "\bphuks\b", + "\bphuq\b", + "\bpiece of shit\b", + "\bpigfucker\b", + "\bpikey\b", + "\bpillowbiter\b", + "\bpimp\b", + "\bpimpis\b", + "\bpinko\b", + "\bpiss\b", + "\bpiss off\b", + "\bpiss pig\b", + "\bpissed\b", + "\bpissed off\b", + "\bpisser\b", + "\bpissers\b", + "\bpisses\b", + "\bpissflaps\b", + "\bpiss flaps\b", + "\bpissin\b", + "\bpissing\b", + "\bpissoff\b", + "\bpiss-off\b", + "\bpisspig\b", + "\bplayboy\b", + "\bpleasure chest\b", + "\bpolack\b", + "\bpole smoker\b", + "\bpolesmoker\b", + "\bpollock\b", + "\bponyplay\b", + "\bpoof\b", + "\bpoon\b", + "\bpoonani\b", + "\bpoonany\b", + "\bpoontang\b", + "\bpoop\b", + "\bpoop chute\b", + "\bpoopchute\b", + "\bPoopuncher\b", + "\bporch monkey\b", + "\bporchmonkey\b", + "\bporn\b", + "\bporno\b", + "\bpornography\b", + "\bpornos\b", + "\bpotty\b", + "\bprick\b", + "\bpricks\b", + "\bprickteaser\b", + "\bprig\b", + "\bprince albert piercing\b", + "\bprod\b", + "\bpron\b", + "\bprone bone\b", + "\bpronebone\b", + "\bprone-bone\b", + "\bprostitute\b", + "\bprude\b", + "\bpsycho\b", + "\bpthc\b", + "\bpube\b", + "\bpubes\b", + "\bpubic\b", + "\bpubis\b", + "\bpunani\b", + "\bpunanny\b", + "\bpunany\b", + "\bpunkass\b", + "\bpunky\b", + "\bpunta\b", + "\bpuss\b", + "\bpusse\b", + "\bpussi\b", + "\bpussies\b", + "\bpussy\b", + "\bpussy fart\b", + "\bpussy palace\b", + "\bpussylicking\b", + "\bpussypounder\b", + "\bpussys\b", + "\bpust\b", + "\bputo\b", + "\bqueaf\b", + "\bqueef\b", + "\bqueer\b", + "\bqueerbait\b", + "\bqueerhole\b", + "\bqueero\b", + "\bqueers\b", + "\bquicky\b", + "\bquim\b", + "\bracy\b", + "\braghead\b", + "\braging boner\b", + "\brape\b", + "\braped\b", + "\braper\b", + "\brapey\b", + "\braping\b", + "\brapist\b", + "\braunch\b", + "\brectal\b", + "\brectum\b", + "\brectus\b", + "\breefer\b", + "\breetard\b", + "\breich\b", + "\brenob\b", + "\bretard\b", + "\bretarded\b", + "\breverse cowgirl\b", + "\brevue\b", + "\brimjaw\b", + "\brimjob\b", + "\brimming\b", + "\britard\b", + "\brosy palm\b", + "\brosy palm and her 5 sisters\b", + "\brtard\b", + "\br-tard\b", + "\brubbish\b", + "\brum\b", + "\brump\b", + "\brumprammer\b", + "\bruski\b", + "\brusty trombone\b", + "\bs&m\b", + "\bs.h.i.t.\b", + "\bs.o.b.\b", + "\bs_h_i_t\b", + "\bs0b\b", + "\bsadism\b", + "\bsadist\b", + "\bsambo\b", + "\bsand nigger\b", + "\bsandbar\b", + "\bSandler\b", + "\bsandnigger\b", + "\bsanger\b", + "\bsantorum\b", + "\bsausage queen\b", + "\bscag\b", + "\bscantily\b", + "\bscat\b", + "\bschizo\b", + "\bschlong\b", + "\bscissoring\b", + "\bscrew\b", + "\bscrewed\b", + "\bscrewing\b", + "\bscroat\b", + "\bscrog\b", + "\bscrot\b", + "\bscrote\b", + "\bscrotum\b", + "\bscrud\b", + "\bscum\b", + "\bseaman\b", + "\bseduce\b", + "\bseks\b", + "\bsemen\b", + "\bsex\b", + "\bsexo\b", + "\bsexual\b", + "\bsexy\b", + "\bsh!+\b", + "\bsh!t\b", + "\bsh1t\b", + "\bs-h-1-t\b", + "\bshag\b", + "\bshagger\b", + "\bshaggin\b", + "\bshagging\b", + "\bshamedame\b", + "\bshaved beaver\b", + "\bshaved pussy\b", + "\bshemale\b", + "\bshi+\b", + "\bshibari\b", + "\bshirt lifter\b", + "\bshit\b", + "\bs-h-i-t\b", + "\bshit ass\b", + "\bshit fucker\b", + "\bshitass\b", + "\bshitbag\b", + "\bshitbagger\b", + "\bshitblimp\b", + "\bshitbrains\b", + "\bshitbreath\b", + "\bshitcanned\b", + "\bshitcunt\b", + "\bshitdick\b", + "\bshite\b", + "\bshiteater\b", + "\bshited\b", + "\bshitey\b", + "\bshitface\b", + "\bshitfaced\b", + "\bshitfuck\b", + "\bshitfull\b", + "\bshithead\b", + "\bshitheads\b", + "\bshithole\b", + "\bshithouse\b", + "\bshiting\b", + "\bshitings\b", + "\bshits\b", + "\bshitspitter\b", + "\bshitstain\b", + "\bshitt\b", + "\bshitted\b", + "\bshitter\b", + "\bshitters\b", + "\bshittier\b", + "\bshittiest\b", + "\bshitting\b", + "\bshittings\b", + "\bshitty\b", + "\bshiz\b", + "\bshiznit\b", + "\bshota\b", + "\bshrimping\b", + "\bsissy\b", + "\bskag\b", + "\bskank\b", + "\bskeet\b", + "\bskullfuck\b", + "\bslag\b", + "\bslanteye\b", + "\bslave\b", + "\bsleaze\b", + "\bsleazy\b", + "\bslope\b", + "\bslut\b", + "\bslut bucket\b", + "\bslutbag\b", + "\bslutdumper\b", + "\bslutkiss\b", + "\bsluts\b", + "\bsmartass\b", + "\bsmartasses\b", + "\bsmeg\b", + "\bsmegma\b", + "\bsmut\b", + "\bsmutty\b", + "\bsnatch\b", + "\bsniper\b", + "\bsnowballing\b", + "\bsnuff\b", + "\bs-o-b\b", + "\bsod off\b", + "\bsodom\b", + "\bsodomize\b", + "\bsodomy\b", + "\bson of a bitch\b", + "\bson of a motherless goat\b", + "\bson of a whore\b", + "\bson-of-a-bitch\b", + "\bsouse\b", + "\bsoused\b", + "\bspac\b", + "\bspade\b", + "\bsperm\b", + "\bspic\b", + "\bspick\b", + "\bspik\b", + "\bspiks\b", + "\bsplooge\b", + "\bsplooge moose\b", + "\bspooge\b", + "\bspook\b", + "\bspread legs\b", + "\bspunk\b", + "\bstfu\b", + "\bstiffy\b", + "\bstoned\b", + "\bstrap on\b", + "\bstrapon\b", + "\bstrappado\b", + "\bstrip\b", + "\bstrip club\b", + "\bstroke\b", + "\bstupid\b", + "\bstyle doggy\b", + "\bsuck\b", + "\bsuckass\b", + "\bsucked\b", + "\bsucking\b", + "\bsucks\b", + "\bsuicide girls\b", + "\bsultry women\b", + "\bsumofabiatch\b", + "\bswastikav\b", + "\bswinger\b", + "\bt1t\b", + "\bt1tt1e5\b", + "\bt1tties\b", + "\btaff\b", + "\btaig\b", + "\btainted love\b", + "\btaking the piss\b", + "\btampon\b", + "\btard\b", + "\btart\b", + "\btaste my\b", + "\btawdry\b", + "\btea bagging\b", + "\bteabagging\b", + "\bteat\b", + "\bteets\b", + "\bteez\b", + "\bteste\b", + "\btestee\b", + "\btestes\b", + "\btestical\b", + "\btesticle\b", + "\btestis\b", + "\bthreesome\b", + "\bthroating\b", + "\bthrust\b", + "\bthug\b", + "\bthundercunt\b", + "\bthunder cunt\b", + "\btied up\b", + "\btight white\b", + "\btinkle\b", + "\btit\b", + "\btit wank\b", + "\btitfuck\b", + "\btiti\b", + "\btities\b", + "\btits\b", + "\btitt\b", + "\btittie5\b", + "\btittiefucker\b", + "\btitties\b", + "\btitty\b", + "\btittyfuck\b", + "\btittyfucker\b", + "\btittywank\b", + "\btitwank\b", + "\btoke\b", + "\btongue in a\b", + "\btoots\b", + "\btopless\b", + "\btosser\b", + "\btowelhead\b", + "\btramp\b", + "\btranny\b", + "\btrashy\b", + "\btribadism\b", + "\btrumped\b", + "\btub girl\b", + "\btubgirl\b", + "\bturd\b", + "\btush\b", + "\btushy\b", + "\btw4t\b", + "\btwat\b", + "\btwathead\b", + "\btwatlips\b", + "\btwats\b", + "\btwatty\b", + "\btwatting\b", + "\btwatwaffle\b", + "\btwink\b", + "\btwinkie\b", + "\btwo fingers\b", + "\btwo fingers with tongue\b", + "\btwo girls 1 cup\b", + "\btwo girls one cup\b", + "\btwunt\b", + "\btwunter\b", + "\bugly\b", + "\bunclefucker\b", + "\bundies\b", + "\bundressing\b", + "\bunwed\b", + "\bupskirt\b", + "\burethra play\b", + "\burinal\b", + "\burine\b", + "\burophilia\b", + "\buterus\b", + "\buzi\b", + "\bv14gra\b", + "\bv1gra\b", + "\bvag\b", + "\bvagina\b", + "\bvajayjay\b", + "\bva-j-j\b", + "\bvalium\b", + "\bvenus mound\b", + "\bveqtable\b", + "\bviagra\b", + "\bvibrator\b", + "\bviolet wand\b", + "\bvirgin\b", + "\bvixen\b", + "\bvjayjay\b", + "\bvodka\b", + "\bvomit\b", + "\bvorarephilia\b", + "\bvoyeur\b", + "\bvulgar\b", + "\bvulva\b", + "\bw00se\b", + "\bwad\b", + "\bwang\b", + "\bwank\b", + "\bwanker\b", + "\bwankjob\b", + "\bwanky\b", + "\bwazoo\b", + "\bwedgie\b", + "\bweed\b", + "\bweenie\b", + "\bweewee\b", + "\bweiner\b", + "\bweirdo\b", + "\bwench\b", + "\bwet dream\b", + "\bwetback\b", + "\bwh0re\b", + "\bwh0reface\b", + "\bwhite power\b", + "\bwhiz\b", + "\bwhoar\b", + "\bwhoralicious\b", + "\bwhore\b", + "\bwhorealicious\b", + "\bwhorebag\b", + "\bwhored\b", + "\bwhoreface\b", + "\bwhorehopper\b", + "\bwhorehouse\b", + "\bwhores\b", + "\bwhoring\b", + "\bwigger\b", + "\bwillies\b", + "\bwilly\b", + "\bwindow licker\b", + "\bwiseass\b", + "\bwiseasses\b", + "\bwog\b", + "\bwomb\b", + "\bwop\b", + "\bwrapping men\b", + "\bwrinkled starfish\b", + "\bxrated\b", + "\bx-rated\b", + "\bxx\b", + "\bxxx\b", + "\byaoi\b", + "\byeasty\b", + "\byellow showers\b", + "\byid\b", + "\byiffy\b", + "\byobbo\b", + "\bzibbi\b", + "\bzoophilia\b", + "\bzubb\b", + + "\bжид(у|ам|)\b", + "\bпутин\b", + "\bтвоюмать\b", + "\bсмерть$\b", + "\bфаш(ик|ист|из)\b", + "\bвойне$\b", + "\bчушпан$\b", + "\bукраин.*\b", + "\bбл(я|уа|и)(д|т)\b", + "\bбл(я|уа)\b", + "\bвл(я|уа)\b", + "\bн(е|и)г(е|)р\b", + "\bгей\b", + "\bгомик\b", + "\bанус$\b", + "\bчлен$\b", + "\bуретра$\b", + "\bдавалка\b", + "\bрукоблуд\b", + "\bссанина\b", + "\bочко$\b", + "\bпилотка$\b", + "\bвагина\b", + "\bвлагалище\b", + "\bдроч(|ь|ила)\b", + "\bмошонка$\b", + "\bелда$\b", + "\bпердун\b", + "\bпутана\b", + "\bг(о|а)ловка\b", + "\bблев\b", + "\bг(о|а)в(е|)н\b", + "\bжоп\b", + "\b(о|а)н(о|а)нист.*\b", + "\bгнид(а|о|у|ы)\b", + "\bк(а|о)злина$\b", + "\bк(о|а)зел$\b", + "\bк(о|а)за$\b", + "\bсволоч(ь|ъ|и|уга|ам|ами).*\b", + "\bлошар.*\b", + "\bло(х|шок)$\b", + "\bлох[уеыаоэяию].*\b", + "\b.*урод(ы|у|ам|ина|ины).*\b", + "\b.*бля(т|д).*\b", + "\b.*гандо.*\b", + "\bм(а|о)нд(а|о).*\b", + "\bмуда(к|ч)\b", + "\b.*сперма.*\b", + "\bуеб(ан|ок)\b", + "\bуебищ\b", + "\b.*[уеыаоэяию]еб$\b", + "\bсуч(к|)(а|у|и|е|ой|ай).*\b", + "\bпридур(ок|ки).*\b", + "\bд(е|и)би(л|лы).*\b", + "\bсос(ать|и|ешь|у)$\b", + "\bзалуп.*\b", + "\bкака$\b", + "\bкака(ш|х)\b", + "\bнаци(ст|к|з)$\b", + "\bмоча$\b", + "\bмуд(е|ил|о|а|я|еб).*\b", + "\b.*шалав(а|ы|ам|е|ами).*\b", + "\b.*пр(а|о)ст(и|е)т(у|е)тк(а|и|ам|е|ами).*\b", + "\b.*шлюх(а|и|ам|е|ами).*\b", + "\b.*(х)у(й|и|ю|я|е|л(и|е)).*\b", + "\b.*п(и|е|ы|у)зд.*\b", + "\bпенис\b", + "\bпис(ю|я|ьк|ос)\b", + "\b.*попа$\b", + "\b(с|сц)ук(а|о|и|у).*\b", + "\bсись\b", + "\bублюд(к|ок)\b", + "\bеб\\w*\b", + "\b.*(д(о|а)лб(о|а)|разъ|разь|за|вы|по)ебы*.*\b", + "\b.*п(и|е)д(а|о|е|)р.*\b", + "\b.*хер.*\b", + "\bхрен\b", + "\bуби(й|в|т|л)\b", + "\bуб(о|е)й\b", + "\bкуси оча$\b", + "\bкус$\b", + "\bкер$\b", + "\bкуни ота$\b", + "\bбева$\b", + "\bканчик$\b", + "\bкун$\b", + "\bдалбен$\b", + "\bбуз$\b", + "\bгов$\b", + "\bчалаб$\b", + "\bкуслес$\b", + "\bаблах$\b", + "\bкунте$\b", + "\bкунти$\b", + "\bкул$\b", + "\bкыл$\b", + "\bкудаки рих$\b", + "\bкуси биби$\b", + "\bкери бобо$\b", + "\bсиях$\b", + "\bсаг$\b", }; } }