#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# http://www.noswearing.com/dictionary

anus
arse
arsehole
ass
ass-hat
ass-jabber
ass-pirate
assbag
assbandit
assbanger
assbite
assclown
asscock
asscracker
asses
assface
assfuck
assfucker
assgoblin
asshat
asshead
asshole
asshopper
assjacker
asslick
asslicker
assmonkey
assmunch
assmuncher
assnigger
asspirate
assshit
assshole
asssucker
asswad
asswipe
axwound
bampot
bastard
beaner
bitch
bitchass
bitches
bitchtits
bitchy
blow
blowjob
bollocks
bollox
boner
brotherfucker
bullshit
bumblefuck
butt
butt-pirate
buttfucka
buttfucker
carpetmuncher
chesticle
chinc
chink
choad
chode
clit
clitface
clitfuck
clusterfuck
cock
cockass
cockbite
cockburger
cockface
cockfucker
cockhead
cockjockey
cockknoker
cockmaster
cockmongler
cockmongruel
cockmonkey
cockmuncher
cocknose
cocknugget
cockshit
cocksmith
cocksmoke
cocksmoker
cocksniffer
cocksucker
cockwaffle
coochie
coochy
coon
cooter
cracker
cum
cumbubble
cumdumpster
cumguzzler
cumjockey
cumslut
cumtart
cunnie
cunnilingus
cunt
cuntass
cuntface
cunthole
cuntlicker
cuntrag
cuntslut
dago
damn
deggo
dick
dick-sneeze
dickbag
dickbeaters
dickface
dickfuck
dickfucker
dickhead
dickhole
dickjuice
dickmilk
dickmonger
dicks
dickslap
dicksucker
dicksucking
dicktickler
dickwad
dickweasel
dickweed
dickwod
dike
dildo
dipshit
doochbag
dookie
douche
douche-fag
douchebag
douchewaffle
dumass
dumb
dumbass
dumbfuck
dumbshit
dumshit
dyke
fag
fagbag
fagfucker
faggit
faggot
faggotcock
fagtard
fatass
fellatio
feltch
flamer
fuck
fuckass
fuckbag
fuckboy
fuckbrain
fuckbutt
fuckbutter
fucked
fucker
fuckersucker
fuckface
fuckhead
fuckhole
fuckin
fucking
fucknut
fucknutt
fuckoff
fucks
fuckstick
fucktard
fucktart
fuckup
fuckwad
fuckwit
fuckwitt
fudgepacker
gay
gayass
gaybob
gaydo
gayfuck
gayfuckist
gaylord
gaytard
gaywad
goddamn
goddamnit
gooch
gook
gringo
guido
handjob
heeb
ho
hoe
homo
homodumbshit
honkey
humping
jackass
jagoff
jap
jerk
jerkass
jigaboo
jizz
jungle
junglebunny
kike
kooch
kootch
kraut
kunt
kyke
lameass
lardass
lesbian
lesbo
lezzie
mcfagget
mick
minge
mothafucka
mothafuckin
motherfucker
motherfucking
muff
muffdiver
munging
negro
nigaboo
nigga
nigger
niggers
niglet
nutsack
paki
panooch
pecker
peckerhead
penis
penisbanger
penisfucker
penispuffer
piss
pissed
pissed
pissflaps
polesmoker
pollock
poon
poonani
poonany
poontang
porchmonkey
prick
punanny
punta
pussies
pussy
pussylicking
puto
queef
queer
queerbait
queerhole
renob
rimjob
ruski
sand
sandnigger
schlong
scrote
shit
shitass
shitbag
shitbagger
shitbrains
shitbreath
shitcanned
shitcunt
shitdick
shitface
shitfaced
shithead
shithole
shithouse
shitspitter
shitstain
shitter
shittiest
shitting
shitty
shiz
shiznit
skank
skeet
skullfuck
slut
slutbag
smeg
snatch
spic
spick
splooge
suckass
tard
testicle
thundercunt
tit
titfuck
tits
tittyfuck
twat
twatlips
twats
twatwaffle
unclefucker
va-j-j
vag
vagina
vajayjay
vjayjay
wank
wankjob
wetback
whore
whorebag
whoreface
wop
