2, "last" => 3, "category" => 22, "zip" => 10, "country" => 21, "quiz0_careerhealth" => 16, "quiz0_credit" => 17, "quiz0_debt" => 18, "quiz0_finance" => 19, "quiz0_wealth" => 20, "quiz0_rawanswers" => 23, /* quiz0_answers in IS */ "unsub_reason" => 24, "unsub_extra" => 25, "unsub_type" => 55, "unsub_date" => 56, "unsub_service" => 58, "unsub_subj" => 57, "q_unsure_credit_score" => 27, "q_not_enough_money" => 28, "q_stressed_finances" => 29, "q_credit_score" => 30, "q_credit_cards" => 31, "q_debt" => 32, "q_bills_on_time" => 33, "q_maxed_out" => 34, "q_bankruptcy" => 35, "q_home_mortgage" => 36, "q_income" => 37, "q_gender" => 38, "q_birthdate" => 39, "q_employment" => 40, "q_emergency_savings" => 41, "q_10precent_savings" => 42, "q_retire" => 43, "q_car_finance" => 44, "age" => 45, "q_home_mortgage_alt" => 47, "q_retire_alt" => 48, "q_reason" => 49, "q_age" => 50, "key2" => 53, "key3" => 52, "key4" => 54, "clickid" => 59 ); var $lists = array("presale" => PRESALE_ID, "buyer" => 4, "quiz" => 3, "webinar" => 16, "invite" => 17, "quiz2" => 19, "presale_back" => 22, "presale_front_a" => 20, "presale_front_b" => 21, "presale_front_test01_current" => 23, "presale_front_test01_charlotte" => 24, "presale_front_test01_bd" => 25, "presale_back_test01" => 26, "quiz_test01_current" => 27, "quiz_test01_charlotte" => 28, "quiz_test01_bd" => 29, "presale_split" => 32, "quiz_split" => 30, "re-engagement" => 33, "accidental unsubscribe" => 37, "Abandoned Cart - 25% Off" => 44, "Abandoned Cart - Half Off" => 43, "Abandoned Cart - Main" => 41, "Abandoned Cart - Trial" => 42 ); // var $url_first = 'http://mail2beta.thecreditsolutionprogram.com/xml.php'; // var $lists_first = array( // "presale" => PRESALE_ID, /*"quiz" => 3,*/ "presale_split" => 32); // var $fields_first = array( // "category" => 22, // "key2" => 53, // "key3" => 52, // "key4" => 54, // "clickid" => 59 // ); var $dumpdir = "/mnt/interspire-dumps/"; function _log($err, $inxml, $outxml) { log_error_to_apache("InterSpire > $err"); if (file_exists($this->dumpdir)) { $fname = date("YmdHisu"); file_put_contents("{$this->dumpdir}{$fname}-in.xml", $inxml); file_put_contents("{$this->dumpdir}{$fname}-out.xml", $outxml); } } function _call($xml, $log_failures = TRUE) { return $this->_call_raw($xml, $log_failures, FALSE); } // function _call_first($xml, $log_failures = TRUE) { // if (defined("USE_FIRST")) // return $this->_call_raw($xml, $log_failures, TRUE); // else // return TRUE; // } function _call_raw($xml, $log_failures, $first) { $req = " {$this->user} {$this->token} {$xml} "; $ch = curl_init(/*$first ? $this->url_first : */ $this->url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $req); $result = @curl_exec($ch); $xml_doc = FALSE; if($result === false) { $this->_log("Request failed", $req, ""); } else { $xml_doc = simplexml_load_string($result); if ($xml_doc->status != 'SUCCESS' && !preg_match('/[0-9]+/', $xml_doc->errormessage)) $this->_log($xml_doc->errormessage, $req, $result); } return $xml_doc; } function _find_list_id($list_name) { if (isset($this->lists[$list_name])) return $this->lists[$list_name]; log_error_to_apache("Unknown list $list_name"); $ret = $this->_call(" user GetLists
"); foreach($ret->data->item as $listrec) { if ($listrec->name == $list_name) return $listrec->listid; } return PRESALE_ID; //presale by default } function _subscribe($email, $list, $cf_init = array(), $cf_update = array()) { if (!defined("IDLER_PROCESSED")) { log_error_to_apache("Subscribe without idler at ". $_SERVER["REQUEST_URI"]."|".$_SERVER["HTTP_REFERER"]); } $listid = $this->_find_list_id($list); $email = Subst_fix_email($email); $c = ""; foreach($cf_init as $key => $val) $c .= "".$this->fields[$key]."". "\n"; $r = $this->_call(" subscribers AddSubscriberToList
$email $listid html yes {$c}
", FALSE); $in_list = $r != FALSE && $r->status != 'SUCCESS' && intval($r->errormessage) > 0; if ($in_list && count($cf_update) > 0) { foreach($cf_update as $key => $val) $this->_call(" subscribers SaveSubscriberCustomField
{$r->errormessage} ".$this->fields[$key]."
"); } /* if (isset($this->lists_first[$list])) { $listid = $this->lists_first[$list]; $r = $this->_call_first(" subscribers AddSubscriberToList
$email $listid html yes {$c}
", FALSE); $in_list2 = $r != FALSE && $r->status != 'SUCCESS' && intval($r->errormessage) > 0; if ($in_list2 && count($cf_update) > 0) { foreach($cf_update as $key => $val) if (isset($this->fields_first[$key])) $this->_call_first(" subscribers SaveSubscriberCustomField
{$r->errormessage} ".$this->fields_first[$key]."
"); } } */ return $in_list; } function _unsubscribe($email, $list) { $email = Subst_fix_email($email); /* if (isset($this->lists_first[$list])) { $listid = $this->lists_first[$list]; $r = $this->_call_first(" subscribers UnsubscribeSubscriber
$email $listid
", FALSE); } */ $listid = $this->_find_list_id($list); $r = $this->_call(" subscribers UnsubscribeSubscriber
$email $listid
", FALSE); //email address of the subscriber //id of the list the subscriber belongs to //id of the subscriber } function _category_from_email($email) { $e = strtolower($email); $cat = ""; if (strpos($e, "@yahoo.com") !== FALSE || strpos($e, "@ymail.com") !== FALSE) $cat = "yahoo"; else if (strpos($e, "@gmail.com") !== FALSE) $cat = "gmail"; else if (strpos($e, "@msn.com") !== FALSE) $cat = "msn"; else if (strpos($e, "@live.com") !== FALSE) $cat = "live"; else if (strpos($e, "@hotmail.com") !== FALSE) $cat = "hotmail"; else if (strpos($e, "@aol.com") !== FALSE) $cat = "aol"; else if (strpos($e, "@comcast.net") !== FALSE) $cat = "comcast"; return $cat; } function _find_last_sent_email($email) { return array("", ""); } //Function from iam/admin/functions/api/subscribers.php / ValidEmail function is_valid_email($email) { $email = trim($email); // If the email is empty it can't be valid if (empty($email)) { return false; } // Email address is too long if (strlen($email) > 256) { return false; } // If the email doesnt have exactle 1 @ it isnt valid if (substr_count($email, '@') != 1) { return false; } // double check there are no double dots in the address anywhere. if (substr_count($email, '..') > 0) { return false; } $matches = array(); $local_matches = array(); preg_match(':^([^@]+)@([a-zA-Z0-9\-\[][a-zA-Z0-9\-\.\]]{0,254}[^\.])$:', $email, $matches); if (count($matches) != 3) { return false; } $local = $matches[1]; $domain = $matches[2]; // If the local part has a space but isnt inside quotes its invalid if (strpos($local, ' ') && (substr($local, 0, 1) != '"' || substr($local, -1, 1) != '"')) { return false; } // If there are not exactly 0 and 2 quotes if (substr_count($local, '"') != 0 && substr_count($local, '"') != 2) { return false; } // if the local part starts with a dot (.) if (substr($local, 0, 1) == '.' || substr($local, -1, 1) == '.') { return false; } // If the local string doesnt start and end with quotes if ((strpos($local, '"') || strpos($local, ' ')) && (substr($local, 0, 1) != '"' || substr($local, -1, 1) != '"')) { return false; } preg_match(':^([\ \"\w\!\#\$\%\&\'\*\+\-\/\=\?\^\_\`\{\|\}\~\.]{1,64}$):', $local, $local_matches); if (empty($local_matches)) { return false; } // if the domain has a [ at the start or ] at the end, it'll be an ip address. // which means we do extra checks. if (substr($domain, 0, 1) == '[' || substr($domain, -1, 1) == ']') { preg_match(':^(\[(\d{2,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\])$:', $domain, $ip_matches); // there should be 6 matches if it's a valid ip address email. // the first two are the domain name (one for the original text, the second for the matched text) // the next 4 are the numbers (a, b, c, d). if (count($ip_matches) != 6) { return false; } // make sure each part of the ip address is between 0 and 255. foreach (array(2,3,4,5) as $match_id) { if ($ip_matches[$match_id] < 0 || $ip_matches[$match_id] > 255) { return false; } } } // Check the domain has at least 1 dot in it if (strpos($domain, '.') !== false) { return true; } return false; } /* function test_subscribe() { //regular subscription // $this->_subscribe("dtc.kay@gmail.com", "presale"); // $this->_subscribe("kay@adbeat.com", "presale"); //custom fields - missing in array and complex xml // $this->_subscribe("dtc.kay@gmail.com", "presale", TRUE, // array("state" => "12312", "first_name" => "")); //updating of existing customer // $this->_subscribe("dtc.kay@gmail.com", "presale", TRUE, // array("state" => "123123123")); //missing list // $this->_subscribe("dtc.kay@gmail.com", "prsale"); } function test_unsubscribe() { $this->on_unsubscribe("dtc.kay@gmail.com", "test", "123"); } */ function on_subscribe($email, $list, $clickid = "") { $this->_subscribe($email, $list, array( // "ip" => strval(@$_SERVER["REMOTE_ADDR"]), "clickid" => $clickid, "category" => $this->_category_from_email($email), "key2" => array_rand(array("A" => "A", "B" => "B")), "key3" => array_rand(array("A" => "A", "B" => "B", "C" => "C")), "key4" => array_rand(array("A" => "A", "B" => "B", "C" => "C", "D" => "D")) )); } function on_checkout($email, $old_email, $first, $last, $zip, $country) { $this->_unsubscribe($email, "presale_split"); $this->_unsubscribe($email, "presale"); if ($old_email != "" && $old_email != $email) $this->_unsubscribe($old_email, "presale"); // moved to GA now /* $this->_subscribe($email, "buyer", array( // "ip" => strval(@$_SERVER["REMOTE_ADDR"]), "first" => $first, "last" => $last, "zip" => $zip, "country" => $country, "category" => $this->_category_from_email($email)) ); */ } function on_quiz($email, $first, $fields, $lists = "quiz", $plists = "presale") { // $fields["key2"] = array_rand(array("A" => "A", "B" => "B")); // $fields["key3"] = array_rand(array("A" => "A", "B" => "B", "C" => "C")); // $fields["key4"] = array_rand(array("A" => "A", "B" => "B", "C" => "C", "D" => "D")); $custom = array(); foreach($fields as $key => $val) if (isset($this->fields[strtolower($key)])) $custom[strtolower($key)] = $val; $custom["first"] = $first; $lists = explode(",", $lists); foreach($lists as $list) if ($list != "" && $list != "none") $this->_subscribe($email, $list, $custom, $custom); /* $plists = explode(",", $plists); foreach($plists as $plist) if ($plist != "" && $plist != "none") $this->_subscribe($email, $plist, array( "first" => $first, "category" => $this->_category_from_email($email), "key2" => array_rand(array("A" => "A", "B" => "B")), "key3" => array_rand(array("A" => "A", "B" => "B", "C" => "C")), "key4" => array_rand(array("A" => "A", "B" => "B", "C" => "C", "D" => "D")) )); */ } function on_unsubscribe_one_list($email, $list) { $this->_unsubscribe($email, $list); } function unsubscribe($email, $reason, $extra, $type = FALSE, $date = FALSE) { $result = -1; $ret = $this->_call(" subscribers GetSubscribers
$email any
", FALSE); $ids = ""; $subscribers = @$ret->data->subscriberlist->item; if (count($subscribers) > 0) { $count = 0; foreach($subscribers as $subscriber) { //".$subscriber->subscriberid." $ids.= "".$subscriber->subscriberid.""; $r = $this->_call(" subscribers UnsubscribeSubscriber
".$subscriber->emailaddress." ".$subscriber->listid."
", FALSE); if ($r && $r->status == "SUCCESS") $count++; } $result = "unsubscribed $count out of ".count($subscribers); } if ($ids != "") { $update = array("unsub_reason" => $reason); if ($extra != "") $update["unsub_extra"] = $extra; if ($type) $update["unsub_type"] = $type; if ($date) $update["unsub_date"] = $date; foreach($update as $key => $val) $this->_call(" subscribers SaveSubscriberCustomField
$ids ".$this->fields[$key]."
"); } return $result; } function unsubscribe2($email, $subj, $reason, $extra, $type, $service, $date, $partial = FALSE) { $skip_list = $partial ? 37 : -1; //accidental unsubscribe list $result = -1; $ret = $this->_call(" subscribers GetSubscribers
$email any
", FALSE); $ids = ""; $subscribers = @$ret->data->subscriberlist->item; if (count($subscribers) > 0) { $count = 0; foreach ($subscribers as $subscriber) { $ids.= "".$subscriber->subscriberid.""; if ($subscriber->listid == $skip_list) continue; $r = $this->_call(" subscribers UnsubscribeSubscriber
".$subscriber->emailaddress." ".$subscriber->listid."
", FALSE); if ($r && $r->status == "SUCCESS") $count++; } $result = "unsubscribed $count out of ".count($subscribers); } if ($ids != "") { $update = array(); if ($subj) $update["unsub_subj"] = $subj; if ($reason) $update["unsub_reason"] = $reason; if ($extra) $update["unsub_extra"] = $extra; if ($service) $update["unsub_service"] = $service; if ($type) $update["unsub_type"] = $type; if ($date) $update["unsub_date"] = $date; foreach($update as $key => $val) $this->_call(" subscribers SaveSubscriberCustomField
$ids ".$this->fields[$key]."
"); } return $result; } /* function unsubscribe2first($email, $subj, $reason, $extra, $type, $service, $date) { $result = -1; $ret = $this->_call_first(" subscribers GetSubscribers
$email any
", FALSE); $subscribers = @$ret->data->subscriberlist->item; if (count($subscribers) > 0) { $count = 0; foreach($subscribers as $subscriber) { $r = $this->_call_first(" subscribers UnsubscribeSubscriber
".$subscriber->emailaddress." ".$subscriber->listid."
", FALSE); if ($r && $r->status == "SUCCESS") $count++; } $result = "unsubscribed $count out of ".count($subscribers); } return $result; } */ //TODO: remove; outdated function on_unsubscribe($email, $reason, $extra, $type = FALSE, $date = FALSE) { $result = -1; $ret = $this->_call(" subscribers GetSubscribers
$email any
", FALSE); $ids = ""; $subscribers = @$ret->data->subscriberlist->item; if (count($subscribers) > 0) { foreach($subscribers as $subscriber) $ids.= "".$subscriber->subscriberid.""; $result = count($subscribers); } if ($ids != "") { $update = array("unsub_reason" => $reason); if ($extra != "") $update["unsub_extra"] = $extra; if ($type) $update["unsub_type"] = $type; if ($date) $update["unsub_date"] = $date; foreach($update as $key => $val) $this->_call(" subscribers SaveSubscriberCustomField
$ids ".$this->fields[$key]."
"); } return $result; } function assign_presale_keys($email) { $ret = $this->_call(" subscribers GetSubscribers
$email 1
", FALSE); $ids = ""; $subscribers = @$ret->data->subscriberlist->item; if (count($subscribers) > 0) { foreach($subscribers as $subscriber) { if ($subscriber->listid == 1) $ids.= "".$subscriber->subscriberid.""; } $result = count($subscribers); } if ($ids != "") { $update = array( "key2" => array_rand(array("A" => "A", "B" => "B")), "key3" => array_rand(array("A" => "A", "B" => "B", "C" => "C")), "key4" => array_rand(array("A" => "A", "B" => "B", "C" => "C", "D" => "D")) ); foreach($update as $key => $val) $this->_call(" subscribers SaveSubscriberCustomField
$ids ".$this->fields[$key]."
"); } return $result; } } //$is = new InterSpire(); //echo $is->_find_list_id("presale"), "
"; //echo $is->_find_list_id("Quiz"), "
"; /* if (isset($_GET["test123123123"])) { $is = new InterSpire(); // if ($_GET["test123123123"] == "subscribe") // $is->test_subscribe(); // else if ($_GET["test123123123"] == "unsubscribe") $is->on_unsubscribe("dtc.kay@gmail.com", "test", "123"); } // */ 1, "QUIZ0_DEBT" => 2, "QUIZ0_FINANCE" => 3, "QUIZ0_CAREERHEALTH" => 4, "QUIZ0_WEALTH" => 5, "QUIZ0_RAWANSWERS" => 6, "QUIZ0_A1" => 7, "QUIZ0_A2" => 8, "QUIZ0_A3" => 9, "QUIZ0_A4" => 10, "QUIZ0_A5" => 11, "QUIZ0_A6" => 12, "QUIZ0_A7" => 13, "QUIZ0_A8" => 14, "QUIZ0_A9" => 15, "QUIZ0_A10" => 16, "QUIZ0_A11" => 17, "QUIZ0_A12" => 18, "QUIZ0_A13" => 19, "QUIZ0_A14" => 20, "QUIZ0_A15" => 21, "UNSUB_REASON" => 23, "UNSUB_EXTRA" => 24, "UNSUB_DATETIMEGMT" => 25, "CAT_DOMAIN" => 37, # For SendGrid groups "INFO_CAMPAIGN" => 30, "INFO_STARTER_KIT_START_DATE" => 31, "INFO_NO_UPSELL_START_DATE" => 32, "INFO_PURCHASE_CORE_DATE" => 33, "INFO_ZIP" => 34, "INFO_STATE" => 35, "INFO_PRODUCTS" => 36, "IP_ADDR" => 39, "PREPURCHASE_MSG_ID" => 40, "PREPURCHASE_MSG_SUBJ" => 41, "SOURCE" => 42, "ROTATOR_URL" => 43, "GOFREECREDIT" => 44 ); function get_category_from_email($email) { $e = strtolower($email); $cat = ""; if (strpos($e, "@yahoo.com") !== FALSE || strpos($e, "@ymail.com") !== FALSE) $cat = "yahoo"; else if (strpos($e, "@gmail.com") !== FALSE) $cat = "gmail"; else if (strpos($e, "@msn.com") !== FALSE) $cat = "msn"; else if (strpos($e, "@live.com") !== FALSE) $cat = "live"; else if (strpos($e, "@hotmail.com") !== FALSE) $cat = "hotmail"; else if (strpos($e, "@aol.com") !== FALSE) $cat = "aol"; else if (strpos($e, "@comcast.net") !== FALSE) $cat = "comcast"; return $cat; } function log_error_to_apache() { $args = func_get_args(); $msg = array_shift($args); $str = @vsprintf($msg, $args); if ($str === FALSE) $str = "$msg;".json_encode($args); error_log($str, 4, E_WARNING); } function redirect_and_die($loc, $msg) { header("Location: $loc"); echo "$msg"; die(); } "ahoo.com|yhoo.com|yaoo.com|yaho.com|yaho.com|yahoocom|yahoo.om|yahoo.cm|yahoo.co|yyahoo.com|yaahoo.com|yahhoo.com|yahooo.com|yahooo.com|yahoo..com|yahoo.ccom|yahoo.coom|yahoo.comm|ayhoo.com|yhaoo.com|yaoho.com|yaho.ocom|yahooc.om|yahoo.ocm|yahoo.cmo|tahoo.com|6ahoo.com|7ahoo.com|uahoo.com|jahoo.com|hahoo.com|gahoo.com|yqhoo.com|ywhoo.com|yshoo.com|yxhoo.com|yzhoo.com|yagoo.com|yayoo.com|yauoo.com|yajoo.com|yanoo.com|yaboo.com|yahio.com|yah9o.com|yah0o.com|yahpo.com|yahlo.com|yahko.com|yahoi.com|yaho9.com|yaho0.com|yahop.com|yahol.com|yahok.com|yahoo.xom|yahoo.dom|yahoo.fom|yahoo.vom|yahoo.cim|yahoo.c9m|yahoo.c0m|yahoo.cpm|yahoo.clm|yahoo.ckm|yahoo.con|yahoo.coj|yahoo.cok|tyahoo.com|ytahoo.com|6yahoo.com|y6ahoo.com|7yahoo.com|y7ahoo.com|uyahoo.com|yuahoo.com|jyahoo.com|yjahoo.com|hyahoo.com|yhahoo.com|gyahoo.com|ygahoo.com|yqahoo.com|yaqhoo.com|ywahoo.com|yawhoo.com|ysahoo.com|yashoo.com|yxahoo.com|yaxhoo.com|yzahoo.com|yazhoo.com|yaghoo.com|yahgoo.com|yayhoo.com|yahyoo.com|yauhoo.com|yahuoo.com|yajhoo.com|yahjoo.com|yanhoo.com|yahnoo.com|yabhoo.com|yahboo.com|yahioo.com|yahoio.com|yah9oo.com|yaho9o.com|yah0oo.com|yaho0o.com|yahpoo.com|yahopo.com|yahloo.com|yaholo.com|yahkoo.com|yahoko.com|yahoio.com|yahooi.com|yaho9o.com|yahoo9.com|yaho0o.com|yahoo0.com|yahopo.com|yahoop.com|yaholo.com|yahool.com|yahoko.com|yahook.com|yahoo.xcom|yahoo.cxom|yahoo.dcom|yahoo.cdom|yahoo.fcom|yahoo.cfom|yahoo.vcom|yahoo.cvom|yahoo.ciom|yahoo.coim|yahoo.c9om|yahoo.co9m|yahoo.c0om|yahoo.co0m|yahoo.cpom|yahoo.copm|yahoo.clom|yahoo.colm|yahoo.ckom|yahoo.cokm|yahoo.conm|yahoo.comn|yahoo.cojm|yahoo.comj|yahoo.cokm|yahoo.comk", "gmail.com" => "|gail.com|gmil.com|gmal.com|gmai.com|gmailcom|gmail.om|gmail.cm|gmail.co|ggmail.com|gmmail.com|gmaail.com|gmaiil.com|gmaill.com|gmail..com|gmail.ccom|gmail.coom|gmail.comm|mgail.com|gamil.com|gmial.com|gmali.com|gmai.lcom|gmailc.om|gmail.ocm|gmail.cmo|fmail.com|tmail.com|hmail.com|bmail.com|vmail.com|gnail.com|gjail.com|gkail.com|gmqil.com|gmwil.com|gmsil.com|gmxil.com|gmzil.com|gmaul.com|gma8l.com|gma9l.com|gmaol.com|gmall.com|gmakl.com|gmajl.com|gmaik.com|gmaio.com|gmaip.com|gmail.xom|gmail.dom|gmail.fom|gmail.vom|gmail.cim|gmail.c9m|gmail.c0m|gmail.cpm|gmail.clm|gmail.ckm|gmail.con|gmail.coj|gmail.cok|fgmail.com|gfmail.com|tgmail.com|gtmail.com|ygmail.com|gymail.com|hgmail.com|ghmail.com|bgmail.com|gbmail.com|vgmail.com|gvmail.com|gnmail.com|gmnail.com|gjmail.com|gmjail.com|gkmail.com|gmkail.com|gmqail.com|gmaqil.com|gmwail.com|gmawil.com|gmsail.com|gmasil.com|gmxail.com|gmaxil.com|gmzail.com|gmazil.com|gmauil.com|gmaiul.com|gma8il.com|gmai8l.com|gma9il.com|gmai9l.com|gmaoil.com|gmaiol.com|gmalil.com|gmaill.com|gmakil.com|gmaikl.com|gmajil.com|gmaijl.com|gmaikl.com|gmailk.com|gmaiol.com|gmailo.com|gmaipl.com|gmailp.com|gmail.xcom|gmail.cxom|gmail.dcom|gmail.cdom|gmail.fcom|gmail.cfom|gmail.vcom|gmail.cvom|gmail.ciom|gmail.coim|gmail.c9om|gmail.co9m|gmail.c0om|gmail.co0m|gmail.cpom|gmail.copm|gmail.clom|gmail.colm|gmail.ckom|gmail.cokm|gmail.conm|gmail.comn|gmail.cojm|gmail.comj|gmail.cokm|gmail.comk", "comcast.com" => "omcast.net|cmcast.net|cocast.net|comast.net|comcst.net|comcat.net|comcas.net|comcastnet|comcast.et|comcast.nt|comcast.ne|ccomcast.net|coomcast.net|commcast.net|comccast.net|comcaast.net|comcasst.net|comcastt.net|comcast..net|comcast.nnet|comcast.neet|comcast.nett|ocmcast.net|cmocast.net|cocmast.net|comacst.net|comcsat.net|comcats.net|comcas.tnet|comcastn.et|comcast.ent|comcast.nte|xomcast.net|domcast.net|fomcast.net|vomcast.net|cimcast.net|c9mcast.net|c0mcast.net|cpmcast.net|clmcast.net|ckmcast.net|concast.net|cojcast.net|cokcast.net|comxast.net|comdast.net|comfast.net|comvast.net|comcqst.net|comcwst.net|comcsst.net|comcxst.net|comczst.net|comcaat.net|comcawt.net|comcaet.net|comcadt.net|comcaxt.net|comcazt.net|comcasr.net|comcas5.net|comcas6.net|comcasy.net|comcash.net|comcasg.net|comcasf.net|comcast.bet|comcast.het|comcast.jet|comcast.met|comcast.nwt|comcast.n3t|comcast.n4t|comcast.nrt|comcast.nft|comcast.ndt|comcast.nst|comcast.ner|comcast.ne5|comcast.ne6|comcast.ney|comcast.neh|comcast.neg|comcast.nef|xcomcast.net|cxomcast.net|dcomcast.net|cdomcast.net|fcomcast.net|cfomcast.net|vcomcast.net|cvomcast.net|ciomcast.net|coimcast.net|c9omcast.net|co9mcast.net|c0omcast.net|co0mcast.net|cpomcast.net|copmcast.net|clomcast.net|colmcast.net|ckomcast.net|cokmcast.net|conmcast.net|comncast.net|cojmcast.net|comjcast.net|cokmcast.net|comkcast.net|comxcast.net|comcxast.net|comdcast.net|comcdast.net|comfcast.net|comcfast.net|comvcast.net|comcvast.net|comcqast.net|comcaqst.net|comcwast.net|comcawst.net|comcsast.net|comcasst.net|comcxast.net|comcaxst.net|comczast.net|comcazst.net|comcaast.net|comcasat.net|comcawst.net|comcaswt.net|comcaest.net|comcaset.net|comcadst.net|comcasdt.net|comcaxst.net|comcasxt.net|comcazst.net|comcaszt.net|comcasrt.net|comcastr.net|comcas5t.net|comcast5.net|comcas6t.net|comcast6.net|comcasyt.net|comcasty.net|comcasht.net|comcasth.net|comcasgt.net|comcastg.net|comcasft.net|comcastf.net|comcast.bnet|comcast.nbet|comcast.hnet|comcast.nhet|comcast.jnet|comcast.njet|comcast.mnet|comcast.nmet|comcast.nwet|comcast.newt|comcast.n3et|comcast.ne3t|comcast.n4et|comcast.ne4t|comcast.nret|comcast.nert|comcast.nfet|comcast.neft|comcast.ndet|comcast.nedt|comcast.nset|comcast.nest|comcast.nert|comcast.netr|comcast.ne5t|comcast.net5|comcast.ne6t|comcast.net6|comcast.neyt|comcast.nety|comcast.neht|comcast.neth|comcast.negt|comcast.netg|comcast.neft|comcast.netf", "att.net" => "tt.net|at.net|at.net|attnet|att.et|att.nt|att.ne|aatt.net|attt.net|attt.net|att..net|att.nnet|att.neet|att.nett|tat.net|at.tnet|attn.et|att.ent|att.nte|qtt.net|wtt.net|stt.net|xtt.net|ztt.net|art.net|a5t.net|a6t.net|ayt.net|aht.net|agt.net|aft.net|atr.net|at5.net|at6.net|aty.net|ath.net|atg.net|atf.net|att.bet|att.het|att.jet|att.met|att.nwt|att.n3t|att.n4t|att.nrt|att.nft|att.ndt|att.nst|att.ner|att.ne5|att.ne6|att.ney|att.neh|att.neg|att.nef|qatt.net|aqtt.net|watt.net|awtt.net|satt.net|astt.net|xatt.net|axtt.net|zatt.net|aztt.net|artt.net|atrt.net|a5tt.net|at5t.net|a6tt.net|at6t.net|aytt.net|atyt.net|ahtt.net|atht.net|agtt.net|atgt.net|aftt.net|atft.net|atrt.net|attr.net|at5t.net|att5.net|at6t.net|att6.net|atyt.net|atty.net|atht.net|atth.net|atgt.net|attg.net|atft.net|attf.net|att.bnet|att.nbet|att.hnet|att.nhet|att.jnet|att.njet|att.mnet|att.nmet|att.nwet|att.newt|att.n3et|att.ne3t|att.n4et|att.ne4t|att.nret|att.nert|att.nfet|att.neft|att.ndet|att.nedt|att.nset|att.nest|att.nert|att.netr|att.ne5t|att.net5|att.ne6t|att.net6|att.neyt|att.nety|att.neht|att.neth|att.negt|att.netg|att.neft|att.netf", "msn.com" => "sn.com|mn.com|ms.com|msncom|msn.om|msn.cm|msn.co|mmsn.com|mssn.com|msnn.com|msn..com|msn.ccom|msn.coom|msn.comm|smn.com|mns.com|ms.ncom|msnc.om|msn.ocm|msn.cmo|nsn.com|jsn.com|ksn.com|man.com|mwn.com|men.com|mdn.com|mxn.com|mzn.com|msb.com|msh.com|msj.com|msm.com|msn.xom|msn.dom|msn.fom|msn.vom|msn.cim|msn.c9m|msn.c0m|msn.cpm|msn.clm|msn.ckm|msn.con|msn.coj|msn.cok|nmsn.com|mnsn.com|jmsn.com|mjsn.com|kmsn.com|mksn.com|masn.com|msan.com|mwsn.com|mswn.com|mesn.com|msen.com|mdsn.com|msdn.com|mxsn.com|msxn.com|mzsn.com|mszn.com|msbn.com|msnb.com|mshn.com|msnh.com|msjn.com|msnj.com|msmn.com|msnm.com|msn.xcom|msn.cxom|msn.dcom|msn.cdom|msn.fcom|msn.cfom|msn.vcom|msn.cvom|msn.ciom|msn.coim|msn.c9om|msn.co9m|msn.c0om|msn.co0m|msn.cpom|msn.copm|msn.clom|msn.colm|msn.ckom|msn.cokm|msn.conm|msn.comn|msn.cojm|msn.comj|msn.cokm|msn.comk", "sbcglobal.net" => "bcglobal.net|scglobal.net|sbglobal.net|sbclobal.net|sbcgobal.net|sbcglbal.net|sbcgloal.net|sbcglobl.net|sbcgloba.net|sbcglobalnet|sbcglobal.et|sbcglobal.nt|sbcglobal.ne|ssbcglobal.net|sbbcglobal.net|sbccglobal.net|sbcgglobal.net|sbcgllobal.net|sbcgloobal.net|sbcglobbal.net|sbcglobaal.net|sbcgloball.net|sbcglobal..net|sbcglobal.nnet|sbcglobal.neet|sbcglobal.nett|bscglobal.net|scbglobal.net|sbgclobal.net|sbclgobal.net|sbcgolbal.net|sbcglboal.net|sbcgloabl.net|sbcglobla.net|sbcgloba.lnet|sbcglobaln.et|sbcglobal.ent|sbcglobal.nte|abcglobal.net|wbcglobal.net|ebcglobal.net|dbcglobal.net|xbcglobal.net|zbcglobal.net|svcglobal.net|sgcglobal.net|shcglobal.net|sncglobal.net|sbxglobal.net|sbdglobal.net|sbfglobal.net|sbvglobal.net|sbcflobal.net|sbctlobal.net|sbcylobal.net|sbchlobal.net|sbcblobal.net|sbcvlobal.net|sbcgkobal.net|sbcgoobal.net|sbcgpobal.net|sbcglibal.net|sbcgl9bal.net|sbcgl0bal.net|sbcglpbal.net|sbcgllbal.net|sbcglkbal.net|sbcgloval.net|sbcglogal.net|sbcglohal.net|sbcglonal.net|sbcglobql.net|sbcglobwl.net|sbcglobsl.net|sbcglobxl.net|sbcglobzl.net|sbcglobak.net|sbcglobao.net|sbcglobap.net|sbcglobal.bet|sbcglobal.het|sbcglobal.jet|sbcglobal.met|sbcglobal.nwt|sbcglobal.n3t|sbcglobal.n4t|sbcglobal.nrt|sbcglobal.nft|sbcglobal.ndt|sbcglobal.nst|sbcglobal.ner|sbcglobal.ne5|sbcglobal.ne6|sbcglobal.ney|sbcglobal.neh|sbcglobal.neg|sbcglobal.nef|asbcglobal.net|sabcglobal.net|wsbcglobal.net|swbcglobal.net|esbcglobal.net|sebcglobal.net|dsbcglobal.net|sdbcglobal.net|xsbcglobal.net|sxbcglobal.net|zsbcglobal.net|szbcglobal.net|svbcglobal.net|sbvcglobal.net|sgbcglobal.net|sbgcglobal.net|shbcglobal.net|sbhcglobal.net|snbcglobal.net|sbncglobal.net|sbxcglobal.net|sbcxglobal.net|sbdcglobal.net|sbcdglobal.net|sbfcglobal.net|sbcfglobal.net|sbvcglobal.net|sbcvglobal.net|sbcfglobal.net|sbcgflobal.net|sbctglobal.net|sbcgtlobal.net|sbcyglobal.net|sbcgylobal.net|sbchglobal.net|sbcghlobal.net|sbcbglobal.net|sbcgblobal.net|sbcvglobal.net|sbcgvlobal.net|sbcgklobal.net|sbcglkobal.net|sbcgolobal.net|sbcgloobal.net|sbcgplobal.net|sbcglpobal.net|sbcgliobal.net|sbcgloibal.net|sbcgl9obal.net|sbcglo9bal.net|sbcgl0obal.net|sbcglo0bal.net|sbcglpobal.net|sbcglopbal.net|sbcgllobal.net|sbcglolbal.net|sbcglkobal.net|sbcglokbal.net|sbcglovbal.net|sbcglobval.net|sbcglogbal.net|sbcglobgal.net|sbcglohbal.net|sbcglobhal.net|sbcglonbal.net|sbcglobnal.net|sbcglobqal.net|sbcglobaql.net|sbcglobwal.net|sbcglobawl.net|sbcglobsal.net|sbcglobasl.net|sbcglobxal.net|sbcglobaxl.net|sbcglobzal.net|sbcglobazl.net|sbcglobakl.net|sbcglobalk.net|sbcglobaol.net|sbcglobalo.net|sbcglobapl.net|sbcglobalp.net|sbcglobal.bnet|sbcglobal.nbet|sbcglobal.hnet|sbcglobal.nhet|sbcglobal.jnet|sbcglobal.njet|sbcglobal.mnet|sbcglobal.nmet|sbcglobal.nwet|sbcglobal.newt|sbcglobal.n3et|sbcglobal.ne3t|sbcglobal.n4et|sbcglobal.ne4t|sbcglobal.nret|sbcglobal.nert|sbcglobal.nfet|sbcglobal.neft|sbcglobal.ndet|sbcglobal.nedt|sbcglobal.nset|sbcglobal.nest|sbcglobal.nert|sbcglobal.netr|sbcglobal.ne5t|sbcglobal.net5|sbcglobal.ne6t|sbcglobal.net6|sbcglobal.neyt|sbcglobal.nety|sbcglobal.neht|sbcglobal.neth|sbcglobal.negt|sbcglobal.netg|sbcglobal.neft|sbcglobal.netf", "live.com" => "ive.com|lve.com|lie.com|liv.com|livecom|live.om|live.cm|live.co|llive.com|liive.com|livve.com|livee.com|live..com|live.ccom|live.coom|live.comm|ilve.com|lvie.com|liev.com|liv.ecom|livec.om|live.ocm|live.cmo|kive.com|oive.com|pive.com|luve.com|l8ve.com|l9ve.com|love.com|llve.com|lkve.com|ljve.com|lice.com|life.com|lige.com|libe.com|livw.com|liv3.com|liv4.com|livr.com|livf.com|livd.com|livs.com|live.xom|live.dom|live.fom|live.vom|live.cim|live.c9m|live.c0m|live.cpm|live.clm|live.ckm|live.con|live.coj|live.cok|klive.com|lkive.com|olive.com|loive.com|plive.com|lpive.com|luive.com|liuve.com|l8ive.com|li8ve.com|l9ive.com|li9ve.com|loive.com|liove.com|llive.com|lilve.com|lkive.com|likve.com|ljive.com|lijve.com|licve.com|livce.com|lifve.com|livfe.com|ligve.com|livge.com|libve.com|livbe.com|livwe.com|livew.com|liv3e.com|live3.com|liv4e.com|live4.com|livre.com|liver.com|livfe.com|livef.com|livde.com|lived.com|livse.com|lives.com|live.xcom|live.cxom|live.dcom|live.cdom|live.fcom|live.cfom|live.vcom|live.cvom|live.ciom|live.coim|live.c9om|live.co9m|live.c0om|live.co0m|live.cpom|live.copm|live.clom|live.colm|live.ckom|live.cokm|live.conm|live.comn|live.cojm|live.comj|live.cokm|live.comk", "verizon.net" => "erizon.net|vrizon.net|veizon.net|verzon.net|verion.net|verizn.net|verizo.net|verizonnet|verizon.et|verizon.nt|verizon.ne|vverizon.net|veerizon.net|verrizon.net|veriizon.net|verizzon.net|verizoon.net|verizonn.net|verizon..net|verizon.nnet|verizon.neet|verizon.nett|evrizon.net|vreizon.net|veirzon.net|verzion.net|veriozn.net|verizno.net|verizo.nnet|verizonn.et|verizon.ent|verizon.nte|cerizon.net|ferizon.net|gerizon.net|berizon.net|vwrizon.net|v3rizon.net|v4rizon.net|vrrizon.net|vfrizon.net|vdrizon.net|vsrizon.net|veeizon.net|ve4izon.net|ve5izon.net|vetizon.net|vegizon.net|vefizon.net|vedizon.net|veruzon.net|ver8zon.net|ver9zon.net|verozon.net|verlzon.net|verkzon.net|verjzon.net|veriaon.net|verison.net|verixon.net|verizin.net|veriz9n.net|veriz0n.net|verizpn.net|verizln.net|verizkn.net|verizob.net|verizoh.net|verizoj.net|verizom.net|verizon.bet|verizon.het|verizon.jet|verizon.met|verizon.nwt|verizon.n3t|verizon.n4t|verizon.nrt|verizon.nft|verizon.ndt|verizon.nst|verizon.ner|verizon.ne5|verizon.ne6|verizon.ney|verizon.neh|verizon.neg|verizon.nef|cverizon.net|vcerizon.net|fverizon.net|vferizon.net|gverizon.net|vgerizon.net|bverizon.net|vberizon.net|vwerizon.net|vewrizon.net|v3erizon.net|ve3rizon.net|v4erizon.net|ve4rizon.net|vrerizon.net|verrizon.net|vferizon.net|vefrizon.net|vderizon.net|vedrizon.net|vserizon.net|vesrizon.net|veerizon.net|vereizon.net|ve4rizon.net|ver4izon.net|ve5rizon.net|ver5izon.net|vetrizon.net|vertizon.net|vegrizon.net|vergizon.net|vefrizon.net|verfizon.net|vedrizon.net|verdizon.net|veruizon.net|veriuzon.net|ver8izon.net|veri8zon.net|ver9izon.net|veri9zon.net|veroizon.net|veriozon.net|verlizon.net|verilzon.net|verkizon.net|verikzon.net|verjizon.net|verijzon.net|veriazon.net|verizaon.net|veriszon.net|verizson.net|verixzon.net|verizxon.net|verizion.net|verizoin.net|veriz9on.net|verizo9n.net|veriz0on.net|verizo0n.net|verizpon.net|verizopn.net|verizlon.net|verizoln.net|verizkon.net|verizokn.net|verizobn.net|verizonb.net|verizohn.net|verizonh.net|verizojn.net|verizonj.net|verizomn.net|verizonm.net|verizon.bnet|verizon.nbet|verizon.hnet|verizon.nhet|verizon.jnet|verizon.njet|verizon.mnet|verizon.nmet|verizon.nwet|verizon.newt|verizon.n3et|verizon.ne3t|verizon.n4et|verizon.ne4t|verizon.nret|verizon.nert|verizon.nfet|verizon.neft|verizon.ndet|verizon.nedt|verizon.nset|verizon.nest|verizon.nert|verizon.netr|verizon.ne5t|verizon.net5|verizon.ne6t|verizon.net6|verizon.neyt|verizon.nety|verizon.neht|verizon.neth|verizon.negt|verizon.netg|verizon.neft|verizon.netf", "cox.net" => "ox.net|cx.net|co.net|coxnet|cox.et|cox.nt|cox.ne|ccox.net|coox.net|coxx.net|cox..net|cox.nnet|cox.neet|cox.nett|ocx.net|cxo.net|co.xnet|coxn.et|cox.ent|cox.nte|xox.net|dox.net|fox.net|vox.net|cix.net|c9x.net|c0x.net|cpx.net|clx.net|ckx.net|coz.net|cos.net|cod.net|coc.net|cox.bet|cox.het|cox.jet|cox.met|cox.nwt|cox.n3t|cox.n4t|cox.nrt|cox.nft|cox.ndt|cox.nst|cox.ner|cox.ne5|cox.ne6|cox.ney|cox.neh|cox.neg|cox.nef|xcox.net|cxox.net|dcox.net|cdox.net|fcox.net|cfox.net|vcox.net|cvox.net|ciox.net|coix.net|c9ox.net|co9x.net|c0ox.net|co0x.net|cpox.net|copx.net|clox.net|colx.net|ckox.net|cokx.net|cozx.net|coxz.net|cosx.net|coxs.net|codx.net|coxd.net|cocx.net|coxc.net|cox.bnet|cox.nbet|cox.hnet|cox.nhet|cox.jnet|cox.njet|cox.mnet|cox.nmet|cox.nwet|cox.newt|cox.n3et|cox.ne3t|cox.n4et|cox.ne4t|cox.nret|cox.nert|cox.nfet|cox.neft|cox.ndet|cox.nedt|cox.nset|cox.nest|cox.nert|cox.netr|cox.ne5t|cox.net5|cox.ne6t|cox.net6|cox.neyt|cox.nety|cox.neht|cox.neth|cox.negt|cox.netg|cox.neft|cox.netf", "ymail.com" => "yail.com|ymil.com|ymal.com|ymai.com|ymailcom|ymail.om|ymail.cm|ymail.co|yymail.com|ymmail.com|ymaail.com|ymaiil.com|ymaill.com|ymail..com|ymail.ccom|ymail.coom|ymail.comm|myail.com|yamil.com|ymial.com|ymali.com|ymai.lcom|ymailc.om|ymail.ocm|ymail.cmo|tmail.com|6mail.com|7mail.com|umail.com|jmail.com|hmail.com|ynail.com|yjail.com|ykail.com|ymqil.com|ymwil.com|ymsil.com|ymxil.com|ymzil.com|ymaul.com|yma8l.com|yma9l.com|ymaol.com|ymall.com|ymakl.com|ymajl.com|ymaik.com|ymaio.com|ymaip.com|ymail.xom|ymail.dom|ymail.fom|ymail.vom|ymail.cim|ymail.c9m|ymail.c0m|ymail.cpm|ymail.clm|ymail.ckm|ymail.con|ymail.coj|ymail.cok|tymail.com|ytmail.com|6ymail.com|y6mail.com|7ymail.com|y7mail.com|uymail.com|yumail.com|jymail.com|yjmail.com|hymail.com|yhmail.com|gymail.com|ygmail.com|ynmail.com|ymnail.com|yjmail.com|ymjail.com|ykmail.com|ymkail.com|ymqail.com|ymaqil.com|ymwail.com|ymawil.com|ymsail.com|ymasil.com|ymxail.com|ymaxil.com|ymzail.com|ymazil.com|ymauil.com|ymaiul.com|yma8il.com|ymai8l.com|yma9il.com|ymai9l.com|ymaoil.com|ymaiol.com|ymalil.com|ymaill.com|ymakil.com|ymaikl.com|ymajil.com|ymaijl.com|ymaikl.com|ymailk.com|ymaiol.com|ymailo.com|ymaipl.com|ymailp.com|ymail.xcom|ymail.cxom|ymail.dcom|ymail.cdom|ymail.fcom|ymail.cfom|ymail.vcom|ymail.cvom|ymail.ciom|ymail.coim|ymail.c9om|ymail.co9m|ymail.c0om|ymail.co0m|ymail.cpom|ymail.copm|ymail.clom|ymail.colm|ymail.ckom|ymail.cokm|ymail.conm|ymail.comn|ymail.cojm|ymail.comj|ymail.cokm|ymail.comk", "bellsouth.net" => "ellsouth.net|bllsouth.net|belsouth.net|belsouth.net|bellouth.net|bellsuth.net|bellsoth.net|bellsouh.net|bellsout.net|bellsouthnet|bellsouth.et|bellsouth.nt|bellsouth.ne|bbellsouth.net|beellsouth.net|belllsouth.net|belllsouth.net|bellssouth.net|bellsoouth.net|bellsouuth.net|bellsoutth.net|bellsouthh.net|bellsouth..net|bellsouth.nnet|bellsouth.neet|bellsouth.nett|ebllsouth.net|blelsouth.net|belslouth.net|bellosuth.net|bellsuoth.net|bellsotuh.net|bellsouht.net|bellsout.hnet|bellsouthn.et|bellsouth.ent|bellsouth.nte|vellsouth.net|gellsouth.net|hellsouth.net|nellsouth.net|bwllsouth.net|b3llsouth.net|b4llsouth.net|brllsouth.net|bfllsouth.net|bdllsouth.net|bsllsouth.net|beklsouth.net|beolsouth.net|beplsouth.net|belksouth.net|belosouth.net|belpsouth.net|bellaouth.net|bellwouth.net|belleouth.net|belldouth.net|bellxouth.net|bellzouth.net|bellsiuth.net|bells9uth.net|bells0uth.net|bellsputh.net|bellsluth.net|bellskuth.net|bellsoyth.net|bellso7th.net|bellso8th.net|bellsoith.net|bellsokth.net|bellsojth.net|bellsohth.net|bellsourh.net|bellsou5h.net|bellsou6h.net|bellsouyh.net|bellsouhh.net|bellsough.net|bellsoufh.net|bellsoutg.net|bellsouty.net|bellsoutu.net|bellsoutj.net|bellsoutn.net|bellsoutb.net|bellsouth.bet|bellsouth.het|bellsouth.jet|bellsouth.met|bellsouth.nwt|bellsouth.n3t|bellsouth.n4t|bellsouth.nrt|bellsouth.nft|bellsouth.ndt|bellsouth.nst|bellsouth.ner|bellsouth.ne5|bellsouth.ne6|bellsouth.ney|bellsouth.neh|bellsouth.neg|bellsouth.nef|vbellsouth.net|bvellsouth.net|gbellsouth.net|bgellsouth.net|hbellsouth.net|bhellsouth.net|nbellsouth.net|bnellsouth.net|bwellsouth.net|bewllsouth.net|b3ellsouth.net|be3llsouth.net|b4ellsouth.net|be4llsouth.net|brellsouth.net|berllsouth.net|bfellsouth.net|befllsouth.net|bdellsouth.net|bedllsouth.net|bsellsouth.net|besllsouth.net|bekllsouth.net|belklsouth.net|beollsouth.net|belolsouth.net|bepllsouth.net|belplsouth.net|belklsouth.net|bellksouth.net|belolsouth.net|bellosouth.net|belplsouth.net|bellpsouth.net|bellasouth.net|bellsaouth.net|bellwsouth.net|bellswouth.net|bellesouth.net|bellseouth.net|belldsouth.net|bellsdouth.net|bellxsouth.net|bellsxouth.net|bellzsouth.net|bellszouth.net|bellsiouth.net|bellsoiuth.net|bells9outh.net|bellso9uth.net|bells0outh.net|bellso0uth.net|bellspouth.net|bellsoputh.net|bellslouth.net|bellsoluth.net|bellskouth.net|bellsokuth.net|bellsoyuth.net|bellsouyth.net|bellso7uth.net|bellsou7th.net|bellso8uth.net|bellsou8th.net|bellsoiuth.net|bellsouith.net|bellsokuth.net|bellsoukth.net|bellsojuth.net|bellsoujth.net|bellsohuth.net|bellsouhth.net|bellsourth.net|bellsoutrh.net|bellsou5th.net|bellsout5h.net|bellsou6th.net|bellsout6h.net|bellsouyth.net|bellsoutyh.net|bellsouhth.net|bellsouthh.net|bellsougth.net|bellsoutgh.net|bellsoufth.net|bellsoutfh.net|bellsoutgh.net|bellsouthg.net|bellsoutyh.net|bellsouthy.net|bellsoutuh.net|bellsouthu.net|bellsoutjh.net|bellsouthj.net|bellsoutnh.net|bellsouthn.net|bellsoutbh.net|bellsouthb.net|bellsouth.bnet|bellsouth.nbet|bellsouth.hnet|bellsouth.nhet|bellsouth.jnet|bellsouth.njet|bellsouth.mnet|bellsouth.nmet|bellsouth.nwet|bellsouth.newt|bellsouth.n3et|bellsouth.ne3t|bellsouth.n4et|bellsouth.ne4t|bellsouth.nret|bellsouth.nert|bellsouth.nfet|bellsouth.neft|bellsouth.ndet|bellsouth.nedt|bellsouth.nset|bellsouth.nest|bellsouth.nert|bellsouth.netr|bellsouth.ne5t|bellsouth.net5|bellsouth.ne6t|bellsouth.net6|bellsouth.neyt|bellsouth.nety|bellsouth.neht|bellsouth.neth|bellsouth.negt|bellsouth.netg|bellsouth.neft|bellsouth.netf", "roadrunner.com" => "oadrunner.com|radrunner.com|rodrunner.com|roarunner.com|roadunner.com|roadrnner.com|roadruner.com|roadruner.com|roadrunnr.com|roadrunne.com|roadrunnercom|roadrunner.om|roadrunner.cm|roadrunner.co|rroadrunner.com|rooadrunner.com|roaadrunner.com|roaddrunner.com|roadrrunner.com|roadruunner.com|roadrunnner.com|roadrunnner.com|roadrunneer.com|roadrunnerr.com|roadrunner..com|roadrunner.ccom|roadrunner.coom|roadrunner.comm|oradrunner.com|raodrunner.com|rodarunner.com|roardunner.com|roadurnner.com|roadrnuner.com|roadrunenr.com|roadrunnre.com|roadrunne.rcom|roadrunnerc.om|roadrunner.ocm|roadrunner.cmo|eoadrunner.com|4oadrunner.com|5oadrunner.com|toadrunner.com|goadrunner.com|foadrunner.com|doadrunner.com|riadrunner.com|r9adrunner.com|r0adrunner.com|rpadrunner.com|rladrunner.com|rkadrunner.com|roqdrunner.com|rowdrunner.com|rosdrunner.com|roxdrunner.com|rozdrunner.com|roasrunner.com|roaerunner.com|roarrunner.com|roafrunner.com|roacrunner.com|roaxrunner.com|roadeunner.com|road4unner.com|road5unner.com|roadtunner.com|roadgunner.com|roadfunner.com|roaddunner.com|roadrynner.com|roadr7nner.com|roadr8nner.com|roadrinner.com|roadrknner.com|roadrjnner.com|roadrhnner.com|roadrubner.com|roadruhner.com|roadrujner.com|roadrumner.com|roadrunber.com|roadrunher.com|roadrunjer.com|roadrunmer.com|roadrunnwr.com|roadrunn3r.com|roadrunn4r.com|roadrunnrr.com|roadrunnfr.com|roadrunndr.com|roadrunnsr.com|roadrunnee.com|roadrunne4.com|roadrunne5.com|roadrunnet.com|roadrunneg.com|roadrunnef.com|roadrunned.com|roadrunner.xom|roadrunner.dom|roadrunner.fom|roadrunner.vom|roadrunner.cim|roadrunner.c9m|roadrunner.c0m|roadrunner.cpm|roadrunner.clm|roadrunner.ckm|roadrunner.con|roadrunner.coj|roadrunner.cok|eroadrunner.com|reoadrunner.com|4roadrunner.com|r4oadrunner.com|5roadrunner.com|r5oadrunner.com|troadrunner.com|rtoadrunner.com|groadrunner.com|rgoadrunner.com|froadrunner.com|rfoadrunner.com|droadrunner.com|rdoadrunner.com|rioadrunner.com|roiadrunner.com|r9oadrunner.com|ro9adrunner.com|r0oadrunner.com|ro0adrunner.com|rpoadrunner.com|ropadrunner.com|rloadrunner.com|roladrunner.com|rkoadrunner.com|rokadrunner.com|roqadrunner.com|roaqdrunner.com|rowadrunner.com|roawdrunner.com|rosadrunner.com|roasdrunner.com|roxadrunner.com|roaxdrunner.com|rozadrunner.com|roazdrunner.com|roasdrunner.com|roadsrunner.com|roaedrunner.com|roaderunner.com|roardrunner.com|roadrrunner.com|roafdrunner.com|roadfrunner.com|roacdrunner.com|roadcrunner.com|roaxdrunner.com|roadxrunner.com|roaderunner.com|roadreunner.com|road4runner.com|roadr4unner.com|road5runner.com|roadr5unner.com|roadtrunner.com|roadrtunner.com|roadgrunner.com|roadrgunner.com|roadfrunner.com|roadrfunner.com|roaddrunner.com|roadrdunner.com|roadryunner.com|roadruynner.com|roadr7unner.com|roadru7nner.com|roadr8unner.com|roadru8nner.com|roadriunner.com|roadruinner.com|roadrkunner.com|roadruknner.com|roadrjunner.com|roadrujnner.com|roadrhunner.com|roadruhnner.com|roadrubnner.com|roadrunbner.com|roadruhnner.com|roadrunhner.com|roadrujnner.com|roadrunjner.com|roadrumnner.com|roadrunmner.com|roadrunbner.com|roadrunnber.com|roadrunhner.com|roadrunnher.com|roadrunjner.com|roadrunnjer.com|roadrunmner.com|roadrunnmer.com|roadrunnwer.com|roadrunnewr.com|roadrunn3er.com|roadrunne3r.com|roadrunn4er.com|roadrunne4r.com|roadrunnrer.com|roadrunnerr.com|roadrunnfer.com|roadrunnefr.com|roadrunnder.com|roadrunnedr.com|roadrunnser.com|roadrunnesr.com|roadrunneer.com|roadrunnere.com|roadrunne4r.com|roadrunner4.com|roadrunne5r.com|roadrunner5.com|roadrunnetr.com|roadrunnert.com|roadrunnegr.com|roadrunnerg.com|roadrunnefr.com|roadrunnerf.com|roadrunnedr.com|roadrunnerd.com|roadrunner.xcom|roadrunner.cxom|roadrunner.dcom|roadrunner.cdom|roadrunner.fcom|roadrunner.cfom|roadrunner.vcom|roadrunner.cvom|roadrunner.ciom|roadrunner.coim|roadrunner.c9om|roadrunner.co9m|roadrunner.c0om|roadrunner.co0m|roadrunner.cpom|roadrunner.copm|roadrunner.clom|roadrunner.colm|roadrunner.ckom|roadrunner.cokm|roadrunner.conm|roadrunner.comn|roadrunner.cojm|roadrunner.comj|roadrunner.cokm|roadrunner.comk", "juno.com" => "uno.com|jno.com|juo.com|jun.com|junocom|juno.om|juno.cm|juno.co|jjuno.com|juuno.com|junno.com|junoo.com|juno..com|juno.ccom|juno.coom|juno.comm|ujno.com|jnuo.com|juon.com|jun.ocom|junoc.om|juno.ocm|juno.cmo|huno.com|uuno.com|iuno.com|kuno.com|muno.com|nuno.com|jyno.com|j7no.com|j8no.com|jino.com|jkno.com|jjno.com|jhno.com|jubo.com|juho.com|jujo.com|jumo.com|juni.com|jun9.com|jun0.com|junp.com|junl.com|junk.com|juno.xom|juno.dom|juno.fom|juno.vom|juno.cim|juno.c9m|juno.c0m|juno.cpm|juno.clm|juno.ckm|juno.con|juno.coj|juno.cok|hjuno.com|jhuno.com|ujuno.com|juuno.com|ijuno.com|jiuno.com|kjuno.com|jkuno.com|mjuno.com|jmuno.com|njuno.com|jnuno.com|jyuno.com|juyno.com|j7uno.com|ju7no.com|j8uno.com|ju8no.com|jiuno.com|juino.com|jkuno.com|jukno.com|jjuno.com|jujno.com|jhuno.com|juhno.com|jubno.com|junbo.com|juhno.com|junho.com|jujno.com|junjo.com|jumno.com|junmo.com|junio.com|junoi.com|jun9o.com|juno9.com|jun0o.com|juno0.com|junpo.com|junop.com|junlo.com|junol.com|junko.com|junok.com|juno.xcom|juno.cxom|juno.dcom|juno.cdom|juno.fcom|juno.cfom|juno.vcom|juno.cvom|juno.ciom|juno.coim|juno.c9om|juno.co9m|juno.c0om|juno.co0m|juno.cpom|juno.copm|juno.clom|juno.colm|juno.ckom|juno.cokm|juno.conm|juno.comn|juno.cojm|juno.comj|juno.cokm|juno.comk", "charter.net" => "harter.net|carter.net|chrter.net|chater.net|charer.net|chartr.net|charte.net|charternet|charter.et|charter.nt|charter.ne|ccharter.net|chharter.net|chaarter.net|charrter.net|chartter.net|charteer.net|charterr.net|charter..net|charter.nnet|charter.neet|charter.nett|hcarter.net|cahrter.net|chrater.net|chatrer.net|charetr.net|chartre.net|charte.rnet|chartern.et|charter.ent|charter.nte|xharter.net|dharter.net|fharter.net|vharter.net|cgarter.net|cyarter.net|cuarter.net|cjarter.net|cnarter.net|cbarter.net|chqrter.net|chwrter.net|chsrter.net|chxrter.net|chzrter.net|chaeter.net|cha4ter.net|cha5ter.net|chatter.net|chagter.net|chafter.net|chadter.net|charrer.net|char5er.net|char6er.net|charyer.net|charher.net|charger.net|charfer.net|chartwr.net|chart3r.net|chart4r.net|chartrr.net|chartfr.net|chartdr.net|chartsr.net|chartee.net|charte4.net|charte5.net|chartet.net|charteg.net|chartef.net|charted.net|charter.bet|charter.het|charter.jet|charter.met|charter.nwt|charter.n3t|charter.n4t|charter.nrt|charter.nft|charter.ndt|charter.nst|charter.ner|charter.ne5|charter.ne6|charter.ney|charter.neh|charter.neg|charter.nef|xcharter.net|cxharter.net|dcharter.net|cdharter.net|fcharter.net|cfharter.net|vcharter.net|cvharter.net|cgharter.net|chgarter.net|cyharter.net|chyarter.net|cuharter.net|chuarter.net|cjharter.net|chjarter.net|cnharter.net|chnarter.net|cbharter.net|chbarter.net|chqarter.net|chaqrter.net|chwarter.net|chawrter.net|chsarter.net|chasrter.net|chxarter.net|chaxrter.net|chzarter.net|chazrter.net|chaerter.net|chareter.net|cha4rter.net|char4ter.net|cha5rter.net|char5ter.net|chatrter.net|chartter.net|chagrter.net|chargter.net|chafrter.net|charfter.net|chadrter.net|chardter.net|charrter.net|chartrer.net|char5ter.net|chart5er.net|char6ter.net|chart6er.net|charyter.net|chartyer.net|charhter.net|charther.net|chargter.net|chartger.net|charfter.net|chartfer.net|chartwer.net|chartewr.net|chart3er.net|charte3r.net|chart4er.net|charte4r.net|chartrer.net|charterr.net|chartfer.net|chartefr.net|chartder.net|chartedr.net|chartser.net|chartesr.net|charteer.net|chartere.net|charte4r.net|charter4.net|charte5r.net|charter5.net|chartetr.net|chartert.net|chartegr.net|charterg.net|chartefr.net|charterf.net|chartedr.net|charterd.net|charter.bnet|charter.nbet|charter.hnet|charter.nhet|charter.jnet|charter.njet|charter.mnet|charter.nmet|charter.nwet|charter.newt|charter.n3et|charter.ne3t|charter.n4et|charter.ne4t|charter.nret|charter.nert|charter.nfet|charter.neft|charter.ndet|charter.nedt|charter.nset|charter.nest|charter.nert|charter.netr|charter.ne5t|charter.net5|charter.ne6t|charter.net6|charter.neyt|charter.nety|charter.neht|charter.neth|charter.negt|charter.netg|charter.neft|charter.netf", "earthlink.net" => "arthlink.net|erthlink.net|eathlink.net|earhlink.net|eartlink.net|earthink.net|earthlnk.net|earthlik.net|earthlin.net|earthlinknet|earthlink.et|earthlink.nt|earthlink.ne|eearthlink.net|eaarthlink.net|earrthlink.net|eartthlink.net|earthhlink.net|earthllink.net|earthliink.net|earthlinnk.net|earthlinkk.net|earthlink..net|earthlink.nnet|earthlink.neet|earthlink.nett|aerthlink.net|erathlink.net|eatrhlink.net|earhtlink.net|eartlhink.net|earthilnk.net|earthlnik.net|earthlikn.net|earthlin.knet|earthlinkn.et|earthlink.ent|earthlink.nte|warthlink.net|3arthlink.net|4arthlink.net|rarthlink.net|farthlink.net|darthlink.net|sarthlink.net|eqrthlink.net|ewrthlink.net|esrthlink.net|exrthlink.net|ezrthlink.net|eaethlink.net|ea4thlink.net|ea5thlink.net|eatthlink.net|eagthlink.net|eafthlink.net|eadthlink.net|earrhlink.net|ear5hlink.net|ear6hlink.net|earyhlink.net|earhhlink.net|earghlink.net|earfhlink.net|eartglink.net|eartylink.net|eartulink.net|eartjlink.net|eartnlink.net|eartblink.net|earthkink.net|earthoink.net|earthpink.net|earthlunk.net|earthl8nk.net|earthl9nk.net|earthlonk.net|earthllnk.net|earthlknk.net|earthljnk.net|earthlibk.net|earthlihk.net|earthlijk.net|earthlimk.net|earthlinj.net|earthlini.net|earthlino.net|earthlinl.net|earthlinm.net|earthlink.bet|earthlink.het|earthlink.jet|earthlink.met|earthlink.nwt|earthlink.n3t|earthlink.n4t|earthlink.nrt|earthlink.nft|earthlink.ndt|earthlink.nst|earthlink.ner|earthlink.ne5|earthlink.ne6|earthlink.ney|earthlink.neh|earthlink.neg|earthlink.nef|wearthlink.net|ewarthlink.net|3earthlink.net|e3arthlink.net|4earthlink.net|e4arthlink.net|rearthlink.net|erarthlink.net|fearthlink.net|efarthlink.net|dearthlink.net|edarthlink.net|searthlink.net|esarthlink.net|eqarthlink.net|eaqrthlink.net|ewarthlink.net|eawrthlink.net|esarthlink.net|easrthlink.net|exarthlink.net|eaxrthlink.net|ezarthlink.net|eazrthlink.net|eaerthlink.net|earethlink.net|ea4rthlink.net|ear4thlink.net|ea5rthlink.net|ear5thlink.net|eatrthlink.net|eartthlink.net|eagrthlink.net|eargthlink.net|eafrthlink.net|earfthlink.net|eadrthlink.net|eardthlink.net|earrthlink.net|eartrhlink.net|ear5thlink.net|eart5hlink.net|ear6thlink.net|eart6hlink.net|earythlink.net|eartyhlink.net|earhthlink.net|earthhlink.net|eargthlink.net|eartghlink.net|earfthlink.net|eartfhlink.net|eartghlink.net|earthglink.net|eartyhlink.net|earthylink.net|eartuhlink.net|earthulink.net|eartjhlink.net|earthjlink.net|eartnhlink.net|earthnlink.net|eartbhlink.net|earthblink.net|earthklink.net|earthlkink.net|eartholink.net|earthloink.net|earthplink.net|earthlpink.net|earthluink.net|earthliunk.net|earthl8ink.net|earthli8nk.net|earthl9ink.net|earthli9nk.net|earthloink.net|earthlionk.net|earthllink.net|earthlilnk.net|earthlkink.net|earthliknk.net|earthljink.net|earthlijnk.net|earthlibnk.net|earthlinbk.net|earthlihnk.net|earthlinhk.net|earthlijnk.net|earthlinjk.net|earthlimnk.net|earthlinmk.net|earthlinjk.net|earthlinkj.net|earthlinik.net|earthlinki.net|earthlinok.net|earthlinko.net|earthlinlk.net|earthlinkl.net|earthlinmk.net|earthlinkm.net|earthlink.bnet|earthlink.nbet|earthlink.hnet|earthlink.nhet|earthlink.jnet|earthlink.njet|earthlink.mnet|earthlink.nmet|earthlink.nwet|earthlink.newt|earthlink.n3et|earthlink.ne3t|earthlink.n4et|earthlink.ne4t|earthlink.nret|earthlink.nert|earthlink.nfet|earthlink.neft|earthlink.ndet|earthlink.nedt|earthlink.nset|earthlink.nest|earthlink.nert|earthlink.netr|earthlink.ne5t|earthlink.net5|earthlink.ne6t|earthlink.net6|earthlink.neyt|earthlink.nety|earthlink.neht|earthlink.neth|earthlink.negt|earthlink.netg|earthlink.neft|earthlink.netf", "me.com" => "e.com|m.com|mecom|me.om|me.cm|me.co|mme.com|mee.com|me..com|me.ccom|me.coom|me.comm|em.com|m.ecom|mec.om|me.ocm|me.cmo|ne.com|je.com|ke.com|mw.com|m3.com|m4.com|mr.com|mf.com|md.com|ms.com|me.xom|me.dom|me.fom|me.vom|me.cim|me.c9m|me.c0m|me.cpm|me.clm|me.ckm|me.con|me.coj|me.cok|nme.com|mne.com|jme.com|mje.com|kme.com|mke.com|mwe.com|mew.com|m3e.com|me3.com|m4e.com|me4.com|mre.com|mer.com|mfe.com|mef.com|mde.com|med.com|mse.com|mes.com|me.xcom|me.cxom|me.dcom|me.cdom|me.fcom|me.cfom|me.vcom|me.cvom|me.ciom|me.coim|me.c9om|me.co9m|me.c0om|me.co0m|me.cpom|me.copm|me.clom|me.colm|me.ckom|me.cokm|me.conm|me.comn|me.cojm|me.comj|me.cokm|me.comk", "netzero.net" => "etzero.net|ntzero.net|nezero.net|netero.net|netzro.net|netzeo.net|netzer.net|netzeronet|netzero.et|netzero.nt|netzero.ne|nnetzero.net|neetzero.net|nettzero.net|netzzero.net|netzeero.net|netzerro.net|netzeroo.net|netzero..net|netzero.nnet|netzero.neet|netzero.nett|entzero.net|ntezero.net|neztero.net|netezro.net|netzreo.net|netzeor.net|netzer.onet|netzeron.et|netzero.ent|netzero.nte|betzero.net|hetzero.net|jetzero.net|metzero.net|nwtzero.net|n3tzero.net|n4tzero.net|nrtzero.net|nftzero.net|ndtzero.net|nstzero.net|nerzero.net|ne5zero.net|ne6zero.net|neyzero.net|nehzero.net|negzero.net|nefzero.net|netaero.net|netsero.net|netxero.net|netzwro.net|netz3ro.net|netz4ro.net|netzrro.net|netzfro.net|netzdro.net|netzsro.net|netzeeo.net|netze4o.net|netze5o.net|netzeto.net|netzego.net|netzefo.net|netzedo.net|netzeri.net|netzer9.net|netzer0.net|netzerp.net|netzerl.net|netzerk.net|netzero.bet|netzero.het|netzero.jet|netzero.met|netzero.nwt|netzero.n3t|netzero.n4t|netzero.nrt|netzero.nft|netzero.ndt|netzero.nst|netzero.ner|netzero.ne5|netzero.ne6|netzero.ney|netzero.neh|netzero.neg|netzero.nef|bnetzero.net|nbetzero.net|hnetzero.net|nhetzero.net|jnetzero.net|njetzero.net|mnetzero.net|nmetzero.net|nwetzero.net|newtzero.net|n3etzero.net|ne3tzero.net|n4etzero.net|ne4tzero.net|nretzero.net|nertzero.net|nfetzero.net|neftzero.net|ndetzero.net|nedtzero.net|nsetzero.net|nestzero.net|nertzero.net|netrzero.net|ne5tzero.net|net5zero.net|ne6tzero.net|net6zero.net|neytzero.net|netyzero.net|nehtzero.net|nethzero.net|negtzero.net|netgzero.net|neftzero.net|netfzero.net|netazero.net|netzaero.net|netszero.net|netzsero.net|netxzero.net|netzxero.net|netzwero.net|netzewro.net|netz3ero.net|netze3ro.net|netz4ero.net|netze4ro.net|netzrero.net|netzerro.net|netzfero.net|netzefro.net|netzdero.net|netzedro.net|netzsero.net|netzesro.net|netzeero.net|netzereo.net|netze4ro.net|netzer4o.net|netze5ro.net|netzer5o.net|netzetro.net|netzerto.net|netzegro.net|netzergo.net|netzefro.net|netzerfo.net|netzedro.net|netzerdo.net|netzerio.net|netzeroi.net|netzer9o.net|netzero9.net|netzer0o.net|netzero0.net|netzerpo.net|netzerop.net|netzerlo.net|netzerol.net|netzerko.net|netzerok.net|netzero.bnet|netzero.nbet|netzero.hnet|netzero.nhet|netzero.jnet|netzero.njet|netzero.mnet|netzero.nmet|netzero.nwet|netzero.newt|netzero.n3et|netzero.ne3t|netzero.n4et|netzero.ne4t|netzero.nret|netzero.nert|netzero.nfet|netzero.neft|netzero.ndet|netzero.nedt|netzero.nset|netzero.nest|netzero.nert|netzero.netr|netzero.ne5t|netzero.net5|netzero.ne6t|netzero.net6|netzero.neyt|netzero.nety|netzero.neht|netzero.neth|netzero.negt|netzero.netg|netzero.neft|netzero.netf", "rocketmail.com" => "ocketmail.com|rcketmail.com|roketmail.com|rocetmail.com|rocktmail.com|rockemail.com|rocketail.com|rocketmil.com|rocketmal.com|rocketmai.com|rocketmailcom|rocketmail.om|rocketmail.cm|rocketmail.co|rrocketmail.com|roocketmail.com|roccketmail.com|rockketmail.com|rockeetmail.com|rockettmail.com|rocketmmail.com|rocketmaail.com|rocketmaiil.com|rocketmaill.com|rocketmail..com|rocketmail.ccom|rocketmail.coom|rocketmail.comm|orcketmail.com|rcoketmail.com|rokcetmail.com|rocektmail.com|rocktemail.com|rockemtail.com|rocketamil.com|rocketmial.com|rocketmali.com|rocketmai.lcom|rocketmailc.om|rocketmail.ocm|rocketmail.cmo|eocketmail.com|4ocketmail.com|5ocketmail.com|tocketmail.com|gocketmail.com|focketmail.com|docketmail.com|ricketmail.com|r9cketmail.com|r0cketmail.com|rpcketmail.com|rlcketmail.com|rkcketmail.com|roxketmail.com|rodketmail.com|rofketmail.com|rovketmail.com|rocjetmail.com|rocietmail.com|rocoetmail.com|rocletmail.com|rocmetmail.com|rockwtmail.com|rock3tmail.com|rock4tmail.com|rockrtmail.com|rockftmail.com|rockdtmail.com|rockstmail.com|rockermail.com|rocke5mail.com|rocke6mail.com|rockeymail.com|rockehmail.com|rockegmail.com|rockefmail.com|rocketnail.com|rocketjail.com|rocketkail.com|rocketmqil.com|rocketmwil.com|rocketmsil.com|rocketmxil.com|rocketmzil.com|rocketmaul.com|rocketma8l.com|rocketma9l.com|rocketmaol.com|rocketmall.com|rocketmakl.com|rocketmajl.com|rocketmaik.com|rocketmaio.com|rocketmaip.com|rocketmail.xom|rocketmail.dom|rocketmail.fom|rocketmail.vom|rocketmail.cim|rocketmail.c9m|rocketmail.c0m|rocketmail.cpm|rocketmail.clm|rocketmail.ckm|rocketmail.con|rocketmail.coj|rocketmail.cok|erocketmail.com|reocketmail.com|4rocketmail.com|r4ocketmail.com|5rocketmail.com|r5ocketmail.com|trocketmail.com|rtocketmail.com|grocketmail.com|rgocketmail.com|frocketmail.com|rfocketmail.com|drocketmail.com|rdocketmail.com|riocketmail.com|roicketmail.com|r9ocketmail.com|ro9cketmail.com|r0ocketmail.com|ro0cketmail.com|rpocketmail.com|ropcketmail.com|rlocketmail.com|rolcketmail.com|rkocketmail.com|rokcketmail.com|roxcketmail.com|rocxketmail.com|rodcketmail.com|rocdketmail.com|rofcketmail.com|rocfketmail.com|rovcketmail.com|rocvketmail.com|rocjketmail.com|rockjetmail.com|rociketmail.com|rockietmail.com|rocoketmail.com|rockoetmail.com|roclketmail.com|rockletmail.com|rocmketmail.com|rockmetmail.com|rockwetmail.com|rockewtmail.com|rock3etmail.com|rocke3tmail.com|rock4etmail.com|rocke4tmail.com|rockretmail.com|rockertmail.com|rockfetmail.com|rockeftmail.com|rockdetmail.com|rockedtmail.com|rocksetmail.com|rockestmail.com|rockertmail.com|rocketrmail.com|rocke5tmail.com|rocket5mail.com|rocke6tmail.com|rocket6mail.com|rockeytmail.com|rocketymail.com|rockehtmail.com|rockethmail.com|rockegtmail.com|rocketgmail.com|rockeftmail.com|rocketfmail.com|rocketnmail.com|rocketmnail.com|rocketjmail.com|rocketmjail.com|rocketkmail.com|rocketmkail.com|rocketmqail.com|rocketmaqil.com|rocketmwail.com|rocketmawil.com|rocketmsail.com|rocketmasil.com|rocketmxail.com|rocketmaxil.com|rocketmzail.com|rocketmazil.com|rocketmauil.com|rocketmaiul.com|rocketma8il.com|rocketmai8l.com|rocketma9il.com|rocketmai9l.com|rocketmaoil.com|rocketmaiol.com|rocketmalil.com|rocketmaill.com|rocketmakil.com|rocketmaikl.com|rocketmajil.com|rocketmaijl.com|rocketmaikl.com|rocketmailk.com|rocketmaiol.com|rocketmailo.com|rocketmaipl.com|rocketmailp.com|rocketmail.xcom|rocketmail.cxom|rocketmail.dcom|rocketmail.cdom|rocketmail.fcom|rocketmail.cfom|rocketmail.vcom|rocketmail.cvom|rocketmail.ciom|rocketmail.coim|rocketmail.c9om|rocketmail.co9m|rocketmail.c0om|rocketmail.co0m|rocketmail.cpom|rocketmail.copm|rocketmail.clom|rocketmail.colm|rocketmail.ckom|rocketmail.cokm|rocketmail.conm|rocketmail.comn|rocketmail.cojm|rocketmail.comj|rocketmail.cokm|rocketmail.comk", "aol.com" => "ol.com|al.com|ao.com|aolcom|aol.om|aol.cm|aol.co|aaol.com|aool.com|aoll.com|aol..com|aol.ccom|aol.coom|aol.comm|oal.com|alo.com|ao.lcom|aolc.om|aol.ocm|aol.cmo|qol.com|wol.com|sol.com|xol.com|zol.com|ail.com|a9l.com|a0l.com|apl.com|all.com|akl.com|aok.com|aoo.com|aop.com|aol.xom|aol.dom|aol.fom|aol.vom|aol.cim|aol.c9m|aol.c0m|aol.cpm|aol.clm|aol.ckm|aol.con|aol.coj|aol.cok|qaol.com|aqol.com|waol.com|awol.com|saol.com|asol.com|xaol.com|axol.com|zaol.com|azol.com|aiol.com|aoil.com|a9ol.com|ao9l.com|a0ol.com|ao0l.com|apol.com|aopl.com|alol.com|aoll.com|akol.com|aokl.com|aokl.com|aolk.com|aool.com|aolo.com|aopl.com|aolp.com|aol.xcom|aol.cxom|aol.dcom|aol.cdom|aol.fcom|aol.cfom|aol.vcom|aol.cvom|aol.ciom|aol.coim|aol.c9om|aol.co9m|aol.c0om|aol.co0m|aol.cpom|aol.copm|aol.clom|aol.colm|aol.ckom|aol.cokm|aol.conm|aol.comn|aol.cojm|aol.comj|aol.cokm|aol.comk", "hotmail.com" => "otmail.com|htmail.com|homail.com|hotail.com|hotmil.com|hotmal.com|hotmai.com|hotmailcom|hotmail.om|hotmail.cm|hotmail.co|hhotmail.com|hootmail.com|hottmail.com|hotmmail.com|hotmaail.com|hotmaiil.com|hotmaill.com|hotmail..com|hotmail.ccom|hotmail.coom|hotmail.comm|ohtmail.com|htomail.com|homtail.com|hotamil.com|hotmial.com|hotmali.com|hotmai.lcom|hotmailc.om|hotmail.ocm|hotmail.cmo|gotmail.com|yotmail.com|uotmail.com|jotmail.com|notmail.com|botmail.com|hitmail.com|h9tmail.com|h0tmail.com|hptmail.com|hltmail.com|hktmail.com|hormail.com|ho5mail.com|ho6mail.com|hoymail.com|hohmail.com|hogmail.com|hofmail.com|hotnail.com|hotjail.com|hotkail.com|hotmqil.com|hotmwil.com|hotmsil.com|hotmxil.com|hotmzil.com|hotmaul.com|hotma8l.com|hotma9l.com|hotmaol.com|hotmall.com|hotmakl.com|hotmajl.com|hotmaik.com|hotmaio.com|hotmaip.com|hotmail.xom|hotmail.dom|hotmail.fom|hotmail.vom|hotmail.cim|hotmail.c9m|hotmail.c0m|hotmail.cpm|hotmail.clm|hotmail.ckm|hotmail.con|hotmail.coj|hotmail.cok|ghotmail.com|hgotmail.com|yhotmail.com|hyotmail.com|uhotmail.com|huotmail.com|jhotmail.com|hjotmail.com|nhotmail.com|hnotmail.com|bhotmail.com|hbotmail.com|hiotmail.com|hoitmail.com|h9otmail.com|ho9tmail.com|h0otmail.com|ho0tmail.com|hpotmail.com|hoptmail.com|hlotmail.com|holtmail.com|hkotmail.com|hoktmail.com|hortmail.com|hotrmail.com|ho5tmail.com|hot5mail.com|ho6tmail.com|hot6mail.com|hoytmail.com|hotymail.com|hohtmail.com|hothmail.com|hogtmail.com|hotgmail.com|hoftmail.com|hotfmail.com|hotnmail.com|hotmnail.com|hotjmail.com|hotmjail.com|hotkmail.com|hotmkail.com|hotmqail.com|hotmaqil.com|hotmwail.com|hotmawil.com|hotmsail.com|hotmasil.com|hotmxail.com|hotmaxil.com|hotmzail.com|hotmazil.com|hotmauil.com|hotmaiul.com|hotma8il.com|hotmai8l.com|hotma9il.com|hotmai9l.com|hotmaoil.com|hotmaiol.com|hotmalil.com|hotmaill.com|hotmakil.com|hotmaikl.com|hotmajil.com|hotmaijl.com|hotmaikl.com|hotmailk.com|hotmaiol.com|hotmailo.com|hotmaipl.com|hotmailp.com|hotmail.xcom|hotmail.cxom|hotmail.dcom|hotmail.cdom|hotmail.fcom|hotmail.cfom|hotmail.vcom|hotmail.cvom|hotmail.ciom|hotmail.coim|hotmail.c9om|hotmail.co9m|hotmail.c0om|hotmail.co0m|hotmail.cpom|hotmail.copm|hotmail.clom|hotmail.colm|hotmail.ckom|hotmail.cokm|hotmail.conm|hotmail.comn|hotmail.cojm|hotmail.comj|hotmail.cokm|hotmail.comk" ); $email = trim(strtolower($email)); // $email = str_replace(array("enter your email...", " "), array("", ""), $email); if ($email != "") foreach($Subst_fixes as $domain => $alts) foreach(explode("|", $alts) as $alt) if (substr($email, strlen("@$alt") * -1) === "@$alt") return str_replace("@$alt", "@$domain", $email); return $email; } /*echo Subst_fix_email("test@example.com"), "
"; echo Subst_fix_email("test@hotmail.copm"), "
"; echo Subst_fix_email("test@hhotmail.com"), "
"; echo Subst_fix_email("dtc.kay@gmail.com"), "
"; echo Subst_fix_email("test@lie.com"), "
"; echo Subst_fix_email("test@live.com"), "
"; */ logFileName, 'a+b'); if ($log) { fwrite($log, date('Y-m-d H:i:s') . "$method\t$url\n"); fwrite($log, var_export($data, true) . "\n"); } $ch = curl_init($this->apiUrl . $url); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, "1:".$this->apiKey); if ($method === "POST") { $raw = json_encode($data); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_HTTPHEADER, array( "Content-Type: application/json", "Content-Length: ".strlen($raw))); curl_setopt($ch, CURLOPT_POSTFIELDS, $raw); } else if ($method === "PUT") { $raw = json_encode($data); curl_setopt($ch, CURLOPT_POSTFIELDS, $raw); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, array( "Content-Type: application/json", "Content-Length: ".strlen($raw))); } curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $ret = curl_exec($ch); if ($log) { fwrite($log, var_export(@json_decode($ret, true), true) . "\n"); fclose($log); } return @json_decode($ret, TRUE); } public function lists() { return array(); return $this->api("GET", "/mailing_lists"); } public function findListId($list) { return false; if (file_exists($this->listsFileName)) { $lists = json_decode(file_get_contents($this->listsFileName), TRUE); if (is_array($lists) && isset($lists[$list])) return $lists[$list]; } $lists = array(); $ret = $this->lists(); foreach ($ret["data"] as $row) $lists[$row["name"]] = $row["id"]; file_put_contents($this->listsFileName, json_encode($lists)); return $lists[$list]; } public function getSubscriberEmailByIds($subscrId, $listId) { $ret = $this->api("GET", "/mailing_lists/$listId/subscribers/$subscrId"); //var_dump($ret); return isset($ret["success"]) && $ret["success"] ? $ret["data"][0]["email"] : FALSE; } public function getSubscriberProducts($email, $list) { $listId = $this->findListId($list); $emailUrl = urlencode($email); $ret = $this->api("GET", "/mailing_lists/$listId/subscribers/$emailUrl"); $ret = @$ret["data"][0]["custom_fields"]["products"]["value"]; return $ret && is_array($ret) ? array_values($ret) : array(); } public function subscribe($email, $list, $clickid = "", $key2 = "", $key3 = "", $key4 = "") { $fields = array(); if ($clickid != "" || $key2 != "") { if ($clickid != "") $fields["clickid"] = $clickid; if ($key2 != "") { $fields["key2"] = $key2; $fields["key3"] = $key3; $fields["key4"] = $key4; } } $fields["domain"] = "other"; if (stripos($email, "@gmail") !== FALSE) $fields["domain"] = "gmail"; else if (stripos($email, "@aol") !== FALSE) $fields["domain"] = "aol"; else if (stripos($email, "@yahoo") !== FALSE) $fields["domain"] = "yahoo"; else if (stripos($email, "@ymail") !== FALSE) $fields["domain"] = "yahoo"; else if (stripos($email, "@comcast") !== FALSE) $fields["domain"] = "comcast"; else if (stripos($email, "@msn") !== FALSE) $fields["domain"] = "msn"; else if (stripos($email, "@live") !== FALSE) $fields["domain"] = "msn"; else if (stripos($email, "@outlook") !== FALSE) $fields["domain"] = "msn"; else if (stripos($email, "@hotmail") !== FALSE) $fields["domain"] = "msn"; return $this->subscribeWithFields($email, $list, $fields); } public function subscribeWithFields($email, $list, $fields = FALSE) { /** We are not subscribing to GA anymore */ return; $listId = $this->findListId($list); $sub = array("email" => $email, "email_format" => "html", "status" => "active", "confirmed" => TRUE, "subscribe_time" => date("c"), "subscribe_ip" => NULL); if (is_array($fields)) $sub["custom_fields"] = $fields; $ret = $this->api("POST", "/mailing_lists/$listId/subscribers", array("subscriber" => $sub)); if (isset($ret["success"]) && $ret["success"]) { return TRUE; } else { $this->log("GreenArrow Subscribe failed", $ret); return FALSE; } } public function updateWithFields($email, $list, $fields = array()) { $listId = $this->findListId($list); $emailUrl = urlencode($email); $ret = $this->api("PUT", "/mailing_lists/$listId/subscribers/$emailUrl", array("subscriber" => array("custom_fields" => $fields))); if (isset($ret["success"]) && $ret["success"]) { return TRUE; } else { $this->log("GreenArrow update failed", $ret); return FALSE; } } protected function unsub($email, $status, $skipAccidentalUnsubscribe) { return false; $lists = $this->lists(); $emailUrl = urlencode($email); $ret = FALSE; // true if at least one unsubscribe was successfull foreach ($lists["data"] as $row) { if ($skipAccidentalUnsubscribe && $row["name"] == "Accidental Unsubscribe") continue; $result = $this->api("PUT", "/mailing_lists/".$row["id"]."/subscribers/$emailUrl", array("subscriber" => array("status" => $status))); $ret = $ret || (isset($result["success"]) && $result["success"]); } return $ret; } public function unsubAll($email, $partial = FALSE) { return $this->unsub($email, "unsubscribed", $partial); } public function unsubAllBounce($email, $partial = FALSE) { return $this->unsub($email, "bounced", $partial); } public function unsubAllSpam($email, $partial = FALSE) { return $this->unsub($email, "scomp", $partial); } public function unsubscribe($email, $list, $status = "unsubscribed") { $listId = $this->findListId($list); $emailUrl = urlencode($email); $ret = $this->api("PUT", "/mailing_lists/$listId/subscribers/$emailUrl", array("subscriber" => array("status" => $status))); return isset($ret["success"]) && $ret["success"]; } public function unsubscribeBounce($email, $list) { return $this->unsubscribe($email, $list, "bounced"); } public function unsubscribeSpam($email, $list) { return $this->unsubscribe($email, $list, "scomp"); } function getCachedName($type, $listId, $entityId, $apiUrl) { $fileName = str_replace( array("{type}", "{listId}"), array($type, $listId), $this->cacheFileName); if (file_exists($fileName)) { $entities = json_decode(file_get_contents($fileName), TRUE); if (is_array($entities) && isset($entities[$entityId])) return $entities[$entityId]; } $entities = array(); $ret = $this->api("GET", $apiUrl, array()); foreach ($ret["data"] as $row) $entities[$row["id"]] = $row["name"]; file_put_contents($fileName, json_encode($entities)); return $entities[$entityId]; } public function getAutoresponderName($listId, $respId) { return $this->getCachedName("responder", $listId, $respId, "/mailing_lists/$listId/autoresponders"); } public function getCampaignName($listId, $cmpId) { return $this->getCachedName("campaign", $listId, $cmpId, "/mailing_lists/$listId/campaigns"); } public function getAutoresponders($list) { $listId = $this->findListId($list); $ret = $this->api("GET", "/mailing_lists/$listId/autoresponders"); return isset($ret["success"]) && $ret["success"] ? $ret["data"] : FALSE; } } //$ga = new GreenArrow(); //print_r($ga->getAutoresponders("PSV3")); //var_dump($ga->getAutoresponderName(4, 679)); //var_dump($ga->getCampaignName(3, 163)); //print_r($ga->getSubscriberProducts("test@adbeat.com", "Buyers")); //print_r($ga->getSubscriberProducts("test1@adbeat.com", "Buyers")); //echo $ga->subscribeWithFields("test@adbeat.com", "Buyers", // array("full_name" => "Kay Test", "products" => "product_creditreport")) ? 1 : 0; //echo $ga->subscribeWithFields("test@adbeat.com", "Buyers", // array("full_name" => "Kay Test", "products" => "product_debts_main")) ? 1 : 0; //echo $ga->updateWithFields("test@adbeat.com", "Buyers", // array("products" => // array("product_creditreport", "product_debts_main"))) // ? 1 : 0; //print_r($ga->lists()); //var_dump($ga->unsubAllSpam("test4@adbeat.com")); //$ga->unsubscribeBounce("test4xx@adbeat.com", "test"); //echo $ga->subscribe("test3@adbeat.com", "test", "0123", "A", "B", "C") ? 1 : 0; ip = $_SERVER["REMOTE_ADDR"]; $r = curl_init($this->mm_url."l=".$this->mm_key."&i=".$this->ip); curl_setopt($r, CURLOPT_HEADER, 0); curl_setopt($r, CURLOPT_RETURNTRANSFER, 1); $this->mm_raw = (string)curl_exec($r); curl_close($r); $a = str_getcsv($this->mm_raw); $this->country = strval(@$a[0]); $this->state = strval(@$a[1]); $this->city = strval(@$a[2]); $this->zip = strval(@$a[3]); if (isset($a[10])) { error_log("MaxMind error ".$a[10]); } } } /* //[HTTP_CF_CONNECTING_IP] for CloudFlare without agent // $this->ip = "209.25.224.244"; //testing - US proxy // https://geoip.maxmind.com/f?l=okdNEiApxPp6&i=209.25.224.244 // US,GA,Atlanta,30303,33.751598,-84.391502,524,404,"Peer 1 Dedicated Hosting","Peer 1 Dedicated Hosting" // $this->ip = "209.25.224.2441"; // ,,,,,,,,,,IP_NOT_FOUND // http://geoip.maxmind.com/f?l=okdNEiApxPp6&i=66.182.124.145 // US,AZ,Maricopa,85239,33.016800,-112.202797,753,520,"Orbitel Communications, LLC","Orbitel Communications, LLC" //$s = 'US,AZ,Maricopa,85239,33.016800,-112.202797,753,520,"Orbitel Communications, LLC","Orbitel Communications, LLC"'; //print_r(str_getcsv($s)); //$m = new MaxMind(); //print_r($m); */ format('Y-m-d H:i:s'); } function parseClickId($clickid) { preg_match("/^([0-9]*)([_]*)([0-9A-Za-z_\-]*)/", $clickid, $m); return array(intval(@$m[1]), strval(@$m[3])); } /* echo "
"; //TODO: move to tests?
print_r(parseClickId(FALSE));
print_r(parseClickId(""));
print_r(parseClickId("123"));
print_r(parseClickId("aaa"));
print_r(parseClickId("123_qwe"));
print_r(parseClickId("123_qwe_asd"));
print_r(parseClickId("123_qwe-asd"));
print_r(parseClickId("123_1qwe"));
print_r(parseClickId("12a3_1qwe"));
print_r(parseClickId("1231qwe"));
*/

function formatDays($from, $to) {
	if ($from == "" || $to == "")
		return "";
	$from = $from == "now" ? time() : strtotime($from);
	$to = $to == "now" ? time() : strtotime($to);
	return intval(floor(($to - $from) / 24 / 60 / 60));
//	if ($d == 0) return "<24h";
//	else if ($d == 1) return "1 day";
//	else return "$d days";
}

function getTZ($country, $state) {
	static $timezones = FALSE;
	if ($timezones === FALSE) {
//		$tzs = apc_fetch("tcsp_timezones");
//		if (!is_array($tzs)) {
			$lines = file(__DIR__."/time_zone.csv");
			$tzs = array();
			foreach($lines as $line) {
				list($c, $s, $tz) = explode(",", $line);
				if (strlen($c) > 3) continue;
				$tz = trim($tz, " \t\n\r\0\x0B\"");
				if (!isset($tzs[$c]))
					$tzs[$c] = array();
				$tzs[$c][$s] = $tz;
			}
//			apc_store("tcsp_timezones", $tzs);
//		}
		$timezones = $tzs;
	}
	$ret = UNKNOWN_TIME_ZONE;
	if (isset($timezones[$country])) {
		if ($country == "US" && $state == "") {
			$ret = DEFAULT_TIME_ZONE;
		} else if (isset($timezones[$country][$state])) {
			$ret = $timezones[$country][$state];
		} else {
			$keys = array_keys($timezones[$country]);
			$ret = $timezones[$country][$keys[0]];
		}
	}
	return $ret;
}

function formatDateTimeTZ($datestr, $fmt, $timezone = FALSE) {
	if (!$datestr)
		return "";
//	if ($timezone === UNKNOWN_TIME_ZONE) return NULL;
	$date = new DateTime($datestr, new DateTimeZone(DEFAULT_TIME_ZONE));
	if ($timezone !== UNKNOWN_TIME_ZONE && 
		$timezone !== FALSE && $timezone != DEFAULT_TIME_ZONE)
		$date->setTimezone(new DateTimeZone($timezone));
	return $date->format($fmt);
}



//Function from iam/admin/functions/api/subscribers.php / ValidEmail
function isValidEmail($email) {
	$email = trim($email);

	// If the email is empty it can't be valid
	if (empty($email)) {
		return false;
	}

	// Email address is too long
	if (strlen($email) > 256) {
		return false;
	}

	// If the email doesnt have exactle 1 @ it isnt valid
	if (substr_count($email, '@') != 1) {
		return false;
	}

	// double check there are no double dots in the address anywhere.
	if (substr_count($email, '..') > 0) {
		return false;
	}

	$matches = array();
	$local_matches = array();
	preg_match(':^([^@]+)@([a-zA-Z0-9\-\[][a-zA-Z0-9\-\.\]]{0,254}[^\.])$:', $email, $matches);

	if (count($matches) != 3) {
		return false;
	}

	$local = $matches[1];
	$domain = $matches[2];

	// If the local part has a space but isnt inside quotes its invalid
	if (strpos($local, ' ') && (substr($local, 0, 1) != '"' || substr($local, -1, 1) != '"')) {
		return false;
	}

	// If there are not exactly 0 and 2 quotes
	if (substr_count($local, '"') != 0 && substr_count($local, '"') != 2) {
		return false;
	}

	// if the local part starts with a dot (.)
	if (substr($local, 0, 1) == '.' || substr($local, -1, 1) == '.') {
		return false;
	}

	// If the local string doesnt start and end with quotes
	if ((strpos($local, '"') || strpos($local, ' ')) && (substr($local, 0, 1) != '"' || substr($local, -1, 1) != '"')) {
		return false;
	}

	preg_match(':^([\ \"\w\!\#\$\%\&\'\*\+\-\/\=\?\^\_\`\{\|\}\~\.]{1,64}$):', $local, $local_matches);

	if (empty($local_matches)) {
		return false;
	}

	// if the domain has a [ at the start or ] at the end, it'll be an ip address.
	// which means we do extra checks.
	if (substr($domain, 0, 1) == '[' || substr($domain, -1, 1) == ']') {
		preg_match(':^(\[(\d{2,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\])$:', $domain, $ip_matches);

		// there should be 6 matches if it's a valid ip address email.
		// the first two are the domain name (one for the original text, the second for the matched text)
		// the next 4 are the numbers (a, b, c, d).
		if (count($ip_matches) != 6) {
			return false;
		}

		// make sure each part of the ip address is between 0 and 255.
		foreach (array(2,3,4,5) as $match_id) {
			if ($ip_matches[$match_id] < 0 || $ip_matches[$match_id] > 255) {
				return false;
			}
		}
	}

	// Check the domain has at least 1 dot in it
	if (strpos($domain, '.') !== false) {
		return true;
	}
	return false;
}
skip_errors = array(1062 /* duplicate insert */ );
        $this->report_errors(TRUE);
        $this->connect();
    }

    public function report_errors($status) {
        $this->errors = $status;
    }

    private function connect() {
        $this->conn = mysqli_connect("localhost", "tcsp", "0fgkl2lYYhp");
        mysqli_select_db($this->conn, "idler");
    }

    public function close() {
        mysqli_close($this->conn);
    }

    protected function log($msg) {
        if ($this->errors) {
            MySQL_log($msg);
        }
    }

    protected function run_query($args) {
        set_error_handler("MySQL_error_handler");
        $a = array();
        $sql = array_shift($args);
        foreach($args as $arg) {
            if (is_array($arg)) $this->log("Array $sql " . json_encode($args));
            $esc_arg = mysqli_real_escape_string($this->conn, $arg);
            if ($esc_arg === FALSE) {
                $this->log("MySQL Escape Failed #".mysqli_errno($this->conn)." - ".mysqli_error($this->conn) .
                    " - [$q] - [$sql]" . json_encode($a));
                # To avoid dangerous queries like DELETE FROM table WHERE id=''
                return FALSE;
            }
            array_push($a, "'$esc_arg'");
        }
        if (count($a) > 0)
            $q = @vsprintf($sql, $a);
        else
            $q = $sql;
        $r = @mysqli_query($this->conn, $q);
        $errno = mysqli_errno($this->conn);
        if ($errno != 0 && !in_array(intval($errno), $this->skip_errors)) {
            $this->log("MySQL #$errno - ".mysqli_error($this->conn) .
                " - [$q] - [$sql]" . json_encode($a, TRUE));
        }
        restore_error_handler();
        return $r;
    }

    public function query() {
        $this->run_query(func_get_args());
    }

    public function update() {
        $this->run_query(func_get_args());
        return @mysqli_affected_rows($this->conn);
    }

    public function insert() {
        $this->run_query(func_get_args());
        return @mysqli_insert_id($this->conn);
    }

    public function all() {
        $q = $this->run_query(func_get_args());
        $a = array();
        while ($r = @mysqli_fetch_object($q))
            array_push($a, $r);
        return $a;
    }

    public function row() {
        $q = $this->run_query(func_get_args());
        return $q === FALSE ? FALSE : @mysqli_fetch_object($q);
    }

    public function col() {
        $q = $this->run_query(func_get_args());
        $a = array();
        while ($r = @mysqli_fetch_array($q))
            if (count($r) > 0)
                array_push($a, $r[0]);
        return $a;
    }

    function one() {
        $q = $this->run_query(func_get_args());
        if (!$q) return FALSE;
        $r = mysqli_fetch_array($q);
        return $r && count($r) > 0 ? $r[0] : FALSE;
    }

    public function escape($arg) {
        return "'" . mysqli_real_escape_string( $this->conn, $arg ) . "'";
    }
}