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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

高效C++无锁队列实现-moodycamel::ConcurrentQueue

發(fā)布時間:2023/12/13 综合教程 43 生活家
生活随笔 收集整理的這篇文章主要介紹了 高效C++无锁队列实现-moodycamel::ConcurrentQueue 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

國外一牛人做的,支持多平臺,支持多線程寫、多線程讀,并可指定讀寫token,轉(zhuǎn)載過來。

感覺作者也時刻維護著他這個項目,我提了一些問題,每次都會及時得到答復,而且回復得非常認真仔細,非常贊!

鏈接地址(可下載源碼):https://github.com/cameron314/concurrentqueue

作者的測試效果統(tǒng)計:http://moodycamel.com/blog/2014/a-fast-general-purpose-lock-free-queue-for-c++

moodycamel::ConcurrentQueue

An industrial-strength lock-free queue for C++.

Note: If all you need is a single-producer, single-consumer queue, I haveone of those too.

Features

Knock-your-socks-offblazing fast performance.
Single-header implementation. Just drop it in your project.
Fully thread-safe lock-free queue. Use concurrently from any number of threads.
C++11 implementation -- elements are moved (instead of copied) where possible.
Templated, obviating the need to deal exclusively with pointers -- memory is managed for you.
No artificial limitations on element types or maximum count.
Memory can be allocated once up-front, or dynamically as needed.
Fully portable (no assembly; all is done through standard C++11 primitives).
Supports super-fast bulk operations.
Includes a low-overhead blocking version (BlockingConcurrentQueue).
Exception safe.

Reasons to use

There are not that many full-fledged lock-free queues for C++. Boost has one, but it's limited to objects with trivial assignment operators and trivial destructors, for example. Intel's TBB queue isn't lock-free, and requires trivial constructors too. There's many academic papers that implement lock-free queues in C++, but usable source code is hard to find, and tests even more so.

This queue not only has less limitations than others (for the most part), butit's also faster. It's been fairly well-tested, and offers advanced features likebulk enqueueing/dequeueing(which, with my new design, is much faster than one element at a time, approaching and even surpassing the speed of a non-concurrent queue even under heavy contention).

In short, there was a lock-free queue shaped hole in the C++ open-source universe, and I set out to fill it with the fastest, most complete, and well-tested design and implementation I could. The result ismoodycamel::ConcurrentQueue:-)

Reasonsnotto use

The fastest synchronization of all is the kind that never takes place. Fundamentally, concurrent data structures require some synchronization, and that takes time. Every effort was made, of course, to minimize the overhead, but if you can avoid sharing data between threads, do so!

Why use concurrent data structures at all, then? Because they're gosh darn convenient! (And, indeed, sometimes sharing data concurrently is unavoidable.)

My queue isnot linearizable(see the next section on high-level design). The foundations of its design assume that producers are independent; if this is not the case, and your producers co-ordinate amongst themselves in some fashion, be aware that the elements won't necessarily come out of the queue in the same order they were put inrelative to the ordering formed by that co-ordination(but they will still come out in the order they were put in by anyindividualproducer). If this affects your use case, you may be better off with another implementation; either way, it's an important limitation to be aware of.

My queue is alsonot NUMA aware, and does a lot of memory re-use internally, meaning it probably doesn't scale particularly well on NUMA architectures; however, I don't know of any other lock-free queue thatisNUMA aware (except forSALSA, which is very cool, but has no publicly available implementation that I know of).

Finally, the queue isnot sequentially consistent; thereisa happens-before relationship between when an element is put in the queue and when it comes out, but other things (such as pumping the queue until it's empty) require more thought to get right in all eventualities, because explicit memory ordering may have to be done to get the desired effect. In other words, it can sometimes be difficult to use the queue correctly. This is why it's a good idea to follow thesampleswhere possible. On the other hand, the upside of this lack of sequential consistency is better performance.

High-level design

Elements are stored internally using contiguous blocks instead of linked lists for better performance. The queue is made up of a collection of sub-queues, one for each producer. When a consumer wants to dequeue an element, it checks all the sub-queues until it finds one that's not empty. All of this is largely transparent to the user of the queue, however -- it mostly just worksTM.

One particular consequence of this design, however, (which seems to be non-intuitive) is that if two producers enqueue at the same time, there is no defined ordering between the elements when they're later dequeued. Normally this is fine, because even with a fully linearizable queue there'd be a race between the producer threads and so you couldn't rely on the ordering anyway. However, if for some reason you do extra explicit synchronization between the two producer threads yourself, thus defining a total order between enqueue operations, you might expect that the elements would come out in the same total order, which is a guarantee my queue does not offer. At that point, though, there semantically aren't really two separate producers, but rather one that happens to be spread across multiple threads. In this case, you can still establish a total ordering with my queue by creating a single producer token, and using that from both threads to enqueue (taking care to synchronize access to the token, of course, but there was already extra synchronization involved anyway).

I've written a more detailedoverview of the internal design, as well asthe full nitty-gritty details of the design, on my blog. Finally, thesourceitself is available for perusal for those interested in its implementation.

Basic use

The entire queue's implementation is contained inone header,concurrentqueue.h. Simply download and include that to use the queue. The blocking version is in a separate header,blockingconcurrentqueue.h, that depends on the first. The implementation makes use of certain key C++11 features, so it requires a fairly recent compiler (e.g. VS2012+ or g++ 4.8; note that g++ 4.6 has a known bug withstd::atomicand is thus not supported). The algorithm implementations themselves are platform independent.

Use it like you would any other templated queue, with the exception that you can use it from many threads at once :-)

Simple example:

#include "concurrentqueue.h"


moodycamel::ConcurrentQueue<int> q;

q.enqueue(25);


int item;

bool found = q.try_dequeue(item);

assert(found && item == 25);

Description of basic methods:

ConcurrentQueue(size_t initialSizeEstimate)Constructor which optionally accepts an estimate of the number of elements the queue will hold
enqueue(T&& item)Enqueues one item, allocating extra space if necessary
try_enqueue(T&& item)Enqueues one item, but only if enough memory is already allocated
try_dequeue(T& item)Dequeues one item, returning true if an item was found or false if the queue appeared empty

Note that it is up to the user to ensure that the queue object is completely constructed before being used by any other threads (this includes making the memory effects of construction visible, possibly via a memory barrier). Similarly, it's important that all threads have finished using the queue (and the memory effects have fully propagated) before it is destructed.

There's usually two versions of each method, one "explicit" version that takes a user-allocated per-producer or per-consumer token, and one "implicit" version that works without tokens. Using the explicit methods is almost always faster (though not necessarily by a huge factor). Apart from performance, the primary distinction between them is their sub-queue allocation behaviour for enqueue operations: Using the implicit enqueue methods causes an automatically-allocated thread-local producer sub-queue to be allocated (it is marked for reuse once the thread exits). Explicit producers, on the other hand, are tied directly to their tokens' lifetimes (and are also recycled as needed).

Full API (pseudocode):

# Allocates more memory if necessary

enqueue(item) : bool

enqueue(prod_token, item) : bool

enqueue_bulk(item_first, count) : bool

enqueue_bulk(prod_token, item_first, count) : bool


# Fails if not enough memory to enqueue

try_enqueue(item) : bool

try_enqueue(prod_token, item) : bool

try_enqueue_bulk(item_first, count) : bool

try_enqueue_bulk(prod_token, item_first, count) : bool


# Attempts to dequeue from the queue (never allocates)

try_dequeue(item&) : bool

try_dequeue(cons_token, item&) : bool

try_dequeue_bulk(item_first, max) : size_t

try_dequeue_bulk(cons_token, item_first, max) : size_t


# If you happen to know which producer you want to dequeue from

try_dequeue_from_producer(prod_token, item&) : bool

try_dequeue_bulk_from_producer(prod_token, item_first, max) : size_t


# A not-necessarily-accurate count of the total number of elements

size_approx() : size_t

Blocking version

As mentioned above, a full blocking wrapper of the queue is provided that addswait_dequeueandwait_dequeue_bulkmethods in addition to the regular interface. This wrapper is extremely low-overhead, but slightly less fast than the non-blocking queue (due to the necessary bookkeeping involving a lightweight semaphore).

The only major caveat with the blocking version is that you must be careful not to destroy the queue while somebody is waiting on it. This generally means you need to know for certain that another element is going to come along before you call one of the blocking methods.

Blocking example:

#include "blockingconcurrentqueue.h"


moodycamel::BlockingConcurrentQueue<int> q;

std::thread producer([&]() {

for (int i = 0; i != 100; ++i) {

q.enqueue(i);

}

});

std::thread consumer([&]() {

for (int i = 0; i != 100; ++i) {

int item;

q.wait_dequeue(item);

assert(item == i);

}

});

producer.join();

consumer.join();


assert(q.size_approx() == 0);

Advanced features

Tokens

The queue can take advantage of extra per-producer and per-consumer storage if it's available to speed up its operations. This takes the form of "tokens": You can create a consumer token and/or a producer token for each thread or task (tokens themselves are not thread-safe), and use the methods that accept a token as their first parameter:

moodycamel::ConcurrentQueue<int> q;


moodycamel::ProducerToken ptok(q);

q.enqueue(ptok, 17);


moodycamel::ConsumerToken ctok(q);

int item;

q.try_dequeue(ctok, item);

assert(item == 17);

If you happen to know which producer you want to consume from (e.g. in a single-producer, multi-consumer scenario), you can use thetry_dequeue_from_producermethods, which accept a producer token instead of a consumer token, and cut some overhead.

Note that tokens work with the blocking version of the queue too.

When producing or consuming many elements, the most efficient way is to:

Use the bulk methods of the queue with tokens
Failing that, use the bulk methods without tokens
Failing that, use the single-item methods with tokens
Failing that, use the single-item methods without tokens

Having said that, don't create tokens willy-nilly -- ideally there would be one token (of each kind) per thread. The queue will work with what it is given, but it performs best when used with tokens.

Note that tokens aren't actually tied to any given thread; it's not technically required that they be local to the thread, only that they be used by a single producer/consumer at a time.

Bulk operations

Thanks to thenovel designof the queue, it's just as easy to enqueue/dequeue multiple items as it is to do one at a time. This means that overhead can be cut drastically for bulk operations. Example syntax:

moodycamel::ConcurrentQueue<int> q;


int items[] = { 1, 2, 3, 4, 5 };

q.enqueue_bulk(items, 5);


int results[5]; // Could also be any iterator

size_t count = q.try_dequeue_bulk(results, 5);

for (size_t i = 0; i != count; ++i) {

assert(results[i] == items[i]);

}

Preallocation (correctly usingtry_enqueue)

try_enqueue, unlike just plainenqueue, will never allocate memory. If there's not enough room in the queue, it simply returns false. The key to using this method properly, then, is to ensure enough space is pre-allocated for your desired maximum element count.

The constructor accepts a count of the number of elements that it should reserve space for. Because the queue works with blocks of elements, however, and not individual elements themselves, the value to pass in order to obtain an effective number of pre-allocated element slots is non-obvious.

First, be aware that the count passed is rounded up to the next multiple of the block size. Note that the default block size is 32 (this can be changed via the traits). Second, once a slot in a block has been enqueued to, that slot cannot be re-used until the rest of the block has completely been completely filled up and then completely emptied. This affects the number of blocks you need in order to account for the overhead of partially-filled blocks. Third, each producer (whether implicit or explicit) claims and recycles blocks in a different manner, which again affects the number of blocks you need to account for a desired number of usable slots.

Suppose you want the queue to be able to hold at leastNelements at any given time. Without delving too deep into the rather arcane implementation details, here are some simple formulas for the number of elements to request for pre-allocation in such a case. Note the division is intended to be arithmetic division and not integer division (in order forceil()to work).

For explicit producers (using tokens to enqueue):

(ceil(N / BLOCK_SIZE) + 1) * MAX_NUM_PRODUCERS * BLOCK_SIZ

For implicit producers (no tokens):

(ceil(N / BLOCK_SIZE) - 1 + 2 * MAX_NUM_PRODUCERS) * BLOCK_SIZE

When using mixed producer types:

((ceil(N / BLOCK_SIZE) - 1) * (MAX_EXPLICIT_PRODUCERS + 1) + 2 * (MAX_IMPLICIT_PRODUCERS + MAX_EXPLICIT_PRODUCERS)) * BLOCK_SIZE

If these formulas seem rather inconvenient, you can use the constructor overload that accepts the minimum number of elements (N) and the maximum number of producers and consumers directly, and let it do the computation for you.

Finally, it's important to note that because the queue is only eventually consistent and takes advantage of weak memory ordering for speed, there's always a possibility that under contentiontry_enqueuewill fail even if the queue is correctly pre-sized for the desired number of elements. (e.g. A given thread may think that the queue's full even when that's no longer the case.) So no matter what, you still need to handle the failure case (perhaps looping until it succeeds), unless you don't mind dropping elements.

Exception safety

The queue is exception safe, and will never become corrupted if used with a type that may throw exceptions. The queue itself never throws any exceptions (operations fail gracefully (return false) if memory allocation fails instead of throwingstd::bad_alloc).

It is important to note that the guarantees of exception safety only hold if the element type never throws from its destructor, and that any iterators passed into the queue (for bulk operations) never throw either. Note that in particular this meansstd::back_inserteriterators must be used with care, since the vector being inserted into may need to allocate and throw astd::bad_allocexception from inside the iterator; so be sure to reserve enough capacity in the target container first if you do this.

The guarantees are presently as follows:

Enqueue operations are rolled back completely if an exception is thrown from an element's constructor. For bulk enqueue operations, this means that elements are copied instead of moved (in order to avoid having only some of the objects be moved in the event of an exception). Non-bulk enqueues always use the move constructor if one is available.
If the assignment operator throws during a dequeue operation (both single and bulk), the element(s) are considered dequeued regardless. In such a case, the dequeued elements are all properly destructed before the exception is propagated, but there's no way to get the elements themselves back.
Any exception that is thrown is propagated up the call stack, at which point the queue is in a consistent state.

Note: If any of your type's copy constructors/move constructors/assignment operators don't throw, be sure to annotate them withnoexcept; this will avoid the exception-checking overhead in the queue where possible (even with zero-cost exceptions, there's still a code size impact that has to be taken into account).

Traits

The queue also supports a traits template argument which defines various types, constants, and the memory allocation and deallocation functions that are to be used by the queue. The typical pattern to providing your own traits is to create a class that inherits from the default traits and override only the values you wish to change. Example:

struct MyTraits : public moodycamel::ConcurrentQueueDefaultTraits

{

static const size_t BLOCK_SIZE = 256; // Use bigger blocks

};


moodycamel::ConcurrentQueue<int, MyTraits> q;

How to dequeue types without calling the constructor

The normal way to dequeue an item is to pass in an existing object by reference, which is then assigned to internally by the queue (using the move-assignment operator if possible). This can pose a problem for types that are expensive to construct or don't have a default constructor; fortunately, there is a simple workaround: Create a wrapper class that copies the memory contents of the object when it is assigned by the queue (a poor man's move, essentially). Note that this only works if the object contains no internal pointers. Example:

struct MyObjectMover

{

inline void operator=(MyObject&& obj)

{

std::memcpy(data, &obj, sizeof(MyObject));


// TODO: Cleanup obj so that when it's destructed by the queue

// it doesn't corrupt the data of the object we just moved it into

}


inline MyObject& obj() { return *reinterpret_cast<MyObject*>(data); }


private:

align(alignof(MyObject)) char data[sizeof(MyObject)];

};

Samples

There are some more detailed sampleshere. The source of theunit testsandbenchmarksare available for reference as well.

Benchmarks

See my blog post for somebenchmark results(including versusboost::lockfree::queueandtbb::concurrent_queue), or run the benchmarks yourself (requires MinGW and certain GnuWin32 utilities to build on Windows, or a recent g++ on Linux):

cd build

make benchmarks

bin/benchmarks

The short version of the benchmarks is that it's so fast (especially the bulk methods), that if you're actually using the queue todoanything, the queue won't be your bottleneck.

Tests (and bugs)

I've written quite a few unit tests as well as a randomized long-running fuzz tester. I also ran the core queue algorithm through theCDSCheckerC++11 memory model model checker. Some of the inner algorithms were tested separately using theRelacymodel checker, and full integration tests were also performed with Relacy. I've tested on Linux (Fedora 19) and Windows (7), but only on x86 processors so far (Intel and AMD). The code was written to be platform-independent, however, and should work across all processors and OSes.

Due to the complexity of the implementation and the difficult-to-test nature of lock-free code in general, there may still be bugs. If anyone is seeing buggy behaviour, I'd like to hear about it! (Especially if a unit test for it can be cooked up.) Just open an issue on GitHub.

License

I'm releasing the source of this repository (with the exception of third-party code, i.e. the Boost queue (used in the benchmarks for comparison), Intel's TBB library (ditto), CDSChecker, Relacy, and Jeff Preshing's cross-platform semaphore, which all have their own licenses) under asimplified BSD license.

Note that lock-free programming is a patent minefield, and this code may very well violate a pending patent (I haven't looked), though it does not to my present knowledge. I did design and implement this queue from scratch.

Diving into the code

If you're interested in the source code itself, it helps to have a rough idea of how it's laid out. This section attempts to describe that.

The queue is formed of several basic parts (listed here in roughly the order they appear in the source). There's the helper functions (e.g. for rounding to a power of 2). There's the default traits of the queue, which contain the constants and malloc/free functions used by the queue. There's the producer and consumer tokens. Then there's the queue's public API itself, starting with the constructor, destructor, and swap/assignment methods. There's the public enqueue methods, which are all wrappers around a small set of private enqueue methods found later on. There's the dequeue methods, which are defined inline and are relatively straightforward.

Then there's all the main internal data structures. First, there's a lock-free free list, used for recycling spent blocks (elements are enqueued to blocks internally). Then there's the block structure itself, which has two different ways of tracking whether it's fully emptied or not (remember, given two parallel consumers, there's no way to know which one will finish first) depending on where it's used. Then there's a small base class for the two types of internal SPMC producer queues (one for explicit producers that holds onto memory but attempts to be faster, and one for implicit ones which attempt to recycle more memory back into the parent but is a little slower). The explicit producer is defined first, then the implicit one. They both contain the same general four methods: One to enqueue, one to dequeue, one to enqueue in bulk, and one to dequeue in bulk. (Obviously they have constructors and destructors too, and helper methods.) The main difference between them is how the block handling is done (they both use the same blocks, but in different ways, and map indices to them in different ways).

Finally, there's the miscellaneous internal methods: There's the ones that handle the initial block pool (populated when the queue is constructed), and an abstract block pool that comprises the initial pool and any blocks on the free list. There's ones that handle the producer list (a lock-free add-only linked list of all the producers in the system). There's ones that handle the implicit producer lookup table (which is really a sort of specialized TLS lookup). And then there's some helper methods for allocating and freeing objects, and the data members of the queue itself, followed lastly by the free-standing swap functions.

本機測試結(jié)果:Inter(R) Core(TM)2 Quad CPU Q9500@2.83Hz

verall average operations per second per thread (where higher-concurrency runs have more weight):
(Take this summary with a grain of salt -- look at the individual benchmark results for a much
better idea of how the queues measure up to each other):
moodycamel::ConcurrentQueue (including bulk): 23.56M
moodycamel::BlockingConcurrentQueue (including bulk): 24.73M
boost::lockfree::queue: 3.44M
tbb::concurrent_queue: 11.54M
SimpleLockFreeQueue: 5.06M
LockBasedQueue: 3.39M
std::queue (single thread only): 102.40M

總結(jié)

以上是生活随笔為你收集整理的高效C++无锁队列实现-moodycamel::ConcurrentQueue的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

亚洲人成在线电影 | 国产性天天综合网 | 国产97视频 | 亚洲电影一区二区 | 超碰人人在线观看 | 欧美国产精品一区二区 | 美腿丝袜一区二区三区 | 国产无限资源在线观看 | 日韩aⅴ视频 | 91成人在线网站 | 国产视频黄 | 久久男人中文字幕资源站 | 精品999久久久 | 国产99久久久国产精品免费看 | 天天撸夜夜操 | 最新av在线网站 | 国产亚洲午夜高清国产拍精品 | 久久一区二区三区超碰国产精品 | 亚洲精品视频在线观看视频 | 亚洲精品18日本一区app | 免费在线观看不卡av | 亚洲午夜久久久久久久久久久 | 97成人在线免费视频 | 99re国产视频 | 色综合久久88色综合天天人守婷 | 99自拍视频在线观看 | 亚洲欧美视频在线播放 | 激情丁香久久 | 亚州av成人 | 国产精品久久嫩一区二区免费 | 国产精品一区二区电影 | 天天色天天骑天天射 | 婷婷亚洲激情 | 日韩黄色在线电影 | 久久综合在线 | 国产中文字幕在线观看 | 国产高h视频 | 最新午夜 | 人人爽人人澡 | 国产精品岛国久久久久久久久红粉 | 亚洲高清视频在线观看免费 | 91在线永久 | 国精产品一二三线999 | 91精品国产高清 | 免费看一级黄色 | 精品夜夜嗨av一区二区三区 | 亚洲高清激情 | 99久久精品无码一区二区毛片 | 欧美一区二区三区不卡 | 操久在线 | 精品国产一区二区三区四区vr | 国内久久久久久 | 人人干人人干人人干 | 97免费中文视频在线观看 | 国产精品影音先锋 | 五月婷婷在线视频观看 | 中文字幕在线观看免费观看 | 久章草在线 | 密桃av在线 | www.精选视频.com | 超碰国产97 | 中文字幕一区二区三区四区视频 | 亚洲视频精选 | 国产亚洲欧美在线视频 | 黄色特一级 | 国产精品99久久久精品免费观看 | 玖玖精品在线 | 国产伦精品一区二区三区照片91 | 美女视频国产 | 久草资源在线观看 | 中文字幕在线成人 | 久久久久高清毛片一级 | 色综合久久五月天 | 成人97人人超碰人人99 | 亚洲国产中文字幕在线观看 | 亚洲黄色激情小说 | 国产色女人 | 2018好看的中文在线观看 | 欧美日韩视频网站 | 欧美一级特黄高清视频 | 日韩欧美高清在线 | 久草网站在线 | 国产999精品久久久影片官网 | 狠狠五月天 | 九九九九九国产 | 久久久高清一区二区三区 | 一本色道久久综合亚洲二区三区 | 中文av一区二区 | 国产亚洲精品久久19p | 在线国产视频一区 | 91在线视频在线 | 久久国产精品久久w女人spa | 日韩电影一区二区在线 | 亚洲精品福利视频 | 91精品啪在线观看国产81旧版 | 91在线永久 | 97在线视频免费播放 | av免费电影在线观看 | 色综合五月 | 日日夜夜噜| 欧美不卡视频在线 | 亚洲一区视频在线播放 | 在线视频亚洲 | 美女网站黄在线观看 | 成人91av | 免费色视频网址 | 亚洲一区二区精品在线 | 久久久久久综合 | 日本性生活免费看 | 国产在线不卡精品 | 成人av电影免费 | 日日干干夜夜 | 欧美日韩性| 日韩理论片中文字幕 | 色综合天天综合网国产成人网 | 特级西西444www高清大视频 | 99爱视频在线观看 | 美女视频黄是免费的 | 一区二区 精品 | 成人久久18免费网站麻豆 | 欧美日韩免费一区二区 | 天天撸夜夜操 | 六月婷婷网 | 国产精品乱码一区二区视频 | 欧美精品999 | 国产又粗又硬又长又爽的视频 | 欧美日韩aa| 国产不卡视频 | 欧美日韩高清一区二区三区 | 最新成人av | 天天艹 | 国产一区精品在线 | 欧美激情综合五月色丁香小说 | 成人污视频在线观看 | 久久久久人人 | 98涩涩国产露脸精品国产网 | 久久精品视频一 | 欧美伦理一区 | 亚洲一区 影院 | 日本久久成人中文字幕电影 | 久久久久亚洲精品国产 | 全久久久久久久久久久电影 | 天天看天天操 | 国内精品久久久久影院一蜜桃 | 国产视频日韩 | 欧美一级高清片 | 亚洲一区二区观看 | 日本一区二区三区免费看 | 精品在线免费观看 | 天天干天天操天天射 | 97夜夜澡人人双人人人喊 | 欧美一二区视频 | 欧美日韩性视频 | 奇米777777| 一本一本久久a久久精品综合小说 | 国产无限资源在线观看 | 成人试看120秒 | 欧美日本在线视频 | 免费观看91视频 | 美女精品在线观看 | 国产夫妻性生活自拍 | 香蕉在线视频播放网站 | 99精品免费视频 | 欧美少妇xxxxxx | 黄网在线免费观看 | 少妇高潮流白浆在线观看 | 久久久久久伊人 | 色婷婷成人网 | 亚洲国产免费网站 | 成人免费ⅴa | 精品久久一区 | 久久久久久久久久网 | 久久狠狠婷婷 | 国内精品久久影院 | 成人国产电影在线观看 | 国内精品久久久久 | 在线观看国产日韩欧美 | 国产美女精品人人做人人爽 | 日本精品免费看 | 国产中文字幕大全 | 91免费版在线 | 亚洲自拍偷拍色图 | 国产黄色av网站 | av高清在线 | a电影免费看 | bayu135国产精品视频 | 91精彩在线视频 | 99久久999久久久精玫瑰 | 国产精久久久 | 欧美一级性生活片 | 91麻豆操 | 西西www444| 中文字幕一区二区三区视频 | 欧美日韩在线网站 | 久久免费电影网 | 狠狠操狠狠干天天操 | 国产黄色大全 | 国产美腿白丝袜足在线av | 99热都是精品 | 精品国内自产拍在线观看视频 | 99精品国产兔费观看久久99 | 在线视频 区 | 久久精品中文字幕 | 国产啊v在线观看 | 日韩精选在线观看 | 在线免费观看视频你懂的 | 97在线视频免费播放 | 国色天香在线观看 | 麻豆高清免费国产一区 | 91九色在线观看 | 成人免费网站视频 | 99久久这里有精品 | 五月天中文在线 | 视频二区| 99久久99视频只有精品 | 成人h动漫在线看 | 亚洲jizzjizz日本少妇 | 免费在线观看视频a | 久久精品视频观看 | 天天爽天天射 | 婷婷综合伊人 | 国产女人免费看a级丨片 | 91中文在线观看 | 久久精品国产精品亚洲 | 成人黄色片免费看 | 91精品久久久久久久久 | 四虎在线免费 | 一区在线观看 | 国产精品一区二区62 | 999电影免费在线观看2020 | 日韩二区三区在线观看 | 麻豆久久精品 | 亚洲精品白浆高清久久久久久 | 97超碰国产在线 | 亚洲精品在线看 | 综合天天| 亚洲伦理精品 | 国产在线观看h | 亚洲精品美女 | 国产九九九九九 | 久久国产精品久久精品 | 久久成人免费视频 | 亚洲成人av在线电影 | 日韩av在线一区二区 | 99久久久国产精品美女 | 亚洲精品一区二区三区四区高清 | 久久久久久久综合色一本 | 亚洲黄色av | 国产免费午夜 | 国产一二三精品 | 国产精品12 | 伊人黄 | 亚洲三级国产 | 免费一区在线 | 在线观看免费av网 | 国产精品久久久久久高潮 | 国内久久久久 | 国产精品手机在线观看 | 国产精品精品国产婷婷这里av | 成人蜜桃 | 日韩在线免费视频观看 | 欧美激情片在线观看 | 久久艹99| 高清不卡一区二区三区 | 免费色视频网址 | 香蕉视频在线视频 | 免费看的黄色 | 国产精品mv | 日韩av看片 | 日韩在线免费观看视频 | 久久激情小说 | 五月婷婷中文字幕 | 五月天av在线 | 久久国产精品99久久久久久老狼 | 国产一级视频在线免费观看 | 4438全国亚洲精品在线观看视频 | 中文字幕二区 | 精品国产一区二区三区久久影院 | 99欧美精品 | 国产成人一级电影 | 欧美精品二区 | 色婷婷97| 高清av免费看 | 欧美高清视频不卡网 | 欧美一级久久久 | 免费看的黄色的网站 | 亚洲精品成人av在线 | 九热在线| 国产免费观看av | 日韩高清免费在线 | 日韩免费三区 | 五月天综合色 | 国产精品久久久久久吹潮天美传媒 | 中文字幕有码在线观看 | 日韩在线观看视频网站 | 成人免费av电影 | av综合站 | 中文高清av| 特黄特色特刺激视频免费播放 | 久久久国产精品网站 | 国产黄色看片 | 国产精品高潮呻吟久久久久 | 日本久久久久久久久久久 | 久久精品99国产精品亚洲最刺激 | 中文国产在线观看 | 国产精久久久久久久 | 久精品一区 | av福利在线看 | 九九视频这里只有精品 | 狠狠干 狠狠操 | 天天操月月操 | 日韩久久激情 | 日韩精品第1页 | 91亚洲欧美 | 天堂麻豆 | 色婷婷国产精品一区在线观看 | 免费观看成年人视频 | 亚洲精品黄色片 | 精品一区二区在线看 | 九九九热精品免费视频观看网站 | 狠狠狠狠干 | 日韩在线观看精品 | 日韩久久一区二区 | 最近更新中文字幕 | 国产成人三级在线 | 欧美日韩性生活 | 国产精品女同一区二区三区久久夜 | 日韩专区av| 日日夜夜骑 | 国产免费高清 | 亚洲精品视频在线免费 | 中文字幕在线专区 | 免费人成在线观看 | 中文区中文字幕免费看 | 91麻豆精品91久久久久同性 | 日日夜夜草 | 全久久久久久久久久久电影 | 91欧美日韩国产 | 久久国产精品久久精品国产演员表 | 久久久久国 | 一区二区三区免费 | 国产一级淫片在线观看 | 久久天天躁狠狠躁夜夜不卡公司 | 欧洲精品久久久久毛片完整版 | 色综合人人 | 天天射天天射天天 | 成人一级免费电影 | 韩日av在线 | 国产精品99蜜臀久久不卡二区 | 国产一区视频在线播放 | avlulu久久精品 | 91免费版在线| 成人免费视频播放 | 香蕉视频亚洲 | 视频精品一区二区三区 | 中文国产成人精品久久一 | 国产亚洲精品久久久久久移动网络 | 69国产在线观看 | av中文资源在线 | 色九九影院 | 国产精品视频线看 | av888.com| 久草免费在线观看视频 | 狠狠躁夜夜躁人人爽视频 | 91精品国自产拍天天拍 | 九九免费观看全部免费视频 | 久久艹在线 | 日韩专区视频 | 中文字幕乱码一区二区 | 国产亚洲精品久久久久动 | 中文字幕乱在线伦视频中文字幕乱码在线 | 国产成人一区二区啪在线观看 | 久久人人爽人人爽人人 | a级国产乱理论片在线观看 伊人宗合网 | 久久久久久久久久亚洲精品 | 亚洲视频网站在线观看 | 久久综合狠狠综合久久综合88 | 天天操天天是 | 成人黄色大片网站 | 免费久久久久久 | 亚洲国产高清视频 | 日日夜夜亚洲 | 国产激情久久久 | 国产精彩视频一区二区 | av黄在线播放 | 免费日韩一级片 | 日本在线观看一区二区三区 | 亚洲一级黄色片 | 在线国产能看的 | 久久国产精品免费视频 | 在线色资源 | 91视频免费看片 | 在线看日韩 | 久久久精品欧美一区二区免费 | 天天综合天天做 | 五月天色站 | 夜夜夜 | 久久久午夜精品理论片中文字幕 | 五月婷香蕉久色在线看 | 久久永久免费视频 | 中文字幕.av.在线 | 国产精品成人一区 | 欧美粗又大 | 99热国产在线 | 视频在线国产 | 亚洲精品乱码久久久久久写真 | 麻豆视频免费网站 | 黄av在线| 国产无套一区二区三区久久 | 尤物九九久久国产精品的分类 | 国产亚洲精品久久久久动 | 国产九九精品视频 | 欧美色综合天天久久综合精品 | 国产精品一区二区免费视频 | 成人国产精品久久久 | 精品久久网 | 波多野结衣在线播放一区 | a在线播放 | 亚洲午夜久久久久久久久电影网 | 午夜色场| 欧美日韩成人一区 | 啪啪av在线| 亚洲电影一区二区 | 人人爽夜夜爽 | 欧美精品久久久久久久免费 | 亚洲成人精品影院 | 亚洲va男人天堂 | 视频在线观看入口黄最新永久免费国产 | 国产视频在线播放 | 中日韩欧美精彩视频 | 日韩一区二区三区在线观看 | 亚洲精品456在线播放 | 97色资源 | 欧美精品免费视频 | 免费看污片 | 国产中文字幕在线播放 | 国产成人高清在线 | 日韩电影中文字幕 | 久久久久五月天 | 久久99亚洲精品 | 区一区二区三区中文字幕 | 91桃花视频 | 国产一级特黄毛片在线毛片 | 亚洲免费一级 | 伊人激情网 | 九九有精品 | 欧美色精品天天在线观看视频 | 欧美成人免费在线 | 韩国av一区二区三区 | 99精品国产一区二区三区不卡 | 精品国产亚洲日本 | 免费一级日韩欧美性大片 | 精品女同一区二区三区在线观看 | 91精品在线视频观看 | 亚洲成成品网站 | 99精品热视频只有精品10 | 婷婷国产精品 | 日本精品二区 | 免费在线视频一区二区 | 国产日韩精品一区二区在线观看播放 | 91av电影网| 亚洲香蕉在线观看 | 91综合色 | 国产精品亚洲综合久久 | 亚洲国产精品电影 | 日产乱码一二三区别免费 | 久草在线视频看看 | 国产精品mm | 四虎在线免费观看 | 免费看成人片 | 四虎国产视频 | 亚洲精品国产片 | 色狠狠久久av五月综合 | 国产资源网站 | 国产精品99在线观看 | 国产欧美高清 | 涩涩网站在线观看 | 亚洲国产精品资源 | 日本精品久久久久中文字幕 | 四虎在线观看网址 | 黄色看片 | 黄色一级在线观看 | 成人黄色av免费在线观看 | 色五月色开心色婷婷色丁香 | 91伊人久久大香线蕉蜜芽人口 | 精品国产视频在线 | 色综合 久久精品 | 国产成人资源 | 久久久久久久久久久久久影院 | 99视频免费观看 | 91chinesexxx | 免费日韩电影 | 奇米7777狠狠狠琪琪视频 | 国产精品一区二区三区观看 | 97色噜噜 | 欧美亚洲精品在线观看 | 久久国产精品精品国产色婷婷 | 在线播放第一页 | 久久久久久久久精 | 99视频导航 | 亚洲精品国 | 久久综合狠狠综合久久综合88 | 欧美一区二区三区免费观看 | 349k.cc看片app | 缴情综合网五月天 | 麻豆系列在线观看 | 婷婷网五月天 | 久久精精品 | 亚洲人人av | 中文字幕第一页在线 | 久久人人97超碰com | 在线天堂v | 国产精品黄色 | 高潮久久久久久久久 | 国产麻豆精品一区二区 | 成人午夜影院 | 99精品久久只有精品 | 奇米影视8888在线观看大全免费 | av成人亚洲 | 国产69久久 | 狠狠插天天干 | 国产精品1024| 亚洲成人免费在线观看 | 欧美一级欧美一级 | 欧美日韩国产精品一区二区 | 亚洲高清在线观看视频 | 99久久99热这里只有精品 | 超碰97人人射妻 | 69视频网站 | 中文字幕在线免费看线人 | 日韩一区二区免费视频 | 欧美老女人xx | 亚洲一区二区三区精品在线观看 | 欧美一区二区精品在线 | 日本久久久影视 | 欧美日韩国产一区二区三区 | 精品在线观看一区二区 | 特级毛片爽www免费版 | 日韩精品欧美视频 | 女人18精品一区二区三区 | 久久人人爽| 深爱激情五月婷婷 | 久久久久久久久爱 | 亚洲精品欧美专区 | 国产麻豆成人传媒免费观看 | 免费成人结看片 | 成人电影毛片 | 激情伊人五月天久久综合 | 久久久久综合视频 | 国产一区二区三区网站 | 亚洲永久精品在线观看 | 97精品在线观看 | 久久情爱 | 国产高清不卡一区二区三区 | 中文字幕一区二区三区在线播放 | 日韩激情三级 | 精品 激情| 中文一区在线 | 国产专区一| 婷婷色中文 | 亚洲精品乱码久久久久久久久久 | 91pony九色丨交换 | 人人爽人人爽人人爽人人爽 | 不卡av在线免费观看 | 精品国产成人在线影院 | 亚洲成人精品久久久 | 婷婷丁香久久五月婷婷 | 天天操比 | 亚洲免费视频观看 | 视频在线精品 | 欧美在线观看视频 | 色播亚洲婷婷 | 精品久久久国产 | 国产精品欧美一区二区 | 毛片网在线 | 欧美日韩xx| 成年人黄色大片在线 | 欧美国产一区在线 | 国产成人一区三区 | 伊人网av | 黄色av在 | 免费人人干 | 福利av影院| a亚洲视频| 黄色亚洲在线 | 久久综合狠狠综合久久狠狠色综合 | 麻豆91网站 | 黄色大全视频 | 四虎在线免费观看视频 | 九九九热精品免费视频观看 | 在线精品视频在线观看高清 | 91视频在线免费看 | 麻豆视频在线看 | 色综合久久精品 | 91精品免费看 | 国产理伦在线 | 亚州视频在线 | 91大片成人网| 麻豆视频在线播放 | 狠狠色丁婷婷日日 | 天天看天天干天天操 | 77国产精品 | 黄色一级影院 | 高清av中文在线字幕观看1 | 国产精品色 | 久久艹欧美 | 成人在线网站观看 | 日本在线观看一区二区三区 | 久久精品爱视频 | 久久久99精品免费观看app | 在线观看中文字幕 | 国产精品免费麻豆入口 | 手机看片福利 | 久久看片 | 国产精品大全 | 九七视频在线观看 | 91激情视频在线观看 | 亚洲国产欧洲综合997久久, | 国产在线精品一区二区 | 国产糖心vlog在线观看 | 国产精品少妇 | 亚洲国产一区二区精品专区 | 欧美亚洲免费在线一区 | 91漂亮少妇露脸在线播放 | 人人射人人澡 | 中文字幕 二区 | 午夜美女福利直播 | 91av观看| 久久久人人人 | 69久久久| 国产色婷婷在线 | 久久精品理论 | 亚洲精品久久激情国产片 | 婷婷色影院 | 99在线精品视频观看 | 偷拍福利视频一区二区三区 | 国产做爰视频 | 亚洲黄色一级视频 | 菠萝菠萝蜜在线播放 | 欧美国产日韩一区二区三区 | 亚洲精品视频免费观看 | 男女免费视频观看 | www.eeuss影院av撸| 久久伊99综合婷婷久久伊 | 久久人网 | 精品国产中文字幕 | 在线91视频 | 亚洲韩国一区二区三区 | 五月天中文字幕mv在线 | 亚洲伊人成综合网 | 91麻豆精品国产91 | 在线看毛片网站 | 国产一区二区在线观看免费 | 国产视频精品免费 | 天天色天天骑天天射 | 国产精品刺激对白麻豆99 | 亚洲午夜精品在线观看 | 天天色天天上天天操 | 在线免费观看视频你懂的 | 日韩欧美高清在线 | 日日夜夜免费精品视频 | 国产精品一区二区吃奶在线观看 | 国产伦精品一区二区三区无广告 | 一区二区三区www | 久久综合导航 | 国产亚洲欧美在线视频 | 欧美另类69 | 久久99久久久久久 | 国产资源精品在线观看 | 500部大龄熟乱视频使用方法 | 黄色大片免费播放 | 欧美日韩在线观看一区二区三区 | 9999在线视频 | 一级片在线| 九九免费在线观看 | 日韩av网站在线播放 | av国产网站 | 国产成人精品国内自产拍免费看 | 久久婷婷国产色一区二区三区 | 中文字幕色播 | 久久综合久久综合久久综合 | 成人在线免费观看网站 | 天天操天天弄 | 久草综合在线 | 九九视频这里只有精品 | 西西44人体做爰大胆视频 | 九九九九热精品免费视频点播观看 | 国产精品国产三级国产专区53 | 国产伦理精品一区二区 | 久久伊人精品一区二区三区 | 日韩精品五月天 | 人人讲| 日韩欧美电影在线观看 | 日本在线观看中文字幕 | 夜夜看av | a在线免费观看视频 | 美女精品久久久 | 91九色视频国产 | 日本久久高清视频 | 亚洲激情五月 | 天堂视频中文在线 | 最近2019中文免费高清视频观看www99 | 国产日韩精品久久 | 五月婷婷综合在线观看 | 99视频一区 | 五月婷婷激情综合网 | 一级片在线 | 日韩成人邪恶影片 | 日韩在线网址 | 国产第一福利 | 国产xxxx做受性欧美88 | 日韩av在线一区二区 | 婷婷久久丁香 | 2021国产精品视频 | 久久看片 | 欧美怡红院视频 | 国产综合激情 | 亚洲精品久久久久久中文传媒 | 免费看国产视频 | 国产精品黄色影片导航在线观看 | 久久成年人网站 | 精品国精品自拍自在线 | 97色综合| 欧美极品xxxxx | 欧美精品免费在线观看 | 在线观看国产www | 玖草影院| 日韩在线免费看 | 久久久国内精品 | 欧美性生活小视频 | 91精品国产麻豆国产自产影视 | 国产中文字幕视频在线观看 | 欧美激情综合色 | 91片在线观看 | 久久这里只有精品首页 | 一区二区视频电影在线观看 | 久久激情综合网 | 天天看天天干 | 久久久久久国产精品久久 | 在线看一区二区 | 日韩在线观看中文 | 国产精品久久久毛片 | 免费的国产精品 | 成人免费网站视频 | 久久人人爽人人片av | 五月婷婷开心中文字幕 | 久久er99热精品一区二区三区 | 婷五月激情 | www.com黄| 99久高清在线观看视频99精品热在线观看视频 | 色99视频 | 伊人影院99 | 五月婷婷另类国产 | 99精品国产99久久久久久福利 | 99爱精品在线 | 久久精品视频在线免费观看 | 亚洲区另类春色综合小说校园片 | 一区二区三区四区不卡 | 91麻豆精品国产91久久久无需广告 | 欧美一二区视频 | 国产免码va在线观看免费 | 婷五月天激情 | 国产精品久久久久久久久久三级 | 国语久久 | 色激情五月 | 亚洲国产精品第一区二区 | 激情欧美在线观看 | 一级黄色片在线播放 | 精品av在线播放 | 日日天天 | 久久一级电影 | 青青河边草免费观看完整版高清 | 欧美日韩三级在线观看 | 在线观看中文av | 欧美日韩高清在线 | 中文字幕高清 | 国产精品毛片一区视频播不卡 | 国产一区二区在线观看视频 | 在线观看精品一区 | 97人人模人人爽人人喊中文字 | 色噜噜日韩精品一区二区三区视频 | 国产精品 美女 | 91福利视频网站 | 天天做天天爱天天爽综合网 | 免费av网站在线看 | 深爱五月激情五月 | 成人高清在线观看 | 国产精品剧情在线亚洲 | 国产香蕉视频在线播放 | h视频在线看 | 日p视频在线观看 | 国产美腿白丝袜足在线av | 久久精品美女 | 婷婷丁香久久五月婷婷 | 91精品国产自产在线观看 | 久久精品91久久久久久再现 | 亚洲精品国内 | 蜜桃av观看 | 热久在线 | 免费在线观看视频一区 | 亚洲精品短视频 | 色综合天天色综合 | 午夜精品久久久久久久99热影院 | 五月激情视频 | 成人久久精品视频 | 亚洲乱码在线观看 | 免费一级片观看 | 黄网站免费久久 | 97热久久免费频精品99 | 日韩精品一区二区免费视频 | 色香网 | 国产一区二区在线免费视频 | 丁香九月激情综合 | 欧美在线观看视频 | av中文字幕在线播放 | 91中文字幕网 | 久久成人国产精品入口 | 欧美性生活免费 | 中文字幕日本在线观看 | www.久艹 | 国产精品ssss在线亚洲 | 国产一级一级国产 | 久久优 | 91精品国产三级a在线观看 | 成人免费观看视频网站 | 999久久久久久久久6666 | 日韩一级成人av | 国产打女人屁股调教97 | 精品99999 | 日韩免费区| 婷婷色影院| 亚洲精品五月天 | 久久免费高清 | 久久精品二区 | 国产成人综合图片 | 久久性生活片 | 8x成人免费视频 | 91传媒视频在线观看 | 九九国产视频 | 亚洲精品高清视频 | 国产精品99久久久久人中文网介绍 | 欧美极品少妇xbxb性爽爽视频 | 黄色视屏在线免费观看 | 日韩精品极品视频 | 亚洲成av人电影 | 99久久精品免费看国产 | 国产91学生粉嫩喷水 | 日韩国产精品一区 | 国产精品久久久久久久久久久免费 | 成人99免费视频 | 久久久久久久99 | 黄色小网站在线 | 丁香六月综合网 | 久99久在线 | 亚洲精品视频在线观看视频 | 日韩欧美视频在线观看免费 | 色婷婷电影 | 在线观看中文字幕一区 | 高清免费在线视频 | www天天操| 91精品国产91热久久久做人人 | 亚洲黄网址 | 在线观看91精品国产网站 | 久久av高清 | 免费碰碰 | 成年人免费看片 | 操操操天天操 | 国产美女精品视频免费观看 | 91亚洲精品在线 | 日韩在线免费不卡 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 久久国产精品99久久人人澡 | 成年人app网址 | 麻豆视频免费入口 | 黄网站污| 国产a级精品 | 天天综合91 | 夜夜操天天摸 | av888av.com| 日韩在线免费电影 | 天天操夜夜逼 | 国产精品麻豆视频 | 中文区中文字幕免费看 | 欧美精品一二 | av网址aaa | 国产成人精品一区二区三区在线 | 亚洲电影久久 | 国产字幕在线播放 | 国产综合精品久久 | 中文字幕在线视频精品 | 99精品在线观看 | 视频在线在亚洲 | 久久草精品| 国产视频欧美视频 | 视频一区二区精品 | 亚洲成免费 | www.国产毛片| 日本久久免费视频 | 久久久激情网 | 婷婷激情综合 | 欧美日韩在线观看视频 | 日韩免费一级a毛片在线播放一级 | 国产二区av | 精品久久久免费视频 | 欧美巨乳网 | 99热这里有精品 | av福利在线导航 | 狠狠操综合网 | 国产一级电影在线 | 日韩免费在线观看视频 | 亚洲精品日韩一区二区电影 | 天天射天天色天天干 | 亚洲日韩精品欧美一区二区 | 国产精品久久久久久久午夜片 | 欧美在线free | 天天天天天天干 | 国产成人99久久亚洲综合精品 | 精品亚洲视频在线 | 成人手机在线视频 | 成人久久免费视频 | 一区中文字幕 | 免费亚洲成人 | 国产福利在线不卡 | 色婷丁香| 亚洲国产精品成人精品 | 亚洲在线黄色 | 久草免费在线观看视频 | 中文字幕亚洲精品日韩 | 亚洲一级性 | 国产另类av | 久久香蕉国产 | 在线观看的a站 | 久久黄色小说 | 国产日韩精品一区二区三区在线 | 色五月成人 | www.99av| 国产精品福利在线播放 | 青青射| 黄色免费在线视频 | 久久麻豆视频 | 日本三级不卡 | 丁香影院在线 | 久久9999久久免费精品国产 | 亚州国产视频 | 天堂av免费观看 | 日韩二区在线观看 | 国产精品久久久久久一二三四五 | 欧美日韩一区二区视频在线观看 | 日韩精品免费在线播放 | 亚洲小视频在线 | 免费a视频在线 | 久久精品综合一区 | 国产中文视频 | 四虎视频| 国产精品igao视频网网址 | 摸bbb搡bbb搡bbbb| 国产原创中文在线 | 99产精品成人啪免费网站 | 国内精品久久久久久久久久久 | 欧美亚洲精品一区 | 国内小视频在线观看 | 欧美精品一区二区在线观看 | 欧美色图p | 91亚洲激情| 国产系列精品av | 国产日产精品一区二区三区四区 | 国产资源在线观看 | 黄色aaa级片 | 在线精品观看国产 | 欧美日韩一二三四区 | 久久综合桃花 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 友田真希x88av | 深爱婷婷久久综合 | 黄色av三级在线 | 免费在线观看av电影 | 激情婷婷六月 | 天天操操操操操 | 天天综合久久 | 日韩精品欧美专区 | 免费色黄 | 亚洲做受高潮欧美裸体 | 成人av影视在线 | 久久66热这里只有精品 | 亚洲一区二区精品在线 | 亚洲少妇xxxx | 精品人妖videos欧美人妖 | 日韩超碰 | 99视频精品| 国产精品地址 | 久操视频在线 | 亚洲国产激情 | 精品一区二区三区在线播放 | 亚洲爱爱视频 | 日韩av图片 | 手机看国产毛片 | 精品在线二区 | 日韩素人在线观看 |