/*!
* Copyright (c) 2013 Profoundis Labs Pvt. Ltd., and individual contributors.
*
* All rights reserved.
*/
/*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
*     1. Redistributions of source code must retain the above copyright notice,
*        this list of conditions and the following disclaimer.
*
*     2. Redistributions in binary form must reproduce the above copyright
*        notice, this list of conditions and the following disclaimer in the
*        documentation and/or other materials provided with the distribution.
*
*     3. Neither the name of autojs nor the names of its contributors may be used
*        to endorse or promote products derived from this software without
*        specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* reuses a lot of code from Nicholas C. Zakas textfield autocomplete example found here
* http://oak.cs.ucla.edu/cs144/projects/javascript/suggest1.html
*
*/

/*
 * An autosuggest textbox control.
 * @class
 * @scope public
 */
function AutoSuggestControl(id_or_element /*:HTMLInputElement*/) {
    this.provider /*:SuggestionProvider*/ = new wordSuggestions();
    /**
     * The textbox to capture, specified by element_id.
     * @scope private
     */
    this.textbox /*:HTMLInputElement*/ = typeof id_or_element == "string" ? document.getElementById(id_or_element) : id_or_element;

    //initialize the control
    this.init();

}


/**
 * Autosuggests one or more suggestions for what the user has typed.
 * If no suggestions are passed in, then no autosuggest occurs.
 * @scope private
 * @param aSuggestions An array of suggestion strings.
 */
AutoSuggestControl.prototype.autosuggest = function (aSuggestions /*:Array*/) {

    //make sure there's at least one suggestion

    if (aSuggestions.length > 0) {
            this.typeAhead(aSuggestions[0]);
    }
};


/**
 * Handles keyup events.
 * @scope private
 * @param oEvent The event object for the keyup event.
 */
AutoSuggestControl.prototype.handleKeyUp = function (oEvent /*:Event*/) {

    var iKeyCode = oEvent.keyCode;
    var evtobj = oEvent;
    window.eventobj = evtobj;
    if ((iKeyCode != 16 && iKeyCode < 32) || (iKeyCode >= 33 && iKeyCode <= 46) || (iKeyCode >= 112 && iKeyCode <= 123) || (iKeyCode == 65 && evtobj.ctrlKey) || (iKeyCode == 90 && evtobj.ctrlKey)) {
        //ignore
        if (iKeyCode == 90 && evtobj.ctrlKey) {
            // window.getSelection().deleteFromDocument();
            // TODO: need to find a way to select the rest of the text and delete.
        }
    } else {
        //request suggestions from the suggestion provider
        this.provider.requestSuggestions(this)
    }
};

/**
 * Initializes the textarea with event handlers for
 * auto suggest functionality.
 * @scope private
 */
AutoSuggestControl.prototype.init = function () {

    //save a reference to this object
    var oThis = this;
    //assign the onkeyup event handler
    lastDate = new Date();
    oThis.textbox.onkeyup = function (oEvent) {

        //check for the proper location of the event object
        if (!oEvent) {
            oEvent = window.event;
        }
        newDate = new Date();
        if (newDate.getTime() > lastDate.getTime() + 200) {
                oThis.handleKeyUp(oEvent);
                lastDate = newDate;
        }
        };

};

/**
 * Selects a range of text in the textarea.
 * @scope public
 * @param iStart The start index (base 0) of the selection.
 * @param iLength The number of characters to select.
 */
AutoSuggestControl.prototype.selectRange = function (iStart /*:int*/, iLength /*:int*/) {
    //use text ranges for Internet Explorer
    if (this.textbox.createTextRange) {
        var oRange = this.textbox.createTextRange();
        oRange.moveStart("character", iStart);
        oRange.moveEnd("character", iLength);
        oRange.select();

    //use setSelectionRange() for Mozilla
    } else if (this.textbox.setSelectionRange) {
        this.textbox.setSelectionRange(iStart, iLength);
    }

    //set focus back to the textbox
    this.textbox.focus();
};

/**
 * Inserts a suggestion into the textbox, highlighting the
 * suggested part of the text.
 * @scope private
 * @param sSuggestion The suggestion for the textbox.
 */
AutoSuggestControl.prototype.typeAhead = function (sSuggestion /*:String*/) {

    //check for support of typeahead functionality
    if (this.textbox.createTextRange || this.textbox.setSelectionRange){
        var lastSpace = this.textbox.value.lastIndexOf(" ");
        var lastQuote = this.textbox.value.lastIndexOf("'");
        var lastHypen = this.textbox.value.lastIndexOf("-");
        var lastDoubleQuote = this.textbox.value.lastIndexOf('"');
        var lastEnter = this.textbox.value.lastIndexOf("\n");
        var lastIndex = Math.max(lastSpace, lastEnter, lastQuote, lastHypen, lastDoubleQuote) + 1;
        var contentStripped = this.textbox.value.substring(0, lastIndex);
        var lastWord = this.textbox.value.substring(lastIndex, this.textbox.value.length);
        this.textbox.value = contentStripped + sSuggestion; //.replace(lastWord,"");
        var start = this.textbox.value.length - sSuggestion.replace(lastWord,"").length;
        var end = this.textbox.value.length;
        this.selectRange(start, end);
        }
};



/**
 * Request suggestions for the given autosuggest control.
 * @scope protected
 * @param oAutoSuggestControl The autosuggest control to provide suggestions for.
 */
wordSuggestions.prototype.requestSuggestions = function (oAutoSuggestControl /*:AutoSuggestControl*/) {
    var aSuggestions = [];
    var sTextbox = oAutoSuggestControl.textbox.value;
    var sTextboxSplit = sTextbox.split(/[\s,]+/);
    var sTextboxLast = sTextboxSplit[sTextboxSplit.length-1];
    var sTextboxValue = sTextboxLast;
    if (sTextboxValue.length > 0){
        //search for matching words
        for (var i=0; i < this.words.length; i++) {
            if (this.words[i].indexOf(sTextboxValue.toLowerCase()) == 0) {
                if (this.words[i].indexOf(sTextboxValue) == 0){
                    aSuggestions.push(this.words[i]);
                }
                else if (this.words[i].indexOf(sTextboxValue.charAt(0).toLowerCase() + sTextboxValue.slice(1)) == 0) {
                    aSuggestions.push(this.words[i].charAt(0).toUpperCase() + this.words[i].slice(1));
                }
            }
        }
    }

    //provide suggestions to the control
    oAutoSuggestControl.autosuggest(aSuggestions);
};
/**
 * Provides suggestions for each word.
 * @class
 * @scope public
 */
function wordSuggestions() {
    this.words = ['the','and','that','for','with','you','are','your','from','have','more','but','new','not','will','what','about','all','one','they','get','like','out','their','who','people','been','can','how','there','which','were','apple','time','when','just','into','said','our','here','also','year','view','these','comment','had','would','other','now','than','she','see','after','most','some','make','points','her','mobile','day','insider','point','company','over','twitter','use','right','say','could','them','way','first','why','ago','world','thing','only','login','even','before','because','any','two','million','please','device','service','phone','made','topic','while','best','work','last','know','network','read','him','much','want','those','where','follow','user','friend','may','then','going','still','well','look','being','post','think','photo','hour','many','take','image','back','got','video','should','off','very','site','come','good','recently','need','down','did','show','email','open','around','really','week','policy','using','through','big','today','game','alert','article','stock','too','media','next','product','find','android','own','during','free','market','story','lot','reading','term','social','feel','technology','share','every','able','shared','since','question','life','state','inc','home','few','told','never','president','data','something','job','house','report','used','better','another','window','city','according','content','system','via','part','government','same','help','man','let','both','disrupt','privacy','top','software','tech','number','percent','long','each','such','inside','car','line','month','three','actually','doe','live','end','money','might','billion','without','experience','little','found','future','great','school','put','information','between','already','must','case','quote','feature','though','ever','page','plan','including','tags','call','called','making','police','copyright','web','mean','change','password','seem','white','serving','powered','ask','reserved','idea','logged','tell','against','problem','give','working','learn','full','startup','continue','doing','team','acceptance','constitute','forgot','national','set','tablet','run','consumer','fact','yet','love','different','name','far','cant','women','registration','place','least','disclaimer','sale','directly','become','getting','real','update','party','play','advertising','writer','high','group','turn','keep','public','enough','ready','second','republican','health','everyone','once','away','pay','under','years','browser','five','past','buy','deal','old','left','store','former','small','early','computer','law','based','guy','looking','bad','office','covered','price','design','kind','bit','support','offer','search','note','person','start','likely','advertise','reason','guest','having','sure','took','hardware','per','screen','bill','respect','blog','space','taking','probably','platform','war','key','john','power','again','someone','seen','later','men','watch','family','hand','important','website','employee','version','however','care','believe','pretty','marketing','went','issue','official','trying','until','started','night','course','china','alway','intelligence','add','guideline','customer','instead','everything','security','current','building','asked','sign','anonymity','brand','hard','whether','country','coming','digital','revenue','manually','mac','scoop','amazon','wont','examples','gun','strong','four','hit','include','thought','latest','submitting','review','huge','launch','order','student','available','following','word','markup','coded','pro','especially','death','done','children','style','maybe','daily','credit','camera','talk','kid','control','below','among','came','example','event','blackberry','street','cost','fire','woman','picture','yahoo','industry','model','developer','black','running','source','anything','together','simply','major','this','commerce','book','allow','quarter','growth','behind','biggest','member','pap','business','chart','move','provide','court','face','almost','tax','stop','music','create','given','several','recent','university','project','map','display','lead','head','try','air','popular','thank','young','result','known','gay','program','account','side','invest','cut','star','wanted','release','images','possible','list','act','college','anyone','history','often','earlier','link','focused','sheet','saw','shot','clear','either','worked','message','area','dead','center','human','build','six','movie','north','saying','true','whole','itself','along','morning','happen','operating','announced','local','released','sex','campaign','worth','sound','sell','interview','taken','bring','rather','reported','park','galaxy','news','code','minute','food','devices','ability','record','tool','half','require','age','research','nothing','mark','final','meet','claim','girl','currently','attack','win','finally','statement','march','consider','couple','check','nearly','light','investor','wrong','mini','says','parent','military','within','reporter','conference','august','led','room','study','broker','personal','text','leave','large','easy','wrote','level','posted','lost','due','single','hope','value','art','drive','founder','covering','force','third','fan','offering','department','capital','test','remain','cover','general','fox','partner','else','published','front','moment','close','outside','united','executive','appear','wall','hold','matter','seconds','sense','sold','stand','mind','soon','moving','simple','forward','federal','water','killed','body','leader','secret','senate','democratic','global','expect','near','original','similar','film','player','board','private','fast','financial','action','became','red','beyond','potential','exactly','science','talking','worker','development','send','quickly','editor','quite','himself','entire','eye','shooting','late','spent','drug','answer','yes','short','desktop','sandy','added','charge','total','explain','smart','responsible','international','step','form','cloud','type','director','low','dollar','created','companies','trial','expected','track','startups','built','mother','users','ill','medical','doctor','decision','piece','officer','application','surface','completely','community','annual','redirected','cash','amount','longer','spending','silicon','interesting','vote','die','boy','write','effect','detail','arm','rate','enterprise','award','spend','stuff','dad','largest','turned','server','bar','mitt','lie','sort','above','launched','began','save','child','chief','increase','suspect','dog','marathon','hot','although','stay','growing','fall','visual','political','race','option','heard','sent','chance','super','electronic','location','worst','retail','analyst','response','effort','copy','thousand','road','firm','gave','strategy','laptop','date','communication','figure','despite','prior','previously','died','owner','evidence','debate','newsletter','sometime','fun','rest','tap','south','average','times','tip','happened','break','amazing','rule','speak','common','lab','paid','understand','solution','yourself','battery','risk','bottom','town','presidential','interest','individual','favorite','jay','cat','designed','tried','raised','heart','remember','guide','toward','sport','performance','position','starting','fund','click','photos','wait','giving','gone','sept','scene','debt','living','relationship','agency','management','nice','staff','thinking','author','return','sites','received','victim','expensive','hate','inch','knew','powerful','mile','size','raise','paper','multiple','tweet','standard','touch','marriage','buying','attention','letter','external','legal','choice','crazy','middle','reader','driver','successful','east','whose','shutdown','reveal','senior','services','maker','rich','television','weapon','season','cable','hear','candidate','specific','kill','higher','west','role','cool','valley','expert','addition','looked','range','viewed','focus','energy','happy','speech','file','voice','nation','investment','gaming','cause','felt','restaurant','opportunity','card','reach','months','budget','certainly','hosted','round','challenge','unit','martin','eventually','hospital','compared','trend','mayer','door','wife','begin','poll','decade','held','conservative','enabling','stage','upon','needed','square','period','download','baby','feed','whatever','demand','target','things','election','ahead','mostly','goal','walk','involved','japan','rise','audience','lower','features','provided','reportedly','father','pick','fight','jobs','products','asking','immediately','giant','ground','alone','song','hell','generation','fiscal','changing','significant','apparently','seeing','production','grow','additional','upgrading','revealed','situation','education','patent','games','crime','officially','earth','days','networking','bought','document','administration','bank','visit','yesterday','drop','island','bowl','bush','speed','difference','summer','journalist','associated','difficult','prison','inspired','played','color','watching','myself','magazine','cook','weight','paste','explained','included','majority','physical','advantage','sleep','computing','helped','beat','convention','embed','complete','career','highly','arrested','basic','approach','oracle','kindle','ecosystem','named','bigger','noted','base','definitely','match','ended','button','character','economic','training','beautiful','judge','function','researcher','democrat','shit','fine','interested','trip','instance','profit','active','delivered','title','corporate','main','condition','brain','lose','worse','becoming','surveillance','onto','practice','coverage','connected','connection','showed','continued','murder','particular','block','ship','green','creating','paying','conversation','purchase','impact','professional','reporting','actual','football','bunch','gadget','push','scientist','advice','basically','easily','cancer','host','count','seemed','pope','radio','arrive','king','entirely','normal','meanwhile','fear','newspaper','skill','phones','investigation','exchange','identity','travel','truth','sponsored','larger','dozen','knowledge','innovation','speaking','discussion','deep','operation','peter','brief','easier','poor','prove','surprise','threat','army','clean','beginning','field','seven','gold','competition','core','hook','lack','resident','chip','table','keyboard','winner','attorney','alternative','required','fair','meant','confirmed','animal','advertiser','committee','club','blood','traditional','material','shut','truly','particularly','unique','states','northern','issues','mike','church','possibly','serve','safe','engine','strike','avoid','eight','activity','plenty','thoughts','language','organization','factor','sorry','tiny','income','direct','acquisition','wonder','joke','battle','designer','adding','scale','path','gift','cliff','insurance','dark','river','choose','quick','flight','impressive','pull','others','exploding','cell','join','specifically','failed','hill','generally','none','older','words','brown','indeed','worldwide','engineer','teen','disaster','moved','opened','distribution','pair','daughter','learning','pressure','manufacturer','providing','rock','losing','broke','fired','described','behavior','surprising','straight','collection','forget','caught','agree','cannot','spot','describe','modern','returned','rape','damage','feet','rose','extra','useful','seriously','eating','absolutely','county','enter','professor','sexual','contract','obviously','trick','passed','adult','navy','closed','commercial','weird','female','fake','existing','gain','handle','smith','extremely','rumor','followed','hurricane','dream','supposed','ultimately','allowing','interface','land','alive','shopping','creative','floor','background','chemical','considering','developing','vine','argument','funny','comments','storm','vice','shop','survey','essentially','separate','wave','fuck','safety','explosion','wide','shift','introduced','slightly','discovered','relatively','sister','forced','increased','item','announcement','agreed','agreement','listen','developed','processor','partnership','union','breaking','doubt','kept','lady','otherwise','civil','exist','hurt','effective','train','direction','switch','robot','pool','jump','enjoy','audio','hair','filed','reform','blue','tracking','cheap','except','object','weeks','faster','agent','stupid','gawker','violence','lawyer','positive','realized','enable','appeared','entrepreneur','bond','district','camp','movement','hacker','throughout','joined','folk','incredible','killer','messaging','seat','decide','saving','drone','native','flagship','carry','nature','usage','plane','grand','acquired','allegedly','bringing','relevant','entertainment','limit','pain','caused','treatment','tour','marijuana','nine','anyway','advanced','revolution','increasingly','remote','leaked','incident','born','expanded','drink','destroyed','familiar','considered','album','motion','vision','hotel','slow','originally','signed','artist','internal','spoke','strive','afternoon','crowd','hours','jack','retailer','finger','expand','hoping','nobody','bear','posts','announce','studio','grew','secretary','glass','immigration','manage','customers','crook','edge','coast','believed','appeal','print','publisher','environment','porn','tomorrow','mail','jersey','anywhere','wear','skin','okay','elementary','whom','task','notice','launching','memory','resolution','fully','trust','estimate','chairman','signal','score','heat','association','potentially','guilty','thanks','suggested','competitor','rare','fighting','male','planet','henry','fairly','presentation','yard','planning','hire','tend','trade','roll','produced','pulled','cold','wish','honor','sales','sensor','happening','category','angry','yeah','standing','provider','mountain','unlike','declined','wake','double','exercise','band','apartment','supply','greatest','degree','targeting','slide','served','neighborhood','manufacturing','accept','critical','shown','taste','corporation','awful','maps','dating','mentioned','client','mayor','labor','headline','guard','reference','initially','worry','broken','zero','jail','concerned','closer','mental','margin','estimated','draw','represent','wireless','musk','fail','facing','crew','stream','ride','impossible','unfortunately','hole','twice','presence','region','method','ball','incredibly','assistant','fourth','ensure','volume','mall','panel','streaming','publication','dear','chain','chat','talked','fellow','aware','wearable','select','intern','loved','criminal','dick','themselves','throw','technical','beer','enforcement','dedicated','argue','salon','vast','relative','population','cast','voter','mode','prime','minister','suit','fell','negative','reviewing','blow','ticket','gotten','exclusive','theory','shed','tough','leak','valuable','gear','actor','rival','gunman','comic','foursquare','currency','rating','forecast','wild','evil','girlfriend','experiment','governor','affordable','clip','independent','excellent','emergency','blame','viral','necessary','medicine','reduce','priority','indicate','leadership','destination','remove','resource','heavy','electric','spring','unlikely','coffee','stick','grown','percentage','colleague','spread','engineering','affair','missed','wind','crash','regularly','logo','controversial','foot','sprint','perfectly','consumers','answered','sustainable','dinner','bomb','column','error','bike','gate','proposal','dell','sweet','solid','foundation','seek','finish','targeted','representative','stuck','josh','bright','habit','pack','tournament','possibility','calendar','catch','exec','suck','domestic','nightmare','subscription','talent','database','congressional','accident','shipping','struggling','rally','shoot','intended','birthday','determine','guardian','property','racist','folded','subscriber','topics','outlet','publicly','league','pocket','lesson','border','thin','arrest','favor','surprised','widely','charging','newest','prism','suddenly','stint','flash','warned','broad','master','entering','adoption','exciting','typically','automatically','fuel','works','solve','identified','admit','corner','businesses','parker','hong','fresh','perspective','lived','influence','problems','insane','spokesman','necessarily','competitive','combined','division','fewer','kids','portfolio','analytic','boat','epic','aside','enthusiast','complaint','employees','ending','questions','somewhat','electoral','terrible','discovery','secure','fill','activist','driven','checking','math','strength','lunch','maintain','southern','abuse','graph','smoke','silver','longterm','bird','marine','invite','appearance','prosecutor','pushed','moon','spying','harder','publishing','birth','miss','literally','warner','walked','beach','bottle','hired','noise','committed','collapse','mouth','apply','stunning','blast','everywhere','improved','component','info','nearby','drunk','picked','exclusively','apart','upcoming','affect','quit','listening','brilliant','producer','freelanced','memorial','ventures','continuing','auto','denied','passenger','bubble','shape','flag','burn','hall','feedback','port','neighbor','anniversary','explanation','championship','damn','press','engagement','filing','ring','commission','developers','infrastructure','harry','mainstream','emerging','rand','countries','hack','hiring','responded','horror','ultimate','somewhere','subscribe','integrated','photograph','partners','gonna','highlight','shake','ones','reaction','focusing','filled','photographer','recording','sector','hidden','afraid','exact','terrorist','fixed','peace','participant','reed','delivery','faith','yelp','metal','productivity','corp','mason','hero','encourage','medium','jury','critic','employer','pizza','flat','random','journalism','noting','voting','beta','generate','structure','lake','convince','laugh','beauty','understanding','prince','edit','teenager','marketer','angel','prefer','wallet','lock','combination','truck','networks','dominant','therefore','arena','expectation','menu','ways','debut','distance','sentence','mine','experienced','creation','comparison','magic','responsibility','rights','delay','subscribers','bridge','wired','aspect','pound','deck','minor','interaction','dumb','treat','politics','functionality','notes','marketplace','introduce','faced','primarily','everybody','plant','surprisingly','chair','interactive','placed','protection','ford','instantly','fish','quiet','navigation','prayer','ignore','layer','disclosure','seed','comfortable','virtually','supporter','flying','buyer','extend','domain','chase','politician','improvement','boost','drinking','shanghai','printing','chrome','winter','flow','celebrate','touchscreen','issued','rising','proud','meal','banned','carrying','loan','unable','proof','globe','basketball','filter','transaction','refer','replacement','sand','lucky','impression','amendment','widget','notification','ignition','attractive','theme','self','stolen','grab','does','owned','waste','plus','pebble','shareholder','ocean','students','graham','sexy','books','armed','avenue','identify','collected','scientific','connectivity','approval','receiving','stake','facility','spec','earn','permission','transition','react','chose','slowly','reputation','promised','abandoned','tree','nick','frequently','demographics','cars','investing','listed','custom','trail','frame','recipe','integration','hello','detailed','lives','presumably','trillion','spokesperson','rick','warm','input','shoe','tired','pilot','stone','coin','entry','assume','essay','liked','clock','gang','acting','pace','pixel','shell','voted','cruise','usual','cases','route','gather','snow','begun','latter','verge','sick','attend','false','tape','novel','hang','define','weekly','backed','argued','stat','afford','troll','ranked','wing','label','stood','sample','spirit','pose','joint','drugs','wage','stores','harm','screw','funded','desk','videos','fancy','dude','struck','candy','writes','stated','troop','smell','sharp','hands','cycle','drew','hedge','regime','aimed','peak','earned','badge','queen','tale','lance','steal','ideal','aria','tested','drama','accent','lion','busy','drag','barely','events','unveil','engage','desire','mass','rain','format','forum','holy','split','crack','urban','drove','scheme','warren','retina','roger','dish','tank','alley','honest','cent','scary','icon','frank','defend','fifth','grant','rear','suite','rapid','movies','laid','deeply','comedy','remind','plate','ruling','wine','subway','reply','museum','youth','wood','fraud','paint','swim','ideas','threw','loud','teach','shock','bing','bullet','ease','circle','absurd','gene','estate','rescue','luck','motor','rush','forest','rules','ugly','regret','naked','cookie','golden','rover','hardly','shame','needle','tony','cheese','resume','proper','series','empty','pitch','plans','exit','warn','pure','spill','snap','decent','golf','coach','saved','trump','fans','regard','gained','boom','wealth','conn','phase','eyes','theft','linked','meat','wire','creepy','refuse','bean','fruit','flip','demo','fault','headed','orange','kick','loss','basis','flavor','load','equal','dance','brutal','beside','models','danger','hiding','ruin','wheel','punk','rent','cage','guns','tied','geek','clever','dirty','wash','flaw','nose','phrase','swift','calls','weigh','tear','muscle','memo','backer','sight','elite','trap','viewer','taxes','sought','whitey','lying','silly','lineup','scared','asset','shine','craft','summit','zone','clinic','toll','gender','formed','shield','glad','swipe','enemy','folks','grade','rely','thrown','myth','costs','sports','detect','index','relief','karma','evolve','pink','bump','amid','vendor','chosen','chuck','lover','diet','zoom','access','length','boring','thumb','rarely','emails','mega','deputy','areas','hide','bulk','combat','merely','luxury','humor','alien','recall','shark','rebel','extent','means','plug','grid','farm','milk','remark','legacy','exceed','mirror','surely','scan','garden','laura','belief','repair','hybrid','runner','slate','nest','prize','marked','jimmy','intend','royal','cards','thread','salary','depend','string','mixed','spin','crush','gamer','bull','shows','equity','hype','monkey','kicked','sync','fiber','locked','cream','rank','ghost','rice','idiot','jumped','meter','moral','knight','drudge','niche','nook','firing','taxi','upset','excuse','handy','salt','lane','dose','bell','strip','pledge','nurse','bold','notion','carter','rant','height','slip','bang','duty','smile','beast','tone','sued','jelly','crap','hint','defeat','landed','poke','resort','forth','citing','hunt','twin','weak','root','tackle','intent','crisis','modest','juice','boast','casual','bound','lately','taught','breast','gray','class','pirate','narrow','patch','racing','groups','temple','skip','reward','laws','bureau','tight','scam','ends','hike','hood','wrap','guys','gala','newly','brands','solar','sing','charts','flood','hacked','injury','dying','stem','typing','weed','leap','escape','unlock','emerge','laden','behalf','manner','knife','severe','upper','wipe','yellow','berry','plain','less','noon','ally','mouse','legend','salad','shadow','proved','rough','occur','pride','tiger','stable','empire','twist','hoped','suburb','ballot','papa','cute','neat','mere','blew','stored','timing','shower','chest','ridge','chef','banner','array','terms','agenda','dock','plot','orders','aiming','proven','yoga','horse','cake','trivia','mentor','bail','holder','seal','steel','rolled','ripped','slot','delete','noble','suffer','bare','cousin','burst','easter','script','submit','breath','fisher','bone','metric','lift','fought','shirt','trash','scroll','nelson','hays','riot','wider','cite','twenty','scope','prices','spoken','loser','grad','tall','recap','repeat','lore','trek','singer','gossip','adults','tower','expose','cited','pile','slice','outfit','buzz','deeper','pause','insist','titled','soup','stayed','fiasco','booker','lasted','wound','loaded','angle','lied','gore','mount','sudden','couch','roman','soul','eager','blind','alarm','poster','wars','garage','excel','drawn','hated','tragic','snake','riding','tools','lean','thick','burger','pill','wive','priced','lawn','stack','logic','slam','farmer','handed','lines','polls','needs','ratio','daddy','albeit','makeup','soft','tinder','bale','plea','aboard','swing','occupy','robust','slight','loop','blamed','borrow','racial','smooth','buck','newer','stole','pursue','subtle','perk','rates','manual','butt','laying','runway','fallen','iron','ruled','tactic','radar','beef','dean','baker','lynch','rifle','onion','surge','burden','outage','finale','soda','haven','knock','sugar','rocket','razor','buddy','jokes','commit','levels','yorker','laser','marry','cities','origin','aged','keys','keno','qwerty','wolf','wise','cube','calm','dealer','grace','rope','teeth','silent','doomed','closet','shore','peek','boss','throne','fame','hits','owners','lazy','zombie','infant','chunk','dubbed','wore','deadly','tattoo','lowest','steady','span','bread','adjust','towel','beth','fool','stamp','bitch','tune','sake','ruined','johnny','serial','pipe','alto','cancel','guru','tack','wright','taco','grip','cure','tile','null','dirt','pussy','dogs','claims','spice','seller','sadly','bother','fence','swear','rail','edited','pant','neck','mainly','sauce','nerd','flurry','sequel','bloody','tact','deemed','openly','mature','dust','branch','scream','rapper','tent','copied','quoted','sperm','hunter','bolt','rage','deals','wrist','onyx','units','status','fest','oppose','clue','tail','frenzy','reap','palm','nicely','pawn','racism','dive','boot','akin','anger','views','buried','vagina','layoff','poorly','carbon','places','venue','loose','spat','gifted','mask','prompt','lord','deny','tide','coal','honey','clothe','turkey','adds','hence','owning','tweets','jewel','gulf','meteor','fusion','grain','brave','yell','hungry','setup','miller','dutch','flop','pork','fort','strict','crop','heel','belong','names','blown','cult','flower','safer','pass','upload','render','yogurt','sooner','votes','atom','tweak','castle','soviet','silk','brig','insult','layout','brad','brag','posed','tandem','spun','parts','terror','sheer','valued','waited','miles','dragon','always','cheer','shall','feat','panic','campus','sally','facial','folder','dept','stir','burned','marvel','canyon','adopt','aurora','urge','solved','shelve','anchor','iconic','keen','oral','eccl','coupon','uncle','aging','scored','oldest','squad','terry','crappy','butter','nasty','tribe','symbol','clash','wary','peer','exotic','fried','nail','hoax','slated','mice','tongue','roof','corn','olive','gunmen','cooked','packed','dump','badly','viable','stars','aerial','nude','batch','blade','partly','dickey','vital','raped','solely','parse','bite','shade','mood','alter','sole','rider','climb','freak','stunt','makers','swap','goes','slogan','busted','browse','blank','fist','risen','quest','sink','mutual','trader','inner','staged','boob','praise','baked','employ','breach','acer','draft','vague','curve','worn','timely','washed','output','geld','lamper','safely','wildly','sixth','bundle','desert','patrol','gaga','backup','booth','motive','trace','flew','soap','depth','richer','visa','awards','sexist','genre','oped','tycoon','beck','abroad','spell','shitty','toilet','spare','scout','pounds','pole','ruby','cutler','rural','jacket','drain','saga','harsh','adapt','mess','glance','retain','suing','coding','films','hater','punch','scare','humans','genius','wisdom','gates','vary','unfair','ethic','upward','inform','peeve','lone','raid','reads','dial','yield','crib','creek','liquid','girls','repeal','till','statue','prop','formal','condom','pale','donut','items','cantor','guess','oval','forces','frozen','coat','glove','dawn','skills','homes','reject','stance','drill','glory','pages','pray','parody','walker','hung','ward','jerry','acted','bored','naval','hassle','boobs','dash','sift','sniper','pond','rats','chum','asleep','splash','indoor','specie','accuse','knee','dare','urged','worthy','aide','nickel','dual','bonnie','shave','bills','toast','pepper','robin','hailed','booze','spike','namely','soccer','seized','bust','sigh','mining','micro','ultra','rubble','guitar','kink','barb','costly','behave','habits','oven','comply','immune','kith','gnat','retire','ousted','steam','casing','duke','wiped','grim','banana','tube','goods','tagged','merit','knows','merge','avatar','loyal','claw','tame','slew','coup','dame','ditch','messy','labs','levy','rented','sucked','cord','invent','stink','absent','shoes','rabbit','alike','lung','import','bacon','duck','adobe','lovely','fixing','slim','kyle','slap','pied','virgin','wink','hockey','sleek','velvet','curved','urging','leaker','fatal','beaten','sexism','dental','tuned','rated','fate','inches','resign','staple','wasted','facts','width','chips','cruel','halt','throat','traded','rental','alpha','spider','kelp','norm','wasp','limo','fare','disc','zaps','comics','pier','meeker','pickup','donate','shots','topped','clone','batman','robots','allege','fled','boys','cooper','firmly','pillow','opera','judged','feared','kirk','rushed','brook','brick','dodge','solo','bobby','seems','toxic','goat','vocal','eggs','whoa','crown','fleet','bitter','opted','pundit','aura','inmate','obtain','rubber','holly','para','tenure','vile','figs','camper','psis','byes','vigil','smog','jean','cups','slept','arts','drank','pulse','ladies','hash','yammer','palace','goals','hefty','kinda','garner','spray','poised','ranch','seize','rune','font','junior','intro','lifted','crying','ounce','aisle','cuts','heaven','tracks','afghan','manned','valid','vogue','bodies','waking','freely','proxy','firms','ought','vastly','arms','poison','files','snoop','aired','float','strain','shah','sleeve','melt','poetry','starve','czar','yurt','odor','yacht','celery','asylum','pert','fees','kiosk','lens','hail','fluid','goto','tommy','lobby','psst','bath','sack','retro','tomato','fucked','bible','sober','legs','banker','pump','mars','rove','dimes','herald','chin','rude','merger','savvy','wile','leaks','abbey','tunnel','roads','colors','lining','sneak','joey','void','liking','settle','heck','mimic','atop','purple','parade','fold','cached','drake','bars','sides','pear','wade','buyers','papers','likes','module','witch','lyric','carrot','paired','cunt','looks','rues','liver','beam','trophy','drib','rift','weep','bustle','sabra','gilt','picks','lousy','sounds','crimes','irony','sucks','whale','parole','teams','probe','slick','lure','morale','touted','thirty','relate','shiny','glow','smoked','sweat','specs','gallon','bake','twelve','belt','outer','slat','peal','puzzle','hurdle','casino','chop','prank','pastor','moody','dreams','fifty','maria','vacuum','horn','cape','lies','cared','molly','carpet','biker','tricky','greed','chili','caring','suited','remix','shout','helmet','analog','vowed','intake','laughs','tray','heroin','slave','coke','upside','ramp','drawer','booked','flesh','saint','slab','arctic','bubo','candle','babies','ranger','grave','burg','wart','spud','dais','lively','deed','gifts','fever','nanny','birds','vomit','entity','woke','permit','acne','flick','cops','walls','skull','owing','reckon','tissue','rued','smoker','jerk','oxygen','felony','exam','sealed','ache','poem','hugely','acid','bravo','tire','rogers','stein','spark','ajar','sketch','greet','cart','mill','nova','filmed','deer','funnel','feud','teddy','polish','wizard','nuts','pissed','physic','nave','banks','mildly','bishop','vibe','dated','trunk','suits','cock','overly','tips','newton','parked','vanity','hale','poker','chaos','ours','kcal','plead','eerie','lily','dray','liar','atomic','drones','owed','quip','hatred','tests','bomber','safari','arrow','cater','scaled','popped','soar','midst','whip','flame','lend','verify','divide','combo','wanna','seats','heated','seated','median','rooms','funds','posing','biased','humble','canned','veil','flawed','sponge','tier','carol','illy','almond','butler','smash','crisp','coop','dining','fringe','goos','router','puppy','songs','quirky','quiz','nerve','airway','bezel','peanut','stroke','tossed','limb','hunger','magnet','soil','advise','patron','petty','slowed','eaten','quartz','rode','junk','snack','stare','trends','portal','squash','foul','barrel','cowboy','ethnic','tick','brink','depot','naming','mommy','vodka','frat','curse','smack','caller','denial','promo','awake','tangs','joked','hugs','spicy','tooth','dice','titan','freed','elder','wisp','rapist','kayak','robbed','veto','jeez','gotta','cried','stern','shares','voters','crunch','famed','spite','tore','sheep','stark','spit','cannon','bags','blend','mids','spear','cheat','bummer','risky','scenes','sword','demise','uses','babe','hammer','differ','offset','impose','static','offers','wreck','resist','dorm','rumors','avid','lizard','lonely','glee','stride','erupt','goofy','anthem','tumor','cave','swell','surf','titles','parks','assure','temper','verbal','metro','fierce','sunset','subtly','values','shaped','depict','thief','blunt','joking','fond','nope','thou','packet','sized','reign','mild','flock','billed','bench','boxes','medal','imply','mama','halo','diary','devil','hazard','basket','trio','sang','poured','tapped','bend','hilt','vessel','grasp','sheen','reel','graves','organ','wool','civic','dongle','sock','gown','bees','breed','odds','rebels','reopen','loft','slum','omelet','grief','thrive','stereo','clown','spouse','lemon','guilt','chick','queer','ransom','blogs','mate','blink','mercy','incest','straw','addict','gauge','obese','disk','caveat','heads','dealt','piracy','foray','rhythm','memoir','pulp','dots','beware','bore','pants','thus','raping','escort','rogue','rehab','urgent','fuzzy','calmly','attach','guild','oath','rack','tender','begged','rung','flour','boxing','rams','creep','salute','foam','gaze','clad','loving','trauma','pall','heirs','thew','crater','herb','beet','moms','clap','realm','assist','flake','python','refuge','deaths','torn','cabin','purely','deaf','refund','wants','hinted','rocky','dumped','mold','hobbit','digit','relax','yours','myriad','links','donor','sizes','fabric','talks','curb','gamble','dudes','admire','pour','potato','willow','scar','shrink','scores','purl','penny','ashore','airing','arcade','styles','poss','fined','cents','halted','ponder','plunge','remake','shaw','poncho','daring','opting','texts','acre','sloppy','prone','boil','hooked','doors','trim','lesser','cutest','beard','jaguar','cooler','nuance','cares','poop','rivals','haul','teens','sworn','cough','bombed','tasks','autism','myths','toys','bane','puppet','expire','fueled','queue','strait','thrill','polar','quid','mans','stats','cats','lethal','flashy','aunt','deploy','coder','blur','grill','swirl','trait','yeti','ands','minx','gill','narc','varied','neon','lush','sens','doll','temp','unions','serf','dyer','mime','cease','lira','mantra','cache','urine','plaza','teaser','smear','cherry','reset','relied','doom','charm','cells','tilt','eagle','smiled','gently','mayhem','purge','misled','roast','clouds','damned','nigger','bumper','pasta','poet','teamed','bikini','boomer','tomb','behold','tidbit','speeds','bash','foster','scenic','mammal','doping','lacy','grudge','parrot','erotic','mighty','lined','purse','locate','jest','whine','tester','idol','sane','giants','sliver','randy','pegged','lime','insect','token','mock','scrap','lacked','wagon','bilk','treaty','lunar','tucked','ironic','armor','brake','steep','begins','sedan','rein','juror','courts','dirk','virtue','mets','fork','flee','tears','floods','raven','lame','pent','shrimp','typo','lief','jams','runt','spacey','loge','cued','punish','swath','await','matrix','snob','fief','coco','muns','cays','arias','vied','sons','finest','jungle','reno','vacant','hover','sitcom','bind','slower','eighth','reboot','rabbi','debit','unity','haze','lease','unsure','polite','pricey','lists','ably','tics','cameo','crank','swept','cinema','bounce','shelf','counts','bully','exists','minds','nephew','forms','woods','bury','clause','oxford','pieces','racked','barred','lights','creed','framed','spree','lick','brat','optic','pistol','steps','eleven','legit','abut','circa','boxer','hurry','hugged','sierra','tease','doodle','lurid','dress','bonus','rhyme','expo','faces','nights','brush','hors','drinks','gamers','usable','macs','vain','lester','unison','vent','speedy','oliver','dire','bunker','gulp','marker','cotton','moves','drum','hull','kale','streak','putt','assets','stain','triple','bulb','prey','covert','bulky','fiat','harbor','ascend','wearer','pencil','billy','inning','wisely','rerun','falls','haiku','musket','stab','peed','dale','baking','stall','porter','belly','pane','spur','helm','fuss','nutty','daft','worm','powder','gnaw','bays','subs','gape','dune','stdio','tens','motors','boards','fluke','shady','trove','align','taller','errors','loudly','jazz','clunky','juicy','naive','saver','oddly','header','export','flare','unrest','fields','tastes','delta','bride','ample','spiked','causes','unused','wholly','steer','peaked','pardon','pony','sphere','guests','prep','troy','replay','grader','powers','famous','abused','robber','crow','speck','taped','losers','clot','forty','sugary','palmer','chill','gritty','plants','surged','alas','yelled','duct','hobby','enroll','chore','yearly','bugs','yang','cheek','utter','freeze','arise','lovers','loco','zones','sander','stocks','gaffe','stale','waging','deem','steak','biking','carved','rocked','stiff','heroic','audit','dyad','chased','peel','exited','paddy','oyster','raga','teased','guided','hills','payday','hank','whit','spinal','lamp','trips','beacon','mosque','crag','latent','amber','tuck','feuds','kiwi','yous','ague','hobs','corker','nape','kegs','hexes','byway','raws','trig','hive','wander','tinted','foods','heroes','meta','ensued','queens','majors','unite','fade','kindly','endure','reside','zest','traced','hoop','finder','erase','biting','ages','invade','coif','nicer','louder','danish','evenly','mafia','salty','heir','candid','pearl','elect','tense','cursed','waving','dope','locker','sour','bits','whore','insert','mixing','sank','types','wins','quotes','kidnap','mosaic','topple','rang','visits','loom','turner','kaiser','strap','piano','carve','gram','dads','melted','misfit','themes','rooted','widow','planes','jeer','dyed','loans','grumpy','grove','beret','rigid','paddle','pupa','convey','spate','mayday','aliens','echoed','seeker','goop','macho','mourn','hosed','peers','phew','racer','hodge','viii','priest','tapper','avert','sewer','facile','dote','quirt','mays','nevi','eked','nabs','troops','diving','looper','legion','waist','watt','puff','plague','stress','diver','bronco','peril','houses','capt','signs','savage','crude','pinch','moron','ware','vegan','edges','sore','hawk','rocks','scum','helium','outcry','checks','stair','dime','chew','housed','misc','liquor','hiking','ammo','assert','hosp','clicks','chapel','roller','falcon','socket','maze','ambush','chant','ritual','bleak','slash','kicker','lulu','hookup','weaker','sacred','timed','flask','amend','patty','sesame','bran','haunt','skinny','camel','haters','shrine','deter','wooden','relay','azure','genome','gross','skirt','vein','messed','mogul','piling','dammit','facto','clerk','latte','breeze','darn','safest','sheets','echo','dent','renew','coins','digest','hatch','spoon','forbid','rounds','nerdy','flown','stew','risks','ahem','trials','meters','sticky','potter','lewis','eden','roster','cables','revolt','socked','uneasy','hunted','envy','sliced','dolly','finer','tended','fooled','grams','bolls','fridge','shove','syrup','modem','query','elbow','divert','armory','frog','hotter','roles','ripple','bronze','seeds','stigma','spaces','aqua','timer','stamps','swat','trashy','toad','spied','mesa','papal','grog','alms','lilt','hick','bahs','nils','losses','sari','foil','diner','hopper','heed','resale','plates','collar','ripe','leafy','mascot','clay','tying','victor','rested','hooter','yuks','viva','golfer','rapt','ibid','ginkgo','ouzo','ribs','hating','burns','pivot','podium','hearty','creamy','beetle','stray','coma','canoe','madden','races','feeds','stands','ninth','bounty','tricks','wheat','grind','apples','hurts','modify','bout','puce','wished','blaze','woody','fury','apex','unpaid','chord','taxing','uphold','scent','mover','strand','ninja','ankle','asks','dismal','canon','diesel','lodged','homage','brace','chem','penned','gale','regain','crane','muted','diva','mule','hollow','stripe','urns','revel','primer','roared','pave','buses','buyout','glen','scrape','alumni','peepy','onus','kine','lads','vies','bawl','budgie','gains','turd','forge','gentle','slang','albums','sorts','orphan','wacky','bask','shrunk','macro','tidy','gets','flush','muffin','fable','toke','alerts','flax','riders','sades','cane','valve','lawful','spout','trains','zoned','tuba','haft','wiener','sonar','verb','codes','quake','darker','cove','flea','masked','chimp','snag','venom','clutch','pixels','drives','ribbon','virus','spoil','typed','sneaky','burnt','unfold','dull','walled','nexus','clumsy','tout','jeans','icons'];
}


