Объявления

на первую страницу сайта
Земля в Вологодской области



ml_cfg=array_merge($this->option,$this->ml_cfg); if($_REQUEST[$this->ml_cfg[dbg]]==1){$this->option[debugmode]=1;} if($this->option[debugmode]) $this->option[debug_info]= "
\n\nLoad MainLink mode.{$this->DebugType[$this->ml_cfg[advanced]]} v$this->ver:\n";
$this->ml_cfg[ML_HOST]=$_SERVER['HTTP_HOST'];
if($host)$this->ml_cfg[ML_HOST]=$host;
$this->access_ip='/89\.249\.18\.60/'; // IP системы ML
return $this->_GetData($number_of_block,$parts,1);
}

// Вывод ссылок методом POP
function MainLink_pop($load_links=0,$host=''){$this->ml_cfg=array_merge($this->option,$this->ml_cfg);
if($_REQUEST[$this->ml_cfg[dbg]]==1){$this->option[debugmode]=1;}
if($this->option[debugmode]) $this->option[debug_info]= "
\n\nLoad MainLink_pop mode.{$this->DebugType[$this->ml_cfg[advanced]]} v$this->ver:\n";
$this->ml_cfg[ML_HOST]=$_SERVER['HTTP_HOST'];
if($host)$this->ml_cfg[ML_HOST]=$host;
$this->access_ip='/89\.249\.18\.60/'; // IP системы ML
return $this->_GetData($number_of_block,null,1);
}

//
// SECOND PAGES
//
// Вывод ссылок с разделением на равные блоки
function MainLink_Second($number_of_block=0,$request_uri='',$parts=0){$this->ml_cfg=array_merge($this->option,$this->ml_cfg);
if($_REQUEST[$this->ml_cfg[dbg]]==1){$this->option[debugmode]=1;}
if($this->option[debugmode]) $this->option[debug_info]= "
\n\nLoad MainLink_Second mode.{$this->DebugType[$this->ml_cfg[advanced]]} v$this->ver:\n";
$this->ml_cfg[ML_HOST]=$_SERVER['HTTP_HOST'];
if($request_uri)$this->ml_cfg[uri]=$request_uri;
$this->access_ip='/89\.249\.18\.60/'; // IP системы ML
return $this->_GetData($number_of_block,$parts,0);
}

// Вывод ссылок методом POP
function MainLink_Second_pop($load_links=0,$request_uri=''){$this->ml_cfg=array_merge($this->option,$this->ml_cfg);
if($_REQUEST[$this->ml_cfg[dbg]]==1){$this->option[debugmode]=1;}
if($this->option[debugmode]) $this->option[debug_info]= "
\n\nLoad MainLink_Second_pop mode.{$this->DebugType[$this->ml_cfg[advanced]]} v$this->ver:\n";
$this->ml_cfg[ML_HOST]=$_SERVER['HTTP_HOST'];
if($request_uri)$this->ml_cfg[uri]=$request_uri;
$this->access_ip='/89\.249\.18\.60/'; // IP системы ML
return $this->_GetData($number_of_block,null,0);
}

//
// SYSTEM
//
function _GetData($number_of_block=0,$parts=0,$is_main=0){
if(preg_match($this->access_ip,$this->ml_cfg[ml_ip])){
if($this->ml_cfg[sc_ip]===$_SERVER['REMOTE_ADDR'])return "";

if($is_main){
	$op='data_main';
	$this->ml_cfg[ml_host_name]='universal.mainlink.ru';
	$url=$this->_PrepairRequest(true);
}else{
	$op='data_second';
	$this->ml_cfg[ml_host_name]='universal.mainlink.ru';
	$url=$this->_PrepairRequest(false);
}

$url.=($this->ml_cfg[charset]?"&cs={$this->ml_cfg[charset]}":'').($this->option[debugmode]?'&d=1':'');
if($this->option[debugmode]) $this->option[debug_info].="Char set: {$this->ml_cfg[charset]}";

// RESTORE DATA
if(!$this->option["$op"]){
if($this->ml_cfg[use_cache] and !$_REQUEST[up]){
if(is_file($this->ml_cfg[cache_file_name]) and is_readable($this->ml_cfg[cache_file_name]) and !$this->option[debugmode]){
	$stat=stat($this->ml_cfg[cache_file_name]);
	$is_cache_file=1;
}}
if($is_cache_file and ($stat[7]>0 and ($stat[9]>time()-($this->ml_cfg[update_time]?$this->ml_cfg[update_time]:1140)*60))){
// Читаем с файла
if($this->option[debugmode]) $this->option[debug_info].= "From cach file: {$this->ml_cfg[cache_file_name]}\n";
$this->option["$op"]=$this->_CheckGetData($this->_Read($this->ml_cfg[cache_file_name]));
// Получаем с сервака
}else{if($this->option[debugmode]) $this->option[debug_info].= "$op: Try get by {$this->DebugDescConnect[$this->ml_cfg[connect]-1]}: $url\n";

	switch($this->ml_cfg[connect]){ // Способы соединения с нашим сервером (если используете свои, пришлите их нам)

	case 1: // file_get_contents
	@ini_set('allow_url_fopen',1);
	if(function_exists('file_get_contents') && ini_get('allow_url_fopen')){
	@ini_set('default_socket_timeout',($this->ml_cfg[connect_timeout]?$this->ml_cfg[connect_timeout]:5));
	$url="http://{$this->ml_cfg[ml_host_name]}/l.aspx?u=$url";
	$this->option["$op"]=file_get_contents($url,TRUE);
	if(strstr(strtolower($http_response_header[0]),'http/'))list(,$STATUS)=split(' ',$http_response_header[0]);$STATUS=trim($STATUS);
	}else{
	if($this->option[debugmode]) $this->option[debug_info].= "Don`t avialable: file_get_contents()!\n";
	}
	break;

	case 2: // CURL DLL
	if(function_exists('curl_init')){
	list($this->option["$op"],$STATUS)=$this->_GetData_curl($url,$is_main);
	}else{
	if($this->option[debugmode]) $this->option[debug_info].= "Don`t avialable: CURL!\n";
	}
	break;

	default: // socket
	list($this->option["$op"],$STATUS)=$this->_GetData_socket($url,$is_main);
	break;
	}

	if(($STATUS==200 and (substr($this->option["$op"],1,6)==''?1:0)) or
	 (!$this->option["$op"] and $STATUS!=200)){// Если данных от сервера нет

		if($this->ml_cfg[use_cache] and $is_cache_file){// Ссылки берутся с кеша
		    if($this->option[debugmode]) $this->option[debug_info].= "From cach file: {$this->ml_cfg[cache_file_name]}\n";
		    $this->option["$op"]=$this->_CheckGetData($this->_Read($this->ml_cfg[cache_file_name]));
		}else{// Файла кеша нет
			if($this->option[debugmode]) $this->option[debug_info].= "Host error or links` list is empty\n";
			return;
		}

	}else{// Данные от сервера получены

	    // Данные содержат ссылки
		if($this->option["$op"]){

		    $this->option["$op"]=explode(' | ',$this->option["$op"]); //грабим ссылки

		    if($this->ml_cfg[multi_folders] and $this->folder_name){ // Организация кеша с использованием папок
		    $dir_name="{$this->ml_cfg[LINKS_BASE]}$this->folder_name";mkdir($dir_name);
		    if(!is_writable($dir_name)){
			$is_chmod=chmod($dir_name,0777);
			if(!$is_chmod){if($this->option[debugmode]) $this->option[debug_info].= "File don`t save in folder $dir_name!\n";}
		    }}

			if($this->ml_cfg[use_cache] and !$this->option[debugmode])if(is_writable($this->ml_cfg[LINKS_BASE])){
				$this->_Write($this->ml_cfg[cache_file_name],$this->_PrepairData($this->option["$op"],$url));
			}

		}else{// Ссылки отсутствуют

		    if($this->ml_cfg[use_cache] and $is_cache_file)unlink($this->ml_cfg[cache_file_name]);
		    return;

		}

	}

}
	if(!$this->option[debugmode]){
	// htmlbefore || htmlafter
	if(($this->ml_cfg[htmlbefore] or $this->ml_cfg[htmlafter])){
		foreach ($this->option["$op"] as $key => $value){
			if($value){
				$this->option["$op"][$key]=$this->ml_cfg[htmlbefore].trim($value).$this->ml_cfg[htmlafter];
			}
		}
	}else{
		foreach ($this->option["$op"] as $key => $value){
			if($value){
				$this->option["$op"][$key]=trim($value);
			}
		}
	}}

}else{

	if($this->option[debugmode]) $this->option[debug_info].= "Data is set ".(is_array($this->option["$op"])?'array.':'var.').count($this->option["$op"])."\n";
	if(!$this->ml_cfg[advanced])return;

}

if($this->option["$op"]){

	if($this->option[debugmode]) $this->option[debug_info].="Data receive: ".join($this->ml_cfg[splitter],$this->option["$op"])."\n";

	if($this->option["$op"]>1){

		if($parts!==null){

			// Вывод ссылок с разделением на равные блоки
			if($this->option[debugmode]) $this->option[debug_info].= "Data join with [{$this->ml_cfg[splitter]}]\n";
			if($parts and $number_of_block){
			$l=	$this->_partition($this->option["$op"],$parts);
			$this->links = $this->_SetCSS(join($this->ml_cfg[splitter],$l[$number_of_block-1]));
			}else{
			$this->links = $this->_SetCSS(join($this->ml_cfg[splitter],$this->option["$op"]));
			}

		}else{

			// Вывод ссылок методом POP
			$nlinks = count($this->option["$op"]);
        	if (!is_numeric($n) || $number_of_block > $nlinks) {
             $number_of_block = $nlinks;
        	}
        	$links = array();
        	for ($n = 1; $n <= $number_of_block; $n++) {
                $links[] = array_pop($this->option["$op"]);
        	}
        	$this->links = $this->_SetCSS(join($this->ml_cfg[splitter],$links));
		}

	}else{

		$this->links = $this->_SetCSS($this->option["$op"][0]);

	}

}else{

	if($this->option[debugmode]) $this->option[debug_info].="Data receive is empty.\n";
}

$data=$this->_load_links();
unset($this->ml_cfg);
return $data.($this->option[debugmode]?$this->option[debug_info].'
':'').$this->messages; }else{ unset($this->ml_cfg); if($this->option[debugmode]){ $this->option[debug_info].= "Don`t install!\n".$this->messages; $this->option[debug_info].='
'."Универсальный скрипт не установлен.
\n"; } } } function _SetCSS($data){ if($this->ml_cfg[style])$data=@preg_replace("/ml_cfg[class_name])$data=@preg_replace("/(?:ml_cfg[ml_host_name], 80, $errno, $errstr, ($this->ml_cfg[connect_timeout]?$this->ml_cfg[connect_timeout]:5)); if($so){@fputs($so, $request); while($line!="\r\n"){$line=@fgets($so); if(!$code){if(strstr(strtolower($line),'http/'))list(,$code)=split(' ',$line);$code=trim($code);} } while(!feof($so))$li.=@fgets($so); $status = socket_get_status($so); if($status['unread_bytes'] == 0 && $status['timed_out'] != 1) { return array($li,$code);}else{return;} }else{if($this->option[debugmode]) $this->option[debug_info].= "Error: don`t open socket!\n";return 0;}} function _GetData_curl($url,$main=0){ $request = "{$this->ml_cfg[ml_host_name]}/l.aspx?u=$url"; $ch = @curl_init(); if($ch){ curl_setopt ($ch, CURLOPT_URL,$request); curl_setopt ($ch, CURLOPT_HEADER,0); curl_setopt ($ch, CURLOPT_RETURNTRANSFER,1); @curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,($this->ml_cfg[connect_timeout]?$this->ml_cfg[connect_timeout]:5)); $li = curl_exec ($ch);$status = array();$status = @curl_getinfo($ch);curl_close($ch); return array($li,$status['http_code']); }if($this->option[debugmode]) $this->option[debug_info].= "Error: don`t init curl!\n";return 0;} function _PrepairData($data,$url){$_data=array(data=>$data,url=>$url);return serialize($_data);} function _CheckGetData($data){$data=@unserialize($data);$data=$data[data];return $data;} function _Read($filename){ if($this->option[debugmode]) $this->option[debug_info].= "Read from file: $filename\n"; $fp = @fopen($filename, 'rb');if(!$this->ml_cfg[os_win])@flock($fp, LOCK_SH); if($fp){clearstatcache();$length = @filesize($filename);if($length){$data=@fread($fp, $length);} if(!$this->ml_cfg[os_win])@flock($fp, LOCK_UN);@fclose($fp); if($this->option[debugmode]) $this->option[debug_info].="Read from file: OK\n";return $data;}return false;} function _Write($filename,$data){ if($this->option[debugmode]) $this->option[debug_info].= "Write to file: $filename\n"; $fp = @fopen($filename, 'wb');if(!$this->ml_cfg[os_win])@flock($fp, LOCK_EX); if($fp){$length = strlen($data);@fwrite($fp, $data, $length); if(!$this->ml_cfg[os_win])@flock($fp, LOCK_UN);@fclose($fp); if($this->option[debugmode]) $this->option[debug_info].="Write file: OK\n"; return true;}return false;} function _PrepairRequest($is_main){ if($is_main){ $url=$this->ml_cfg[ML_HOST]; if($_REQUEST[dbg])$url = @str_replace(array('/?dbg=1','&dbg=1'), array('',''), $url); if($_REQUEST[up])$url = @str_replace(array('/?up=1','&up=1'), array('',''), $url); }else{$q=''; if(!$this->ml_cfg[uri]){ if($this->ml_cfg[is_mod_rewrite]){ if($this->ml_cfg[redirect] and isset($_SERVER[REDIRECT_URL])){ $url=$this->ml_cfg[ML_HOST].$_SERVER[REDIRECT_URL]; $q='REDIRECT_URL'; }else{ $url=$this->ml_cfg[ML_HOST].$_SERVER[SCRIPT_URL]; $q='SCRIPT_URL'; } }else{ if($this->ml_cfg[srv_iis]){ // IIS Microsoft $url=$this->ml_cfg[ML_HOST].$_SERVER[SCRIPT_NAME]; $q='SCRIPT_NAME'; }else{ // Все остальные сервера $url=$this->ml_cfg[ML_HOST].$_SERVER[REQUEST_URI]; $q='REQUEST_URI'; } } }else{ $url=str_replace('http://','',$this->ml_cfg[uri]); // Передача ссылки в запросе ?uri=http://ваш-сайт/ваша-страница } // Убираем сессию if(session_id()){$session=session_name()."=".session_id(); if($this->option[debugmode]) $this->option[debug_info].="Session clear: $session\n"; //$url = @str_replace($session, '', $url); $pattern = "/[?&]?$session&?/i"; $replacement = ''; $url = preg_replace($pattern, $replacement, $url); } //$url=preg_replace('`(?:www.|\?$)`','', $url); if($_REQUEST[dbg])$url = @str_replace(array('/?dbg=1','&dbg=1'), array('',''), $url); if($_REQUEST[up])$url = @str_replace(array('/?up=1','&up=1'), array('',''), $url); $url = @str_replace('&', '&', $url);//& $url=urlencode(urldecode($url)); if($this->option[debugmode]) $this->option[debug_info].="Select now URL.$q: $url\n"; } if($this->ml_cfg[use_cache]){ $file_name='ml-'.@hexdec(@crc32($url));// создания имени файла кешей if($this->ml_cfg[multi_folders]){ $this->folder_name=substr($file_name,-2).'/'; if(!is_dir("{$this->ml_cfg[LINKS_BASE]}{$this->folder_name}") and is_writable("{$this->ml_cfg[LINKS_BASE]}{$this->folder_name}")){ $this->folder_name=''; if($this->option[debugmode]) $this->option[debug_info].="Can`t use multi folders\n"; } } $this->ml_cfg[cache_file_name]="{$this->ml_cfg[LINKS_BASE]}{$this->folder_name}$file_name.lk"; } return $url; } function _load_links(){ $li = ($this->ml_cfg[span]?'ml_cfg[style_span]?" style=\"{$this->ml_cfg[style_span]}\"":'').($this->ml_cfg[class_name_span]?" class=\"{$this->ml_cfg[class_name_span]}\"":'').'>':''). ($this->ml_cfg[div]?'
ml_cfg[style_div]?" style=\"{$this->ml_cfg[style_div]}\"":'').($this->ml_cfg[class_name_div]?" class=\"{$this->ml_cfg[class_name_div]}\"":'').'>':''). $this->links. ($this->ml_cfg[div]?'
':''). ($this->ml_cfg[span]?'
':''); if($this->dont_work) $this->messages.= "Система не установленна или не сконфигурированна!
\n"; return $li; } function _partition( $input, $num ) { $count = count($input) ; if($count) $input = array_chunk($input, ceil($count/$num)) ; $input = array_pad($input, $num, array()) ; return $input ; } } // // END class ML // // Контроль версий // Определение пути вызова $ml_path=dirname(__FILE__); if(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN')$ml_path=str_replace('\\','/',preg_replace('!^[a-z]:!i','',($ml_path))); // WIN if(substr($ml_path,-1)!='/')$ml_path.='/'; // Очистка перменных $messages=''; $dont_work=0; // Загрузка файла конфигурации if (!file_exists( "{$ml_path}ml_config.php" ) || filesize( "{$ml_path}ml_config.php" ) < 10) { $messages= "Пожайлуста запустите install.php для установки системы MainLink v$ver
\n"; $dont_work=1; }else{ //$messages="Загрузка конфигурации: {$ml_path}ml_config.php\n"; require_once("{$ml_path}ml_config.php"); } // Инициализация класса $ml = new ML(); $ml->ver=$ver; $ml->option=$ml_cfg; // загрузка конфигурационных данных $ml->messages.=$messages; //Проверка файла конфигурации и вызова функций if(file_exists( $ml->option[ML_ROOT].'install.php') and !$dont_work){$ml->messages.= "Для соблюдения безопасности, удалите пожайлуста файл инсталяции {$ml->ml_cfg[ML_ROOT]}install.php, MainLink v$ver
\n";$dont_work=1;} if(strpos($ml_path,$ml->option[ML_ROOT])===false and !$dont_work){$ml->messages.="Путь вызова {$ml_path}ML.php не соответствует пути ({$ml->option[ML_ROOT]})ML.php введенному при инсталяции!
\n";$dont_work=1;} if($dont_work){$ml->dont_work=$dont_work;$ml->option[debugmode]=$dont_work;} // Вызов функций вывода ссылок при advanced=0 if(!$ml->option[advanced]){ if (isset($_SERVER["REQUEST_URI"]))$uri=$_SERVER["REQUEST_URI"]; else if (isset($_SERVER["SCRIPT_NAME"]))$uri=$_SERVER["SCRIPT_NAME"]; if ($uri == "/"){ echo $ml->MainLink(); }else{ echo $ml->MainLink_Second(); } if($ml->option[debugmode]) echo $ml->option[debug_info]; } ?>
Частная база отдыха «Резиденция Федоровский залив»
Площадь участка – 6.7 га, берег Новосельского Залива Иваньковского водохранилища с непосредственным ...
 
Продажа загородного дома в "Монолите".
Элитный клубный поселок "Монолит" в 23 км от Москвы по Новой Риге, Дом 680 кв.м, 35 сото ...
 
Продаётся дом. 233 кв. м.
Двухэтажный кирпичный дом, фундамент на двух бетонных блоках, бетонные межэтажные перекрытия. 1-й эт ...
 
В г.Требинье продается дом совершенно новый
Продается новый дом от собственника в г.Требинье(православный) Босния и Герцеговина, Республика Серб ...
 
Коттеджный посёлок "Катина горка".
'14 км. от мкад. Престижный район Подмосковья, вся инфраструктура рядом. Располагается на высоком б ...
 
Город Химки, микрорайон Фирсановка.
'Земельный участок, 15 соток, правильной формы в одной плоскости, на участке расположены: дом, бесе ...
 
Продам дом по Рублево-Успенскому шоссе
Дом 170 кв. м. на участке 43 сотки в центре Жуковки. Дом капитальной постройки со всеми коммуникаци ...
 
280 м2 на участке 18 соток, Снт "Солнечная поляна"
Дом 280 м2 на участке 18 соток. От Киевки поворот на Крёкшино, от Анкудиново налево в лес. Снт " ...
 
Сдаю коттедж. Оцелиндрованное бревно.
Сдаю коттедж по Калужскому направлению. 85 000 р. в месяц. 210 кв.м. Участок 12 соток. Собственн ...
 
Продам дом станция Минино
Продам дом станция Минино. Благоустроенный 2-х этажный, бана, 17 соток земли, половина участка лес, ...
 
Дом вашей мечты.
Продается дом 60 кв.м. расположенный на 6 сотках земли, в 13 км от мкад по Варшавскому ш. в снт Заря ...
 
В продаже замечательный дом на огромном участке
Продается дом по Ленинградскому или Дмитровскому шоссе, 40 км. Дом в два этажа, 537кв. м. , полно ...
 
Большой загородный дом с видом на лес
Продаю дом без внутренней отделки с участком в Ленинском районе , п. Горки Ленинские . Площадь участ ...
 
Продам новый дом
Продается новый дом из итальянского кирпича без внутренней отделки в г.Гулькевичи, Краснодарского кр ...
 
АН "Арбат" поможет продать участок в обл
Агентство недвижимости Арбат осуществляет подбор квартир в новых домах на ваших условиях. Специалист ...
 
Аренда офиса Кропоткинская
Аренда офиса в Москве. Снять офис Кропоткинская. Бизнес центр класса В. Офисы от 181 до 1500 кв.м. / ...
 
Аренда склада 500 м.кв.
Аренда отапливаемого склада на охраняемой территории, г. Мытищи. Помещения от 10м/кв, высота потолка ...
 
Все операции с недвижимостью в Москве и Области
20 лет на рынке недвижимости! т. 892589О9З2Ч Гарантированная скидка 20 процентов за оплату услуг пр ...
 
15 га с/х земли 750000руб
Продам 15 га с/х земли в Селижаровском районе Тверской области,идеально подходящий под строительство ...
 
Земля под кфх
Желающим организовать крестьянско-фермерское хозяйство предоставляется уникальная возможность приобр ...
 
Землю под строительство коттеджного поселка
Хочешь организовать коттеджный поселок? Подбор участков,полностью удовлетворяющих требованиям клиент ...
 
Ижс в Тверской области 42га
Продам земельный участок в Селижаровском районе, Тверской области,площадь которого составляет около ...
 
Земля для кфх
У нас есть интересное предложение для желающих обзавестись крестьянско-фермерским хозяйством. Земель ...
 
Продам участок под строительство базы отдыха
На расстоянии 370 км от МКАД по Ленинградскому шоссе ( Бологовский район, Тверская область) располож ...
 
Продам участок площадью 42,4га
Продам участок (Тверская область,Селижаровский район, д.Ильино) площадью 42,4га под строительство ко ...
 
Продам ижс земли в Селижаровском районе
Продается 19,7 га ИЖС земли Селижаровском р-не, Тверской области. Участок граничит с поселком Селиж ...
 
Продам участок на прибрежной зоне реки Волга
Одно из мест популярных среди туристов и любителей природы является прибрежная зона реки Волга. Данн ...
 
Продам земля в Тверской области
Продам земельный участок в Бологовском районе Тверской области, который отлично подходит для строите ...
 
Земля в Тверской области
Продам земельный актив в Бологовском районе, расположенном в северо-западной части Тверской области. ...
 
Смежный Дом В Испании (Аликанте/ Playa San Juan)
Смежный Дом В Испании (Аликанте/ Playa San Juan)Спален: 4Салон: 1Ванные комнаты: 4Жилая площадь: 300 ...
 

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]
[13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24]
[25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36]
[37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48]
[49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60]
[61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72]
[73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84]
[85] [86] [87] [88] [89] [90] [91] [92] [93] [94] [95] [96]
[97] [98] [99] [100] [101] [102] [103] [104] [105] [106] [107] [108]
[109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120]
[121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132]
[133] [134] [135] [136] [137] [138] [139] [140] [141] [142] [143] [144]
[145] [146] [147] [148] [149] [150]