亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mysmo.cpp

?? svm的smo C++算法(更新2006-11-21)
?? CPP
字號:
// mysmo.cpp: implementation of the mysmo class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "smo.h"
#include "mysmo.h"

#include <functional>
#include <cmath>
#include <time.h>
#include <fstream.h>
#include <iostream.h>

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

mysmo::mysmo(float c,float tolerance,float eps)
{
	m_sigma = 1.0f; //Sigma of kernel function
	m_C = c; //Penalty factor (HIGH->high penalty for wrong side)
	m_tolerance = tolerance; //Tolerance in KKT condition
	m_eps = eps; //Break limit	
	//
	initCsmo();
}

mysmo::~mysmo()
{
	freeCsmo();
}

void mysmo::initCsmo()
{
	m_a=NULL; //Lagrange multipliers (LM)
	m_w=NULL; //Weight vector
	m_y=NULL; //Classification of training points
	m_self_dot_product=NULL; //vector of dot prod x*x for all x
	m_e=NULL; //vector of prediction error Ei
	m_x=NULL; //The training points
	m_testIns=NULL; //The training points
	m_errInsIndex=NULL;//testing err instance's index	
	m_max=NULL;
	m_min = NULL;
	m_xNum=0; //Number of training points
	m_testNum=0;	//number of testing points
	m_dimension=0; //dimension of points
	m_end_support_i=0; //Support vectors are from 0...end_support_i	
	
	m_b = 0; //Threshold (begin at 0)
	m_two_sigma_squared = 2 * m_sigma * m_sigma;
}

void mysmo::freeCsmo()
{
	if(m_a)delete[] m_a;
	if(m_w)delete[] m_w;
	if(m_y)delete[] m_y;
	if(m_self_dot_product)delete[] m_self_dot_product;
	if(m_e)delete[] m_e;
	if(m_x)delete[] m_x;
	if(m_testIns)delete[]  m_testIns;
	if(m_errInsIndex)delete[]  m_errInsIndex;
	if(m_max)delete[] m_max;
	if(m_min)delete[] m_min;
	initCsmo();
}

float mysmo::drand48()
{
	return rand()/float(RAND_MAX);
//	return 0;
}
int	mysmo::tryLM(int i1)
{
	float E1,y1,a1,r1; //Functional values
	y1 = m_y[i1]; //Classification of point i1
	a1 = m_a[i1]; //LM of point i1
	if( (a1 > 0) && (a1 < m_C) )
	{ //should mean r1=0 from KKT condition
		E1 = m_e[i1];
	}
	else
	{
		E1 = learned_func(i1) - y1; //Calculation of prediction error
	}
	r1 = y1 * E1; //r1 quantity of KKT condition
	if(((r1 < -m_tolerance) && (a1 < m_C)) || ((r1 > m_tolerance) && (a1 > 0)))
	{ //If KKT is violated
		//Try to find suitable example LM (index i2)
		int k, i2;
		float tmax;
		//Try boundary points with the largest difference |E1 - E2|
		for( i2 = (-1), tmax = 0, k = 0; k < m_end_support_i; k++)
		{
			if((m_a[k] > 0) && (m_a[k] < m_C))
			{ //boundary points
				float E2, temp;
				E2 = m_e[k];
				temp = fabs(E1 - E2);
				if(temp > tmax){
					tmax = temp;
					i2 = k;
				}
			}			
		}
		if(i2 >= 0)
		{
			if(optimize( i1, i2 ) == 1) return 1;
		}
		//Try all boundary points
		int k0;
		for(k0 = (int)(drand48() * m_end_support_i), k = k0; k < m_end_support_i + k0; k++)
		{
			i2 = k % m_end_support_i;
			if((m_a[i2] > 0) && (m_a[i2] < m_C))
			{
				if(optimize(i1,i2) == 1) return 1;
			}
		}
		//Try the entire set
		for(k0 = (int)(drand48() * m_end_support_i), k = k0; k < m_end_support_i + k0; k++){
			i2 = k % m_end_support_i;
			if(optimize(i1,i2) == 1) return 1;
		}
	}
	return 0;
}

int	mysmo::optimize( int i1, int i2 )
{
	float y1, y2, s;
	float a1o, a2o; //old LM values
	float a1n, a2n; //new LM values
	float E1, E2, L, H, eta;
	//Assignment of values
	if(i1 == i2) return 0;
	a1o = m_a[i1];
	a2o = m_a[i2];
	y1 = m_y[i1];
	y2 = m_y[i2];
	if((a1o > 0) && (a1o < m_C)) E1 = m_e[i1];
	else E1 = learned_func(i1) - y1;
	if((a2o > 0) && (a2o < m_C)) E2 = m_e[i2];
	else E2 = learned_func(i2) - y2;
	s = y1 * y2;
	//Computation of L and H, low and high end a2n on line segment
	if( y1 == y2 ) {
		float sum = a1o + a2o;
		if(sum > m_C){
			L = sum - m_C;
			H = m_C;
		}
		else{
			L = 0;
			H = sum;
		}
	}
	else{
		float diff = a1o - a2o;
		if(diff > 0){
			L = 0;
			H = m_C - diff;
		}
		else{
			L = -diff;
			H = m_C;
		}
	}
	if(L == H) return 0; //Error, no line segment
	//Computation of eta
	float k11 = kernel(i1,i1);
	float k22 = kernel(i2,i2);
	float k12 = kernel(i1,i2);
	eta = 2 * k12 - k11 - k22; //Computation of eta from kernel
	if(eta < -0.01){
		a2n = a2o + y2 * (E2 - E1) / eta; //New a2 on line segment
		if( a2n < L ) a2n = L; //Lowest a2n on line segment
		else if( a2n > H ) a2n = H; //Highest a2n on line segment
	}
	else
	{ //eta~0
		float c1 = eta/2;
		float c2 = y2 * (E1-E2) - eta * a2o;
		float Lobj = c1 * L * L + c2 * L;
		float Hobj = c1 * H * H + c2 * H;
		if( Lobj > Hobj + m_eps ) a2n = L;
		else if( Lobj < Hobj - m_eps ) a2n = H;
		else a2n = a2o;
	}
	if( fabs(a2n - a2o) < (m_eps * (a2n + a2o + m_eps)) ) 
		return 0;
	a1n = a1o - s * (a2n - a2o); //New a1
	if(a1n < 0)
	{ //Disallowed case
		a2n += s * a1n;
		a1n = 0; //Limit case
	}
	else if(a1n > m_C)
	{ //Disallowed case
		a2n += s * (a1n - m_C);
		a1n = m_C; //Limit case
	}
	
	//Update threshold b to reflect change in a
	float b1, b2, bnew, deltab;
	if((a1n > 0) && (a1n < m_C))
	{
		bnew = m_b + E1 + y1 * (a1n - a1o) * k11 + y2 * (a2n - a2o) * k12;
	}
	else
	{
		if((a2n > 0) && (a2n < m_C))
		{
			bnew = m_b + E2 + y1 * (a1n - a1o) * k12 + y2 * (a2n - a2o) * k22;
		}
		else
		{
			b1 = m_b + E1 + y1 * (a1n - a1o) * k11 + y2 * (a2n - a2o) * k12;
			b2 = m_b + E2 + y1 * (a1n - a1o) * k12 + y2 * (a2n - a2o) * k22;
			bnew = (b1 + b2) / 2;
		}
	}
/*	unsigned char *p;
	p = (unsigned char *)&bnew;
	if((p[2]==128 && p[3]==127) || (p[2]==192 && p[3]==255 ))
		p=0;
	if(y1==y2 && a1n==a2o && a2n==a1o)
		return 0;
*/	deltab = bnew - m_b;	
	m_b = bnew;	
	//Update e vector
	float t1 = y1 * (a1n - a1o);
	float t2 = y2 * (a2n - a2o);
	for(int i = 0; i < m_end_support_i; i++)
	{
		if((0 < m_a[i]) && (m_a[i] < m_C))
		{
			m_e[i] += t1 * kernel(i1,i) + t2 * kernel(i2,i) - deltab;
		}
	}
	m_e[i1] = 0.0;
	m_e[i2] = 0.0;
	m_a[i1] = a1n; //Store the optimized pair of LMs
	m_a[i2] = a2n;
	return 1; //Success!
}
float mysmo::dot_product(int i1, int i2)
{
	//Dot product x*y
	float dot = 0.;
	float *p1 = m_x + i1*m_dimension;
	float *p2 = m_x + i2*m_dimension;
	for(int i = 0; i < m_dimension; i++)
		dot += p1[i] * p2[i];
	return dot;
}
float mysmo::kernel(int i1, int i2)//The kernel function
{
	float s = dot_product(i1, i2); //Dot product x*y
	s *= -2;
	s += m_self_dot_product[i1] + m_self_dot_product[i2];
	return exp( -s / m_two_sigma_squared ); //Gaussian RBF
}
float mysmo::learned_func(int k)//The learned function w*x - b= sum(ai*yi*ki) -b
{
	float s = 0.;
	for(int i = 0; i < m_end_support_i; i++)
	{
		if(m_a[i] > 0) s += m_a[i] * m_y[i] * kernel(i,k);
	}
	s -= m_b;
	return s;
}
int	mysmo::indicator_function(float *v)//Returns 1 or -1 as class. for v
{
	float dec = decision_function(v);
	if(dec > 0)
		return 1;
	else
		return -1;
}
float mysmo::decision_function(float * v)//Calculates the decision func. at v
{
	float dec = 0;
	float s = 0; //v - x[i]
	float *p = m_x;
	float temp;
	for(int i = 0; i < m_xNum; i++)
	{
		if(m_a[i]>0)
		{
			s = 0;
			for(int j = 0; j < m_dimension; j++)
			{
				temp = v[j] - p[j];
				s = s + temp * temp;
			}
			dec += m_y[i] * m_a[i] * exp( - s / m_two_sigma_squared );
		}
			p = p + m_dimension;
	}
	dec -= m_b;
	return dec;
}
int	mysmo::testing(char * fileName,unsigned int number)
{
	unsigned int right=0,wrong=0;	
	ofstream fout;
	char path[100];
	getFileName(path,fileName);
	strcat(path,".result");
//	remove(path);
	ifstream fin;//(FileName,ios::in|ios::nocreate);	
	fin.open(fileName,ios::in|ios::nocreate);
	if(!fin.is_open())
		return 1;	
	fout.open(path);
	unsigned int i,j;
	float *p=new float[m_dimension];
	int y,decisionY;
	unsigned char flag=0;
	fout<<"id\t y \t decision"<<endl;
	for(i=0;i<number;i++)
	{
		for(j=0;j<m_dimension;j++)
		{
			fin>>p[j];			
			if(fin.eof()==3)
				goto End;
		if(m_max[j] != m_min[j])
			p[j] = (p[j] - m_min[j]) / (m_max[j] - m_min[j]);
		else
			p[j] = 0;
		}
		fin>>y;					
		if(fin.eof()==3)
			goto End;
		decisionY = indicator_function( p );
		if(decisionY  ==y)
			right++;
		else
		{
			fout<<i+1<<"\t"<<y<<"\t"<<decisionY<<endl;
			wrong++;
		}
		
	}
	fout<<"the rigth num: "<<right<<endl;
	fout<<"the error num: "<<wrong<<endl;
	precision = double(right)/(right+wrong);
	fout<<"the precision: "<<precision<<endl;	
End:
	delete[] p;
	fin.close();
	fout.close();
	return 0;
}
int	mysmo::LMToFile(char * fileName)
{
	remove(fileName);
	ofstream out;
	out.open(fileName,ios::app);
	out << "dimension is:"<<m_xNum << endl;
	out << "using gauss kernel function, para is:"<< m_two_sigma_squared << endl;
	out << "the b in \'wx+b\' is :"<< m_b << endl;
	out << "a = " << endl;
	float sum = 0;
	for(unsigned int i = 0; i < m_xNum; i++)
	{
		out << m_a[i] << endl;
	}
	return 0;
}
int mysmo::allocMemory(unsigned int number,unsigned int dimession)
{
	freeCsmo();
	m_x = new float[number * dimession];
	m_y = new float[number];	
	m_a = new float[number]; //Lagrange multipliers (LM)
	memset(m_a,0,number*sizeof(float));
	m_e  = new float[number]; //vector of prediction error Ei
	memset(m_e,0,number*sizeof(float));
	m_self_dot_product = new float[number]; //vector of dot prod x*x for all x
	m_max = new float[dimession];
	m_min = new float[dimession];
	return 0;
}
int	mysmo::readPoint(char * FileName,unsigned int number,unsigned int dimession)
{
	//dimession not contain the decision
	if(FileName == NULL || dimession==0 || number == 0)
		return 1;	
	allocMemory(number,dimession);
	ifstream fin;//(FileName,ios::in|ios::nocreate);	
	fin.open(FileName,ios::in|ios::nocreate);
	if(!fin.is_open())
		return 1;
	unsigned int i,j;
	float *p=m_x;
	float *y = m_y;
	unsigned char flag=0;
	for(i=0;i<number;i++)
	{
		for(j=0;j<dimession;j++)
		{
			fin>>*p;
			p++;
			if(fin.eof()==3)
				return 1;
		}
		fin>>*y;
		if(fin.eof()==3)
			return 1;
		y++;		
	}
	fin.close();
	m_xNum = number;
	m_dimension = dimession;
	m_end_support_i = number;
	return 0;
}
void mysmo::RenormalizeData(float * instance,unsigned int number)
{
	float t;
	float *p;
	unsigned int k,l;
	for(k = 0; k < m_dimension; k++)
	{ //for every dimension
		m_max[k] = instance[k];
		m_min[k] = instance[k];
		p=instance;
		for(l = 0; l < number; l++)
		{ //for every point
			t = p[k];
			if(t > m_max[k]) m_max[k] = t;
			if(t < m_min[k]) m_min[k] = t;
			p = p + m_dimension;
		}
		p=instance;
		for(l = 0; l < number; l++)
		{ //for every point
			if (m_max[k] != m_min[k])
				p[k] = (p[k] - m_min[k]) / (m_max[k] - m_min[k]);
			else
				p[k] = 0;
			p = p + m_dimension;
		}
	}
}
int	mysmo::pointToFile(char * FileName,float * x ,float * y,unsigned int number)
{
	if(FileName==NULL || number==0 || x ==NULL)
		return 1;
	ofstream fout;
	fout.open(FileName);
	if(!fout.is_open())
		return 1;
	unsigned int i,j;
	for(i=0;i<number;i++)
	{
		for(j=0;j<m_dimension;j++)
		{
			fout<<" "<<*x;
			x++;
		}
		if(y)
		{
			fout<<*y;
			y++;
		}
		fout<<endl;
	}		
	fout.close();
	return 0;
}

int	mysmo::createSmo()
{	
	//To train machine	
	int i,j;
	//Renormalize data to [0,1]	
	RenormalizeData(m_x,m_xNum);
//	pointToFile("normtrain.data",m_x,0,m_xNum);
	//Write normalized training data to file
	//self dot product
	float sdp_temp = 0;
	float *p = m_x;
	for(i = 0; i < m_xNum; i++)
	{ //calculation of x*x
		m_self_dot_product[i] = 0;
		for(j = 0; j < m_dimension; j++){
			m_self_dot_product[i] += (*p) * (*p);
			p++;
		}
	}
	int numChanged = 0;
	int examineAll = 1;
	//------------------------------------------------------
	//Routine to examine all the points
	while(numChanged > 0 || examineAll == 1)
	{
		numChanged = 0;
		if(examineAll == 1)
		{
			for(int k = 0; k < m_xNum; k++)
			{
				numChanged += tryLM(k);
			}
		}
		else
		{
			for(int k = 0; k < m_xNum; k++)
			{
				if((m_a[k] != 0) && (m_a[k] != m_C))
				{
					numChanged += tryLM(k);
				}
			}
		}
		if(examineAll == 1) examineAll = 0;
		else if(numChanged == 0) examineAll = 1;
	}
	//-------------------------------------------------------
	
	//--------------------------------------------------------------------
	//To classify unclassified data using trained machine
	//Read in data	
	//--------------------------------------------------------------------
	return 0;
}
byte mysmo::getFileName(char * dest,const char * source)
{
	if(source==NULL)
		return 1;
	unsigned int i,j = strlen(source) -1;
	if(j==0)
		return 1;
	for(i=j; i>=0; i--)
	{
		if(source[i]=='.')
			j = i;
		else if(source[i]=='\\')
		{
			i++;
			break;
		}
	}
	strncpy(dest,source+i,j-i);
	dest[j-i]='\0';
	return 0;
}

int	mysmo::scaleToFile(char * FileName,float * x ,float * y,unsigned int number)
{
	if(FileName==NULL || number==0 || x ==NULL)
		return 1;
	ofstream fout;
	fout.open(FileName);
	if(!fout.is_open())
		return 1;
	unsigned int i,j;
	for(i=0;i<number;i++)
	{
		if(y)
		{
			fout<<*y;
			y++;
		}
		for(j=0;j<m_dimension;j++)
		{
			fout<<" "<<j+1<<":"<<*x;
			x++;
		}		
		fout<<endl;
	}		
	fout.close();
	return 0;
}

int mysmo::scale(char * FileName,unsigned int number,unsigned int dimession)
{
	if(readPoint(FileName,number,dimession))
		return 1;
	char fileName[200];
	RenormalizeData(m_x,m_xNum);
	//Write results to out-svm.data
	getFileName(fileName,FileName);
	strcat(fileName,".scale");
	scaleToFile(fileName,m_x,m_y,m_xNum);
	return 0;
}

int	mysmo::skipToFile(char * FileName,float * x ,float * y,unsigned int number)
{
	if(FileName==NULL || number==0 || x ==NULL)
		return 1;
	ofstream fout;
	fout.open(FileName);
	if(!fout.is_open())
		return 1;
	unsigned int i,j;
	for(i=0;i<number;i++)
	{
		
		for(j=0;j<m_dimension;j++)
		{
			if (m_max[j] != m_min[j])
				fout<<*x<<" ";
			x++;
		}
		if(y)
		{
			fout<<*y;
			y++;
		}		
		fout<<endl;
	}		
	fout.close();
	return 0;
}

int mysmo::skip(char * FileName,unsigned int number,unsigned int dimession)
{
	if(readPoint(FileName,number,dimession))
		return 1;
	char fileName[200];
	RenormalizeData(m_x,m_xNum);
	//Write results to out-svm.data
	getFileName(fileName,FileName);
	strcat(fileName,".skip");
	skipToFile(fileName,m_x,m_y,m_xNum);
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品少妇一区二区三区| 亚洲人亚洲人成电影网站色| 亚洲日本护士毛茸茸| 成人免费精品视频| 中文字幕一区二区不卡| 在线观看91视频| 天天射综合影视| 精品国产一区久久| 成人一区在线看| 最近中文字幕一区二区三区| 一本在线高清不卡dvd| 亚洲成人动漫在线观看| 欧美日韩高清在线| 国产综合色在线| 中文字幕制服丝袜一区二区三区 | 亚洲激情av在线| 欧美日韩国产首页在线观看| 日本视频一区二区| 国产亚洲精品aa| 3atv一区二区三区| 丁香激情综合五月| 视频一区欧美日韩| 中文字幕日韩一区| 欧美一区二区在线播放| 色婷婷亚洲精品| 精品亚洲成a人在线观看| 一区二区三区四区中文字幕| 国产欧美一区二区三区网站| 欧美精三区欧美精三区| 91美女视频网站| 国产精品一区二区三区乱码 | 欧美日韩国产综合一区二区三区| 精品在线免费视频| 亚洲同性gay激情无套| 欧美日韩亚洲综合一区 | 亚洲乱码国产乱码精品精可以看| 欧美日韩在线观看一区二区| 国产成人在线电影| 另类小说综合欧美亚洲| 亚洲成在线观看| 亚洲色图19p| 国产精品免费久久| 日韩美女一区二区三区| 在线看不卡av| 色综合久久综合网| 91网站在线观看视频| 国产一区不卡视频| 久久成人久久鬼色| 丝袜亚洲另类丝袜在线| 亚洲一区二区三区视频在线 | 欧美一三区三区四区免费在线看| 一本大道av伊人久久综合| www.欧美色图| 色综合久久久久综合| 欧美浪妇xxxx高跟鞋交| 91浏览器在线视频| 在线精品观看国产| 欧美亚洲高清一区二区三区不卡| 99re这里只有精品视频首页| 狠狠色狠狠色综合系列| 成人午夜电影久久影院| www.66久久| 欧美女孩性生活视频| 欧美成人vr18sexvr| 久久久美女毛片| 国产精品区一区二区三| 自拍偷自拍亚洲精品播放| 亚洲视频精选在线| 亚洲h在线观看| 日本美女视频一区二区| 成人免费视频播放| 欧美日韩综合色| 久久精品一区二区| 一区二区三区产品免费精品久久75| 亚洲成a人片在线不卡一二三区| 奇米精品一区二区三区在线观看一 | 国产欧美综合色| 亚洲综合免费观看高清完整版在线 | 久久久国产午夜精品| 精品国产一区二区三区忘忧草| 久久综合久久综合久久| 亚洲欧美电影一区二区| 男女男精品视频网| 91蜜桃免费观看视频| 亚洲精品在线电影| 亚洲国产日韩在线一区模特| 国产酒店精品激情| 99久久久精品免费观看国产蜜| 欧美高清精品3d| 亚洲天堂精品在线观看| 国产在线精品不卡| 91精品国产一区二区三区| 亚洲三级视频在线观看| 国产精品一区二区三区99| 91麻豆精品秘密| 欧美激情中文字幕一区二区| 韩国午夜理伦三级不卡影院| 欧美精品视频www在线观看| 亚洲欧洲精品天堂一级| heyzo一本久久综合| 久久影院午夜论| 精品在线视频一区| 久久久精品一品道一区| 国内外成人在线| 亚洲成人自拍一区| 91精品啪在线观看国产60岁| 五月综合激情婷婷六月色窝| 欧美日韩国产精选| 美女免费视频一区| 久久综合狠狠综合久久综合88| 久久99精品久久久久久 | 蜜臀久久久久久久| 久久久亚洲综合| 美女一区二区视频| 久久蜜桃av一区精品变态类天堂 | 日韩一二三区不卡| 国产999精品久久久久久绿帽| 亚洲精品一线二线三线无人区| 精品一区二区三区免费观看| 国产精品美女久久久久久| 国产白丝精品91爽爽久久| 国产精品成人在线观看| 欧美日韩中文一区| 成人av资源在线| 午夜精品免费在线观看| 日韩一区二区免费在线电影 | 国产精品 日产精品 欧美精品| 亚洲蜜臀av乱码久久精品| 欧美电影免费观看完整版| 91欧美一区二区| 极品少妇一区二区| 亚洲成av人片www| 国产视频不卡一区| 欧美日精品一区视频| 成人美女视频在线观看18| 天天av天天翘天天综合网色鬼国产| 51久久夜色精品国产麻豆| 国产一区二区影院| 麻豆国产精品一区二区三区| 一个色综合网站| 中文字幕av不卡| 日韩欧美黄色影院| 欧美老年两性高潮| 欧美日韩一区二区三区高清| 91视频观看视频| av网站免费线看精品| 成人免费va视频| 高清在线不卡av| 国产91精品久久久久久久网曝门| 精品一区二区免费在线观看| 日本亚洲最大的色成网站www| 一级精品视频在线观看宜春院| 国产精品第四页| 欧美激情一区二区三区在线| 久久亚区不卡日本| 久久久综合视频| 中文av一区二区| 亚洲品质自拍视频网站| 1000部国产精品成人观看| 亚洲人妖av一区二区| 亚洲一区二区av在线| 成人手机在线视频| av激情成人网| 欧美福利电影网| 欧美不卡视频一区| 中文字幕在线免费不卡| 亚洲一区二区三区四区在线免费观看| 亚洲最大成人综合| 日本亚洲视频在线| 国产成人在线电影| 欧美在线观看18| 精品国产乱码久久久久久浪潮| 久久精品欧美一区二区三区不卡 | 久久网站最新地址| 夜夜嗨av一区二区三区四季av| 日韩中文字幕不卡| 懂色av一区二区三区蜜臀 | 图片区小说区区亚洲影院| 久久国产综合精品| 色8久久精品久久久久久蜜| 精品国产一区二区亚洲人成毛片 | 国产欧美日韩另类一区| 久久精品国产亚洲a| 欧美一区二区三区四区高清| 夜夜精品视频一区二区| 91在线看国产| 亚洲男帅同性gay1069| gogo大胆日本视频一区| 亚洲国产电影在线观看| 国产精品资源站在线| 久久免费视频一区| 成人一区二区三区视频在线观看| 久久久久久久久久久久久久久99 | 91色|porny| 五月天精品一区二区三区| 91精品综合久久久久久| 久久99热狠狠色一区二区| 日韩免费性生活视频播放| 久草中文综合在线| 国产精品卡一卡二卡三|