summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorspiderr <spiderr@bitweaver.org>2020-08-12 12:22:48 -0400
committerspiderr <spiderr@bitweaver.org>2020-08-12 12:22:48 -0400
commitb7f5e4f2b295062f1a1bd64dd118577ca0a58214 (patch)
tree506f252c3a348580f3c61d1bd6127779d4e38b52
parentef182c3f698daa35089318d57dbb6f93edb576d8 (diff)
downloadutil-b7f5e4f2b295062f1a1bd64dd118577ca0a58214.tar.gz
util-b7f5e4f2b295062f1a1bd64dd118577ca0a58214.tar.bz2
util-b7f5e4f2b295062f1a1bd64dd118577ca0a58214.zip
move all captcha code to users/
-rw-r--r--freecap/.ht_freecap_font1.gdfbin44216 -> 0 bytes
-rw-r--r--freecap/.ht_freecap_font2.gdfbin44216 -> 0 bytes
-rw-r--r--freecap/.ht_freecap_font3.gdfbin44216 -> 0 bytes
-rw-r--r--freecap/.ht_freecap_font4.gdfbin44216 -> 0 bytes
-rw-r--r--freecap/.ht_freecap_font5.gdfbin44216 -> 0 bytes
-rw-r--r--freecap/.ht_freecap_im1.jpgbin84564 -> 0 bytes
-rw-r--r--freecap/.ht_freecap_im2.jpgbin111193 -> 0 bytes
-rw-r--r--freecap/.ht_freecap_im3.jpgbin69645 -> 0 bytes
-rw-r--r--freecap/.ht_freecap_im4.jpgbin46182 -> 0 bytes
-rw-r--r--freecap/.ht_freecap_im5.jpgbin62563 -> 0 bytes
-rw-r--r--freecap/.ht_freecap_words6698
-rw-r--r--freecap/COPYING.txt340
-rw-r--r--freecap/freecap.php827
-rw-r--r--freecap/freecap_wrap.php125
14 files changed, 0 insertions, 7990 deletions
diff --git a/freecap/.ht_freecap_font1.gdf b/freecap/.ht_freecap_font1.gdf
deleted file mode 100644
index 6f44158..0000000
--- a/freecap/.ht_freecap_font1.gdf
+++ /dev/null
Binary files differ
diff --git a/freecap/.ht_freecap_font2.gdf b/freecap/.ht_freecap_font2.gdf
deleted file mode 100644
index 0f549c2..0000000
--- a/freecap/.ht_freecap_font2.gdf
+++ /dev/null
Binary files differ
diff --git a/freecap/.ht_freecap_font3.gdf b/freecap/.ht_freecap_font3.gdf
deleted file mode 100644
index fbea123..0000000
--- a/freecap/.ht_freecap_font3.gdf
+++ /dev/null
Binary files differ
diff --git a/freecap/.ht_freecap_font4.gdf b/freecap/.ht_freecap_font4.gdf
deleted file mode 100644
index f9f4b6a..0000000
--- a/freecap/.ht_freecap_font4.gdf
+++ /dev/null
Binary files differ
diff --git a/freecap/.ht_freecap_font5.gdf b/freecap/.ht_freecap_font5.gdf
deleted file mode 100644
index fe123f8..0000000
--- a/freecap/.ht_freecap_font5.gdf
+++ /dev/null
Binary files differ
diff --git a/freecap/.ht_freecap_im1.jpg b/freecap/.ht_freecap_im1.jpg
deleted file mode 100644
index 823678e..0000000
--- a/freecap/.ht_freecap_im1.jpg
+++ /dev/null
Binary files differ
diff --git a/freecap/.ht_freecap_im2.jpg b/freecap/.ht_freecap_im2.jpg
deleted file mode 100644
index e9ad645..0000000
--- a/freecap/.ht_freecap_im2.jpg
+++ /dev/null
Binary files differ
diff --git a/freecap/.ht_freecap_im3.jpg b/freecap/.ht_freecap_im3.jpg
deleted file mode 100644
index 7e3b65d..0000000
--- a/freecap/.ht_freecap_im3.jpg
+++ /dev/null
Binary files differ
diff --git a/freecap/.ht_freecap_im4.jpg b/freecap/.ht_freecap_im4.jpg
deleted file mode 100644
index f96821c..0000000
--- a/freecap/.ht_freecap_im4.jpg
+++ /dev/null
Binary files differ
diff --git a/freecap/.ht_freecap_im5.jpg b/freecap/.ht_freecap_im5.jpg
deleted file mode 100644
index a2800ed..0000000
--- a/freecap/.ht_freecap_im5.jpg
+++ /dev/null
Binary files differ
diff --git a/freecap/.ht_freecap_words b/freecap/.ht_freecap_words
deleted file mode 100644
index b1e1312..0000000
--- a/freecap/.ht_freecap_words
+++ /dev/null
@@ -1,6698 +0,0 @@
-aback
-abacus
-abaft
-abase
-abaser
-abate
-abated
-abater
-abbess
-abbey
-abbot
-abduct
-abeam
-abhor
-abider
-abject
-abjure
-ablate
-ablaze
-abler
-abloom
-aboard
-abode
-abound
-about
-above
-abroad
-abrupt
-abseil
-absent
-absurd
-abused
-abuses
-abuzz
-abyss
-acacia
-accede
-accent
-accept
-access
-accost
-accrue
-accuse
-acetic
-ached
-achene
-aches
-aching
-acorn
-acquit
-acrid
-across
-acting
-active
-actual
-acuity
-acumen
-acute
-adage
-adagio
-adapt
-addend
-addle
-adduct
-adept
-adhere
-adieu
-adjoin
-adjust
-adman
-admen
-admit
-adobe
-adopts
-adore
-adorn
-adrift
-adroit
-adult
-advent
-advert
-advice
-aegis
-aerial
-aether
-affair
-affine
-affix
-afford
-affray
-afield
-afire
-aflame
-afloat
-afoot
-afore
-afoul
-afraid
-afresh
-after
-afters
-again
-agape
-agate
-agave
-ageing
-ageism
-ageist
-agency
-agenda
-agent
-agents
-aghast
-agile
-agleam
-aglow
-agony
-agouti
-agreer
-ahead
-aided
-airing
-airway
-aisle
-aitch
-alack
-albeit
-albino
-album
-alcove
-aleph
-algae
-algal
-alias
-alibi
-alight
-align
-aligns
-alike
-alive
-alkali
-alkyd
-alkyl
-allay
-allele
-alley
-allier
-allies
-allot
-allots
-allow
-allows
-alloy
-almond
-almost
-alnico
-aloft
-aloha
-alone
-along
-aloof
-aloud
-alpaca
-alpha
-altar
-alter
-alumna
-alumni
-always
-amass
-amaze
-amber
-ambit
-amble
-ambles
-ambush
-amends
-amener
-amerce
-amide
-amidst
-amigo
-amine
-amino
-amiss
-amity
-amnion
-amoeba
-among
-amoral
-amount
-amour
-ampere
-ample
-amulet
-amused
-anders
-angle
-angora
-angry
-angst
-animal
-animus
-anion
-anise
-ankle
-anklet
-annal
-anneal
-annex
-annexe
-annoy
-annual
-annul
-annuli
-annum
-anode
-anoint
-anomic
-anomie
-anorak
-anther
-antic
-antler
-antral
-anvil
-anyhow
-anyone
-anyway
-aorist
-aorta
-apace
-apart
-apathy
-aphid
-apical
-apiece
-apish
-aplomb
-apogee
-apolar
-appeal
-appear
-append
-apple
-applet
-approx
-apron
-apter
-aptest
-arable
-arbour
-arcade
-arcana
-arcane
-ardent
-ardour
-areal
-arena
-areola
-argent
-argon
-argosy
-argot
-argue
-argued
-argues
-aright
-arise
-arisen
-ariser
-armada
-armed
-armer
-armful
-arming
-armlet
-armour
-armpit
-aroma
-arose
-around
-arrack
-arrant
-arras
-array
-arrive
-arrow
-arroyo
-arsine
-arson
-artful
-artist
-ascend
-ascent
-ashen
-asher
-ashlar
-ashore
-ashram
-aside
-asked
-askew
-aslant
-asleep
-aspect
-aspen
-aspic
-assay
-assen
-assent
-asses
-assess
-asset
-assign
-assist
-assize
-assort
-assume
-aster
-astern
-asthma
-astir
-astral
-astray
-astute
-asylum
-ataxia
-ataxic
-atilt
-atlas
-atoll
-atomic
-atonal
-atria
-atrial
-atrium
-attach
-attain
-attar
-attend
-attic
-attire
-attune
-auburn
-audio
-audit
-auger
-aught
-augite
-augur
-augury
-august
-auntie
-aunty
-aural
-aurora
-auteur
-author
-autumn
-auxin
-avant
-avast
-avatar
-avaunt
-avenge
-avenue
-averse
-avert
-avian
-aviary
-avouch
-avowal
-avowed
-avower
-avows
-await
-awake
-award
-aware
-awash
-aweigh
-awful
-awhile
-awing
-awning
-awoke
-awoken
-axial
-azalea
-azure
-babble
-babel
-baboon
-backer
-backup
-bacon
-baddie
-badge
-badger
-badman
-badmen
-bagel
-bagful
-bagged
-baggy
-bailee
-bailer
-bailey
-bails
-bairn
-baiter
-baize
-baked
-bakery
-baking
-balboa
-balder
-baleen
-ballet
-balls
-ballsy
-balmy
-balsa
-balun
-bamboo
-banal
-banana
-banded
-bander
-bandit
-bands
-bandy
-bangle
-banish
-banjo
-banner
-banns
-bantam
-banter
-banyan
-banzai
-baobab
-barbel
-barber
-barfly
-bargy
-barium
-barker
-barley
-baron
-barony
-barque
-barre
-barred
-barrel
-barren
-barrio
-barrow
-barter
-baryon
-basal
-basalt
-based
-baser
-bases
-basher
-basic
-basil
-basing
-basis
-basset
-basso
-baste
-batch
-bated
-bater
-bathe
-bathos
-batik
-bating
-batman
-batmen
-baton
-battle
-batty
-bauble
-baulky
-bawdy
-bawler
-bayou
-bazaar
-beach
-beadle
-beady
-beagle
-beanie
-beano
-bears
-beast
-beaten
-beaut
-beaux
-bebop
-becalm
-became
-beckon
-become
-bedaub
-bedbug
-bedeck
-bedim
-bedlam
-bedpan
-bedsit
-beech
-beefy
-beery
-beetle
-beeves
-befall
-befell
-befit
-befog
-before
-befoul
-began
-beggar
-begin
-begone
-begot
-begum
-begun
-behalf
-behead
-beheld
-behest
-behind
-behold
-behove
-beige
-being
-belate
-belay
-belch
-belfry
-belie
-belief
-belier
-belle
-bellow
-belly
-belong
-below
-belted
-beluga
-beman
-bemire
-bemoan
-bemuse
-bench
-bends
-benign
-benumb
-berate
-bereft
-beret
-berry
-berth
-beryl
-beseem
-beset
-beside
-besot
-bester
-bestir
-bestow
-betake
-betcha
-betel
-bethel
-betide
-betook
-betray
-bevel
-bewail
-beware
-beyond
-bezel
-biased
-bicarb
-biceps
-bicker
-bidden
-bidder
-biddy
-bider
-bidet
-bigamy
-biggie
-bight
-bigot
-bigwig
-bijou
-bijoux
-bikini
-bilge
-billow
-billy
-bimbo
-binary
-binder
-bindle
-binge
-bingen
-bingo
-bionic
-biopic
-biopsy
-biota
-biotin
-biped
-birch
-birdie
-birth
-births
-bisect
-bishop
-bison
-bisque
-bistro
-bitchy
-biting
-bitser
-bitten
-bitty
-bizzes
-black
-blade
-blame
-blanc
-blanch
-bland
-blank
-blare
-blast
-blazon
-bleach
-bleak
-bleary
-bleat
-bleed
-bleep
-blench
-blend
-blight
-blimey
-blimp
-blink
-blinks
-bliss
-blithe
-blitz
-bloat
-block
-bloke
-blond
-blonde
-bloody
-bloom
-bloop
-blotch
-blotto
-blouse
-blown
-blowy
-blowzy
-bluer
-bluest
-bluesy
-bluff
-bluing
-bluish
-blunt
-blurb
-blurry
-blurt
-board
-boards
-boasts
-bobbin
-bobble
-bobby
-bobcat
-boccie
-bodega
-bodice
-bodied
-boding
-bodkin
-boffin
-boggle
-boggy
-bogus
-boiled
-boiler
-bolero
-bolted
-bolter
-bolts
-bolus
-bonbon
-bongo
-bonito
-bonnet
-bonnie
-bonny
-bonsai
-bonus
-bonzes
-booby
-boodle
-boogie
-boohoo
-booked
-bookie
-books
-boomer
-boost
-bootee
-booth
-booty
-booze
-boozy
-borate
-borax
-boring
-borne
-boron
-borzoi
-bosomy
-boson
-bosser
-bossy
-bosun
-botch
-botfly
-bother
-bothy
-bottle
-bough
-bought
-bouncy
-bovine
-bowed
-bowel
-bower
-bowing
-bowser
-bowwow
-bowyer
-boxcar
-boxful
-boxing
-boyer
-boyish
-bracer
-bract
-braid
-brainy
-braise
-brake
-branch
-brand
-brands
-brandy
-brash
-brass
-brassy
-bratty
-brave
-bravo
-brawl
-brawn
-brawny
-brayer
-braze
-brazen
-breach
-bread
-bream
-breech
-breed
-breeze
-breezy
-breve
-brevet
-brewer
-briar
-brick
-bridal
-bride
-bridge
-bridle
-brief
-brier
-bright
-brine
-briner
-bring
-brink
-briny
-brisk
-broach
-broad
-brogue
-broil
-broke
-broken
-broker
-bronc
-bronco
-bronze
-brooch
-broody
-brook
-broom
-brose
-broth
-brown
-brows
-browse
-bruin
-bruise
-bruit
-brunch
-brunet
-brunt
-brush
-bruter
-bubble
-bubbly
-buboes
-bucker
-buckle
-buddy
-budge
-budgie
-buffet
-bugger
-buggy
-bugle
-build
-builds
-bulgy
-bulker
-bulky
-bullet
-bully
-bummed
-bumper
-bumpy
-bunch
-bunchy
-bundle
-bungee
-bunker
-bunkum
-bunny
-burble
-burbs
-burden
-bureau
-burgh
-burgle
-burial
-buried
-burier
-burlap
-burler
-burly
-burned
-burnt
-burrow
-bursa
-bursae
-bursar
-burst
-bursts
-bushel
-busher
-bushy
-buskin
-busman
-busmen
-busted
-butane
-butene
-butler
-butter
-butyl
-buying
-buyout
-byers
-bygone
-byline
-byname
-bypass
-bypath
-byplay
-byroad
-byway
-byword
-cabal
-cabala
-cabana
-caber
-cable
-cacao
-cache
-cacher
-cackle
-cacti
-cactus
-caddie
-caddy
-cadent
-cadet
-cadge
-cadre
-caeca
-caecal
-caecum
-caftan
-cagey
-cagier
-cahoot
-cairn
-calico
-caliph
-calla
-callee
-callow
-calls
-calve
-calves
-calyx
-camel
-cameo
-camion
-camped
-camps
-campus
-campy
-canal
-canard
-canary
-cancan
-cancel
-candid
-candle
-candy
-canine
-caning
-canker
-cannon
-cannot
-canny
-canopy
-canst
-canted
-canter
-canto
-canton
-cantor
-cants
-canvas
-canyon
-caper
-capita
-capon
-capped
-captor
-carafe
-carat
-carboy
-cared
-careen
-career
-cares
-caress
-caret
-cargo
-caries
-caring
-carnal
-carny
-carob
-carol
-carom
-carpal
-carpel
-carpi
-carpus
-carrel
-carrot
-carte
-cartel
-carven
-casaba
-casbah
-cased
-casein
-cashew
-casing
-casino
-cassia
-caste
-castle
-castor
-casual
-catchy
-cater
-catgut
-cation
-catkin
-catnap
-catnip
-cattle
-catty
-caucus
-caudal
-caught
-caulk
-causal
-caused
-caveat
-caver
-cavern
-caves
-cavil
-caving
-cavity
-cavort
-cayman
-cease
-cedar
-celery
-cellar
-cement
-censer
-cereal
-cerise
-cerium
-cermet
-cervix
-chador
-chafe
-chafer
-chaff
-chain
-chaise
-chalet
-chalky
-champ
-chancy
-chant
-chaos
-chapel
-chard
-charge
-chary
-chase
-chasm
-chaste
-chatty
-cheap
-cheat
-check
-checks
-cheek
-cheeky
-cheep
-cheer
-cheery
-cheese
-cheesy
-cheque
-cherry
-chert
-cherub
-chest
-chesty
-chewy
-chicer
-chichi
-chick
-chicle
-chide
-child
-chilli
-chilly
-chime
-chimp
-china
-chine
-chink
-chino
-chintz
-chippy
-chiral
-chirp
-chirpy
-chisel
-chitin
-chive
-chivvy
-chock
-choice
-choir
-chokes
-choler
-chomp
-choose
-choosy
-choppy
-choral
-chord
-chorea
-chorus
-chose
-chosen
-chrism
-chroma
-chrome
-chubby
-chuck
-chuff
-chukka
-chummy
-chump
-chunky
-churl
-churn
-chute
-chyme
-cicada
-cider
-cigar
-cilia
-cilium
-cinch
-cinema
-circa
-circle
-circus
-cirque
-cirri
-cirrus
-cissy
-citron
-citrus
-civet
-civic
-civics
-civil
-clack
-claim
-clammy
-clamp
-clang
-claque
-clash
-clasp
-classy
-clause
-clave
-claver
-clawer
-clean
-cleans
-clear
-cleat
-cleave
-cleft
-clench
-cleric
-clerk
-clever
-clevis
-click
-client
-cliff
-climax
-climb
-clime
-cling
-clingy
-clinic
-clink
-clique
-cloaca
-cloak
-cloche
-clock
-clomp
-clonal
-clone
-clonk
-close
-closed
-closer
-closes
-cloth
-clothe
-clouds
-cloudy
-clout
-clove
-cloven
-clown
-cluck
-clump
-clumpy
-clumsy
-clung
-clunky
-clutch
-coaler
-coarse
-coast
-coated
-coater
-coats
-cobalt
-cobble
-coble
-cobra
-cobweb
-cocci
-coccus
-coccyx
-cockle
-cocky
-cocoa
-cocoon
-coddle
-codec
-coded
-coder
-codex
-codger
-coding
-codon
-coeval
-coffee
-cogent
-cognac
-cohere
-cohort
-cokey
-coleus
-colic
-collar
-colony
-colter
-comae
-combed
-combo
-comedy
-comely
-comer
-comes
-comet
-cometh
-comfit
-comfy
-comic
-coming
-comity
-commie
-commit
-common
-comply
-conch
-conchs
-concur
-condo
-condom
-condor
-confab
-conga
-conger
-conic
-conics
-conman
-conmen
-conner
-consul
-contd
-convex
-convoy
-cooked
-cooker
-cookie
-cooled
-coolie
-cooper
-cootie
-copay
-coper
-copied
-copies
-coping
-copper
-copra
-copse
-copter
-coral
-corbel
-corder
-cords
-corgi
-coring
-corked
-corks
-cornea
-corner
-cornet
-corny
-corona
-corps
-corpse
-corpus
-corral
-corset
-cortex
-corves
-cosign
-cosine
-cosmic
-cosmos
-costly
-cotton
-couch
-cougar
-cough
-could
-counts
-county
-couple
-coupon
-course
-court
-cousin
-covary
-coven
-covers
-covert
-covet
-covey
-coward
-cowboy
-cowpox
-cowrie
-coyed
-coyote
-coypu
-cozen
-crabby
-cradle
-crafty
-craggy
-cramp
-crane
-cranky
-cranny
-crape
-crass
-crate
-crater
-cravat
-crave
-craver
-crawl
-crawly
-craze
-crazy
-creak
-creaky
-creamy
-crease
-create
-credo
-creed
-creeds
-creek
-creel
-creepy
-creme
-creole
-crepe
-crept
-cress
-crest
-cretin
-crewel
-crick
-cries
-crime
-crimp
-cringe
-crises
-crisis
-crispy
-criss
-croak
-croaky
-crock
-crocus
-croft
-crone
-crony
-crook
-croon
-crops
-crouch
-croup
-croupy
-crowds
-crown
-cruddy
-crude
-cruel
-cruet
-cruise
-crumb
-crumby
-crummy
-crump
-crunch
-cruse
-crusty
-crutch
-crypt
-cuber
-cubic
-cubism
-cubit
-cuboid
-cuckoo
-cuddly
-cudgel
-cueing
-culler
-culpa
-cumber
-cumin
-cumuli
-cupful
-cupid
-cupola
-cupric
-curacy
-curare
-curate
-curdle
-curfew
-curia
-curiae
-curial
-curie
-curio
-curium
-curled
-curlew
-curls
-curly
-curry
-curse
-cursed
-cursor
-curtsy
-curve
-curved
-curvy
-cushy
-cussed
-cusser
-cusses
-cutesy
-cutler
-cutlet
-cuttle
-cutup
-cyborg
-cycad
-cycled
-cycler
-cycles
-cyder
-cygnet
-cynic
-cypher
-dabber
-dabble
-dacha
-dactyl
-daddy
-daemon
-daffy
-dahlia
-daily
-dainty
-daisy
-daleth
-dally
-damask
-dammit
-damner
-dampen
-damsel
-damson
-dance
-dandle
-dandy
-danger
-dapper
-dapple
-daring
-darken
-darkly
-dative
-datum
-davit
-dawdle
-daybed
-deaden
-deadly
-deafen
-deals
-dealt
-dearth
-deary
-debar
-debark
-debase
-debate
-debit
-debris
-debtor
-debug
-decade
-decaf
-decal
-decay
-deceit
-decent
-decile
-decoy
-decree
-deduct
-deeds
-deejay
-deepen
-deface
-defame
-defeat
-defend
-defer
-defile
-define
-defog
-deform
-defuse
-degas
-degree
-deign
-deist
-deity
-delay
-delft
-delta
-deluge
-deluxe
-delve
-demean
-demise
-demit
-demob
-demon
-demote
-demur
-demure
-dengue
-denial
-denim
-dense
-denser
-dental
-dented
-dents
-denude
-depart
-depict
-deploy
-depot
-depth
-deputy
-derail
-derby
-derive
-dermal
-dermis
-desalt
-descry
-desert
-desist
-despot
-detain
-deter
-detest
-detox
-detune
-devise
-devote
-devour
-devout
-dewar
-dexes
-dexter
-dhoti
-dials
-diaper
-diatom
-dibble
-dicer
-dices
-dicey
-dicier
-dicing
-dickey
-dicta
-dictum
-diddle
-didst
-diesel
-differ
-digit
-digram
-diker
-diktat
-dilate
-dilute
-dimity
-dimmed
-dimple
-dimply
-dimwit
-dinar
-dinghy
-dingle
-dingo
-dingy
-dinky
-diode
-dioxin
-dipole
-dippy
-dirge
-dirty
-disant
-disarm
-disbar
-disco
-discus
-dismal
-dismay
-dispel
-distal
-distil
-disuse
-ditch
-dither
-ditto
-ditty
-divan
-dived
-divers
-divert
-divest
-divot
-divvy
-dobbin
-docile
-dodder
-dodge
-dodgem
-dodgy
-dogged
-doggo
-doggy
-dogleg
-dogma
-doily
-doing
-doings
-doled
-doles
-doling
-dollar
-dolly
-dolmen
-dolour
-domain
-domes
-domino
-donate
-dongle
-donkey
-donor
-doodle
-dooper
-dopant
-dopey
-dopier
-dorky
-dorsal
-dosage
-dotage
-dotard
-dotty
-double
-doubts
-douche
-dough
-doughy
-douse
-douser
-dowdy
-dowel
-downy
-dowry
-dowse
-doyen
-dozen
-dozer
-draggy
-dragon
-drain
-drake
-drama
-drank
-drawee
-draws
-dreamt
-dreamy
-drear
-dreary
-dredge
-drench
-dressy
-drill
-drippy
-drive
-drivel
-driven
-drives
-drogue
-droll
-droner
-drool
-droop
-droopy
-drops
-dropsy
-dross
-drove
-drown
-drowse
-drowsy
-drudge
-druid
-drunk
-drupe
-dryad
-dryer
-dryish
-dryly
-dubbed
-dubbin
-ducal
-ducat
-duchy
-ducker
-ducky
-ducted
-ducts
-duenna
-duffel
-dugout
-dulcet
-dumdum
-dummy
-dumpy
-dunce
-dunker
-dunno
-dupion
-duple
-duplex
-duress
-during
-durst
-durum
-dusky
-dusty
-duvet
-duxes
-dwarf
-dwell
-dwells
-dwelt
-dybbuk
-dyeing
-dying
-dynamo
-eagle
-eaglet
-earful
-early
-earned
-earthy
-earwax
-earwig
-eased
-easel
-easer
-eases
-easily
-easing
-eater
-eatery
-eating
-ebony
-echoes
-echoic
-eczema
-edging
-edible
-edict
-edited
-editor
-edits
-eerie
-eerily
-efface
-effete
-effigy
-efflux
-eggcup
-egger
-eggnog
-egoism
-egress
-egret
-eider
-eight
-eighty
-either
-eject
-ejecta
-eland
-elans
-elapse
-elate
-elated
-elater
-elbow
-elder
-eldest
-elects
-elegy
-eleven
-elfin
-elfish
-elicit
-elide
-elite
-elixir
-elodea
-elope
-eloper
-eluate
-elute
-elven
-elver
-elves
-elvish
-email
-embalm
-embank
-embark
-embed
-ember
-emblem
-embody
-emboss
-embryo
-emcee
-emend
-emerge
-emery
-emetic
-emote
-employ
-emptor
-empty
-enable
-enact
-enacts
-enamel
-encamp
-encase
-encode
-encore
-encyst
-ending
-endive
-endow
-endue
-enema
-enemy
-enfold
-engage
-engine
-engram
-engulf
-enigma
-enjoin
-enlist
-enmesh
-enmity
-ennui
-enough
-enrage
-enrich
-enrol
-ensign
-ensue
-ensure
-entail
-enters
-entire
-entity
-entomb
-entrap
-entry
-envied
-envoy
-enzyme
-eolith
-epoch
-epochs
-epoxy
-equal
-equine
-equip
-equips
-equity
-equiv
-erase
-erbium
-erect
-ergot
-ermine
-erode
-erotic
-errand
-errant
-errata
-erring
-error
-ersatz
-eschew
-escort
-escrow
-escudo
-esprit
-estate
-esteem
-etalon
-ethane
-ether
-ethic
-ethnic
-ethos
-ethyl
-euchre
-eunuch
-eureka
-evener
-evenly
-event
-evict
-evince
-evoke
-evolve
-exact
-exacts
-excel
-excise
-exempt
-exeunt
-exhume
-exile
-exist
-exodus
-exotic
-expect
-expend
-expert
-expiry
-expose
-extant
-extend
-extent
-extol
-extort
-extra
-exude
-exurb
-eyeful
-eyelet
-eyelid
-fable
-fabled
-fabler
-fables
-fabric
-facer
-facial
-facile
-facing
-facto
-factor
-fading
-faerie
-faint
-faire
-fairly
-fairy
-fakir
-falcon
-fallen
-fallow
-falls
-false
-falter
-family
-famine
-famish
-famous
-fanout
-farad
-farce
-farer
-farina
-farrow
-fascia
-fasten
-fatale
-fatso
-fatten
-fatty
-fatwa
-fault
-faulty
-fauna
-fealty
-feast
-fedora
-feeble
-feeds
-feign
-feint
-feisty
-feline
-fellah
-fellow
-felon
-felony
-female
-femme
-femur
-fence
-fenced
-fencer
-fennel
-feral
-ferny
-ferret
-ferro
-ferule
-fervid
-fesses
-festal
-fester
-fetter
-fettle
-feudal
-fiasco
-fibre
-fibrin
-fibula
-fiche
-fichu
-fickle
-ficus
-fiddle
-fidget
-fiend
-fierce
-fiery
-fiesta
-fifth
-fifty
-fight
-filch
-filial
-filing
-fills
-filly
-filmy
-filthy
-finale
-finch
-finely
-finer
-finery
-finest
-finger
-finial
-fining
-finis
-finish
-finite
-finny
-fiord
-fires
-firing
-firkin
-firmer
-firmly
-first
-firth
-fiscal
-fished
-fisher
-fishy
-fitful
-fitted
-fitter
-fiver
-fixate
-fixed
-fixes
-fixing
-fixity
-fizzer
-fizzle
-fizzy
-fjord
-flabby
-flack
-flagon
-flail
-flair
-flake
-flaker
-flaky
-flamed
-flamen
-flamer
-flames
-flange
-flank
-flanks
-flaps
-flashy
-flask
-flatus
-flaxen
-fleck
-fledge
-fleece
-fleecy
-fleer
-fleet
-fleshy
-flews
-flexes
-flick
-flier
-fliest
-flimsy
-flinch
-fling
-flinty
-flirt
-float
-flock
-flood
-floor
-floozy
-floppy
-floral
-floret
-florid
-florin
-floss
-flossy
-flour
-floury
-flout
-flowed
-flown
-fluent
-fluffy
-fluke
-fluky
-flume
-flung
-flunk
-flunky
-flurry
-flush
-flute
-fluxes
-flyby
-flybys
-flyer
-flying
-foamer
-foamy
-fogey
-foggy
-foible
-foist
-folder
-foliar
-folio
-folks
-folksy
-folly
-foment
-fondue
-foodie
-forage
-foray
-forbid
-force
-forced
-forcer
-forego
-forged
-forges
-forget
-forgo
-forgot
-forker
-format
-formed
-former
-formic
-forms
-forte
-forth
-forty
-forum
-fought
-fouls
-found
-founds
-fount
-fourth
-fovea
-foveae
-foveal
-fowler
-foxed
-foxes
-foxing
-foyer
-fracas
-frail
-frame
-framed
-franc
-frank
-fraud
-freak
-freaky
-freeze
-freon
-fresco
-friar
-friary
-fridge
-fried
-fries
-frieze
-frigid
-frill
-frilly
-fringe
-frisky
-frizz
-frizzy
-frock
-froid
-frolic
-frond
-front
-frosts
-frosty
-froth
-frothy
-frowzy
-froze
-frozen
-frugal
-fruit
-fruity
-frump
-frumpy
-fryer
-fuddle
-fudge
-fugal
-fugue
-fuhrer
-fulfil
-fuller
-funds
-fungal
-fungi
-fungus
-funky
-funnel
-funny
-furore
-furrow
-furry
-furze
-fused
-fusee
-fuses
-fusing
-fusion
-fusser
-fussy
-fusty
-futile
-futon
-future
-fuzzy
-gabble
-gabby
-gable
-gabler
-gadfly
-gaffe
-gaggle
-gaiety
-gaily
-gained
-gains
-galaxy
-galen
-galena
-galley
-gallon
-gallop
-galoot
-galore
-galosh
-gambit
-gamble
-gambol
-gamest
-gamete
-gamin
-gamine
-gaming
-gamma
-gamut
-gander
-ganger
-gannet
-gantry
-gaper
-garage
-garble
-garde
-garden
-gargle
-garish
-garlic
-garner
-garnet
-garret
-gasbag
-gasket
-gasses
-gassy
-gateau
-gauche
-gaucho
-gaudy
-gauger
-gaunt
-gauss
-gauze
-gauzy
-gavel
-gawker
-gawky
-gazebo
-gecko
-geese
-geezer
-geisha
-gelcap
-gelid
-genial
-genii
-genius
-genome
-genre
-gentry
-genus
-geode
-gerbil
-gerund
-getup
-gewgaw
-ghetto
-ghost
-ghoul
-giant
-gibber
-gibbon
-giber
-giddy
-gifted
-giggly
-gigolo
-giller
-gillie
-gimlet
-gimpy
-ginkgo
-gipsy
-girdle
-girlie
-girth
-given
-giveth
-giving
-glade
-gladly
-gland
-glans
-glassy
-glaze
-glazed
-gleam
-glean
-glide
-glint
-glitch
-glitz
-glitzy
-global
-globe
-gloomy
-glory
-glossy
-glower
-glued
-gluier
-gluon
-glutei
-gluten
-glycol
-glyph
-gnarl
-gnash
-gnawer
-gneiss
-gnome
-gnomic
-goalie
-goatee
-gobbet
-gobble
-goblet
-goblin
-godly
-godson
-goggle
-going
-goitre
-golden
-golly
-gonad
-gooder
-goodly
-goody
-goofy
-googly
-gooier
-goose
-gopher
-gorge
-gorger
-gorgon
-goring
-gorse
-gospel
-gotta
-gotten
-gouge
-gourd
-gouty
-graded
-grades
-graft
-grail
-grain
-grainy
-gramme
-grand
-grange
-granny
-grant
-grape
-graph
-grass
-grassy
-grates
-gratis
-grave
-gravel
-graven
-gravid
-gravy
-grazer
-grease
-greasy
-great
-grebe
-greedy
-green
-greet
-greyer
-grief
-grill
-grille
-grilse
-grime
-grimy
-grinds
-gringo
-gripe
-grisly
-grist
-gritty
-groan
-groat
-grocer
-groggy
-groin
-groom
-groove
-groovy
-gross
-grotto
-ground
-group
-groups
-grouse
-grout
-grove
-grovel
-grows
-grubby
-gruff
-grumpy
-grunge
-grungy
-grunt
-guano
-guard
-guava
-guest
-guffaw
-guide
-guider
-guides
-guild
-guile
-guilty
-guinea
-guise
-gulden
-gullet
-gulley
-gully
-gummy
-gunky
-gunman
-gunmen
-gunny
-guppy
-gurgle
-gushy
-gusset
-gusto
-gusty
-gutsy
-gutta
-gutter
-guzzle
-gypped
-gypsum
-gypsy
-habeas
-habits
-hackle
-hades
-hadron
-hadst
-haggis
-haggle
-haiku
-hairdo
-hairy
-hajjes
-hajji
-halal
-haled
-haler
-hales
-halide
-haling
-halite
-hallo
-hallow
-haloes
-halon
-halter
-halve
-halves
-hamlet
-hammer
-hammy
-hamper
-handed
-handle
-hands
-hangar
-hangs
-hangup
-hankie
-hanky
-hansom
-happen
-happy
-harass
-harden
-hardy
-harem
-harken
-harmed
-harmer
-harpy
-harrow
-harry
-harsh
-hasher
-hassle
-haste
-hasten
-hasty
-hatred
-hauled
-hauler
-hauls
-haunch
-haven
-haver
-havoc
-hayer
-haymow
-hazard
-hazel
-hazing
-hdqrs
-heads
-heady
-healed
-health
-heard
-hearer
-hears
-hearse
-hearth
-hearty
-heave
-heaven
-heaves
-heavy
-heckle
-hectic
-hector
-heeded
-heehaw
-hefty
-hegira
-heifer
-heigh
-height
-helium
-helix
-hello
-helmet
-helot
-helter
-helve
-hempen
-hence
-henge
-henna
-henry
-herbal
-hereat
-hereby
-herein
-hereof
-heresy
-hereto
-hermit
-heroes
-heroic
-heroin
-heron
-herpes
-hertz
-hexane
-hexer
-heyday
-hiatus
-hicks
-hidden
-hidey
-hiding
-hieing
-hight
-hijack
-hilly
-hinder
-hinge
-hinged
-hinger
-hinges
-hippie
-hippo
-hippy
-hired
-hires
-hiring
-hisser
-hitch
-hither
-hoard
-hoarse
-hoary
-hobbit
-hobble
-hobby
-hobnob
-hockey
-hocus
-hodge
-hogan
-hogger
-hoist
-hoity
-hokey
-holder
-holds
-holey
-hollow
-holly
-homage
-homely
-homey
-homier
-homily
-homing
-honer
-honest
-honey
-hooded
-hoodoo
-hooey
-hoofer
-hookah
-hooker
-hookup
-hooper
-hoopla
-hooray
-hoover
-hooves
-hoper
-horde
-horned
-horner
-hornet
-horny
-horrid
-horror
-horsey
-hosier
-hotbed
-hotbox
-hotel
-hotpot
-hotrod
-hough
-hound
-houri
-hourly
-housed
-houser
-hovel
-howdah
-hoyden
-hubbub
-hubby
-hubris
-huddle
-huffy
-hullo
-humane
-humble
-humbug
-humeri
-humid
-hummus
-humph
-humus
-hunch
-hunger
-hungry
-hunky
-hurdle
-hurrah
-hurray
-hurter
-hurtle
-husky
-hussar
-hussy
-hustle
-hutch
-hyaena
-hydra
-hydro
-hyena
-hymnal
-hyper
-hyrax
-hyssop
-iambi
-iambic
-iambus
-ibidem
-icebox
-icecap
-icicle
-icing
-ictus
-ideate
-idiocy
-idiom
-igloo
-ignite
-ignore
-iguana
-ileum
-iliac
-ilium
-illume
-imago
-imbibe
-imbue
-immure
-impact
-impair
-impala
-impale
-impart
-imped
-impede
-impend
-imping
-impish
-imply
-import
-impose
-impugn
-impute
-inane
-inborn
-inbred
-incest
-incite
-income
-incurs
-indeed
-indict
-indigo
-indite
-indium
-indoor
-induct
-inept
-inert
-infamy
-infant
-infect
-infill
-infirm
-infix
-inflow
-influx
-inform
-infra
-ingot
-inhere
-inject
-injure
-inlaid
-inland
-inlay
-inlet
-inlier
-inmate
-inmost
-innate
-inner
-input
-inroad
-inrush
-insane
-insert
-inset
-inside
-instal
-insure
-intact
-intake
-intend
-intent
-inter
-intern
-inters
-intone
-intra
-intro
-intuit
-inure
-invent
-invest
-inward
-iodate
-iodide
-iodine
-iodise
-iodize
-ionic
-ionise
-ionize
-ipecac
-irate
-irenic
-ironer
-irony
-irrupt
-island
-islet
-isobar
-isomer
-ispell
-issued
-issues
-italic
-itchy
-itself
-ivory
-jabber
-jabot
-jackal
-jaded
-jagged
-jaggy
-jaguar
-jalopy
-jangle
-jarful
-jargon
-jasper
-jaunty
-jazzy
-jeans
-jeerer
-jejuna
-jejune
-jelly
-jemmy
-jennet
-jenny
-jerker
-jerkin
-jerky
-jerry
-jersey
-jetsam
-jetty
-jewel
-jiffy
-jigger
-jiggle
-jiggly
-jigsaw
-jihad
-jilter
-jingle
-jingly
-jingo
-jinked
-jitsu
-jitter
-jobber
-jockey
-jocose
-jocund
-joggle
-johnny
-joined
-joiner
-joins
-joint
-joints
-joist
-jokey
-jolly
-jongg
-jostle
-joule
-jounce
-joust
-jovial
-jowly
-joyed
-joyful
-joyous
-judder
-judger
-jugful
-juice
-juicy
-jujube
-jumble
-jumbo
-jumpy
-junco
-jungle
-junior
-junket
-junkie
-junky
-junta
-juries
-jurist
-juror
-juster
-justly
-kaboom
-kabuki
-kaftan
-kaiser
-kaolin
-kapok
-kappa
-kaput
-karate
-karma
-karmic
-kayak
-kazoo
-kebab
-keeler
-keener
-kelvin
-kennel
-kerned
-kernel
-ketch
-ketone
-kettle
-keypad
-khaki
-kibble
-kibosh
-kicky
-kiddie
-kiddo
-kidnap
-kidney
-killer
-kilohm
-kilter
-kimono
-kinda
-kindle
-kindly
-kingly
-kinked
-kinky
-kiosk
-kipper
-kirsch
-kismet
-kitbag
-kitsch
-kitty
-klaxon
-kludge
-knack
-knead
-kneel
-knell
-knelt
-knick
-knife
-knight
-knish
-knives
-knobby
-knock
-knoll
-knotty
-knower
-known
-knurl
-koala
-kooky
-kopeck
-kopeks
-kosher
-kowtow
-kraal
-kraft
-krill
-krona
-krone
-kroner
-kronor
-kronur
-kudos
-kudzu
-kulaks
-label
-labia
-labial
-labile
-labium
-labour
-laced
-lacer
-laces
-lacier
-lacing
-lackey
-lactic
-lacuna
-ladder
-laddie
-laden
-lading
-ladle
-lagoon
-laird
-laity
-lambda
-lamber
-lamed
-lament
-lamina
-lamper
-lance
-lancet
-landau
-lander
-lanky
-lapdog
-lapel
-lapin
-lappet
-lapse
-lapser
-laptop
-larch
-lards
-lardy
-large
-largo
-lariat
-larker
-larva
-larvae
-larval
-larynx
-lashed
-lasher
-lassie
-lasso
-lasted
-lasts
-latch
-latent
-later
-latest
-latex
-lathe
-lather
-latish
-latte
-latter
-lauder
-lauds
-launch
-laurel
-lavage
-lavish
-lawful
-lawyer
-laxes
-laxity
-layer
-laying
-layman
-laymen
-layout
-layup
-lazuli
-leach
-leaded
-leaden
-leader
-leafy
-league
-leaker
-leaky
-leaner
-leant
-leaper
-leapt
-learn
-learns
-learnt
-lease
-leash
-least
-leave
-leaves
-lecher
-ledge
-leech
-leery
-leeway
-legacy
-legal
-legato
-legend
-leggy
-legit
-legume
-lemma
-lemme
-lemon
-lemony
-lemur
-length
-lenser
-lentil
-lento
-leper
-lepta
-lepton
-lesion
-lessee
-lesser
-lessor
-lethal
-letter
-letup
-level
-levity
-lewis
-lexeme
-liable
-liaise
-libel
-libero
-libido
-lichee
-lichen
-licit
-licker
-lieder
-liege
-lieut
-lieux
-ligand
-light
-lignum
-likely
-liken
-liker
-likest
-liking
-lilac
-lilly
-limbo
-limper
-limpet
-limpid
-linage
-linden
-lineal
-linear
-lined
-linen
-lines
-linger
-lingo
-lining
-linked
-links
-linnet
-lintel
-linty
-lipase
-lipid
-lippy
-liquid
-liquor
-lisle
-lissom
-listed
-listen
-litany
-lithe
-litmus
-litre
-litter
-little
-lived
-lively
-liven
-lives
-livest
-livid
-living
-lizard
-llama
-loads
-loamy
-loath
-loathe
-loaves
-lobar
-lobule
-local
-locale
-lochs
-locked
-locket
-locks
-locus
-locust
-lodge
-lodged
-lodges
-lofter
-lofty
-loggia
-logia
-logic
-login
-logjam
-logout
-loiter
-loller
-lolly
-lonely
-loofah
-looked
-looks
-lookup
-loony
-looper
-loopy
-loose
-loosed
-looses
-loper
-lordly
-loris
-lorry
-lossy
-lotion
-lotto
-lotus
-louden
-lounge
-loupe
-louse
-lousy
-louvre
-loved
-lovely
-loving
-lowish
-lowly
-loyal
-lubber
-lucent
-lucid
-lucky
-lucre
-luger
-lumbar
-lumber
-lumen
-lumpen
-lumper
-lumpy
-lunacy
-lunar
-lunate
-lunch
-lunge
-lunger
-lupin
-lupine
-lupus
-lurch
-lurer
-lurex
-lurid
-lustre
-lusty
-luting
-luxury
-lyceum
-lychee
-lying
-lymph
-lynch
-lyric
-lyrist
-lysine
-macaw
-macer
-macho
-macro
-macron
-madam
-madame
-madcap
-madden
-madman
-madmen
-madras
-maggot
-magic
-magma
-magnum
-magpie
-mahout
-maiden
-mainly
-mains
-maize
-major
-makes
-making
-malady
-malice
-malign
-mallet
-mallow
-malted
-malty
-mamba
-mambo
-mammal
-mammy
-manage
-mangle
-mango
-mangy
-mania
-maniac
-manic
-manioc
-manly
-manna
-manned
-manner
-manor
-manse
-manta
-mantel
-mantis
-mantle
-mantra
-manual
-manure
-maple
-mapped
-maraca
-maraud
-marble
-march
-margin
-maria
-marine
-marked
-market
-markka
-marks
-marlin
-marmot
-maroon
-marque
-marred
-marrow
-marry
-marshy
-marten
-martin
-martyr
-marvel
-mascot
-masked
-masks
-mason
-masque
-massif
-master
-maths
-mating
-matins
-matrix
-matron
-matte
-matter
-mature
-matzo
-mauve
-maxim
-maxima
-maxing
-maybe
-mayday
-mayfly
-mayhap
-mayhem
-mayor
-mayst
-mazer
-meadow
-meagre
-mealy
-meaner
-meanie
-meanly
-meant
-measly
-meaty
-medal
-meddle
-media
-medial
-median
-medico
-medium
-medley
-meeter
-megohm
-mellow
-melon
-melted
-melter
-melts
-member
-memoir
-memory
-mender
-menial
-meninx
-mental
-mentor
-mercer
-merge
-merino
-merlin
-merry
-mescal
-meshed
-meson
-messy
-metal
-meter
-method
-methyl
-metier
-metro
-mettle
-mezzo
-miasma
-mickey
-midday
-midden
-middle
-middy
-midge
-midget
-midrib
-midst
-midway
-mighty
-mikado
-milady
-milch
-milden
-mildew
-miler
-milieu
-milky
-millet
-mimer
-mimosa
-minded
-minder
-mined
-mines
-mingle
-minim
-minima
-mining
-minion
-minke
-minnow
-minor
-minty
-minuet
-minus
-minute
-mirage
-misery
-misfit
-mishap
-mislay
-misled
-missal
-misses
-missus
-misty
-misuse
-mitre
-mitten
-mixed
-mixes
-mixing
-mizzen
-mobber
-mocha
-mocker
-modal
-model
-modem
-modern
-modest
-modish
-moduli
-modulo
-modus
-moggie
-mogul
-mohair
-moiety
-moire
-moist
-molal
-molar
-molly
-molten
-moment
-momma
-monad
-money
-monger
-monies
-monism
-monkey
-monody
-month
-mooch
-moody
-moose
-mooter
-moped
-mopish
-moppet
-moral
-morass
-moray
-morbid
-morel
-morgue
-morose
-morph
-morris
-morrow
-morsel
-mortal
-mortar
-mortem
-mosaic
-mosey
-mosque
-mossy
-motel
-motet
-mother
-motif
-motile
-motion
-motive
-motley
-mottle
-motto
-mould
-moulds
-mouldy
-moult
-mound
-mounts
-mouse
-mousey
-mousse
-mousy
-mouthy
-moved
-mover
-moves
-moving
-mowing
-mucker
-mucky
-mucosa
-mucous
-mucus
-muddle
-muddy
-muesli
-muffin
-muffle
-mufti
-muggy
-mulch
-mulct
-mulish
-mullah
-mullet
-multi
-mumble
-mumbo
-mummer
-mummy
-mumps
-munch
-munge
-mural
-murder
-murky
-murmur
-muscat
-muscle
-muser
-museum
-mushy
-music
-muskeg
-musky
-muslin
-mussel
-muster
-musty
-mutant
-mutate
-muted
-mutely
-muter
-mutest
-mutiny
-mutter
-mutton
-mutual
-muumuu
-muzzle
-mynah
-myopia
-myopic
-myriad
-myrrh
-myself
-mystic
-nabob
-nacho
-nacre
-nadir
-naffer
-naiad
-naifs
-nailer
-naive
-naked
-namby
-named
-namely
-namer
-nanny
-napalm
-napkin
-nappy
-narky
-narrow
-nasty
-natal
-natch
-nation
-native
-natter
-natty
-nature
-nausea
-naval
-navel
-navvy
-nearby
-neaten
-nebula
-necker
-nectar
-needed
-needer
-needy
-negate
-neigh
-nelson
-nephew
-nerdy
-nerve
-nervy
-nester
-nestle
-nether
-netter
-nettle
-neural
-neuron
-never
-newbie
-newel
-newish
-newsy
-newton
-nexus
-niacin
-nibble
-nicety
-niche
-nickel
-niece
-nifty
-night
-nights
-nimbi
-nimble
-nimbus
-ninety
-ninja
-ninny
-nippy
-nitwit
-nobody
-nodal
-noddle
-noddy
-nodule
-noggin
-nohow
-noire
-noisy
-nomad
-nonage
-nonce
-nones
-noodle
-noose
-normal
-north
-nosey
-nosing
-notary
-notch
-notify
-notion
-nougat
-nought
-nounal
-novae
-novena
-novice
-noway
-nozzle
-nuance
-nubby
-nubile
-nuclei
-nuder
-nudes
-nudge
-nudger
-nugget
-number
-nuncio
-nurse
-nurser
-nutate
-nutmeg
-nutria
-nutty
-nuzzle
-nylon
-nymph
-oafish
-oaken
-oakum
-oases
-oasis
-oaten
-obese
-obeyer
-oblate
-oblige
-oblong
-oboist
-obtuse
-occult
-occur
-ocean
-ocelot
-ochre
-octal
-octane
-octant
-octave
-octavo
-octet
-octile
-ocular
-oddity
-odious
-odium
-odour
-oedema
-oeuvre
-offal
-offer
-offing
-offish
-offset
-often
-ogive
-ogress
-ogrish
-okapi
-olden
-oldie
-oldish
-olefin
-olive
-omega
-omelet
-oncer
-onion
-onrush
-onset
-onside
-onward
-oodles
-opaque
-opened
-opens
-opiate
-opine
-opioid
-opium
-oppose
-optic
-optics
-optima
-option
-oracle
-orang
-orate
-orator
-orchid
-ordain
-ordeal
-ordure
-oriel
-origin
-oriole
-orison
-ormolu
-ornate
-orphan
-orris
-osier
-osmium
-osprey
-ossify
-ostler
-other
-otiose
-otter
-ought
-ounce
-outang
-outcry
-outdo
-outer
-outfit
-outfox
-outgo
-outing
-outlay
-output
-overdo
-overly
-overt
-owlet
-owlish
-owned
-owner
-oxalic
-oxbow
-oxide
-oxtail
-oyster
-ozone
-pacer
-paces
-pacey
-packed
-packs
-padded
-paddle
-paddy
-padre
-paean
-paella
-paeony
-pagan
-paged
-pagoda
-paint
-paired
-palace
-palate
-palely
-paler
-palest
-paling
-palish
-pallid
-pallor
-palmer
-palmy
-palsy
-paltry
-pamby
-pampas
-panama
-panda
-pander
-panel
-panic
-panky
-pansy
-pantry
-panzer
-papacy
-papal
-papaw
-papaya
-papers
-papery
-papist
-papyri
-parade
-parcel
-parch
-pardon
-parer
-parers
-pares
-pariah
-paring
-parish
-parity
-parka
-parky
-parley
-parody
-parole
-parry
-parse
-parsec
-parsed
-parson
-parter
-partly
-parts
-party
-pascal
-pasha
-passim
-pasta
-paste
-pastel
-paster
-pastis
-pastor
-pastry
-pasts
-pasty
-patch
-patchy
-paten
-patent
-pater
-pathos
-patina
-patio
-patois
-patrol
-patten
-patter
-patty
-paunch
-pause
-paved
-paver
-paves
-paving
-pawner
-paxes
-payee
-payer
-payout
-peace
-peach
-peachy
-peahen
-peaky
-pealed
-peals
-peanut
-pearl
-pearly
-peats
-peaty
-pebble
-pebbly
-pecan
-pectic
-pectin
-pedal
-peddle
-pedlar
-peeled
-peeler
-peeve
-peewee
-pekoe
-pelmet
-pelter
-pelvic
-pelvis
-penal
-pence
-pencil
-penman
-penmen
-pennon
-penury
-peony
-people
-pepper
-peppy
-pepsin
-peptic
-perch
-percha
-peril
-perky
-permit
-peruke
-peruse
-peseta
-pesky
-pestle
-pesto
-petal
-petard
-petite
-petrel
-petrol
-petty
-pewee
-pewit
-pewter
-peyote
-phage
-phalli
-phase
-phenol
-phenyl
-phial
-phlegm
-phloem
-phlox
-phobia
-phobic
-phoebe
-phoney
-phonic
-phonon
-phony
-phooey
-photo
-photon
-phrase
-phyla
-phylum
-physic
-piano
-piazza
-picked
-picket
-pickle
-picky
-picnic
-picot
-piddle
-pidgin
-piece
-piecer
-pieing
-piety
-piffle
-piggy
-piglet
-pigsty
-pilaf
-pilers
-pileup
-pilfer
-piling
-pillar
-pillow
-pimple
-pimply
-pince
-pincer
-pinch
-pineal
-pinged
-pinger
-pinion
-pinkie
-pinky
-pinna
-pinnae
-pinned
-pious
-piping
-pipit
-pippin
-pique
-piracy
-pisser
-piste
-pistil
-pistol
-piston
-pitch
-pithy
-pitman
-piton
-pixel
-pixie
-pixmap
-pizazz
-pizza
-placed
-placer
-placid
-plague
-plaice
-plaid
-plains
-plaint
-plait
-planar
-plane
-planet
-plank
-plant
-plaque
-plash
-plasm
-plasma
-plate
-platen
-played
-plays
-plaza
-please
-pleat
-pledge
-plenty
-plenum
-pleura
-plexus
-pliant
-pliers
-plight
-plinth
-plover
-plucky
-plugs
-plumb
-plume
-plummy
-plump
-plunge
-plunk
-plural
-plush
-plushy
-poach
-pocket
-pocus
-podgy
-podium
-poesy
-poetic
-poetry
-pogrom
-point
-pointy
-poise
-poison
-polar
-poler
-policy
-polio
-polish
-polite
-polka
-pollen
-poller
-pomade
-pommel
-pompom
-ponce
-poncho
-ponder
-pongee
-pooch
-poodle
-popgun
-poplar
-poplin
-poppet
-poppy
-porch
-porky
-porous
-portal
-porter
-portly
-poser
-poseur
-posing
-posses
-possum
-postal
-posted
-poster
-posts
-potage
-potash
-potato
-potent
-potful
-potion
-potty
-pouch
-pouffe
-pounce
-pound
-pourri
-powder
-power
-powwow
-praise
-prank
-prawn
-praxes
-praxis
-prayer
-preach
-precut
-preen
-prefab
-prefix
-premed
-premix
-press
-presto
-pretty
-price
-priced
-pricer
-pricey
-prick
-priest
-primal
-prime
-primp
-prince
-print
-prints
-prions
-prior
-priori
-priory
-prise
-priser
-prism
-prissy
-privet
-privy
-prize
-prober
-prolix
-promo
-prompt
-prone
-prong
-pronto
-proof
-proper
-prose
-proser
-prosy
-protea
-proton
-proud
-prove
-proved
-proven
-proves
-prowl
-proxy
-prune
-pseudo
-pshaw
-psych
-psyche
-psycho
-psychs
-puddle
-pudgy
-pueblo
-puffer
-puffin
-puffy
-pukka
-pullet
-pulley
-pulper
-pulpit
-pulpy
-pulsar
-pulse
-pulsed
-pulser
-pulses
-pumice
-pummel
-pumper
-punchy
-pundit
-punky
-punnet
-pupae
-pupal
-pupate
-pupil
-puppy
-purdah
-purge
-purine
-purism
-purist
-purity
-purple
-purse
-pursue
-purvey
-pushy
-putrid
-putsch
-puttee
-putter
-putty
-pygmy
-pyjama
-pyknic
-pylon
-pylori
-pyrite
-python
-pyxis
-quack
-quaff
-quail
-quaint
-quake
-quaky
-qualm
-quango
-quanta
-quark
-quarry
-quart
-quarto
-quartz
-quasar
-quash
-quasi
-quaver
-queasy
-queen
-queer
-quell
-quench
-quern
-query
-quest
-quests
-queue
-queuer
-quiche
-quick
-quiet
-quiff
-quill
-quilt
-quince
-quinsy
-quint
-quire
-quirk
-quirky
-quirt
-quite
-quiver
-quizzy
-quoin
-quoit
-quorum
-quoted
-quoter
-quoth
-qwerty
-rabbi
-rabble
-rabid
-rabies
-raceme
-racism
-racket
-radar
-radial
-radian
-radii
-radish
-radium
-radius
-radix
-radon
-raffia
-raffle
-ragbag
-ragged
-raglan
-ragout
-ragtag
-railer
-rainy
-raise
-raisin
-raison
-rajah
-raker
-rakish
-rally
-ramie
-ramjet
-ranch
-rancid
-randy
-ranee
-range
-rangy
-ranked
-ranker
-rankle
-rapid
-rapier
-rapine
-rappel
-rarefy
-rarity
-rascal
-rasper
-raspy
-raster
-rather
-rating
-ratio
-ration
-rattan
-rattle
-rattly
-ratty
-ravage
-ravel
-raven
-ravine
-rayon
-razor
-reach
-react
-reacts
-reader
-reads
-ready
-realm
-rebate
-rebel
-rebook
-rebut
-recall
-recap
-recent
-recipe
-recite
-reckon
-recoil
-recopy
-record
-recoup
-rector
-recur
-recurs
-redact
-redbud
-redcap
-redden
-redeem
-redial
-redraw
-reedy
-reeve
-refile
-refill
-refine
-refit
-reflex
-refuge
-refund
-refuse
-regain
-regale
-regard
-reggae
-regime
-regrow
-rehab
-rehang
-rehear
-reheat
-rehire
-reign
-reject
-rejoin
-reknit
-relax
-relay
-relic
-relict
-relief
-reline
-relish
-relit
-reload
-relock
-remain
-remake
-remand
-remap
-remark
-remelt
-remind
-remiss
-remit
-remix
-remote
-remove
-renal
-render
-renege
-rennet
-rennin
-renown
-rental
-reopen
-repack
-repair
-repast
-repave
-repeal
-repel
-repent
-replay
-reply
-report
-repose
-repost
-reread
-resat
-rescue
-resent
-reset
-reship
-resift
-resign
-resin
-resiny
-resole
-result
-resume
-retail
-retain
-retch
-retest
-retina
-retool
-retort
-retro
-retry
-retune
-revamp
-revere
-revet
-revile
-revise
-revive
-revue
-rewash
-rewed
-rewind
-rhesus
-rheum
-rheumy
-rhino
-rhyme
-ribald
-ribbon
-richen
-ridden
-riddle
-rider
-riders
-ridge
-ridgy
-riding
-riffle
-rifled
-rigger
-right
-rights
-rigid
-rigour
-rinse
-rinser
-ripely
-riper
-ripple
-ripply
-ripsaw
-risen
-risky
-ritual
-ritzy
-riven
-river
-riyal
-roach
-roadie
-roast
-robber
-robed
-robin
-robot
-robust
-rocker
-rocky
-rococo
-rodent
-rodeo
-roger
-rogue
-roller
-rondo
-rookie
-roomy
-roost
-ropey
-rosary
-roster
-rotary
-rotate
-rotor
-rotten
-rotter
-rotund
-rouble
-rouge
-rough
-rouse
-rouser
-roust
-route
-rowdy
-rowel
-royal
-rubati
-rubato
-rubber
-rubble
-rubout
-rubric
-ruddy
-ruffle
-rugby
-ruled
-ruler
-ruling
-rumba
-rumble
-rumen
-rummer
-rummy
-rumour
-rumple
-rumply
-rumpus
-runlet
-runnel
-runner
-runny
-runty
-runway
-rupee
-rupiah
-rural
-rushy
-russet
-rustic
-rustle
-rustre
-rutty
-sable
-sabot
-sabra
-sabre
-sachem
-sachet
-sacker
-sacra
-sacral
-sacred
-sacrum
-sadden
-saddle
-safari
-safely
-safety
-sagely
-saggy
-sahib
-sailor
-saint
-saker
-salaam
-salad
-salami
-salary
-saline
-sallow
-sally
-salmon
-salon
-saloon
-salsa
-salted
-salts
-salty
-salvo
-samba
-sampan
-sample
-sandal
-sander
-sandy
-sanely
-sappy
-sarong
-sateen
-satin
-satiny
-satori
-satrap
-satyr
-saucer
-saucy
-sauna
-savant
-saved
-savour
-savoy
-sawfly
-sawyer
-saying
-scabby
-scalar
-scald
-scale
-scaled
-scales
-scalp
-scaly
-scamp
-scampi
-scans
-scanty
-scape
-scarab
-scarce
-scarer
-scarf
-scarp
-scary
-scathe
-scent
-schema
-scheme
-schism
-schist
-schizo
-school
-schuss
-schwa
-scion
-scoff
-scold
-sconce
-scone
-scoot
-scope
-scored
-scores
-scotch
-scour
-scout
-scowl
-scrag
-scram
-scrap
-scrape
-scrawl
-scree
-screed
-screen
-screw
-screwy
-scribe
-scrim
-scrimp
-scrip
-script
-scroll
-scrub
-scrum
-scuba
-scuff
-scull
-sculpt
-scummy
-scurf
-scurfy
-scurry
-scurvy
-scythe
-seabed
-sealer
-seaman
-seamer
-seance
-season
-seater
-seaway
-secant
-secede
-second
-secret
-sector
-sects
-secure
-sedan
-sedge
-sedgy
-seeded
-seeder
-seedy
-seeing
-seemly
-seethe
-segue
-seine
-seisin
-seize
-seldom
-select
-seller
-selves
-sempre
-senate
-sender
-senile
-senior
-senna
-sense
-sensor
-sentry
-sepal
-sepia
-sepoy
-sepses
-sepsis
-septa
-septet
-septum
-sequel
-sequin
-serape
-serene
-serge
-series
-serif
-sermon
-serous
-serum
-serve
-served
-server
-serves
-servo
-sesame
-settee
-settle
-seven
-severe
-sewage
-sewer
-sexpot
-sextet
-sexton
-shabby
-shack
-shaded
-shady
-shaft
-shaggy
-shake
-shaken
-shaky
-shale
-shall
-shalom
-shaman
-shandy
-shank
-shanty
-shaped
-shapes
-shard
-share
-shared
-shark
-sharp
-shave
-shaven
-shawl
-shawm
-shchi
-sheaf
-shear
-sheath
-sheave
-sheen
-sheeny
-sheep
-sheer
-sheet
-sheik
-sheikh
-shekel
-shelf
-shell
-shelve
-sherds
-sherry
-shield
-shifty
-shimmy
-shine
-shiny
-ships
-shire
-shirk
-shirr
-shirt
-shiver
-shoal
-shoat
-shoddy
-shogun
-shone
-shook
-shoot
-shoots
-shore
-shorn
-short
-shorty
-shots
-should
-shout
-shouts
-shove
-showed
-shower
-shown
-shows
-showy
-shrank
-shred
-shrew
-shrewd
-shriek
-shrift
-shrike
-shrill
-shrimp
-shrine
-shrink
-shrive
-shroud
-shrub
-shrug
-shrunk
-shtick
-shunt
-shush
-shyer
-shyest
-shyly
-sicken
-sickie
-sickly
-sided
-sides
-siding
-sidle
-siege
-sienna
-sierra
-siesta
-sieve
-sifted
-sifts
-sigma
-signet
-signor
-signs
-silage
-silent
-silica
-silken
-silky
-silly
-silty
-simian
-simile
-simmer
-simon
-simony
-simoom
-simper
-simple
-since
-sinew
-sinful
-singe
-single
-sinter
-sinus
-siphon
-siren
-sisal
-sissy
-sister
-sitcom
-sitter
-sixer
-sixth
-sixty
-sized
-sizes
-sizing
-sizzle
-skate
-skeet
-skein
-skewer
-skiff
-skill
-skimpy
-skinny
-skirt
-skirts
-skivvy
-skulk
-skull
-skunk
-skyway
-slack
-slain
-slake
-slalom
-slang
-slangy
-slant
-slash
-slate
-slaver
-sledge
-sleek
-sleeps
-sleepy
-sleet
-sleety
-sleeve
-sleigh
-slept
-sleuth
-slice
-slick
-slide
-slime
-slimy
-sling
-slink
-slinky
-sliver
-slogan
-sloop
-slope
-sloppy
-slosh
-slouch
-slough
-sloven
-sludge
-sludgy
-sluice
-slummy
-slump
-slung
-slunk
-slurp
-slurry
-slushy
-slyly
-smack
-small
-smarmy
-smart
-smarts
-smear
-smell
-smelly
-smelt
-smiler
-smiley
-smirch
-smirk
-smite
-smiter
-smithy
-smock
-smoggy
-smoke
-smoky
-smooch
-smote
-smudgy
-snack
-snafu
-snail
-snake
-snaky
-snappy
-snaps
-snare
-snarer
-snarly
-snatch
-snazzy
-sneaky
-sneeze
-snick
-snide
-sniff
-snipe
-snippy
-snitch
-snivel
-snobby
-snood
-snook
-snoop
-snoopy
-snooty
-snooze
-snore
-snort
-snotty
-snout
-snowy
-snuff
-soaker
-soapy
-soarer
-soccer
-socio
-sodden
-sodium
-soever
-soften
-softer
-softly
-softy
-soggy
-soiled
-soiree
-solace
-solar
-solder
-soled
-solely
-soles
-solid
-soling
-solute
-solve
-solved
-sombre
-sonar
-sonata
-sonnet
-sonny
-soothe
-sooty
-soppy
-sorbet
-sordid
-sorrel
-sorrow
-sorry
-sorted
-sorter
-sortie
-sough
-sought
-sound
-soupy
-source
-souse
-south
-soviet
-sower
-spacey
-spadix
-spank
-spare
-spark
-sparky
-spars
-sparse
-spasm
-spate
-spathe
-spatio
-spavin
-spawn
-speak
-speaks
-spear
-specie
-speck
-speedy
-spell
-spelt
-spend
-spent
-sphinx
-spice
-spicy
-spider
-spiel
-spiffy
-spigot
-spike
-spiky
-spill
-spilt
-spinal
-spinet
-spiny
-spiral
-spire
-spired
-spires
-spirit
-spiry
-spite
-splat
-splay
-spleen
-splice
-spline
-splint
-split
-spoil
-spoilt
-spoken
-spongy
-spoof
-spook
-spooky
-spool
-spoor
-spore
-sporty
-spots
-spotty
-spouse
-spout
-sprain
-sprang
-sprat
-sprawl
-spray
-spree
-sprig
-sprint
-sprite
-sprout
-spruce
-sprue
-sprung
-spryer
-spryly
-spume
-spumy
-spurge
-spurn
-spurt
-sputa
-squab
-squad
-squall
-square
-squash
-squat
-squaw
-squawk
-squeal
-squib
-squid
-squint
-squire
-squirl
-squirm
-squirt
-stably
-stadia
-staff
-stager
-stagy
-staid
-stair
-stake
-stale
-stalk
-stall
-stamen
-stamp
-stance
-stank
-stanza
-staple
-stare
-stark
-starry
-start
-starts
-starve
-stash
-stasis
-state
-stated
-stater
-states
-static
-stator
-statue
-status
-stave
-stayer
-stead
-steady
-steak
-steal
-steamy
-steed
-steel
-steely
-steep
-steers
-stein
-stench
-steno
-steppe
-stereo
-stern
-sticky
-stiff
-stigma
-stile
-still
-stingy
-stink
-stinky
-stint
-stitch
-stoat
-stock
-stodgy
-stoic
-stoke
-stole
-stolen
-stolid
-stolon
-stoma
-stomal
-stomp
-stoner
-stony
-stood
-stooge
-stool
-stoop
-store
-storer
-storey
-stork
-stormy
-story
-stoup
-stout
-stove
-strafe
-strain
-strait
-strand
-strap
-strata
-strati
-straw
-stray
-streak
-stream
-street
-strew
-strewn
-stria
-striae
-stride
-strife
-strim
-string
-strip
-stripe
-strive
-strobe
-strode
-stroke
-stroll
-strop
-strove
-struck
-strum
-strung
-strut
-stubby
-stucco
-stuck
-studio
-stuff
-stuffs
-stuffy
-stump
-stumpy
-stung
-stunk
-stupid
-stupor
-sturdy
-style
-styler
-styli
-stylus
-stymie
-suave
-subdue
-sublet
-submit
-subnet
-suborn
-subset
-subtle
-subtly
-suburb
-subway
-sucker
-suckle
-sudden
-sudsy
-suede
-sugar
-sugary
-suite
-suited
-suitor
-sulky
-sullen
-sully
-sultan
-sultry
-sumac
-summon
-sundae
-sunder
-sundry
-sunken
-sunlit
-sunny
-sunset
-suntan
-super
-superb
-supine
-supple
-supply
-supra
-surer
-surety
-surge
-surly
-surtax
-survey
-sushi
-sutler
-suture
-svelte
-swain
-swami
-swampy
-swanky
-sward
-swarm
-swart
-swash
-swatch
-swath
-swathe
-swear
-sweaty
-swede
-sweet
-swell
-swept
-swerve
-swift
-swill
-swine
-swipe
-swirl
-swirly
-swish
-switch
-swivel
-swizz
-swoon
-swoop
-swoosh
-swore
-sworn
-swung
-sylph
-sylvan
-synch
-syndic
-synod
-syntax
-syphon
-syrup
-syrupy
-syzygy
-tabby
-tabla
-table
-tablet
-taboo
-tabor
-tacit
-tackle
-tacky
-tactic
-tagged
-taiga
-taint
-taken
-taker
-talcum
-talkie
-talky
-tallow
-tally
-talon
-talus
-tamale
-tamed
-tamper
-tandem
-tangle
-tango
-tangy
-tanned
-tannin
-tansy
-tantra
-taper
-tapir
-tapped
-tappet
-tardy
-target
-tariff
-tarmac
-tarot
-tarpon
-tarry
-tarsal
-tarsi
-tarsus
-tartan
-tartar
-tassel
-tastes
-tasty
-tatter
-tattle
-tattoo
-taught
-taupe
-tavern
-tawdry
-tawny
-taxer
-taxies
-taxing
-teabag
-teapot
-tease
-teasel
-teazel
-teazle
-techs
-teddy
-tedium
-teens
-teeny
-teepee
-teeter
-teeth
-teethe
-telex
-teller
-telly
-temper
-tempi
-temple
-tempo
-tempt
-tenant
-tench
-tended
-tendon
-tends
-tenet
-tenner
-tennis
-tenon
-tenor
-tenpin
-tense
-tensor
-tenter
-tenth
-tents
-tenure
-tepee
-tepid
-tercel
-terns
-terry
-terse
-tested
-tests
-testy
-tetchy
-tether
-tetra
-thane
-thatch
-theft
-their
-theism
-theist
-theme
-thence
-there
-therm
-these
-thesis
-theta
-thick
-thief
-thieve
-thigh
-thine
-thing
-think
-third
-thirst
-thirty
-thole
-thorax
-thorny
-those
-though
-thrall
-thrash
-thread
-threat
-three
-thresh
-threw
-thrice
-throb
-throe
-throne
-throng
-throw
-thrown
-thrum
-thrush
-thrust
-thumb
-thump
-thunk
-thwack
-thwart
-thyme
-thymus
-tiara
-tibia
-tibiae
-tickle
-tidal
-tiger
-tight
-tilde
-tiled
-tilled
-tiller
-tilth
-timber
-timbre
-timed
-timely
-timer
-timid
-timing
-tinder
-tinge
-tingle
-tingly
-tinker
-tinkle
-tinny
-tinpot
-tinsel
-tippet
-tipple
-tipsy
-tiptoe
-tiptop
-tirade
-tired
-tiring
-tissue
-titan
-titbit
-tithe
-title
-titled
-titre
-titter
-tittle
-tizzy
-toady
-toast
-toasty
-tocsin
-today
-toddle
-toddy
-toecap
-toffee
-toggle
-toilet
-toity
-token
-tomato
-tomboy
-tomcat
-tomtit
-tonal
-toned
-toner
-tongue
-tonic
-toning
-tonne
-tonsil
-tooled
-tools
-tooth
-toothy
-tootle
-toots
-tootsy
-topaz
-toper
-topic
-topple
-toque
-torch
-toroid
-torpid
-torpor
-torque
-torrid
-torso
-torte
-torus
-total
-totem
-totter
-toucan
-touch
-touchy
-tough
-toupee
-tourer
-tousle
-toward
-towbar
-towel
-tower
-townee
-townie
-toxic
-toxin
-trace
-traced
-traces
-tracts
-tragic
-trail
-trails
-train
-trains
-trait
-traits
-tramp
-trance
-tranny
-trashy
-trauma
-travel
-trawl
-tread
-treat
-treats
-treaty
-treble
-tremor
-trench
-trendy
-trews
-triad
-triage
-tribal
-trice
-tricky
-tried
-tries
-trifle
-trike
-trilby
-trill
-triode
-tripe
-triple
-triply
-tripod
-tripos
-trite
-triune
-trivet
-trivia
-troika
-troll
-tromp
-troop
-trophy
-tropic
-troth
-trough
-troupe
-trout
-trove
-trowel
-truant
-truce
-truck
-trudge
-truism
-truly
-trump
-trunk
-truss
-trusty
-truth
-tryst
-tsetse
-tubby
-tubing
-tubule
-tucker
-tulip
-tulle
-tumble
-tumid
-tummy
-tumour
-tumult
-tundra
-tuned
-tunes
-tunic
-tuning
-tunnel
-tunny
-tupelo
-turban
-turbid
-turbo
-turbot
-tureen
-turfy
-turgid
-turkey
-turned
-turner
-turnip
-turret
-turtle
-turvy
-tussle
-tutor
-tutti
-tuxedo
-twain
-twang
-twangy
-tweak
-tweed
-tweedy
-tweet
-tweeze
-twelve
-twenty
-twerp
-twice
-twiggy
-twilit
-twill
-twine
-twinge
-twirl
-twist
-twisty
-twitch
-tycoon
-typed
-typhus
-typify
-tyrant
-tyred
-ukase
-ulcer
-ulnae
-ulnar
-ulster
-ultimo
-ultra
-umbel
-umber
-umbra
-umbrae
-umlaut
-umpire
-unable
-unary
-unban
-unbar
-unbend
-unbolt
-uncial
-unclad
-uncle
-uncool
-uncork
-uncurl
-uncut
-under
-undue
-unease
-uneven
-unfair
-unfelt
-unfit
-unfix
-unhand
-unholy
-unhurt
-union
-unique
-unisex
-unison
-unite
-unity
-unjust
-unkind
-unkink
-unlace
-unlap
-unlike
-unlink
-unlit
-unload
-unlock
-unmake
-unmask
-unmesh
-unmet
-unpack
-unpick
-unpin
-unplug
-unread
-unreal
-unrest
-unruly
-unsafe
-unset
-unshod
-unsnap
-unsure
-unties
-until
-untrue
-unwind
-unwire
-unyoke
-upbeat
-update
-upend
-upheld
-uphill
-uphold
-upkeep
-upland
-uplift
-uplink
-upload
-upped
-upper
-upping
-uppish
-uppity
-uprate
-uproar
-uproot
-upset
-upshot
-upside
-uptake
-uptime
-uptown
-upturn
-upward
-upwind
-uracil
-urban
-urbane
-urchin
-ureter
-urgent
-urinal
-ursine
-usable
-usage
-useful
-using
-usual
-usurer
-usury
-utile
-utmost
-utopia
-utter
-uvula
-uvular
-vacant
-vacate
-vacua
-vacuum
-vagary
-vague
-valet
-valise
-valley
-valour
-valued
-valuer
-values
-vamped
-vamps
-vandal
-vanity
-vapid
-vapour
-varied
-varlet
-vassal
-vault
-vaunt
-vector
-vegan
-veggie
-velar
-veldt
-vellum
-velour
-velum
-velvet
-vendor
-venial
-venom
-venous
-vented
-venue
-verbal
-verge
-verger
-verify
-verity
-vermin
-vernal
-versa
-verse
-versed
-verso
-versus
-vertex
-verve
-vesper
-vessel
-vestal
-vetch
-vetoes
-viable
-viand
-vicar
-victor
-video
-views
-vigil
-vigour
-viking
-viler
-vilify
-villa
-villi
-villus
-vinous
-vinyl
-violet
-violin
-viper
-virago
-viral
-vireo
-virus
-visage
-viscid
-viscus
-vision
-visit
-visits
-visor
-vista
-visual
-vitae
-vitro
-vivace
-vivid
-vivify
-vixen
-vizier
-vocab
-vodka
-vogue
-voice
-voiced
-voices
-voided
-voids
-voile
-volley
-volte
-volume
-volute
-voodoo
-vortex
-votary
-vouch
-vowel
-voyage
-vulgar
-wacky
-waddle
-wafer
-waffle
-wager
-waggle
-wagon
-wailer
-waist
-waive
-waken
-wakeup
-walkie
-wallet
-wallop
-wallow
-walnut
-walrus
-waltz
-wampum
-wander
-wangle
-wanted
-wanton
-wapiti
-warble
-warded
-warden
-warder
-warier
-warmer
-warmly
-warmth
-warren
-washed
-washes
-waste
-watery
-wattle
-waver
-waxen
-waylay
-weaken
-wealth
-wearer
-wears
-weasel
-weave
-weaves
-wedded
-wedge
-weedy
-weekly
-weenie
-weensy
-weeny
-weepy
-weevil
-weigh
-weight
-weird
-welled
-wells
-welsh
-welter
-wench
-whack
-whale
-wharf
-wheal
-wheat
-wheel
-wheeze
-wheezy
-whelk
-whelm
-whelp
-whence
-where
-which
-whiff
-while
-whilom
-whilst
-whims
-whimsy
-whinny
-whiny
-whirl
-whirr
-whisk
-whisky
-whist
-white
-whiten
-whitey
-whole
-wholly
-whoop
-whoosh
-whorl
-whose
-whoso
-wicked
-wicket
-widen
-widget
-widow
-width
-wield
-wifely
-wiggle
-wiggly
-wigwag
-wigwam
-wilder
-wilful
-willed
-willow
-willy
-wimple
-wimpy
-wince
-winch
-winds
-windy
-winery
-winkle
-winnow
-winter
-wintry
-wired
-wirer
-wiring
-wisdom
-wised
-wiser
-wises
-wisest
-wising
-wispy
-withal
-wither
-within
-witty
-wives
-wizen
-wobbly
-woken
-wolves
-woman
-wombat
-women
-wonky
-wooden
-woods
-woody
-woolly
-woozy
-wordy
-worker
-wormer
-wormy
-worse
-worsen
-worst
-worthy
-would
-wound
-wounds
-woven
-wrack
-wraith
-wrasse
-wreak
-wreath
-wreck
-wrest
-wring
-write
-writes
-writhe
-wrong
-wroth
-wrung
-wryer
-wryest
-wryly
-wurzel
-xenon
-xylem
-xylol
-yammer
-yarrow
-yeasty
-yellow
-yeoman
-yeomen
-yield
-yikes
-yippee
-yobbo
-yodel
-yoked
-yokel
-yokes
-yoking
-yonder
-young
-youth
-yucca
-yucky
-yummy
-yuppie
-zealot
-zebra
-zenith
-zephyr
-zeroes
-zeugma
-zigzag
-zilch
-zinnia
-zippy
-zither
-zloty
-zodiac
-zombie
-zonked
-zygote \ No newline at end of file
diff --git a/freecap/COPYING.txt b/freecap/COPYING.txt
deleted file mode 100644
index 45645b4..0000000
--- a/freecap/COPYING.txt
+++ /dev/null
@@ -1,340 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/freecap/freecap.php b/freecap/freecap.php
deleted file mode 100644
index f639c75..0000000
--- a/freecap/freecap.php
+++ /dev/null
@@ -1,827 +0,0 @@
-<?php
-/************************************************************\
-*
-* freeCap v1.4.1 Copyright 2005 Howard Yeend
-* www.puremango.co.uk
-*
-* This file is part of freeCap.
-*
-* freeCap is free software; you can redistribute it and/or modify
-* it under the terms of the GNU General Public License as published by
-* the Free Software Foundation; either version 2 of the License, or
-* (at your option) any later version.
-*
-* freeCap is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with freeCap; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*
-*
-\************************************************************/
-
-// {{{ BIT_MOD
-// hmm. too many session tweaks in setup_smarty ... we need to call this
-// also allows us to use $gBitSystem config settings
-require_once( '../../kernel/setup_inc.php' );
-//session_start();
-// }}} BIT_MOD
-
-//////////////////////////////////////////////////////
-////// User Defined Vars:
-//////////////////////////////////////////////////////
-
-// try to avoid the 'free p*rn' method of CAPTCHA circumvention
-// see www.wikipedia.com/captcha for more info
-$site_tags[0] = "To avoid spam, please do NOT enter the text if";
-$site_tags[1] = "this site is not puremango.co.uk";
-// or more simply:
-//$site_tags[0] = "for use only on puremango.co.uk";
-// reword or add lines as you please
-// or if you don't want any text:
-$site_tags = null;
-
-// where to write the above:
-// 0=top
-// 1=bottom
-// 2=both
-$tag_pos = 1;
-
-// functions to call for random number generation
-// mt_rand produces 'better' random numbers
-// but if your server doesn't support it, it's fine to use rand instead
-$rand_func = "mt_rand";
-$seed_func = "mt_srand";
-
-// which type of hash to use?
-// possible values: "sha1", "md5", "crc32"
-// sha1 supported by PHP4.3.0+
-// md5 supported by PHP3+
-// crc32 supported by PHP4.0.1+
-$hash_func = "md5";
-// store in session so can validate in form processor
-$_SESSION['hash_func'] = $hash_func;
-
-// image type:
-// possible values: "jpg", "png", "gif"
-// jpg doesn't support transparency (transparent bg option ends up white)
-// png isn't supported by old browsers (see http://www.libpng.org/pub/png/pngstatus.html)
-// gif may not be supported by your GD Lib.
-$output = "png";
-
-// 0=generate pseudo-random string, 1=use dictionary
-// dictionary is easier to recognise
-// - both for humans and computers, so use random string if you're paranoid.
-$use_dict = $gBitSystem->isFeatureActive( 'freecap_use_dict' );;
-// if your server is NOT set up to deny web access to files beginning ".ht"
-// then you should ensure the dictionary file is kept outside the web directory
-// eg: if www.foo.com/index.html points to c:\website\www\index.html
-// then the dictionary should be placed in c:\website\dict.txt
-// test your server's config by trying to access the dictionary through a web browser
-// you should NOT be able to view the contents.
-// can leave this blank if not using dictionary
-$dict_location = "./.ht_freecap_words";
-
-// used to calculate image width, and for non-dictionary word generation
-$max_word_length = 6;
-
-// text colour
-// 0=one random colour for all letters
-// 1=different random colour for each letter
-$col_type = 1;
-
-// maximum times a user can refresh the image
-// on a 6500 word dictionary, I think 15-50 is enough to not annoy users and make BF unfeasble.
-// further notes re: BF attacks in "avoid brute force attacks" section, below
-// on the other hand, those attempting OCR will find the ability to request new images
-// very useful; if they can't crack one, just grab an easier target...
-// for the ultra-paranoid, setting it to <5 will still work for most users
-$max_attempts = 100;
-
-// list of fonts to use
-// font size should be around 35 pixels wide for each character.
-// you can use my GD fontmaker script at www.puremango.co.uk to create your own fonts
-// There are other programs to can create GD fonts, but my script allows a greater
-// degree of control over exactly how wide each character is, and is therefore
-// recommended for 'special' uses. For normal use of GD fonts,
-// the GDFontGenerator @ http://www.philiplb.de is excellent for convering ttf to GD
-
-// the fonts included with freeCap *only* include lowercase alphabetic characters
-// so are not suitable for most other uses
-// to increase security, you really should add other fonts
-$font_locations = Array("./.ht_freecap_font1.gdf","./.ht_freecap_font2.gdf","./.ht_freecap_font3.gdf","./.ht_freecap_font4.gdf","./.ht_freecap_font5.gdf");
-
-// background:
-// 0=transparent (if jpg, white)
-// 1=white bg with grid
-// 2=white bg with squiggles
-// 3=morphed image blocks
-// 'random' background from v1.3 didn't provide any extra security (according to 2 independent experts)
-// many thanks to http://ocr-research.org.ua and http://sam.zoy.org/pwntcha/ for testing
-// for jpgs, 'transparent' is white
-$bg_type = 2;
-// should we blur the background? (looks nicer, makes text easier to read, takes longer)
-$blur_bg = true;
-// for bg_type 3, which images should we use?
-// if you add your own, make sure they're fairly 'busy' images (ie a lot of shapes in them)
-$bg_images = Array("./.ht_freecap_im1.jpg","./.ht_freecap_im2.jpg","./.ht_freecap_im3.jpg","./.ht_freecap_im4.jpg","./.ht_freecap_im5.jpg");
-// for non-transparent backgrounds only:
- // if 0, merges CAPTCHA with bg
- // if 1, write CAPTCHA over bg
- $merge_type = 1;
- // should we morph the bg? (recommend yes, but takes a little longer to compute)
- $morph_bg = true;
-
-// you shouldn't need to edit anything below this, but it's extensively commented if you do want to play
-// have fun, and email me with ideas, or improvements to the code (very interested in speed improvements)
-// hope this script saves some spam :-)
-
-
-
-//////////////////////////////////////////////////////
-////// Create Images + initialise a few things
-//////////////////////////////////////////////////////
-
-// seed random number generator
-// PHP 4.2.0+ doesn't need this, but lower versions will
-$seed_func(make_seed());
-
-// how faded should the bg be? (100=totally gone, 0=bright as the day)
-// to test how much protection the bg noise gives, take a screenshot of the freeCap image
-// and take it into a photo editor. play with contrast and brightness.
-// If you can remove most of the bg, then it's not a good enough percentage
-switch($bg_type)
-{
- case 0:
- break;
- case 1:
- case 2:
- $bg_fade_pct = 65;
- break;
- case 3:
- $bg_fade_pct = 50;
- break;
-}
-// slightly randomise the bg fade
-$bg_fade_pct += $rand_func(-2,2);
-
-// read each font and get font character widths
-$font_widths = Array();
-for($i=0 ; $i<sizeof($font_locations) ; $i++)
-{
- $handle = fopen($font_locations[$i],"r");
- // read header of GD font, up to char width
- $c_wid = fread($handle,12);
- $font_widths[$i] = ord($c_wid{8})+ord($c_wid{9})+ord($c_wid{10})+ord($c_wid{11});
- fclose($handle);
-}
-
-// modify image width depending on maximum possible length of word
-// you shouldn't need to use words > 6 chars in length really.
-$width = ($max_word_length*(array_sum($font_widths)/sizeof($font_widths))+20);
-$height = !empty( $_REQUEST['height'] ) ? $_REQUEST['height'] : 75;
-
-$im = ImageCreate($width, $height);
-$im2 = ImageCreate($width, $height);
-
-
-
-//////////////////////////////////////////////////////
-////// Avoid Brute Force Attacks:
-//////////////////////////////////////////////////////
-if(empty($_SESSION['freecap_attempts']))
-{
- $_SESSION['freecap_attempts'] = 1;
-} else {
- $_SESSION['freecap_attempts']++;
-
- // if more than ($max_attempts) refreshes, block further refreshes
- // can be negated by connecting with new session id
- // could get round this by storing num attempts in database against IP
- // could get round that by connecting with different IP (eg, using proxy servers)
- // in short, there's little point trying to avoid brute forcing
- // the best way to protect against BF attacks is to ensure the dictionary is not
- // accessible via the web or use random string option
- if($_SESSION['freecap_attempts']>$max_attempts)
- {
- $_SESSION['captcha'] = false;
-
- $bg = ImageColorAllocate($im,255,255,255);
- ImageColorTransparent($im,$bg);
-
- $red = ImageColorAllocate($im, 255, 0, 0);
- // depending on how rude you want to be :-)
- //ImageString($im,5,0,20,"bugger off you spamming bastards!",$red);
- // {{{ BIT_MOD
- ImageString($im,5,15,5,"Please close browser",$red);
- ImageString($im,5,15,25,"and load page again",$red);
- ImageString($im,5,15,45,"to retry",$red);
- // }}} BIT_MOD
-
- sendImage($im);
- }
-}
-
-
-
-
-
-//////////////////////////////////////////////////////
-////// Functions:
-//////////////////////////////////////////////////////
-function make_seed() {
-// from http://php.net/srand
- list($usec, $sec) = explode(' ', microtime());
- return (float) $sec + ((float) $usec * 100000);
-}
-
-function rand_color() {
- global $bg_type,$rand_func;
- if($bg_type==3)
- {
- // needs darker colour..
- return $rand_func(10,100);
- } else {
- return $rand_func(60,170);
- }
-}
-
-function myImageBlur($im)
-{
- // w00t. my very own blur function
- // in GD2, there's a gaussian blur function. bunch of bloody show-offs... :-)
-
- $width = imagesx($im);
- $height = imagesy($im);
-
- $temp_im = ImageCreateTrueColor($width,$height);
- $bg = ImageColorAllocate($temp_im,150,150,150);
-
- // preserves transparency if in orig image
- ImageColorTransparent($temp_im,$bg);
-
- // fill bg
- ImageFill($temp_im,0,0,$bg);
-
- // anything higher than 3 makes it totally unreadable
- // might be useful in a 'real' blur function, though (ie blurring pictures not text)
- $distance = 1;
- // use $distance=30 to have multiple copies of the word. not sure if this is useful.
-
- // blur by merging with itself at different x/y offsets:
- ImageCopyMerge($temp_im, $im, 0, 0, 0, $distance, $width, $height-$distance, 70);
- ImageCopyMerge($im, $temp_im, 0, 0, $distance, 0, $width-$distance, $height, 70);
- ImageCopyMerge($temp_im, $im, 0, $distance, 0, 0, $width, $height, 70);
- ImageCopyMerge($im, $temp_im, $distance, 0, 0, 0, $width, $height, 70);
- // remove temp image
- ImageDestroy($temp_im);
-
- return $im;
-}
-
-function sendImage($pic)
-{
- // output image with appropriate headers
- global $output,$im,$im2,$im3;
- header(base64_decode("WC1DYXB0Y2hhOiBmcmVlQ2FwIDEuNCAtIHd3dy5wdXJlbWFuZ28uY28udWs="));
- switch($output)
- {
- // add other cases as desired
- case "jpg":
- header("Content-Type: image/jpeg");
- ImageJPEG($pic);
- break;
- case "gif":
- header("Content-Type: image/gif");
- ImageGIF($pic);
- break;
- case "png":
- default:
- header("Content-Type: image/png");
- ImagePNG($pic);
- break;
- }
-
- // kill GD images (removes from memory)
- ImageDestroy($im);
- ImageDestroy($im2);
- ImageDestroy($pic);
- if(!empty($im3))
- {
- ImageDestroy($im3);
- }
- exit();
-}
-
-
-
-
-//////////////////////////////////////////////////////
-////// Choose Word:
-//////////////////////////////////////////////////////
-if($use_dict==1)
-{
- // load dictionary and choose random word
- $words = @file($dict_location);
- $word = strtolower($words[$rand_func(0,sizeof($words)-1)]);
- // cut off line endings/other possible odd chars
- $word = preg_replace("/[^a-z]/","",$word);
- // might be large file so forget it now (frees memory)
- $words = "";
- unset($words);
-} else {
- // based on code originally by breakzero at hotmail dot com
- // (http://uk.php.net/manual/en/function.rand.php)
- // generate pseudo-random string
- // doesn't use ijtf as are easily mistaken
-
- // I'm not using numbers because the custom fonts I've created don't support anything other than
- // lowercase or space (but you can download new fonts or create your own using my GD fontmaker script)
- $consonants = 'bcdghklmnpqrsvwxyz';
- $vowels = 'aeuo';
- $word = "";
-
- $wordlen = $rand_func(5,$max_word_length);
-
- for($i=0 ; $i<$wordlen ; $i++)
- {
- // don't allow to start with 'vowel'
- if($rand_func(0,4)>=2 && $i!=0)
- {
- $word .= $vowels{$rand_func(0,strlen($vowels)-1)};
- } else {
- $word .= $consonants{$rand_func(0,strlen($consonants)-1)};
- }
- }
-}
-
-// save hash of word for comparison
-// using hash so that if there's an insecurity elsewhere (eg on the form processor),
-// an attacker could only get the hash
-// also, shared servers usually give all users access to the session files
-// echo `ls /tmp`; and echo `more /tmp/someone_elses_session_file`; usually work
-// so even if your site is 100% secure, someone else's site on your server might not be
-// hence, even if attackers can read the session file, they can't get the freeCap word
-// (though most hashes are easy to brute force for simple strings)
-$_SESSION['captcha'] = $hash_func($word);
-
-
-
-
-//////////////////////////////////////////////////////
-////// Fill BGs and Allocate Colours:
-//////////////////////////////////////////////////////
-
-// set tag colour
-// have to do this before any distortion
-// (otherwise colour allocation fails when bg type is 1)
-$tag_col = ImageColorAllocate($im,10,10,10);
-$site_tag_col2 = ImageColorAllocate($im2,0,0,0);
-
-// set debug colours (text colours are set later)
-$debug = ImageColorAllocate($im, 255, 0, 0);
-$debug2 = ImageColorAllocate($im2, 255, 0, 0);
-
-// set background colour (can change to any colour not in possible $text_col range)
-// it doesn't matter as it'll be transparent or coloured over.
-// if you're using bg_type 3, you might want to try to ensure that the color chosen
-// below doesn't appear too much in any of your background images.
-$bg = ImageColorAllocate($im, 254, 254, 254);
-$bg2 = ImageColorAllocate($im2, 254, 254, 254);
-
-// set transparencies
-ImageColorTransparent($im,$bg);
-// im2 transparent to allow characters to overlap slightly while morphing
-ImageColorTransparent($im2,$bg2);
-
-// fill backgrounds
-ImageFill($im,0,0,$bg);
-ImageFill($im2,0,0,$bg2);
-
-if($bg_type!=0)
-{
- // generate noisy background, to be merged with CAPTCHA later
- // any suggestions on how best to do this much appreciated
- // sample code would be even better!
- // I'm not an OCR expert (hell, I'm not even an image expert; puremango.co.uk was designed in MsPaint)
- // so the noise models are based around my -guesswork- as to what would make it hard for an OCR prog
- // ideally, the character obfuscation would be strong enough not to need additional background noise
- // in any case, I hope at least one of the options given here provide some extra security!
-
- $im3 = ImageCreateTrueColor($width,$height);
- $temp_bg = ImageCreateTrueColor($width*1.5,$height*1.5);
- $bg3 = ImageColorAllocate($im3,255,255,255);
- ImageFill($im3,0,0,$bg3);
- $temp_bg_col = ImageColorAllocate($temp_bg,255,255,255);
- ImageFill($temp_bg,0,0,$temp_bg_col);
-
- // we draw all noise onto temp_bg
- // then if we're morphing, merge from temp_bg to im3
- // or if not, just copy a $widthx$height portion of $temp_bg to $im3
- // temp_bg is much larger so that when morphing, the edges retain the noise.
-
- if($bg_type==1)
- {
- // grid bg:
-
- // draw grid on x
- for($i=$rand_func(6,20) ; $i<$width*2 ; $i+=$rand_func(10,25))
- {
- ImageSetThickness($temp_bg,$rand_func(2,6));
- $text_r = $rand_func(100,150);
- $text_g = $rand_func(100,150);
- $text_b = $rand_func(100,150);
- $text_colour3 = ImageColorAllocate($temp_bg, $text_r, $text_g, $text_b);
-
- ImageLine($temp_bg,$i,0,$i,$height*2,$text_colour3);
- }
- // draw grid on y
- for($i=$rand_func(6,20) ; $i<$height*2 ; $i+=$rand_func(10,25))
- {
- ImageSetThickness($temp_bg,$rand_func(2,6));
- $text_r = $rand_func(100,150);
- $text_g = $rand_func(100,150);
- $text_b = $rand_func(100,150);
- $text_colour3 = ImageColorAllocate($temp_bg, $text_r, $text_g, $text_b);
-
- ImageLine($temp_bg,0,$i,$width*2, $i ,$text_colour3);
- }
- } else if($bg_type==2) {
- // draw squiggles!
-
- $bg3 = ImageColorAllocate($im3,255,255,255);
- ImageFill($im3,0,0,$bg3);
- ImageSetThickness($temp_bg,4);
-
- for($i=0 ; $i<strlen($word)+1 ; $i++)
- {
- $text_r = $rand_func(100,150);
- $text_g = $rand_func(100,150);
- $text_b = $rand_func(100,150);
- $text_colour3 = ImageColorAllocate($temp_bg, $text_r, $text_g, $text_b);
-
- $points = Array();
- // draw random squiggle for each character
- // the longer the loop, the more complex the squiggle
- // keep random so OCR can't say "if found shape has 10 points, ignore it"
- // each squiggle will, however, be a closed shape, so OCR could try to find
- // line terminations and start from there. (I don't think they're that advanced yet..)
- for($j=1 ; $j<$rand_func(5,10) ; $j++)
- {
- $points[] = $rand_func(1*(20*($i+1)),1*(50*($i+1)));
- $points[] = $rand_func(30,$height+30);
- }
-
- ImagePolygon($temp_bg,$points,intval(sizeof($points)/2),$text_colour3);
- }
-
- } else if($bg_type==3) {
- // take random chunks of $bg_images and paste them onto the background
-
- for($i=0 ; $i<sizeof($bg_images) ; $i++)
- {
- // read each image and its size
- $temp_im[$i] = ImageCreateFromJPEG($bg_images[$i]);
- $temp_width[$i] = imagesx($temp_im[$i]);
- $temp_height[$i] = imagesy($temp_im[$i]);
- }
-
- $blocksize = $rand_func(20,60);
- for($i=0 ; $i<$width*2 ; $i+=$blocksize)
- {
- // could randomise blocksize here... hardly matters
- for($j=0 ; $j<$height*2 ; $j+=$blocksize)
- {
- $image_index = $rand_func(0,sizeof($temp_im)-1);
- $cut_x = $rand_func(0,$temp_width[$image_index]-$blocksize);
- $cut_y = $rand_func(0,$temp_height[$image_index]-$blocksize);
- ImageCopy($temp_bg, $temp_im[$image_index], $i, $j, $cut_x, $cut_y, $blocksize, $blocksize);
- }
- }
- for($i=0 ; $i<sizeof($temp_im) ; $i++)
- {
- // remove bgs from memory
- ImageDestroy($temp_im[$i]);
- }
-
- // for debug:
- //sendImage($temp_bg);
- }
-
- // for debug:
- //sendImage($im3);
-
- if($morph_bg)
- {
- // morph background
- // we do this separately to the main text morph because:
- // a) the main text morph is done char-by-char, this is done across whole image
- // b) if an attacker could un-morph the bg, it would un-morph the CAPTCHA
- // hence bg is morphed differently to text
- // why do we morph it at all? it might make it harder for an attacker to remove the background
- // morph_chunk 1 looks better but takes longer
-
- // this is a different and less perfect morph than the one we do on the CAPTCHA
- // occasonally you get some dark background showing through around the edges
- // it doesn't need to be perfect as it's only the bg.
- $morph_chunk = $rand_func(1,5);
- $morph_y = 0;
- for($x=0 ; $x<$width ; $x+=$morph_chunk)
- {
- $morph_chunk = $rand_func(1,5);
- $morph_y += $rand_func(-1,1);
- ImageCopy($im3, $temp_bg, $x, 0, $x+30, 30+$morph_y, $morph_chunk, $height*2);
- }
-
- ImageCopy($temp_bg, $im3, 0, 0, 0, 0, $width, $height);
-
- $morph_x = 0;
- for($y=0 ; $y<=$height; $y+=$morph_chunk)
- {
- $morph_chunk = $rand_func(1,5);
- $morph_x += $rand_func(-1,1);
- ImageCopy($im3, $temp_bg, $morph_x, $y, 0, $y, $width, $morph_chunk);
-
- }
- } else {
- // just copy temp_bg onto im3
- ImageCopy($im3,$temp_bg,0,0,30,30,$width,$height);
- }
-
- ImageDestroy($temp_bg);
-
- if($blur_bg)
- {
- myImageBlur($im3);
- }
-}
-// for debug:
-//sendImage($im3);
-
-
-
-
-//////////////////////////////////////////////////////
-////// Write Word
-//////////////////////////////////////////////////////
-
-// write word in random starting X position
-$word_start_x = $rand_func(5,32);
-// y positions jiggled about later
-$word_start_y = 15;
-
-if($col_type==0)
-{
- $text_r = rand_color();
- $text_g = rand_color();
- $text_b = rand_color();
- $text_colour2 = ImageColorAllocate($im2, $text_r, $text_g, $text_b);
-}
-
-// write each char in different font
-for($i=0 ; $i<strlen($word) ; $i++)
-{
- if($col_type==1)
- {
- $text_r = rand_color();
- $text_g = rand_color();
- $text_b = rand_color();
- $text_colour2 = ImageColorAllocate($im2, $text_r, $text_g, $text_b);
- }
-
- $j = $rand_func(0,sizeof($font_locations)-1);
- $font = ImageLoadFont($font_locations[$j]);
- ImageString($im2, $font, $word_start_x+($font_widths[$j]*$i), $word_start_y, $word{$i}, $text_colour2);
-}
-// use last pixelwidth
-$font_pixelwidth = $font_widths[$j];
-
-// for debug:
-//sendImage($im2);
-
-
-
-
-
-//////////////////////////////////////////////////////
-////// Morph Image:
-//////////////////////////////////////////////////////
-
-// calculate how big the text is in pixels
-// (so we only morph what we need to)
-$word_pix_size = $word_start_x+(strlen($word)*$font_pixelwidth);
-
-$y_pos = 0;
-// firstly move each character up or down a bit:
-for($i=$word_start_x ; $i<$word_pix_size ; $i+=$font_pixelwidth)
-{
- // move on Y axis
- // deviates at least 4 pixels between each letter
- $prev_y = $y_pos;
- do{
- $y_pos = $rand_func(-3,3);
- } while($y_pos<$prev_y+2 && $y_pos>$prev_y-2);
- ImageCopy($im, $im2, $i, $y_pos, $i, 0, $font_pixelwidth, $height);
-
- // for debug:
- //ImageRectangle($im,$i,$y_pos+10,$i+$font_pixelwidth,$y_pos+70,$debug);
-}
-
-// for debug:
-//sendImage($im);
-
-ImageFilledRectangle($im2,0,0,$width,$height,$bg2);
-
-// randomly morph each character individually on x-axis
-// this is where the main distortion happens
-// massively improved since v1.2
-$y_chunk = 1;
-$morph_factor = .1;
-$morph_x = 0;
-for($j=0 ; $j<strlen($word) ; $j++)
-{
- $y_pos = 0;
- for($i=0 ; $i<=$height; $i+=$y_chunk)
- {
- $orig_x = $word_start_x+($j*$font_pixelwidth);
- // morph x += so that instead of deviating from orig x each time, we deviate from where we last deviated to
- // get it? instead of a zig zag, we get more of a sine wave.
- // I wish we could deviate more but it looks crap if we do.
- $morph_x += $rand_func(-$morph_factor,$morph_factor);
- // had to change this to ImageCopyMerge when starting using ImageCreateTrueColor
- // according to the manual; "when (pct is) 100 this function behaves identically to imagecopy()"
- // but this is NOT true when dealing with transparencies...
- ImageCopyMerge($im2, $im, $orig_x+$morph_x, $i+$y_pos, $orig_x, $i, $font_pixelwidth, $y_chunk, 100);
-
- // for debug:
- //ImageLine($im2, $orig_x+$morph_x, $i, $orig_x+$morph_x+1, $i+$y_chunk, $debug2);
- //ImageLine($im2, $orig_x+$morph_x+$font_pixelwidth, $i, $orig_x+$morph_x+$font_pixelwidth+1, $i+$y_chunk, $debug2);
- }
-}
-
-// for debug:
-//sendImage($im2);
-
-ImageFilledRectangle($im,0,0,$width,$height,$bg);
-// now do the same on the y-axis
-// (much easier because we can just do it across the whole image, don't have to do it char-by-char)
-$y_pos = 0;
-$x_chunk = 1;
-for($i=0 ; $i<=$width ; $i+=$x_chunk)
-{
- // can result in image going too far off on Y-axis;
- // not much I can do about that, apart from make image bigger
- // again, I wish I could do 1.5 pixels
- $y_pos += $rand_func(-1,1);
- ImageCopy($im, $im2, $i, $y_pos, $i, 0, $x_chunk, $height);
-
- // for debug:
- //ImageLine($im,$i+$x_chunk,0,$i+$x_chunk,100,$debug);
- //ImageLine($im,$i,$y_pos+25,$i+$x_chunk,$y_pos+25,$debug);
-}
-
-// for debug:
-//sendImage($im);
-
-// blur edges:
-// doesn't really add any security, but looks a lot nicer, and renders text a little easier to read
-// for humans (hopefully not for OCRs, but if you know better, feel free to disable this function)
-// (and if you do, let me know why)
-myImageBlur($im);
-
-// for debug:
-//sendImage($im);
-
-if($output!="jpg" && $bg_type==0)
-{
- // make background transparent
- ImageColorTransparent($im,$bg);
-}
-
-
-
-
-
-//////////////////////////////////////////////////////
-////// Try to avoid 'free p*rn' style CAPTCHA re-use
-//////////////////////////////////////////////////////
-// ('*'ed to stop my site coming up for certain keyword searches on google)
-
-// can obscure CAPTCHA word in some cases..
-
-// write site tags 'shining through' the morphed image
-ImageFilledRectangle($im2,0,0,$width,$height,$bg2);
-if(is_array($site_tags))
-{
- for($i=0 ; $i<sizeof($site_tags) ; $i++)
- {
- // ensure tags are centered
- $tag_width = strlen($site_tags[$i])*6;
- // write tag is chosen position
- if($tag_pos==0 || $tag_pos==2)
- {
- // write at top
- ImageString($im2, 2, intval($width/2)-intval($tag_width/2), (10*$i), $site_tags[$i], $site_tag_col2);
- }
- if($tag_pos==1 || $tag_pos==2)
- {
- // write at bottom
- ImageString($im2, 2, intval($width/2)-intval($tag_width/2), ($height-34+($i*10)), $site_tags[$i], $site_tag_col2);
- }
- }
-}
-ImageCopyMerge($im2,$im,0,0,0,0,$width,$height,80);
-ImageCopy($im,$im2,0,0,0,0,$width,$height);
-// for debug:
-//sendImage($im);
-
-
-
-
-//////////////////////////////////////////////////////
-////// Merge with obfuscated background
-//////////////////////////////////////////////////////
-
-if($bg_type!=0)
-{
- // merge bg image with CAPTCHA image to create smooth background
-
- // fade bg:
- if($bg_type!=3)
- {
- $temp_im = ImageCreateTrueColor($width,$height);
- $white = ImageColorAllocate($temp_im,255,255,255);
- ImageFill($temp_im,0,0,$white);
- ImageCopyMerge($im3,$temp_im,0,0,0,0,$width,$height,$bg_fade_pct);
- // for debug:
- //sendImage($im3);
- ImageDestroy($temp_im);
- $c_fade_pct = 50;
- } else {
- $c_fade_pct = $bg_fade_pct;
- }
-
- // captcha over bg:
- // might want to not blur if using this method
- // otherwise leaves white-ish border around each letter
- if($merge_type==1)
- {
- ImageCopyMerge($im3,$im,0,0,0,0,$width,$height,100);
- ImageCopy($im,$im3,0,0,0,0,$width,$height);
- } else {
- // bg over captcha:
- ImageCopyMerge($im,$im3,0,0,0,0,$width,$height,$c_fade_pct);
- }
-}
-// for debug:
-//sendImage($im);
-
-
-//////////////////////////////////////////////////////
-////// Write tags, remove variables and output!
-//////////////////////////////////////////////////////
-
-// tag it
-// feel free to remove/change
-// but if it's not essential I'd appreciate you leaving it
-// after all, I've put a lot of work into this and am giving it away for free
-// the least you could do is give me credit (or buy me stuff from amazon!)
-// but I understand that in professional environments, your boss might not like this tag
-// so that's cool.
-$tag_str = "";
-// for debug:
-//$tag_str = "[".$word."]";
-
-// ensure tag is right-aligned
-$tag_width = strlen($tag_str)*6;
-// write tag
-ImageString($im, 2, $width-$tag_width, $height-13, $tag_str, $tag_col);
-
-// unset all sensetive vars
-// in case someone include()s this file on a shared server
-// you might think this unneccessary, as it exit()s
-// but by using register_shutdown_function
-// on a -very- insecure shared server, they -might- be able to get the word
-unset($word);
-// the below aren't really essential, but might aid an OCR attack if discovered.
-// so we unset them
-unset($use_dict);
-unset($dict_location);
-unset($max_word_length);
-unset($bg_type);
-unset($bg_images);
-unset($merge_type);
-unset($bg_fade_pct);
-unset($morph_bg);
-unset($col_type);
-unset($max_attempts);
-unset($font_locations);
-
-
-// output final image :-)
-sendImage($im);
-// (sendImage also destroys all used images)
-?>
diff --git a/freecap/freecap_wrap.php b/freecap/freecap_wrap.php
deleted file mode 100644
index 5a0f89b..0000000
--- a/freecap/freecap_wrap.php
+++ /dev/null
@@ -1,125 +0,0 @@
-<?php
-/************************************************************\
-*
-* freeCap v1.4.1 Copyright 2005 Howard Yeend
-* www.puremango.co.uk
-*
-* This file is part of freeCap.
-*
-* freeCap is free software; you can redistribute it and/or modify
-* it under the terms of the GNU General Public License as published by
-* the Free Software Foundation; either version 2 of the License, or
-* (at your option) any later version.
-*
-* freeCap is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with freeCap; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*
-*
-\************************************************************/
-
-// this is the 'form' side of the script.
-// I suggest making the user fill in the main form
-// then take them here and update the information with a 'freecap_passed' flag if they enter the
-// correct word. This way, if they don't enter the right word, they don't lose all their data
-// and you don't have to code a form that remembers all their data
-// also, if someone is spamming you, you've got a log of all the failed attempts
-// which might prove useful for legal action or just for amusement, plus you'll be able to see
-// if you're stopping spammers or if the majority of failed registrations are valid users who
-// just can't read the word properly...
-
-// To avoid blocking out partially sighted users, I'd suggest having a 'submit without entering word'
-// button, which sends the info to you for manual verification. It's a lot simpler than trying to
-// implement a secure audio-captcha.
-
-session_start();
-
-if(!empty($_SESSION['freecap_word_hash']) && !empty($_POST['word']))
-{
- // all freeCap words are lowercase.
- // font #4 looks uppercase, but trust me, it's not...
- if($_SESSION['hash_func'](strtolower($_POST['word']))==$_SESSION['freecap_word_hash'])
- {
- // reset freeCap session vars
- // cannot stress enough how important it is to do this
- // defeats re-use of known image with spoofed session id
- $_SESSION['freecap_attempts'] = 0;
- $_SESSION['freecap_word_hash'] = false;
-
-
- // now process form
-
-
- // now go somewhere else
- // header("Location: somewhere.php");
- $word_ok = "yes";
- } else {
- $word_ok = "no";
- }
-} else {
- $word_ok = false;
-}
-?>
-<html>
-<head>
-<script language="javascript">
-<!--
-function new_freecap()
-{
- // loads new freeCap image
- if(document.getElementById)
- {
- // extract image name from image source (i.e. cut off ?randomness)
- thesrc = document.getElementById("freecap").src;
- thesrc = thesrc.substring(0,thesrc.lastIndexOf(".")+4);
- // add ?(random) to prevent browser/isp caching
- document.getElementById("freecap").src = thesrc+"?"+Math.round(Math.random()*100000);
- } else {
- alert("Sorry, cannot autoreload freeCap image\nSubmit the form and a new freeCap will be loaded");
- }
-}
-//-->
-</script>
-<style type="text/css">
- body{
- font-family: verdana;
- font-size: 14px;
- background: #CCC;
- }
- td{
- font-family: verdana;
- font-size: 10px;
- }
-</style>
-</head>
-<body>
-<b>freeCap v1.4 - <a href="http://www.puremango.co.uk" target="_blank">www.puremango.co.uk</a></b><br /><br />
-<?
-if($word_ok!==false)
-{
- if($word_ok=="yes")
- {
- echo "you got the word correct, rock on.<br />";
- } else {
- echo "sorry, that's not the right word, try again.<br />";
- }
-}
-?>
-<form action="<?=$_SERVER['SCRIPT_NAME']?>" method="post">
-<table cellpadding="0" cellspacing="0">
-<tr><td>Name:</td><td><input type="text" name="name" value="<?=htmlspecialchars($_POST['name'])?>"></td></tr>
-<tr><td>Foo:</td><td><input type="text" name="foo" value="<?=htmlspecialchars($_POST['foo'])?>"></td></tr>
-<tr><td>Bar:</td><td><input type="text" name="bar" value="<?=htmlspecialchars($_POST['bar'])?>"></td></tr>
-<tr><td colspan="2"><img src="freecap.php" id="freecap"></td></tr>
-<tr><td colspan="2">If you can't read the word, <a href="#" onClick="this.blur();new_freecap();return false;">click here</a></td></tr>
-<tr><td>word above:</td><td><input type="text" name="word"></td></tr>
-<tr><td colspan="2"><input type="submit" value="submit"></td></tr>
-</table><br /><br />
-</form>
-</body>
-</html>