日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java免锁数据结构

發布時間:2024/1/18 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java免锁数据结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天看到一本書上講Java中的免鎖數據結構,看了下CopyOnWriteArrayList的實現,發現是讀操作不加鎖,寫操作每次新建一個容量+1的副本,加鎖,最后替換。用的都是ReentrantLock,感覺明明用了顯示鎖為什么說是免鎖的,查了下定義,如下:

Lock-free data structures

For a data structure to qualify as lock-free, more than one thread must be able to
access the data structure concurrently. They don’t have to be able to do the same
operations; a lock-free queue might allow one thread to push and one to pop but
break if two threads try to push new items at the same time. Not only that, but if one of
the threads accessing the data structure is suspended by the scheduler midway
through its operation, the other threads must still be able to complete their operations
without waiting for the suspended thread.
Algorithms that use compare/exchange operations on the data structure often
have loops in them. The reason for using a compare/exchange operation is that
another thread might have modified the data in the meantime, in which case the code
will need to redo part of its operation before trying the compare/exchange again.
Such code can still be lock-free if the compare/exchange would eventually succeed if
the other threads were suspended. If it wouldn’t, you’d essentially have a spin lock,
which is nonblocking but not lock-free.
Lock-free algorithms with such loops can result in one thread being subject to starvation.
If another thread performs operations with the “wrong” timing, the other
thread might make progress while the first thread continually has to retry its operation.
Data structures that avoid this problem are wait-free as well as lock-free.
Types of nonblocking data structures
Back in chapter 5, we implemented a basic mutex using std::atomic_flag as a spin
lock. The code is reproduced in the following listing.
class spinlock_mutex
{
std::atomic_flag flag;
public:
spinlock_mutex():
flag(ATOMIC_FLAG_INIT)
{}
void lock()
{
while(flag.test_and_set(std::memory_order_acquire));
}
void unlock()
{
flag.clear(std::memory_order_release);
}
};
This code doesn’t call any blocking functions; lock() just keeps looping until the call
to test_and_set() returns false. This is why it gets the name spin lock—the code
“spins” around the loop. Anyway, there are no blocking calls, so any code that uses this
mutex to protect shared data is consequently nonblocking. It’s not lock-free, though. It’s
still a mutex and can still be locked by only one thread at a time. Let’s look at the definition
of lock-free so you can see what kinds of data structures are covered.

Wait-free data structures
A wait-free data structure is a lock-free data structure with the additional property that
every thread accessing the data structure can complete its operation within a bounded
number of steps, regardless of the behavior of other threads. Algorithms that can
involve an unbounded number of retries because of clashes with other threads are
thus not wait-free.
Writing wait-free data structures correctly is extremely hard. In order to ensure that
every thread can complete its operations within a bounded number of steps, you have
to ensure that each operation can be performed in a single pass and that the steps performed
by one thread don’t cause an operation on another thread to fail. This can
make the overall algorithms for the various operations considerably more complex.
Given how hard it is to get a lock-free or wait-free data structure right, you need
some pretty good reasons to write one; you need to be sure that the benefit outweighs
the cost. Let’s therefore examine the points that affect the balance.

無阻塞數據結構是指的線程不會被阻塞,一般請求不到時會循環嘗試,自旋,免鎖數據結構定義不是很明確,大概是拿無阻塞隊列來講,同時可以有一個寫,多個讀但不允許有多個寫,但是寫線程不會因為其它線程阻塞而等待,就是說一直可以有寫線程在運行。無等待數據結構是指的,任何一個線程都可以在有限個步驟內運行完。

感覺還不明確,查閱了?Andrei Alexandrescu的論文(以下是轉載自http://www.drdobbs.com/184401865)

Lock-free data structures guarantee the progress of at least one thread when executing mutlithreaded procedures, thereby helping you avoid deadlock.

Andrei Alexandrescu is a graduate student in Computer Science at the University of Washington and author of Modern C++ Design. He can be contacted at?andrei@metalanguage.com.

?


?

After skipping an installment of "Generic<Programming>" (it's naive, I know, to think that grad school asks for anything less than 100 percent of one's time), there has been an embarrassment of riches as far as topic candidates for this article. One topic candidate was a discussion of constructors; in particular, forwarding constructors, handling exceptions, and two-stage object construction. One other topic candidate—and another glimpse into the Yaslander technology [2]—was creating containers (such as lists, vectors, or maps) of incomplete types, something that is possible with the help of an interesting set of tricks, but not guaranteed by the standard containers.

?

While both candidates are intriguing, they couldn't stand a chance against lock-free data structures, which are all the rage in the multithreaded programming community. At this year's Programming Language Design and Implementation conference (http://www.cs.umd.edu/~pugh/pldi04/), Michael Maged presented the world's first lock-free memory allocator [7], which surpasses at many tests other more complex, carefully designed lock-based allocators.

?

This is the most recent of many lock-free data structures and algorithms that have appeared in the recent past.

What Do You Mean, "lock-free?"

?

That's exactly what I would have asked only a while ago. As the bona-fide mainstream multithreaded programmer that I was, lock-based multithreaded algorithms were familiar to me. In classic lock-based programming, whenever you need to share some data, you need to serialize access to it. The operations that change data must appear as atomic, such that no other thread intervenes to spoil your data's invariant. Even a simple operation such as?++count_?(where?count_?is an integral type) must be locked. Incrementing is really a three-step (read, modify, write) operation that isn't necessarily atomic.

?

In short, with lock-based multithreaded programming, you need to make sure that any operation on shared data that is susceptible to race conditions is made atomic by locking and unlocking a mutex. On the bright side, as long as the mutex is locked, you can perform just about any operation, in confidence that no other thread will trample on your shared state.

?

It is exactly this "arbitrary"-ness of what you can do while a mutex is locked that's also problematic. You could, for example, read the keyboard or perform some slow I/O operation, which means that you delay any other threads waiting for the same mutex. Worse, you could decide you want access to some other piece of shared data and attempt to lock its mutex. If another thread has already locked that last mutex and wants access to the first mutex that your threads already holds, both processes hang faster than you can say "deadlock."

?

Enter lock-free programming. In lock-free programming, you can't do just about anything atomically. There is only a precious small set of things that you can do atomically, a limitation that makes lock-free programming way harder. (In fact, there must be around half a dozen lock-free programming experts around the world, and yours truly is not among them. With luck, however, this article will provide you with the basic tools, references, and enthusiasm to help you become one.) The reward of such a scarce framework is that you can provide much better guarantees about thread progress and the interaction between threads. But what's that "small set of things" that you can do atomically in lock-free programming? In fact, what would be the?minimal?set of atomic primitives that would allow implementing any lock-free algorithm—if there's such a set?

?

If you believe that's a fundamental enough question to award a prize to the answerer, so did others. In 2003, Maurice Herlihy was awarded the Edsger W. Dijkstra Prize in Distributed Computing for his seminal 1991 paper "Wait-Free Synchronization" (see?http://www.podc.org/dijkstra/2003.html, which includes a link to the paper, too). In his tour-de-force paper, Herlihy proves which primitives are good and which are bad for building lock-free data structures. That brought some seemingly hot hardware architectures to instant obsolescence, while clarifying what synchronization primitives should be implemented in future hardware.

?

For example, Herlihy's paper gave impossiblity results, showing that atomic operations such as test-and-set, swap, fetch-and-add, or even atomic queues (!) are insufficient for properly synchronizing more than two threads. (That's surprising because queues with atomic push and pop operations would seem to provide quite a powerful abstraction.) On the bright side, Herlihy also gave universality results, proving that some simple constructs are enough for implementing any lock-free algorithm for any number of threads.

?

The simplest and most popular universal primitive, and the one that I use throughout, is the compare-and-swap (CAS) operation:

?

template <class T> bool CAS(T* addr, T expected, T value) {if (*addr == expected) {*addr = value;return true;}return false; }

?

CAS?compares the content of a memory address with an expected value, and if the comparison succeeds, replaces the content with a new value. The entire procedure is atomic. Many modern processors implement?CASor equivalent primitives for different bit lengths (the reason for which we've made it a template, assuming an implementation uses metaprogramming to restrict possible?Ts). As a rule of thumb, the more bits a?CAS?can compare-and-swap atomically, the easier it is to implement lock-free data structures with it. Most of today's 32-bit processors implement 64-bit?CAS; for example, Intel's assembler calls it?CMPXCHG8?(you gotta love those assembler mnemonics).

A Word of Caution

?

Usually a C++ article is accompanied by C++ code snippets and examples. Ideally, that code is Standard C++, and "Generic<Programming>" strives to live up to that ideal.

?

When writing about multithreaded code, however, giving Standard C++ code samples is simply impossible. Threads don't exist in Standard C++, and you can't code something that doesn't exist. Therefore, the code for this article is "pseudocode" and not meant as Standard C++ code for portable compilation. Take memory barriers, for example. Real code would need to be either assembly language translations of the algorithms described herein, or at least sprinkle C++ code with some so-called "memory barriers"—processor-dependent magic that forces proper ordering of memory reads and writes. I don't want to spread the discussion too thin by explaining memory barriers in addition to lock-free data structures. If you are interested, refer to Butenhof's excellent book [3] or to a short introduction [6]. For purposes here, I assume that the compiler and the hardware don't introduce funky optimizations (such as eliminating some "redundant" variable reads, a valid optimization under a single-thread assumption). Technically, that's called a "sequentially consistent" model in which reads and writes are performed and seen in the exact order in which the source code does them [8].

Wait-Free and Lock-Free versus Locked

?

A "wait-free" procedure can complete in a finite number of steps, regardless of the relative speeds of other threads.

?

A "lock-free" procedure guarantees progress of at least one of the threads executing the procedure. That means some threads can be delayed arbitrarily, but it is guaranteed that at least one thread makes progress at each step. So the system as a whole always makes progress, although some threads might make slower progress than others. Lock-based programs can't provide any of the aforementioned guarantees. If any thread is delayed while holding a lock to a mutex, progress cannot be made by threads that wait for the same mutex; and in the general case, locked algorithms are prey to deadlock—each waits for a mutex locked by the other—and livelock—each tries to dodge the other's locking behavior, just like two dudes in the hallway trying to go past one another but end up doing that social dance of swinging left and right in synchronicity. We humans are pretty good at ending that with a laugh; processors, however, often enjoy doing it until rebooting sets them apart.

?

Wait-free and lock-free algorithms enjoy more advantages derived from their definitions:

?

?

  • Thread-killing Immunity: Any thread forcefully killed in the system won't delay other threads.
  • Signal Immunity: The C and C++Standards prohibit signals or asynchronous interrupts from calling many system routines such as?malloc. If the interrupt calls?malloc?at the same time with an interrupted thread, that could cause deadlock. With lock-free routines, there's no such problem anymore: Threads can freely interleave execution.
  • Priority Inversion Immunity: Priority inversion occurs when a low-priority thread holds a lock to a mutex needed by a high-priority thread. Such tricky conflicts must be resolved by the OS kernel. Wait-free and lock-free algorithms are immune to such problems.

A Lock-Free WRRM Map

?

Column writing offers the perk of defining acronyms, so let's define WRRM (Write Rarely Read Many) maps as maps that are read a lot more than they are mutated. Examples include object factories [1], many instances of the Observer design pattern [5], mappings of currency names to exchange rates that are looked up many, many times but are updated only by a comparatively slow stream, and various other look-up tables.

?

WRRM maps can be implemented via?std::map?or the post-standard?unordered_map?(http://www.open-std.org/jtcl/sc22/wg21/docs/papers/2004/n1647.pdf), but as I argue in?Modern C++ Design,?assoc_vector?(a sorted vector or pairs) is a good candidate for WRRM maps because it trades update speed for lookup speed. Whatever structure is used, our lock-free aspect is orthogonal to it; let's just call the back-end?Map<Key, Value>. Also, for the purposes of this article, iteration is irrelevant—maps are only tables that provide a means to lookup a key or update a key-value pair.

?

To recap how a locking implementation would look, let's combine a?Map?object with a?Mutex?object like so:

?

// A locking implementation of WRRMMap template <class K, class V> class WRRMMap {Mutex mtx_;Map<K, V> map_; public:V Lookup(const K& k) {Lock lock(mtx_);return map_[k];}void Update(const K& k,const V& v) {Lock lock(mtx_);map_[k] = v;} };

?

To avoid ownership issues and dangling references (that could bite us harder later),?Lookup?returns its result by value. Rock-solid—but at a cost. Every lookup locks/unlocks the?Mutex, although (1) parallel lookups don't need to interlock, and (2) by the spec,?Update?is much less often called than?Lookup. Ouch! Let's now try to provide a better WRRMMap implementation.

Garbage Collector, Where Art Thou?

?

The first shot at implementing a lock-free?WRRMMap?rests on this idea:

?

?

  • Reads have no locking at all.
  • Updates make a copy of the entire map, update the copy, and then try to?CAS?it with the old map. While the?CAS?operation does not succeed, the copy/update/CAS?process is tried again in a loop.
  • Because?CAS?is limited in how many bytes it can swap,?WRRMMap?stores the?Map?as a pointer and not as a direct member of?WRRMMap.

?

// 1st lock-free implementation of WRRMMap // Works only if you have GC template <class K, class V> class WRRMMap {Map<K, V>* pMap_; public:V Lookup (const K& k) {//Look, ma, no lockreturn (*pMap_) [k];}void Update(const K& k,const V& v) {Map<K, V>* pNew = 0;do {Map<K, V>* pOld = pMap_;delete pNew;pNew = new Map<K, V>(*pOld);(*pNew) [k] = v;} while (!CAS(&pMap_, pOld, pNew));// DON'T delete pMap_;} };

?

It works! In a loop, the?Update?routine makes a full-blown copy of the map, adds the new entry to it, and then attempts to swap the pointers. It is important to do?CAS?and not a simple assignment; otherwise, the following sequence of events could corrupt the map:

?

?

  • Thread?A?copies the map.
  • Thread?B?copies the map as well and adds an entry.
  • Thread?A?adds some other entry.
  • Thread?A?replaces the map with its version of the map—a version that does not contain whatever?Badded.

?

?

With?CAS, things work pretty neatly because each thread says something like, "assuming the map hasn't changed since I last looked at it, copy it. Otherwise, start all over again."

?

This makes?Update?lock-free but not wait-free, by my definitions. If many threads call?Update?concurrently, any particular thread might loop indefinitely, but at all times some thread will be guaranteed to update the structure successfully, thus global progress is being made at each step. Luckily,?Lookup?is wait-free.

?

In a garbage-collected environment, we'd be done, and this article would end on an upbeat note. Without garbage collection, however, there is much pain to come. This is because you cannot simply dispose of the oldpMap_?willy-nilly; what if, just as you are trying to delete it, many other threads are frantically looking for things inside?pMap_?via the?Lookup?function? You see, a garbage collector would have access to all threads' data and private stacks; it would have a good perspective on when the unused?pMap_?pointers aren't perused anymore, and would nicely scavenge them. Without a garbage collector, things get harder. Much harder, actually, and it turns out that deterministic memory freeing is quite a fundamental problem in lock-free data structures.

Write-Locked WRRM Maps

?

To understand the viciousness of our adversary, it is instructive to try a classic reference-counting implementation and see where it fails. So, think of associating a reference count with the pointer to map, and have?WRRMMap?store a pointer to the thusly formed structure:

?

template <class K, class V> class WRRMMap {typedef std::pair<Map<K, V>*,unsigned> Data;Data* pData_;... };

?

Sweet. Now,?Lookup?increments?pData_->second, searches through the map all it wants, then decrementspData_->second. When the reference count hits zero,?pData_->first?can be deleted, and then so can?pData_itself. Sounds foolproof, except...except it's "foolish" (or whatever the antonym to "foolproof" is). Imagine that right at the time some thread notices the refcount is zero and proceeds on deleting?pData_, another thread...no, better: A bazillion threads have just loaded the moribund?pData_?and are about to read through it! No matter how smart a scheme is, it hits this fundamental Catch-22—to read the pointer to the data, you need to increment a reference count; but the counter must be part of the data itself, so it can't be read without accessing the pointer first. It's like an electric fence that has the turn-off button up on top of it: To safely climb the fence you need to disable it first, but to disable it you need to climb it.

?

So let's think of other ways to?delete?the old map properly. One solution would be to wait, then?delete. You see, the old?pMap_?objects will be looked up by less and less threads as processor eons (milliseconds) go by; this is because new lookups use the new maps; as soon as the lookups that were active just before the?CAS?finish, thepMap_?is ready to go to Hades. Therefore, a solution would be to queue up old?pMap_?values to some "boa serpent" thread that, in a loop, sleeps for, say, 200 milliseconds, wakes up and deletes the least recent map, and then goes back to sleep for digestion.

?

This is not a theoretically safe solution (although it practically could well be within bounds). One nasty thing is that if, for whatever reason, a lookup thread is delayed, the boa serpent thread can?delete?the map under that thread's feet. This could be solved by always assigning the boa serpent thread a lower priority than any other's, but as a whole, the solution has a stench that is hard to remove. If you agree with me that it's hard to defend this technique with a straight face, let's move on.

?

Other solutions [4] rely on an extended?DCAS?atomic instruction, which is able to compare-and-swap two noncontiguous words in memory:

?

template <class T1, class T2> bool DCAS(T1* p1, T2* p2,T1 e1, T2 e2,T1 v1, T2 v2) {if (*p1 == e1 && *p2 == e2) {*p1 = v1; *p2 = v2;return true;}return false; }

?

Naturally, the two locations would be the pointer and the reference count itself.?DCAS?has been implemented (very inefficiently) by the Motorola 68040 processors, but not by other processors. Because of that,?DCAS-based solutions are considered of primarily theoretical value.

?

The first shot at a solution with deterministic destruction is to rely on the less-demanding?CAS2. Again, many 32-bit machines implement a 64-bit?CAS, often dubbed as?CAS2. (Because it only operates on contiguous words,CAS2?is obviously less powerful than?DCAS.) For starters, let's store the reference count next to the pointer that it guards:

?

template <class K, class V> class WRRMMap {typedef std::pair<Map<K, V>*,unsigned> Data;Data data_;... };

?

(Notice that this time the count sits next to the pointer that it protects, a setup that eliminates the Catch-22 problem mentioned earlier. You'll see the cost of this setup in a minute.)

?

Then, let's modify?Lookup?to increment the reference count before accessing the map, and decrement it after. In the following code snippets, I ignore exception safety issues (which can be taken care of with standard techniques) for the sake of brevity.

?

V Lookup(const K& k) {Data old;Data fresh;do {old = data_;fresh = old;++fresh.second;} while (CAS(&data_, old, fresh));V temp = (*fresh.first)[k];do {old = data_;fresh = old;--fresh.second;} while (CAS(&data_, old, fresh));return temp; }

?

Finally,?Update?replaces the map with a new one—but only in the window of opportunity when the reference count is 1.

?

void Update(const K& k,const V& v) {Data old;Data fresh;old.second = 1;fresh.first = 0;fresh.second = 1;Map<K, V>* last = 0;do {old.first = data_.first;if (last != old.first) {delete fresh.first;fresh.first = new Map<K, V>(old.first);fresh.first->insert(make_pair(k, v));last = old.first;}} while (!CAS(&data_, old, fresh));delete old.first; // whew }

?

Here's how?Update?works. It defines the now-familiar?old?and?fresh?variables. But this time?old.last?(the count) is never assigned from?data_.last; it is always 1. This means that?Update?loops until it has a window of opportunity to replace a pointer with a counter of 1, with another pointer having a counter of 1. In plain English, the loop says "I'll replace the old map with a new, updated one, and I'll be on the lookout for any other updates of the map, but I'll only do the replacement when the reference count of the existing map is one." The variablelast?and its associated code are only one optimization: Avoid rebuilding the map over and over again if the old map hasn't been replaced (only the count).

?

Neat, huh? Not that much.?Update?is now locked: It needs to wait for all?Lookups to finish before it has a chance to update the map. Gone with the wind are all the nice properties of lock-free data structures. In particular, it is easy to starve?Update?to death: Just look up the map at a high-enough rate—and the reference count never goes down to 1. So what you really have so far is not a WRRM (Write-Rarely-Read-Many) map, but a WRRMBNTM (Write-Rarely-Read-Many-But-Not-Too-Many) one instead.

Conclusion

?

Lock-free data structures are promising. They exhibit good properties with regards to thread killing, priority inversion, and signal safety. They never deadlock or livelock. In tests, recent lock-free data structures surpass their locked counterparts by a large margin [9]. However, lock-free programming is tricky, especially with regards to memory deallocation. A garbage-collected environment is a plus because it has the means to stop and inspect all threads, but if you want deterministic destruction, you need special support from the hardware or the memory allocator. In the next installment of "Generic<Programming>," I'll look into ways to optimize?WRRMMapsuch that it stays lock-free while performing deterministic destruction.

?

And if this installment's garbage-collected map and WRRMBNTM map dissatisfied you, here's a money saving tip: Don't go watch the movie?Alien vs. Predator, unless you like "so bad it's funny" movies.

Acknowlegments

?

David B. Held, Michael Maged, Larry Evans, and Scott Meyers provided very helpful feedback. Also, Michael graciously agreed to coauthor the next "Generic<Programming>" installment, which will greatly improve on ourWRRMap?implementation.




總結

以上是生活随笔為你收集整理的Java免锁数据结构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

91中文字幕在线播放 | 91精品视频播放 | 99久久超碰中文字幕伊人 | 麻豆一区在线观看 | 色在线视频 | 免费观看黄 | 18国产精品福利片久久婷 | 亚洲精品在线观看中文字幕 | 久久久久草| 国产精品免费麻豆入口 | 国产一区二区在线免费观看 | 97精品国产97久久久久久春色 | 日韩在线短视频 | 久久精品黄 | 国产精品毛片久久久久久久 | 亚洲国产精久久久久久久 | 欧美精品一区二区在线播放 | 天天综合网久久综合网 | 久久99日韩 | 日韩免费在线观看 | 97人人模人人爽人人少妇 | 久草在线免费播放 | h动漫中文字幕 | 欧美一级电影在线观看 | 久久国产精品色婷婷 | 91精品国产高清自在线观看 | 免费看的黄色网 | 久久精品久久久久 | 能在线看的av | 国产精品网红直播 | 国产亚洲精品美女久久 | 午夜精品视频免费在线观看 | 国产亚洲精品成人av久久ww | 日韩激情中文字幕 | 在线观看91精品视频 | 久久精品影视 | a在线一区 | 日日干 天天干 | 黄色毛片网站在线观看 | 黄色成人免费电影 | 中文字幕av播放 | 丁香影院在线 | 视频高清 | 久久伊人操 | 日韩高清一区 | 又黄又爽又湿又无遮挡的在线视频 | 玖玖色在线观看 | 激情久久综合 | 特级毛片aaa | 日韩欧美视频免费在线观看 | 狠狠色综合欧美激情 | 日日碰狠狠添天天爽超碰97久久 | 色综合久久88色综合天天6 | 色99之美女主播在线视频 | 干干日日 | 丰满少妇对白在线偷拍 | 一级性视频 | 久久免费在线视频 | 91在线最新 | 福利视频一二区 | 91一区二区三区久久久久国产乱 | 97电影手机 | 亚洲色影爱久久精品 | 操老逼免费视频 | 激情网站| 日韩在线播放欧美字幕 | 精品国产一区二区三区不卡 | 青青看片 | 在线观看精品黄av片免费 | 亚洲精品国产区 | 丁香婷婷电影 | 人人射人人爱 | 精品久久片 | 久久躁日日躁aaaaxxxx | 免费精品人在线二线三线 | a在线观看国产 | 天堂在线一区二区 | 在线视频区 | 久久久在线观看 | 欧美视频18 | 夜夜操天天干, | 国产污视频在线观看 | 日韩一级黄色av | 国产精品免费视频久久久 | 国内精品视频一区二区三区八戒 | 日韩大片免费观看 | 精油按摩av | av电影免费在线 | 亚洲一级电影 | 日韩在线影视 | 亚洲影视资源 | 久久99久久99精品 | 日韩69视频| 欧美xxxx性xxxxx高清 | 久久久久99精品成人片三人毛片 | 91福利国产在线观看 | 中文字幕在线观看资源 | 97夜夜澡人人爽人人免费 | 国产精品理论视频 | 亚洲欧洲一区二区在线观看 | 日韩久久一区二区 | 国产精品www | 在线看片a | www.91成人 | 99久久综合国产精品二区 | 一级黄色av | 国产精品免费久久久久影院仙踪林 | 99热国产在线观看 | 亚洲v精品| 国产成人一区二区精品非洲 | 国产黄色视| 在线观看成人网 | 福利一区在线 | 日韩最新在线 | 六月丁香婷 | 午夜精品久久久久久中宇69 | 国产精品自产拍在线观看蜜 | 麻豆国产精品va在线观看不卡 | 免费亚洲婷婷 | 久久国内精品99久久6app | 日韩精品国产一区 | 天天天在线综合网 | 精品国产自在精品国产精野外直播 | 日韩成人欧美 | 国产精品人成电影在线观看 | 色播五月婷婷 | 美女网站色在线观看 | 婷婷久月| 亚洲不卡123 | 五月激情在线 | 97精品国产97久久久久久久久久久久 | 色资源网免费观看视频 | 亚洲欧洲成人精品av97 | 精品久久国产 | 亚洲黄色免费观看 | 国产a级精品 | 成年人视频在线观看免费 | 免费瑟瑟网站 | 91激情视频在线观看 | 国产精品久久片 | 午夜av电影 | 午夜久久久影院 | 91人人澡| 亚洲欧美国产视频 | 精品久久久久亚洲 | 欧美视屏一区二区 | 久久久 精品 | 午夜在线资源 | 久草www| 啪啪免费视频网站 | 99热官网 | 99久久精品国产亚洲 | 成年人免费看片网站 | 91久久国产露脸精品国产闺蜜 | 国产91精品一区二区绿帽 | 91精品啪啪 | 永久免费毛片在线观看 | 亚洲精品在线观看的 | 91九色蝌蚪国产 | 91精品国产成 | 成片免费观看视频 | 中文字幕精品一区 | 久久久久国产精品视频 | 成人性生交视频 | 久久综合五月婷婷 | 日本精品视频一区二区 | 日本h视频在线观看 | 久久久91精品国产一区二区精品 | 久艹视频在线免费观看 | 日本精品一区二区三区在线播放视频 | 深爱开心激情 | 日韩免费视频 | 国产精品入口麻豆www | 国内精品亚洲 | 国产精品久久99综合免费观看尤物 | 欧美一级片免费在线观看 | 97夜夜澡人人双人人人喊 | 国产激情小视频在线观看 | 日韩中文字幕免费在线观看 | 在线免费黄色av | 99热这里只有精品1 av中文字幕日韩 | 超碰人人做 | 午夜丰满寂寞少妇精品 | 国产在线观看国语版免费 | 91麻豆精品一区二区三区 | 婷婷综合激情 | 亚洲性xxxx| 国产第一页福利影院 | 成人不用播放器 | 日日夜夜天天综合 | 国产剧情一区二区在线观看 | 日韩免费观看av | 亚洲日本欧美 | 婷婷四房综合激情五月 | 亚洲精品乱码久久久久久写真 | 操操操影院 | 在线 日韩 av | 不卡的av电影在线观看 | 国产系列 在线观看 | 在线观看国产区 | 日一日干一干 | 亚洲国产精品va在线看黑人 | 国产中文字幕视频 | 久久久久看片 | 97精品视频在线播放 | 免费a现在观看 | 人人澡人人添人人爽一区二区 | 91成人精品一区在线播放69 | 亚洲在线精品视频 | 久久伊人婷婷 | 日韩三级精品 | 天天搞天天干天天色 | 91色网址 | 日韩在线一区二区免费 | 成人精品久久 | av电影在线观看 | 亚洲v欧美v国产v在线观看 | 午夜久久网站 | 日本成人免费在线观看 | 亚洲精品乱码久久久久v最新版 | 91久久爱热色涩涩 | 天堂视频一区 | 国产69精品久久久久久久久久 | 午夜av网站 | 干狠狠| 91欧美国产 | 在线看毛片网站 | 国产黄色片免费 | 这里只有精彩视频 | 欧美性一级观看 | 成人91免费视频 | 成人av免费在线观看 | 免费福利在线播放 | 亚洲欧美视频网站 | 欧美日韩高清 | 色综合久久久久综合体桃花网 | 国产一级免费在线观看 | 91桃色免费观看 | 丁香久久激情 | 91视频免费网址 | 免费观看日韩av | 亚洲无线视频 | 人人看人人 | 极品美女被弄高潮视频网站 | 激情综合色播五月 | 在线观看视频你懂得 | 射射射av | 日韩精品无码一区二区三区 | 久久黄色美女 | 在线亚洲成人 | 国产精品第二十页 | 久草在线视频免赞 | 九九热精品视频在线播放 | 日韩特黄一级欧美毛片特黄 | 天天操天天射天天操 | 日韩中文字幕亚洲一区二区va在线 | 欧美激情综合色综合啪啪五月 | 最近最新最好看中文视频 | 婷婷激情站 | 99久久精品国产观看 | 久久免费高清视频 | 精品久久在线 | 91av网站在线观看 | 51久久成人国产精品麻豆 | 精品视频中文字幕 | 精品国产一区二区三区不卡 | 中文字幕丰满人伦在线 | 日本最新高清不卡中文字幕 | 日韩高清毛片 | 色婷婷成人| 伊人日日干 | 婷婷六月丁香激情 | 福利片免费看 | 久久综合免费 | 中文字幕日韩免费视频 | 99精品久久久久久久久久综合 | 久久国内视频 | 一区二区三区免费在线观看视频 | 99在线视频免费观看 | www黄在线 | 91网站观看 | 国产不卡在线观看 | 免费视频二区 | 国产视频2区 | 男女啪啪网站 | 97视频亚洲 | 欧美日韩在线播放一区 | 天天操天天摸天天爽 | 国产成人精品免高潮在线观看 | 在线一级片 | 欧美久久成人 | 黄色av成人在线 | 伊甸园av在线 | 在线观看精品视频 | 国内成人精品2018免费看 | 99tvdz@gmail.com | 欧美一级片在线播放 | 日韩动漫免费观看高清完整版在线观看 | 久久高清免费观看 | 日韩欧美69| 天堂中文在线播放 | 久久久久久久久福利 | 91最新在线视频 | 中文字幕在线视频一区 | 久草91视频 | 99国产精品久久久久久久久久 | 国产美女精品久久久 | 一级黄色在线免费观看 | 亚洲视频免费在线观看 | 日日夜夜网| 久久久在线免费观看 | 久久久久久久久久影院 | www国产亚洲精品 | 激情欧美在线观看 | 中文乱幕日产无线码1区 | 91免费版成人 | 日韩a在线观看 | 久久情爱 | 91传媒视频在线观看 | 热久久99这里有精品 | 欧美日韩性视频在线 | 婷婷综合亚洲 | 国产香蕉久久精品综合网 | 香蕉视频久久久 | 福利视频精品 | 久久一二三四 | 亚洲成人网在线 | 久久久人人爽 | 成人av片在线观看 | 伊人国产视频 | 奇米影视777四色米奇影院 | av一级片在线观看 | 在线观看深夜视频 | 亚洲国产剧情av | 国产中文在线字幕 | 91亚洲视频在线观看 | 国产99在线免费 | 欧美韩国日本在线 | 国产精品视频久久久 | 亚洲精品 在线视频 | 久久草视频 | 久久精品www人人爽人人 | 成 人 免费 黄 色 视频 | 天天艹天天干天天 | 精品麻豆 | 欧洲一区二区三区精品 | 97国产情侣爱久久免费观看 | 91成人免费看 | 久久伊人热 | 五月天激情综合 | 久久亚洲日本 | 九九九电影免费看 | 成年人免费电影在线观看 | 91成人在线网站 | 成人动漫精品一区二区 | 天天激情天天干 | 国产系列精品av | 欧美成人日韩 | 国产不卡免费 | 97人人澡人人爽人人模亚洲 | 狠狠操在线 | 欧美日韩一级视频 | 午夜免费视频网站 | 99精品视频观看 | 狠狠干狠狠久久 | 日韩大片在线免费观看 | 夜夜干夜夜| 国产一级不卡毛片 | 久久精品系列 | 久久婷婷影视 | 国产精品18久久久久久不卡孕妇 | 91一区啪爱嗯打偷拍欧美 | 狠狠狠操 | 国产精品免费视频久久久 | 又黄又爽又湿又无遮挡的在线视频 | 日韩三级久久 | 久久视频在线免费观看 | 在线观看精品国产 | 99精品黄色 | 久久久久久久久久久成人 | 日批视频 | 亚洲精品456在线播放乱码 | 中文字幕资源在线 | 亚洲精品视频在线观看免费视频 | 一色av| 天天躁日日 | 四虎永久国产精品 | 激情网第四色 | 青青草在久久免费久久免费 | 97影视 | 日韩三级成人 | 久久久久久久久久久免费 | 大荫蒂欧美视频另类xxxx | 久久久久久久久久久综合 | 国产精品一区二区免费视频 | 亚洲最新av网址 | 欧美激情综合网 | 日韩高清激情 | 激情久久一区二区三区 | 最近中文字幕高清字幕免费mv | 丁香六月久久综合狠狠色 | 国产精品一区二区免费看 | 国产精品中文字幕在线播放 | 国产高清小视频 | 日免费视频 | 欧美日本高清视频 | 久久av免费电影 | 国产 视频 高清 免费 | 成人国产精品久久久久久亚洲 | 精品久久久久久电影 | 美女很黄免费网站 | 九草在线观看 | 久久综合九色九九 | 日韩二区三区在线观看 | 欧美激情精品久久久久久免费印度 | 手机在线看a | 亚洲色视频 | 九九久久在线看 | 在线观看视频在线 | 四虎影视精品永久在线观看 | 日韩在线第一 | 欧美国产一区二区 | 亚洲综合视频在线 | 超碰人人乐 | 中文字幕在线观看播放 | 丁香国产视频 | 成人av资源网 | 亚州日韩中文字幕 | av网址aaa| 3d黄动漫免费看 | www.玖玖玖 | 精品国产一区二区在线 | 中文字幕无吗 | 91最新在线视频 | 午夜一级免费电影 | 夜夜躁日日躁狠狠久久av | 日韩在线观看一区二区 | 香蕉影院在线播放 | 日日夜夜人人精品 | 中文字幕欧美日韩va免费视频 | 亚洲黄色大片 | 五月婷婷色丁香 | 国产粉嫩在线 | 蜜臀精品久久久久久蜜臀 | 亚洲乱码一区 | 91视频久久久久久 | 天天操夜夜看 | 国产免费国产 | 亚洲爱视频| 天天操天天射天天爽 | av在线永久免费观看 | 开心色激情网 | 91九色最新 | 九色精品免费永久在线 | 亚洲最大av网 | 中文国产在线观看 | 亚洲爽爽网 | 草久久久久 | 美女视频黄免费网站 | 久久激情婷婷 | 欧美日韩免费看 | 久久国产亚洲精品 | 久久99国产精品 | 日本最大色倩网站www | 国产一级片观看 | www免费黄色 | 亚州性色| 国产成人精品一区二区三区福利 | 日本女人的性生活视频 | 91三级在线观看 | 久久久久电影网站 | 国产午夜精品视频 | 97精品国自产拍在线观看 | 国产精品99久久久久久小说 | 夜夜躁狠狠躁日日躁 | 亚洲韩国一区二区三区 | 久久国产精品免费看 | 国产高清网站 | 亚洲国产中文字幕在线 | 欧美aaa大片 | 999久久a精品合区久久久 | 91精品国产自产在线观看 | 亚洲色图美腿丝袜 | 久久精品视频免费 | 国产 日韩 欧美 在线 | 国产黄色大片免费看 | 亚洲综合最新在线 | 日韩av线观看 | 处女av在线 | 日韩免费视频线观看 | 日韩高清 一区 | 亚洲国产高清在线 | 色在线免费 | 高清在线一区 | 99精品视频在线免费观看 | 不卡电影一区二区三区 | 国产区精品视频 | 久久激情久久 | 日韩欧美成人网 | 国产精品美女久久久久久久久久久 | 四虎国产精品免费观看视频优播 | 狠狠色丁香婷婷综合久小说久 | 国产在线观看xxx | 中文字幕色播 | 精品999在线观看 | 97超碰超碰久久福利超碰 | 最新色站 | 成人黄色大片网站 | 99久久精品久久久久久动态片 | 中文字幕在线观看1 | 欧美日韩在线观看不卡 | 色天天 | 午夜视频在线观看一区二区三区 | 精品国产一区二区三区免费 | 超碰97人人爱 | 国内精品久久久久久久久久久 | 成 人 黄 色 免费播放 | 亚洲国产成人久久综合 | 一级黄色免费 | 999久久a精品合区久久久 | 亚洲另类在线视频 | 9999国产| 黄色大片免费播放 | 国产原创中文在线 | 精品久久久久久久久久岛国gif | 午夜精品一区二区三区可下载 | 男女拍拍免费视频 | 狠狠色综合欧美激情 | 91在线视频在线 | 欧美一区二区视频97 | 精品影院一区二区久久久 | 五月宗合网 | 欧美日韩中文在线视频 | 久久综合久久伊人 | 成人亚洲免费 | 天天操夜夜干 | 欧美日韩高清一区二区 | 丁香婷婷深情五月亚洲 | av中文字幕网址 | 国产91aaa| 中文字幕乱码亚洲精品一区 | 午夜精品剧场 | 亚洲精品美女久久久 | 国产精品伦一区二区三区视频 | 亚洲精品视频在线播放 | 青青草国产精品 | 欧美va在线观看 | 久久精品免费观看 | 午夜视频在线观看一区二区 | 日韩欧美在线国产 | 亚洲国内精品在线 | 欧美日高清视频 | 香蕉视频在线看 | 亚洲一本视频 | 毛片在线播放网址 | 国产黄色免费观看 | 视频一区久久 | 日本中文字幕在线 | 9在线观看免费高清完整 | 国产亚洲在线观看 | 亚洲精品色 | 狠狠干网站 | 韩国av电影网 | 国产精品久久久久一区二区三区共 | 久久久久久久国产精品 | 奇米影视四色8888 | 成年人看片 | 国产成人a亚洲精品 | 精品视频国产一区 | 国产精品久久婷婷六月丁香 | 九九免费在线观看视频 | 国产精品中文字幕在线播放 | av3级在线 | 日韩性xxxx | 午夜婷婷在线观看 | 97碰在线视频 | av在线网站免费观看 | 国产综合福利在线 | 国产欧美三级 | 黄色大片日本免费大片 | 在线日本看片免费人成视久网 | 91视频久久久 | 毛片基地黄久久久久久天堂 | 久久精品女人毛片国产 | 91精品视频免费在线观看 | 美女国产在线 | 狠狠狠狠狠干 | 国产成人精品亚洲精品 | 免费av在| 久久99热精品这里久久精品 | 8x8x在线观看视频 | 久草视频手机在线 | 香蕉影视在线观看 | 九色porny真实丨国产18 | 国产69精品久久久久久 | 午夜三级在线 | 欧美另类老妇 | 国产成人久久久久 | 玖玖玖国产精品 | 97超碰在线播放 | 91九色视频国产 | 8x成人免费视频 | 国产在线精品一区二区三区 | 在线观看免费黄视频 | 在线免费视频 你懂得 | 国产女做a爱免费视频 | 少妇性色午夜淫片aaaze | 国产糖心vlog在线观看 | 91精品视频免费观看 | 韩国在线视频一区 | 夜夜爽夜夜操 | 在线观看视频黄色 | 五月天婷婷在线观看视频 | 91精品一区二区三区蜜桃 | 日日爽视频 | 99久久99久久精品 | 精品国产不卡 | 国产精品久久久久久a | 婷婷国产在线观看 | 少妇精品久久久一区二区免费 | 久久精品99国产精品亚洲最刺激 | 日日干干 | 97热在线观看| 国产高清中文字幕 | 国产免费观看久久 | 国产a精品 | 国产资源网 | 欧美一级免费黄色片 | 四虎成人精品永久免费av九九 | 可以免费观看的av片 | 免费观看91视频 | 国内一区二区视频 | 国产不卡视频在线 | 国产精品网红直播 | 国产高清专区 | 久久五月情影视 | 成人小视频在线观看免费 | 欧美日韩91 | 欧美另类xxxxx| 91资源在线| av大片免费在线观看 | www.com.日本一级 | 亚洲精品国产精品国 | 国产一区二区精品91 | 亚洲aⅴ免费在线观看 | 亚洲日本在线视频观看 | 日韩av不卡在线播放 | 九九久久国产 | 毛片随便看 | 久久久这里有精品 | 久久久精品国产免费观看一区二区 | 亚洲毛片一区二区三区 | 亚洲狠狠婷婷综合久久久 | 久久一久久 | 国产偷国产偷亚洲清高 | 欧美激情精品久久 | 亚洲精选视频免费看 | 超碰在线9 | 亚洲天天干 | 久久视奸| 中文资源在线官网 | 激情综合网五月激情 | 午夜91在线 | 日韩电影在线一区 | 亚洲精品一区中文字幕乱码 | 在线观看国产亚洲 | 久久久99精品免费观看乱色 | 久草视频在线资源站 | 日本69hd| 午夜久久电影网 | 成人久久免费视频 | 亚州精品成人 | 久久综合狠狠综合 | 国产又粗又猛又黄又爽的视频 | 久久免费观看少妇a级毛片 久久久久成人免费 | 91精品国产91 | 国内精品久久久久影院一蜜桃 | 人人干在线 | 国产91精品一区二区 | adn—256中文在线观看 | 99视频+国产日韩欧美 | 精品一区二区久久久久久久网站 | 国产一级二级av | 日韩av高清在线观看 | 日本爱爱片| 毛片激情永久免费 | www.黄色 | 精品一区二区综合 | 精品国内自产拍在线观看视频 | 美女久久久久久久久久 | 国产在线一区观看 | 久久av一区二区三区亚洲 | 国产黄色a | 91九色蝌蚪| 国产福利一区在线观看 | 久久这里只有精品首页 | 亚洲激情在线视频 | 国产精品理论片 | 精品一区二区免费在线观看 | 蜜桃视频在线视频 | 亚洲精品欧美精品 | 日本丰满少妇免费一区 | 色婷婷免费视频 | 亚洲国产免费看 | 国产成人精品一区二区三区福利 | 成人av在线资源 | 韩国三级一区 | 欧美在线free | 91精品久久久久久久久久久久久 | 天天弄天天操 | 欧美日韩国产综合一区二区 | 一区二区三区免费播放 | 免费视频97 | 日韩专区视频 | 久久99精品久久久久久秒播蜜臀 | 久久国产片 | 综合在线观看 | 国际av在线| 在线午夜电影神马影院 | 色网站在线免费 | 欧美在线不卡一区 | 成人一区二区三区中文字幕 | 免费情缘 | 69国产盗摄一区二区三区五区 | 日韩在线观看影院 | 日韩久久影院 | www最近高清中文国语在线观看 | 国产成人一区二区精品非洲 | 免费黄色在线 | 国产69精品久久久久久 | 久久综合狠狠综合久久狠狠色综合 | 91刺激视频| 日韩二区三区在线 | 午夜视频在线观看一区 | 精品国产视频一区 | 久久综合天天 | 亚洲电影免费 | 欧美一级性生活视频 | 国产精品免费观看国产网曝瓜 | 亚洲国产精品一区二区尤物区 | 亚洲视频每日更新 | 国产成a人亚洲精v品在线观看 | 在线视频 日韩 | 99精品视频观看 | 超碰人人在线观看 | 在线观看视频你懂 | 日韩一区二区三区免费电影 | 久久久久久高清 | 国产午夜精品一区二区三区欧美 | 国产精品毛片久久 | 色婷婷久久一区二区 | 日韩成人黄色av | 免费在线观看av电影 | 亚洲精品国产精品国自产观看 | 色香天天 | 天天拍天天爽 | 97视频在线免费播放 | 99综合视频| 奇米网444 | 欧美性一级观看 | 日韩四虎| 久久精品国产免费看久久精品 | 久久99精品国产99久久6尤 | www.五月天婷婷.com | 日日操操 | 天天翘av| 午夜电影 电影 | 日韩av伦理片 | 亚洲精品久久久久中文字幕m男 | 夜色.com| 国产精品欧美久久久久无广告 | 麻豆影视在线观看 | 亚洲夜夜爽 | 在线观看成人一级片 | 中文字幕在线免费 | 国产一级黄色电影 | 欧美怡红院 | 黄色成年网站 | 久久99久国产精品黄毛片入口 | 最近中文字幕免费av | japanese黑人亚洲人4k | 日韩免费播放 | 操处女逼| 天天干,夜夜操 | 亚洲最大在线视频 | 亚洲一区二区精品 | 99在线热播| 超碰免费久久 | 亚洲欧美一区二区三区孕妇写真 | 91中文在线视频 | 91在线免费看片 | 国产高清无av久久 | 日日干,天天干 | 成人一级片在线观看 | 久操免费视频 | 又黄又刺激又爽的视频 | 超碰在线cao | 丁香婷婷综合五月 | 中文区中文字幕免费看 | 欧美性护士 | 色97在线| 一区二区视频在线播放 | 日韩av高清在线观看 | 中国成人一区 | 丁香六月综合网 | 在线观看亚洲精品 | 在线中文字幕视频 | 91精品办公室少妇高潮对白 | 日本超碰在线 | 国产国产人免费人成免费视频 | www亚洲国产| 在线精品视频免费播放 | 日韩成人精品在线观看 | 成年人看片网站 | 亚洲高清视频在线观看免费 | 在线观看成人毛片 | 欧美亚洲一区二区在线 | 国产精品久久久久久吹潮天美传媒 | 天天综合狠狠精品 | 韩国av电影在线观看 | 肉色欧美久久久久久久免费看 | 国产在线观看免 | 在线看毛片网站 | 国产啊v在线观看 | 91在线porny国产在线看 | 日韩动态视频 | 欧美大片www | 日韩精品一二三 | 97狠狠操| 操操操人人人 | 欧美精品色 | 精品成人网 | 中文字幕资源在线 | 国产在线超碰 | 美女视频黄是免费的 | 中文字幕有码在线播放 | 永久免费精品视频 | 缴情综合网五月天 | 久久精品国产精品亚洲 | 亚洲视频 视频在线 | 久久草av| 麻豆免费视频网站 | 日韩精品免费专区 | 98超碰在线| 久久开心激情 | 欧美激情视频一二区 | 日韩一区二区三区在线看 | 成年人黄色免费网站 | 99热精品久久 | 日韩高清不卡一区二区三区 | 欧美日韩国产色综合一二三四 | 国产99久久九九精品 | 最近2019中文免费高清视频观看www99 | 18久久久久 | 久久精品视频免费观看 | 日韩一区二区三区不卡 | 天天操狠狠操夜夜操 | 六月色播 | 最新国产在线 | 色婷婷电影网 | 国产精品成人一区 | 亚洲精品久久久久中文字幕二区 | 久久午夜精品 | 亚洲综合成人av | 91精品久久久久久久久久入口 | 日韩av资源在线观看 | 伊人春色电影网 | 99精品在线免费在线观看 | 日韩中文在线观看 | 蜜臀久久99精品久久久酒店新书 | 久久理论电影网 | 婷婷六月天综合 | 精品国产伦一区二区三区 | 亚洲片在线观看 | 在线视频一区二区 | 免费在线观看中文字幕 | 国产精品爽爽久久久久久蜜臀 | 97超碰精品 | 日韩欧美视频在线观看免费 | 久久久2o19精品 | 久久久午夜精品理论片中文字幕 | 免费不卡中文字幕视频 | 制服丝袜亚洲 | 天堂va在线高清一区 | 成人av片免费观看app下载 | 精品亚洲视频在线 | 成人免费毛片aaaaaa片 | 亚洲精品国产精品乱码不99热 | 日韩av成人免费看 | 婷婷丁香国产 | 五月天六月色 | 国产精品女主播一区二区三区 | 国产精品免费视频网站 | 91片在线观看 | 久草在线视频精品 | 激情网第四色 | 啪啪资源 | 午夜影院在线观看18 | 日韩av在线高清 | 一级黄色毛片 | 精品一区二区久久久久久久网站 | 日韩在线中文字幕 | 成人精品国产 | 91丝袜美腿 | 在线精品观看 | 人人玩人人添人人澡超碰 | 日韩在线视频网址 | 日韩欧美在线综合网 | 黄色a级片在线观看 | 一级片免费在线 | 最新中文字幕视频 | 综合网久久 | 成人啪啪18免费游戏链接 | 欧美乱码精品一区 | 99在线播放 | 色99网| 久久视频 | 成人91在线观看 | 9992tv成人免费看片 | 日韩区欠美精品av视频 | 欧美日韩免费在线视频 | 国内精品久久久久影院日本资源 | 激情欧美丁香 | 色吊丝在线永久观看最新版本 | 91视频免费网站 | 亚洲综合网站在线观看 | 美女久久久久 | 色综合天天综合网国产成人网 | www.精选视频.com| 日韩精品无码一区二区三区 | 99久久99久久精品国产片 | 91丨九色丨高潮丰满 | 日韩区视频 | 人人添人人澡 | 日韩三级免费 | av日韩不卡 | 日韩欧美观看 | 国内精品视频久久 | 国产精品高清一区二区三区 | 天天色天天射综合网 | 色婷婷av一区二 | 久久手机免费视频 | av色一区| 久久综合五月婷婷 | 五月花婷婷| 婷婷视频导航 | 中文字幕在线看片 | www在线免费观看 | 成人久久国产 | 免费日韩 精品中文字幕视频在线 | 久久免费播放视频 | 亚洲精品综合欧美二区变态 | 97在线观看免费视频 | 久久成视频 | 国产精品亚州 | 欧美日韩一区二区三区不卡 | 久久午夜精品影院一区 | 亚洲 欧美 另类人妖 | 久久99精品久久久久久三级 | 日日干夜夜操视频 | 最近最新中文字幕视频 | av韩国在线 | 黄色特一级| 久久人人爽人人爽人人片av免费 | 西西444www大胆高清视频 | 日本免费久久高清视频 | 懂色av一区二区三区蜜臀 | 欧美永久视频 | 亚洲九九爱 | 久久久精品网站 | 免费av影视 | 午夜影院日本 | 日韩电影在线观看一区二区三区 | 毛片随便看| 成人四虎 | 激情五月视频 | 成人 亚洲 欧美 | 国产96精品 | 麻豆 videos| 一区二区三区免费在线 | 一区二区视频在线看 | 成人动漫一区二区 | 国产一级视频在线免费观看 | 欧美日韩国产在线一区 | 国产亚洲在线观看 | 操处女逼| 日本mv大片欧洲mv大片 | 色婷婷激情综合 | 国产乱对白刺激视频不卡 | 国产精品免费人成网站 | 成 人 黄 色视频免费播放 | 国产91九色蝌蚪 | 日韩中文在线观看 | 国产精品久久久久久久久久久久午夜片 | 日批视频国产 | 在线视频久 | 成人黄色电影在线观看 | 成人亚洲网 |