Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all 5930 articles
Browse latest View live

Android Composite(Dialog)详解

$
0
0
目录:
    1.Dialog概述
    2.Dialog中的重要角色
    3.常见几种类型的Dialog简单使用
        3.1 提示型Dialog实现
        3.2 List型Dialog实现
        3.3 单选型Dialog实现
        3.4 多选型Dialog实现
        3.5 自定义Dialog
    
1.Dialog概述
    Dialog就是一个对用户操作进行反馈的弹框,通常在弹框中进行一些简单的提示或者简单选择。
    
2.Dialog中的重要角色
    2.1 AlertDialog类:
        AlertDialog即我们使用的窗口类,可以通过AlertDialog类的相关方法设置Dialog的属性以及显示,通常我们通过他的内部
    类Builder来构建他的实例,主要原因在于它的构造方法都是受保护的。
       
    2.2 AlertDialog.Builder类:
        AlertDialog.Builder即AlertDialog内的类,通过它来实例化Dialog,同时也可以通过他来设置AlertDialog的属性资源和
    Dialog的显示
    
3.常见几种类型的Dialog简单使用
    3.1 MainActivity.java
package com.example.dialog;

import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button simpleButton,listButton,singleButton,multiButton,customButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化控件
        simpleButton = (Button) findViewById(R.id.info_dg);
        listButton = (Button) findViewById(R.id.list_dg);
        singleButton = (Button) findViewById(R.id.single_dg);
        multiButton = (Button) findViewById(R.id.multi_dg);
        customButton = (Button) findViewById(R.id.custom_dg);
        //设置监听器
        simpleButton.setOnClickListener(this);
        listButton.setOnClickListener(this);
        singleButton.setOnClickListener(this);
        multiButton.setOnClickListener(this);
        customButton.setOnClickListener(this);

    }
    /*
* 弹出单选型的弹框
* */
    public void showMultiDialog(){
        //声明并初始化数据
        final CharSequence[] items = {"篮球","足球","游泳","唱歌"};
        final StringBuilder checkedStr = new StringBuilder();

        //声明并初始化AlertDialog.Builder
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //设置AlertDialog标题
        builder.setTitle("多选弹框标题");
        //设置图标
        builder.setIcon(R.drawable.a12);
        //设置数据
        builder.setMultiChoiceItems(items, null, new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                if (isChecked){
                    checkedStr.append(items[which].toString());
                }
            }
        });
        builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this,checkedStr,Toast.LENGTH_SHORT).show();
            }
        });
        //展示弹框
        builder.show();
    }
    /*
* 弹出单选型的弹框
* */
    public void showSingleDialog(){
        //声明并初始化数据
        final CharSequence[] items = {"男","女","不男不女"};

        //声明并初始化AlertDialog.Builder
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //设置AlertDialog标题
        builder.setTitle("单选弹框标题");
        //设置图标
        builder.setIcon(R.drawable.a12);
        //设置数据
        builder.setSingleChoiceItems(items,1, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                String selectItem = items[which].toString();
                Toast.makeText(MainActivity.this,selectItem,Toast.LENGTH_SHORT).show();

            }
        });
        builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this,"确认",Toast.LENGTH_SHORT).show();
            }
        });
        //展示弹框
        builder.show();
    }
    /*
    * 弹出list型的弹框
    * */
    public void showListDialog(){
        //声明并初始化数据
        final CharSequence[] items = new CharSequence[5];
        for (int i =0;i<5;i++){
            items[i] ="数据"+i;
        }
        //声明并初始化AlertDialog.Builder
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //设置AlertDialog标题
        builder.setTitle("List型弹框标题");
        //设置图标
        builder.setIcon(R.drawable.a12);
        //设置数据并实现点击监听
        builder.setItems(items, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //获取选中项文本
                String selectItem = items[which].toString();
                Toast.makeText(MainActivity.this,selectItem,Toast.LENGTH_SHORT).show();
            }
        });
        builder.show();
    }
    /*
    * 弹出简单的弹框
    * */
    public void showSimpleDialog(){
        //声明并初始化AlertDialog.Builder
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //设置AlertDialog标题
        builder.setTitle("普通弹框标题");
        //设置图标
        builder.setIcon(R.drawable.a12);
        //设置提示信息
        builder.setMessage("普通弹框提示信息...");

        //设置确认按钮
        builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this,"确认",Toast.LENGTH_SHORT).show();
            }
        });
        //设置普通按钮
        builder.setNeutralButton("快点我", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this,"我就知道你要点我",Toast.LENGTH_SHORT).show();
            }
        });
        //设置取消按钮
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this,"取消",Toast.LENGTH_SHORT).show();
            }
        });
        builder.show();
    }
    /*
    * 弹出自定义的弹框
    * */
    public void showCustomDialog(){
        final EditText userName,passWord;

        //声明并初始化布局加载器
        //LayoutInflater Inflater =getLayoutInflater();
        LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
        //加载自定义布局
        View view = inflater.inflate(R.layout.custom_dialog,null);
        //初始化布局控件
        userName = (EditText) view.findViewById(R.id.username_et);
        passWord = (EditText) view.findViewById(R.id.pas_et);
        //声明并初始化AlertDialog.Builder
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //设置布局
        builder.setView(view);
        //设置登录按钮
        builder.setPositiveButton("登陆", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                String nameStr = userName.getText().toString();
                String passStr = passWord.getText().toString();
                Toast.makeText(MainActivity.this,"用户名:"+nameStr+",密码:"+passStr,Toast.LENGTH_SHORT).show();
            }
        });
        //设置取消按钮
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this,"取消登录",Toast.LENGTH_SHORT).show();
            }
        });
        builder.show();

    }
    /*
    * 继承实现监听响应
    * */
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.info_dg:
                showSimpleDialog();
                break;
            case R.id.list_dg:
                showListDialog();
                break;
            case R.id.single_dg:
                showSingleDialog();
                break;
            case R.id.multi_dg:
                showMultiDialog();
                break;
            case R.id.custom_dg:
                showCustomDialog();
                break;
        }
    }
} 


      
    3.2 主布局activity_main.xml
    
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.dialog.MainActivity">


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="提示型Dialog"
        android:id="@+id/info_dg"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="List型Dialog"
        android:id="@+id/list_dg"
        android:layout_alignTop="@+id/info_dg"
        android:layout_toRightOf="@+id/info_dg"
        android:layout_toEndOf="@+id/info_dg" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="单选型Dialog"
        android:id="@+id/single_dg"
        android:layout_alignTop="@+id/list_dg"
        android:layout_toRightOf="@+id/list_dg"
        android:layout_toEndOf="@+id/list_dg" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="多选型Dialog"
        android:id="@+id/multi_dg"
        android:layout_below="@+id/info_dg"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="自定义Dialog"
        android:id="@+id/custom_dg"
        android:layout_alignTop="@+id/multi_dg"
        android:layout_toRightOf="@+id/multi_dg"
        android:layout_toEndOf="@+id/multi_dg" />
</RelativeLayout>    

  
    3.3 自定义布局custom_dialog.xml
 
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="16dp"
    android:background="@color/colorAccent"
    android:weightSum="1">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="登陆"
        android:id="@+id/title_login"
        android:layout_gravity="center_horizontal"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

    <RelativeLayout
        android:layout_marginTop="10dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/title_login"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="用户名:"
            android:id="@+id/username"
            android:layout_alignBaseline="@+id/username_et"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />

        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="textPersonName"
            android:hint="请输入用户名"
            android:ems="10"
            android:id="@+id/username_et"
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@+id/username"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true" />

        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="textPassword"
            android:ems="10"
            android:id="@+id/pas_et"
            android:hint="请输入密码"
            android:layout_below="@+id/username_et"
            android:layout_alignLeft="@+id/username_et"
            android:layout_alignStart="@+id/username_et"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="密码:"
            android:id="@+id/password"
            android:layout_alignBaseline="@+id/pas_et"
            android:layout_alignTop="@+id/pas_et"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />
    </RelativeLayout>

</RelativeLayout>

   
      
    3.4 效果截图(依次为:简单dialog,List型Dialog实现,单选型Dialog,多选型Dialog,自定义Dialog)
       

    

    
    推荐文章:
            http://blog.csdn.net/wangkeke1860/article/details/46497307
            http://blog.csdn.net/wangkeke1860/article/details/46488285
作者:qq_28057577 发表于2016/9/2 22:34:12 原文链接
阅读:55 评论:0 查看评论

android中签名、证书、公钥密钥的概念及使用

$
0
0

资料来源于Android 官方文档:

https://developer.android.com/studio/publish/app-signing.html

还有些资料来源于网络。加以整理!

公钥和私钥的概念

在现代密码体制中加密和解密是采用不同的密钥(公开密钥),也就是公开密钥算法(也叫非对称算法、双钥算法)”,每个通信方均需要两个密钥,即公钥和私钥,这两把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由个人自己持有,并且必须妥善保管和注意保密。

证书的概念

数字证书则是由证书认证机构(CA)对证书申请者真实身份验证之后,用CA的根证书对申请人的一些基本信息以及申请人的公钥进行签名(相当于加盖发证书机 构的公章)后形成的一个数字文件。CA完成签发证书后,会将证书发布在CA的证书库(目录服务器)中,任何人都可以查询和下载,因此数字证书和公钥一样是公开的。实际上,数字证书就是经过CA认证过的公钥。

原则:

1、一个公钥对应一个私钥。

2、密钥对中,让大家都知道的是公钥,不告诉大家,只有自己知道的,是私钥。

3、如果用其中一个密钥加密数据,则只有对应的那个密钥才可以解密。

4、如果用其中一个密钥可以进行解密数据,则该数据必然是对应的那个密钥进行的加密。

5、非对称密钥密码的主要应用就是公钥加密和公钥认证,而公钥加密的过程和公钥认证的过程是不一样的

基于公开密钥的加密过程

比如有两个用户Alice和Bob,Alice想把一段明文通过双钥加密的技术发送给Bob,Bob有一对公钥和私钥,那么加密解密的过程如下:

1、Bob将他的公开密钥传送给Alice。

2、Alice用Bob的公开密钥加密她的消息,然后传送给Bob。

3、Bob用他的私人密钥解密Alice的消息。

Android中的签名:

是什么签名?

Android要求所有已安装的应用程序都使用数字证书做数字签名,数字证书的私钥由应用开发者持有,

Android使用证书作为标示应用程序作者的一种方式,并在应用程序之间建立信任的关系。证书并不用来控制用户能否安装哪个应用。证书不需要由证书认证中心签名;完全可以使用自制签名证书。

没有正确签名的应用,Android系统不会安装或运行。此规则适用于在任何地方运行的Android系统,不管是在模拟器还是真实设备上。因为这个原因。在真机或模拟器上运行或者调试应用前,必须为其设置好签名。

为什么要有签名?

开发Android的人这么多,完全有可能把类名,包名命名成同样的名字,这个时候该如何区分?所以,这时候就需要签名来区分了,由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,签名可以保证相当名字,但是签名不同的包不被替换。

发布过Android应用的朋友们应该都知道,Android APK的发布是需要签名的。签名机制在Android应用和框架中有着十分重要的作用。例如,Android系统禁止更新安装签名不一致的APK;如果应用需要使用system权限,必须保证APK签名与Framework签名一致。

签名策略

应用程序签名的一些方面可能会影响应用程序的开发过程, 尤其是当你计划发布多个应用时. 通常情况下, 对于所有开发者而言,推荐的策略是:在应用程序的整个生命周期,所有的应用程序使用相同的证书签名.

为什么这么做的原因:

  • 应用程序升级 – 当发布应用的更新时, 如果想让用户无缝地升级到新版本, 需要继续使用相同的某个或者某一套证书来签名更新包.当系统安装应用的更新时, 它会比较现有版本和新版本的证书. 如果证书吻合, 包括证书数据和顺序都吻合, 那么系统允许更新.如果新版本所做的签名不是匹配的, 那么将需要给应用起一个不同的包名 — 在这种情况下, 用户相当于安装了一个完全的新程序.
  • 应用程序模块化 – Android允许由相同证书签名的应用程序运行在相同的进程中, 此时系统会将它们作为单个应用程序对待.在这种方式中, 可以按模块化的方式部署应用, 用户可以根据需要独立地更新每一个模块.
  • 代码/数据 的授权共享 – Android 提供模式匹配的权限控制机制,因此一个应用可以暴露功能给另一个用指定证书签名的应用. 通过用相同证书签名多个应用,以及使用模式匹配的权限检查,应用程序可以以安全的方式共享代码和数据.

另一个影响签名策略的重要考量是, 如何设置签名应用的key的有效期.

  • 如果计划为某个单独的应用程序提供更新支持, 那么应该确认key的有效期要比应用的寿命长. 推荐25年或者更长的有效期.当key的有效期过期, 用户将再也不能无缝地更新到应用程序的新版本.
  • 如果要使用相同的key为多个不同的应用签名, 应当确认key的有效期比所有这些应用的所有版本的生命周期还长,包括要比将来加到这个套件中的额外的关联应用的生命周期更长.
  • 如果计划将应用程序发布到Android Market, 为应用签名的key的有效期必须在2033年10月22日以后.Market服务器强制执行这个规则, 来保证当新版本可用时, 用户可以无缝地更新Market应用.

当设计的时候, 须牢记这些要点, 以确保使用合适的证书来签名应用程序。

Debug模式下的签名

运行或从IDE调试项目时,Android的Studio会自动由Android SDK工具生成的调试证书签名的APK。您运行或调试Android Studio中的项目第一次,IDE会自动在调试密钥库和证书 $HOME/.android/debug.keystore,并设置密钥库和密钥的密码。

因为Debug模式下的证书由构建工具创建,这样是不安全的,大部分应用程序商店(包括谷歌Play商店)不会接受的APK有出版调试证书签名。

所以你不用每次调试时都输入的Android Studio自动存储在签约配置调试签约信息。签名的配置是由所有必要的信息,以签署APK,包括密钥存储位置,存储密码,密钥名称,密钥密码的对象。您不能直接编辑调试签约配置,但可以配置你如何签上你的发布版本。

有关如何构建和调试运行的应用程序,看到更多的信息, 生成并运行您的应用程序。

调试证书到期

用来签署APK调试的自签名证书有365天,从它的创建日期的截止日期。证书过期后,你在构建的时候会报错的。

为了解决这个问题,只需删除该debug.keystore文件。该文件存储在以下位置:

~/.android/ 在OS X和Linux
C:\Documents and Settings\<user>\.android\ 在Windows XP上
C:\Users\<user>\.android\ 在Windows Vista和Windows 7,8,和10

接下来,你构建和运行调试版本的时候,构建工具将重新生成一个新的秘钥库和Debug key,请注意!你必须运行你的程序,不然就不会重新生成秘钥库和Debug key。

发布版的签名

你可以使用AndroidStudio 来手动生成签名的apk,但是这样每次发布不同的版本的时候就都手动生成一次,比较麻烦的,所以,我们还可以配置Gradle文件,在构建的过程中会自动签名。

在AndroidStudio中要手动生成签名的apk,按照以下步骤:

  1. 在菜单栏中,Build > Generate Signed APK 
  2. 选择您想从下拉释放下来,然后单击模块 下一步。
  3. 如果你已经有一个密钥库,请转到步骤5.如果你想创建一个新的密钥库,单击 新建。
  4. 在新的密钥库窗口,为您提供密钥库和密钥以下信息,如图1所示。 
    图1。创建Android Studio中一个新的密钥库。

Keystore

  • Key store path::选择您的密钥存储应该创建的位置。
  • Password:创建并确认您的密钥库安全的密码。

Key

  • Alias:你的Enter键的标识名称。
  • Password: 创建并确认你的密钥的安全密码。这应该是从你选择你的密钥库的密码不同
  • Validity (years):设置的时间长度在几年,你的key将是有效的。你的key应该是有效期至少为25年来,这样你就可以通过你的应用程序的寿命相同的密钥签名的应用程序更新。
  • Certificate:输入有关自己的一些信息,为您的证书。这个信息是不是在你的应用程序中显示,但是属于apk的一部分。 
    填完上面信息,然后单击确定。

在生成签名APK窗口中,选择一个密钥库,私钥,并输入密码两种。(如果在上一步中创建您的密钥库,这些字段已经为您填充。)然后单击 下一步。

图2。选择Android Studio中的私钥。

在下一个窗口中,选择签署的apk的输出目录,和签名的环境,然后单击 Finish(完成)。

图3。生成所选Flavors的APK。

该过程完成后,你会发现在你上面选择的目标文件夹已经有签名的APK。您现在可以通过一个应用市场,如谷歌Play商店,或使用你选择的机制分发签署的APK。

配置build.gradle文件自动签名你的apk

在Android Studio中,你可以通过build.gradle 配置来构建你的项目,在构建的过程中会自动生成你的apk。步骤如下:

  1. 在当前你的项目,右键点击你的程序,然后打开Projec Structure,
  2. 再打开的窗口中,在模块的左侧面板中选择你想签署的Module。
  3. 选择你的密码存储文件,然后输入相关的信息;如图: 
    图4。用于创建新签名构造的窗口。
  4. 点击Ok。
  5. 然后在build types配置中 选择刚刚签名的配置。如图: 

最后点击ok。

然后AndroidStudio 自动构建编译,成功后可以在build/outputs/apk/为您构建模块项目目录内的文件夹中找到我们输出的apk。

签名注意事项

你应该签名所有的APK与整个应用程序的寿命预期相同的证书。有几个原因,你应该这样做:

  • 应用程序升级:当系统安装更新到一个应用程序,它在新版本中与那些在现有版本的证书(S)比较。该系统允许更新,如果证书相匹配。如果你用不同的证书签名的新版本,你必须在不同的包名称分配给应用程序,在这种情况下,用户安装新版本作为一个全新的应用程序。
  • 应用模块:如果是app,Android 允许同一证书签名在同一个进程中运行的APK,因此,系统会将其视为一个单一的应用程序。通过这种方式,你可以部署模块你的应用程序。
  • 代码/数据,通过共享的权限:Android提供了基于签名的权限执行,这样应用程序可以公开的功能到与指定的证书签名的另一个应用程序。通过签署多个APK使用相同的证书,并使用基于签名的权限检查,您的应用程序可以在一个安全的方式共享代码和数据。

保护您的私钥

保护你的私钥的安全性是至关重要的,无论是你还是用户,如果允许别人使用你的秘钥,或者你泄露你的秘钥文件,使得第三方找到他们并使用它们,那么你的app安全性将会受到损失~

作为一个开发者,在任何时候,都要保护好你的私钥,直到密钥已过期。以下是一些技巧让你的密钥的安全:

  • 选择不容易破解的密码,和keystore;
  • 不要给外人你的私钥和keystore文件;
  • 把他们放置在一个安全的地方。

删除签名信息

当你创建一个签名的配置的时候,Android的Studio将在纯文本模块的您的签名信息build.gradle的文件。如果你是一个团队或用你的代码工作,你应该让它变成一个不容易给别人访问的移动的文件。要做到这一点,你应该创建一个单独的属性文件来存储安全的信息,

创建一个文件名 ​​为keystore.properties在项目的根目录。这个文件应该包含您的签名信息,如下所示:

storePassword = myStorePassword 
keyPassword = mykeyPassword 
keyAlias ​​= myKeyAlias 
​​storeFile = myStoreFileLocation

在你的模块的build.gradle文件中,添加的代码加载你keystore.properties的文件之前android 块。

...

// Create a variable called keystorePropertiesFile, and initialize it to your
// keystore.properties file, in the rootProject folder.
def keystorePropertiesFile = rootProject.file("keystore.properties")

// Initialize a new Properties() object called keystoreProperties.
def keystoreProperties = new Properties()

// Load your keystore.properties file into the keystoreProperties object.
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

android {
    ...
}

你可以使用语法,来引用存储的签名信息:

android {
    signingConfigs {
        config {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
        }
    }
    ...
  }

使用工具签名

如果你不用AndroidStudio来签名你的apk,你还可以使用Android SDK 和 JDK 自带的工具,步骤如下:

  1. 使用keytool 生成私钥,例如:
$ keytool -genkey -v -keystore my-release-key.keystore
-alias alias_name -keyalg RSA -keysize 2048 -validity 10000

提示您输入密钥库和密钥的密码,并为你的key设置别名。然后生成密钥库作为一个名为my-release-key.keystore。密钥库包含单个键,有效10000天。别名是签署您的应用程序时,您将在以后使用的名称。

  1. 编译发布模式下您的应用程序,以获得一个无符号的APK。
  2. 使用jarsigner来签名你的app:
    $ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1
    -keystore my-release-key.keystore my_application.apk alias_name
    

上面提示您输入密钥库和密钥的密码。然后签名apk。

  1. 验证你的apk签名:
    $ jarsigner -verify -verbose -certs my_application.apk
    

  1. 使用zipalign来对齐apk包:
$ zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk

zipalign 确保所有的未压缩数据与特定字节对齐相对于文件,从而降低apk文件的大小。

学习理解并整理下来的笔记。



http://ddzan.net/e/space/?userid=191285?feed_filter=/kb/2016-09-02/039527.html
http://ddzan.net/e/space/?userid=191286?feed_filter=/td/2016-09-02/169587.html
http://ddzan.net/e/space/?userid=191287?feed_filter=/ny/2016-09-02/356214.html
http://ddzan.net/e/space/?userid=191288?feed_filter=/rb/2016-09-02/473506.html
http://ddzan.net/e/space/?userid=191289?feed_filter=/ip/2016-09-02/817256.html
http://ddzan.net/e/space/?userid=191290?feed_filter=/mk/2016-09-02/058423.html
http://ddzan.net/e/space/?userid=191291?feed_filter=/rt/2016-09-02/560879.html
http://ddzan.net/e/space/?userid=191292?feed_filter=/gz/2016-09-02/471032.html
http://ddzan.net/e/space/?userid=191293?feed_filter=/xf/2016-09-02/176389.html
http://ddzan.net/e/space/?userid=191294?feed_filter=/uf/2016-09-02/894561.html
http://ddzan.net/e/space/?userid=191295?feed_filter=/oq/2016-09-02/583069.html
http://ddzan.net/e/space/?userid=191296?feed_filter=/mw/2016-09-02/759684.html
http://ddzan.net/e/space/?userid=191297?feed_filter=/rw/2016-09-02/379406.html
http://ddzan.net/e/space/?userid=191298?feed_filter=/jb/2016-09-02/831746.html
http://ddzan.net/e/space/?userid=191299?feed_filter=/sv/2016-09-02/980423.html
http://ddzan.net/e/space/?userid=191300?feed_filter=/qn/2016-09-02/174298.html
http://ddzan.net/e/space/?userid=191301?feed_filter=/gw/2016-09-02/719804.html
http://ddzan.net/e/space/?userid=191302?feed_filter=/vr/2016-09-02/492150.html
http://ddzan.net/e/space/?userid=191303?feed_filter=/uw/2016-09-02/853109.html
http://ddzan.net/e/space/?userid=191304?feed_filter=/wa/2016-09-02/287614.html
http://ddzan.net/e/space/?userid=191305?feed_filter=/pa/2016-09-02/862374.html
http://ddzan.net/e/space/?userid=191306?feed_filter=/fl/2016-09-02/978405.html
http://ddzan.net/e/space/?userid=191307?feed_filter=/zj/2016-09-02/650749.html
http://ddzan.net/e/space/?userid=191308?feed_filter=/iy/2016-09-02/920438.html
http://ddzan.net/e/space/?userid=191309?feed_filter=/vn/2016-09-02/834720.html
http://ddzan.net/e/space/?userid=191310?feed_filter=/fc/2016-09-02/037496.html
http://ddzan.net/e/space/?userid=191311?feed_filter=/lb/2016-09-02/207493.html
http://ddzan.net/e/space/?userid=191312?feed_filter=/bk/2016-09-02/283190.html
http://ddzan.net/e/space/?userid=191313?feed_filter=/xl/2016-09-02/520376.html
http://ddzan.net/e/space/?userid=191314?feed_filter=/at/2016-09-02/842937.html
http://ddzan.net/e/space/?userid=191315?feed_filter=/al/2016-09-02/435907.html
http://ddzan.net/e/space/?userid=191316?feed_filter=/ia/2016-09-02/367502.html
http://ddzan.net/e/space/?userid=191317?feed_filter=/ne/2016-09-02/578043.html
http://ddzan.net/e/space/?userid=191318?feed_filter=/yz/2016-09-02/867193.html
http://ddzan.net/e/space/?userid=191319?feed_filter=/un/2016-09-02/937826.html
http://ddzan.net/e/space/?userid=191320?feed_filter=/gp/2016-09-02/590248.html
http://ddzan.net/e/space/?userid=191321?feed_filter=/yw/2016-09-02/894513.html
http://ddzan.net/e/space/?userid=191322?feed_filter=/fu/2016-09-02/710694.html
http://ddzan.net/e/space/?userid=191323?feed_filter=/bz/2016-09-02/481509.html
http://ddzan.net/e/space/?userid=191324?feed_filter=/fg/2016-09-02/973821.html
http://ddzan.net/e/space/?userid=191325?feed_filter=/hj/2016-09-02/234851.html
http://ddzan.net/e/space/?userid=191326?feed_filter=/rk/2016-09-02/608932.html
http://ddzan.net/e/space/?userid=191327?feed_filter=/gq/2016-09-02/018596.html
http://ddzan.net/e/space/?userid=191328?feed_filter=/mq/2016-09-02/382406.html
http://ddzan.net/e/space/?userid=191329?feed_filter=/aw/2016-09-02/318209.html
http://ddzan.net/e/space/?userid=191330?feed_filter=/ba/2016-09-02/685497.html
http://ddzan.net/e/space/?userid=191331?feed_filter=/go/2016-09-02/045392.html
http://ddzan.net/e/space/?userid=191332?feed_filter=/qu/2016-09-02/073268.html
http://ddzan.net/e/space/?userid=191333?feed_filter=/he/2016-09-02/098235.html
http://ddzan.net/e/space/?userid=191334?feed_filter=/dq/2016-09-02/081946.html
http://ddzan.net/e/space/?userid=191335?feed_filter=/kj/2016-09-02/793504.html
http://ddzan.net/e/space/?userid=191336?feed_filter=/ze/2016-09-02/098714.html
http://ddzan.net/e/space/?userid=191337?feed_filter=/um/2016-09-02/835291.html
http://ddzan.net/e/space/?userid=191338?feed_filter=/yb/2016-09-02/204695.html
http://ddzan.net/e/space/?userid=191339?feed_filter=/nt/2016-09-02/502893.html
http://ddzan.net/e/space/?userid=191340?feed_filter=/ft/2016-09-02/924681.html
http://ddzan.net/e/space/?userid=191341?feed_filter=/jf/2016-09-02/109367.html
http://ddzan.net/e/space/?userid=191342?feed_filter=/yc/2016-09-02/619457.html
http://ddzan.net/e/space/?userid=191343?feed_filter=/ms/2016-09-02/758612.html
http://ddzan.net/e/space/?userid=191344?feed_filter=/rx/2016-09-02/083627.html
http://ddzan.net/e/space/?userid=191345?feed_filter=/ur/2016-09-02/516043.html
http://ddzan.net/e/space/?userid=191346?feed_filter=/xq/2016-09-02/893754.html
http://ddzan.net/e/space/?userid=191347?feed_filter=/gm/2016-09-02/069815.html
http://ddzan.net/e/space/?userid=191348?feed_filter=/uw/2016-09-02/632587.html
http://ddzan.net/e/space/?userid=191349?feed_filter=/ip/2016-09-02/308547.html
http://ddzan.net/e/space/?userid=191350?feed_filter=/qa/2016-09-02/537061.html
http://ddzan.net/e/space/?userid=191351?feed_filter=/xn/2016-09-02/298165.html
http://ddzan.net/e/space/?userid=191352?feed_filter=/tb/2016-09-02/901248.html
http://ddzan.net/e/space/?userid=191353?feed_filter=/ny/2016-09-02/132504.html
http://ddzan.net/e/space/?userid=191354?feed_filter=/ry/2016-09-02/210948.html
http://ddzan.net/e/space/?userid=191355?feed_filter=/oj/2016-09-02/815427.html
http://ddzan.net/e/space/?userid=191356?feed_filter=/ea/2016-09-02/967028.html
http://ddzan.net/e/space/?userid=191357?feed_filter=/oj/2016-09-02/784021.html
http://ddzan.net/e/space/?userid=191358?feed_filter=/ws/2016-09-02/376048.html
http://ddzan.net/e/space/?userid=191359?feed_filter=/ck/2016-09-02/740953.html
http://ddzan.net/e/space/?userid=191360?feed_filter=/pg/2016-09-02/491376.html
http://ddzan.net/e/space/?userid=191361?feed_filter=/vn/2016-09-02/704628.html
http://ddzan.net/e/space/?userid=191362?feed_filter=/vn/2016-09-02/730158.html
http://ddzan.net/e/space/?userid=191363?feed_filter=/gy/2016-09-02/491507.html
http://ddzan.net/e/space/?userid=191364?feed_filter=/re/2016-09-02/849301.html
http://ddzan.net/e/space/?userid=191365?feed_filter=/yw/2016-09-02/125398.html
http://ddzan.net/e/space/?userid=191366?feed_filter=/gr/2016-09-02/945170.html
http://ddzan.net/e/space/?userid=191367?feed_filter=/pm/2016-09-02/710463.html
http://ddzan.net/e/space/?userid=191368?feed_filter=/se/2016-09-02/512430.html
http://ddzan.net/e/space/?userid=191369?feed_filter=/rs/2016-09-02/726435.html
http://ddzan.net/e/space/?userid=191370?feed_filter=/dq/2016-09-02/193745.html
http://ddzan.net/e/space/?userid=191371?feed_filter=/zh/2016-09-02/084259.html
http://ddzan.net/e/space/?userid=191372?feed_filter=/yt/2016-09-02/593601.html
http://ddzan.net/e/space/?userid=191373?feed_filter=/vd/2016-09-02/076412.html
http://ddzan.net/e/space/?userid=191374?feed_filter=/pu/2016-09-02/754931.html
http://ddzan.net/e/space/?userid=191375?feed_filter=/jc/2016-09-02/824713.html
http://ddzan.net/e/space/?userid=191376?feed_filter=/gd/2016-09-02/190465.html
http://ddzan.net/e/space/?userid=191377?feed_filter=/ag/2016-09-02/405628.html
http://ddzan.net/e/space/?userid=191378?feed_filter=/qc/2016-09-02/514706.html
http://ddzan.net/e/space/?userid=191379?feed_filter=/hm/2016-09-02/019465.html
http://ddzan.net/e/space/?userid=191380?feed_filter=/tr/2016-09-02/592346.html
http://ddzan.net/e/space/?userid=191381?feed_filter=/pu/2016-09-02/946715.html
http://ddzan.net/e/space/?userid=191382?feed_filter=/fj/2016-09-02/968372.html
http://ddzan.net/e/space/?userid=191383?feed_filter=/do/2016-09-02/139048.html
http://ddzan.net/e/space/?userid=191384?feed_filter=/hc/2016-09-02/427316.html
http://ddzan.net/e/space/?userid=191385?feed_filter=/va/2016-09-02/759801.html
http://ddzan.net/e/space/?userid=191386?feed_filter=/bq/2016-09-02/602859.html
http://ddzan.net/e/space/?userid=191387?feed_filter=/vq/2016-09-02/734901.html
http://ddzan.net/e/space/?userid=191388?feed_filter=/lr/2016-09-02/412758.html
http://ddzan.net/e/space/?userid=191389?feed_filter=/xd/2016-09-02/049632.html
http://ddzan.net/e/space/?userid=191390?feed_filter=/kf/2016-09-02/530142.html
http://ddzan.net/e/space/?userid=191391?feed_filter=/ce/2016-09-02/967518.html
http://ddzan.net/e/space/?userid=191392?feed_filter=/ok/2016-09-02/960471.html
http://ddzan.net/e/space/?userid=191393?feed_filter=/tk/2016-09-02/793106.html
http://ddzan.net/e/space/?userid=191394?feed_filter=/lj/2016-09-02/578324.html
http://ddzan.net/e/space/?userid=191395?feed_filter=/is/2016-09-02/567918.html
http://ddzan.net/e/space/?userid=191396?feed_filter=/vx/2016-09-02/902348.html
http://ddzan.net/e/space/?userid=191397?feed_filter=/iu/2016-09-02/842903.html
http://ddzan.net/e/space/?userid=191398?feed_filter=/iq/2016-09-02/284051.html
http://ddzan.net/e/space/?userid=191399?feed_filter=/xo/2016-09-02/562189.html
http://ddzan.net/e/space/?userid=191400?feed_filter=/kz/2016-09-02/840219.html
http://ddzan.net/e/space/?userid=191401?feed_filter=/bg/2016-09-02/753046.html
http://ddzan.net/e/space/?userid=191402?feed_filter=/hi/2016-09-02/314852.html
http://ddzan.net/e/space/?userid=191403?feed_filter=/zd/2016-09-02/358047.html
http://ddzan.net/e/space/?userid=191404?feed_filter=/ly/2016-09-02/354867.html
http://ddzan.net/e/space/?userid=191405?feed_filter=/jo/2016-09-02/903674.html
http://ddzan.net/e/space/?userid=191406?feed_filter=/ac/2016-09-02/279501.html
http://ddzan.net/e/space/?userid=191407?feed_filter=/as/2016-09-02/725614.html
http://ddzan.net/e/space/?userid=191408?feed_filter=/ol/2016-09-02/193607.html
http://ddzan.net/e/space/?userid=191409?feed_filter=/xk/2016-09-02/861930.html
http://ddzan.net/e/space/?userid=191410?feed_filter=/yr/2016-09-02/583472.html
http://ddzan.net/e/space/?userid=191411?feed_filter=/ts/2016-09-02/685247.html
http://ddzan.net/e/space/?userid=191412?feed_filter=/zh/2016-09-02/846152.html
http://ddzan.net/e/space/?userid=191413?feed_filter=/di/2016-09-02/980723.html
http://ddzan.net/e/space/?userid=191414?feed_filter=/tk/2016-09-02/768934.html
http://ddzan.net/e/space/?userid=191415?feed_filter=/da/2016-09-02/439715.html
http://ddzan.net/e/space/?userid=191416?feed_filter=/pa/2016-09-02/465823.html
http://ddzan.net/e/space/?userid=191417?feed_filter=/wp/2016-09-02/045932.html
http://ddzan.net/e/space/?userid=191418?feed_filter=/tc/2016-09-02/289534.html
http://ddzan.net/e/space/?userid=191419?feed_filter=/dr/2016-09-02/307492.html
http://ddzan.net/e/space/?userid=191420?feed_filter=/xz/2016-09-02/059172.html
http://ddzan.net/e/space/?userid=191421?feed_filter=/yh/2016-09-02/458619.html
http://ddzan.net/e/space/?userid=191422?feed_filter=/yg/2016-09-02/976420.html
http://ddzan.net/e/space/?userid=191423?feed_filter=/qr/2016-09-02/380421.html
http://ddzan.net/e/space/?userid=191424?feed_filter=/uv/2016-09-02/895412.html
http://ddzan.net/e/space/?userid=191425?feed_filter=/eq/2016-09-02/456097.html
http://ddzan.net/e/space/?userid=191426?feed_filter=/cy/2016-09-02/516487.html
http://ddzan.net/e/space/?userid=191427?feed_filter=/qb/2016-09-02/569847.html
http://ddzan.net/e/space/?userid=191428?feed_filter=/kn/2016-09-02/618503.html
http://ddzan.net/e/space/?userid=191429?feed_filter=/ih/2016-09-02/352104.html
http://ddzan.net/e/space/?userid=191430?feed_filter=/wt/2016-09-02/508236.html
http://ddzan.net/e/space/?userid=191431?feed_filter=/ul/2016-09-02/498326.html
http://ddzan.net/e/space/?userid=191432?feed_filter=/to/2016-09-02/829160.html
http://ddzan.net/e/space/?userid=191433?feed_filter=/jc/2016-09-02/385962.html
http://ddzan.net/e/space/?userid=191434?feed_filter=/mj/2016-09-02/509671.html
http://ddzan.net/e/space/?userid=191435?feed_filter=/bi/2016-09-02/902647.html
http://ddzan.net/e/space/?userid=191436?feed_filter=/zc/2016-09-02/149035.html
http://ddzan.net/e/space/?userid=191437?feed_filter=/un/2016-09-02/129038.html
http://ddzan.net/e/space/?userid=191438?feed_filter=/tb/2016-09-02/653028.html
http://ddzan.net/e/space/?userid=191439?feed_filter=/zo/2016-09-02/086372.html
http://ddzan.net/e/space/?userid=191440?feed_filter=/jp/2016-09-02/527814.html
http://ddzan.net/e/space/?userid=191441?feed_filter=/qu/2016-09-02/205316.html
http://ddzan.net/e/space/?userid=191442?feed_filter=/hr/2016-09-02/315247.html
http://ddzan.net/e/space/?userid=191443?feed_filter=/vh/2016-09-02/980354.html
http://ddzan.net/e/space/?userid=191444?feed_filter=/sa/2016-09-02/801562.html
http://ddzan.net/e/space/?userid=191445?feed_filter=/ah/2016-09-02/281395.html
http://ddzan.net/e/space/?userid=191446?feed_filter=/jr/2016-09-02/739415.html
http://ddzan.net/e/space/?userid=191447?feed_filter=/qj/2016-09-02/739406.html
http://ddzan.net/e/space/?userid=191448?feed_filter=/us/2016-09-02/492531.html
http://ddzan.net/e/space/?userid=191449?feed_filter=/pk/2016-09-02/823045.html
http://ddzan.net/e/space/?userid=191450?feed_filter=/fj/2016-09-02/748652.html
http://ddzan.net/e/space/?userid=191451?feed_filter=/ot/2016-09-02/627931.html
http://ddzan.net/e/space/?userid=191452?feed_filter=/bi/2016-09-02/750482.html
http://ddzan.net/e/space/?userid=191453?feed_filter=/qz/2016-09-02/783012.html
http://ddzan.net/e/space/?userid=191454?feed_filter=/vg/2016-09-02/490875.html
http://ddzan.net/e/space/?userid=191455?feed_filter=/tv/2016-09-02/214687.html
http://ddzan.net/e/space/?userid=191456?feed_filter=/je/2016-09-02/948653.html
http://ddzan.net/e/space/?userid=191457?feed_filter=/bj/2016-09-02/958160.html
http://ddzan.net/e/space/?userid=191458?feed_filter=/uo/2016-09-02/390271.html
http://ddzan.net/e/space/?userid=191459?feed_filter=/nx/2016-09-02/832450.html
http://ddzan.net/e/space/?userid=191460?feed_filter=/if/2016-09-02/619054.html
http://ddzan.net/e/space/?userid=191461?feed_filter=/ha/2016-09-02/618970.html
http://ddzan.net/e/space/?userid=191462?feed_filter=/hy/2016-09-02/713048.html
http://ddzan.net/e/space/?userid=191463?feed_filter=/xc/2016-09-02/063921.html
http://ddzan.net/e/space/?userid=191464?feed_filter=/lv/2016-09-02/018926.html
http://ddzan.net/e/space/?userid=191465?feed_filter=/ue/2016-09-02/306248.html
http://ddzan.net/e/space/?userid=191466?feed_filter=/tk/2016-09-02/745812.html
http://ddzan.net/e/space/?userid=191467?feed_filter=/jx/2016-09-02/237198.html
http://ddzan.net/e/space/?userid=191468?feed_filter=/wi/2016-09-02/081679.html
http://ddzan.net/e/space/?userid=191469?feed_filter=/mo/2016-09-02/864503.html
http://ddzan.net/e/space/?userid=191470?feed_filter=/iv/2016-09-02/267039.html
http://ddzan.net/e/space/?userid=191471?feed_filter=/co/2016-09-02/832097.html
http://ddzan.net/e/space/?userid=191472?feed_filter=/yw/2016-09-02/654328.html
http://ddzan.net/e/space/?userid=191473?feed_filter=/gl/2016-09-02/230759.html
http://ddzan.net/e/space/?userid=191474?feed_filter=/zb/2016-09-02/938210.html
http://ddzan.net/e/space/?userid=191475?feed_filter=/gn/2016-09-02/076952.html
http://ddzan.net/e/space/?userid=191476?feed_filter=/hv/2016-09-02/735184.html
http://ddzan.net/e/space/?userid=191477?feed_filter=/xf/2016-09-02/710382.html
http://ddzan.net/e/space/?userid=191478?feed_filter=/wg/2016-09-02/607832.html
http://ddzan.net/e/space/?userid=191479?feed_filter=/mn/2016-09-02/386941.html
http://ddzan.net/e/space/?userid=191480?feed_filter=/ng/2016-09-02/187594.html
http://ddzan.net/e/space/?userid=191481?feed_filter=/ca/2016-09-02/042786.html
http://ddzan.net/e/space/?userid=191482?feed_filter=/xr/2016-09-02/391507.html
http://ddzan.net/e/space/?userid=191483?feed_filter=/my/2016-09-02/645170.html
http://ddzan.net/e/space/?userid=191484?feed_filter=/ny/2016-09-02/256347.html
http://ddzan.net/e/space/?userid=191485?feed_filter=/nd/2016-09-02/721946.html
http://ddzan.net/e/space/?userid=191486?feed_filter=/oa/2016-09-02/387694.html
http://ddzan.net/e/space/?userid=191487?feed_filter=/vz/2016-09-02/674850.html
http://ddzan.net/e/space/?userid=191488?feed_filter=/zy/2016-09-02/396245.html
http://ddzan.net/e/space/?userid=191489?feed_filter=/zp/2016-09-02/189256.html
http://ddzan.net/e/space/?userid=191490?feed_filter=/gp/2016-09-02/135672.html
http://ddzan.net/e/space/?userid=191491?feed_filter=/jv/2016-09-02/961827.html
http://ddzan.net/e/space/?userid=191492?feed_filter=/ni/2016-09-02/420693.html
http://ddzan.net/e/space/?userid=191493?feed_filter=/bj/2016-09-02/674251.html
http://ddzan.net/e/space/?userid=191494?feed_filter=/ln/2016-09-02/209753.html
http://ddzan.net/e/space/?userid=191495?feed_filter=/wa/2016-09-02/085723.html
http://ddzan.net/e/space/?userid=191496?feed_filter=/qx/2016-09-02/413765.html
http://ddzan.net/e/space/?userid=191497?feed_filter=/tv/2016-09-02/067981.html
http://ddzan.net/e/space/?userid=191498?feed_filter=/gk/2016-09-02/710493.html
http://ddzan.net/e/space/?userid=191499?feed_filter=/ka/2016-09-02/351964.html
http://ddzan.net/e/space/?userid=191500?feed_filter=/ho/2016-09-02/483597.html
http://ddzan.net/e/space/?userid=191501?feed_filter=/ln/2016-09-02/685407.html
http://ddzan.net/e/space/?userid=191502?feed_filter=/tk/2016-09-02/791058.html
http://ddzan.net/e/space/?userid=191503?feed_filter=/ah/2016-09-02/684597.html
http://ddzan.net/e/space/?userid=191504?feed_filter=/bh/2016-09-02/308761.html
http://ddzan.net/e/space/?userid=191505?feed_filter=/hb/2016-09-02/245018.html
http://ddzan.net/e/space/?userid=191506?feed_filter=/hk/2016-09-02/903864.html
http://ddzan.net/e/space/?userid=191507?feed_filter=/nx/2016-09-02/671304.html
http://ddzan.net/e/space/?userid=191508?feed_filter=/wc/2016-09-02/347286.html
http://ddzan.net/e/space/?userid=191509?feed_filter=/nl/2016-09-02/463872.html
http://ddzan.net/e/space/?userid=191510?feed_filter=/tx/2016-09-02/458062.html
http://ddzan.net/e/space/?userid=191511?feed_filter=/ox/2016-09-02/316270.html
http://ddzan.net/e/space/?userid=191512?feed_filter=/al/2016-09-02/873195.html
http://ddzan.net/e/space/?userid=191513?feed_filter=/wj/2016-09-02/304219.html
http://ddzan.net/e/space/?userid=191514?feed_filter=/pm/2016-09-02/429386.html
http://ddzan.net/e/space/?userid=191515?feed_filter=/fi/2016-09-02/649031.html
http://ddzan.net/e/space/?userid=191516?feed_filter=/cs/2016-09-02/690341.html
http://ddzan.net/e/space/?userid=191517?feed_filter=/qa/2016-09-02/138076.html
http://ddzan.net/e/space/?userid=191518?feed_filter=/hr/2016-09-02/105849.html
http://ddzan.net/e/space/?userid=191519?feed_filter=/gi/2016-09-02/386190.html
http://ddzan.net/e/space/?userid=191520?feed_filter=/rz/2016-09-02/743201.html
http://ddzan.net/e/space/?userid=191521?feed_filter=/lc/2016-09-02/276894.html
http://ddzan.net/e/space/?userid=191522?feed_filter=/fn/2016-09-02/806253.html
http://ddzan.net/e/space/?userid=191523?feed_filter=/vw/2016-09-02/306184.html
http://ddzan.net/e/space/?userid=191524?feed_filter=/ia/2016-09-02/310874.html
http://ddzan.net/e/space/?userid=191525?feed_filter=/ej/2016-09-02/469701.html
http://ddzan.net/e/space/?userid=191526?feed_filter=/sd/2016-09-02/163490.html
http://ddzan.net/e/space/?userid=191527?feed_filter=/ip/2016-09-02/593410.html
http://ddzan.net/e/space/?userid=191528?feed_filter=/gm/2016-09-02/496213.html
http://ddzan.net/e/space/?userid=191529?feed_filter=/ud/2016-09-02/453961.html
http://ddzan.net/e/space/?userid=191530?feed_filter=/sp/2016-09-02/714295.html
http://ddzan.net/e/space/?userid=191531?feed_filter=/vz/2016-09-02/486529.html
http://ddzan.net/e/space/?userid=191532?feed_filter=/vy/2016-09-02/968137.html
http://ddzan.net/e/space/?userid=191533?feed_filter=/vy/2016-09-02/682195.html
http://ddzan.net/e/space/?userid=191534?feed_filter=/ez/2016-09-02/541762.html
http://ddzan.net/e/space/?userid=191535?feed_filter=/mb/2016-09-02/064598.html
http://ddzan.net/e/space/?userid=191536?feed_filter=/hk/2016-09-02/175602.html
http://ddzan.net/e/space/?userid=191537?feed_filter=/qm/2016-09-02/254930.html
http://ddzan.net/e/space/?userid=191538?feed_filter=/iv/2016-09-02/541086.html
http://ddzan.net/e/space/?userid=191539?feed_filter=/di/2016-09-02/834619.html
http://ddzan.net/e/space/?userid=191540?feed_filter=/nx/2016-09-02/107952.html
http://ddzan.net/e/space/?userid=191541?feed_filter=/kn/2016-09-02/391760.html
http://ddzan.net/e/space/?userid=191542?feed_filter=/ua/2016-09-02/215679.html
http://ddzan.net/e/space/?userid=191543?feed_filter=/jt/2016-09-02/374251.html
http://ddzan.net/e/space/?userid=191544?feed_filter=/ep/2016-09-02/619038.html
http://ddzan.net/e/space/?userid=191545?feed_filter=/nq/2016-09-02/157384.html
http://ddzan.net/e/space/?userid=191546?feed_filter=/ri/2016-09-02/016549.html
http://ddzan.net/e/space/?userid=191547?feed_filter=/xl/2016-09-02/962451.html
http://ddzan.net/e/space/?userid=191548?feed_filter=/tn/2016-09-02/846950.html
http://ddzan.net/e/space/?userid=191549?feed_filter=/fu/2016-09-02/652198.html
http://ddzan.net/e/space/?userid=191550?feed_filter=/oe/2016-09-02/859026.html
http://ddzan.net/e/space/?userid=191551?feed_filter=/au/2016-09-02/465783.html
http://ddzan.net/e/space/?userid=191552?feed_filter=/mc/2016-09-02/518607.html
http://ddzan.net/e/space/?userid=191553?feed_filter=/sg/2016-09-02/367480.html
http://ddzan.net/e/space/?userid=191554?feed_filter=/sg/2016-09-02/830651.html
http://ddzan.net/e/space/?userid=191555?feed_filter=/qn/2016-09-02/429360.html
http://ddzan.net/e/space/?userid=191556?feed_filter=/wt/2016-09-02/562704.html
http://ddzan.net/e/space/?userid=191557?feed_filter=/qc/2016-09-02/328746.html
http://ddzan.net/e/space/?userid=191558?feed_filter=/je/2016-09-02/320917.html
http://ddzan.net/e/space/?userid=191559?feed_filter=/hz/2016-09-02/067813.html
http://ddzan.net/e/space/?userid=191560?feed_filter=/fi/2016-09-02/692134.html
http://ddzan.net/e/space/?userid=191561?feed_filter=/av/2016-09-02/361428.html
http://ddzan.net/e/space/?userid=191562?feed_filter=/hp/2016-09-02/264750.html
http://ddzan.net/e/space/?userid=191563?feed_filter=/lx/2016-09-02/915632.html
http://ddzan.net/e/space/?userid=191564?feed_filter=/jy/2016-09-02/851423.html
http://ddzan.net/e/space/?userid=191565?feed_filter=/km/2016-09-02/125943.html
http://ddzan.net/e/space/?userid=191566?feed_filter=/dg/2016-09-02/690138.html
http://ddzan.net/e/space/?userid=191567?feed_filter=/fl/2016-09-02/632809.html
http://ddzan.net/e/space/?userid=191568?feed_filter=/jk/2016-09-02/627538.html
http://ddzan.net/e/space/?userid=191569?feed_filter=/iw/2016-09-02/061397.html
http://ddzan.net/e/space/?userid=191570?feed_filter=/de/2016-09-02/734162.html
http://ddzan.net/e/space/?userid=191571?feed_filter=/wn/2016-09-02/465829.html
http://ddzan.net/e/space/?userid=191572?feed_filter=/vk/2016-09-02/932017.html
http://ddzan.net/e/space/?userid=191573?feed_filter=/nx/2016-09-02/918453.html
http://ddzan.net/e/space/?userid=191574?feed_filter=/ei/2016-09-02/517038.html
http://ddzan.net/e/space/?userid=191575?feed_filter=/ft/2016-09-02/198536.html
http://ddzan.net/e/space/?userid=191576?feed_filter=/bt/2016-09-02/829154.html
http://ddzan.net/e/space/?userid=191577?feed_filter=/aj/2016-09-02/329780.html
http://ddzan.net/e/space/?userid=191578?feed_filter=/cg/2016-09-02/758430.html
http://ddzan.net/e/space/?userid=191579?feed_filter=/my/2016-09-02/856913.html
http://ddzan.net/e/space/?userid=191580?feed_filter=/sm/2016-09-02/596804.html
http://ddzan.net/e/space/?userid=191581?feed_filter=/yr/2016-09-02/589627.html
http://ddzan.net/e/space/?userid=191582?feed_filter=/dx/2016-09-02/641832.html
http://ddzan.net/e/space/?userid=191583?feed_filter=/xk/2016-09-02/124756.html
http://ddzan.net/e/space/?userid=191584?feed_filter=/eg/2016-09-02/178029.html
http://ddzan.net/e/space/?userid=191585?feed_filter=/tk/2016-09-02/749012.html
http://ddzan.net/e/space/?userid=191586?feed_filter=/gi/2016-09-02/387069.html
http://ddzan.net/e/space/?userid=191587?feed_filter=/io/2016-09-02/062748.html
http://ddzan.net/e/space/?userid=191588?feed_filter=/jt/2016-09-02/247069.html
http://ddzan.net/e/space/?userid=191589?feed_filter=/iy/2016-09-02/169507.html
http://ddzan.net/e/space/?userid=191590?feed_filter=/tj/2016-09-02/948021.html
http://ddzan.net/e/space/?userid=191591?feed_filter=/jr/2016-09-02/509642.html
http://ddzan.net/e/space/?userid=191592?feed_filter=/ha/2016-09-02/036894.html
http://ddzan.net/e/space/?userid=191593?feed_filter=/dp/2016-09-02/461980.html
http://ddzan.net/e/space/?userid=191594?feed_filter=/mo/2016-09-02/140856.html
http://ddzan.net/e/space/?userid=191595?feed_filter=/bd/2016-09-02/714695.html
http://ddzan.net/e/space/?userid=191596?feed_filter=/tq/2016-09-02/302596.html
http://ddzan.net/e/space/?userid=191597?feed_filter=/nu/2016-09-02/062547.html
http://ddzan.net/e/space/?userid=191598?feed_filter=/xj/2016-09-02/123647.html
http://ddzan.net/e/space/?userid=191599?feed_filter=/vd/2016-09-02/132780.html
http://ddzan.net/e/space/?userid=191600?feed_filter=/pf/2016-09-02/983064.html
http://ddzan.net/e/space/?userid=191601?feed_filter=/vg/2016-09-02/428971.html
http://ddzan.net/e/space/?userid=191602?feed_filter=/je/2016-09-02/914350.html
http://ddzan.net/e/space/?userid=191603?feed_filter=/if/2016-09-02/890315.html
http://ddzan.net/e/space/?userid=191604?feed_filter=/ug/2016-09-02/051928.html
http://ddzan.net/e/space/?userid=191605?feed_filter=/uk/2016-09-02/620819.html
http://ddzan.net/e/space/?userid=191606?feed_filter=/pd/2016-09-02/246190.html
http://ddzan.net/e/space/?userid=191607?feed_filter=/vt/2016-09-02/746398.html
http://ddzan.net/e/space/?userid=191608?feed_filter=/rp/2016-09-02/296840.html
http://ddzan.net/e/space/?userid=191609?feed_filter=/rn/2016-09-02/257413.html
http://ddzan.net/e/space/?userid=191610?feed_filter=/gz/2016-09-02/714893.html
http://ddzan.net/e/space/?userid=191611?feed_filter=/sc/2016-09-02/431569.html
http://ddzan.net/e/space/?userid=191612?feed_filter=/kb/2016-09-02/803421.html
http://ddzan.net/e/space/?userid=191613?feed_filter=/hr/2016-09-02/193502.html
http://ddzan.net/e/space/?userid=191614?feed_filter=/lp/2016-09-02/807135.html
http://ddzan.net/e/space/?userid=191615?feed_filter=/ja/2016-09-02/241850.html
http://ddzan.net/e/space/?userid=191616?feed_filter=/gd/2016-09-02/730629.html
http://ddzan.net/e/space/?userid=191617?feed_filter=/ym/2016-09-02/745289.html
http://ddzan.net/e/space/?userid=191618?feed_filter=/sk/2016-09-02/628394.html
http://ddzan.net/e/space/?userid=191619?feed_filter=/ky/2016-09-02/845026.html
http://ddzan.net/e/space/?userid=191620?feed_filter=/fm/2016-09-02/512368.html
http://ddzan.net/e/space/?userid=191621?feed_filter=/ls/2016-09-02/591347.html
http://ddzan.net/e/space/?userid=191622?feed_filter=/uc/2016-09-02/394208.html
http://ddzan.net/e/space/?userid=191623?feed_filter=/bu/2016-09-02/816907.html
http://ddzan.net/e/space/?userid=191624?feed_filter=/pi/2016-09-02/640592.html
http://ddzan.net/e/space/?userid=191625?feed_filter=/lp/2016-09-02/728469.html
http://ddzan.net/e/space/?userid=191626?feed_filter=/lm/2016-09-02/863547.html
http://ddzan.net/e/space/?userid=191627?feed_filter=/kc/2016-09-02/765024.html
http://ddzan.net/e/space/?userid=191628?feed_filter=/vt/2016-09-02/958037.html
http://ddzan.net/e/space/?userid=191629?feed_filter=/ua/2016-09-02/826973.html
http://ddzan.net/e/space/?userid=191630?feed_filter=/kq/2016-09-02/508394.html
http://ddzan.net/e/space/?userid=191631?feed_filter=/cg/2016-09-02/174026.html
http://ddzan.net/e/space/?userid=191632?feed_filter=/vz/2016-09-02/850924.html
http://ddzan.net/e/space/?userid=191633?feed_filter=/ep/2016-09-02/046312.html
http://ddzan.net/e/space/?userid=191634?feed_filter=/no/2016-09-02/502743.html
http://ddzan.net/e/space/?userid=191635?feed_filter=/rq/2016-09-02/316957.html
http://ddzan.net/e/space/?userid=191636?feed_filter=/lh/2016-09-02/825419.html
http://ddzan.net/e/space/?userid=191637?feed_filter=/lj/2016-09-02/059124.html
http://ddzan.net/e/space/?userid=191638?feed_filter=/zy/2016-09-02/096547.html
http://ddzan.net/e/space/?userid=191639?feed_filter=/iw/2016-09-02/193068.html
http://ddzan.net/e/space/?userid=191640?feed_filter=/hr/2016-09-02/026189.html
http://ddzan.net/e/space/?userid=191641?feed_filter=/jf/2016-09-02/105937.html
http://ddzan.net/e/space/?userid=191642?feed_filter=/yb/2016-09-02/392760.html
http://ddzan.net/e/space/?userid=191643?feed_filter=/ft/2016-09-02/120678.html
http://ddzan.net/e/space/?userid=191644?feed_filter=/rp/2016-09-02/936170.html
http://ddzan.net/e/space/?userid=191645?feed_filter=/fj/2016-09-02/971428.html
http://ddzan.net/e/space/?userid=191646?feed_filter=/ic/2016-09-02/340596.html
http://ddzan.net/e/space/?userid=191647?feed_filter=/jl/2016-09-02/429065.html
http://ddzan.net/e/space/?userid=191648?feed_filter=/oz/2016-09-02/953412.html
http://ddzan.net/e/space/?userid=191649?feed_filter=/qb/2016-09-02/102359.html
http://ddzan.net/e/space/?userid=191650?feed_filter=/dr/2016-09-02/954378.html
http://ddzan.net/e/space/?userid=191651?feed_filter=/ul/2016-09-02/286354.html
http://ddzan.net/e/space/?userid=191652?feed_filter=/yo/2016-09-02/812573.html
http://ddzan.net/e/space/?userid=191653?feed_filter=/ip/2016-09-02/973428.html
http://ddzan.net/e/space/?userid=191654?feed_filter=/wd/2016-09-02/423680.html
http://ddzan.net/e/space/?userid=191655?feed_filter=/ct/2016-09-02/046278.html
http://ddzan.net/e/space/?userid=191656?feed_filter=/uf/2016-09-02/974063.html
http://ddzan.net/e/space/?userid=191657?feed_filter=/jw/2016-09-02/639410.html
http://ddzan.net/e/space/?userid=191658?feed_filter=/yo/2016-09-02/394610.html
http://ddzan.net/e/space/?userid=191659?feed_filter=/dr/2016-09-02/204718.html
http://ddzan.net/e/space/?userid=191660?feed_filter=/na/2016-09-02/280691.html
http://ddzan.net/e/space/?userid=191661?feed_filter=/vz/2016-09-02/938104.html
http://ddzan.net/e/space/?userid=191662?feed_filter=/nj/2016-09-02/526803.html
http://ddzan.net/e/space/?userid=191663?feed_filter=/si/2016-09-02/753608.html
http://ddzan.net/e/space/?userid=191664?feed_filter=/oy/2016-09-02/762180.html
http://ddzan.net/e/space/?userid=191665?feed_filter=/ja/2016-09-02/198526.html
http://ddzan.net/e/space/?userid=191666?feed_filter=/cg/2016-09-02/762198.html
http://ddzan.net/e/space/?userid=191667?feed_filter=/dy/2016-09-02/465812.html
http://ddzan.net/e/space/?userid=191668?feed_filter=/mq/2016-09-02/893470.html
http://ddzan.net/e/space/?userid=191669?feed_filter=/en/2016-09-02/102863.html
http://ddzan.net/e/space/?userid=191670?feed_filter=/gz/2016-09-02/836795.html
http://ddzan.net/e/space/?userid=191671?feed_filter=/nx/2016-09-02/465928.html
http://ddzan.net/e/space/?userid=191672?feed_filter=/pq/2016-09-02/278190.html
http://ddzan.net/e/space/?userid=191673?feed_filter=/ur/2016-09-02/340156.html
http://ddzan.net/e/space/?userid=191674?feed_filter=/ga/2016-09-02/647295.html
http://ddzan.net/e/space/?userid=191675?feed_filter=/di/2016-09-02/302479.html
http://ddzan.net/e/space/?userid=191676?feed_filter=/py/2016-09-02/804635.html
http://ddzan.net/e/space/?userid=191677?feed_filter=/ft/2016-09-02/380497.html
http://ddzan.net/e/space/?userid=191678?feed_filter=/kz/2016-09-02/685931.html
http://ddzan.net/e/space/?userid=191679?feed_filter=/gs/2016-09-02/369280.html
http://ddzan.net/e/space/?userid=191680?feed_filter=/ho/2016-09-02/845169.html
http://ddzan.net/e/space/?userid=191681?feed_filter=/jc/2016-09-02/249017.html
http://ddzan.net/e/space/?userid=191682?feed_filter=/ol/2016-09-02/978652.html
http://ddzan.net/e/space/?userid=191683?feed_filter=/zl/2016-09-02/178259.html
http://ddzan.net/e/space/?userid=191684?feed_filter=/kd/2016-09-02/359428.html
http://ddzan.net/e/space/?userid=191685?feed_filter=/oz/2016-09-02/628713.html
http://ddzan.net/e/space/?userid=191686?feed_filter=/tk/2016-09-02/618045.html
http://ddzan.net/e/space/?userid=191687?feed_filter=/hj/2016-09-02/305486.html
http://ddzan.net/e/space/?userid=191688?feed_filter=/sr/2016-09-02/496185.html
http://ddzan.net/e/space/?userid=191689?feed_filter=/ni/2016-09-02/027456.html
http://ddzan.net/e/space/?userid=191690?feed_filter=/hd/2016-09-02/739184.html
http://ddzan.net/e/space/?userid=191691?feed_filter=/sr/2016-09-02/043876.html
http://ddzan.net/e/space/?userid=191692?feed_filter=/yr/2016-09-02/812743.html
http://ddzan.net/e/space/?userid=191693?feed_filter=/ro/2016-09-02/156730.html
http://ddzan.net/e/space/?userid=191694?feed_filter=/mb/2016-09-02/076958.html
http://ddzan.net/e/space/?userid=191695?feed_filter=/wl/2016-09-02/562381.html
http://ddzan.net/e/space/?userid=191696?feed_filter=/af/2016-09-02/704963.html
http://ddzan.net/e/space/?userid=191697?feed_filter=/gc/2016-09-02/649731.html
http://ddzan.net/e/space/?userid=191698?feed_filter=/tp/2016-09-02/703182.html
http://ddzan.net/e/space/?userid=191699?feed_filter=/vw/2016-09-02/256701.html
http://ddzan.net/e/space/?userid=191700?feed_filter=/nh/2016-09-02/356047.html
http://ddzan.net/e/space/?userid=191701?feed_filter=/hv/2016-09-02/954610.html
http://ddzan.net/e/space/?userid=191702?feed_filter=/rb/2016-09-02/589403.html
http://ddzan.net/e/space/?userid=191703?feed_filter=/gr/2016-09-02/124675.html
http://ddzan.net/e/space/?userid=191704?feed_filter=/qm/2016-09-02/579416.html
http://ddzan.net/e/space/?userid=191705?feed_filter=/zg/2016-09-02/126983.html
http://ddzan.net/e/space/?userid=191706?feed_filter=/uc/2016-09-02/035496.html
http://ddzan.net/e/space/?userid=191707?feed_filter=/po/2016-09-02/671083.html
http://ddzan.net/e/space/?userid=191708?feed_filter=/pj/2016-09-02/746215.html
http://ddzan.net/e/space/?userid=191709?feed_filter=/fq/2016-09-02/824536.html
http://ddzan.net/e/space/?userid=191710?feed_filter=/cs/2016-09-02/283509.html
http://ddzan.net/e/space/?userid=191711?feed_filter=/lj/2016-09-02/314076.html
http://ddzan.net/e/space/?userid=191712?feed_filter=/qo/2016-09-02/249635.html
http://ddzan.net/e/space/?userid=191713?feed_filter=/on/2016-09-02/571380.html
http://ddzan.net/e/space/?userid=191714?feed_filter=/hb/2016-09-02/237846.html
http://ddzan.net/e/space/?userid=191715?feed_filter=/ac/2016-09-02/843761.html
http://ddzan.net/e/space/?userid=191716?feed_filter=/oq/2016-09-02/164532.html
http://ddzan.net/e/space/?userid=191717?feed_filter=/fl/2016-09-02/920371.html
http://ddzan.net/e/space/?userid=191718?feed_filter=/xd/2016-09-02/538902.html
http://ddzan.net/e/space/?userid=191719?feed_filter=/bc/2016-09-02/289135.html
http://ddzan.net/e/space/?userid=191720?feed_filter=/ql/2016-09-02/792304.html
http://ddzan.net/e/space/?userid=191721?feed_filter=/na/2016-09-02/814569.html
http://ddzan.net/e/space/?userid=191722?feed_filter=/wj/2016-09-02/451239.html
http://ddzan.net/e/space/?userid=191723?feed_filter=/mg/2016-09-02/789264.html
http://ddzan.net/e/space/?userid=191724?feed_filter=/su/2016-09-02/972014.html
http://ddzan.net/e/space/?userid=191725?feed_filter=/km/2016-09-02/967142.html
http://ddzan.net/e/space/?userid=191726?feed_filter=/th/2016-09-02/417056.html
http://ddzan.net/e/space/?userid=191727?feed_filter=/hq/2016-09-02/975043.html
http://ddzan.net/e/space/?userid=191728?feed_filter=/iv/2016-09-02/371642.html
http://ddzan.net/e/space/?userid=191729?feed_filter=/ax/2016-09-02/538164.html
http://ddzan.net/e/space/?userid=191730?feed_filter=/rv/2016-09-02/215378.html
http://ddzan.net/e/space/?userid=191731?feed_filter=/cv/2016-09-02/732891.html
http://ddzan.net/e/space/?userid=191732?feed_filter=/it/2016-09-02/362879.html
http://ddzan.net/e/space/?userid=191733?feed_filter=/zd/2016-09-02/308291.html
http://ddzan.net/e/space/?userid=191734?feed_filter=/uq/2016-09-02/271065.html
http://ddzan.net/e/space/?userid=191735?feed_filter=/on/2016-09-02/074961.html
http://ddzan.net/e/space/?userid=191736?feed_filter=/ha/2016-09-02/692513.html
http://ddzan.net/e/space/?userid=191737?feed_filter=/mo/2016-09-02/876059.html
http://ddzan.net/e/space/?userid=191738?feed_filter=/he/2016-09-02/164978.html
http://ddzan.net/e/space/?userid=191739?feed_filter=/ho/2016-09-02/651794.html
http://ddzan.net/e/space/?userid=191740?feed_filter=/eh/2016-09-02/459860.html
http://ddzan.net/e/space/?userid=191741?feed_filter=/lx/2016-09-02/243597.html
http://ddzan.net/e/space/?userid=191742?feed_filter=/ih/2016-09-02/153840.html
http://ddzan.net/e/space/?userid=191743?feed_filter=/jx/2016-09-02/310748.html
http://ddzan.net/e/space/?userid=191744?feed_filter=/bk/2016-09-02/768412.html
http://ddzan.net/e/space/?userid=191745?feed_filter=/cg/2016-09-02/163750.html
http://ddzan.net/e/space/?userid=191746?feed_filter=/lx/2016-09-02/280731.html
http://ddzan.net/e/space/?userid=191747?feed_filter=/vn/2016-09-02/589310.html
http://ddzan.net/e/space/?userid=191748?feed_filter=/wi/2016-09-02/508391.html
http://ddzan.net/e/space/?userid=191749?feed_filter=/in/2016-09-02/306159.html
http://ddzan.net/e/space/?userid=191750?feed_filter=/hl/2016-09-02/082617.html
http://ddzan.net/e/space/?userid=191751?feed_filter=/kv/2016-09-02/476320.html
http://ddzan.net/e/space/?userid=191752?feed_filter=/al/2016-09-02/154029.html
http://ddzan.net/e/space/?userid=191753?feed_filter=/xk/2016-09-02/674285.html
http://ddzan.net/e/space/?userid=191754?feed_filter=/ep/2016-09-02/635124.html
http://ddzan.net/e/space/?userid=191755?feed_filter=/ut/2016-09-02/927453.html
http://ddzan.net/e/space/?userid=191756?feed_filter=/qy/2016-09-02/764215.html
http://ddzan.net/e/space/?userid=191757?feed_filter=/ca/2016-09-02/871503.html
http://ddzan.net/e/space/?userid=191758?feed_filter=/mg/2016-09-02/810739.html
http://ddzan.net/e/space/?userid=191759?feed_filter=/qi/2016-09-02/382590.html
http://ddzan.net/e/space/?userid=191760?feed_filter=/fu/2016-09-02/840162.html
http://ddzan.net/e/space/?userid=191761?feed_filter=/zn/2016-09-02/045783.html
http://ddzan.net/e/space/?userid=191762?feed_filter=/sg/2016-09-02/642590.html
http://ddzan.net/e/space/?userid=191763?feed_filter=/wv/2016-09-02/216784.html
http://ddzan.net/e/space/?userid=191764?feed_filter=/li/2016-09-02/016835.html
http://ddzan.net/e/space/?userid=191765?feed_filter=/pm/2016-09-02/204896.html
http://ddzan.net/e/space/?userid=191766?feed_filter=/sk/2016-09-02/376951.html
http://ddzan.net/e/space/?userid=191767?feed_filter=/xh/2016-09-02/285470.html
http://ddzan.net/e/space/?userid=191768?feed_filter=/ca/2016-09-02/760981.html
http://ddzan.net/e/space/?userid=191769?feed_filter=/lt/2016-09-02/361748.html
http://ddzan.net/e/space/?userid=191770?feed_filter=/qe/2016-09-02/801963.html
http://ddzan.net/e/space/?userid=191771?feed_filter=/qf/2016-09-02/825347.html
http://ddzan.net/e/space/?userid=191772?feed_filter=/yf/2016-09-02/814392.html
http://ddzan.net/e/space/?userid=191773?feed_filter=/rn/2016-09-02/936481.html
http://ddzan.net/e/space/?userid=191774?feed_filter=/jh/2016-09-02/378142.html
http://ddzan.net/e/space/?userid=191775?feed_filter=/un/2016-09-02/793650.html
http://ddzan.net/e/space/?userid=191776?feed_filter=/rn/2016-09-02/194256.html
http://ddzan.net/e/space/?userid=191777?feed_filter=/aw/2016-09-02/073195.html
http://ddzan.net/e/space/?userid=191778?feed_filter=/ok/2016-09-02/867459.html
http://ddzan.net/e/space/?userid=191779?feed_filter=/dx/2016-09-02/618397.html
http://ddzan.net/e/space/?userid=191780?feed_filter=/qx/2016-09-02/183967.html
http://ddzan.net/e/space/?userid=191781?feed_filter=/av/2016-09-02/635089.html
http://ddzan.net/e/space/?userid=191782?feed_filter=/tv/2016-09-02/964380.html
http://ddzan.net/e/space/?userid=191783?feed_filter=/gq/2016-09-02/967182.html
http://ddzan.net/e/space/?userid=191784?feed_filter=/mz/2016-09-02/389615.html
http://ddzan.net/e/space/?userid=191785?feed_filter=/fq/2016-09-02/475018.html
http://ddzan.net/e/space/?userid=191786?feed_filter=/gz/2016-09-02/718032.html
http://ddzan.net/e/space/?userid=191787?feed_filter=/pe/2016-09-02/784235.html
http://ddzan.net/e/space/?userid=191788?feed_filter=/xt/2016-09-02/253140.html
http://ddzan.net/e/space/?userid=191789?feed_filter=/qr/2016-09-02/210578.html
http://ddzan.net/e/space/?userid=191790?feed_filter=/ap/2016-09-02/289617.html
http://ddzan.net/e/space/?userid=191791?feed_filter=/vw/2016-09-02/389254.html
http://ddzan.net/e/space/?userid=191792?feed_filter=/zu/2016-09-02/205369.html
http://ddzan.net/e/space/?userid=191793?feed_filter=/qw/2016-09-02/452017.html
http://ddzan.net/e/space/?userid=191794?feed_filter=/uz/2016-09-02/384190.html
http://ddzan.net/e/space/?userid=191795?feed_filter=/vp/2016-09-02/816045.html
http://ddzan.net/e/space/?userid=191796?feed_filter=/bx/2016-09-02/502497.html
http://ddzan.net/e/space/?userid=191797?feed_filter=/ac/2016-09-02/260518.html
http://ddzan.net/e/space/?userid=191798?feed_filter=/tb/2016-09-02/358012.html
http://ddzan.net/e/space/?userid=191799?feed_filter=/rl/2016-09-02/867943.html
http://ddzan.net/e/space/?userid=191800?feed_filter=/dl/2016-09-02/427563.html
http://ddzan.net/e/space/?userid=191801?feed_filter=/ea/2016-09-02/543017.html
http://ddzan.net/e/space/?userid=191802?feed_filter=/yw/2016-09-02/951247.html
http://ddzan.net/e/space/?userid=191803?feed_filter=/ew/2016-09-02/954320.html
http://ddzan.net/e/space/?userid=191804?feed_filter=/kj/2016-09-02/840139.html
http://ddzan.net/e/space/?userid=191805?feed_filter=/ob/2016-09-02/281097.html
http://ddzan.net/e/space/?userid=191806?feed_filter=/qv/2016-09-02/548603.html
http://ddzan.net/e/space/?userid=191807?feed_filter=/pj/2016-09-02/976842.html
http://ddzan.net/e/space/?userid=191808?feed_filter=/om/2016-09-02/627059.html
http://ddzan.net/e/space/?userid=191809?feed_filter=/cu/2016-09-02/376984.html
http://ddzan.net/e/space/?userid=191810?feed_filter=/iz/2016-09-02/273948.html
http://ddzan.net/e/space/?userid=191811?feed_filter=/vb/2016-09-02/189054.html
http://ddzan.net/e/space/?userid=191812?feed_filter=/hf/2016-09-02/257690.html
http://ddzan.net/e/space/?userid=191813?feed_filter=/tn/2016-09-02/017246.html
http://ddzan.net/e/space/?userid=191814?feed_filter=/vz/2016-09-02/273598.html
http://ddzan.net/e/space/?userid=191815?feed_filter=/ru/2016-09-02/384729.html
http://ddzan.net/e/space/?userid=191816?feed_filter=/gf/2016-09-02/192478.html
http://ddzan.net/e/space/?userid=191817?feed_filter=/ls/2016-09-02/157924.html
http://ddzan.net/e/space/?userid=191818?feed_filter=/pc/2016-09-02/798410.html
http://ddzan.net/e/space/?userid=191819?feed_filter=/ej/2016-09-02/593480.html
http://ddzan.net/e/space/?userid=191820?feed_filter=/du/2016-09-02/970485.html
http://ddzan.net/e/space/?userid=191821?feed_filter=/me/2016-09-02/653271.html
http://ddzan.net/e/space/?userid=191822?feed_filter=/xc/2016-09-02/146703.html
http://ddzan.net/e/space/?userid=191823?feed_filter=/hl/2016-09-02/729348.html
http://ddzan.net/e/space/?userid=191824?feed_filter=/bp/2016-09-02/534970.html
http://ddzan.net/e/space/?userid=191825?feed_filter=/kj/2016-09-02/973084.html
http://ddzan.net/e/space/?userid=191826?feed_filter=/ws/2016-09-02/619873.html
http://ddzan.net/e/space/?userid=191827?feed_filter=/bu/2016-09-02/251368.html
http://ddzan.net/e/space/?userid=191828?feed_filter=/dp/2016-09-02/607931.html
http://ddzan.net/e/space/?userid=191829?feed_filter=/zp/2016-09-02/074315.html
http://ddzan.net/e/space/?userid=191830?feed_filter=/qc/2016-09-02/954380.html
http://ddzan.net/e/space/?userid=191831?feed_filter=/rk/2016-09-02/891726.html
http://ddzan.net/e/space/?userid=191832?feed_filter=/zv/2016-09-02/719435.html
http://ddzan.net/e/space/?userid=191833?feed_filter=/kg/2016-09-02/829347.html
http://ddzan.net/e/space/?userid=191834?feed_filter=/qx/2016-09-02/362409.html
http://ddzan.net/e/space/?userid=191835?feed_filter=/kh/2016-09-02/018635.html
http://ddzan.net/e/space/?userid=191836?feed_filter=/am/2016-09-02/204618.html
http://ddzan.net/e/space/?userid=191837?feed_filter=/ag/2016-09-02/384917.html
http://ddzan.net/e/space/?userid=191838?feed_filter=/hb/2016-09-02/348691.html
http://ddzan.net/e/space/?userid=191839?feed_filter=/vd/2016-09-02/784951.html
http://ddzan.net/e/space/?userid=191840?feed_filter=/ct/2016-09-02/705826.html
http://ddzan.net/e/space/?userid=191841?feed_filter=/cm/2016-09-02/480657.html
http://ddzan.net/e/space/?userid=191842?feed_filter=/vw/2016-09-02/925037.html
http://ddzan.net/e/space/?userid=191843?feed_filter=/we/2016-09-02/183950.html
http://ddzan.net/e/space/?userid=191844?feed_filter=/yx/2016-09-02/073598.html
http://ddzan.net/e/space/?userid=191845?feed_filter=/bc/2016-09-02/547920.html
http://ddzan.net/e/space/?userid=191846?feed_filter=/nu/2016-09-02/957261.html
http://ddzan.net/e/space/?userid=191847?feed_filter=/es/2016-09-02/962034.html
http://ddzan.net/e/space/?userid=191848?feed_filter=/sm/2016-09-02/018935.html
http://ddzan.net/e/space/?userid=191849?feed_filter=/ob/2016-09-02/821653.html
http://ddzan.net/e/space/?userid=191850?feed_filter=/hn/2016-09-02/134872.html
http://ddzan.net/e/space/?userid=191851?feed_filter=/jy/2016-09-02/493720.html
http://ddzan.net/e/space/?userid=191852?feed_filter=/va/2016-09-02/920853.html
http://ddzan.net/e/space/?userid=191853?feed_filter=/dh/2016-09-02/409621.html
http://ddzan.net/e/space/?userid=191854?feed_filter=/ag/2016-09-02/096318.html
http://ddzan.net/e/space/?userid=191855?feed_filter=/ox/2016-09-02/928175.html
http://ddzan.net/e/space/?userid=191856?feed_filter=/et/2016-09-02/485127.html
http://ddzan.net/e/space/?userid=191857?feed_filter=/ls/2016-09-02/183962.html
http://ddzan.net/e/space/?userid=191858?feed_filter=/qv/2016-09-02/629850.html
http://ddzan.net/e/space/?userid=191859?feed_filter=/qb/2016-09-02/647891.html
http://ddzan.net/e/space/?userid=191860?feed_filter=/ad/2016-09-02/954302.html
http://ddzan.net/e/space/?userid=191861?feed_filter=/fd/2016-09-02/351062.html
http://ddzan.net/e/space/?userid=191862?feed_filter=/rj/2016-09-02/295640.html
http://ddzan.net/e/space/?userid=191863?feed_filter=/md/2016-09-02/310849.html
http://ddzan.net/e/space/?userid=191864?feed_filter=/ry/2016-09-02/852074.html
http://ddzan.net/e/space/?userid=191865?feed_filter=/tx/2016-09-02/826451.html
http://ddzan.net/e/space/?userid=191866?feed_filter=/of/2016-09-02/604132.html
http://ddzan.net/e/space/?userid=191867?feed_filter=/sk/2016-09-02/317645.html
http://ddzan.net/e/space/?userid=191868?feed_filter=/wb/2016-09-02/927435.html
http://ddzan.net/e/space/?userid=191869?feed_filter=/tl/2016-09-02/403852.html
http://ddzan.net/e/space/?userid=191870?feed_filter=/ce/2016-09-02/807623.html
http://ddzan.net/e/space/?userid=191871?feed_filter=/zq/2016-09-02/072145.html
http://ddzan.net/e/space/?userid=191872?feed_filter=/th/2016-09-02/852701.html
http://ddzan.net/e/space/?userid=191873?feed_filter=/qr/2016-09-02/672934.html
http://ddzan.net/e/space/?userid=191874?feed_filter=/pb/2016-09-02/416392.html
http://ddzan.net/e/space/?userid=191875?feed_filter=/oq/2016-09-02/951462.html
http://ddzan.net/e/space/?userid=191876?feed_filter=/rz/2016-09-02/136957.html
http://ddzan.net/e/space/?userid=191877?feed_filter=/vy/2016-09-02/583976.html
http://ddzan.net/e/space/?userid=191878?feed_filter=/ia/2016-09-02/479263.html
http://ddzan.net/e/space/?userid=191879?feed_filter=/ap/2016-09-02/532169.html
http://ddzan.net/e/space/?userid=191880?feed_filter=/xs/2016-09-02/013469.html
http://ddzan.net/e/space/?userid=191881?feed_filter=/kh/2016-09-02/476182.html
http://ddzan.net/e/space/?userid=191882?feed_filter=/ub/2016-09-02/367951.html
http://ddzan.net/e/space/?userid=191883?feed_filter=/ha/2016-09-02/516489.html
http://ddzan.net/e/space/?userid=191884?feed_filter=/bq/2016-09-02/895173.html
http://ddzan.net/e/space/?userid=191885?feed_filter=/al/2016-09-02/430916.html
http://ddzan.net/e/space/?userid=191886?feed_filter=/tb/2016-09-02/570362.html
http://ddzan.net/e/space/?userid=191887?feed_filter=/te/2016-09-02/012865.html
http://ddzan.net/e/space/?userid=191888?feed_filter=/hj/2016-09-02/253419.html
http://ddzan.net/e/space/?userid=191889?feed_filter=/mi/2016-09-02/192657.html
http://ddzan.net/e/space/?userid=191890?feed_filter=/fc/2016-09-02/824691.html
http://ddzan.net/e/space/?userid=191891?feed_filter=/se/2016-09-02/705614.html
http://ddzan.net/e/space/?userid=191892?feed_filter=/ik/2016-09-02/098473.html
http://ddzan.net/e/space/?userid=191893?feed_filter=/om/2016-09-02/839517.html
http://ddzan.net/e/space/?userid=191894?feed_filter=/om/2016-09-02/765984.html
http://ddzan.net/e/space/?userid=191895?feed_filter=/he/2016-09-02/579461.html
http://ddzan.net/e/space/?userid=191896?feed_filter=/ia/2016-09-02/934167.html
http://ddzan.net/e/space/?userid=191897?feed_filter=/jb/2016-09-02/850912.html
http://ddzan.net/e/space/?userid=191898?feed_filter=/pk/2016-09-02/824317.html
http://ddzan.net/e/space/?userid=191899?feed_filter=/gm/2016-09-02/219468.html
http://ddzan.net/e/space/?userid=191900?feed_filter=/uj/2016-09-02/481762.html
http://ddzan.net/e/space/?userid=191901?feed_filter=/kw/2016-09-02/629517.html
http://ddzan.net/e/space/?userid=191902?feed_filter=/qe/2016-09-02/692038.html
http://ddzan.net/e/space/?userid=191903?feed_filter=/nx/2016-09-02/549608.html
http://ddzan.net/e/space/?userid=191904?feed_filter=/sb/2016-09-02/281396.html
http://ddzan.net/e/space/?userid=191905?feed_filter=/sl/2016-09-02/725680.html
http://ddzan.net/e/space/?userid=191906?feed_filter=/ha/2016-09-02/503278.html
http://ddzan.net/e/space/?userid=191907?feed_filter=/fm/2016-09-02/018527.html
http://ddzan.net/e/space/?userid=191908?feed_filter=/pi/2016-09-02/021758.html
http://ddzan.net/e/space/?userid=191909?feed_filter=/zm/2016-09-02/821053.html
http://ddzan.net/e/space/?userid=191910?feed_filter=/jr/2016-09-02/681574.html
http://ddzan.net/e/space/?userid=191911?feed_filter=/id/2016-09-02/876234.html
http://ddzan.net/e/space/?userid=191912?feed_filter=/tw/2016-09-02/095476.html
http://ddzan.net/e/space/?userid=191913?feed_filter=/he/2016-09-02/497325.html
http://ddzan.net/e/space/?userid=191914?feed_filter=/gp/2016-09-02/017498.html
http://ddzan.net/e/space/?userid=191915?feed_filter=/bt/2016-09-02/384526.html
http://ddzan.net/e/space/?userid=191916?feed_filter=/lo/2016-09-02/023164.html
http://ddzan.net/e/space/?userid=191917?feed_filter=/ec/2016-09-02/107653.html
http://ddzan.net/e/space/?userid=191918?feed_filter=/wz/2016-09-02/140825.html
http://ddzan.net/e/space/?userid=191919?feed_filter=/mv/2016-09-02/935642.html
http://ddzan.net/e/space/?userid=191920?feed_filter=/hu/2016-09-02/295376.html
http://ddzan.net/e/space/?userid=191921?feed_filter=/bj/2016-09-02/506972.html
http://ddzan.net/e/space/?userid=191922?feed_filter=/sp/2016-09-02/628097.html
http://ddzan.net/e/space/?userid=191923?feed_filter=/rg/2016-09-02/891670.html
http://ddzan.net/e/space/?userid=191924?feed_filter=/vy/2016-09-02/418375.html
http://ddzan.net/e/space/?userid=191925?feed_filter=/ba/2016-09-02/379148.html
http://ddzan.net/e/space/?userid=191926?feed_filter=/lc/2016-09-02/254316.html
http://ddzan.net/e/space/?userid=191927?feed_filter=/dz/2016-09-02/823917.html
http://ddzan.net/e/space/?userid=191928?feed_filter=/ra/2016-09-02/086395.html
http://ddzan.net/e/space/?userid=191929?feed_filter=/xl/2016-09-02/412736.html
http://ddzan.net/e/space/?userid=191930?feed_filter=/em/2016-09-02/980367.html
http://ddzan.net/e/space/?userid=191931?feed_filter=/xh/2016-09-02/961452.html
http://ddzan.net/e/space/?userid=191932?feed_filter=/ub/2016-09-02/876153.html
http://ddzan.net/e/space/?userid=191933?feed_filter=/qh/2016-09-02/489162.html
http://ddzan.net/e/space/?userid=191934?feed_filter=/sl/2016-09-02/354968.html
http://ddzan.net/e/space/?userid=191935?feed_filter=/ea/2016-09-02/546079.html
http://ddzan.net/e/space/?userid=191936?feed_filter=/hv/2016-09-02/025147.html
http://ddzan.net/e/space/?userid=191937?feed_filter=/ry/2016-09-02/817324.html
http://ddzan.net/e/space/?userid=191938?feed_filter=/zp/2016-09-02/142870.html
http://ddzan.net/e/space/?userid=191939?feed_filter=/id/2016-09-02/863572.html
http://ddzan.net/e/space/?userid=191940?feed_filter=/ln/2016-09-02/893467.html
http://ddzan.net/e/space/?userid=191941?feed_filter=/nw/2016-09-02/326871.html
http://ddzan.net/e/space/?userid=191942?feed_filter=/tu/2016-09-02/208314.html
http://ddzan.net/e/space/?userid=191943?feed_filter=/wg/2016-09-02/351290.html
http://ddzan.net/e/space/?userid=191944?feed_filter=/wg/2016-09-02/529861.html
http://ddzan.net/e/space/?userid=191945?feed_filter=/ye/2016-09-02/972365.html
http://ddzan.net/e/space/?userid=191946?feed_filter=/pn/2016-09-02/895726.html
http://ddzan.net/e/space/?userid=191947?feed_filter=/nl/2016-09-02/412053.html
http://ddzan.net/e/space/?userid=191948?feed_filter=/xg/2016-09-02/287561.html
http://ddzan.net/e/space/?userid=191949?feed_filter=/eo/2016-09-02/068173.html
http://ddzan.net/e/space/?userid=191950?feed_filter=/fu/2016-09-02/084293.html
http://ddzan.net/e/space/?userid=191951?feed_filter=/wd/2016-09-02/167592.html
http://ddzan.net/e/space/?userid=191952?feed_filter=/ve/2016-09-02/897534.html
http://ddzan.net/e/space/?userid=191953?feed_filter=/ek/2016-09-02/815760.html
http://ddzan.net/e/space/?userid=191954?feed_filter=/kj/2016-09-02/714365.html
http://ddzan.net/e/space/?userid=191955?feed_filter=/db/2016-09-02/905127.html
http://ddzan.net/e/space/?userid=191956?feed_filter=/kf/2016-09-02/902478.html
http://ddzan.net/e/space/?userid=191957?feed_filter=/xc/2016-09-02/498253.html
http://ddzan.net/e/space/?userid=191958?feed_filter=/nt/2016-09-02/125974.html
http://ddzan.net/e/space/?userid=191959?feed_filter=/pd/2016-09-02/465370.html
http://ddzan.net/e/space/?userid=191960?feed_filter=/ce/2016-09-02/524193.html
http://ddzan.net/e/space/?userid=191961?feed_filter=/mz/2016-09-02/612093.html
http://ddzan.net/e/space/?userid=191962?feed_filter=/aw/2016-09-02/138206.html
http://ddzan.net/e/space/?userid=191963?feed_filter=/wc/2016-09-02/275863.html
http://ddzan.net/e/space/?userid=191964?feed_filter=/kn/2016-09-02/930128.html
http://ddzan.net/e/space/?userid=191965?feed_filter=/rj/2016-09-02/069182.html
http://ddzan.net/e/space/?userid=191966?feed_filter=/hj/2016-09-02/762801.html
http://ddzan.net/e/space/?userid=191967?feed_filter=/hq/2016-09-02/137954.html
http://ddzan.net/e/space/?userid=191968?feed_filter=/ky/2016-09-02/852930.html
http://ddzan.net/e/space/?userid=191969?feed_filter=/gv/2016-09-02/032586.html
http://ddzan.net/e/space/?userid=191970?feed_filter=/hs/2016-09-02/847061.html
http://ddzan.net/e/space/?userid=191971?feed_filter=/ew/2016-09-02/601245.html
http://ddzan.net/e/space/?userid=191972?feed_filter=/td/2016-09-02/807129.html
http://ddzan.net/e/space/?userid=191973?feed_filter=/qs/2016-09-02/165379.html
http://ddzan.net/e/space/?userid=191974?feed_filter=/pj/2016-09-02/762840.html
http://ddzan.net/e/space/?userid=191975?feed_filter=/yq/2016-09-02/403952.html
http://ddzan.net/e/space/?userid=191976?feed_filter=/cw/2016-09-02/089163.html
http://ddzan.net/e/space/?userid=191977?feed_filter=/hy/2016-09-02/935687.html
http://ddzan.net/e/space/?userid=191978?feed_filter=/qp/2016-09-02/590321.html
http://ddzan.net/e/space/?userid=191979?feed_filter=/st/2016-09-02/820167.html
http://ddzan.net/e/space/?userid=191980?feed_filter=/qz/2016-09-02/497035.html
http://ddzan.net/e/space/?userid=191981?feed_filter=/ch/2016-09-02/542309.html
http://ddzan.net/e/space/?userid=191982?feed_filter=/ij/2016-09-02/159308.html
http://ddzan.net/e/space/?userid=191983?feed_filter=/pr/2016-09-02/354697.html
http://ddzan.net/e/space/?userid=191984?feed_filter=/mx/2016-09-02/410982.html
http://ddzan.net/e/space/?userid=191985?feed_filter=/le/2016-09-02/362197.html
http://ddzan.net/e/space/?userid=191986?feed_filter=/yb/2016-09-02/746901.html
http://ddzan.net/e/space/?userid=191987?feed_filter=/he/2016-09-02/463085.html
http://ddzan.net/e/space/?userid=191988?feed_filter=/tv/2016-09-02/324098.html
http://ddzan.net/e/space/?userid=191989?feed_filter=/gk/2016-09-02/624903.html
http://ddzan.net/e/space/?userid=191990?feed_filter=/kj/2016-09-02/352469.html
http://ddzan.net/e/space/?userid=191991?feed_filter=/hp/2016-09-02/376159.html
http://ddzan.net/e/space/?userid=191992?feed_filter=/br/2016-09-02/384619.html
http://ddzan.net/e/space/?userid=191993?feed_filter=/vx/2016-09-02/385216.html
http://ddzan.net/e/space/?userid=191994?feed_filter=/hv/2016-09-02/251840.html
http://ddzan.net/e/space/?userid=191995?feed_filter=/sj/2016-09-02/168927.html
http://ddzan.net/e/space/?userid=191996?feed_filter=/ic/2016-09-02/824370.html
http://ddzan.net/e/space/?userid=191997?feed_filter=/yh/2016-09-02/659210.html
http://ddzan.net/e/space/?userid=191998?feed_filter=/ma/2016-09-02/570621.html
http://ddzan.net/e/space/?userid=191999?feed_filter=/ox/2016-09-02/835096.html
http://ddzan.net/e/space/?userid=192000?feed_filter=/zv/2016-09-02/765182.html
http://ddzan.net/e/space/?userid=192001?feed_filter=/it/2016-09-02/248539.html
http://ddzan.net/e/space/?userid=192002?feed_filter=/oy/2016-09-02/560837.html
http://ddzan.net/e/space/?userid=192003?feed_filter=/du/2016-09-02/950318.html
http://ddzan.net/e/space/?userid=192004?feed_filter=/li/2016-09-02/235619.html
http://ddzan.net/e/space/?userid=192005?feed_filter=/eo/2016-09-02/785269.html
http://ddzan.net/e/space/?userid=192006?feed_filter=/cm/2016-09-02/230419.html
http://ddzan.net/e/space/?userid=192007?feed_filter=/zr/2016-09-02/436058.html
http://ddzan.net/e/space/?userid=192008?feed_filter=/hp/2016-09-02/427061.html
http://ddzan.net/e/space/?userid=192009?feed_filter=/je/2016-09-02/918674.html
http://ddzan.net/e/space/?userid=192010?feed_filter=/lr/2016-09-02/627905.html
http://ddzan.net/e/space/?userid=192011?feed_filter=/ja/2016-09-02/584107.html
http://ddzan.net/e/space/?userid=192012?feed_filter=/su/2016-09-02/943172.html
http://ddzan.net/e/space/?userid=192013?feed_filter=/il/2016-09-02/845073.html
http://ddzan.net/e/space/?userid=192014?feed_filter=/gw/2016-09-02/923016.html
http://ddzan.net/e/space/?userid=192015?feed_filter=/yz/2016-09-02/026759.html
http://ddzan.net/e/space/?userid=192016?feed_filter=/qc/2016-09-02/946587.html
http://ddzan.net/e/space/?userid=192017?feed_filter=/fe/2016-09-02/854927.html
http://ddzan.net/e/space/?userid=192018?feed_filter=/jd/2016-09-02/716340.html
http://ddzan.net/e/space/?userid=192019?feed_filter=/qo/2016-09-02/580429.html
http://ddzan.net/e/space/?userid=192020?feed_filter=/eg/2016-09-02/381570.html
http://ddzan.net/e/space/?userid=192021?feed_filter=/qi/2016-09-02/382960.html
http://ddzan.net/e/space/?userid=192022?feed_filter=/ei/2016-09-02/764125.html
http://ddzan.net/e/space/?userid=192023?feed_filter=/zb/2016-09-02/893647.html
http://ddzan.net/e/space/?userid=192024?feed_filter=/cj/2016-09-02/852943.html
http://ddzan.net/e/space/?userid=192025?feed_filter=/hz/2016-09-02/830476.html
http://ddzan.net/e/space/?userid=192026?feed_filter=/ai/2016-09-02/516470.html
http://ddzan.net/e/space/?userid=192027?feed_filter=/tg/2016-09-02/205473.html
http://ddzan.net/e/space/?userid=192028?feed_filter=/zw/2016-09-02/453870.html
http://ddzan.net/e/space/?userid=192029?feed_filter=/je/2016-09-02/610842.html
http://ddzan.net/e/space/?userid=192030?feed_filter=/qp/2016-09-02/764918.html
http://ddzan.net/e/space/?userid=192031?feed_filter=/hu/2016-09-02/429513.html
http://ddzan.net/e/space/?userid=192032?feed_filter=/pr/2016-09-02/149532.html
http://ddzan.net/e/space/?userid=192033?feed_filter=/cj/2016-09-02/520791.html
http://ddzan.net/e/space/?userid=192034?feed_filter=/le/2016-09-02/495761.html
http://ddzan.net/e/space/?userid=192035?feed_filter=/vg/2016-09-02/042167.html
http://ddzan.net/e/space/?userid=192036?feed_filter=/am/2016-09-02/514728.html
http://ddzan.net/e/space/?userid=192037?feed_filter=/iw/2016-09-02/059618.html
http://ddzan.net/e/space/?userid=192038?feed_filter=/ip/2016-09-02/257306.html
http://ddzan.net/e/space/?userid=192039?feed_filter=/gx/2016-09-02/073461.html
http://ddzan.net/e/space/?userid=192040?feed_filter=/sc/2016-09-02/682904.html
http://ddzan.net/e/space/?userid=192041?feed_filter=/co/2016-09-02/970351.html
http://ddzan.net/e/space/?userid=192042?feed_filter=/rn/2016-09-02/104725.html
http://ddzan.net/e/space/?userid=192043?feed_filter=/av/2016-09-02/265048.html
http://ddzan.net/e/space/?userid=192044?feed_filter=/hf/2016-09-02/230541.html
http://ddzan.net/e/space/?userid=192045?feed_filter=/ye/2016-09-02/821650.html
http://ddzan.net/e/space/?userid=192046?feed_filter=/ky/2016-09-02/613247.html
http://ddzan.net/e/space/?userid=192047?feed_filter=/ke/2016-09-02/607253.html
http://ddzan.net/e/space/?userid=192048?feed_filter=/lz/2016-09-02/781593.html
http://ddzan.net/e/space/?userid=192049?feed_filter=/ha/2016-09-02/759643.html
http://ddzan.net/e/space/?userid=192050?feed_filter=/vs/2016-09-02/284610.html
http://ddzan.net/e/space/?userid=192051?feed_filter=/to/2016-09-02/017265.html
http://ddzan.net/e/space/?userid=192052?feed_filter=/jf/2016-09-02/853629.html
http://ddzan.net/e/space/?userid=192053?feed_filter=/in/2016-09-02/724153.html
http://ddzan.net/e/space/?userid=192054?feed_filter=/qp/2016-09-02/873025.html
http://ddzan.net/e/space/?userid=192055?feed_filter=/vb/2016-09-02/015476.html
http://ddzan.net/e/space/?userid=192056?feed_filter=/qi/2016-09-02/895671.html
http://ddzan.net/e/space/?userid=192057?feed_filter=/ae/2016-09-02/095721.html
http://ddzan.net/e/space/?userid=192058?feed_filter=/nb/2016-09-02/573169.html
http://ddzan.net/e/space/?userid=192059?feed_filter=/cv/2016-09-02/162794.html
http://ddzan.net/e/space/?userid=192060?feed_filter=/wl/2016-09-02/140873.html
http://ddzan.net/e/space/?userid=192061?feed_filter=/xa/2016-09-02/426173.html
http://ddzan.net/e/space/?userid=192062?feed_filter=/yo/2016-09-02/413079.html
http://ddzan.net/e/space/?userid=192063?feed_filter=/ju/2016-09-02/914783.html
http://ddzan.net/e/space/?userid=192064?feed_filter=/js/2016-09-02/019647.html
http://ddzan.net/e/space/?userid=192065?feed_filter=/pa/2016-09-02/378526.html
http://ddzan.net/e/space/?userid=192066?feed_filter=/sh/2016-09-02/675438.html
http://ddzan.net/e/space/?userid=192067?feed_filter=/mo/2016-09-02/962174.html
http://ddzan.net/e/space/?userid=192068?feed_filter=/fo/2016-09-02/613294.html
http://ddzan.net/e/space/?userid=192069?feed_filter=/op/2016-09-02/412307.html
http://ddzan.net/e/space/?userid=192070?feed_filter=/rx/2016-09-02/047892.html
http://ddzan.net/e/space/?userid=192071?feed_filter=/to/2016-09-02/648391.html
http://ddzan.net/e/space/?userid=192072?feed_filter=/jy/2016-09-02/467592.html
http://ddzan.net/e/space/?userid=192073?feed_filter=/xv/2016-09-02/517684.html
http://ddzan.net/e/space/?userid=192074?feed_filter=/zu/2016-09-02/728965.html
http://ddzan.net/e/space/?userid=192075?feed_filter=/nh/2016-09-02/170258.html
http://ddzan.net/e/space/?userid=192076?feed_filter=/ze/2016-09-02/701342.html
http://ddzan.net/e/space/?userid=192077?feed_filter=/fm/2016-09-02/943268.html
http://ddzan.net/e/space/?userid=192078?feed_filter=/uq/2016-09-02/015879.html
http://ddzan.net/e/space/?userid=192079?feed_filter=/xa/2016-09-02/703846.html
http://ddzan.net/e/space/?userid=192080?feed_filter=/so/2016-09-02/718230.html
http://ddzan.net/e/space/?userid=192081?feed_filter=/dv/2016-09-02/892360.html
http://ddzan.net/e/space/?userid=192082?feed_filter=/zr/2016-09-02/695210.html
http://ddzan.net/e/space/?userid=192083?feed_filter=/ot/2016-09-02/109368.html
http://ddzan.net/e/space/?userid=192084?feed_filter=/nj/2016-09-02/247053.html
http://ddzan.net/e/space/?userid=192085?feed_filter=/gl/2016-09-02/896741.html
http://ddzan.net/e/space/?userid=192086?feed_filter=/tj/2016-09-02/361980.html
http://ddzan.net/e/space/?userid=192087?feed_filter=/ox/2016-09-02/346198.html
http://ddzan.net/e/space/?userid=192088?feed_filter=/zn/2016-09-02/742560.html
http://ddzan.net/e/space/?userid=192089?feed_filter=/pz/2016-09-02/630297.html
http://ddzan.net/e/space/?userid=192090?feed_filter=/iu/2016-09-02/802796.html
http://ddzan.net/e/space/?userid=192091?feed_filter=/zu/2016-09-02/258410.html
http://ddzan.net/e/space/?userid=192092?feed_filter=/vn/2016-09-02/761392.html
http://ddzan.net/e/space/?userid=192093?feed_filter=/xr/2016-09-02/345896.html
http://ddzan.net/e/space/?userid=192094?feed_filter=/bu/2016-09-02/934257.html
http://ddzan.net/e/space/?userid=192095?feed_filter=/pn/2016-09-02/950364.html
http://ddzan.net/e/space/?userid=192096?feed_filter=/uf/2016-09-02/628075.html
http://ddzan.net/e/space/?userid=192097?feed_filter=/gw/2016-09-02/407925.html
http://ddzan.net/e/space/?userid=192098?feed_filter=/ml/2016-09-02/812034.html
http://ddzan.net/e/space/?userid=192099?feed_filter=/ih/2016-09-02/139652.html
http://ddzan.net/e/space/?userid=192100?feed_filter=/xm/2016-09-02/742398.html
http://ddzan.net/e/space/?userid=192101?feed_filter=/jh/2016-09-02/439075.html
http://ddzan.net/e/space/?userid=192102?feed_filter=/nd/2016-09-02/937120.html
http://ddzan.net/e/space/?userid=192103?feed_filter=/rw/2016-09-02/465809.html
http://ddzan.net/e/space/?userid=192104?feed_filter=/fp/2016-09-02/876549.html
http://ddzan.net/e/space/?userid=192105?feed_filter=/ve/2016-09-02/123687.html
http://ddzan.net/e/space/?userid=192106?feed_filter=/eh/2016-09-02/102687.html
http://ddzan.net/e/space/?userid=192107?feed_filter=/my/2016-09-02/078432.html
http://ddzan.net/e/space/?userid=192108?feed_filter=/lp/2016-09-02/680591.html
http://ddzan.net/e/space/?userid=192109?feed_filter=/px/2016-09-02/123650.html
http://ddzan.net/e/space/?userid=192110?feed_filter=/ut/2016-09-02/650412.html
http://ddzan.net/e/space/?userid=192111?feed_filter=/zs/2016-09-02/293541.html
http://ddzan.net/e/space/?userid=192112?feed_filter=/pq/2016-09-02/350172.html
http://ddzan.net/e/space/?userid=192113?feed_filter=/zo/2016-09-02/047651.html
http://ddzan.net/e/space/?userid=192114?feed_filter=/md/2016-09-02/049532.html
http://ddzan.net/e/space/?userid=192115?feed_filter=/wr/2016-09-02/329816.html
http://ddzan.net/e/space/?userid=192116?feed_filter=/hm/2016-09-02/413679.html
http://ddzan.net/e/space/?userid=192117?feed_filter=/if/2016-09-02/231985.html
http://ddzan.net/e/space/?userid=192118?feed_filter=/pf/2016-09-02/091623.html
http://ddzan.net/e/space/?userid=192119?feed_filter=/td/2016-09-02/896152.html
http://ddzan.net/e/space/?userid=192120?feed_filter=/hm/2016-09-02/012793.html
http://ddzan.net/e/space/?userid=192121?feed_filter=/ji/2016-09-02/123409.html
http://ddzan.net/e/space/?userid=192122?feed_filter=/ld/2016-09-02/932705.html
http://ddzan.net/e/space/?userid=192123?feed_filter=/nu/2016-09-02/370946.html
http://ddzan.net/e/space/?userid=192124?feed_filter=/jg/2016-09-02/253870.html
http://ddzan.net/e/space/?userid=192125?feed_filter=/ux/2016-09-02/615298.html
http://ddzan.net/e/space/?userid=192126?feed_filter=/rt/2016-09-02/209136.html
http://ddzan.net/e/space/?userid=192127?feed_filter=/ai/2016-09-02/790186.html
http://ddzan.net/e/space/?userid=192128?feed_filter=/do/2016-09-02/410728.html
http://ddzan.net/e/space/?userid=192129?feed_filter=/hl/2016-09-02/463591.html
http://ddzan.net/e/space/?userid=192130?feed_filter=/ps/2016-09-02/605273.html
http://ddzan.net/e/space/?userid=192131?feed_filter=/fs/2016-09-02/095847.html
http://ddzan.net/e/space/?userid=192132?feed_filter=/hn/2016-09-02/908647.html
http://ddzan.net/e/space/?userid=192133?feed_filter=/gh/2016-09-02/893265.html
http://ddzan.net/e/space/?userid=192134?feed_filter=/jm/2016-09-02/608795.html
http://ddzan.net/e/space/?userid=192135?feed_filter=/tj/2016-09-02/428796.html
http://ddzan.net/e/space/?userid=192136?feed_filter=/hn/2016-09-02/860135.html
http://ddzan.net/e/space/?userid=192137?feed_filter=/qj/2016-09-02/340786.html
http://ddzan.net/e/space/?userid=192138?feed_filter=/qs/2016-09-02/547932.html
http://ddzan.net/e/space/?userid=192139?feed_filter=/al/2016-09-02/142698.html
http://ddzan.net/e/space/?userid=192140?feed_filter=/id/2016-09-02/364018.html
http://ddzan.net/e/space/?userid=192141?feed_filter=/by/2016-09-02/014287.html
http://ddzan.net/e/space/?userid=192142?feed_filter=/pb/2016-09-02/206189.html
http://ddzan.net/e/space/?userid=192143?feed_filter=/uk/2016-09-02/596237.html
http://ddzan.net/e/space/?userid=192144?feed_filter=/je/2016-09-02/930812.html
http://ddzan.net/e/space/?userid=192145?feed_filter=/uj/2016-09-02/539271.html
http://ddzan.net/e/space/?userid=192146?feed_filter=/oc/2016-09-02/903265.html
http://ddzan.net/e/space/?userid=192147?feed_filter=/em/2016-09-02/057436.html
http://ddzan.net/e/space/?userid=192148?feed_filter=/bz/2016-09-02/869253.html
http://ddzan.net/e/space/?userid=192149?feed_filter=/yt/2016-09-02/076145.html
http://ddzan.net/e/space/?userid=192150?feed_filter=/pc/2016-09-02/042387.html
http://ddzan.net/e/space/?userid=192151?feed_filter=/hn/2016-09-02/951764.html
http://ddzan.net/e/space/?userid=192152?feed_filter=/za/2016-09-02/036279.html
http://ddzan.net/e/space/?userid=192153?feed_filter=/sh/2016-09-02/694231.html
http://ddzan.net/e/space/?userid=192154?feed_filter=/se/2016-09-02/420359.html
http://ddzan.net/e/space/?userid=192155?feed_filter=/ho/2016-09-02/457096.html
http://ddzan.net/e/space/?userid=192156?feed_filter=/sh/2016-09-02/016385.html
http://ddzan.net/e/space/?userid=192157?feed_filter=/cs/2016-09-02/579410.html
http://ddzan.net/e/space/?userid=192158?feed_filter=/ly/2016-09-02/912786.html
http://ddzan.net/e/space/?userid=192159?feed_filter=/pc/2016-09-02/029716.html
http://ddzan.net/e/space/?userid=192160?feed_filter=/nz/2016-09-02/165479.html
http://ddzan.net/e/space/?userid=192161?feed_filter=/rs/2016-09-02/108945.html
http://ddzan.net/e/space/?userid=192162?feed_filter=/mt/2016-09-02/802197.html
http://ddzan.net/e/space/?userid=192163?feed_filter=/fc/2016-09-02/319028.html
http://ddzan.net/e/space/?userid=192164?feed_filter=/gy/2016-09-02/860541.html
http://ddzan.net/e/space/?userid=192165?feed_filter=/gp/2016-09-02/817594.html
http://ddzan.net/e/space/?userid=192166?feed_filter=/ej/2016-09-02/702863.html
http://ddzan.net/e/space/?userid=192167?feed_filter=/ta/2016-09-02/049638.html
http://ddzan.net/e/space/?userid=192168?feed_filter=/ib/2016-09-02/802315.html
http://ddzan.net/e/space/?userid=192169?feed_filter=/wp/2016-09-02/739084.html
http://ddzan.net/e/space/?userid=192170?feed_filter=/rp/2016-09-02/263045.html
http://ddzan.net/e/space/?userid=192171?feed_filter=/ex/2016-09-02/918503.html
http://ddzan.net/e/space/?userid=192172?feed_filter=/ks/2016-09-02/319852.html
http://ddzan.net/e/space/?userid=192173?feed_filter=/gq/2016-09-02/972138.html
http://ddzan.net/e/space/?userid=192174?feed_filter=/mu/2016-09-02/705192.html
http://ddzan.net/e/space/?userid=192175?feed_filter=/ot/2016-09-02/570438.html
http://ddzan.net/e/space/?userid=192176?feed_filter=/zc/2016-09-02/035714.html
http://ddzan.net/e/space/?userid=192177?feed_filter=/lc/2016-09-02/107496.html
http://ddzan.net/e/space/?userid=192178?feed_filter=/vu/2016-09-02/937048.html
http://ddzan.net/e/space/?userid=192179?feed_filter=/px/2016-09-02/517906.html
http://ddzan.net/e/space/?userid=192180?feed_filter=/ai/2016-09-02/628970.html
http://ddzan.net/e/space/?userid=192181?feed_filter=/lk/2016-09-02/126750.html
http://ddzan.net/e/space/?userid=192182?feed_filter=/rt/2016-09-02/827135.html
http://ddzan.net/e/space/?userid=192183?feed_filter=/bo/2016-09-02/381205.html
http://ddzan.net/e/space/?userid=192184?feed_filter=/st/2016-09-02/680519.html
http://ddzan.net/e/space/?userid=192185?feed_filter=/bs/2016-09-02/493820.html
http://ddzan.net/e/space/?userid=192186?feed_filter=/zn/2016-09-02/758610.html
http://ddzan.net/e/space/?userid=192187?feed_filter=/au/2016-09-02/062347.html
http://ddzan.net/e/space/?userid=192188?feed_filter=/fm/2016-09-02/928564.html
http://ddzan.net/e/space/?userid=192189?feed_filter=/kb/2016-09-02/613987.html
http://ddzan.net/e/space/?userid=192190?feed_filter=/ja/2016-09-02/976835.html
http://ddzan.net/e/space/?userid=192191?feed_filter=/an/2016-09-02/285973.html
http://ddzan.net/e/space/?userid=192192?feed_filter=/zs/2016-09-02/038275.html
http://ddzan.net/e/space/?userid=192193?feed_filter=/ka/2016-09-02/819734.html
http://ddzan.net/e/space/?userid=192194?feed_filter=/wz/2016-09-02/945018.html
http://ddzan.net/e/space/?userid=192195?feed_filter=/qi/2016-09-02/635108.html
http://ddzan.net/e/space/?userid=192196?feed_filter=/lx/2016-09-02/037512.html
http://ddzan.net/e/space/?userid=192197?feed_filter=/ag/2016-09-02/786912.html
http://ddzan.net/e/space/?userid=192198?feed_filter=/rt/2016-09-02/096532.html
http://ddzan.net/e/space/?userid=192199?feed_filter=/fu/2016-09-02/921087.html
http://ddzan.net/e/space/?userid=192200?feed_filter=/py/2016-09-02/803196.html
http://ddzan.net/e/space/?userid=192201?feed_filter=/vp/2016-09-02/587234.html
http://ddzan.net/e/space/?userid=192202?feed_filter=/ts/2016-09-02/245397.html
http://ddzan.net/e/space/?userid=192203?feed_filter=/ec/2016-09-02/321678.html
http://ddzan.net/e/space/?userid=192204?feed_filter=/qe/2016-09-02/652407.html
http://ddzan.net/e/space/?userid=192205?feed_filter=/ek/2016-09-02/063859.html
http://ddzan.net/e/space/?userid=192206?feed_filter=/nz/2016-09-02/342607.html
http://ddzan.net/e/space/?userid=192207?feed_filter=/bt/2016-09-02/214695.html
http://ddzan.net/e/space/?userid=192208?feed_filter=/bm/2016-09-02/814623.html
http://ddzan.net/e/space/?userid=192209?feed_filter=/vo/2016-09-02/073162.html
http://ddzan.net/e/space/?userid=192210?feed_filter=/vo/2016-09-02/429786.html
http://ddzan.net/e/space/?userid=192211?feed_filter=/aw/2016-09-02/749853.html
http://ddzan.net/e/space/?userid=192212?feed_filter=/gl/2016-09-02/497806.html
http://ddzan.net/e/space/?userid=192213?feed_filter=/wb/2016-09-02/539108.html
http://ddzan.net/e/space/?userid=192214?feed_filter=/pt/2016-09-02/659237.html
http://ddzan.net/e/space/?userid=192215?feed_filter=/fe/2016-09-02/167925.html
http://ddzan.net/e/space/?userid=192216?feed_filter=/tp/2016-09-02/761805.html
http://ddzan.net/e/space/?userid=192217?feed_filter=/rk/2016-09-02/106452.html
http://ddzan.net/e/space/?userid=192218?feed_filter=/dq/2016-09-02/708493.html
http://ddzan.net/e/space/?userid=192219?feed_filter=/mn/2016-09-02/873062.html
http://ddzan.net/e/space/?userid=192220?feed_filter=/de/2016-09-02/675284.html
http://ddzan.net/e/space/?userid=192221?feed_filter=/od/2016-09-02/027916.html
http://ddzan.net/e/space/?userid=192222?feed_filter=/yq/2016-09-02/951302.html
http://ddzan.net/e/space/?userid=192223?feed_filter=/it/2016-09-02/283751.html
http://ddzan.net/e/space/?userid=192224?feed_filter=/qw/2016-09-02/095741.html
http://ddzan.net/e/space/?userid=192225?feed_filter=/nw/2016-09-02/415738.html
http://ddzan.net/e/space/?userid=192226?feed_filter=/qh/2016-09-02/810752.html
http://ddzan.net/e/space/?userid=192227?feed_filter=/og/2016-09-02/658429.html
http://ddzan.net/e/space/?userid=192228?feed_filter=/fw/2016-09-02/824679.html
http://ddzan.net/e/space/?userid=192229?feed_filter=/uf/2016-09-02/962374.html
http://ddzan.net/e/space/?userid=192230?feed_filter=/th/2016-09-02/684059.html
http://ddzan.net/e/space/?userid=192231?feed_filter=/wn/2016-09-02/503147.html
http://ddzan.net/e/space/?userid=192232?feed_filter=/de/2016-09-02/695472.html
http://ddzan.net/e/space/?userid=192233?feed_filter=/uz/2016-09-02/341769.html
http://ddzan.net/e/space/?userid=192234?feed_filter=/et/2016-09-02/851769.html
http://ddzan.net/e/space/?userid=192235?feed_filter=/fp/2016-09-02/354196.html
http://ddzan.net/e/space/?userid=192236?feed_filter=/ov/2016-09-02/082173.html
http://ddzan.net/e/space/?userid=192237?feed_filter=/kl/2016-09-02/580497.html
http://ddzan.net/e/space/?userid=192238?feed_filter=/rj/2016-09-02/912784.html
http://ddzan.net/e/space/?userid=192239?feed_filter=/wd/2016-09-02/693258.html
http://ddzan.net/e/space/?userid=192240?feed_filter=/xp/2016-09-02/741308.html
http://ddzan.net/e/space/?userid=192241?feed_filter=/qi/2016-09-02/429015.html
http://ddzan.net/e/space/?userid=192242?feed_filter=/lv/2016-09-02/156073.html
http://ddzan.net/e/space/?userid=192243?feed_filter=/qe/2016-09-02/507649.html
http://ddzan.net/e/space/?userid=192244?feed_filter=/ub/2016-09-02/760523.html
http://ddzan.net/e/space/?userid=192245?feed_filter=/wd/2016-09-02/536792.html
http://ddzan.net/e/space/?userid=192246?feed_filter=/yf/2016-09-02/034512.html
http://ddzan.net/e/space/?userid=192247?feed_filter=/ea/2016-09-02/561892.html
http://ddzan.net/e/space/?userid=192248?feed_filter=/oc/2016-09-02/601283.html
http://ddzan.net/e/space/?userid=192249?feed_filter=/hw/2016-09-02/163498.html
http://ddzan.net/e/space/?userid=192250?feed_filter=/dh/2016-09-02/682075.html
http://ddzan.net/e/space/?userid=192251?feed_filter=/mr/2016-09-02/802543.html
http://ddzan.net/e/space/?userid=192252?feed_filter=/pr/2016-09-02/594680.html
http://ddzan.net/e/space/?userid=192253?feed_filter=/ft/2016-09-02/564829.html
http://ddzan.net/e/space/?userid=192254?feed_filter=/kj/2016-09-02/819074.html
http://ddzan.net/e/space/?userid=192255?feed_filter=/oj/2016-09-02/569842.html
http://ddzan.net/e/space/?userid=192256?feed_filter=/lf/2016-09-02/523719.html
http://ddzan.net/e/space/?userid=192257?feed_filter=/xn/2016-09-02/485902.html
http://ddzan.net/e/space/?userid=192258?feed_filter=/al/2016-09-02/961253.html
http://ddzan.net/e/space/?userid=192259?feed_filter=/xi/2016-09-02/236481.html
http://ddzan.net/e/space/?userid=192260?feed_filter=/ag/2016-09-02/670853.html
http://ddzan.net/e/space/?userid=192261?feed_filter=/yt/2016-09-02/741523.html
http://ddzan.net/e/space/?userid=192262?feed_filter=/pa/2016-09-02/267459.html
http://ddzan.net/e/space/?userid=192263?feed_filter=/st/2016-09-02/372014.html
http://ddzan.net/e/space/?userid=192264?feed_filter=/vh/2016-09-02/786935.html
http://ddzan.net/e/space/?userid=192265?feed_filter=/ys/2016-09-02/834715.html
http://ddzan.net/e/space/?userid=192266?feed_filter=/ev/2016-09-02/145029.html
http://ddzan.net/e/space/?userid=192267?feed_filter=/kd/2016-09-02/384176.html
http://ddzan.net/e/space/?userid=192268?feed_filter=/yj/2016-09-02/374916.html
http://ddzan.net/e/space/?userid=192269?feed_filter=/bo/2016-09-02/958037.html
http://ddzan.net/e/space/?userid=192270?feed_filter=/tg/2016-09-02/145209.html
http://ddzan.net/e/space/?userid=192271?feed_filter=/lr/2016-09-02/635104.html
http://ddzan.net/e/space/?userid=192272?feed_filter=/ep/2016-09-02/032871.html
http://ddzan.net/e/space/?userid=192273?feed_filter=/ka/2016-09-02/279051.html
http://ddzan.net/e/space/?userid=192274?feed_filter=/qv/2016-09-02/479062.html
http://ddzan.net/e/space/?userid=192275?feed_filter=/ex/2016-09-02/386209.html
http://ddzan.net/e/space/?userid=192276?feed_filter=/mp/2016-09-02/745390.html
http://ddzan.net/e/space/?userid=192277?feed_filter=/re/2016-09-02/983715.html
http://ddzan.net/e/space/?userid=192278?feed_filter=/la/2016-09-02/902641.html
http://ddzan.net/e/space/?userid=192279?feed_filter=/ve/2016-09-02/145970.html
http://ddzan.net/e/space/?userid=192280?feed_filter=/pq/2016-09-02/659140.html
http://ddzan.net/e/space/?userid=192281?feed_filter=/sx/2016-09-02/189375.html
http://ddzan.net/e/space/?userid=192282?feed_filter=/mr/2016-09-02/783526.html
http://ddzan.net/e/space/?userid=192283?feed_filter=/qy/2016-09-02/341502.html
http://ddzan.net/e/space/?userid=192284?feed_filter=/xm/2016-09-02/628395.html
http://ddzan.net/e/space/?userid=192285?feed_filter=/be/2016-09-02/196023.html
http://ddzan.net/e/space/?userid=192286?feed_filter=/mp/2016-09-02/249180.html
http://ddzan.net/e/space/?userid=192287?feed_filter=/gn/2016-09-02/190358.html
http://ddzan.net/e/space/?userid=192288?feed_filter=/no/2016-09-02/897346.html
http://ddzan.net/e/space/?userid=192289?feed_filter=/ud/2016-09-02/195847.html
http://ddzan.net/e/space/?userid=192290?feed_filter=/px/2016-09-02/432906.html
http://ddzan.net/e/space/?userid=192291?feed_filter=/lk/2016-09-02/264193.html
http://ddzan.net/e/space/?userid=192292?feed_filter=/qd/2016-09-02/415679.html
http://ddzan.net/e/space/?userid=192293?feed_filter=/du/2016-09-02/512470.html
http://ddzan.net/e/space/?userid=192294?feed_filter=/yh/2016-09-02/240935.html
http://ddzan.net/e/space/?userid=192295?feed_filter=/ji/2016-09-02/609378.html
http://ddzan.net/e/space/?userid=192296?feed_filter=/tq/2016-09-02/078295.html
http://ddzan.net/e/space/?userid=192297?feed_filter=/vm/2016-09-02/138945.html
http://ddzan.net/e/space/?userid=192298?feed_filter=/zd/2016-09-02/482057.html
http://ddzan.net/e/space/?userid=192299?feed_filter=/wb/2016-09-02/385179.html
http://ddzan.net/e/space/?userid=192300?feed_filter=/lb/2016-09-02/683712.html
http://ddzan.net/e/space/?userid=192301?feed_filter=/st/2016-09-02/428069.html
http://ddzan.net/e/space/?userid=192302?feed_filter=/mk/2016-09-02/726954.html
http://ddzan.net/e/space/?userid=192303?feed_filter=/ga/2016-09-02/039512.html
http://ddzan.net/e/space/?userid=192304?feed_filter=/cm/2016-09-02/859410.html
http://ddzan.net/e/space/?userid=192305?feed_filter=/nk/2016-09-02/754063.html
http://ddzan.net/e/space/?userid=192306?feed_filter=/lz/2016-09-02/495613.html
http://ddzan.net/e/space/?userid=192307?feed_filter=/ps/2016-09-02/902143.html
http://ddzan.net/e/space/?userid=192308?feed_filter=/br/2016-09-02/769428.html
http://ddzan.net/e/space/?userid=192309?feed_filter=/wn/2016-09-02/675024.html
http://ddzan.net/e/space/?userid=192310?feed_filter=/ru/2016-09-02/846705.html
http://ddzan.net/e/space/?userid=192311?feed_filter=/qn/2016-09-02/864317.html
http://ddzan.net/e/space/?userid=192312?feed_filter=/km/2016-09-02/193586.html
http://ddzan.net/e/space/?userid=192313?feed_filter=/xv/2016-09-02/031925.html
http://ddzan.net/e/space/?userid=192314?feed_filter=/ts/2016-09-02/695027.html
http://ddzan.net/e/space/?userid=192315?feed_filter=/ye/2016-09-02/147832.html
http://ddzan.net/e/space/?userid=192316?feed_filter=/cl/2016-09-02/917054.html
http://ddzan.net/e/space/?userid=192317?feed_filter=/pk/2016-09-02/749258.html
http://ddzan.net/e/space/?userid=192318?feed_filter=/wg/2016-09-02/618405.html
http://ddzan.net/e/space/?userid=192319?feed_filter=/om/2016-09-02/382671.html
http://ddzan.net/e/space/?userid=192320?feed_filter=/sg/2016-09-02/023675.html
http://ddzan.net/e/space/?userid=192321?feed_filter=/fq/2016-09-02/304918.html
http://ddzan.net/e/space/?userid=192322?feed_filter=/qy/2016-09-02/648903.html
http://ddzan.net/e/space/?userid=192323?feed_filter=/bl/2016-09-02/542681.html
http://ddzan.net/e/space/?userid=192324?feed_filter=/cw/2016-09-02/681702.html
http://ddzan.net/e/space/?userid=192325?feed_filter=/vd/2016-09-02/301487.html
http://ddzan.net/e/space/?userid=192326?feed_filter=/wl/2016-09-02/791634.html
http://ddzan.net/e/space/?userid=192327?feed_filter=/wy/2016-09-02/802567.html
http://ddzan.net/e/space/?userid=192328?feed_filter=/gq/2016-09-02/913482.html
http://ddzan.net/e/space/?userid=192329?feed_filter=/mk/2016-09-02/102957.html
http://ddzan.net/e/space/?userid=192330?feed_filter=/vl/2016-09-02/421650.html
http://ddzan.net/e/space/?userid=192331?feed_filter=/nu/2016-09-02/419750.html
http://ddzan.net/e/space/?userid=192332?feed_filter=/wc/2016-09-02/497832.html
http://ddzan.net/e/space/?userid=192333?feed_filter=/xa/2016-09-02/348012.html
http://ddzan.net/e/space/?userid=192334?feed_filter=/mw/2016-09-02/703982.html
http://ddzan.net/e/space/?userid=192335?feed_filter=/uf/2016-09-02/164235.html
http://ddzan.net/e/space/?userid=192336?feed_filter=/um/2016-09-02/327058.html
http://ddzan.net/e/space/?userid=192337?feed_filter=/pc/2016-09-02/392046.html
http://ddzan.net/e/space/?userid=192338?feed_filter=/fq/2016-09-02/264893.html
http://ddzan.net/e/space/?userid=192339?feed_filter=/qi/2016-09-02/186207.html
http://ddzan.net/e/space/?userid=192340?feed_filter=/xc/2016-09-02/837612.html
http://ddzan.net/e/space/?userid=192341?feed_filter=/yk/2016-09-02/056193.html
http://ddzan.net/e/space/?userid=192342?feed_filter=/aq/2016-09-02/948301.html
http://ddzan.net/e/space/?userid=192343?feed_filter=/er/2016-09-02/482967.html
http://ddzan.net/e/space/?userid=192344?feed_filter=/ze/2016-09-02/387645.html
http://ddzan.net/e/space/?userid=192345?feed_filter=/hr/2016-09-02/601873.html
http://ddzan.net/e/space/?userid=192346?feed_filter=/xj/2016-09-02/503894.html
http://ddzan.net/e/space/?userid=192347?feed_filter=/wv/2016-09-02/756842.html
http://ddzan.net/e/space/?userid=192348?feed_filter=/mr/2016-09-02/892536.html
http://ddzan.net/e/space/?userid=192349?feed_filter=/ca/2016-09-02/681597.html
http://ddzan.net/e/space/?userid=192350?feed_filter=/wg/2016-09-02/175203.html
http://ddzan.net/e/space/?userid=192351?feed_filter=/qb/2016-09-02/486705.html
http://ddzan.net/e/space/?userid=192352?feed_filter=/xr/2016-09-02/841762.html
http://ddzan.net/e/space/?userid=192353?feed_filter=/bl/2016-09-02/914327.html
http://ddzan.net/e/space/?userid=192354?feed_filter=/fu/2016-09-02/470921.html
http://ddzan.net/e/space/?userid=192355?feed_filter=/fd/2016-09-02/261059.html
http://ddzan.net/e/space/?userid=192356?feed_filter=/lo/2016-09-02/698034.html
http://ddzan.net/e/space/?userid=192357?feed_filter=/to/2016-09-02/182304.html
http://ddzan.net/e/space/?userid=192358?feed_filter=/ak/2016-09-02/504291.html
http://ddzan.net/e/space/?userid=192359?feed_filter=/qu/2016-09-02/657912.html
http://ddzan.net/e/space/?userid=192360?feed_filter=/im/2016-09-02/487513.html
http://ddzan.net/e/space/?userid=192361?feed_filter=/om/2016-09-02/916853.html
http://ddzan.net/e/space/?userid=192362?feed_filter=/dn/2016-09-02/641807.html
http://ddzan.net/e/space/?userid=192363?feed_filter=/tk/2016-09-02/293056.html
http://ddzan.net/e/space/?userid=192364?feed_filter=/og/2016-09-02/039528.html
http://ddzan.net/e/space/?userid=192365?feed_filter=/yk/2016-09-02/874920.html
http://ddzan.net/e/space/?userid=192366?feed_filter=/rs/2016-09-02/609537.html
http://ddzan.net/e/space/?userid=192367?feed_filter=/ji/2016-09-02/543192.html
http://ddzan.net/e/space/?userid=192368?feed_filter=/vm/2016-09-02/234975.html
http://ddzan.net/e/space/?userid=192369?feed_filter=/ay/2016-09-02/436278.html
http://ddzan.net/e/space/?userid=192370?feed_filter=/vh/2016-09-02/023879.html
http://ddzan.net/e/space/?userid=192371?feed_filter=/ey/2016-09-02/781026.html
http://ddzan.net/e/space/?userid=192372?feed_filter=/ig/2016-09-02/267081.html
http://ddzan.net/e/space/?userid=192373?feed_filter=/uc/2016-09-02/431985.html
http://ddzan.net/e/space/?userid=192374?feed_filter=/si/2016-09-02/192083.html
http://ddzan.net/e/space/?userid=192375?feed_filter=/pq/2016-09-02/628570.html
http://ddzan.net/e/space/?userid=192376?feed_filter=/vb/2016-09-02/235469.html
http://ddzan.net/e/space/?userid=192377?feed_filter=/ps/2016-09-02/178629.html
http://ddzan.net/e/space/?userid=192378?feed_filter=/aq/2016-09-02/879051.html
http://ddzan.net/e/space/?userid=192379?feed_filter=/ot/2016-09-02/509378.html
http://ddzan.net/e/space/?userid=192380?feed_filter=/td/2016-09-02/638214.html
http://ddzan.net/e/space/?userid=192381?feed_filter=/sv/2016-09-02/368517.html
http://ddzan.net/e/space/?userid=192382?feed_filter=/ca/2016-09-02/205914.html
http://ddzan.net/e/space/?userid=192383?feed_filter=/ec/2016-09-02/784506.html
http://ddzan.net/e/space/?userid=192384?feed_filter=/nm/2016-09-02/168547.html
http://ddzan.net/e/space/?userid=192385?feed_filter=/yx/2016-09-02/374150.html
http://ddzan.net/e/space/?userid=192386?feed_filter=/rp/2016-09-02/359027.html
http://ddzan.net/e/space/?userid=192387?feed_filter=/dz/2016-09-02/235106.html
http://ddzan.net/e/space/?userid=192388?feed_filter=/fq/2016-09-02/306758.html
http://ddzan.net/e/space/?userid=192389?feed_filter=/tc/2016-09-02/950346.html
http://ddzan.net/e/space/?userid=192390?feed_filter=/fh/2016-09-02/586713.html
http://ddzan.net/e/space/?userid=192391?feed_filter=/vi/2016-09-02/312086.html
http://ddzan.net/e/space/?userid=192392?feed_filter=/dn/2016-09-02/095481.html
http://ddzan.net/e/space/?userid=192393?feed_filter=/cj/2016-09-02/250471.html
http://ddzan.net/e/space/?userid=192394?feed_filter=/xl/2016-09-02/931476.html
http://ddzan.net/e/space/?userid=192395?feed_filter=/fu/2016-09-02/502716.html
http://ddzan.net/e/space/?userid=192396?feed_filter=/ly/2016-09-02/452186.html
http://ddzan.net/e/space/?userid=192397?feed_filter=/yw/2016-09-02/489075.html
http://ddzan.net/e/space/?userid=192398?feed_filter=/ri/2016-09-02/964851.html
http://ddzan.net/e/space/?userid=192399?feed_filter=/re/2016-09-02/614529.html
http://ddzan.net/e/space/?userid=192400?feed_filter=/dg/2016-09-02/943260.html
http://ddzan.net/e/space/?userid=192401?feed_filter=/st/2016-09-02/897135.html
http://ddzan.net/e/space/?userid=192402?feed_filter=/uh/2016-09-02/193458.html
http://ddzan.net/e/space/?userid=192403?feed_filter=/ys/2016-09-02/168425.html
http://ddzan.net/e/space/?userid=192404?feed_filter=/ok/2016-09-02/798306.html
http://ddzan.net/e/space/?userid=192405?feed_filter=/rp/2016-09-02/907845.html
http://ddzan.net/e/space/?userid=192406?feed_filter=/nu/2016-09-02/075298.html
http://ddzan.net/e/space/?userid=192407?feed_filter=/sc/2016-09-02/703415.html
http://ddzan.net/e/space/?userid=192408?feed_filter=/ok/2016-09-02/594278.html
http://ddzan.net/e/space/?userid=192409?feed_filter=/hf/2016-09-02/365192.html
http://ddzan.net/e/space/?userid=192410?feed_filter=/qb/2016-09-02/104596.html
http://ddzan.net/e/space/?userid=192411?feed_filter=/uv/2016-09-02/618274.html
http://ddzan.net/e/space/?userid=192412?feed_filter=/nj/2016-09-02/169708.html
http://ddzan.net/e/space/?userid=192413?feed_filter=/cq/2016-09-02/608451.html
http://ddzan.net/e/space/?userid=192414?feed_filter=/ua/2016-09-02/280593.html
http://ddzan.net/e/space/?userid=192415?feed_filter=/va/2016-09-02/358219.html
http://ddzan.net/e/space/?userid=192416?feed_filter=/ok/2016-09-02/570348.html
http://ddzan.net/e/space/?userid=192417?feed_filter=/dc/2016-09-02/062598.html
http://ddzan.net/e/space/?userid=192418?feed_filter=/ta/2016-09-02/368410.html
http://ddzan.net/e/space/?userid=192419?feed_filter=/yn/2016-09-02/806537.html
http://ddzan.net/e/space/?userid=192420?feed_filter=/xd/2016-09-02/463182.html
http://ddzan.net/e/space/?userid=192421?feed_filter=/bk/2016-09-02/129053.html
http://ddzan.net/e/space/?userid=192422?feed_filter=/uf/2016-09-02/972186.html
http://ddzan.net/e/space/?userid=192423?feed_filter=/qc/2016-09-02/386594.html
http://ddzan.net/e/space/?userid=192424?feed_filter=/uz/2016-09-02/410867.html
http://ddzan.net/e/space/?userid=192425?feed_filter=/zw/2016-09-02/215648.html
http://ddzan.net/e/space/?userid=192426?feed_filter=/lt/2016-09-02/214956.html
http://ddzan.net/e/space/?userid=192427?feed_filter=/bh/2016-09-02/032687.html
http://ddzan.net/e/space/?userid=192428?feed_filter=/ir/2016-09-02/641905.html
http://ddzan.net/e/space/?userid=192429?feed_filter=/sd/2016-09-02/478362.html
http://ddzan.net/e/space/?userid=192430?feed_filter=/vr/2016-09-02/067539.html
http://ddzan.net/e/space/?userid=192431?feed_filter=/ix/2016-09-02/207938.html
http://ddzan.net/e/space/?userid=192432?feed_filter=/yn/2016-09-02/742156.html
http://ddzan.net/e/space/?userid=192433?feed_filter=/xj/2016-09-02/732049.html
http://ddzan.net/e/space/?userid=192434?feed_filter=/bv/2016-09-02/176940.html
http://ddzan.net/e/space/?userid=192435?feed_filter=/gh/2016-09-02/149837.html
http://ddzan.net/e/space/?userid=192436?feed_filter=/pu/2016-09-02/142075.html
http://ddzan.net/e/space/?userid=192437?feed_filter=/fl/2016-09-02/094287.html
http://ddzan.net/e/space/?userid=192438?feed_filter=/tj/2016-09-02/576439.html
http://ddzan.net/e/space/?userid=192439?feed_filter=/cn/2016-09-02/270685.html
http://ddzan.net/e/space/?userid=192440?feed_filter=/gb/2016-09-02/057923.html
http://ddzan.net/e/space/?userid=192441?feed_filter=/kv/2016-09-02/713260.html
http://ddzan.net/e/space/?userid=192442?feed_filter=/cu/2016-09-02/473210.html
http://ddzan.net/e/space/?userid=192443?feed_filter=/bm/2016-09-02/613270.html
http://ddzan.net/e/space/?userid=192444?feed_filter=/kv/2016-09-02/107485.html
http://ddzan.net/e/space/?userid=192445?feed_filter=/pb/2016-09-02/812935.html
http://ddzan.net/e/space/?userid=192446?feed_filter=/fc/2016-09-02/614785.html
http://ddzan.net/e/space/?userid=192447?feed_filter=/vl/2016-09-02/405937.html
http://ddzan.net/e/space/?userid=192448?feed_filter=/fl/2016-09-02/178563.html
http://ddzan.net/e/space/?userid=192449?feed_filter=/gd/2016-09-02/082456.html
http://ddzan.net/e/space/?userid=192450?feed_filter=/gv/2016-09-02/503184.html
http://ddzan.net/e/space/?userid=192451?feed_filter=/zy/2016-09-02/842017.html
http://ddzan.net/e/space/?userid=192452?feed_filter=/bt/2016-09-02/946215.html
http://ddzan.net/e/space/?userid=192453?feed_filter=/vu/2016-09-02/429107.html
http://ddzan.net/e/space/?userid=192454?feed_filter=/mv/2016-09-02/021534.html
http://ddzan.net/e/space/?userid=192455?feed_filter=/xk/2016-09-02/376058.html
http://ddzan.net/e/space/?userid=192456?feed_filter=/tf/2016-09-02/209381.html
http://ddzan.net/e/space/?userid=192457?feed_filter=/rc/2016-09-02/183654.html
http://ddzan.net/e/space/?userid=192458?feed_filter=/ab/2016-09-02/205947.html
http://ddzan.net/e/space/?userid=192459?feed_filter=/fz/2016-09-02/709481.html
http://ddzan.net/e/space/?userid=192460?feed_filter=/ah/2016-09-02/078435.html
http://ddzan.net/e/space/?userid=192461?feed_filter=/qm/2016-09-02/480516.html
http://ddzan.net/e/space/?userid=192462?feed_filter=/de/2016-09-02/409763.html
http://ddzan.net/e/space/?userid=192463?feed_filter=/my/2016-09-02/694720.html
http://ddzan.net/e/space/?userid=192464?feed_filter=/jp/2016-09-02/987246.html
http://ddzan.net/e/space/?userid=192465?feed_filter=/as/2016-09-02/928046.html
http://ddzan.net/e/space/?userid=192466?feed_filter=/ut/2016-09-02/824035.html
http://ddzan.net/e/space/?userid=192467?feed_filter=/tr/2016-09-02/507146.html
http://ddzan.net/e/space/?userid=192468?feed_filter=/kj/2016-09-02/516904.html
http://ddzan.net/e/space/?userid=192469?feed_filter=/py/2016-09-02/469271.html
http://ddzan.net/e/space/?userid=192470?feed_filter=/ic/2016-09-02/986257.html
http://ddzan.net/e/space/?userid=192471?feed_filter=/lf/2016-09-02/372514.html
http://ddzan.net/e/space/?userid=192472?feed_filter=/wm/2016-09-02/569140.html
http://ddzan.net/e/space/?userid=192473?feed_filter=/lx/2016-09-02/201479.html
http://ddzan.net/e/space/?userid=192474?feed_filter=/pk/2016-09-02/308241.html
http://ddzan.net/e/space/?userid=192475?feed_filter=/gv/2016-09-02/403791.html
http://ddzan.net/e/space/?userid=192476?feed_filter=/ld/2016-09-02/495176.html
http://ddzan.net/e/space/?userid=192477?feed_filter=/qv/2016-09-02/872569.html
http://ddzan.net/e/space/?userid=192478?feed_filter=/jq/2016-09-02/702381.html
http://ddzan.net/e/space/?userid=192479?feed_filter=/jh/2016-09-02/671530.html
http://ddzan.net/e/space/?userid=192480?feed_filter=/mc/2016-09-02/560498.html
http://ddzan.net/e/space/?userid=192481?feed_filter=/hb/2016-09-02/837915.html
http://ddzan.net/e/space/?userid=192482?feed_filter=/zy/2016-09-02/502486.html
http://ddzan.net/e/space/?userid=192483?feed_filter=/ve/2016-09-02/456708.html
http://ddzan.net/e/space/?userid=192484?feed_filter=/lf/2016-09-02/278654.html
http://ddzan.net/e/space/?userid=192485?feed_filter=/to/2016-09-02/162038.html
http://ddzan.net/e/space/?userid=192486?feed_filter=/lv/2016-09-02/751094.html
http://ddzan.net/e/space/?userid=192487?feed_filter=/rz/2016-09-02/735981.html
http://ddzan.net/e/space/?userid=192488?feed_filter=/xg/2016-09-02/064297.html
http://ddzan.net/e/space/?userid=192489?feed_filter=/ja/2016-09-02/352014.html
http://ddzan.net/e/space/?userid=192490?feed_filter=/oa/2016-09-02/496183.html
http://ddzan.net/e/space/?userid=192491?feed_filter=/mx/2016-09-02/984605.html
http://ddzan.net/e/space/?userid=192492?feed_filter=/iu/2016-09-02/217564.html
http://ddzan.net/e/space/?userid=192493?feed_filter=/dv/2016-09-02/305624.html
http://ddzan.net/e/space/?userid=192494?feed_filter=/zk/2016-09-02/486195.html
http://ddzan.net/e/space/?userid=192495?feed_filter=/ev/2016-09-02/803257.html
http://ddzan.net/e/space/?userid=192496?feed_filter=/pz/2016-09-02/492758.html
http://ddzan.net/e/space/?userid=192497?feed_filter=/cd/2016-09-02/056891.html
http://ddzan.net/e/space/?userid=192498?feed_filter=/zp/2016-09-02/527389.html
http://ddzan.net/e/space/?userid=192499?feed_filter=/ph/2016-09-02/710954.html
http://ddzan.net/e/space/?userid=192500?feed_filter=/lg/2016-09-02/580796.html
http://ddzan.net/e/space/?userid=192501?feed_filter=/sx/2016-09-02/628104.html
http://ddzan.net/e/space/?userid=192502?feed_filter=/ny/2016-09-02/382147.html
http://ddzan.net/e/space/?userid=192503?feed_filter=/kt/2016-09-02/391270.html
http://ddzan.net/e/space/?userid=192504?feed_filter=/ck/2016-09-02/258170.html
http://ddzan.net/e/space/?userid=192505?feed_filter=/lo/2016-09-02/506172.html
http://ddzan.net/e/space/?userid=192506?feed_filter=/dx/2016-09-02/927043.html
http://ddzan.net/e/space/?userid=192507?feed_filter=/tp/2016-09-02/514236.html
http://ddzan.net/e/space/?userid=192508?feed_filter=/pg/2016-09-02/579104.html
http://ddzan.net/e/space/?userid=192509?feed_filter=/fd/2016-09-02/942783.html
http://ddzan.net/e/space/?userid=192510?feed_filter=/et/2016-09-02/463702.html
http://ddzan.net/e/space/?userid=192511?feed_filter=/ag/2016-09-02/680159.html
http://ddzan.net/e/space/?userid=192512?feed_filter=/ye/2016-09-02/530478.html
http://ddzan.net/e/space/?userid=192513?feed_filter=/bz/2016-09-02/918602.html
http://ddzan.net/e/space/?userid=192514?feed_filter=/bn/2016-09-02/581693.html
http://ddzan.net/e/space/?userid=192515?feed_filter=/ur/2016-09-02/372916.html
http://ddzan.net/e/space/?userid=192516?feed_filter=/lv/2016-09-02/158234.html
http://ddzan.net/e/space/?userid=192517?feed_filter=/uf/2016-09-02/015796.html
http://ddzan.net/e/space/?userid=192518?feed_filter=/pb/2016-09-02/415278.html
http://ddzan.net/e/space/?userid=192519?feed_filter=/fm/2016-09-02/274615.html
http://ddzan.net/e/space/?userid=192520?feed_filter=/nw/2016-09-02/243658.html
http://ddzan.net/e/space/?userid=192521?feed_filter=/dq/2016-09-02/580139.html
http://ddzan.net/e/space/?userid=192522?feed_filter=/yw/2016-09-02/469875.html
http://ddzan.net/e/space/?userid=192523?feed_filter=/lc/2016-09-02/097684.html
http://ddzan.net/e/space/?userid=192524?feed_filter=/pv/2016-09-02/367208.html
http://ddzan.net/e/space/?userid=192525?feed_filter=/zc/2016-09-02/369702.html
http://ddzan.net/e/space/?userid=192526?feed_filter=/tk/2016-09-02/801365.html
http://ddzan.net/e/space/?userid=192527?feed_filter=/vi/2016-09-02/807514.html
http://ddzan.net/e/space/?userid=192528?feed_filter=/ki/2016-09-02/924718.html
http://ddzan.net/e/space/?userid=192529?feed_filter=/jw/2016-09-02/653794.html
http://ddzan.net/e/space/?userid=192530?feed_filter=/ro/2016-09-02/624985.html
http://ddzan.net/e/space/?userid=192531?feed_filter=/sr/2016-09-02/320548.html
http://ddzan.net/e/space/?userid=192532?feed_filter=/dr/2016-09-02/345826.html
http://ddzan.net/e/space/?userid=192533?feed_filter=/az/2016-09-02/720159.html
http://ddzan.net/e/space/?userid=192534?feed_filter=/op/2016-09-02/341926.html
http://ddzan.net/e/space/?userid=192535?feed_filter=/co/2016-09-02/370958.html
http://ddzan.net/e/space/?userid=192536?feed_filter=/xh/2016-09-02/476891.html
http://ddzan.net/e/space/?userid=192537?feed_filter=/tn/2016-09-02/943508.html
http://ddzan.net/e/space/?userid=192538?feed_filter=/tu/2016-09-02/973021.html
http://ddzan.net/e/space/?userid=192539?feed_filter=/ds/2016-09-02/405861.html
http://ddzan.net/e/space/?userid=192540?feed_filter=/jh/2016-09-02/719425.html
http://ddzan.net/e/space/?userid=192541?feed_filter=/sq/2016-09-02/658109.html
http://ddzan.net/e/space/?userid=192542?feed_filter=/tr/2016-09-02/795830.html
http://ddzan.net/e/space/?userid=192543?feed_filter=/gs/2016-09-02/348972.html
http://ddzan.net/e/space/?userid=192544?feed_filter=/ku/2016-09-02/657231.html
http://ddzan.net/e/space/?userid=192545?feed_filter=/et/2016-09-02/870613.html
http://ddzan.net/e/space/?userid=192546?feed_filter=/ic/2016-09-02/185326.html
http://ddzan.net/e/space/?userid=192547?feed_filter=/rd/2016-09-02/738490.html
http://ddzan.net/e/space/?userid=192548?feed_filter=/av/2016-09-02/624379.html
http://ddzan.net/e/space/?userid=192549?feed_filter=/sn/2016-09-02/549783.html
http://ddzan.net/e/space/?userid=192550?feed_filter=/dp/2016-09-02/839476.html
http://ddzan.net/e/space/?userid=192551?feed_filter=/rd/2016-09-02/790142.html
http://ddzan.net/e/space/?userid=192552?feed_filter=/qx/2016-09-02/514302.html
http://ddzan.net/e/space/?userid=192553?feed_filter=/fg/2016-09-02/412537.html
http://ddzan.net/e/space/?userid=192554?feed_filter=/dq/2016-09-02/205893.html
http://ddzan.net/e/space/?userid=192555?feed_filter=/yd/2016-09-02/729314.html
http://ddzan.net/e/space/?userid=192556?feed_filter=/by/2016-09-02/502698.html
http://ddzan.net/e/space/?userid=192557?feed_filter=/xt/2016-09-02/971568.html
http://ddzan.net/e/space/?userid=192558?feed_filter=/ua/2016-09-02/623809.html
http://ddzan.net/e/space/?userid=192559?feed_filter=/ly/2016-09-02/821569.html
http://ddzan.net/e/space/?userid=192560?feed_filter=/dr/2016-09-02/753824.html
http://ddzan.net/e/space/?userid=192561?feed_filter=/kd/2016-09-02/756098.html
http://ddzan.net/e/space/?userid=192562?feed_filter=/ht/2016-09-02/852769.html
http://ddzan.net/e/space/?userid=192563?feed_filter=/lz/2016-09-02/475960.html
http://ddzan.net/e/space/?userid=192564?feed_filter=/qx/2016-09-02/534269.html
http://ddzan.net/e/space/?userid=192565?feed_filter=/ir/2016-09-02/508491.html
http://ddzan.net/e/space/?userid=192566?feed_filter=/gy/2016-09-02/208671.html
http://ddzan.net/e/space/?userid=192567?feed_filter=/po/2016-09-02/591206.html
http://ddzan.net/e/space/?userid=192568?feed_filter=/oc/2016-09-02/217384.html
http://ddzan.net/e/space/?userid=192569?feed_filter=/ij/2016-09-02/379052.html
http://ddzan.net/e/space/?userid=192570?feed_filter=/bj/2016-09-02/201746.html
http://ddzan.net/e/space/?userid=192571?feed_filter=/sv/2016-09-02/601893.html
http://ddzan.net/e/space/?userid=192572?feed_filter=/lz/2016-09-02/487159.html
http://ddzan.net/e/space/?userid=192573?feed_filter=/fm/2016-09-02/684901.html
http://ddzan.net/e/space/?userid=192574?feed_filter=/xd/2016-09-02/265937.html
http://ddzan.net/e/space/?userid=192575?feed_filter=/nq/2016-09-02/268913.html
http://ddzan.net/e/space/?userid=192576?feed_filter=/ra/2016-09-02/273610.html
http://ddzan.net/e/space/?userid=192577?feed_filter=/nv/2016-09-02/856310.html
http://ddzan.net/e/space/?userid=192578?feed_filter=/au/2016-09-02/328015.html
http://ddzan.net/e/space/?userid=192579?feed_filter=/xd/2016-09-02/034257.html
http://ddzan.net/e/space/?userid=192580?feed_filter=/kh/2016-09-02/297145.html
http://ddzan.net/e/space/?userid=192581?feed_filter=/ow/2016-09-02/364270.html
http://ddzan.net/e/space/?userid=192582?feed_filter=/dr/2016-09-02/176839.html
http://ddzan.net/e/space/?userid=192583?feed_filter=/rl/2016-09-02/913765.html
http://ddzan.net/e/space/?userid=192584?feed_filter=/pi/2016-09-02/940652.html
http://ddzan.net/e/space/?userid=192585?feed_filter=/qu/2016-09-02/026439.html
http://ddzan.net/e/space/?userid=192586?feed_filter=/cb/2016-09-02/364709.html
http://ddzan.net/e/space/?userid=192587?feed_filter=/ao/2016-09-02/741506.html
http://ddzan.net/e/space/?userid=192588?feed_filter=/jm/2016-09-02/180539.html
http://ddzan.net/e/space/?userid=192589?feed_filter=/jl/2016-09-02/078954.html
http://ddzan.net/e/space/?userid=192590?feed_filter=/re/2016-09-02/259731.html
http://ddzan.net/e/space/?userid=192591?feed_filter=/cu/2016-09-02/319480.html
http://ddzan.net/e/space/?userid=192592?feed_filter=/ex/2016-09-02/417096.html
http://ddzan.net/e/space/?userid=192593?feed_filter=/gy/2016-09-02/971604.html
http://ddzan.net/e/space/?userid=192594?feed_filter=/qo/2016-09-02/248357.html
http://ddzan.net/e/space/?userid=192595?feed_filter=/ba/2016-09-02/906521.html
http://ddzan.net/e/space/?userid=192596?feed_filter=/ig/2016-09-02/632589.html
http://ddzan.net/e/space/?userid=192597?feed_filter=/yo/2016-09-02/753208.html
http://ddzan.net/e/space/?userid=192598?feed_filter=/ya/2016-09-02/958340.html
http://ddzan.net/e/space/?userid=192599?feed_filter=/sy/2016-09-02/597186.html
http://ddzan.net/e/space/?userid=192600?feed_filter=/on/2016-09-02/364792.html
http://ddzan.net/e/space/?userid=192601?feed_filter=/oz/2016-09-02/496105.html
http://ddzan.net/e/space/?userid=192602?feed_filter=/ce/2016-09-02/701956.html
http://ddzan.net/e/space/?userid=192603?feed_filter=/re/2016-09-02/369574.html
http://ddzan.net/e/space/?userid=192604?feed_filter=/lf/2016-09-02/624530.html
http://ddzan.net/e/space/?userid=192605?feed_filter=/tz/2016-09-02/045362.html
http://ddzan.net/e/space/?userid=192606?feed_filter=/kd/2016-09-02/435096.html
http://ddzan.net/e/space/?userid=192607?feed_filter=/zr/2016-09-02/849153.html
http://ddzan.net/e/space/?userid=192608?feed_filter=/dl/2016-09-02/821750.html
http://ddzan.net/e/space/?userid=192609?feed_filter=/wm/2016-09-02/478215.html
http://ddzan.net/e/space/?userid=192610?feed_filter=/nd/2016-09-02/875619.html
http://ddzan.net/e/space/?userid=192611?feed_filter=/qk/2016-09-02/752106.html
http://ddzan.net/e/space/?userid=192612?feed_filter=/gu/2016-09-02/365219.html
http://ddzan.net/e/space/?userid=192613?feed_filter=/ot/2016-09-02/140762.html
http://ddzan.net/e/space/?userid=192614?feed_filter=/et/2016-09-02/143065.html
http://ddzan.net/e/space/?userid=192615?feed_filter=/my/2016-09-02/681372.html
http://ddzan.net/e/space/?userid=192616?feed_filter=/ot/2016-09-02/263901.html
http://ddzan.net/e/space/?userid=192617?feed_filter=/bf/2016-09-02/046581.html
http://ddzan.net/e/space/?userid=192618?feed_filter=/zu/2016-09-02/158049.html
http://ddzan.net/e/space/?userid=192619?feed_filter=/zy/2016-09-02/732016.html
http://ddzan.net/e/space/?userid=192620?feed_filter=/gj/2016-09-02/421906.html
http://ddzan.net/e/space/?userid=192621?feed_filter=/en/2016-09-02/290731.html
http://ddzan.net/e/space/?userid=192622?feed_filter=/ny/2016-09-02/408215.html
http://ddzan.net/e/space/?userid=192623?feed_filter=/rj/2016-09-02/509748.html
http://ddzan.net/e/space/?userid=192624?feed_filter=/ad/2016-09-02/206453.html
http://ddzan.net/e/space/?userid=192625?feed_filter=/bm/2016-09-02/827536.html
http://ddzan.net/e/space/?userid=192626?feed_filter=/jc/2016-09-02/541769.html
http://ddzan.net/e/space/?userid=192627?feed_filter=/mb/2016-09-02/871254.html
http://ddzan.net/e/space/?userid=192628?feed_filter=/cv/2016-09-02/936015.html
http://ddzan.net/e/space/?userid=192629?feed_filter=/gm/2016-09-02/630781.html
http://ddzan.net/e/space/?userid=192630?feed_filter=/wz/2016-09-02/034761.html
http://ddzan.net/e/space/?userid=192631?feed_filter=/jx/2016-09-02/085193.html
http://ddzan.net/e/space/?userid=192632?feed_filter=/zw/2016-09-02/097862.html
http://ddzan.net/e/space/?userid=192633?feed_filter=/ge/2016-09-02/389714.html
http://ddzan.net/e/space/?userid=192634?feed_filter=/gp/2016-09-02/970352.html
http://ddzan.net/e/space/?userid=192635?feed_filter=/qm/2016-09-02/906754.html
http://ddzan.net/e/space/?userid=192636?feed_filter=/ho/2016-09-02/658197.html
http://ddzan.net/e/space/?userid=192637?feed_filter=/tf/2016-09-02/265739.html
http://ddzan.net/e/space/?userid=192638?feed_filter=/lv/2016-09-02/096374.html
http://ddzan.net/e/space/?userid=192639?feed_filter=/zb/2016-09-02/285071.html
http://ddzan.net/e/space/?userid=192640?feed_filter=/zs/2016-09-02/182659.html
http://ddzan.net/e/space/?userid=192641?feed_filter=/ow/2016-09-02/789605.html
http://ddzan.net/e/space/?userid=192642?feed_filter=/te/2016-09-02/482309.html
http://ddzan.net/e/space/?userid=192643?feed_filter=/il/2016-09-02/639504.html
http://ddzan.net/e/space/?userid=192644?feed_filter=/cd/2016-09-02/358419.html
http://ddzan.net/e/space/?userid=192645?feed_filter=/hn/2016-09-02/572431.html
http://ddzan.net/e/space/?userid=192646?feed_filter=/od/2016-09-02/387641.html
http://ddzan.net/e/space/?userid=192647?feed_filter=/vz/2016-09-02/754263.html
http://ddzan.net/e/space/?userid=192648?feed_filter=/bd/2016-09-02/390274.html
http://ddzan.net/e/space/?userid=192649?feed_filter=/ea/2016-09-02/307542.html
http://ddzan.net/e/space/?userid=192650?feed_filter=/ro/2016-09-02/916470.html
http://ddzan.net/e/space/?userid=192651?feed_filter=/yt/2016-09-02/139875.html
http://ddzan.net/e/space/?userid=192652?feed_filter=/or/2016-09-02/061872.html
http://ddzan.net/e/space/?userid=192653?feed_filter=/ye/2016-09-02/560728.html
http://ddzan.net/e/space/?userid=192654?feed_filter=/ih/2016-09-02/742089.html
http://ddzan.net/e/space/?userid=192655?feed_filter=/pm/2016-09-02/853140.html
http://ddzan.net/e/space/?userid=192656?feed_filter=/fg/2016-09-02/348095.html
http://ddzan.net/e/space/?userid=192657?feed_filter=/qv/2016-09-02/930257.html
http://ddzan.net/e/space/?userid=192658?feed_filter=/lr/2016-09-02/473562.html
http://ddzan.net/e/space/?userid=192659?feed_filter=/df/2016-09-02/597412.html
http://ddzan.net/e/space/?userid=192660?feed_filter=/cl/2016-09-02/195270.html
http://ddzan.net/e/space/?userid=192661?feed_filter=/ax/2016-09-02/710483.html
http://ddzan.net/e/space/?userid=192662?feed_filter=/zj/2016-09-02/329870.html
http://ddzan.net/e/space/?userid=192663?feed_filter=/bf/2016-09-02/207183.html
http://ddzan.net/e/space/?userid=192664?feed_filter=/gn/2016-09-02/045618.html
http://ddzan.net/e/space/?userid=192665?feed_filter=/lx/2016-09-02/130428.html
http://ddzan.net/e/space/?userid=192666?feed_filter=/gt/2016-09-02/854076.html
http://ddzan.net/e/space/?userid=192667?feed_filter=/xr/2016-09-02/145239.html
http://ddzan.net/e/space/?userid=192668?feed_filter=/du/2016-09-02/320876.html
http://ddzan.net/e/space/?userid=192669?feed_filter=/yz/2016-09-02/206743.html
http://ddzan.net/e/space/?userid=192670?feed_filter=/bm/2016-09-02/248570.html
http://ddzan.net/e/space/?userid=192671?feed_filter=/ut/2016-09-02/598106.html
http://ddzan.net/e/space/?userid=192672?feed_filter=/vs/2016-09-02/524619.html
http://ddzan.net/e/space/?userid=192673?feed_filter=/sz/2016-09-02/167425.html
http://ddzan.net/e/space/?userid=192674?feed_filter=/rd/2016-09-02/806524.html
http://ddzan.net/e/space/?userid=192675?feed_filter=/ic/2016-09-02/962743.html
http://ddzan.net/e/space/?userid=192676?feed_filter=/je/2016-09-02/098754.html
http://ddzan.net/e/space/?userid=192677?feed_filter=/re/2016-09-02/980352.html
http://ddzan.net/e/space/?userid=192678?feed_filter=/sv/2016-09-02/705342.html
http://ddzan.net/e/space/?userid=192679?feed_filter=/lv/2016-09-02/210897.html
http://ddzan.net/e/space/?userid=192680?feed_filter=/nl/2016-09-02/416723.html
http://ddzan.net/e/space/?userid=192681?feed_filter=/dm/2016-09-02/953082.html
http://ddzan.net/e/space/?userid=192682?feed_filter=/hs/2016-09-02/529476.html
http://ddzan.net/e/space/?userid=192683?feed_filter=/od/2016-09-02/290371.html
http://ddzan.net/e/space/?userid=192684?feed_filter=/ks/2016-09-02/965213.html
http://ddzan.net/e/space/?userid=192685?feed_filter=/ic/2016-09-02/823751.html
http://ddzan.net/e/space/?userid=192686?feed_filter=/qx/2016-09-02/416987.html
http://ddzan.net/e/space/?userid=192687?feed_filter=/vw/2016-09-02/691235.html
http://ddzan.net/e/space/?userid=192688?feed_filter=/dm/2016-09-02/715329.html
http://ddzan.net/e/space/?userid=192689?feed_filter=/ur/2016-09-02/872301.html
http://ddzan.net/e/space/?userid=192690?feed_filter=/cb/2016-09-02/608913.html
http://ddzan.net/e/space/?userid=192691?feed_filter=/sn/2016-09-02/312087.html
http://ddzan.net/e/space/?userid=192692?feed_filter=/rc/2016-09-02/420597.html
http://ddzan.net/e/space/?userid=192693?feed_filter=/zo/2016-09-02/425891.html
http://ddzan.net/e/space/?userid=192694?feed_filter=/zd/2016-09-02/648732.html
http://ddzan.net/e/space/?userid=192695?feed_filter=/pa/2016-09-02/743019.html
http://ddzan.net/e/space/?userid=192696?feed_filter=/dt/2016-09-02/380429.html
http://ddzan.net/e/space/?userid=192697?feed_filter=/hx/2016-09-02/064379.html
http://ddzan.net/e/space/?userid=192698?feed_filter=/hj/2016-09-02/203679.html
http://ddzan.net/e/space/?userid=192699?feed_filter=/ow/2016-09-02/213845.html
http://ddzan.net/e/space/?userid=192700?feed_filter=/df/2016-09-02/240865.html
http://ddzan.net/e/space/?userid=192701?feed_filter=/pm/2016-09-02/508617.html
http://ddzan.net/e/space/?userid=192702?feed_filter=/ja/2016-09-02/416538.html
http://ddzan.net/e/space/?userid=192703?feed_filter=/uv/2016-09-02/423890.html
http://ddzan.net/e/space/?userid=192704?feed_filter=/vg/2016-09-02/560327.html
http://ddzan.net/e/space/?userid=192705?feed_filter=/qx/2016-09-02/405967.html
http://ddzan.net/e/space/?userid=192706?feed_filter=/la/2016-09-02/938527.html
http://ddzan.net/e/space/?userid=192707?feed_filter=/kf/2016-09-02/281659.html
http://ddzan.net/e/space/?userid=192708?feed_filter=/vb/2016-09-02/067894.html
http://ddzan.net/e/space/?userid=192709?feed_filter=/px/2016-09-02/127340.html
http://ddzan.net/e/space/?userid=192710?feed_filter=/ed/2016-09-02/231786.html
http://ddzan.net/e/space/?userid=192711?feed_filter=/zw/2016-09-02/695730.html
http://ddzan.net/e/space/?userid=192712?feed_filter=/la/2016-09-02/971265.html
http://ddzan.net/e/space/?userid=192713?feed_filter=/nm/2016-09-02/372519.html
http://ddzan.net/e/space/?userid=192714?feed_filter=/pb/2016-09-02/349086.html
http://ddzan.net/e/space/?userid=192715?feed_filter=/xf/2016-09-02/680519.html
http://ddzan.net/e/space/?userid=192716?feed_filter=/nk/2016-09-02/065812.html
http://ddzan.net/e/space/?userid=192717?feed_filter=/xy/2016-09-02/307512.html
http://ddzan.net/e/space/?userid=192718?feed_filter=/ax/2016-09-02/462093.html
http://ddzan.net/e/space/?userid=192719?feed_filter=/os/2016-09-02/216793.html
http://ddzan.net/e/space/?userid=192720?feed_filter=/ik/2016-09-02/469173.html
http://ddzan.net/e/space/?userid=192721?feed_filter=/uv/2016-09-02/638427.html
http://ddzan.net/e/space/?userid=192722?feed_filter=/bw/2016-09-02/476308.html
http://ddzan.net/e/space/?userid=192723?feed_filter=/bl/2016-09-02/512403.html
http://ddzan.net/e/space/?userid=192724?feed_filter=/jb/2016-09-02/691432.html
http://ddzan.net/e/space/?userid=192725?feed_filter=/ie/2016-09-02/346802.html
http://ddzan.net/e/space/?userid=192726?feed_filter=/iz/2016-09-02/983046.html
http://ddzan.net/e/space/?userid=192727?feed_filter=/ez/2016-09-02/152394.html
http://ddzan.net/e/space/?userid=192728?feed_filter=/kv/2016-09-02/894560.html
http://ddzan.net/e/space/?userid=192729?feed_filter=/ay/2016-09-02/109857.html
http://ddzan.net/e/space/?userid=192730?feed_filter=/ah/2016-09-02/091428.html
http://ddzan.net/e/space/?userid=192731?feed_filter=/qb/2016-09-02/015296.html
http://ddzan.net/e/space/?userid=192732?feed_filter=/oi/2016-09-02/503219.html
http://ddzan.net/e/space/?userid=192733?feed_filter=/xo/2016-09-02/945218.html
http://ddzan.net/e/space/?userid=192734?feed_filter=/cp/2016-09-02/036872.html
http://ddzan.net/e/space/?userid=192735?feed_filter=/tr/2016-09-02/479180.html
http://ddzan.net/e/space/?userid=192736?feed_filter=/yc/2016-09-02/461792.html
http://ddzan.net/e/space/?userid=192737?feed_filter=/zv/2016-09-02/827513.html
http://ddzan.net/e/space/?userid=192738?feed_filter=/ga/2016-09-02/671429.html
http://ddzan.net/e/space/?userid=192739?feed_filter=/vt/2016-09-02/745130.html
http://ddzan.net/e/space/?userid=192740?feed_filter=/nh/2016-09-02/973408.html
http://ddzan.net/e/space/?userid=192741?feed_filter=/rl/2016-09-02/798614.html
http://ddzan.net/e/space/?userid=192742?feed_filter=/zt/2016-09-02/952304.html
http://ddzan.net/e/space/?userid=192743?feed_filter=/vb/2016-09-02/285174.html
http://ddzan.net/e/space/?userid=192744?feed_filter=/dk/2016-09-02/624753.html
http://ddzan.net/e/space/?userid=192745?feed_filter=/th/2016-09-02/574961.html
http://ddzan.net/e/space/?userid=192746?feed_filter=/tw/2016-09-02/719854.html
http://ddzan.net/e/space/?userid=192747?feed_filter=/bk/2016-09-02/706981.html
http://ddzan.net/e/space/?userid=192748?feed_filter=/yj/2016-09-02/639078.html
http://ddzan.net/e/space/?userid=192749?feed_filter=/ts/2016-09-02/285436.html
http://ddzan.net/e/space/?userid=192750?feed_filter=/xz/2016-09-02/872936.html
http://ddzan.net/e/space/?userid=192751?feed_filter=/nb/2016-09-02/398756.html
http://ddzan.net/e/space/?userid=192752?feed_filter=/zo/2016-09-02/963754.html
http://ddzan.net/e/space/?userid=192753?feed_filter=/fm/2016-09-02/384069.html
http://ddzan.net/e/space/?userid=192754?feed_filter=/zh/2016-09-02/483075.html
http://ddzan.net/e/space/?userid=192755?feed_filter=/ep/2016-09-02/312475.html
http://ddzan.net/e/space/?userid=192756?feed_filter=/ph/2016-09-02/890174.html
http://ddzan.net/e/space/?userid=192757?feed_filter=/xg/2016-09-02/590786.html
http://ddzan.net/e/space/?userid=192758?feed_filter=/wm/2016-09-02/713892.html
http://ddzan.net/e/space/?userid=192759?feed_filter=/zs/2016-09-02/238507.html
http://ddzan.net/e/space/?userid=192760?feed_filter=/cs/2016-09-02/618793.html
http://ddzan.net/e/space/?userid=192761?feed_filter=/or/2016-09-02/781325.html
http://ddzan.net/e/space/?userid=192762?feed_filter=/qh/2016-09-02/053146.html
http://ddzan.net/e/space/?userid=192763?feed_filter=/ck/2016-09-02/208637.html
http://ddzan.net/e/space/?userid=192764?feed_filter=/bj/2016-09-02/201874.html
http://ddzan.net/e/space/?userid=192765?feed_filter=/pa/2016-09-02/285673.html
http://ddzan.net/e/space/?userid=192766?feed_filter=/ru/2016-09-02/147369.html
http://ddzan.net/e/space/?userid=192767?feed_filter=/nw/2016-09-02/548172.html
http://ddzan.net/e/space/?userid=192768?feed_filter=/sk/2016-09-02/957286.html
http://ddzan.net/e/space/?userid=192769?feed_filter=/yd/2016-09-02/349872.html
http://ddzan.net/e/space/?userid=192770?feed_filter=/zq/2016-09-02/286315.html
http://ddzan.net/e/space/?userid=192771?feed_filter=/xj/2016-09-02/641389.html
http://ddzan.net/e/space/?userid=192772?feed_filter=/df/2016-09-02/126483.html
http://ddzan.net/e/space/?userid=192773?feed_filter=/eg/2016-09-02/185293.html
http://ddzan.net/e/space/?userid=192774?feed_filter=/dt/2016-09-02/905632.html
http://ddzan.net/e/space/?userid=192775?feed_filter=/uc/2016-09-02/514786.html
http://ddzan.net/e/space/?userid=192776?feed_filter=/ig/2016-09-02/529846.html
http://ddzan.net/e/space/?userid=192777?feed_filter=/ny/2016-09-02/925417.html
http://ddzan.net/e/space/?userid=192778?feed_filter=/ml/2016-09-02/923867.html
http://ddzan.net/e/space/?userid=192779?feed_filter=/wd/2016-09-02/394168.html
http://ddzan.net/e/space/?userid=192780?feed_filter=/fy/2016-09-02/342860.html
http://ddzan.net/e/space/?userid=192781?feed_filter=/ki/2016-09-02/430251.html
http://ddzan.net/e/space/?userid=192782?feed_filter=/er/2016-09-02/964032.html
http://ddzan.net/e/space/?userid=192783?feed_filter=/pr/2016-09-02/526409.html
http://ddzan.net/e/space/?userid=192784?feed_filter=/rg/2016-09-02/859730.html
http://ddzan.net/e/space/?userid=192785?feed_filter=/qm/2016-09-02/147295.html
http://ddzan.net/e/space/?userid=192786?feed_filter=/nj/2016-09-02/482170.html
http://ddzan.net/e/space/?userid=192787?feed_filter=/vz/2016-09-02/807543.html
http://ddzan.net/e/space/?userid=192788?feed_filter=/ws/2016-09-02/018625.html
http://ddzan.net/e/space/?userid=192789?feed_filter=/fd/2016-09-02/475326.html
http://ddzan.net/e/space/?userid=192790?feed_filter=/go/2016-09-02/839054.html
http://ddzan.net/e/space/?userid=192791?feed_filter=/wp/2016-09-02/736120.html
http://ddzan.net/e/space/?userid=192792?feed_filter=/qr/2016-09-02/739281.html
http://ddzan.net/e/space/?userid=192793?feed_filter=/wu/2016-09-02/083629.html
http://ddzan.net/e/space/?userid=192794?feed_filter=/ig/2016-09-02/047965.html
http://ddzan.net/e/space/?userid=192795?feed_filter=/bd/2016-09-02/724980.html
http://ddzan.net/e/space/?userid=192796?feed_filter=/go/2016-09-02/456293.html
http://ddzan.net/e/space/?userid=192797?feed_filter=/pr/2016-09-02/861345.html
http://ddzan.net/e/space/?userid=192798?feed_filter=/ci/2016-09-02/124096.html
http://ddzan.net/e/space/?userid=192799?feed_filter=/fi/2016-09-02/431802.html
http://ddzan.net/e/space/?userid=192800?feed_filter=/dr/2016-09-02/035728.html
http://ddzan.net/e/space/?userid=192801?feed_filter=/fn/2016-09-02/082796.html
http://ddzan.net/e/space/?userid=192802?feed_filter=/he/2016-09-02/185643.html
http://ddzan.net/e/space/?userid=192803?feed_filter=/bz/2016-09-02/593268.html
http://ddzan.net/e/space/?userid=192804?feed_filter=/hq/2016-09-02/824173.html
http://ddzan.net/e/space/?userid=192805?feed_filter=/cv/2016-09-02/957843.html
http://ddzan.net/e/space/?userid=192806?feed_filter=/of/2016-09-02/087493.html
http://ddzan.net/e/space/?userid=192807?feed_filter=/lm/2016-09-02/254637.html
http://ddzan.net/e/space/?userid=192808?feed_filter=/oh/2016-09-02/568139.html
http://ddzan.net/e/space/?userid=192809?feed_filter=/iv/2016-09-02/935704.html
http://ddzan.net/e/space/?userid=192810?feed_filter=/od/2016-09-02/931620.html
http://ddzan.net/e/space/?userid=192811?feed_filter=/tj/2016-09-02/721063.html
http://ddzan.net/e/space/?userid=192812?feed_filter=/hc/2016-09-02/910867.html
http://ddzan.net/e/space/?userid=192813?feed_filter=/od/2016-09-02/573916.html
http://ddzan.net/e/space/?userid=192814?feed_filter=/km/2016-09-02/570369.html
http://ddzan.net/e/space/?userid=192815?feed_filter=/kx/2016-09-02/185273.html
http://ddzan.net/e/space/?userid=192816?feed_filter=/wn/2016-09-02/058629.html
http://ddzan.net/e/space/?userid=192817?feed_filter=/br/2016-09-02/453182.html
http://ddzan.net/e/space/?userid=192818?feed_filter=/yd/2016-09-02/364815.html
http://ddzan.net/e/space/?userid=192819?feed_filter=/cf/2016-09-02/563042.html
http://ddzan.net/e/space/?userid=192820?feed_filter=/xz/2016-09-02/502849.html
http://ddzan.net/e/space/?userid=192821?feed_filter=/xu/2016-09-02/456823.html
http://ddzan.net/e/space/?userid=192822?feed_filter=/ye/2016-09-02/345087.html
http://ddzan.net/e/space/?userid=192823?feed_filter=/mv/2016-09-02/058724.html
http://ddzan.net/e/space/?userid=192824?feed_filter=/vn/2016-09-02/942507.html
http://ddzan.net/e/space/?userid=192825?feed_filter=/yk/2016-09-02/856271.html
http://ddzan.net/e/space/?userid=192826?feed_filter=/pb/2016-09-02/015842.html
http://ddzan.net/e/space/?userid=192827?feed_filter=/kg/2016-09-02/937510.html
http://ddzan.net/e/space/?userid=192828?feed_filter=/fr/2016-09-02/894675.html
http://ddzan.net/e/space/?userid=192829?feed_filter=/rl/2016-09-02/764530.html
http://ddzan.net/e/space/?userid=192830?feed_filter=/ku/2016-09-02/294387.html
http://ddzan.net/e/space/?userid=192831?feed_filter=/bs/2016-09-02/861930.html
http://ddzan.net/e/space/?userid=192832?feed_filter=/lw/2016-09-02/980124.html
http://ddzan.net/e/space/?userid=192833?feed_filter=/ku/2016-09-02/786495.html
http://ddzan.net/e/space/?userid=192834?feed_filter=/wj/2016-09-02/804157.html
http://ddzan.net/e/space/?userid=192835?feed_filter=/xy/2016-09-02/957236.html
http://ddzan.net/e/space/?userid=192836?feed_filter=/wk/2016-09-02/724903.html
http://ddzan.net/e/space/?userid=192837?feed_filter=/ps/2016-09-02/765809.html
http://ddzan.net/e/space/?userid=192838?feed_filter=/ko/2016-09-02/846510.html
http://ddzan.net/e/space/?userid=192839?feed_filter=/kt/2016-09-02/267385.html
http://ddzan.net/e/space/?userid=192840?feed_filter=/rh/2016-09-02/037625.html
http://ddzan.net/e/space/?userid=192841?feed_filter=/st/2016-09-02/240156.html
http://ddzan.net/e/space/?userid=192842?feed_filter=/us/2016-09-02/937458.html
http://ddzan.net/e/space/?userid=192843?feed_filter=/vn/2016-09-02/430216.html
http://ddzan.net/e/space/?userid=192844?feed_filter=/mx/2016-09-02/264530.html
http://ddzan.net/e/space/?userid=192845?feed_filter=/si/2016-09-02/456130.html
http://ddzan.net/e/space/?userid=192846?feed_filter=/wl/2016-09-02/182905.html
http://ddzan.net/e/space/?userid=192847?feed_filter=/xe/2016-09-02/789312.html
http://ddzan.net/e/space/?userid=192848?feed_filter=/gp/2016-09-02/516739.html
http://ddzan.net/e/space/?userid=192849?feed_filter=/bf/2016-09-02/517926.html
http://ddzan.net/e/space/?userid=192850?feed_filter=/ls/2016-09-02/639547.html
http://ddzan.net/e/space/?userid=192851?feed_filter=/xs/2016-09-02/281453.html
http://ddzan.net/e/space/?userid=192852?feed_filter=/lh/2016-09-02/847310.html
http://ddzan.net/e/space/?userid=192853?feed_filter=/ig/2016-09-02/519678.html
http://ddzan.net/e/space/?userid=192854?feed_filter=/wa/2016-09-02/857031.html
http://ddzan.net/e/space/?userid=192855?feed_filter=/ef/2016-09-02/038942.html
http://ddzan.net/e/space/?userid=192856?feed_filter=/xr/2016-09-02/834217.html
http://ddzan.net/e/space/?userid=192857?feed_filter=/es/2016-09-02/937451.html
http://ddzan.net/e/space/?userid=192858?feed_filter=/xc/2016-09-02/508426.html
http://ddzan.net/e/space/?userid=192859?feed_filter=/zq/2016-09-02/356921.html
http://ddzan.net/e/space/?userid=192860?feed_filter=/fl/2016-09-02/182460.html
http://ddzan.net/e/space/?userid=192861?feed_filter=/sw/2016-09-02/860572.html
http://ddzan.net/e/space/?userid=192862?feed_filter=/cd/2016-09-02/634057.html
http://ddzan.net/e/space/?userid=192863?feed_filter=/vy/2016-09-02/831975.html
http://ddzan.net/e/space/?userid=192864?feed_filter=/oq/2016-09-02/957430.html
http://ddzan.net/e/space/?userid=192865?feed_filter=/fg/2016-09-02/731569.html
http://ddzan.net/e/space/?userid=192866?feed_filter=/cu/2016-09-02/580194.html
http://ddzan.net/e/space/?userid=192867?feed_filter=/ap/2016-09-02/582467.html
http://ddzan.net/e/space/?userid=192868?feed_filter=/kd/2016-09-02/398456.html
http://ddzan.net/e/space/?userid=192869?feed_filter=/tz/2016-09-02/572846.html
http://ddzan.net/e/space/?userid=192870?feed_filter=/mj/2016-09-02/712836.html
http://ddzan.net/e/space/?userid=192871?feed_filter=/mn/2016-09-02/149072.html
http://ddzan.net/e/space/?userid=192872?feed_filter=/mn/2016-09-02/065793.html
http://ddzan.net/e/space/?userid=192873?feed_filter=/if/2016-09-02/316870.html
http://ddzan.net/e/space/?userid=192874?feed_filter=/rj/2016-09-02/475213.html
http://ddzan.net/e/space/?userid=192875?feed_filter=/wf/2016-09-02/904285.html
http://ddzan.net/e/space/?userid=192876?feed_filter=/th/2016-09-02/974230.html
http://ddzan.net/e/space/?userid=192877?feed_filter=/xw/2016-09-02/983506.html
http://ddzan.net/e/space/?userid=192878?feed_filter=/uz/2016-09-02/374082.html
http://ddzan.net/e/space/?userid=192879?feed_filter=/pd/2016-09-02/605174.html
http://ddzan.net/e/space/?userid=192880?feed_filter=/rv/2016-09-02/429860.html
http://ddzan.net/e/space/?userid=192881?feed_filter=/fa/2016-09-02/371859.html
http://ddzan.net/e/space/?userid=192882?feed_filter=/ip/2016-09-02/935867.html
http://ddzan.net/e/space/?userid=192883?feed_filter=/xw/2016-09-02/426953.html
http://ddzan.net/e/space/?userid=192884?feed_filter=/rf/2016-09-02/159084.html
http://ddzan.net/e/space/?userid=192885?feed_filter=/gy/2016-09-02/179034.html
http://ddzan.net/e/space/?userid=192886?feed_filter=/ha/2016-09-02/784312.html
http://ddzan.net/e/space/?userid=192887?feed_filter=/he/2016-09-02/082619.html
http://ddzan.net/e/space/?userid=192888?feed_filter=/lp/2016-09-02/469012.html
http://ddzan.net/e/space/?userid=192889?feed_filter=/md/2016-09-02/729304.html
http://ddzan.net/e/space/?userid=192890?feed_filter=/iq/2016-09-02/951638.html
http://ddzan.net/e/space/?userid=192891?feed_filter=/ew/2016-09-02/310658.html
http://ddzan.net/e/space/?userid=192892?feed_filter=/rv/2016-09-02/192867.html
http://ddzan.net/e/space/?userid=192893?feed_filter=/dh/2016-09-02/137468.html
http://ddzan.net/e/space/?userid=192894?feed_filter=/ca/2016-09-02/258643.html
http://ddzan.net/e/space/?userid=192895?feed_filter=/in/2016-09-02/019845.html
http://ddzan.net/e/space/?userid=192896?feed_filter=/yl/2016-09-02/470316.html
http://ddzan.net/e/space/?userid=192897?feed_filter=/lz/2016-09-02/792615.html
http://ddzan.net/e/space/?userid=192898?feed_filter=/zk/2016-09-02/147609.html
http://ddzan.net/e/space/?userid=192899?feed_filter=/ay/2016-09-02/176084.html
http://ddzan.net/e/space/?userid=192900?feed_filter=/bj/2016-09-02/956287.html
http://ddzan.net/e/space/?userid=192901?feed_filter=/dt/2016-09-02/209817.html
http://ddzan.net/e/space/?userid=192902?feed_filter=/an/2016-09-02/547926.html
http://ddzan.net/e/space/?userid=192903?feed_filter=/ml/2016-09-02/716248.html
http://ddzan.net/e/space/?userid=192904?feed_filter=/sn/2016-09-02/206913.html
http://ddzan.net/e/space/?userid=192905?feed_filter=/xr/2016-09-02/963285.html
http://ddzan.net/e/space/?userid=192906?feed_filter=/my/2016-09-02/078431.html
http://ddzan.net/e/space/?userid=192907?feed_filter=/zc/2016-09-02/701264.html
http://ddzan.net/e/space/?userid=192908?feed_filter=/bx/2016-09-02/419683.html
http://ddzan.net/e/space/?userid=192909?feed_filter=/tm/2016-09-02/672854.html
http://ddzan.net/e/space/?userid=192910?feed_filter=/vd/2016-09-02/219368.html
http://ddzan.net/e/space/?userid=192911?feed_filter=/lo/2016-09-02/825964.html
http://ddzan.net/e/space/?userid=192912?feed_filter=/md/2016-09-02/981037.html
http://ddzan.net/e/space/?userid=192913?feed_filter=/it/2016-09-02/165397.html
http://ddzan.net/e/space/?userid=192914?feed_filter=/qh/2016-09-02/028579.html
http://ddzan.net/e/space/?userid=192915?feed_filter=/cf/2016-09-02/546380.html
http://ddzan.net/e/space/?userid=192916?feed_filter=/dz/2016-09-02/512683.html
http://ddzan.net/e/space/?userid=192917?feed_filter=/vk/2016-09-02/732914.html
http://ddzan.net/e/space/?userid=192918?feed_filter=/cj/2016-09-02/140738.html
http://ddzan.net/e/space/?userid=192919?feed_filter=/wf/2016-09-02/385241.html
http://ddzan.net/e/space/?userid=192920?feed_filter=/mu/2016-09-02/791382.html
http://ddzan.net/e/space/?userid=192921?feed_filter=/ku/2016-09-02/597438.html
http://ddzan.net/e/space/?userid=192922?feed_filter=/om/2016-09-02/724159.html
http://ddzan.net/e/space/?userid=192923?feed_filter=/zv/2016-09-02/152483.html
http://ddzan.net/e/space/?userid=192924?feed_filter=/ju/2016-09-02/973064.html
http://ddzan.net/e/space/?userid=192925?feed_filter=/ug/2016-09-02/480917.html
http://ddzan.net/e/space/?userid=192926?feed_filter=/zp/2016-09-02/875639.html
http://ddzan.net/e/space/?userid=192927?feed_filter=/ud/2016-09-02/581704.html
http://ddzan.net/e/space/?userid=192928?feed_filter=/fm/2016-09-02/423506.html
http://ddzan.net/e/space/?userid=192929?feed_filter=/uz/2016-09-02/479386.html
http://ddzan.net/e/space/?userid=192930?feed_filter=/el/2016-09-02/345720.html
http://ddzan.net/e/space/?userid=192931?feed_filter=/kr/2016-09-02/670912.html
http://ddzan.net/e/space/?userid=192932?feed_filter=/ju/2016-09-02/186325.html
http://ddzan.net/e/space/?userid=192933?feed_filter=/ql/2016-09-02/592103.html
http://ddzan.net/e/space/?userid=192934?feed_filter=/fc/2016-09-02/935648.html
http://ddzan.net/e/space/?userid=192935?feed_filter=/xj/2016-09-02/170968.html
http://ddzan.net/e/space/?userid=192936?feed_filter=/qi/2016-09-02/046318.html
http://ddzan.net/e/space/?userid=192937?feed_filter=/is/2016-09-02/378410.html
http://ddzan.net/e/space/?userid=192938?feed_filter=/uq/2016-09-02/738412.html
http://ddzan.net/e/space/?userid=192939?feed_filter=/oq/2016-09-02/895637.html
http://ddzan.net/e/space/?userid=192940?feed_filter=/xy/2016-09-02/196407.html
http://ddzan.net/e/space/?userid=192941?feed_filter=/kc/2016-09-02/906375.html
http://ddzan.net/e/space/?userid=192942?feed_filter=/nb/2016-09-02/516087.html
http://ddzan.net/e/space/?userid=192943?feed_filter=/wc/2016-09-02/948265.html
http://ddzan.net/e/space/?userid=192944?feed_filter=/pw/2016-09-02/639140.html
http://ddzan.net/e/space/?userid=192945?feed_filter=/nw/2016-09-02/912406.html
http://ddzan.net/e/space/?userid=192946?feed_filter=/ks/2016-09-02/105269.html
http://ddzan.net/e/space/?userid=192947?feed_filter=/zu/2016-09-02/946012.html
http://ddzan.net/e/space/?userid=192948?feed_filter=/iy/2016-09-02/318062.html
http://ddzan.net/e/space/?userid=192949?feed_filter=/lf/2016-09-02/726815.html
http://ddzan.net/e/space/?userid=192950?feed_filter=/kl/2016-09-02/423597.html
http://ddzan.net/e/space/?userid=192951?feed_filter=/md/2016-09-02/153487.html
http://ddzan.net/e/space/?userid=192952?feed_filter=/bo/2016-09-02/750934.html
http://ddzan.net/e/space/?userid=192953?feed_filter=/av/2016-09-02/165273.html
http://ddzan.net/e/space/?userid=192954?feed_filter=/yn/2016-09-02/462851.html
http://ddzan.net/e/space/?userid=192955?feed_filter=/dn/2016-09-02/057461.html
http://ddzan.net/e/space/?userid=192956?feed_filter=/fc/2016-09-02/284750.html
http://ddzan.net/e/space/?userid=192957?feed_filter=/cm/2016-09-02/905743.html
http://ddzan.net/e/space/?userid=192958?feed_filter=/lm/2016-09-02/368574.html
http://ddzan.net/e/space/?userid=192959?feed_filter=/yl/2016-09-02/872461.html
http://ddzan.net/e/space/?userid=192960?feed_filter=/iq/2016-09-02/169302.html
http://ddzan.net/e/space/?userid=192961?feed_filter=/zv/2016-09-02/268754.html
http://ddzan.net/e/space/?userid=192962?feed_filter=/vx/2016-09-02/064531.html
http://ddzan.net/e/space/?userid=192963?feed_filter=/qn/2016-09-02/245608.html
http://ddzan.net/e/space/?userid=192964?feed_filter=/zo/2016-09-02/041852.html
http://ddzan.net/e/space/?userid=192965?feed_filter=/an/2016-09-02/584073.html
http://ddzan.net/e/space/?userid=192966?feed_filter=/xe/2016-09-02/982650.html
http://ddzan.net/e/space/?userid=192967?feed_filter=/ke/2016-09-02/860134.html
http://ddzan.net/e/space/?userid=192968?feed_filter=/ng/2016-09-02/794356.html
http://ddzan.net/e/space/?userid=192969?feed_filter=/vr/2016-09-02/237016.html
http://ddzan.net/e/space/?userid=192970?feed_filter=/kb/2016-09-02/741693.html
http://ddzan.net/e/space/?userid=192971?feed_filter=/tn/2016-09-02/495102.html
http://ddzan.net/e/space/?userid=192972?feed_filter=/gs/2016-09-02/379854.html
http://ddzan.net/e/space/?userid=192973?feed_filter=/tv/2016-09-02/951270.html
http://ddzan.net/e/space/?userid=192974?feed_filter=/tg/2016-09-02/761592.html
http://ddzan.net/e/space/?userid=192975?feed_filter=/qe/2016-09-02/163590.html
http://ddzan.net/e/space/?userid=192976?feed_filter=/ic/2016-09-02/986347.html
http://ddzan.net/e/space/?userid=192977?feed_filter=/ok/2016-09-02/975168.html
http://ddzan.net/e/space/?userid=192978?feed_filter=/by/2016-09-02/241063.html
http://ddzan.net/e/space/?userid=192979?feed_filter=/oh/2016-09-02/086425.html
http://ddzan.net/e/space/?userid=192980?feed_filter=/gn/2016-09-02/981327.html
http://ddzan.net/e/space/?userid=192981?feed_filter=/um/2016-09-02/834295.html
http://ddzan.net/e/space/?userid=192982?feed_filter=/lu/2016-09-02/082165.html
http://ddzan.net/e/space/?userid=192983?feed_filter=/th/2016-09-02/415702.html
http://ddzan.net/e/space/?userid=192984?feed_filter=/fx/2016-09-02/984153.html
http://ddzan.net/e/space/?userid=192985?feed_filter=/mg/2016-09-02/658029.html
http://ddzan.net/e/space/?userid=192986?feed_filter=/rh/2016-09-02/461325.html
http://ddzan.net/e/space/?userid=192987?feed_filter=/wu/2016-09-02/471820.html
http://ddzan.net/e/space/?userid=192988?feed_filter=/fq/2016-09-02/682037.html
http://ddzan.net/e/space/?userid=192989?feed_filter=/jy/2016-09-02/245803.html
http://ddzan.net/e/space/?userid=192990?feed_filter=/nk/2016-09-02/980426.html
http://ddzan.net/e/space/?userid=192991?feed_filter=/op/2016-09-02/052678.html
http://ddzan.net/e/space/?userid=192992?feed_filter=/ia/2016-09-02/390824.html
http://ddzan.net/e/space/?userid=192993?feed_filter=/qc/2016-09-02/146203.html
http://ddzan.net/e/space/?userid=192994?feed_filter=/id/2016-09-02/125679.html
http://ddzan.net/e/space/?userid=192995?feed_filter=/jb/2016-09-02/536781.html
http://ddzan.net/e/space/?userid=192996?feed_filter=/gj/2016-09-02/148357.html
http://ddzan.net/e/space/?userid=192997?feed_filter=/nx/2016-09-02/246193.html
http://ddzan.net/e/space/?userid=192998?feed_filter=/yh/2016-09-02/173042.html
http://ddzan.net/e/space/?userid=192999?feed_filter=/ok/2016-09-02/924381.html
http://ddzan.net/e/space/?userid=193000?feed_filter=/uz/2016-09-02/708354.html
http://ddzan.net/e/space/?userid=193001?feed_filter=/xl/2016-09-02/270196.html
http://ddzan.net/e/space/?userid=193002?feed_filter=/yn/2016-09-02/610238.html
http://ddzan.net/e/space/?userid=193003?feed_filter=/ln/2016-09-02/592840.html
http://ddzan.net/e/space/?userid=193004?feed_filter=/ul/2016-09-02/372954.html
http://ddzan.net/e/space/?userid=193005?feed_filter=/gl/2016-09-02/591263.html
http://ddzan.net/e/space/?userid=193006?feed_filter=/ny/2016-09-02/281567.html
http://ddzan.net/e/space/?userid=193007?feed_filter=/ol/2016-09-02/314809.html
http://ddzan.net/e/space/?userid=193008?feed_filter=/nz/2016-09-02/609458.html
http://ddzan.net/e/space/?userid=193009?feed_filter=/jv/2016-09-02/154732.html
http://ddzan.net/e/space/?userid=193010?feed_filter=/yi/2016-09-02/204163.html
http://ddzan.net/e/space/?userid=193011?feed_filter=/aj/2016-09-02/976053.html
http://ddzan.net/e/space/?userid=193012?feed_filter=/xr/2016-09-02/013827.html
http://ddzan.net/e/space/?userid=193013?feed_filter=/wa/2016-09-02/096158.html
http://ddzan.net/e/space/?userid=193014?feed_filter=/vk/2016-09-02/805749.html
http://ddzan.net/e/space/?userid=193015?feed_filter=/iq/2016-09-02/842569.html
http://ddzan.net/e/space/?userid=193016?feed_filter=/sa/2016-09-02/215604.html
http://ddzan.net/e/space/?userid=193017?feed_filter=/mt/2016-09-02/495276.html
http://ddzan.net/e/space/?userid=193018?feed_filter=/vm/2016-09-02/806739.html
http://ddzan.net/e/space/?userid=193019?feed_filter=/yn/2016-09-02/602359.html
http://ddzan.net/e/space/?userid=193020?feed_filter=/id/2016-09-02/589273.html
http://ddzan.net/e/space/?userid=193021?feed_filter=/jm/2016-09-02/126543.html
http://ddzan.net/e/space/?userid=193022?feed_filter=/ty/2016-09-02/609854.html
http://ddzan.net/e/space/?userid=193023?feed_filter=/bm/2016-09-02/934716.html
http://ddzan.net/e/space/?userid=193024?feed_filter=/dp/2016-09-02/386901.html
http://ddzan.net/e/space/?userid=193025?feed_filter=/ra/2016-09-02/253694.html
http://ddzan.net/e/space/?userid=193026?feed_filter=/fc/2016-09-02/750269.html
http://ddzan.net/e/space/?userid=193027?feed_filter=/af/2016-09-02/431602.html
http://ddzan.net/e/space/?userid=193028?feed_filter=/ys/2016-09-02/354917.html
http://ddzan.net/e/space/?userid=193029?feed_filter=/kc/2016-09-02/140678.html
http://ddzan.net/e/space/?userid=193030?feed_filter=/wt/2016-09-02/523190.html
http://ddzan.net/e/space/?userid=193031?feed_filter=/jz/2016-09-02/956132.html
http://ddzan.net/e/space/?userid=193032?feed_filter=/vg/2016-09-02/875139.html
http://ddzan.net/e/space/?userid=193033?feed_filter=/kp/2016-09-02/378162.html
http://ddzan.net/e/space/?userid=193034?feed_filter=/ue/2016-09-02/137254.html
http://ddzan.net/e/space/?userid=193035?feed_filter=/fd/2016-09-02/405638.html
http://ddzan.net/e/space/?userid=193036?feed_filter=/ep/2016-09-02/910368.html
http://ddzan.net/e/space/?userid=193037?feed_filter=/qt/2016-09-02/548326.html
http://ddzan.net/e/space/?userid=193038?feed_filter=/nw/2016-09-02/791805.html
http://ddzan.net/e/space/?userid=193039?feed_filter=/yp/2016-09-02/987564.html
http://ddzan.net/e/space/?userid=193040?feed_filter=/ow/2016-09-02/641205.html
http://ddzan.net/e/space/?userid=193041?feed_filter=/je/2016-09-02/254018.html
http://ddzan.net/e/space/?userid=193042?feed_filter=/jy/2016-09-02/973541.html
http://ddzan.net/e/space/?userid=193043?feed_filter=/is/2016-09-02/078592.html
http://ddzan.net/e/space/?userid=193044?feed_filter=/zr/2016-09-02/675294.html
http://ddzan.net/e/space/?userid=193045?feed_filter=/fb/2016-09-02/780516.html
http://ddzan.net/e/space/?userid=193046?feed_filter=/fk/2016-09-02/725043.html
http://ddzan.net/e/space/?userid=193047?feed_filter=/tp/2016-09-02/623597.html
http://ddzan.net/e/space/?userid=193048?feed_filter=/ak/2016-09-02/764813.html
http://ddzan.net/e/space/?userid=193049?feed_filter=/xb/2016-09-02/580697.html
http://ddzan.net/e/space/?userid=193050?feed_filter=/yp/2016-09-02/341672.html
http://ddzan.net/e/space/?userid=193051?feed_filter=/xn/2016-09-02/702439.html
http://ddzan.net/e/space/?userid=193052?feed_filter=/mi/2016-09-02/612054.html
http://ddzan.net/e/space/?userid=193053?feed_filter=/tn/2016-09-02/294751.html
http://ddzan.net/e/space/?userid=193054?feed_filter=/ok/2016-09-02/360892.html
http://ddzan.net/e/space/?userid=193055?feed_filter=/eg/2016-09-02/391864.html
http://ddzan.net/e/space/?userid=193056?feed_filter=/ub/2016-09-02/652738.html
http://ddzan.net/e/space/?userid=193057?feed_filter=/yz/2016-09-02/475690.html
http://ddzan.net/e/space/?userid=193058?feed_filter=/ke/2016-09-02/704189.html
http://ddzan.net/e/space/?userid=193059?feed_filter=/et/2016-09-02/169203.html
http://ddzan.net/e/space/?userid=193060?feed_filter=/hk/2016-09-02/951306.html
http://ddzan.net/e/space/?userid=193061?feed_filter=/wy/2016-09-02/073214.html
http://ddzan.net/e/space/?userid=193062?feed_filter=/ms/2016-09-02/360421.html
http://ddzan.net/e/space/?userid=193063?feed_filter=/fk/2016-09-02/632740.html
http://ddzan.net/e/space/?userid=193064?feed_filter=/ft/2016-09-02/641853.html
http://ddzan.net/e/space/?userid=193065?feed_filter=/no/2016-09-02/763254.html
http://ddzan.net/e/space/?userid=193066?feed_filter=/lw/2016-09-02/941587.html
http://ddzan.net/e/space/?userid=193067?feed_filter=/oi/2016-09-02/189073.html
http://ddzan.net/e/space/?userid=193068?feed_filter=/xh/2016-09-02/351076.html
http://ddzan.net/e/space/?userid=193069?feed_filter=/ef/2016-09-02/541729.html
http://ddzan.net/e/space/?userid=193070?feed_filter=/rt/2016-09-02/217936.html
http://ddzan.net/e/space/?userid=193071?feed_filter=/fq/2016-09-02/610793.html
http://ddzan.net/e/space/?userid=193072?feed_filter=/ci/2016-09-02/873512.html
http://ddzan.net/e/space/?userid=193073?feed_filter=/ze/2016-09-02/914873.html
http://ddzan.net/e/space/?userid=193074?feed_filter=/of/2016-09-02/032481.html
http://ddzan.net/e/space/?userid=193075?feed_filter=/ik/2016-09-02/920356.html
http://ddzan.net/e/space/?userid=193076?feed_filter=/rd/2016-09-02/284317.html
http://ddzan.net/e/space/?userid=193077?feed_filter=/rf/2016-09-02/452096.html
http://ddzan.net/e/space/?userid=193078?feed_filter=/va/2016-09-02/716320.html
http://ddzan.net/e/space/?userid=193079?feed_filter=/en/2016-09-02/230164.html
http://ddzan.net/e/space/?userid=193080?feed_filter=/tg/2016-09-02/314786.html
http://ddzan.net/e/space/?userid=193081?feed_filter=/fh/2016-09-02/902846.html
http://ddzan.net/e/space/?userid=193082?feed_filter=/fi/2016-09-02/401235.html
http://ddzan.net/e/space/?userid=193083?feed_filter=/as/2016-09-02/741506.html
http://ddzan.net/e/space/?userid=193084?feed_filter=/gz/2016-09-02/752649.html
http://ddzan.net/e/space/?userid=193085?feed_filter=/ub/2016-09-02/978405.html
http://ddzan.net/e/space/?userid=193086?feed_filter=/rd/2016-09-02/082365.html
http://ddzan.net/e/space/?userid=193087?feed_filter=/nc/2016-09-02/791436.html
http://ddzan.net/e/space/?userid=193088?feed_filter=/tp/2016-09-02/039267.html
http://ddzan.net/e/space/?userid=193089?feed_filter=/la/2016-09-02/150687.html
http://ddzan.net/e/space/?userid=193090?feed_filter=/ye/2016-09-02/986450.html
http://ddzan.net/e/space/?userid=193091?feed_filter=/kf/2016-09-02/803267.html
http://ddzan.net/e/space/?userid=193092?feed_filter=/xp/2016-09-02/706321.html
http://ddzan.net/e/space/?userid=193093?feed_filter=/gf/2016-09-02/340675.html
http://ddzan.net/e/space/?userid=193094?feed_filter=/fc/2016-09-02/851409.html
http://ddzan.net/e/space/?userid=193095?feed_filter=/fx/2016-09-02/268501.html
http://ddzan.net/e/space/?userid=193096?feed_filter=/nb/2016-09-02/231546.html
http://ddzan.net/e/space/?userid=193097?feed_filter=/qd/2016-09-02/140869.html
http://ddzan.net/e/space/?userid=193098?feed_filter=/pa/2016-09-02/715642.html
http://ddzan.net/e/space/?userid=193099?feed_filter=/eq/2016-09-02/893762.html
http://ddzan.net/e/space/?userid=193100?feed_filter=/cx/2016-09-02/142308.html
http://ddzan.net/e/space/?userid=193101?feed_filter=/wn/2016-09-02/784539.html
http://ddzan.net/e/space/?userid=193102?feed_filter=/yi/2016-09-02/342867.html
http://ddzan.net/e/space/?userid=193103?feed_filter=/xy/2016-09-02/075183.html
http://ddzan.net/e/space/?userid=193104?feed_filter=/zw/2016-09-02/592867.html
http://ddzan.net/e/space/?userid=193105?feed_filter=/xk/2016-09-02/896130.html
http://ddzan.net/e/space/?userid=193106?feed_filter=/sy/2016-09-02/382075.html
http://ddzan.net/e/space/?userid=193107?feed_filter=/vy/2016-09-02/826907.html
http://ddzan.net/e/space/?userid=193108?feed_filter=/gb/2016-09-02/148570.html
http://ddzan.net/e/space/?userid=193109?feed_filter=/us/2016-09-02/039672.html
http://ddzan.net/e/space/?userid=193110?feed_filter=/gx/2016-09-02/167948.html
http://ddzan.net/e/space/?userid=193111?feed_filter=/ra/2016-09-02/024361.html
http://ddzan.net/e/space/?userid=193112?feed_filter=/fb/2016-09-02/213498.html
http://ddzan.net/e/space/?userid=193113?feed_filter=/bv/2016-09-02/830491.html
http://ddzan.net/e/space/?userid=193114?feed_filter=/mg/2016-09-02/480267.html
http://ddzan.net/e/space/?userid=193115?feed_filter=/tv/2016-09-02/549236.html
http://ddzan.net/e/space/?userid=193116?feed_filter=/ys/2016-09-02/493870.html
http://ddzan.net/e/space/?userid=193117?feed_filter=/dt/2016-09-02/192583.html
http://ddzan.net/e/space/?userid=193118?feed_filter=/nc/2016-09-02/152936.html
http://ddzan.net/e/space/?userid=193119?feed_filter=/em/2016-09-02/780364.html
http://ddzan.net/e/space/?userid=193120?feed_filter=/fu/2016-09-02/579068.html
http://ddzan.net/e/space/?userid=193121?feed_filter=/gc/2016-09-02/912687.html
http://ddzan.net/e/space/?userid=193122?feed_filter=/ai/2016-09-02/135786.html
http://ddzan.net/e/space/?userid=193123?feed_filter=/ea/2016-09-02/192745.html
http://ddzan.net/e/space/?userid=193124?feed_filter=/yi/2016-09-02/820754.html
http://ddzan.net/e/space/?userid=193125?feed_filter=/co/2016-09-02/720184.html
http://ddzan.net/e/space/?userid=193126?feed_filter=/dy/2016-09-02/039846.html
http://ddzan.net/e/space/?userid=193127?feed_filter=/vz/2016-09-02/238671.html
http://ddzan.net/e/space/?userid=193128?feed_filter=/hl/2016-09-02/295406.html
http://ddzan.net/e/space/?userid=193129?feed_filter=/jv/2016-09-02/840915.html
http://ddzan.net/e/space/?userid=193130?feed_filter=/io/2016-09-02/258914.html
http://ddzan.net/e/space/?userid=193131?feed_filter=/if/2016-09-02/109872.html
http://ddzan.net/e/space/?userid=193132?feed_filter=/ec/2016-09-02/325970.html
http://ddzan.net/e/space/?userid=193133?feed_filter=/kb/2016-09-02/179453.html
http://ddzan.net/e/space/?userid=193134?feed_filter=/px/2016-09-02/569247.html
http://ddzan.net/e/space/?userid=193135?feed_filter=/lh/2016-09-02/269385.html
http://ddzan.net/e/space/?userid=193136?feed_filter=/lb/2016-09-02/271304.html
http://ddzan.net/e/space/?userid=193137?feed_filter=/wb/2016-09-02/401825.html
http://ddzan.net/e/space/?userid=193138?feed_filter=/nu/2016-09-02/596204.html
http://ddzan.net/e/space/?userid=193139?feed_filter=/yj/2016-09-02/620418.html
http://ddzan.net/e/space/?userid=193140?feed_filter=/yn/2016-09-02/653847.html
http://ddzan.net/e/space/?userid=193141?feed_filter=/gh/2016-09-02/394218.html
http://ddzan.net/e/space/?userid=193142?feed_filter=/jl/2016-09-02/143280.html
http://ddzan.net/e/space/?userid=193143?feed_filter=/ho/2016-09-02/019435.html
http://ddzan.net/e/space/?userid=193144?feed_filter=/sz/2016-09-02/269845.html
http://ddzan.net/e/space/?userid=193145?feed_filter=/ot/2016-09-02/481605.html
http://ddzan.net/e/space/?userid=193146?feed_filter=/al/2016-09-02/358169.html
http://ddzan.net/e/space/?userid=193147?feed_filter=/ut/2016-09-02/697580.html
http://ddzan.net/e/space/?userid=193148?feed_filter=/xk/2016-09-02/902718.html
http://ddzan.net/e/space/?userid=193149?feed_filter=/pq/2016-09-02/789652.html
http://ddzan.net/e/space/?userid=193150?feed_filter=/ml/2016-09-02/345670.html
http://ddzan.net/e/space/?userid=193151?feed_filter=/dj/2016-09-02/397612.html
http://ddzan.net/e/space/?userid=193152?feed_filter=/ew/2016-09-02/243097.html
http://ddzan.net/e/space/?userid=193153?feed_filter=/zr/2016-09-02/876520.html
http://ddzan.net/e/space/?userid=193154?feed_filter=/ew/2016-09-02/037154.html
http://ddzan.net/e/space/?userid=193155?feed_filter=/yj/2016-09-02/720635.html
http://ddzan.net/e/space/?userid=193156?feed_filter=/pe/2016-09-02/270643.html
http://ddzan.net/e/space/?userid=193157?feed_filter=/hq/2016-09-02/582634.html
http://ddzan.net/e/space/?userid=193158?feed_filter=/hz/2016-09-02/968045.html
http://ddzan.net/e/space/?userid=193159?feed_filter=/vd/2016-09-02/893760.html
http://ddzan.net/e/space/?userid=193160?feed_filter=/yb/2016-09-02/918023.html
http://ddzan.net/e/space/?userid=193161?feed_filter=/ga/2016-09-02/649158.html
http://ddzan.net/e/space/?userid=193162?feed_filter=/mv/2016-09-02/709562.html
http://ddzan.net/e/space/?userid=193163?feed_filter=/is/2016-09-02/801547.html
http://ddzan.net/e/space/?userid=193164?feed_filter=/es/2016-09-02/284136.html
http://ddzan.net/e/space/?userid=193165?feed_filter=/zl/2016-09-02/582643.html
http://ddzan.net/e/space/?userid=193166?feed_filter=/uv/2016-09-02/258401.html
http://ddzan.net/e/space/?userid=193167?feed_filter=/mr/2016-09-02/861724.html
http://ddzan.net/e/space/?userid=193168?feed_filter=/jb/2016-09-02/710925.html
http://ddzan.net/e/space/?userid=193169?feed_filter=/ef/2016-09-02/134568.html
http://ddzan.net/e/space/?userid=193170?feed_filter=/he/2016-09-02/061974.html
http://ddzan.net/e/space/?userid=193171?feed_filter=/fj/2016-09-02/846123.html
http://ddzan.net/e/space/?userid=193172?feed_filter=/eh/2016-09-02/286143.html
http://ddzan.net/e/space/?userid=193173?feed_filter=/kl/2016-09-02/817529.html
http://ddzan.net/e/space/?userid=193174?feed_filter=/rf/2016-09-02/960472.html
http://ddzan.net/e/space/?userid=193175?feed_filter=/mt/2016-09-02/538721.html
http://ddzan.net/e/space/?userid=193176?feed_filter=/po/2016-09-02/430617.html
http://ddzan.net/e/space/?userid=193177?feed_filter=/cu/2016-09-02/624907.html
http://ddzan.net/e/space/?userid=193178?feed_filter=/ey/2016-09-02/368941.html
http://ddzan.net/e/space/?userid=193179?feed_filter=/lq/2016-09-02/893207.html
http://ddzan.net/e/space/?userid=193180?feed_filter=/na/2016-09-02/746125.html
http://ddzan.net/e/space/?userid=193181?feed_filter=/ip/2016-09-02/854273.html
http://ddzan.net/e/space/?userid=193182?feed_filter=/di/2016-09-02/832140.html
http://ddzan.net/e/space/?userid=193183?feed_filter=/pn/2016-09-02/156839.html
http://ddzan.net/e/space/?userid=193184?feed_filter=/xg/2016-09-02/840759.html
http://ddzan.net/e/space/?userid=193185?feed_filter=/ic/2016-09-02/027189.html
http://ddzan.net/e/space/?userid=193186?feed_filter=/eg/2016-09-02/876504.html
http://ddzan.net/e/space/?userid=193187?feed_filter=/gx/2016-09-02/175094.html
http://ddzan.net/e/space/?userid=193188?feed_filter=/vl/2016-09-02/560381.html
http://ddzan.net/e/space/?userid=193189?feed_filter=/sw/2016-09-02/165734.html
http://ddzan.net/e/space/?userid=193190?feed_filter=/nx/2016-09-02/307426.html
http://ddzan.net/e/space/?userid=193191?feed_filter=/qh/2016-09-02/581309.html
http://ddzan.net/e/space/?userid=193192?feed_filter=/mk/2016-09-02/501842.html
http://ddzan.net/e/space/?userid=193193?feed_filter=/bn/2016-09-02/603497.html
http://ddzan.net/e/space/?userid=193194?feed_filter=/be/2016-09-02/592613.html
http://ddzan.net/e/space/?userid=193195?feed_filter=/gk/2016-09-02/187963.html
http://ddzan.net/e/space/?userid=193196?feed_filter=/xk/2016-09-02/075618.html
http://ddzan.net/e/space/?userid=193197?feed_filter=/fk/2016-09-02/839612.html
http://ddzan.net/e/space/?userid=193198?feed_filter=/th/2016-09-02/938675.html
http://ddzan.net/e/space/?userid=193199?feed_filter=/ml/2016-09-02/085941.html
http://ddzan.net/e/space/?userid=193200?feed_filter=/bp/2016-09-02/361798.html
http://ddzan.net/e/space/?userid=193201?feed_filter=/ih/2016-09-02/021693.html
http://ddzan.net/e/space/?userid=193202?feed_filter=/mn/2016-09-02/583197.html
http://ddzan.net/e/space/?userid=193203?feed_filter=/rl/2016-09-02/347290.html
http://ddzan.net/e/space/?userid=193204?feed_filter=/zk/2016-09-02/134269.html
http://ddzan.net/e/space/?userid=193205?feed_filter=/es/2016-09-02/453706.html
http://ddzan.net/e/space/?userid=193206?feed_filter=/ml/2016-09-02/893604.html
http://ddzan.net/e/space/?userid=193207?feed_filter=/qd/2016-09-02/589706.html
http://ddzan.net/e/space/?userid=193208?feed_filter=/fv/2016-09-02/064531.html
http://ddzan.net/e/space/?userid=193209?feed_filter=/po/2016-09-02/259310.html
http://ddzan.net/e/space/?userid=193210?feed_filter=/rs/2016-09-02/938256.html
http://ddzan.net/e/space/?userid=193211?feed_filter=/tr/2016-09-02/923857.html
http://ddzan.net/e/space/?userid=193212?feed_filter=/ze/2016-09-02/015847.html
http://ddzan.net/e/space/?userid=193213?feed_filter=/lv/2016-09-02/602853.html
http://ddzan.net/e/space/?userid=193214?feed_filter=/jh/2016-09-02/796150.html
http://ddzan.net/e/space/?userid=193215?feed_filter=/wd/2016-09-02/829405.html
http://ddzan.net/e/space/?userid=193216?feed_filter=/xg/2016-09-02/312805.html
http://ddzan.net/e/space/?userid=193217?feed_filter=/lx/2016-09-02/536948.html
http://ddzan.net/e/space/?userid=193218?feed_filter=/oe/2016-09-02/509473.html
http://ddzan.net/e/space/?userid=193219?feed_filter=/zs/2016-09-02/910678.html
http://ddzan.net/e/space/?userid=193220?feed_filter=/ia/2016-09-02/972540.html
http://ddzan.net/e/space/?userid=193221?feed_filter=/uy/2016-09-02/742160.html
http://ddzan.net/e/space/?userid=193222?feed_filter=/hz/2016-09-02/578362.html
http://ddzan.net/e/space/?userid=193223?feed_filter=/lw/2016-09-02/513067.html
http://ddzan.net/e/space/?userid=193224?feed_filter=/fd/2016-09-02/498371.html
http://ddzan.net/e/space/?userid=193225?feed_filter=/yq/2016-09-02/345671.html
http://ddzan.net/e/space/?userid=193226?feed_filter=/py/2016-09-02/148639.html
http://ddzan.net/e/space/?userid=193227?feed_filter=/ih/2016-09-02/874250.html
http://ddzan.net/e/space/?userid=193228?feed_filter=/rf/2016-09-02/201435.html
http://ddzan.net/e/space/?userid=193229?feed_filter=/lp/2016-09-02/836501.html
http://ddzan.net/e/space/?userid=193230?feed_filter=/gq/2016-09-02/394025.html
http://ddzan.net/e/space/?userid=193231?feed_filter=/mq/2016-09-02/568934.html
http://ddzan.net/e/space/?userid=193232?feed_filter=/wk/2016-09-02/218695.html
http://ddzan.net/e/space/?userid=193233?feed_filter=/mi/2016-09-02/563142.html
http://ddzan.net/e/space/?userid=193234?feed_filter=/rh/2016-09-02/710486.html
http://ddzan.net/e/space/?userid=193235?feed_filter=/zx/2016-09-02/180629.html
http://ddzan.net/e/space/?userid=193236?feed_filter=/vu/2016-09-02/817592.html
http://ddzan.net/e/space/?userid=193237?feed_filter=/tf/2016-09-02/365198.html
http://ddzan.net/e/space/?userid=193238?feed_filter=/wp/2016-09-02/067859.html
http://ddzan.net/e/space/?userid=193239?feed_filter=/pw/2016-09-02/184739.html
http://ddzan.net/e/space/?userid=193240?feed_filter=/tz/2016-09-02/537614.html
http://ddzan.net/e/space/?userid=193241?feed_filter=/yw/2016-09-02/901763.html
http://ddzan.net/e/space/?userid=193242?feed_filter=/su/2016-09-02/485673.html
http://ddzan.net/e/space/?userid=193243?feed_filter=/vh/2016-09-02/071539.html
http://ddzan.net/e/space/?userid=193244?feed_filter=/xm/2016-09-02/453276.html
http://ddzan.net/e/space/?userid=193245?feed_filter=/se/2016-09-02/561308.html
http://ddzan.net/e/space/?userid=193246?feed_filter=/nv/2016-09-02/847932.html
http://ddzan.net/e/space/?userid=193247?feed_filter=/tb/2016-09-02/740928.html
http://ddzan.net/e/space/?userid=193248?feed_filter=/ui/2016-09-02/259467.html
http://ddzan.net/e/space/?userid=193249?feed_filter=/qc/2016-09-02/085746.html
http://ddzan.net/e/space/?userid=193250?feed_filter=/nx/2016-09-02/091527.html
http://ddzan.net/e/space/?userid=193251?feed_filter=/yr/2016-09-02/019526.html
http://ddzan.net/e/space/?userid=193252?feed_filter=/av/2016-09-02/734590.html
http://ddzan.net/e/space/?userid=193253?feed_filter=/no/2016-09-02/164293.html
http://ddzan.net/e/space/?userid=193254?feed_filter=/fk/2016-09-02/601943.html
http://ddzan.net/e/space/?userid=193255?feed_filter=/fv/2016-09-02/019834.html
http://ddzan.net/e/space/?userid=193256?feed_filter=/sh/2016-09-02/652809.html
http://ddzan.net/e/space/?userid=193257?feed_filter=/ue/2016-09-02/479308.html
http://ddzan.net/e/space/?userid=193258?feed_filter=/cv/2016-09-02/092865.html
http://ddzan.net/e/space/?userid=193259?feed_filter=/xg/2016-09-02/852690.html
http://ddzan.net/e/space/?userid=193260?feed_filter=/cm/2016-09-02/259164.html
http://ddzan.net/e/space/?userid=193261?feed_filter=/xa/2016-09-02/243810.html
http://ddzan.net/e/space/?userid=193262?feed_filter=/sk/2016-09-02/436075.html
http://ddzan.net/e/space/?userid=193263?feed_filter=/hv/2016-09-02/862351.html
http://ddzan.net/e/space/?userid=193264?feed_filter=/tn/2016-09-02/168427.html
http://ddzan.net/e/space/?userid=193265?feed_filter=/ot/2016-09-02/928470.html
http://ddzan.net/e/space/?userid=193266?feed_filter=/rz/2016-09-02/791824.html
http://ddzan.net/e/space/?userid=193267?feed_filter=/fr/2016-09-02/951827.html
http://ddzan.net/e/space/?userid=193268?feed_filter=/tg/2016-09-02/536720.html
http://ddzan.net/e/space/?userid=193269?feed_filter=/qm/2016-09-02/435271.html
http://ddzan.net/e/space/?userid=193270?feed_filter=/ry/2016-09-02/261948.html
http://ddzan.net/e/space/?userid=193271?feed_filter=/en/2016-09-02/682793.html
http://ddzan.net/e/space/?userid=193272?feed_filter=/qj/2016-09-02/643250.html
http://ddzan.net/e/space/?userid=193273?feed_filter=/ed/2016-09-02/918563.html
http://ddzan.net/e/space/?userid=193274?feed_filter=/nf/2016-09-02/438917.html
http://ddzan.net/e/space/?userid=193275?feed_filter=/ut/2016-09-02/256901.html
http://ddzan.net/e/space/?userid=193276?feed_filter=/on/2016-09-02/083241.html
http://ddzan.net/e/space/?userid=193277?feed_filter=/iw/2016-09-02/918452.html
http://ddzan.net/e/space/?userid=193278?feed_filter=/wh/2016-09-02/904831.html
http://ddzan.net/e/space/?userid=193279?feed_filter=/ar/2016-09-02/718536.html
http://ddzan.net/e/space/?userid=193280?feed_filter=/la/2016-09-02/704652.html
http://ddzan.net/e/space/?userid=193281?feed_filter=/gj/2016-09-02/057382.html
http://ddzan.net/e/space/?userid=193282?feed_filter=/jo/2016-09-02/790462.html
http://ddzan.net/e/space/?userid=193283?feed_filter=/qb/2016-09-02/951786.html
http://ddzan.net/e/space/?userid=193284?feed_filter=/bn/2016-09-02/695143.html
http://ddzan.net/e/space/?userid=193285?feed_filter=/fs/2016-09-02/283965.html
http://ddzan.net/e/space/?userid=193286?feed_filter=/zu/2016-09-02/834719.html
http://ddzan.net/e/space/?userid=193287?feed_filter=/ba/2016-09-02/826935.html
http://ddzan.net/e/space/?userid=193288?feed_filter=/lu/2016-09-02/632854.html
http://ddzan.net/e/space/?userid=193289?feed_filter=/gr/2016-09-02/260857.html
http://ddzan.net/e/space/?userid=193290?feed_filter=/rc/2016-09-02/647389.html
http://ddzan.net/e/space/?userid=193291?feed_filter=/xf/2016-09-02/258463.html
http://ddzan.net/e/space/?userid=193292?feed_filter=/ki/2016-09-02/328571.html
http://ddzan.net/e/space/?userid=193293?feed_filter=/eh/2016-09-02/587192.html
http://ddzan.net/e/space/?userid=193294?feed_filter=/gj/2016-09-02/690583.html
http://ddzan.net/e/space/?userid=193295?feed_filter=/ot/2016-09-02/563107.html
http://ddzan.net/e/space/?userid=193296?feed_filter=/jr/2016-09-02/053174.html
http://ddzan.net/e/space/?userid=193297?feed_filter=/je/2016-09-02/480613.html
http://ddzan.net/e/space/?userid=193298?feed_filter=/qi/2016-09-02/537628.html
http://ddzan.net/e/space/?userid=193299?feed_filter=/ce/2016-09-02/841026.html
http://ddzan.net/e/space/?userid=193300?feed_filter=/fq/2016-09-02/409317.html
http://ddzan.net/e/space/?userid=193301?feed_filter=/oy/2016-09-02/367094.html
http://ddzan.net/e/space/?userid=193302?feed_filter=/jc/2016-09-02/274938.html
http://ddzan.net/e/space/?userid=193303?feed_filter=/pn/2016-09-02/718365.html
http://ddzan.net/e/space/?userid=193304?feed_filter=/wq/2016-09-02/806972.html
http://ddzan.net/e/space/?userid=193305?feed_filter=/fl/2016-09-02/596472.html
http://ddzan.net/e/space/?userid=193306?feed_filter=/zd/2016-09-02/387942.html
http://ddzan.net/e/space/?userid=193307?feed_filter=/tc/2016-09-02/074329.html
http://ddzan.net/e/space/?userid=193308?feed_filter=/wq/2016-09-02/095684.html
http://ddzan.net/e/space/?userid=193309?feed_filter=/da/2016-09-02/032984.html
http://ddzan.net/e/space/?userid=193310?feed_filter=/wy/2016-09-02/357129.html
http://ddzan.net/e/space/?userid=193311?feed_filter=/ms/2016-09-02/475306.html
http://ddzan.net/e/space/?userid=193312?feed_filter=/kd/2016-09-02/513740.html
http://ddzan.net/e/space/?userid=193313?feed_filter=/dv/2016-09-02/346872.html
http://ddzan.net/e/space/?userid=193314?feed_filter=/pg/2016-09-02/278591.html
http://ddzan.net/e/space/?userid=193315?feed_filter=/tr/2016-09-02/867012.html
http://ddzan.net/e/space/?userid=193316?feed_filter=/xl/2016-09-02/169253.html
http://ddzan.net/e/space/?userid=193317?feed_filter=/ti/2016-09-02/618520.html
http://ddzan.net/e/space/?userid=193318?feed_filter=/sv/2016-09-02/689273.html
http://ddzan.net/e/space/?userid=193319?feed_filter=/wv/2016-09-02/810459.html
http://ddzan.net/e/space/?userid=193320?feed_filter=/zm/2016-09-02/864095.html
http://ddzan.net/e/space/?userid=193321?feed_filter=/yh/2016-09-02/149860.html
http://ddzan.net/e/space/?userid=193322?feed_filter=/rz/2016-09-02/316247.html
http://ddzan.net/e/space/?userid=193323?feed_filter=/qd/2016-09-02/215047.html
http://ddzan.net/e/space/?userid=193324?feed_filter=/lu/2016-09-02/596847.html
http://ddzan.net/e/space/?userid=193325?feed_filter=/wd/2016-09-02/946750.html
http://ddzan.net/e/space/?userid=193326?feed_filter=/mi/2016-09-02/598741.html
http://ddzan.net/e/space/?userid=193327?feed_filter=/wv/2016-09-02/061548.html
http://ddzan.net/e/space/?userid=193328?feed_filter=/za/2016-09-02/765183.html
http://ddzan.net/e/space/?userid=193329?feed_filter=/cs/2016-09-02/649028.html
http://ddzan.net/e/space/?userid=193330?feed_filter=/oz/2016-09-02/170936.html
http://ddzan.net/e/space/?userid=193331?feed_filter=/le/2016-09-02/470981.html
http://ddzan.net/e/space/?userid=193332?feed_filter=/bf/2016-09-02/018237.html
http://ddzan.net/e/space/?userid=193333?feed_filter=/ru/2016-09-02/546179.html
http://ddzan.net/e/space/?userid=193334?feed_filter=/np/2016-09-02/392508.html
http://ddzan.net/e/space/?userid=193335?feed_filter=/uo/2016-09-02/128356.html
http://ddzan.net/e/space/?userid=193336?feed_filter=/gh/2016-09-02/190756.html
http://ddzan.net/e/space/?userid=193337?feed_filter=/ac/2016-09-02/104532.html
http://ddzan.net/e/space/?userid=193338?feed_filter=/er/2016-09-02/824593.html
http://ddzan.net/e/space/?userid=193339?feed_filter=/np/2016-09-02/810473.html
http://ddzan.net/e/space/?userid=193340?feed_filter=/hu/2016-09-02/541976.html
http://ddzan.net/e/space/?userid=193341?feed_filter=/rz/2016-09-02/768103.html
http://ddzan.net/e/space/?userid=193342?feed_filter=/xm/2016-09-02/145289.html
http://ddzan.net/e/space/?userid=193343?feed_filter=/hx/2016-09-02/062384.html
http://ddzan.net/e/space/?userid=193344?feed_filter=/ho/2016-09-02/827053.html
http://ddzan.net/e/space/?userid=193345?feed_filter=/wp/2016-09-02/351976.html
http://ddzan.net/e/space/?userid=193346?feed_filter=/hr/2016-09-02/821953.html
http://ddzan.net/e/space/?userid=193347?feed_filter=/iw/2016-09-02/623815.html
http://ddzan.net/e/space/?userid=193348?feed_filter=/oy/2016-09-02/346057.html
http://ddzan.net/e/space/?userid=193349?feed_filter=/qj/2016-09-02/905768.html
http://ddzan.net/e/space/?userid=193350?feed_filter=/wm/2016-09-02/296713.html
http://ddzan.net/e/space/?userid=193351?feed_filter=/vm/2016-09-02/469587.html
http://ddzan.net/e/space/?userid=193352?feed_filter=/vo/2016-09-02/048672.html
http://ddzan.net/e/space/?userid=193353?feed_filter=/pq/2016-09-02/897564.html
http://ddzan.net/e/space/?userid=193354?feed_filter=/rq/2016-09-02/014365.html
http://ddzan.net/e/space/?userid=193355?feed_filter=/ae/2016-09-02/516287.html
http://ddzan.net/e/space/?userid=193356?feed_filter=/mp/2016-09-02/072398.html
http://ddzan.net/e/space/?userid=193357?feed_filter=/rw/2016-09-02/123906.html
http://ddzan.net/e/space/?userid=193358?feed_filter=/og/2016-09-02/176329.html
http://ddzan.net/e/space/?userid=193359?feed_filter=/vx/2016-09-02/069342.html
http://ddzan.net/e/space/?userid=193360?feed_filter=/mw/2016-09-02/681724.html
http://ddzan.net/e/space/?userid=193361?feed_filter=/fk/2016-09-02/936807.html
http://ddzan.net/e/space/?userid=193362?feed_filter=/lm/2016-09-02/942108.html
http://ddzan.net/e/space/?userid=193363?feed_filter=/cb/2016-09-02/354968.html
http://ddzan.net/e/space/?userid=193364?feed_filter=/be/2016-09-02/491602.html
http://ddzan.net/e/space/?userid=193365?feed_filter=/xp/2016-09-02/359261.html
http://ddzan.net/e/space/?userid=193366?feed_filter=/nw/2016-09-02/931725.html
http://ddzan.net/e/space/?userid=193367?feed_filter=/gm/2016-09-02/340156.html
http://ddzan.net/e/space/?userid=193368?feed_filter=/cp/2016-09-02/287146.html
http://ddzan.net/e/space/?userid=193369?feed_filter=/te/2016-09-02/093482.html
http://ddzan.net/e/space/?userid=193370?feed_filter=/ep/2016-09-02/536920.html
http://ddzan.net/e/space/?userid=193371?feed_filter=/vm/2016-09-02/925108.html
http://ddzan.net/e/space/?userid=193372?feed_filter=/rc/2016-09-02/013658.html
http://ddzan.net/e/space/?userid=193373?feed_filter=/on/2016-09-02/450728.html
http://ddzan.net/e/space/?userid=193374?feed_filter=/if/2016-09-02/129705.html
http://ddzan.net/e/space/?userid=193375?feed_filter=/ic/2016-09-02/756809.html
http://ddzan.net/e/space/?userid=193376?feed_filter=/ms/2016-09-02/258970.html
http://ddzan.net/e/space/?userid=193377?feed_filter=/wx/2016-09-02/543276.html
http://ddzan.net/e/space/?userid=193378?feed_filter=/py/2016-09-02/743086.html
http://ddzan.net/e/space/?userid=193379?feed_filter=/pt/2016-09-02/862401.html
http://ddzan.net/e/space/?userid=193380?feed_filter=/qd/2016-09-02/072395.html
http://ddzan.net/e/space/?userid=193381?feed_filter=/ir/2016-09-02/746520.html
http://ddzan.net/e/space/?userid=193382?feed_filter=/go/2016-09-02/046275.html
http://ddzan.net/e/space/?userid=193383?feed_filter=/tf/2016-09-02/580132.html
http://ddzan.net/e/space/?userid=193384?feed_filter=/sf/2016-09-02/983025.html
http://ddzan.net/e/space/?userid=193385?feed_filter=/yl/2016-09-02/162439.html
http://ddzan.net/e/space/?userid=193386?feed_filter=/xi/2016-09-02/405981.html
http://ddzan.net/e/space/?userid=193387?feed_filter=/rg/2016-09-02/106954.html
http://ddzan.net/e/space/?userid=193388?feed_filter=/rz/2016-09-02/092468.html
http://ddzan.net/e/space/?userid=193389?feed_filter=/bh/2016-09-02/357412.html
http://ddzan.net/e/space/?userid=193390?feed_filter=/si/2016-09-02/358419.html
http://ddzan.net/e/space/?userid=193391?feed_filter=/ck/2016-09-02/094628.html
http://ddzan.net/e/space/?userid=193392?feed_filter=/hr/2016-09-02/385209.html
http://ddzan.net/e/space/?userid=193393?feed_filter=/re/2016-09-02/240517.html
http://ddzan.net/e/space/?userid=193394?feed_filter=/zw/2016-09-02/314962.html
http://ddzan.net/e/space/?userid=193395?feed_filter=/eo/2016-09-02/820195.html
http://ddzan.net/e/space/?userid=193396?feed_filter=/fh/2016-09-02/908641.html
http://ddzan.net/e/space/?userid=193397?feed_filter=/fj/2016-09-02/328917.html
http://ddzan.net/e/space/?userid=193398?feed_filter=/we/2016-09-02/264078.html
http://ddzan.net/e/space/?userid=193399?feed_filter=/hf/2016-09-02/975032.html
http://ddzan.net/e/space/?userid=193400?feed_filter=/po/2016-09-02/825173.html
http://ddzan.net/e/space/?userid=193401?feed_filter=/rl/2016-09-02/958460.html
http://ddzan.net/e/space/?userid=193402?feed_filter=/ha/2016-09-02/231465.html
http://ddzan.net/e/space/?userid=193403?feed_filter=/wa/2016-09-02/182365.html
http://ddzan.net/e/space/?userid=193404?feed_filter=/zg/2016-09-02/724105.html
http://ddzan.net/e/space/?userid=193405?feed_filter=/cs/2016-09-02/826057.html
http://ddzan.net/e/space/?userid=193406?feed_filter=/yp/2016-09-02/821637.html
http://ddzan.net/e/space/?userid=193407?feed_filter=/wz/2016-09-02/163425.html
http://ddzan.net/e/space/?userid=193408?feed_filter=/tf/2016-09-02/698243.html
http://ddzan.net/e/space/?userid=193409?feed_filter=/eh/2016-09-02/362047.html
http://ddzan.net/e/space/?userid=193410?feed_filter=/hu/2016-09-02/978324.html
http://ddzan.net/e/space/?userid=193411?feed_filter=/ql/2016-09-02/851234.html
http://ddzan.net/e/space/?userid=193412?feed_filter=/nb/2016-09-02/460897.html
http://ddzan.net/e/space/?userid=193413?feed_filter=/sc/2016-09-02/314507.html
http://ddzan.net/e/space/?userid=193414?feed_filter=/vs/2016-09-02/857321.html
http://ddzan.net/e/space/?userid=193415?feed_filter=/ml/2016-09-02/031695.html
http://ddzan.net/e/space/?userid=193416?feed_filter=/zw/2016-09-02/165392.html
http://ddzan.net/e/space/?userid=193417?feed_filter=/hl/2016-09-02/124380.html
http://ddzan.net/e/space/?userid=193418?feed_filter=/bg/2016-09-02/250149.html
http://ddzan.net/e/space/?userid=193419?feed_filter=/tb/2016-09-02/153987.html
http://ddzan.net/e/space/?userid=193420?feed_filter=/ws/2016-09-02/645017.html
http://ddzan.net/e/space/?userid=193421?feed_filter=/ci/2016-09-02/146085.html
http://ddzan.net/e/space/?userid=193422?feed_filter=/fj/2016-09-02/284150.html
http://ddzan.net/e/space/?userid=193423?feed_filter=/qi/2016-09-02/731825.html
http://ddzan.net/e/space/?userid=193424?feed_filter=/nr/2016-09-02/053921.html
http://ddzan.net/e/space/?userid=193425?feed_filter=/mv/2016-09-02/936784.html
http://ddzan.net/e/space/?userid=193426?feed_filter=/qh/2016-09-02/751094.html
http://ddzan.net/e/space/?userid=193427?feed_filter=/fp/2016-09-02/860352.html
http://ddzan.net/e/space/?userid=193428?feed_filter=/ek/2016-09-02/645278.html
http://ddzan.net/e/space/?userid=193429?feed_filter=/no/2016-09-02/035428.html
http://ddzan.net/e/space/?userid=193430?feed_filter=/hc/2016-09-02/468257.html
http://ddzan.net/e/space/?userid=193431?feed_filter=/dt/2016-09-02/210587.html
http://ddzan.net/e/space/?userid=193432?feed_filter=/fn/2016-09-02/280549.html
http://ddzan.net/e/space/?userid=193433?feed_filter=/sc/2016-09-02/317594.html
http://ddzan.net/e/space/?userid=193434?feed_filter=/xe/2016-09-02/145970.html
http://ddzan.net/e/space/?userid=193435?feed_filter=/qb/2016-09-02/698537.html
http://ddzan.net/e/space/?userid=193436?feed_filter=/cm/2016-09-02/836054.html
http://ddzan.net/e/space/?userid=193437?feed_filter=/mc/2016-09-02/427861.html
http://ddzan.net/e/space/?userid=193438?feed_filter=/ua/2016-09-02/048593.html
http://ddzan.net/e/space/?userid=193439?feed_filter=/kb/2016-09-02/061483.html
http://ddzan.net/e/space/?userid=193440?feed_filter=/ak/2016-09-02/863590.html
http://ddzan.net/e/space/?userid=193441?feed_filter=/mw/2016-09-02/706341.html
http://ddzan.net/e/space/?userid=193442?feed_filter=/il/2016-09-02/360914.html
http://ddzan.net/e/space/?userid=193443?feed_filter=/wp/2016-09-02/130479.html
http://ddzan.net/e/space/?userid=193444?feed_filter=/cs/2016-09-02/023841.html
http://ddzan.net/e/space/?userid=193445?feed_filter=/dq/2016-09-02/816934.html
http://ddzan.net/e/space/?userid=193446?feed_filter=/ru/2016-09-02/783521.html
http://ddzan.net/e/space/?userid=193447?feed_filter=/me/2016-09-02/761854.html
http://ddzan.net/e/space/?userid=193448?feed_filter=/vx/2016-09-02/845931.html
http://ddzan.net/e/space/?userid=193449?feed_filter=/vw/2016-09-02/643509.html
http://ddzan.net/e/space/?userid=193450?feed_filter=/mk/2016-09-02/095413.html
http://ddzan.net/e/space/?userid=193451?feed_filter=/ey/2016-09-02/945718.html
http://ddzan.net/e/space/?userid=193452?feed_filter=/tb/2016-09-02/045239.html
http://ddzan.net/e/space/?userid=193453?feed_filter=/br/2016-09-02/619704.html
http://ddzan.net/e/space/?userid=193454?feed_filter=/sq/2016-09-02/167208.html
http://ddzan.net/e/space/?userid=193455?feed_filter=/wz/2016-09-02/582610.html
http://ddzan.net/e/space/?userid=193456?feed_filter=/nj/2016-09-02/501486.html
http://ddzan.net/e/space/?userid=193457?feed_filter=/oe/2016-09-02/948532.html
http://ddzan.net/e/space/?userid=193458?feed_filter=/is/2016-09-02/106347.html
http://ddzan.net/e/space/?userid=193459?feed_filter=/wb/2016-09-02/725693.html
http://ddzan.net/e/space/?userid=193460?feed_filter=/xy/2016-09-02/483096.html
http://ddzan.net/e/space/?userid=193461?feed_filter=/gz/2016-09-02/380246.html
http://ddzan.net/e/space/?userid=193462?feed_filter=/rq/2016-09-02/680591.html
http://ddzan.net/e/space/?userid=193463?feed_filter=/zw/2016-09-02/873156.html
http://ddzan.net/e/space/?userid=193464?feed_filter=/jz/2016-09-02/782569.html
http://ddzan.net/e/space/?userid=193465?feed_filter=/sj/2016-09-02/142398.html
http://ddzan.net/e/space/?userid=193466?feed_filter=/nl/2016-09-02/892634.html
http://ddzan.net/e/space/?userid=193467?feed_filter=/ou/2016-09-02/607183.html
http://ddzan.net/e/space/?userid=193468?feed_filter=/vp/2016-09-02/219740.html
http://ddzan.net/e/space/?userid=193469?feed_filter=/gc/2016-09-02/397218.html
http://ddzan.net/e/space/?userid=193470?feed_filter=/kd/2016-09-02/103628.html
http://ddzan.net/e/space/?userid=193471?feed_filter=/ou/2016-09-02/698372.html
http://ddzan.net/e/space/?userid=193472?feed_filter=/at/2016-09-02/327968.html
http://ddzan.net/e/space/?userid=193473?feed_filter=/tv/2016-09-02/516078.html
http://ddzan.net/e/space/?userid=193474?feed_filter=/yx/2016-09-02/784026.html
http://ddzan.net/e/space/?userid=193475?feed_filter=/df/2016-09-02/389271.html
http://ddzan.net/e/space/?userid=193476?feed_filter=/wi/2016-09-02/708532.html
http://ddzan.net/e/space/?userid=193477?feed_filter=/co/2016-09-02/247605.html
http://ddzan.net/e/space/?userid=193478?feed_filter=/nh/2016-09-02/032518.html
http://ddzan.net/e/space/?userid=193479?feed_filter=/nj/2016-09-02/670438.html
http://ddzan.net/e/space/?userid=193480?feed_filter=/ur/2016-09-02/295417.html
http://ddzan.net/e/space/?userid=193481?feed_filter=/ct/2016-09-02/918620.html
http://ddzan.net/e/space/?userid=193482?feed_filter=/qe/2016-09-02/401937.html
http://ddzan.net/e/space/?userid=193483?feed_filter=/sk/2016-09-02/652140.html
http://ddzan.net/e/space/?userid=193484?feed_filter=/yf/2016-09-02/147539.html
http://ddzan.net/e/space/?userid=193485?feed_filter=/kh/2016-09-02/423758.html
http://ddzan.net/e/space/?userid=193486?feed_filter=/gq/2016-09-02/590872.html
http://ddzan.net/e/space/?userid=193487?feed_filter=/pc/2016-09-02/357092.html
http://ddzan.net/e/space/?userid=193488?feed_filter=/og/2016-09-02/691702.html
http://ddzan.net/e/space/?userid=193489?feed_filter=/aj/2016-09-02/134605.html
http://ddzan.net/e/space/?userid=193490?feed_filter=/hd/2016-09-02/601283.html
http://ddzan.net/e/space/?userid=193491?feed_filter=/tv/2016-09-02/901648.html
http://ddzan.net/e/space/?userid=193492?feed_filter=/ej/2016-09-02/498231.html
http://ddzan.net/e/space/?userid=193493?feed_filter=/qo/2016-09-02/743925.html
http://ddzan.net/e/space/?userid=193494?feed_filter=/sr/2016-09-02/516934.html
http://ddzan.net/e/space/?userid=193495?feed_filter=/mf/2016-09-02/136825.html
http://ddzan.net/e/space/?userid=193496?feed_filter=/pi/2016-09-02/782419.html
http://ddzan.net/e/space/?userid=193497?feed_filter=/cd/2016-09-02/213984.html
http://ddzan.net/e/space/?userid=193498?feed_filter=/mx/2016-09-02/297136.html
http://ddzan.net/e/space/?userid=193499?feed_filter=/ht/2016-09-02/851960.html
http://ddzan.net/e/space/?userid=193500?feed_filter=/ta/2016-09-02/261038.html
http://ddzan.net/e/space/?userid=193501?feed_filter=/ho/2016-09-02/079624.html
http://ddzan.net/e/space/?userid=193502?feed_filter=/md/2016-09-02/092517.html
http://ddzan.net/e/space/?userid=193503?feed_filter=/yl/2016-09-02/408139.html
http://ddzan.net/e/space/?userid=193504?feed_filter=/up/2016-09-02/942351.html
http://ddzan.net/e/space/?userid=193505?feed_filter=/li/2016-09-02/196354.html
http://ddzan.net/e/space/?userid=193506?feed_filter=/lh/2016-09-02/397816.html
http://ddzan.net/e/space/?userid=193507?feed_filter=/iy/2016-09-02/630514.html
http://ddzan.net/e/space/?userid=193508?feed_filter=/mc/2016-09-02/039648.html
http://ddzan.net/e/space/?userid=193509?feed_filter=/nq/2016-09-02/520648.html
http://ddzan.net/e/space/?userid=193510?feed_filter=/sq/2016-09-02/165873.html
http://ddzan.net/e/space/?userid=193511?feed_filter=/zd/2016-09-02/397081.html
http://ddzan.net/e/space/?userid=193512?feed_filter=/rs/2016-09-02/402169.html
http://ddzan.net/e/space/?userid=193513?feed_filter=/xq/2016-09-02/512749.html
http://ddzan.net/e/space/?userid=193514?feed_filter=/rs/2016-09-02/158706.html
http://ddzan.net/e/space/?userid=193515?feed_filter=/uj/2016-09-02/628497.html
http://ddzan.net/e/space/?userid=193516?feed_filter=/po/2016-09-02/982760.html
http://ddzan.net/e/space/?userid=193517?feed_filter=/qr/2016-09-02/845320.html
http://ddzan.net/e/space/?userid=193518?feed_filter=/ox/2016-09-02/695741.html
http://ddzan.net/e/space/?userid=193519?feed_filter=/ti/2016-09-02/854107.html
http://ddzan.net/e/space/?userid=193520?feed_filter=/ly/2016-09-02/230781.html
http://ddzan.net/e/space/?userid=193521?feed_filter=/hu/2016-09-02/980326.html
http://ddzan.net/e/space/?userid=193522?feed_filter=/hw/2016-09-02/295673.html
http://ddzan.net/e/space/?userid=193523?feed_filter=/or/2016-09-02/219756.html
http://ddzan.net/e/space/?userid=193524?feed_filter=/gy/2016-09-02/531824.html
http://ddzan.net/e/space/?userid=193525?feed_filter=/fq/2016-09-02/562984.html
http://ddzan.net/e/space/?userid=193526?feed_filter=/qf/2016-09-02/140978.html
http://ddzan.net/e/space/?userid=193527?feed_filter=/mt/2016-09-02/293764.html
http://ddzan.net/e/space/?userid=193528?feed_filter=/he/2016-09-02/126504.html
http://ddzan.net/e/space/?userid=193529?feed_filter=/ja/2016-09-02/624781.html
http://ddzan.net/e/space/?userid=193530?feed_filter=/qb/2016-09-02/831456.html
http://ddzan.net/e/space/?userid=193531?feed_filter=/vf/2016-09-02/164853.html
http://ddzan.net/e/space/?userid=193532?feed_filter=/cp/2016-09-02/523460.html
http://ddzan.net/e/space/?userid=193533?feed_filter=/js/2016-09-02/152467.html
http://ddzan.net/e/space/?userid=193534?feed_filter=/zc/2016-09-02/769824.html
http://ddzan.net/e/space/?userid=193535?feed_filter=/wl/2016-09-02/428739.html
http://ddzan.net/e/space/?userid=193536?feed_filter=/bg/2016-09-02/972458.html
http://ddzan.net/e/space/?userid=193537?feed_filter=/pv/2016-09-02/310582.html
http://ddzan.net/e/space/?userid=193538?feed_filter=/sj/2016-09-02/036178.html
http://ddzan.net/e/space/?userid=193539?feed_filter=/qr/2016-09-02/051784.html
http://ddzan.net/e/space/?userid=193540?feed_filter=/pj/2016-09-02/791642.html
http://ddzan.net/e/space/?userid=193541?feed_filter=/qs/2016-09-02/296513.html
http://ddzan.net/e/space/?userid=193542?feed_filter=/uv/2016-09-02/587426.html
http://ddzan.net/e/space/?userid=193543?feed_filter=/ip/2016-09-02/024865.html
http://ddzan.net/e/space/?userid=193544?feed_filter=/iv/2016-09-02/451302.html
http://ddzan.net/e/space/?userid=193545?feed_filter=/cr/2016-09-02/752140.html
http://ddzan.net/e/space/?userid=193546?feed_filter=/ni/2016-09-02/703219.html
http://ddzan.net/e/space/?userid=193547?feed_filter=/xm/2016-09-02/613570.html
http://ddzan.net/e/space/?userid=193548?feed_filter=/zw/2016-09-02/073498.html
http://ddzan.net/e/space/?userid=193549?feed_filter=/sf/2016-09-02/096537.html
http://ddzan.net/e/space/?userid=193550?feed_filter=/po/2016-09-02/743815.html
http://ddzan.net/e/space/?userid=193551?feed_filter=/um/2016-09-02/146732.html
http://ddzan.net/e/space/?userid=193552?feed_filter=/gs/2016-09-02/945072.html
http://ddzan.net/e/space/?userid=193553?feed_filter=/bd/2016-09-02/548026.html
http://ddzan.net/e/space/?userid=193554?feed_filter=/jq/2016-09-02/091367.html
http://ddzan.net/e/space/?userid=193555?feed_filter=/jm/2016-09-02/836729.html
http://ddzan.net/e/space/?userid=193556?feed_filter=/dv/2016-09-02/709123.html
http://ddzan.net/e/space/?userid=193557?feed_filter=/vz/2016-09-02/315460.html
http://ddzan.net/e/space/?userid=193558?feed_filter=/ja/2016-09-02/579261.html
http://ddzan.net/e/space/?userid=193559?feed_filter=/pq/2016-09-02/547628.html
http://ddzan.net/e/space/?userid=193560?feed_filter=/ov/2016-09-02/481527.html
http://ddzan.net/e/space/?userid=193561?feed_filter=/yo/2016-09-02/361784.html
http://ddzan.net/e/space/?userid=193562?feed_filter=/nx/2016-09-02/869305.html
http://ddzan.net/e/space/?userid=193563?feed_filter=/hb/2016-09-02/245986.html
http://ddzan.net/e/space/?userid=193564?feed_filter=/pi/2016-09-02/078235.html
http://ddzan.net/e/space/?userid=193565?feed_filter=/jy/2016-09-02/478953.html
http://ddzan.net/e/space/?userid=193566?feed_filter=/wz/2016-09-02/482396.html
http://ddzan.net/e/space/?userid=193567?feed_filter=/wu/2016-09-02/165324.html
http://ddzan.net/e/space/?userid=193568?feed_filter=/rh/2016-09-02/645702.html
http://ddzan.net/e/space/?userid=193569?feed_filter=/qd/2016-09-02/465907.html
http://ddzan.net/e/space/?userid=193570?feed_filter=/nl/2016-09-02/592073.html
http://ddzan.net/e/space/?userid=193571?feed_filter=/gb/2016-09-02/145098.html
http://ddzan.net/e/space/?userid=193572?feed_filter=/qm/2016-09-02/069472.html
http://ddzan.net/e/space/?userid=193573?feed_filter=/sd/2016-09-02/730624.html
http://ddzan.net/e/space/?userid=193574?feed_filter=/np/2016-09-02/564928.html
http://ddzan.net/e/space/?userid=193575?feed_filter=/oc/2016-09-02/290571.html
http://ddzan.net/e/space/?userid=193576?feed_filter=/sv/2016-09-02/794063.html
http://ddzan.net/e/space/?userid=193577?feed_filter=/qh/2016-09-02/418637.html
http://ddzan.net/e/space/?userid=193578?feed_filter=/ol/2016-09-02/546283.html
http://ddzan.net/e/space/?userid=193579?feed_filter=/fv/2016-09-02/710342.html
http://ddzan.net/e/space/?userid=193580?feed_filter=/lm/2016-09-02/374582.html
http://ddzan.net/e/space/?userid=193581?feed_filter=/eh/2016-09-02/419205.html
http://ddzan.net/e/space/?userid=193582?feed_filter=/uz/2016-09-02/729186.html
http://ddzan.net/e/space/?userid=193583?feed_filter=/oy/2016-09-02/420153.html
http://ddzan.net/e/space/?userid=193584?feed_filter=/fx/2016-09-02/160534.html
http://ddzan.net/e/space/?userid=193585?feed_filter=/jh/2016-09-02/106792.html
http://ddzan.net/e/space/?userid=193586?feed_filter=/vr/2016-09-02/971486.html
http://ddzan.net/e/space/?userid=193587?feed_filter=/pl/2016-09-02/705648.html
http://ddzan.net/e/space/?userid=193588?feed_filter=/ze/2016-09-02/162934.html
http://ddzan.net/e/space/?userid=193589?feed_filter=/kw/2016-09-02/913570.html
http://ddzan.net/e/space/?userid=193590?feed_filter=/qp/2016-09-02/219648.html
http://ddzan.net/e/space/?userid=193591?feed_filter=/sv/2016-09-02/749810.html
http://ddzan.net/e/space/?userid=193592?feed_filter=/ka/2016-09-02/892375.html
http://ddzan.net/e/space/?userid=193593?feed_filter=/lx/2016-09-02/416270.html
http://ddzan.net/e/space/?userid=193594?feed_filter=/io/2016-09-02/725936.html
http://ddzan.net/e/space/?userid=193595?feed_filter=/wt/2016-09-02/823614.html
http://ddzan.net/e/space/?userid=193596?feed_filter=/tb/2016-09-02/306185.html
http://ddzan.net/e/space/?userid=193597?feed_filter=/to/2016-09-02/042968.html
http://ddzan.net/e/space/?userid=193598?feed_filter=/na/2016-09-02/731924.html
http://ddzan.net/e/space/?userid=193599?feed_filter=/gb/2016-09-02/963750.html
http://ddzan.net/e/space/?userid=193600?feed_filter=/hp/2016-09-02/849071.html
http://ddzan.net/e/space/?userid=193601?feed_filter=/gc/2016-09-02/458372.html
http://ddzan.net/e/space/?userid=193602?feed_filter=/gq/2016-09-02/198602.html
http://ddzan.net/e/space/?userid=193603?feed_filter=/in/2016-09-02/460397.html
http://ddzan.net/e/space/?userid=193604?feed_filter=/le/2016-09-02/472190.html
http://ddzan.net/e/space/?userid=193605?feed_filter=/oq/2016-09-02/571380.html
http://ddzan.net/e/space/?userid=193606?feed_filter=/rd/2016-09-02/120695.html
http://ddzan.net/e/space/?userid=193607?feed_filter=/vk/2016-09-02/159267.html
http://ddzan.net/e/space/?userid=193608?feed_filter=/oz/2016-09-02/453729.html
http://ddzan.net/e/space/?userid=193609?feed_filter=/vk/2016-09-02/428013.html
http://ddzan.net/e/space/?userid=193610?feed_filter=/hj/2016-09-02/860291.html
http://ddzan.net/e/space/?userid=193611?feed_filter=/hj/2016-09-02/275098.html
http://ddzan.net/e/space/?userid=193612?feed_filter=/qc/2016-09-02/798310.html
http://ddzan.net/e/space/?userid=193613?feed_filter=/fp/2016-09-02/504971.html
http://ddzan.net/e/space/?userid=193614?feed_filter=/zg/2016-09-02/936520.html
http://ddzan.net/e/space/?userid=193615?feed_filter=/sv/2016-09-02/068417.html
http://ddzan.net/e/space/?userid=193616?feed_filter=/cb/2016-09-02/461289.html
http://ddzan.net/e/space/?userid=193617?feed_filter=/ub/2016-09-02/932741.html
http://ddzan.net/e/space/?userid=193618?feed_filter=/vg/2016-09-02/219574.html
http://ddzan.net/e/space/?userid=193619?feed_filter=/mc/2016-09-02/403196.html
http://ddzan.net/e/space/?userid=193620?feed_filter=/lu/2016-09-02/627315.html
http://ddzan.net/e/space/?userid=193621?feed_filter=/wz/2016-09-02/396182.html
http://ddzan.net/e/space/?userid=193622?feed_filter=/dk/2016-09-02/925801.html
http://ddzan.net/e/space/?userid=193623?feed_filter=/mc/2016-09-02/624853.html
http://ddzan.net/e/space/?userid=193624?feed_filter=/ok/2016-09-02/514208.html
http://ddzan.net/e/space/?userid=193625?feed_filter=/ft/2016-09-02/280763.html
http://ddzan.net/e/space/?userid=193626?feed_filter=/uw/2016-09-02/245781.html
http://ddzan.net/e/space/?userid=193627?feed_filter=/eq/2016-09-02/904327.html
http://ddzan.net/e/space/?userid=193628?feed_filter=/qw/2016-09-02/746201.html
http://ddzan.net/e/space/?userid=193629?feed_filter=/nf/2016-09-02/527846.html
http://ddzan.net/e/space/?userid=193630?feed_filter=/so/2016-09-02/047328.html
http://ddzan.net/e/space/?userid=193631?feed_filter=/pl/2016-09-02/748206.html
http://ddzan.net/e/space/?userid=193632?feed_filter=/ti/2016-09-02/238976.html
http://ddzan.net/e/space/?userid=193633?feed_filter=/ld/2016-09-02/139254.html
http://ddzan.net/e/space/?userid=193634?feed_filter=/uq/2016-09-02/917025.html
http://ddzan.net/e/space/?userid=193635?feed_filter=/xo/2016-09-02/720658.html
http://ddzan.net/e/space/?userid=193636?feed_filter=/pf/2016-09-02/036951.html
http://ddzan.net/e/space/?userid=193637?feed_filter=/hd/2016-09-02/912083.html
http://ddzan.net/e/space/?userid=193638?feed_filter=/qv/2016-09-02/982345.html
http://ddzan.net/e/space/?userid=193639?feed_filter=/rj/2016-09-02/068521.html
http://ddzan.net/e/space/?userid=193640?feed_filter=/fh/2016-09-02/782143.html
http://ddzan.net/e/space/?userid=193641?feed_filter=/nf/2016-09-02/134987.html
http://ddzan.net/e/space/?userid=193642?feed_filter=/pm/2016-09-02/539217.html
http://ddzan.net/e/space/?userid=193643?feed_filter=/ku/2016-09-02/215607.html
http://ddzan.net/e/space/?userid=193644?feed_filter=/cs/2016-09-02/250183.html
http://ddzan.net/e/space/?userid=193645?feed_filter=/ya/2016-09-02/704863.html
http://ddzan.net/e/space/?userid=193646?feed_filter=/dn/2016-09-02/408156.html
http://ddzan.net/e/space/?userid=193647?feed_filter=/rf/2016-09-02/021695.html
http://ddzan.net/e/space/?userid=193648?feed_filter=/rs/2016-09-02/584132.html
http://ddzan.net/e/space/?userid=193649?feed_filter=/sh/2016-09-02/531462.html
http://ddzan.net/e/space/?userid=193650?feed_filter=/ix/2016-09-02/572410.html
http://ddzan.net/e/space/?userid=193651?feed_filter=/ic/2016-09-02/215348.html
http://ddzan.net/e/space/?userid=193652?feed_filter=/hk/2016-09-02/146902.html
http://ddzan.net/e/space/?userid=193653?feed_filter=/ft/2016-09-02/951730.html
http://ddzan.net/e/space/?userid=193654?feed_filter=/ci/2016-09-02/479362.html
http://ddzan.net/e/space/?userid=193655?feed_filter=/sb/2016-09-02/509712.html
http://ddzan.net/e/space/?userid=193656?feed_filter=/he/2016-09-02/356042.html
http://ddzan.net/e/space/?userid=193657?feed_filter=/lf/2016-09-02/719584.html
http://ddzan.net/e/space/?userid=193658?feed_filter=/rb/2016-09-02/204968.html
http://ddzan.net/e/space/?userid=193659?feed_filter=/om/2016-09-02/564370.html
http://ddzan.net/e/space/?userid=193660?feed_filter=/vo/2016-09-02/694531.html
http://ddzan.net/e/space/?userid=193661?feed_filter=/si/2016-09-02/981357.html
http://ddzan.net/e/space/?userid=193662?feed_filter=/es/2016-09-02/915234.html
http://ddzan.net/e/space/?userid=193663?feed_filter=/jc/2016-09-02/948713.html
http://ddzan.net/e/space/?userid=193664?feed_filter=/jp/2016-09-02/492735.html
http://ddzan.net/e/space/?userid=193665?feed_filter=/rh/2016-09-02/562798.html
http://ddzan.net/e/space/?userid=193666?feed_filter=/go/2016-09-02/164207.html
http://ddzan.net/e/space/?userid=193667?feed_filter=/wz/2016-09-02/254079.html
http://ddzan.net/e/space/?userid=193668?feed_filter=/yi/2016-09-02/620158.html
http://ddzan.net/e/space/?userid=193669?feed_filter=/oc/2016-09-02/681743.html
http://ddzan.net/e/space/?userid=193670?feed_filter=/tw/2016-09-02/231608.html
http://ddzan.net/e/space/?userid=193671?feed_filter=/ou/2016-09-02/058793.html
http://ddzan.net/e/space/?userid=193672?feed_filter=/pf/2016-09-02/063524.html
http://ddzan.net/e/space/?userid=193673?feed_filter=/gv/2016-09-02/458617.html
http://ddzan.net/e/space/?userid=193674?feed_filter=/dg/2016-09-02/521409.html
http://ddzan.net/e/space/?userid=193675?feed_filter=/xt/2016-09-02/967218.html
http://ddzan.net/e/space/?userid=193676?feed_filter=/dv/2016-09-02/726108.html
http://ddzan.net/e/space/?userid=193677?feed_filter=/ts/2016-09-02/429835.html
http://ddzan.net/e/space/?userid=193678?feed_filter=/dv/2016-09-02/702341.html
http://ddzan.net/e/space/?userid=193679?feed_filter=/cy/2016-09-02/698217.html
http://ddzan.net/e/space/?userid=193680?feed_filter=/pc/2016-09-02/239451.html
http://ddzan.net/e/space/?userid=193681?feed_filter=/qt/2016-09-02/984270.html
http://ddzan.net/e/space/?userid=193682?feed_filter=/er/2016-09-02/416379.html
http://ddzan.net/e/space/?userid=193683?feed_filter=/eh/2016-09-02/195346.html
http://ddzan.net/e/space/?userid=193684?feed_filter=/go/2016-09-02/053274.html
http://ddzan.net/e/space/?userid=193685?feed_filter=/le/2016-09-02/915028.html
http://ddzan.net/e/space/?userid=193686?feed_filter=/gh/2016-09-02/201653.html
http://ddzan.net/e/space/?userid=193687?feed_filter=/vj/2016-09-02/563207.html
http://ddzan.net/e/space/?userid=193688?feed_filter=/lw/2016-09-02/250319.html
http://ddzan.net/e/space/?userid=193689?feed_filter=/fo/2016-09-02/751362.html
http://ddzan.net/e/space/?userid=193690?feed_filter=/lm/2016-09-02/235097.html
http://ddzan.net/e/space/?userid=193691?feed_filter=/jk/2016-09-02/508426.html
http://ddzan.net/e/space/?userid=193692?feed_filter=/rs/2016-09-02/456879.html
http://ddzan.net/e/space/?userid=193693?feed_filter=/tx/2016-09-02/856721.html
http://ddzan.net/e/space/?userid=193694?feed_filter=/gs/2016-09-02/310478.html
http://ddzan.net/e/space/?userid=193695?feed_filter=/su/2016-09-02/953718.html
http://ddzan.net/e/space/?userid=193696?feed_filter=/fp/2016-09-02/061487.html
http://ddzan.net/e/space/?userid=193697?feed_filter=/fq/2016-09-02/084976.html
http://ddzan.net/e/space/?userid=193698?feed_filter=/ng/2016-09-02/405798.html
http://ddzan.net/e/space/?userid=193699?feed_filter=/eh/2016-09-02/851704.html
http://ddzan.net/e/space/?userid=193700?feed_filter=/sy/2016-09-02/907523.html
http://ddzan.net/e/space/?userid=193701?feed_filter=/bc/2016-09-02/201597.html
http://ddzan.net/e/space/?userid=193702?feed_filter=/fe/2016-09-02/032895.html
http://ddzan.net/e/space/?userid=193703?feed_filter=/qj/2016-09-02/541893.html
http://ddzan.net/e/space/?userid=193704?feed_filter=/io/2016-09-02/471936.html
http://ddzan.net/e/space/?userid=193705?feed_filter=/tx/2016-09-02/457620.html
http://ddzan.net/e/space/?userid=193706?feed_filter=/ln/2016-09-02/810354.html
http://ddzan.net/e/space/?userid=193707?feed_filter=/cd/2016-09-02/576413.html
http://ddzan.net/e/space/?userid=193708?feed_filter=/we/2016-09-02/982345.html
http://ddzan.net/e/space/?userid=193709?feed_filter=/yk/2016-09-02/214936.html
http://ddzan.net/e/space/?userid=193710?feed_filter=/ty/2016-09-02/980643.html
http://ddzan.net/e/space/?userid=193711?feed_filter=/ag/2016-09-02/649172.html
http://ddzan.net/e/space/?userid=193712?feed_filter=/ft/2016-09-02/865032.html
http://ddzan.net/e/space/?userid=193713?feed_filter=/bq/2016-09-02/072895.html
http://ddzan.net/e/space/?userid=193714?feed_filter=/wy/2016-09-02/217309.html
http://ddzan.net/e/space/?userid=193715?feed_filter=/rw/2016-09-02/961035.html
http://ddzan.net/e/space/?userid=193716?feed_filter=/lw/2016-09-02/198045.html
http://ddzan.net/e/space/?userid=193717?feed_filter=/me/2016-09-02/061834.html
http://ddzan.net/e/space/?userid=193718?feed_filter=/xe/2016-09-02/726048.html
http://ddzan.net/e/space/?userid=193719?feed_filter=/cv/2016-09-02/793528.html
http://ddzan.net/e/space/?userid=193720?feed_filter=/uj/2016-09-02/162958.html
http://ddzan.net/e/space/?userid=193721?feed_filter=/yc/2016-09-02/290651.html
http://ddzan.net/e/space/?userid=193722?feed_filter=/fo/2016-09-02/437125.html
http://ddzan.net/e/space/?userid=193723?feed_filter=/uz/2016-09-02/461589.html
http://ddzan.net/e/space/?userid=193724?feed_filter=/pf/2016-09-02/405276.html
http://ddzan.net/e/space/?userid=193725?feed_filter=/fi/2016-09-02/935267.html
http://ddzan.net/e/space/?userid=193726?feed_filter=/yk/2016-09-02/765103.html
http://ddzan.net/e/space/?userid=193727?feed_filter=/xo/2016-09-02/897126.html
http://ddzan.net/e/space/?userid=193728?feed_filter=/do/2016-09-02/584206.html
http://ddzan.net/e/space/?userid=193729?feed_filter=/be/2016-09-02/403152.html
http://ddzan.net/e/space/?userid=193730?feed_filter=/pv/2016-09-02/943780.html
http://ddzan.net/e/space/?userid=193731?feed_filter=/zr/2016-09-02/317059.html
http://ddzan.net/e/space/?userid=193732?feed_filter=/ko/2016-09-02/750431.html
http://ddzan.net/e/space/?userid=193733?feed_filter=/ay/2016-09-02/538476.html
http://ddzan.net/e/space/?userid=193734?feed_filter=/zm/2016-09-02/635920.html
http://ddzan.net/e/space/?userid=193735?feed_filter=/xt/2016-09-02/428753.html
http://ddzan.net/e/space/?userid=193736?feed_filter=/wg/2016-09-02/697320.html
http://ddzan.net/e/space/?userid=193737?feed_filter=/lm/2016-09-02/367951.html
http://ddzan.net/e/space/?userid=193738?feed_filter=/sn/2016-09-02/176289.html
http://ddzan.net/e/space/?userid=193739?feed_filter=/rl/2016-09-02/924075.html
http://ddzan.net/e/space/?userid=193740?feed_filter=/oi/2016-09-02/396084.html
http://ddzan.net/e/space/?userid=193741?feed_filter=/st/2016-09-02/029854.html
http://ddzan.net/e/space/?userid=193742?feed_filter=/hc/2016-09-02/637509.html
http://ddzan.net/e/space/?userid=193743?feed_filter=/fr/2016-09-02/591408.html
http://ddzan.net/e/space/?userid=193744?feed_filter=/bz/2016-09-02/849720.html
http://ddzan.net/e/space/?userid=193745?feed_filter=/se/2016-09-02/605273.html
http://ddzan.net/e/space/?userid=193746?feed_filter=/em/2016-09-02/780465.html
http://ddzan.net/e/space/?userid=193747?feed_filter=/un/2016-09-02/432059.html
http://ddzan.net/e/space/?userid=193748?feed_filter=/xu/2016-09-02/874320.html
http://ddzan.net/e/space/?userid=193749?feed_filter=/co/2016-09-02/263087.html
http://ddzan.net/e/space/?userid=193750?feed_filter=/ed/2016-09-02/689314.html
http://ddzan.net/e/space/?userid=193751?feed_filter=/rw/2016-09-02/685704.html
http://ddzan.net/e/space/?userid=193752?feed_filter=/yd/2016-09-02/769154.html
http://ddzan.net/e/space/?userid=193753?feed_filter=/ci/2016-09-02/768913.html
http://ddzan.net/e/space/?userid=193754?feed_filter=/fc/2016-09-02/491230.html
http://ddzan.net/e/space/?userid=193755?feed_filter=/wt/2016-09-02/173426.html
http://ddzan.net/e/space/?userid=193756?feed_filter=/oa/2016-09-02/298510.html
http://ddzan.net/e/space/?userid=193757?feed_filter=/tz/2016-09-02/502394.html
http://ddzan.net/e/space/?userid=193758?feed_filter=/pc/2016-09-02/870169.html
http://ddzan.net/e/space/?userid=193759?feed_filter=/qw/2016-09-02/062584.html
http://ddzan.net/e/space/?userid=193760?feed_filter=/xh/2016-09-02/384750.html
http://ddzan.net/e/space/?userid=193761?feed_filter=/sp/2016-09-02/156372.html
http://ddzan.net/e/space/?userid=193762?feed_filter=/px/2016-09-02/136490.html
http://ddzan.net/e/space/?userid=193763?feed_filter=/zb/2016-09-02/465703.html
http://ddzan.net/e/space/?userid=193764?feed_filter=/mv/2016-09-02/137028.html
http://ddzan.net/e/space/?userid=193765?feed_filter=/lz/2016-09-02/681243.html
http://ddzan.net/e/space/?userid=193766?feed_filter=/rl/2016-09-02/847253.html
http://ddzan.net/e/space/?userid=193767?feed_filter=/bz/2016-09-02/751328.html
http://ddzan.net/e/space/?userid=193768?feed_filter=/px/2016-09-02/492037.html
http://ddzan.net/e/space/?userid=193769?feed_filter=/py/2016-09-02/639541.html
http://ddzan.net/e/space/?userid=193770?feed_filter=/ht/2016-09-02/652318.html
http://ddzan.net/e/space/?userid=193771?feed_filter=/yx/2016-09-02/964018.html
http://ddzan.net/e/space/?userid=193772?feed_filter=/qm/2016-09-02/896175.html
http://ddzan.net/e/space/?userid=193773?feed_filter=/bo/2016-09-02/620875.html
http://ddzan.net/e/space/?userid=193774?feed_filter=/jw/2016-09-02/894273.html
http://ddzan.net/e/space/?userid=193775?feed_filter=/pc/2016-09-02/137950.html
http://ddzan.net/e/space/?userid=193776?feed_filter=/ui/2016-09-02/896012.html
http://ddzan.net/e/space/?userid=193777?feed_filter=/sw/2016-09-02/513296.html
http://ddzan.net/e/space/?userid=193778?feed_filter=/od/2016-09-02/504817.html
http://ddzan.net/e/space/?userid=193779?feed_filter=/bs/2016-09-02/273946.html
http://ddzan.net/e/space/?userid=193780?feed_filter=/hw/2016-09-02/184690.html
http://ddzan.net/e/space/?userid=193781?feed_filter=/wb/2016-09-02/836109.html
http://ddzan.net/e/space/?userid=193782?feed_filter=/ax/2016-09-02/230941.html
http://ddzan.net/e/space/?userid=193783?feed_filter=/gn/2016-09-02/234679.html
http://ddzan.net/e/space/?userid=193784?feed_filter=/mj/2016-09-02/971240.html
http://ddzan.net/e/space/?userid=193785?feed_filter=/fr/2016-09-02/197835.html
http://ddzan.net/e/space/?userid=193786?feed_filter=/yh/2016-09-02/237810.html
http://ddzan.net/e/space/?userid=193787?feed_filter=/an/2016-09-02/152836.html
http://ddzan.net/e/space/?userid=193788?feed_filter=/dn/2016-09-02/057439.html
http://ddzan.net/e/space/?userid=193789?feed_filter=/jf/2016-09-02/094215.html
http://ddzan.net/e/space/?userid=193790?feed_filter=/xz/2016-09-02/263054.html
http://ddzan.net/e/space/?userid=193791?feed_filter=/ym/2016-09-02/213407.html
http://ddzan.net/e/space/?userid=193792?feed_filter=/ry/2016-09-02/409867.html
http://ddzan.net/e/space/?userid=193793?feed_filter=/pq/2016-09-02/132069.html
http://ddzan.net/e/space/?userid=193794?feed_filter=/kq/2016-09-02/104739.html
http://ddzan.net/e/space/?userid=193795?feed_filter=/vq/2016-09-02/587961.html
http://ddzan.net/e/space/?userid=193796?feed_filter=/ec/2016-09-02/742519.html
http://ddzan.net/e/space/?userid=193797?feed_filter=/yr/2016-09-02/795036.html
http://ddzan.net/e/space/?userid=193798?feed_filter=/qr/2016-09-02/068247.html
http://ddzan.net/e/space/?userid=193799?feed_filter=/uj/2016-09-02/192306.html
http://ddzan.net/e/space/?userid=193800?feed_filter=/mc/2016-09-02/425897.html
http://ddzan.net/e/space/?userid=193801?feed_filter=/xv/2016-09-02/108243.html
http://ddzan.net/e/space/?userid=193802?feed_filter=/xd/2016-09-02/614895.html
http://ddzan.net/e/space/?userid=193803?feed_filter=/cj/2016-09-02/738519.html
http://ddzan.net/e/space/?userid=193804?feed_filter=/uz/2016-09-02/076352.html
http://ddzan.net/e/space/?userid=193805?feed_filter=/ie/2016-09-02/258947.html
http://ddzan.net/e/space/?userid=193806?feed_filter=/lz/2016-09-02/524910.html
http://ddzan.net/e/space/?userid=193807?feed_filter=/km/2016-09-02/604985.html
http://ddzan.net/e/space/?userid=193808?feed_filter=/et/2016-09-02/402187.html
http://ddzan.net/e/space/?userid=193809?feed_filter=/pe/2016-09-02/143527.html
http://ddzan.net/e/space/?userid=193810?feed_filter=/fj/2016-09-02/463729.html
http://ddzan.net/e/space/?userid=193811?feed_filter=/lp/2016-09-02/276304.html
http://ddzan.net/e/space/?userid=193812?feed_filter=/br/2016-09-02/183695.html
http://ddzan.net/e/space/?userid=193813?feed_filter=/qo/2016-09-02/598063.html
http://ddzan.net/e/space/?userid=193814?feed_filter=/xu/2016-09-02/540938.html
http://ddzan.net/e/space/?userid=193815?feed_filter=/oy/2016-09-02/967853.html
http://ddzan.net/e/space/?userid=193816?feed_filter=/gu/2016-09-02/783426.html
http://ddzan.net/e/space/?userid=193817?feed_filter=/nh/2016-09-02/713096.html
http://ddzan.net/e/space/?userid=193818?feed_filter=/bu/2016-09-02/842063.html
http://ddzan.net/e/space/?userid=193819?feed_filter=/fj/2016-09-02/894526.html
http://ddzan.net/e/space/?userid=193820?feed_filter=/jy/2016-09-02/519462.html
http://ddzan.net/e/space/?userid=193821?feed_filter=/cl/2016-09-02/347158.html
http://ddzan.net/e/space/?userid=193822?feed_filter=/jr/2016-09-02/862970.html
http://ddzan.net/e/space/?userid=193823?feed_filter=/cl/2016-09-02/217849.html
http://ddzan.net/e/space/?userid=193824?feed_filter=/wf/2016-09-02/896750.html
http://ddzan.net/e/space/?userid=193825?feed_filter=/jv/2016-09-02/763159.html
http://ddzan.net/e/space/?userid=193826?feed_filter=/fi/2016-09-02/396217.html
http://ddzan.net/e/space/?userid=193827?feed_filter=/uk/2016-09-02/769532.html
http://ddzan.net/e/space/?userid=193828?feed_filter=/cv/2016-09-02/317295.html
http://ddzan.net/e/space/?userid=193829?feed_filter=/tj/2016-09-02/184953.html
http://ddzan.net/e/space/?userid=193830?feed_filter=/tc/2016-09-02/670128.html
http://ddzan.net/e/space/?userid=193831?feed_filter=/ts/2016-09-02/987325.html
http://ddzan.net/e/space/?userid=193832?feed_filter=/ws/2016-09-02/840361.html
http://ddzan.net/e/space/?userid=193833?feed_filter=/md/2016-09-02/268514.html
http://ddzan.net/e/space/?userid=193834?feed_filter=/eu/2016-09-02/126954.html
http://ddzan.net/e/space/?userid=193835?feed_filter=/aj/2016-09-02/761354.html
http://ddzan.net/e/space/?userid=193836?feed_filter=/om/2016-09-02/139476.html
http://ddzan.net/e/space/?userid=193837?feed_filter=/xa/2016-09-02/986513.html
http://ddzan.net/e/space/?userid=193838?feed_filter=/rm/2016-09-02/260187.html
http://ddzan.net/e/space/?userid=193839?feed_filter=/jt/2016-09-02/145370.html
http://ddzan.net/e/space/?userid=193840?feed_filter=/uo/2016-09-02/681905.html
http://ddzan.net/e/space/?userid=193841?feed_filter=/fs/2016-09-02/974851.html
http://ddzan.net/e/space/?userid=193842?feed_filter=/fz/2016-09-02/864239.html
http://ddzan.net/e/space/?userid=193843?feed_filter=/sr/2016-09-02/809361.html
http://ddzan.net/e/space/?userid=193844?feed_filter=/nz/2016-09-02/093674.html
http://ddzan.net/e/space/?userid=193845?feed_filter=/nv/2016-09-02/592360.html
http://ddzan.net/e/space/?userid=193846?feed_filter=/tk/2016-09-02/692857.html
http://ddzan.net/e/space/?userid=193847?feed_filter=/wq/2016-09-02/692784.html
http://ddzan.net/e/space/?userid=193848?feed_filter=/ez/2016-09-02/091827.html
http://ddzan.net/e/space/?userid=193849?feed_filter=/bq/2016-09-02/576391.html
http://ddzan.net/e/space/?userid=193850?feed_filter=/vq/2016-09-02/954367.html
http://ddzan.net/e/space/?userid=193851?feed_filter=/th/2016-09-02/983570.html
http://ddzan.net/e/space/?userid=193852?feed_filter=/yo/2016-09-02/784629.html
http://ddzan.net/e/space/?userid=193853?feed_filter=/ar/2016-09-02/845269.html
http://ddzan.net/e/space/?userid=193854?feed_filter=/ms/2016-09-02/479082.html
http://ddzan.net/e/space/?userid=193855?feed_filter=/bn/2016-09-02/189723.html
http://ddzan.net/e/space/?userid=193856?feed_filter=/rf/2016-09-02/781429.html
http://ddzan.net/e/space/?userid=193857?feed_filter=/sl/2016-09-02/038956.html
http://ddzan.net/e/space/?userid=193858?feed_filter=/hp/2016-09-02/768415.html
http://ddzan.net/e/space/?userid=193859?feed_filter=/le/2016-09-02/813475.html
http://ddzan.net/e/space/?userid=193860?feed_filter=/vg/2016-09-02/875910.html
http://ddzan.net/e/space/?userid=193861?feed_filter=/oi/2016-09-02/943652.html
http://ddzan.net/e/space/?userid=193862?feed_filter=/xg/2016-09-02/073964.html
http://ddzan.net/e/space/?userid=193863?feed_filter=/pa/2016-09-02/916038.html
http://ddzan.net/e/space/?userid=193864?feed_filter=/dz/2016-09-02/708395.html
http://ddzan.net/e/space/?userid=193865?feed_filter=/bg/2016-09-02/154973.html
http://ddzan.net/e/space/?userid=193866?feed_filter=/da/2016-09-02/547026.html
http://ddzan.net/e/space/?userid=193867?feed_filter=/ac/2016-09-02/945761.html
http://ddzan.net/e/space/?userid=193868?feed_filter=/cq/2016-09-02/046217.html
http://ddzan.net/e/space/?userid=193869?feed_filter=/en/2016-09-02/207819.html
http://ddzan.net/e/space/?userid=193870?feed_filter=/ev/2016-09-02/059674.html
http://ddzan.net/e/space/?userid=193871?feed_filter=/qa/2016-09-02/159643.html
http://ddzan.net/e/space/?userid=193872?feed_filter=/jr/2016-09-02/832650.html
http://ddzan.net/e/space/?userid=193873?feed_filter=/yj/2016-09-02/064921.html
http://ddzan.net/e/space/?userid=193874?feed_filter=/si/2016-09-02/523174.html
http://ddzan.net/e/space/?userid=193875?feed_filter=/fp/2016-09-02/578392.html
http://ddzan.net/e/space/?userid=193876?feed_filter=/og/2016-09-02/719235.html
http://ddzan.net/e/space/?userid=193877?feed_filter=/rk/2016-09-02/109572.html
http://ddzan.net/e/space/?userid=193878?feed_filter=/fe/2016-09-02/638521.html
http://ddzan.net/e/space/?userid=193879?feed_filter=/tp/2016-09-02/925148.html
http://ddzan.net/e/space/?userid=193880?feed_filter=/nb/2016-09-02/876124.html
http://ddzan.net/e/space/?userid=193881?feed_filter=/lw/2016-09-02/640587.html
http://ddzan.net/e/space/?userid=193882?feed_filter=/mi/2016-09-02/178092.html
http://ddzan.net/e/space/?userid=193883?feed_filter=/gu/2016-09-02/725401.html
http://ddzan.net/e/space/?userid=193884?feed_filter=/nr/2016-09-02/762438.html
http://ddzan.net/e/space/?userid=193885?feed_filter=/jq/2016-09-02/138795.html
http://ddzan.net/e/space/?userid=193886?feed_filter=/ar/2016-09-02/452803.html
http://ddzan.net/e/space/?userid=193887?feed_filter=/bq/2016-09-02/941283.html
http://ddzan.net/e/space/?userid=193888?feed_filter=/wn/2016-09-02/503482.html
http://ddzan.net/e/space/?userid=193889?feed_filter=/pc/2016-09-02/623714.html
http://ddzan.net/e/space/?userid=193890?feed_filter=/wm/2016-09-02/201576.html
http://ddzan.net/e/space/?userid=193891?feed_filter=/fb/2016-09-02/951802.html
http://ddzan.net/e/space/?userid=193892?feed_filter=/kl/2016-09-02/619752.html
http://ddzan.net/e/space/?userid=193893?feed_filter=/qp/2016-09-02/694031.html
http://ddzan.net/e/space/?userid=193894?feed_filter=/ju/2016-09-02/810723.html
http://ddzan.net/e/space/?userid=193895?feed_filter=/zn/2016-09-02/032741.html
http://ddzan.net/e/space/?userid=193896?feed_filter=/yz/2016-09-02/416258.html
http://ddzan.net/e/space/?userid=193897?feed_filter=/hp/2016-09-02/635041.html
http://ddzan.net/e/space/?userid=193898?feed_filter=/dk/2016-09-02/413956.html
http://ddzan.net/e/space/?userid=193899?feed_filter=/jz/2016-09-02/387204.html
http://ddzan.net/e/space/?userid=193900?feed_filter=/ot/2016-09-02/835127.html
http://ddzan.net/e/space/?userid=193901?feed_filter=/da/2016-09-02/245619.html
http://ddzan.net/e/space/?userid=193902?feed_filter=/cg/2016-09-02/926501.html
http://ddzan.net/e/space/?userid=193903?feed_filter=/ov/2016-09-02/413078.html
http://ddzan.net/e/space/?userid=193904?feed_filter=/rb/2016-09-02/829417.html
http://ddzan.net/e/space/?userid=193905?feed_filter=/nt/2016-09-02/139706.html
http://ddzan.net/e/space/?userid=193906?feed_filter=/fa/2016-09-02/183246.html
http://ddzan.net/e/space/?userid=193907?feed_filter=/na/2016-09-02/504879.html
http://ddzan.net/e/space/?userid=193908?feed_filter=/ie/2016-09-02/527489.html
http://ddzan.net/e/space/?userid=193909?feed_filter=/ua/2016-09-02/936154.html
http://ddzan.net/e/space/?userid=193910?feed_filter=/is/2016-09-02/523169.html
http://ddzan.net/e/space/?userid=193911?feed_filter=/oc/2016-09-02/701236.html
http://ddzan.net/e/space/?userid=193912?feed_filter=/mq/2016-09-02/082613.html
http://ddzan.net/e/space/?userid=193913?feed_filter=/oh/2016-09-02/316287.html
http://ddzan.net/e/space/?userid=193914?feed_filter=/uv/2016-09-02/381762.html
http://ddzan.net/e/space/?userid=193915?feed_filter=/uw/2016-09-02/512694.html
http://ddzan.net/e/space/?userid=193916?feed_filter=/qi/2016-09-02/584972.html
http://ddzan.net/e/space/?userid=193917?feed_filter=/oa/2016-09-02/973810.html
http://ddzan.net/e/space/?userid=193918?feed_filter=/lj/2016-09-02/264538.html
http://ddzan.net/e/space/?userid=193919?feed_filter=/dz/2016-09-02/519063.html
http://ddzan.net/e/space/?userid=193920?feed_filter=/br/2016-09-02/379206.html
http://ddzan.net/e/space/?userid=193921?feed_filter=/lf/2016-09-02/196503.html
http://ddzan.net/e/space/?userid=193922?feed_filter=/gn/2016-09-02/761048.html
http://ddzan.net/e/space/?userid=193923?feed_filter=/dm/2016-09-02/327518.html
http://ddzan.net/e/space/?userid=193924?feed_filter=/qi/2016-09-02/163257.html
http://ddzan.net/e/space/?userid=193925?feed_filter=/ne/2016-09-02/503846.html
http://ddzan.net/e/space/?userid=193926?feed_filter=/xy/2016-09-02/719025.html
http://ddzan.net/e/space/?userid=193927?feed_filter=/xy/2016-09-02/025697.html
http://ddzan.net/e/space/?userid=193928?feed_filter=/ru/2016-09-02/784096.html
http://ddzan.net/e/space/?userid=193929?feed_filter=/fw/2016-09-02/640892.html
http://ddzan.net/e/space/?userid=193930?feed_filter=/ru/2016-09-02/127804.html
http://ddzan.net/e/space/?userid=193931?feed_filter=/hv/2016-09-02/651709.html
http://ddzan.net/e/space/?userid=193932?feed_filter=/yr/2016-09-02/428695.html
http://ddzan.net/e/space/?userid=193933?feed_filter=/xq/2016-09-02/067593.html
http://ddzan.net/e/space/?userid=193934?feed_filter=/zl/2016-09-02/453207.html
http://ddzan.net/e/space/?userid=193935?feed_filter=/ud/2016-09-02/640831.html
http://ddzan.net/e/space/?userid=193936?feed_filter=/il/2016-09-02/156708.html
http://ddzan.net/e/space/?userid=193937?feed_filter=/aj/2016-09-02/092785.html
http://ddzan.net/e/space/?userid=193938?feed_filter=/tr/2016-09-02/379462.html
http://ddzan.net/e/space/?userid=193939?feed_filter=/wc/2016-09-02/048237.html
http://ddzan.net/e/space/?userid=193940?feed_filter=/uw/2016-09-02/246850.html
http://ddzan.net/e/space/?userid=193941?feed_filter=/qu/2016-09-02/074953.html
http://ddzan.net/e/space/?userid=193942?feed_filter=/xh/2016-09-02/476192.html
http://ddzan.net/e/space/?userid=193943?feed_filter=/lu/2016-09-02/468790.html
http://ddzan.net/e/space/?userid=193944?feed_filter=/db/2016-09-02/684725.html
http://ddzan.net/e/space/?userid=193945?feed_filter=/cd/2016-09-02/781643.html
http://ddzan.net/e/space/?userid=193946?feed_filter=/hr/2016-09-02/978610.html
http://ddzan.net/e/space/?userid=193947?feed_filter=/vs/2016-09-02/763814.html
http://ddzan.net/e/space/?userid=193948?feed_filter=/cf/2016-09-02/792154.html
http://ddzan.net/e/space/?userid=193949?feed_filter=/nx/2016-09-02/420731.html
http://ddzan.net/e/space/?userid=193950?feed_filter=/bq/2016-09-02/457013.html
http://ddzan.net/e/space/?userid=193951?feed_filter=/uc/2016-09-02/954781.html
http://ddzan.net/e/space/?userid=193952?feed_filter=/iw/2016-09-02/601583.html
http://ddzan.net/e/space/?userid=193953?feed_filter=/gh/2016-09-02/405362.html
http://ddzan.net/e/space/?userid=193954?feed_filter=/ut/2016-09-02/857362.html
http://ddzan.net/e/space/?userid=193955?feed_filter=/tw/2016-09-02/328514.html
http://ddzan.net/e/space/?userid=193956?feed_filter=/ya/2016-09-02/817632.html
http://ddzan.net/e/space/?userid=193957?feed_filter=/jz/2016-09-02/248359.html
http://ddzan.net/e/space/?userid=193958?feed_filter=/gy/2016-09-02/837406.html
http://ddzan.net/e/space/?userid=193959?feed_filter=/ap/2016-09-02/952876.html
http://ddzan.net/e/space/?userid=193960?feed_filter=/xn/2016-09-02/531879.html
http://ddzan.net/e/space/?userid=193961?feed_filter=/xm/2016-09-02/035498.html
http://ddzan.net/e/space/?userid=193962?feed_filter=/fa/2016-09-02/714892.html
http://ddzan.net/e/space/?userid=193963?feed_filter=/wz/2016-09-02/518943.html
http://ddzan.net/e/space/?userid=193964?feed_filter=/qe/2016-09-02/835176.html
http://ddzan.net/e/space/?userid=193965?feed_filter=/tq/2016-09-02/965783.html
http://ddzan.net/e/space/?userid=193966?feed_filter=/jn/2016-09-02/503814.html
http://ddzan.net/e/space/?userid=193967?feed_filter=/ae/2016-09-02/439760.html
http://ddzan.net/e/space/?userid=193968?feed_filter=/qi/2016-09-02/941785.html
http://ddzan.net/e/space/?userid=193969?feed_filter=/kf/2016-09-02/834079.html
http://ddzan.net/e/space/?userid=193970?feed_filter=/wi/2016-09-02/941602.html
http://ddzan.net/e/space/?userid=193971?feed_filter=/rf/2016-09-02/248506.html
http://ddzan.net/e/space/?userid=193972?feed_filter=/wd/2016-09-02/058627.html
http://ddzan.net/e/space/?userid=193973?feed_filter=/rm/2016-09-02/248507.html
http://ddzan.net/e/space/?userid=193974?feed_filter=/hm/2016-09-02/376485.html
http://ddzan.net/e/space/?userid=193975?feed_filter=/ya/2016-09-02/418073.html
http://ddzan.net/e/space/?userid=193976?feed_filter=/fx/2016-09-02/875064.html
http://ddzan.net/e/space/?userid=193977?feed_filter=/jv/2016-09-02/836725.html
http://ddzan.net/e/space/?userid=193978?feed_filter=/zy/2016-09-02/750321.html
http://ddzan.net/e/space/?userid=193979?feed_filter=/jf/2016-09-02/690153.html
http://ddzan.net/e/space/?userid=193980?feed_filter=/dp/2016-09-02/986513.html
http://ddzan.net/e/space/?userid=193981?feed_filter=/ig/2016-09-02/613802.html
http://ddzan.net/e/space/?userid=193982?feed_filter=/zw/2016-09-02/476519.html
http://ddzan.net/e/space/?userid=193983?feed_filter=/ng/2016-09-02/957321.html
http://ddzan.net/e/space/?userid=193984?feed_filter=/pt/2016-09-02/132974.html
http://ddzan.net/e/space/?userid=193985?feed_filter=/kv/2016-09-02/805396.html
http://ddzan.net/e/space/?userid=193986?feed_filter=/yi/2016-09-02/571086.html
http://ddzan.net/e/space/?userid=193987?feed_filter=/lm/2016-09-02/427501.html
http://ddzan.net/e/space/?userid=193988?feed_filter=/kq/2016-09-02/982530.html
http://ddzan.net/e/space/?userid=193989?feed_filter=/io/2016-09-02/893607.html
http://ddzan.net/e/space/?userid=193990?feed_filter=/if/2016-09-02/903271.html
http://ddzan.net/e/space/?userid=193991?feed_filter=/ek/2016-09-02/574031.html
http://ddzan.net/e/space/?userid=193992?feed_filter=/kz/2016-09-02/709368.html
http://ddzan.net/e/space/?userid=193993?feed_filter=/cq/2016-09-02/347596.html
http://ddzan.net/e/space/?userid=193994?feed_filter=/fr/2016-09-02/814927.html
http://ddzan.net/e/space/?userid=193995?feed_filter=/ce/2016-09-02/012795.html
http://ddzan.net/e/space/?userid=193996?feed_filter=/pb/2016-09-02/856327.html
http://ddzan.net/e/space/?userid=193997?feed_filter=/fk/2016-09-02/801597.html
http://ddzan.net/e/space/?userid=193998?feed_filter=/rq/2016-09-02/462189.html
http://ddzan.net/e/space/?userid=193999?feed_filter=/yo/2016-09-02/846931.html
http://ddzan.net/e/space/?userid=194000?feed_filter=/nl/2016-09-02/102456.html
http://ddzan.net/e/space/?userid=194001?feed_filter=/zm/2016-09-02/862907.html
http://ddzan.net/e/space/?userid=194002?feed_filter=/yi/2016-09-02/241380.html
http://ddzan.net/e/space/?userid=194003?feed_filter=/us/2016-09-02/690157.html
http://ddzan.net/e/space/?userid=194004?feed_filter=/bu/2016-09-02/642197.html
http://ddzan.net/e/space/?userid=194005?feed_filter=/qo/2016-09-02/581240.html
http://ddzan.net/e/space/?userid=194006?feed_filter=/sl/2016-09-02/293460.html
http://ddzan.net/e/space/?userid=194007?feed_filter=/xd/2016-09-02/091287.html
http://ddzan.net/e/space/?userid=194008?feed_filter=/ut/2016-09-02/795461.html
http://ddzan.net/e/space/?userid=194009?feed_filter=/se/2016-09-02/908235.html
http://ddzan.net/e/space/?userid=194010?feed_filter=/by/2016-09-02/896271.html
http://ddzan.net/e/space/?userid=194011?feed_filter=/fd/2016-09-02/187536.html
http://ddzan.net/e/space/?userid=194012?feed_filter=/tq/2016-09-02/967201.html
http://ddzan.net/e/space/?userid=194013?feed_filter=/nm/2016-09-02/502697.html
http://ddzan.net/e/space/?userid=194014?feed_filter=/rh/2016-09-02/714529.html
http://ddzan.net/e/space/?userid=194015?feed_filter=/gj/2016-09-02/356142.html
http://ddzan.net/e/space/?userid=194016?feed_filter=/zf/2016-09-02/951603.html
http://ddzan.net/e/space/?userid=194017?feed_filter=/me/2016-09-02/542701.html
http://ddzan.net/e/space/?userid=194018?feed_filter=/yc/2016-09-02/640289.html
http://ddzan.net/e/space/?userid=194019?feed_filter=/vt/2016-09-02/064237.html
http://ddzan.net/e/space/?userid=194020?feed_filter=/hx/2016-09-02/089643.html
http://ddzan.net/e/space/?userid=194021?feed_filter=/ax/2016-09-02/534268.html
http://ddzan.net/e/space/?userid=194022?feed_filter=/dy/2016-09-02/128360.html
http://ddzan.net/e/space/?userid=194023?feed_filter=/xp/2016-09-02/530682.html
http://ddzan.net/e/space/?userid=194024?feed_filter=/nw/2016-09-02/396710.html
http://ddzan.net/e/space/?userid=194025?feed_filter=/br/2016-09-02/281936.html
http://ddzan.net/e/space/?userid=194026?feed_filter=/jf/2016-09-02/915403.html
http://ddzan.net/e/space/?userid=194027?feed_filter=/pu/2016-09-02/620189.html
http://ddzan.net/e/space/?userid=194028?feed_filter=/xi/2016-09-02/516784.html
http://ddzan.net/e/space/?userid=194029?feed_filter=/gu/2016-09-02/793258.html
http://ddzan.net/e/space/?userid=194030?feed_filter=/ut/2016-09-02/457012.html
http://ddzan.net/e/space/?userid=194031?feed_filter=/lz/2016-09-02/416732.html
http://ddzan.net/e/space/?userid=194032?feed_filter=/ro/2016-09-02/350871.html
http://ddzan.net/e/space/?userid=194033?feed_filter=/at/2016-09-02/573904.html
http://ddzan.net/e/space/?userid=194034?feed_filter=/rq/2016-09-02/786254.html
http://ddzan.net/e/space/?userid=194035?feed_filter=/iu/2016-09-02/302549.html
http://ddzan.net/e/space/?userid=194036?feed_filter=/nf/2016-09-02/970281.html
http://ddzan.net/e/space/?userid=194037?feed_filter=/ux/2016-09-02/793621.html
http://ddzan.net/e/space/?userid=194038?feed_filter=/tx/2016-09-02/172456.html
http://ddzan.net/e/space/?userid=194039?feed_filter=/od/2016-09-02/198247.html
http://ddzan.net/e/space/?userid=194040?feed_filter=/zl/2016-09-02/735681.html
http://ddzan.net/e/space/?userid=194041?feed_filter=/qf/2016-09-02/457201.html
http://ddzan.net/e/space/?userid=194042?feed_filter=/iy/2016-09-02/265403.html
http://ddzan.net/e/space/?userid=194043?feed_filter=/qd/2016-09-02/649315.html
http://ddzan.net/e/space/?userid=194044?feed_filter=/ru/2016-09-02/028943.html
http://ddzan.net/e/space/?userid=194045?feed_filter=/tx/2016-09-02/349728.html
http://ddzan.net/e/space/?userid=194046?feed_filter=/zh/2016-09-02/319245.html
http://ddzan.net/e/space/?userid=194047?feed_filter=/lj/2016-09-02/071659.html
http://ddzan.net/e/space/?userid=194048?feed_filter=/zx/2016-09-02/837201.html
http://ddzan.net/e/space/?userid=194049?feed_filter=/fz/2016-09-02/810267.html
http://ddzan.net/e/space/?userid=194050?feed_filter=/rq/2016-09-02/928374.html
http://ddzan.net/e/space/?userid=194051?feed_filter=/te/2016-09-02/307429.html
http://ddzan.net/e/space/?userid=194052?feed_filter=/iy/2016-09-02/549802.html
http://ddzan.net/e/space/?userid=194053?feed_filter=/qu/2016-09-02/874012.html
http://ddzan.net/e/space/?userid=194054?feed_filter=/zf/2016-09-02/179325.html
http://ddzan.net/e/space/?userid=194055?feed_filter=/ie/2016-09-02/026548.html
http://ddzan.net/e/space/?userid=194056?feed_filter=/nu/2016-09-02/451209.html
http://ddzan.net/e/space/?userid=194057?feed_filter=/df/2016-09-02/193684.html
http://ddzan.net/e/space/?userid=194058?feed_filter=/ra/2016-09-02/769182.html
http://ddzan.net/e/space/?userid=194059?feed_filter=/tj/2016-09-02/713805.html
http://ddzan.net/e/space/?userid=194060?feed_filter=/qn/2016-09-02/074613.html
http://ddzan.net/e/space/?userid=194061?feed_filter=/xv/2016-09-02/847539.html
http://ddzan.net/e/space/?userid=194062?feed_filter=/vc/2016-09-02/385014.html
http://ddzan.net/e/space/?userid=194063?feed_filter=/oj/2016-09-02/823516.html
http://ddzan.net/e/space/?userid=194064?feed_filter=/mv/2016-09-02/640185.html
http://ddzan.net/e/space/?userid=194065?feed_filter=/aw/2016-09-02/247961.html
http://ddzan.net/e/space/?userid=194066?feed_filter=/dz/2016-09-02/049182.html
http://ddzan.net/e/space/?userid=194067?feed_filter=/lc/2016-09-02/924657.html
http://ddzan.net/e/space/?userid=194068?feed_filter=/oh/2016-09-02/395241.html
http://ddzan.net/e/space/?userid=194069?feed_filter=/jw/2016-09-02/621087.html
http://ddzan.net/e/space/?userid=194070?feed_filter=/ne/2016-09-02/276589.html
http://ddzan.net/e/space/?userid=194071?feed_filter=/yc/2016-09-02/903648.html
http://ddzan.net/e/space/?userid=194072?feed_filter=/cd/2016-09-02/218564.html
http://ddzan.net/e/space/?userid=194073?feed_filter=/bo/2016-09-02/987041.html
http://ddzan.net/e/space/?userid=194074?feed_filter=/kr/2016-09-02/627914.html
http://ddzan.net/e/space/?userid=194075?feed_filter=/uk/2016-09-02/958034.html
http://ddzan.net/e/space/?userid=194076?feed_filter=/eh/2016-09-02/327659.html
http://ddzan.net/e/space/?userid=194077?feed_filter=/sr/2016-09-02/015782.html
http://ddzan.net/e/space/?userid=194078?feed_filter=/wu/2016-09-02/945023.html
http://ddzan.net/e/space/?userid=194079?feed_filter=/zl/2016-09-02/149672.html
http://ddzan.net/e/space/?userid=194080?feed_filter=/er/2016-09-02/385270.html
http://ddzan.net/e/space/?userid=194081?feed_filter=/kn/2016-09-02/514730.html
http://ddzan.net/e/space/?userid=194082?feed_filter=/ja/2016-09-02/853710.html
http://ddzan.net/e/space/?userid=194083?feed_filter=/sl/2016-09-02/846512.html
http://ddzan.net/e/space/?userid=194084?feed_filter=/rg/2016-09-02/946012.html
http://ddzan.net/e/space/?userid=194085?feed_filter=/dr/2016-09-02/357941.html
http://ddzan.net/e/space/?userid=194086?feed_filter=/xp/2016-09-02/546038.html
http://ddzan.net/e/space/?userid=194087?feed_filter=/tm/2016-09-02/027163.html
http://ddzan.net/e/space/?userid=194088?feed_filter=/kb/2016-09-02/042856.html
http://ddzan.net/e/space/?userid=194089?feed_filter=/lw/2016-09-02/937621.html
http://ddzan.net/e/space/?userid=194090?feed_filter=/zf/2016-09-02/210693.html
http://ddzan.net/e/space/?userid=194091?feed_filter=/rv/2016-09-02/124078.html
http://ddzan.net/e/space/?userid=194092?feed_filter=/ao/2016-09-02/724391.html
http://ddzan.net/e/space/?userid=194093?feed_filter=/ez/2016-09-02/127465.html
http://ddzan.net/e/space/?userid=194094?feed_filter=/lk/2016-09-02/509426.html
http://ddzan.net/e/space/?userid=194095?feed_filter=/ze/2016-09-02/763895.html
http://ddzan.net/e/space/?userid=194096?feed_filter=/rw/2016-09-02/635714.html
http://ddzan.net/e/space/?userid=194097?feed_filter=/ji/2016-09-02/079265.html
http://ddzan.net/e/space/?userid=194098?feed_filter=/re/2016-09-02/274815.html
http://ddzan.net/e/space/?userid=194099?feed_filter=/gd/2016-09-02/691540.html
http://ddzan.net/e/space/?userid=194100?feed_filter=/iz/2016-09-02/049287.html
http://ddzan.net/e/space/?userid=194101?feed_filter=/dh/2016-09-02/874650.html
http://ddzan.net/e/space/?userid=194102?feed_filter=/xb/2016-09-02/815476.html
http://ddzan.net/e/space/?userid=194103?feed_filter=/ov/2016-09-02/247816.html
http://ddzan.net/e/space/?userid=194104?feed_filter=/co/2016-09-02/176508.html
http://ddzan.net/e/space/?userid=194105?feed_filter=/vk/2016-09-02/562938.html
http://ddzan.net/e/space/?userid=194106?feed_filter=/ir/2016-09-02/234158.html
http://ddzan.net/e/space/?userid=194107?feed_filter=/fg/2016-09-02/364195.html
http://ddzan.net/e/space/?userid=194108?feed_filter=/md/2016-09-02/251689.html
http://ddzan.net/e/space/?userid=194109?feed_filter=/xt/2016-09-02/104798.html
http://ddzan.net/e/space/?userid=194110?feed_filter=/et/2016-09-02/152098.html
http://ddzan.net/e/space/?userid=194111?feed_filter=/vd/2016-09-02/715839.html
http://ddzan.net/e/space/?userid=194112?feed_filter=/uj/2016-09-02/061398.html
http://ddzan.net/e/space/?userid=194113?feed_filter=/ob/2016-09-02/902385.html
http://ddzan.net/e/space/?userid=194114?feed_filter=/kl/2016-09-02/172984.html
http://ddzan.net/e/space/?userid=194115?feed_filter=/fv/2016-09-02/650238.html
http://ddzan.net/e/space/?userid=194116?feed_filter=/wg/2016-09-02/942518.html
http://ddzan.net/e/space/?userid=194117?feed_filter=/un/2016-09-02/578934.html
http://ddzan.net/e/space/?userid=194118?feed_filter=/sy/2016-09-02/367204.html
http://ddzan.net/e/space/?userid=194119?feed_filter=/gh/2016-09-02/790452.html
http://ddzan.net/e/space/?userid=194120?feed_filter=/vp/2016-09-02/146309.html
http://ddzan.net/e/space/?userid=194121?feed_filter=/zp/2016-09-02/986213.html
http://ddzan.net/e/space/?userid=194122?feed_filter=/ql/2016-09-02/014876.html
http://ddzan.net/e/space/?userid=194123?feed_filter=/hd/2016-09-02/034265.html
http://ddzan.net/e/space/?userid=194124?feed_filter=/ke/2016-09-02/568127.html
http://ddzan.net/e/space/?userid=194125?feed_filter=/dp/2016-09-02/823517.html
http://ddzan.net/e/space/?userid=194126?feed_filter=/da/2016-09-02/732019.html
http://ddzan.net/e/space/?userid=194127?feed_filter=/of/2016-09-02/372519.html
http://ddzan.net/e/space/?userid=194128?feed_filter=/lr/2016-09-02/431796.html
http://ddzan.net/e/space/?userid=194129?feed_filter=/qd/2016-09-02/163470.html
http://ddzan.net/e/space/?userid=194130?feed_filter=/ec/2016-09-02/326079.html
http://ddzan.net/e/space/?userid=194131?feed_filter=/cb/2016-09-02/239658.html
http://ddzan.net/e/space/?userid=194132?feed_filter=/ca/2016-09-02/045391.html
http://ddzan.net/e/space/?userid=194133?feed_filter=/uj/2016-09-02/541087.html
http://ddzan.net/e/space/?userid=194134?feed_filter=/bi/2016-09-02/314670.html
http://ddzan.net/e/space/?userid=194135?feed_filter=/lm/2016-09-02/317986.html
http://ddzan.net/e/space/?userid=194136?feed_filter=/gw/2016-09-02/310268.html
http://ddzan.net/e/space/?userid=194137?feed_filter=/vx/2016-09-02/135086.html
http://ddzan.net/e/space/?userid=194138?feed_filter=/ie/2016-09-02/634510.html
http://ddzan.net/e/space/?userid=194139?feed_filter=/nd/2016-09-02/321045.html
http://ddzan.net/e/space/?userid=194140?feed_filter=/di/2016-09-02/437298.html
http://ddzan.net/e/space/?userid=194141?feed_filter=/tr/2016-09-02/429053.html
http://ddzan.net/e/space/?userid=194142?feed_filter=/lv/2016-09-02/719238.html
http://ddzan.net/e/space/?userid=194143?feed_filter=/ok/2016-09-02/392807.html
http://ddzan.net/e/space/?userid=194144?feed_filter=/yj/2016-09-02/318457.html
http://ddzan.net/e/space/?userid=194145?feed_filter=/ti/2016-09-02/702539.html
http://ddzan.net/e/space/?userid=194146?feed_filter=/en/2016-09-02/359784.html
http://ddzan.net/e/space/?userid=194147?feed_filter=/zh/2016-09-02/429038.html
http://ddzan.net/e/space/?userid=194148?feed_filter=/lm/2016-09-02/206789.html
http://ddzan.net/e/space/?userid=194149?feed_filter=/ao/2016-09-02/526870.html
http://ddzan.net/e/space/?userid=194150?feed_filter=/uh/2016-09-02/637508.html
http://ddzan.net/e/space/?userid=194151?feed_filter=/nc/2016-09-02/967540.html
http://ddzan.net/e/space/?userid=194152?feed_filter=/no/2016-09-02/824051.html
http://ddzan.net/e/space/?userid=194153?feed_filter=/pd/2016-09-02/354126.html
http://ddzan.net/e/space/?userid=194154?feed_filter=/nj/2016-09-02/049582.html
http://ddzan.net/e/space/?userid=194155?feed_filter=/bz/2016-09-02/510342.html
http://ddzan.net/e/space/?userid=194156?feed_filter=/lv/2016-09-02/479013.html
http://ddzan.net/e/space/?userid=194157?feed_filter=/is/2016-09-02/348769.html
http://ddzan.net/e/space/?userid=194158?feed_filter=/ht/2016-09-02/976481.html
http://ddzan.net/e/space/?userid=194159?feed_filter=/jc/2016-09-02/460527.html
http://ddzan.net/e/space/?userid=194160?feed_filter=/pv/2016-09-02/730259.html
http://ddzan.net/e/space/?userid=194161?feed_filter=/yx/2016-09-02/349518.html
http://ddzan.net/e/space/?userid=194162?feed_filter=/bm/2016-09-02/263185.html
http://ddzan.net/e/space/?userid=194163?feed_filter=/yl/2016-09-02/956428.html
http://ddzan.net/e/space/?userid=194164?feed_filter=/yq/2016-09-02/748035.html
http://ddzan.net/e/space/?userid=194165?feed_filter=/xg/2016-09-02/153047.html
http://ddzan.net/e/space/?userid=194166?feed_filter=/uj/2016-09-02/195470.html
http://ddzan.net/e/space/?userid=194167?feed_filter=/tf/2016-09-02/465309.html
http://ddzan.net/e/space/?userid=194168?feed_filter=/zq/2016-09-02/153204.html
http://ddzan.net/e/space/?userid=194169?feed_filter=/bw/2016-09-02/628593.html
http://ddzan.net/e/space/?userid=194170?feed_filter=/wx/2016-09-02/021387.html
http://ddzan.net/e/space/?userid=194171?feed_filter=/xq/2016-09-02/649103.html
http://ddzan.net/e/space/?userid=194172?feed_filter=/fw/2016-09-02/427513.html
http://ddzan.net/e/space/?userid=194173?feed_filter=/to/2016-09-02/548269.html
http://ddzan.net/e/space/?userid=194174?feed_filter=/vh/2016-09-02/154283.html
http://ddzan.net/e/space/?userid=194175?feed_filter=/lf/2016-09-02/205781.html
http://ddzan.net/e/space/?userid=194176?feed_filter=/fw/2016-09-02/426159.html
http://ddzan.net/e/space/?userid=194177?feed_filter=/ez/2016-09-02/526473.html
http://ddzan.net/e/space/?userid=194178?feed_filter=/mz/2016-09-02/097426.html
http://ddzan.net/e/space/?userid=194179?feed_filter=/ec/2016-09-02/382510.html
http://ddzan.net/e/space/?userid=194180?feed_filter=/mc/2016-09-02/183740.html
http://ddzan.net/e/space/?userid=194181?feed_filter=/cg/2016-09-02/765083.html
http://ddzan.net/e/space/?userid=194182?feed_filter=/of/2016-09-02/367902.html
http://ddzan.net/e/space/?userid=194183?feed_filter=/wu/2016-09-02/063854.html
http://ddzan.net/e/space/?userid=194184?feed_filter=/fy/2016-09-02/710923.html
http://ddzan.net/e/space/?userid=194185?feed_filter=/hu/2016-09-02/748532.html
http://ddzan.net/e/space/?userid=194186?feed_filter=/iz/2016-09-02/652389.html
http://ddzan.net/e/space/?userid=194187?feed_filter=/wv/2016-09-02/892635.html
http://ddzan.net/e/space/?userid=194188?feed_filter=/jn/2016-09-02/247513.html
http://ddzan.net/e/space/?userid=194189?feed_filter=/kx/2016-09-02/752309.html
http://ddzan.net/e/space/?userid=194190?feed_filter=/kx/2016-09-02/248506.html
http://ddzan.net/e/space/?userid=194191?feed_filter=/gn/2016-09-02/430856.html
http://ddzan.net/e/space/?userid=194192?feed_filter=/ul/2016-09-02/891205.html
http://ddzan.net/e/space/?userid=194193?feed_filter=/lw/2016-09-02/275609.html
http://ddzan.net/e/space/?userid=194194?feed_filter=/bh/2016-09-02/265308.html
http://ddzan.net/e/space/?userid=194195?feed_filter=/os/2016-09-02/136482.html
http://ddzan.net/e/space/?userid=194196?feed_filter=/mu/2016-09-02/913520.html
http://ddzan.net/e/space/?userid=194197?feed_filter=/zu/2016-09-02/905146.html
http://ddzan.net/e/space/?userid=194198?feed_filter=/hx/2016-09-02/807651.html
http://ddzan.net/e/space/?userid=194199?feed_filter=/qi/2016-09-02/420563.html
http://ddzan.net/e/space/?userid=194200?feed_filter=/eq/2016-09-02/937520.html
http://ddzan.net/e/space/?userid=194201?feed_filter=/qx/2016-09-02/578429.html
http://ddzan.net/e/space/?userid=194202?feed_filter=/qj/2016-09-02/728136.html
http://ddzan.net/e/space/?userid=194203?feed_filter=/ar/2016-09-02/237849.html
http://ddzan.net/e/space/?userid=194204?feed_filter=/vp/2016-09-02/804672.html
http://ddzan.net/e/space/?userid=194205?feed_filter=/mi/2016-09-02/273405.html
http://ddzan.net/e/space/?userid=194206?feed_filter=/sa/2016-09-02/427561.html
http://ddzan.net/e/space/?userid=194207?feed_filter=/ap/2016-09-02/416523.html
http://ddzan.net/e/space/?userid=194208?feed_filter=/sw/2016-09-02/538617.html
http://ddzan.net/e/space/?userid=194209?feed_filter=/hi/2016-09-02/497836.html
http://ddzan.net/e/space/?userid=194210?feed_filter=/ro/2016-09-02/651092.html
http://ddzan.net/e/space/?userid=194211?feed_filter=/hx/2016-09-02/357960.html
http://ddzan.net/e/space/?userid=194212?feed_filter=/ge/2016-09-02/439268.html
http://ddzan.net/e/space/?userid=194213?feed_filter=/nx/2016-09-02/901685.html
http://ddzan.net/e/space/?userid=194214?feed_filter=/lz/2016-09-02/350471.html
http://ddzan.net/e/space/?userid=194215?feed_filter=/bp/2016-09-02/790863.html
http://ddzan.net/e/space/?userid=194216?feed_filter=/rj/2016-09-02/453106.html
http://ddzan.net/e/space/?userid=194217?feed_filter=/pi/2016-09-02/321685.html
http://ddzan.net/e/space/?userid=194218?feed_filter=/lo/2016-09-02/865431.html
http://ddzan.net/e/space/?userid=194219?feed_filter=/fo/2016-09-02/890527.html
http://ddzan.net/e/space/?userid=194220?feed_filter=/ck/2016-09-02/326084.html
http://ddzan.net/e/space/?userid=194221?feed_filter=/ho/2016-09-02/054893.html
http://ddzan.net/e/space/?userid=194222?feed_filter=/ex/2016-09-02/968372.html
http://ddzan.net/e/space/?userid=194223?feed_filter=/hs/2016-09-02/081523.html
http://ddzan.net/e/space/?userid=194224?feed_filter=/vw/2016-09-02/603924.html
http://ddzan.net/e/space/?userid=194225?feed_filter=/ui/2016-09-02/264793.html
http://ddzan.net/e/space/?userid=194226?feed_filter=/zl/2016-09-02/598301.html
http://ddzan.net/e/space/?userid=194227?feed_filter=/rw/2016-09-02/892317.html
http://ddzan.net/e/space/?userid=194228?feed_filter=/ev/2016-09-02/569482.html
http://ddzan.net/e/space/?userid=194229?feed_filter=/xv/2016-09-02/276315.html
http://ddzan.net/e/space/?userid=194230?feed_filter=/hs/2016-09-02/875436.html
http://ddzan.net/e/space/?userid=194231?feed_filter=/kf/2016-09-02/048517.html
http://ddzan.net/e/space/?userid=194232?feed_filter=/za/2016-09-02/138726.html
http://ddzan.net/e/space/?userid=194233?feed_filter=/pt/2016-09-02/421687.html
http://ddzan.net/e/space/?userid=194234?feed_filter=/cv/2016-09-02/695347.html
http://ddzan.net/e/space/?userid=194235?feed_filter=/mo/2016-09-02/785601.html
http://ddzan.net/e/space/?userid=194236?feed_filter=/rw/2016-09-02/209137.html
http://ddzan.net/e/space/?userid=194237?feed_filter=/st/2016-09-02/478150.html
http://ddzan.net/e/space/?userid=194238?feed_filter=/dv/2016-09-02/970231.html
http://ddzan.net/e/space/?userid=194239?feed_filter=/rm/2016-09-02/304589.html
http://ddzan.net/e/space/?userid=194240?feed_filter=/oy/2016-09-02/521706.html
http://ddzan.net/e/space/?userid=194241?feed_filter=/pt/2016-09-02/867059.html
http://ddzan.net/e/space/?userid=194242?feed_filter=/ea/2016-09-02/462130.html
http://ddzan.net/e/space/?userid=194243?feed_filter=/ca/2016-09-02/016457.html
http://ddzan.net/e/space/?userid=194244?feed_filter=/zp/2016-09-02/068253.html
http://ddzan.net/e/space/?userid=194245?feed_filter=/wr/2016-09-02/086721.html
http://ddzan.net/e/space/?userid=194246?feed_filter=/og/2016-09-02/762980.html
http://ddzan.net/e/space/?userid=194247?feed_filter=/lw/2016-09-02/501487.html
http://ddzan.net/e/space/?userid=194248?feed_filter=/xk/2016-09-02/269083.html
http://ddzan.net/e/space/?userid=194249?feed_filter=/qd/2016-09-02/561239.html
http://ddzan.net/e/space/?userid=194250?feed_filter=/ki/2016-09-02/536179.html
http://ddzan.net/e/space/?userid=194251?feed_filter=/sh/2016-09-02/507834.html
http://ddzan.net/e/space/?userid=194252?feed_filter=/gw/2016-09-02/831092.html
http://ddzan.net/e/space/?userid=194253?feed_filter=/bh/2016-09-02/358406.html
http://ddzan.net/e/space/?userid=194254?feed_filter=/xo/2016-09-02/298475.html
http://ddzan.net/e/space/?userid=194255?feed_filter=/zc/2016-09-02/567014.html
http://ddzan.net/e/space/?userid=194256?feed_filter=/no/2016-09-02/274918.html
http://ddzan.net/e/space/?userid=194257?feed_filter=/kp/2016-09-02/416592.html
http://ddzan.net/e/space/?userid=194258?feed_filter=/cb/2016-09-02/309185.html
http://ddzan.net/e/space/?userid=194259?feed_filter=/us/2016-09-02/156479.html
http://ddzan.net/e/space/?userid=194260?feed_filter=/co/2016-09-02/267415.html
http://ddzan.net/e/space/?userid=194261?feed_filter=/bc/2016-09-02/430925.html
http://ddzan.net/e/space/?userid=194262?feed_filter=/hy/2016-09-02/524138.html
http://ddzan.net/e/space/?userid=194263?feed_filter=/rt/2016-09-02/307659.html
http://ddzan.net/e/space/?userid=194264?feed_filter=/li/2016-09-02/321940.html
http://ddzan.net/e/space/?userid=194265?feed_filter=/zs/2016-09-02/347912.html
http://ddzan.net/e/space/?userid=194266?feed_filter=/wp/2016-09-02/957831.html
http://ddzan.net/e/space/?userid=194267?feed_filter=/ob/2016-09-02/836457.html
http://ddzan.net/e/space/?userid=194268?feed_filter=/ds/2016-09-02/042387.html
http://ddzan.net/e/space/?userid=194269?feed_filter=/es/2016-09-02/857613.html
http://ddzan.net/e/space/?userid=194270?feed_filter=/kc/2016-09-02/134526.html
http://ddzan.net/e/space/?userid=194271?feed_filter=/sx/2016-09-02/475601.html
http://ddzan.net/e/space/?userid=194272?feed_filter=/na/2016-09-02/621083.html
http://ddzan.net/e/space/?userid=194273?feed_filter=/kf/2016-09-02/239456.html
http://ddzan.net/e/space/?userid=194274?feed_filter=/xl/2016-09-02/936420.html
http://ddzan.net/e/space/?userid=194275?feed_filter=/dq/2016-09-02/820613.html
http://ddzan.net/e/space/?userid=194276?feed_filter=/sv/2016-09-02/739465.html
http://ddzan.net/e/space/?userid=194277?feed_filter=/qu/2016-09-02/704561.html
http://ddzan.net/e/space/?userid=194278?feed_filter=/ne/2016-09-02/089562.html
http://ddzan.net/e/space/?userid=194279?feed_filter=/wx/2016-09-02/708591.html
http://ddzan.net/e/space/?userid=194280?feed_filter=/wh/2016-09-02/594376.html
http://ddzan.net/e/space/?userid=194281?feed_filter=/po/2016-09-02/148760.html
http://ddzan.net/e/space/?userid=194282?feed_filter=/xj/2016-09-02/841906.html
http://ddzan.net/e/space/?userid=194283?feed_filter=/xi/2016-09-02/546293.html
http://ddzan.net/e/space/?userid=194284?feed_filter=/cd/2016-09-02/671285.html
http://ddzan.net/e/space/?userid=194285?feed_filter=/xk/2016-09-02/739654.html
http://ddzan.net/e/space/?userid=194286?feed_filter=/bc/2016-09-02/387264.html
http://ddzan.net/e/space/?userid=194287?feed_filter=/sb/2016-09-02/038492.html
http://ddzan.net/e/space/?userid=194288?feed_filter=/eh/2016-09-02/239856.html
http://ddzan.net/e/space/?userid=194289?feed_filter=/uw/2016-09-02/471936.html
http://ddzan.net/e/space/?userid=194290?feed_filter=/bd/2016-09-02/503679.html
http://ddzan.net/e/space/?userid=194291?feed_filter=/vs/2016-09-02/958164.html
http://ddzan.net/e/space/?userid=194292?feed_filter=/wx/2016-09-02/358601.html
http://ddzan.net/e/space/?userid=194293?feed_filter=/ac/2016-09-02/579340.html
http://ddzan.net/e/space/?userid=194294?feed_filter=/hq/2016-09-02/850763.html
http://ddzan.net/e/space/?userid=194295?feed_filter=/pn/2016-09-02/863105.html
http://ddzan.net/e/space/?userid=194296?feed_filter=/cg/2016-09-02/921304.html
http://ddzan.net/e/space/?userid=194297?feed_filter=/vm/2016-09-02/823975.html
http://ddzan.net/e/space/?userid=194298?feed_filter=/yk/2016-09-02/762819.html
http://ddzan.net/e/space/?userid=194299?feed_filter=/xc/2016-09-02/367019.html
http://ddzan.net/e/space/?userid=194300?feed_filter=/hk/2016-09-02/280547.html
http://ddzan.net/e/space/?userid=194301?feed_filter=/lw/2016-09-02/954380.html
http://ddzan.net/e/space/?userid=194302?feed_filter=/zh/2016-09-02/673258.html
http://ddzan.net/e/space/?userid=194303?feed_filter=/vu/2016-09-02/371926.html
http://ddzan.net/e/space/?userid=194304?feed_filter=/az/2016-09-02/750291.html
http://ddzan.net/e/space/?userid=194305?feed_filter=/xj/2016-09-02/123068.html
http://ddzan.net/e/space/?userid=194306?feed_filter=/ok/2016-09-02/367582.html
http://ddzan.net/e/space/?userid=194307?feed_filter=/pg/2016-09-02/291063.html
http://ddzan.net/e/space/?userid=194308?feed_filter=/pn/2016-09-02/317429.html
http://ddzan.net/e/space/?userid=194309?feed_filter=/fo/2016-09-02/957013.html
http://ddzan.net/e/space/?userid=194310?feed_filter=/wj/2016-09-02/245706.html
http://ddzan.net/e/space/?userid=194311?feed_filter=/qv/2016-09-02/490712.html
http://ddzan.net/e/space/?userid=194312?feed_filter=/hb/2016-09-02/126084.html
http://ddzan.net/e/space/?userid=194313?feed_filter=/vu/2016-09-02/075631.html
http://ddzan.net/e/space/?userid=194314?feed_filter=/xi/2016-09-02/814569.html
http://ddzan.net/e/space/?userid=194315?feed_filter=/rf/2016-09-02/235901.html
http://ddzan.net/e/space/?userid=194316?feed_filter=/go/2016-09-02/208365.html
http://ddzan.net/e/space/?userid=194317?feed_filter=/sv/2016-09-02/250738.html
http://ddzan.net/e/space/?userid=194318?feed_filter=/wt/2016-09-02/278134.html
http://ddzan.net/e/space/?userid=194319?feed_filter=/mv/2016-09-02/546217.html
http://ddzan.net/e/space/?userid=194320?feed_filter=/hb/2016-09-02/958106.html
http://ddzan.net/e/space/?userid=194321?feed_filter=/cs/2016-09-02/210489.html
http://ddzan.net/e/space/?userid=194322?feed_filter=/ik/2016-09-02/067523.html
http://ddzan.net/e/space/?userid=194323?feed_filter=/cv/2016-09-02/946203.html
http://ddzan.net/e/space/?userid=194324?feed_filter=/tw/2016-09-02/174382.html
http://ddzan.net/e/space/?userid=194325?feed_filter=/jw/2016-09-02/531204.html
http://ddzan.net/e/space/?userid=194326?feed_filter=/dg/2016-09-02/679321.html
http://ddzan.net/e/space/?userid=194327?feed_filter=/rw/2016-09-02/612497.html
http://ddzan.net/e/space/?userid=194328?feed_filter=/rk/2016-09-02/150479.html
http://ddzan.net/e/space/?userid=194329?feed_filter=/az/2016-09-02/691307.html
http://ddzan.net/e/space/?userid=194330?feed_filter=/qd/2016-09-02/940361.html
http://ddzan.net/e/space/?userid=194331?feed_filter=/oa/2016-09-02/650713.html
http://ddzan.net/e/space/?userid=194332?feed_filter=/mi/2016-09-02/907832.html
http://ddzan.net/e/space/?userid=194333?feed_filter=/lr/2016-09-02/739864.html
http://ddzan.net/e/space/?userid=194334?feed_filter=/nz/2016-09-02/017843.html
http://ddzan.net/e/space/?userid=194335?feed_filter=/ni/2016-09-02/140273.html
http://ddzan.net/e/space/?userid=194336?feed_filter=/pf/2016-09-02/925684.html
http://ddzan.net/e/space/?userid=194337?feed_filter=/wt/2016-09-02/761504.html
http://ddzan.net/e/space/?userid=194338?feed_filter=/py/2016-09-02/902715.html
http://ddzan.net/e/space/?userid=194339?feed_filter=/lq/2016-09-02/287936.html
http://ddzan.net/e/space/?userid=194340?feed_filter=/ql/2016-09-02/549102.html
http://ddzan.net/e/space/?userid=194341?feed_filter=/kx/2016-09-02/584613.html
http://ddzan.net/e/space/?userid=194342?feed_filter=/kq/2016-09-02/162580.html
http://ddzan.net/e/space/?userid=194343?feed_filter=/wz/2016-09-02/861753.html
http://ddzan.net/e/space/?userid=194344?feed_filter=/mq/2016-09-02/189352.html
http://ddzan.net/e/space/?userid=194345?feed_filter=/yc/2016-09-02/406591.html
http://ddzan.net/e/space/?userid=194346?feed_filter=/im/2016-09-02/863105.html
http://ddzan.net/e/space/?userid=194347?feed_filter=/av/2016-09-02/536482.html
http://ddzan.net/e/space/?userid=194348?feed_filter=/kc/2016-09-02/781502.html
http://ddzan.net/e/space/?userid=194349?feed_filter=/yc/2016-09-02/761092.html
http://ddzan.net/e/space/?userid=194350?feed_filter=/fh/2016-09-02/329586.html
http://ddzan.net/e/space/?userid=194351?feed_filter=/mg/2016-09-02/857216.html
http://ddzan.net/e/space/?userid=194352?feed_filter=/vd/2016-09-02/869527.html
http://ddzan.net/e/space/?userid=194353?feed_filter=/mx/2016-09-02/657014.html
http://ddzan.net/e/space/?userid=194354?feed_filter=/ui/2016-09-02/506439.html
http://ddzan.net/e/space/?userid=194355?feed_filter=/pk/2016-09-02/462018.html
http://ddzan.net/e/space/?userid=194356?feed_filter=/zg/2016-09-02/641732.html
http://ddzan.net/e/space/?userid=194357?feed_filter=/yd/2016-09-02/312608.html
http://ddzan.net/e/space/?userid=194358?feed_filter=/lb/2016-09-02/398417.html
http://ddzan.net/e/space/?userid=194359?feed_filter=/mo/2016-09-02/089364.html
http://ddzan.net/e/space/?userid=194360?feed_filter=/eg/2016-09-02/794628.html
http://ddzan.net/e/space/?userid=194361?feed_filter=/wi/2016-09-02/037245.html
http://ddzan.net/e/space/?userid=194362?feed_filter=/tf/2016-09-02/985403.html
http://ddzan.net/e/space/?userid=194363?feed_filter=/zv/2016-09-02/520683.html
http://ddzan.net/e/space/?userid=194364?feed_filter=/ck/2016-09-02/531689.html
http://ddzan.net/e/space/?userid=194365?feed_filter=/jk/2016-09-02/083572.html
http://ddzan.net/e/space/?userid=194366?feed_filter=/ic/2016-09-02/843129.html
http://ddzan.net/e/space/?userid=194367?feed_filter=/qm/2016-09-02/301287.html
http://ddzan.net/e/space/?userid=194368?feed_filter=/mg/2016-09-02/781934.html
http://ddzan.net/e/space/?userid=194369?feed_filter=/fr/2016-09-02/546971.html
http://ddzan.net/e/space/?userid=194370?feed_filter=/hd/2016-09-02/059168.html
http://ddzan.net/e/space/?userid=194371?feed_filter=/hq/2016-09-02/193287.html
http://ddzan.net/e/space/?userid=194372?feed_filter=/dk/2016-09-02/297135.html
http://ddzan.net/e/space/?userid=194373?feed_filter=/ja/2016-09-02/862945.html
http://ddzan.net/e/space/?userid=194374?feed_filter=/gb/2016-09-02/086147.html
http://ddzan.net/e/space/?userid=194375?feed_filter=/jm/2016-09-02/749521.html
http://ddzan.net/e/space/?userid=194376?feed_filter=/yi/2016-09-02/948132.html
http://ddzan.net/e/space/?userid=194377?feed_filter=/ua/2016-09-02/635294.html
http://ddzan.net/e/space/?userid=194378?feed_filter=/ov/2016-09-02/063247.html
http://ddzan.net/e/space/?userid=194379?feed_filter=/qu/2016-09-02/296084.html
http://ddzan.net/e/space/?userid=194380?feed_filter=/vt/2016-09-02/289130.html
http://ddzan.net/e/space/?userid=194381?feed_filter=/kg/2016-09-02/423078.html
http://ddzan.net/e/space/?userid=194382?feed_filter=/ws/2016-09-02/614789.html
http://ddzan.net/e/space/?userid=194383?feed_filter=/mj/2016-09-02/508627.html
http://ddzan.net/e/space/?userid=194384?feed_filter=/ic/2016-09-02/823509.html
http://ddzan.net/e/space/?userid=194385?feed_filter=/ie/2016-09-02/985260.html
http://ddzan.net/e/space/?userid=194386?feed_filter=/ea/2016-09-02/479683.html
http://ddzan.net/e/space/?userid=194387?feed_filter=/mv/2016-09-02/379628.html
http://ddzan.net/e/space/?userid=194388?feed_filter=/qo/2016-09-02/498076.html
http://ddzan.net/e/space/?userid=194389?feed_filter=/yd/2016-09-02/705168.html
http://ddzan.net/e/space/?userid=194390?feed_filter=/mo/2016-09-02/091736.html
http://ddzan.net/e/space/?userid=194391?feed_filter=/wj/2016-09-02/501682.html
http://ddzan.net/e/space/?userid=194392?feed_filter=/zy/2016-09-02/706984.html
http://ddzan.net/e/space/?userid=194393?feed_filter=/oj/2016-09-02/817953.html
http://ddzan.net/e/space/?userid=194394?feed_filter=/jz/2016-09-02/813204.html
http://ddzan.net/e/space/?userid=194395?feed_filter=/ya/2016-09-02/430957.html
http://ddzan.net/e/space/?userid=194396?feed_filter=/hj/2016-09-02/846591.html
http://ddzan.net/e/space/?userid=194397?feed_filter=/zd/2016-09-02/514890.html
http://ddzan.net/e/space/?userid=194398?feed_filter=/wk/2016-09-02/273849.html
http://ddzan.net/e/space/?userid=194399?feed_filter=/au/2016-09-02/190863.html
http://ddzan.net/e/space/?userid=194400?feed_filter=/sz/2016-09-02/589160.html
http://ddzan.net/e/space/?userid=194401?feed_filter=/zy/2016-09-02/630758.html
http://ddzan.net/e/space/?userid=194402?feed_filter=/ki/2016-09-02/148576.html
http://ddzan.net/e/space/?userid=194403?feed_filter=/xh/2016-09-02/923608.html
http://ddzan.net/e/space/?userid=194404?feed_filter=/jl/2016-09-02/601329.html
http://ddzan.net/e/space/?userid=194405?feed_filter=/tj/2016-09-02/576820.html
http://ddzan.net/e/space/?userid=194406?feed_filter=/ku/2016-09-02/327906.html
http://ddzan.net/e/space/?userid=194407?feed_filter=/ql/2016-09-02/217435.html
http://ddzan.net/e/space/?userid=194408?feed_filter=/ce/2016-09-02/432685.html
http://ddzan.net/e/space/?userid=194409?feed_filter=/nc/2016-09-02/201847.html
http://ddzan.net/e/space/?userid=194410?feed_filter=/uo/2016-09-02/247590.html
http://ddzan.net/e/space/?userid=194411?feed_filter=/jr/2016-09-02/739205.html
http://ddzan.net/e/space/?userid=194412?feed_filter=/yc/2016-09-02/847601.html
http://ddzan.net/e/space/?userid=194413?feed_filter=/lj/2016-09-02/015374.html
http://ddzan.net/e/space/?userid=194414?feed_filter=/rq/2016-09-02/285043.html
http://ddzan.net/e/space/?userid=194415?feed_filter=/dk/2016-09-02/807564.html
http://ddzan.net/e/space/?userid=194416?feed_filter=/ue/2016-09-02/437921.html
http://ddzan.net/e/space/?userid=194417?feed_filter=/ea/2016-09-02/416825.html
http://ddzan.net/e/space/?userid=194418?feed_filter=/yj/2016-09-02/713894.html
http://ddzan.net/e/space/?userid=194419?feed_filter=/dh/2016-09-02/619307.html
http://ddzan.net/e/space/?userid=194420?feed_filter=/xj/2016-09-02/863157.html
http://ddzan.net/e/space/?userid=194421?feed_filter=/qm/2016-09-02/061329.html
http://ddzan.net/e/space/?userid=194422?feed_filter=/hg/2016-09-02/237485.html
http://ddzan.net/e/space/?userid=194423?feed_filter=/is/2016-09-02/637819.html
http://ddzan.net/e/space/?userid=194424?feed_filter=/nh/2016-09-02/927608.html
http://ddzan.net/e/space/?userid=194425?feed_filter=/yu/2016-09-02/176325.html
http://ddzan.net/e/space/?userid=194426?feed_filter=/ka/2016-09-02/041396.html
http://ddzan.net/e/space/?userid=194427?feed_filter=/du/2016-09-02/946058.html
http://ddzan.net/e/space/?userid=194428?feed_filter=/sl/2016-09-02/639512.html
http://ddzan.net/e/space/?userid=194429?feed_filter=/fl/2016-09-02/126348.html
http://ddzan.net/e/space/?userid=194430?feed_filter=/iw/2016-09-02/014829.html
http://ddzan.net/e/space/?userid=194431?feed_filter=/ab/2016-09-02/061785.html
http://ddzan.net/e/space/?userid=194432?feed_filter=/ul/2016-09-02/750942.html
http://ddzan.net/e/space/?userid=194433?feed_filter=/zp/2016-09-02/729468.html
http://ddzan.net/e/space/?userid=194434?feed_filter=/gq/2016-09-02/948627.html
http://ddzan.net/e/space/?userid=194435?feed_filter=/da/2016-09-02/315928.html
http://ddzan.net/e/space/?userid=194436?feed_filter=/nx/2016-09-02/310789.html
http://ddzan.net/e/space/?userid=194437?feed_filter=/dy/2016-09-02/479356.html
http://ddzan.net/e/space/?userid=194438?feed_filter=/uz/2016-09-02/652938.html
http://ddzan.net/e/space/?userid=194439?feed_filter=/rn/2016-09-02/957462.html
http://ddzan.net/e/space/?userid=194440?feed_filter=/gs/2016-09-02/054281.html
http://ddzan.net/e/space/?userid=194441?feed_filter=/cw/2016-09-02/259038.html
http://ddzan.net/e/space/?userid=194442?feed_filter=/vh/2016-09-02/314692.html
http://ddzan.net/e/space/?userid=194443?feed_filter=/mu/2016-09-02/196472.html
http://ddzan.net/e/space/?userid=194444?feed_filter=/hx/2016-09-02/403751.html
http://ddzan.net/e/space/?userid=194445?feed_filter=/ju/2016-09-02/390718.html
http://ddzan.net/e/space/?userid=194446?feed_filter=/mz/2016-09-02/261830.html
http://ddzan.net/e/space/?userid=194447?feed_filter=/jg/2016-09-02/451076.html
http://ddzan.net/e/space/?userid=194448?feed_filter=/hd/2016-09-02/908735.html
http://ddzan.net/e/space/?userid=194449?feed_filter=/gy/2016-09-02/927503.html
http://ddzan.net/e/space/?userid=194450?feed_filter=/ti/2016-09-02/352864.html
http://ddzan.net/e/space/?userid=194451?feed_filter=/vg/2016-09-02/152978.html
http://ddzan.net/e/space/?userid=194452?feed_filter=/ve/2016-09-02/251376.html
http://ddzan.net/e/space/?userid=194453?feed_filter=/xz/2016-09-02/684913.html
http://ddzan.net/e/space/?userid=194454?feed_filter=/um/2016-09-02/705182.html
http://ddzan.net/e/space/?userid=194455?feed_filter=/qi/2016-09-02/042567.html
http://ddzan.net/e/space/?userid=194456?feed_filter=/xr/2016-09-02/468925.html
http://ddzan.net/e/space/?userid=194457?feed_filter=/av/2016-09-02/940385.html
http://ddzan.net/e/space/?userid=194458?feed_filter=/cv/2016-09-02/630524.html
http://ddzan.net/e/space/?userid=194459?feed_filter=/yv/2016-09-02/483529.html
http://ddzan.net/e/space/?userid=194460?feed_filter=/hd/2016-09-02/602975.html
http://ddzan.net/e/space/?userid=194461?feed_filter=/pc/2016-09-02/731894.html
http://ddzan.net/e/space/?userid=194462?feed_filter=/qc/2016-09-02/382756.html
http://ddzan.net/e/space/?userid=194463?feed_filter=/xd/2016-09-02/372548.html
http://ddzan.net/e/space/?userid=194464?feed_filter=/wo/2016-09-02/305971.html
http://ddzan.net/e/space/?userid=194465?feed_filter=/eo/2016-09-02/359742.html
http://ddzan.net/e/space/?userid=194466?feed_filter=/xd/2016-09-02/089736.html
http://ddzan.net/e/space/?userid=194467?feed_filter=/fm/2016-09-02/937840.html
http://ddzan.net/e/space/?userid=194468?feed_filter=/en/2016-09-02/280693.html
http://ddzan.net/e/space/?userid=194469?feed_filter=/iy/2016-09-02/264510.html
http://ddzan.net/e/space/?userid=194470?feed_filter=/ep/2016-09-02/748693.html
http://ddzan.net/e/space/?userid=194471?feed_filter=/wy/2016-09-02/069843.html
http://ddzan.net/e/space/?userid=194472?feed_filter=/pt/2016-09-02/947632.html
http://ddzan.net/e/space/?userid=194473?feed_filter=/ea/2016-09-02/691573.html
http://ddzan.net/e/space/?userid=194474?feed_filter=/si/2016-09-02/065348.html
http://ddzan.net/e/space/?userid=194475?feed_filter=/ds/2016-09-02/289076.html
http://ddzan.net/e/space/?userid=194476?feed_filter=/zj/2016-09-02/512903.html
http://ddzan.net/e/space/?userid=194477?feed_filter=/we/2016-09-02/704261.html
http://ddzan.net/e/space/?userid=194478?feed_filter=/zd/2016-09-02/630924.html
http://ddzan.net/e/space/?userid=194479?feed_filter=/xm/2016-09-02/985130.html
http://ddzan.net/e/space/?userid=194480?feed_filter=/uj/2016-09-02/538021.html
http://ddzan.net/e/space/?userid=194481?feed_filter=/vq/2016-09-02/385426.html
http://ddzan.net/e/space/?userid=194482?feed_filter=/ce/2016-09-02/325187.html
http://ddzan.net/e/space/?userid=194483?feed_filter=/ls/2016-09-02/829473.html
http://ddzan.net/e/space/?userid=194484?feed_filter=/cx/2016-09-02/958146.html
http://ddzan.net/e/space/?userid=194485?feed_filter=/lz/2016-09-02/457961.html
http://ddzan.net/e/space/?userid=194486?feed_filter=/ur/2016-09-02/697280.html
http://ddzan.net/e/space/?userid=194487?feed_filter=/ou/2016-09-02/813095.html
http://ddzan.net/e/space/?userid=194488?feed_filter=/wj/2016-09-02/906718.html
http://ddzan.net/e/space/?userid=194489?feed_filter=/sn/2016-09-02/814925.html
http://ddzan.net/e/space/?userid=194490?feed_filter=/xt/2016-09-02/620871.html
http://ddzan.net/e/space/?userid=194491?feed_filter=/mj/2016-09-02/073648.html
http://ddzan.net/e/space/?userid=194492?feed_filter=/mp/2016-09-02/420561.html
http://ddzan.net/e/space/?userid=194493?feed_filter=/nt/2016-09-02/720568.html
http://ddzan.net/e/space/?userid=194494?feed_filter=/cf/2016-09-02/465809.html
http://ddzan.net/e/space/?userid=194495?feed_filter=/mo/2016-09-02/790354.html
http://ddzan.net/e/space/?userid=194496?feed_filter=/bm/2016-09-02/364785.html
http://ddzan.net/e/space/?userid=194497?feed_filter=/oi/2016-09-02/526079.html
http://ddzan.net/e/space/?userid=194498?feed_filter=/uh/2016-09-02/451782.html
http://ddzan.net/e/space/?userid=194499?feed_filter=/tk/2016-09-02/710692.html
http://ddzan.net/e/space/?userid=194500?feed_filter=/hi/2016-09-02/780192.html
http://ddzan.net/e/space/?userid=194501?feed_filter=/oq/2016-09-02/483760.html
http://ddzan.net/e/space/?userid=194502?feed_filter=/em/2016-09-02/736402.html
http://ddzan.net/e/space/?userid=194503?feed_filter=/el/2016-09-02/576832.html
http://ddzan.net/e/space/?userid=194504?feed_filter=/sl/2016-09-02/026945.html
http://ddzan.net/e/space/?userid=194505?feed_filter=/ta/2016-09-02/932675.html
http://ddzan.net/e/space/?userid=194506?feed_filter=/ck/2016-09-02/791234.html
http://ddzan.net/e/space/?userid=194507?feed_filter=/nm/2016-09-02/185043.html
http://ddzan.net/e/space/?userid=194508?feed_filter=/gy/2016-09-02/827463.html
http://ddzan.net/e/space/?userid=194509?feed_filter=/qu/2016-09-02/765439.html
http://ddzan.net/e/space/?userid=194510?feed_filter=/we/2016-09-02/859672.html
http://ddzan.net/e/space/?userid=194511?feed_filter=/jf/2016-09-02/093671.html
http://ddzan.net/e/space/?userid=194512?feed_filter=/ir/2016-09-02/256438.html
http://ddzan.net/e/space/?userid=194513?feed_filter=/mf/2016-09-02/157904.html
http://ddzan.net/e/space/?userid=194514?feed_filter=/qf/2016-09-02/031628.html
http://ddzan.net/e/space/?userid=194515?feed_filter=/mi/2016-09-02/257146.html
http://ddzan.net/e/space/?userid=194516?feed_filter=/ya/2016-09-02/542738.html
http://ddzan.net/e/space/?userid=194517?feed_filter=/tz/2016-09-02/695720.html
http://ddzan.net/e/space/?userid=194518?feed_filter=/uv/2016-09-02/741269.html
http://ddzan.net/e/space/?userid=194519?feed_filter=/tc/2016-09-02/781940.html
http://ddzan.net/e/space/?userid=194520?feed_filter=/cq/2016-09-02/250364.html
http://ddzan.net/e/space/?userid=194521?feed_filter=/wa/2016-09-02/762194.html
http://ddzan.net/e/space/?userid=194522?feed_filter=/yr/2016-09-02/153247.html
http://ddzan.net/e/space/?userid=194523?feed_filter=/dj/2016-09-02/519608.html
http://ddzan.net/e/space/?userid=194524?feed_filter=/ak/2016-09-02/791524.html
http://ddzan.net/e/space/?userid=194525?feed_filter=/sc/2016-09-02/102467.html
http://ddzan.net/e/space/?userid=194526?feed_filter=/jd/2016-09-02/205687.html
http://ddzan.net/e/space/?userid=194527?feed_filter=/jx/2016-09-02/521740.html
http://ddzan.net/e/space/?userid=194528?feed_filter=/mb/2016-09-02/709156.html
http://ddzan.net/e/space/?userid=194529?feed_filter=/ux/2016-09-02/708639.html
http://ddzan.net/e/space/?userid=194530?feed_filter=/nw/2016-09-02/086317.html
http://ddzan.net/e/space/?userid=194531?feed_filter=/jn/2016-09-02/805263.html
http://ddzan.net/e/space/?userid=194532?feed_filter=/xm/2016-09-02/796504.html
http://ddzan.net/e/space/?userid=194533?feed_filter=/ya/2016-09-02/340725.html
http://ddzan.net/e/space/?userid=194534?feed_filter=/sw/2016-09-02/354928.html
http://ddzan.net/e/space/?userid=194535?feed_filter=/vn/2016-09-02/647395.html
http://ddzan.net/e/space/?userid=194536?feed_filter=/vc/2016-09-02/726841.html
http://ddzan.net/e/space/?userid=194537?feed_filter=/sc/2016-09-02/497803.html
http://ddzan.net/e/space/?userid=194538?feed_filter=/ix/2016-09-02/904673.html
http://ddzan.net/e/space/?userid=194539?feed_filter=/qe/2016-09-02/703658.html
http://ddzan.net/e/space/?userid=194540?feed_filter=/ef/2016-09-02/498236.html
http://ddzan.net/e/space/?userid=194541?feed_filter=/hx/2016-09-02/127346.html
http://ddzan.net/e/space/?userid=194542?feed_filter=/tq/2016-09-02/750613.html
http://ddzan.net/e/space/?userid=194543?feed_filter=/de/2016-09-02/570321.html
http://ddzan.net/e/space/?userid=194544?feed_filter=/uw/2016-09-02/625174.html
http://ddzan.net/e/space/?userid=194545?feed_filter=/mp/2016-09-02/029764.html
http://ddzan.net/e/space/?userid=194546?feed_filter=/lc/2016-09-02/695204.html
http://ddzan.net/e/space/?userid=194547?feed_filter=/eq/2016-09-02/794183.html
http://ddzan.net/e/space/?userid=194548?feed_filter=/qg/2016-09-02/107892.html
http://ddzan.net/e/space/?userid=194549?feed_filter=/qm/2016-09-02/405286.html
http://ddzan.net/e/space/?userid=194550?feed_filter=/ho/2016-09-02/895124.html
http://ddzan.net/e/space/?userid=194551?feed_filter=/be/2016-09-02/572608.html
http://ddzan.net/e/space/?userid=194552?feed_filter=/nj/2016-09-02/569034.html
http://ddzan.net/e/space/?userid=194553?feed_filter=/nr/2016-09-02/748603.html
http://ddzan.net/e/space/?userid=194554?feed_filter=/qj/2016-09-02/892570.html
http://ddzan.net/e/space/?userid=194555?feed_filter=/yf/2016-09-02/871046.html
http://ddzan.net/e/space/?userid=194556?feed_filter=/cm/2016-09-02/971326.html
http://ddzan.net/e/space/?userid=194557?feed_filter=/iz/2016-09-02/861509.html
http://ddzan.net/e/space/?userid=194558?feed_filter=/fh/2016-09-02/805697.html
http://ddzan.net/e/space/?userid=194559?feed_filter=/sy/2016-09-02/879654.html
http://ddzan.net/e/space/?userid=194560?feed_filter=/ve/2016-09-02/703249.html
http://ddzan.net/e/space/?userid=194561?feed_filter=/ju/2016-09-02/157843.html
http://ddzan.net/e/space/?userid=194562?feed_filter=/rp/2016-09-02/104827.html
http://ddzan.net/e/space/?userid=194563?feed_filter=/ka/2016-09-02/108492.html
http://ddzan.net/e/space/?userid=194564?feed_filter=/rh/2016-09-02/915734.html
http://ddzan.net/e/space/?userid=194565?feed_filter=/se/2016-09-02/314765.html
http://ddzan.net/e/space/?userid=194566?feed_filter=/sx/2016-09-02/680395.html
http://ddzan.net/e/space/?userid=194567?feed_filter=/dz/2016-09-02/695182.html
http://ddzan.net/e/space/?userid=194568?feed_filter=/nc/2016-09-02/192438.html
http://ddzan.net/e/space/?userid=194569?feed_filter=/jg/2016-09-02/684592.html
http://ddzan.net/e/space/?userid=194570?feed_filter=/ud/2016-09-02/630875.html
http://ddzan.net/e/space/?userid=194571?feed_filter=/eh/2016-09-02/379261.html
http://ddzan.net/e/space/?userid=194572?feed_filter=/eg/2016-09-02/276813.html
http://ddzan.net/e/space/?userid=194573?feed_filter=/xb/2016-09-02/063157.html
http://ddzan.net/e/space/?userid=194574?feed_filter=/id/2016-09-02/260718.html
http://ddzan.net/e/space/?userid=194575?feed_filter=/cj/2016-09-02/196802.html
http://ddzan.net/e/space/?userid=194576?feed_filter=/su/2016-09-02/190527.html
http://ddzan.net/e/space/?userid=194577?feed_filter=/pn/2016-09-02/859371.html
http://ddzan.net/e/space/?userid=194578?feed_filter=/gd/2016-09-02/706193.html
http://ddzan.net/e/space/?userid=194579?feed_filter=/pu/2016-09-02/896031.html
http://ddzan.net/e/space/?userid=194580?feed_filter=/mx/2016-09-02/652031.html
http://ddzan.net/e/space/?userid=194581?feed_filter=/qv/2016-09-02/162753.html
http://ddzan.net/e/space/?userid=194582?feed_filter=/ez/2016-09-02/806139.html
http://ddzan.net/e/space/?userid=194583?feed_filter=/gf/2016-09-02/157642.html
http://ddzan.net/e/space/?userid=194584?feed_filter=/rb/2016-09-02/923471.html
http://ddzan.net/e/space/?userid=194585?feed_filter=/uz/2016-09-02/471386.html
http://ddzan.net/e/space/?userid=194586?feed_filter=/mk/2016-09-02/806415.html
http://ddzan.net/e/space/?userid=194587?feed_filter=/cq/2016-09-02/380962.html
http://ddzan.net/e/space/?userid=194588?feed_filter=/ef/2016-09-02/935706.html
http://ddzan.net/e/space/?userid=194589?feed_filter=/kb/2016-09-02/318926.html
http://ddzan.net/e/space/?userid=194590?feed_filter=/av/2016-09-02/294756.html
http://ddzan.net/e/space/?userid=194591?feed_filter=/ad/2016-09-02/756932.html
http://ddzan.net/e/space/?userid=194592?feed_filter=/vm/2016-09-02/081376.html
http://ddzan.net/e/space/?userid=194593?feed_filter=/fc/2016-09-02/340561.html
http://ddzan.net/e/space/?userid=194594?feed_filter=/bf/2016-09-02/854260.html
http://ddzan.net/e/space/?userid=194595?feed_filter=/bj/2016-09-02/850961.html
http://ddzan.net/e/space/?userid=194596?feed_filter=/hj/2016-09-02/143985.html
http://ddzan.net/e/space/?userid=194597?feed_filter=/rw/2016-09-02/702394.html
http://ddzan.net/e/space/?userid=194598?feed_filter=/al/2016-09-02/086459.html
http://ddzan.net/e/space/?userid=194599?feed_filter=/nk/2016-09-02/158073.html
http://ddzan.net/e/space/?userid=194600?feed_filter=/st/2016-09-02/089743.html
http://ddzan.net/e/space/?userid=194601?feed_filter=/od/2016-09-02/874052.html
http://ddzan.net/e/space/?userid=194602?feed_filter=/bw/2016-09-02/279483.html
http://ddzan.net/e/space/?userid=194603?feed_filter=/fq/2016-09-02/958340.html
http://ddzan.net/e/space/?userid=194604?feed_filter=/gp/2016-09-02/289537.html
http://ddzan.net/e/space/?userid=194605?feed_filter=/iu/2016-09-02/376915.html
http://ddzan.net/e/space/?userid=194606?feed_filter=/bf/2016-09-02/950264.html
http://ddzan.net/e/space/?userid=194607?feed_filter=/bg/2016-09-02/642170.html
http://ddzan.net/e/space/?userid=194608?feed_filter=/km/2016-09-02/205384.html
http://ddzan.net/e/space/?userid=194609?feed_filter=/ia/2016-09-02/041239.html
http://ddzan.net/e/space/?userid=194610?feed_filter=/ry/2016-09-02/174063.html
http://ddzan.net/e/space/?userid=194611?feed_filter=/xb/2016-09-02/561049.html
http://ddzan.net/e/space/?userid=194612?feed_filter=/cb/2016-09-02/684971.html
http://ddzan.net/e/space/?userid=194613?feed_filter=/mc/2016-09-02/980657.html
http://ddzan.net/e/space/?userid=194614?feed_filter=/tw/2016-09-02/879465.html
http://ddzan.net/e/space/?userid=194615?feed_filter=/pk/2016-09-02/540286.html
http://ddzan.net/e/space/?userid=194616?feed_filter=/hm/2016-09-02/804965.html
http://ddzan.net/e/space/?userid=194617?feed_filter=/xp/2016-09-02/235490.html
http://ddzan.net/e/space/?userid=194618?feed_filter=/uq/2016-09-02/413856.html
http://ddzan.net/e/space/?userid=194619?feed_filter=/an/2016-09-02/127369.html
http://ddzan.net/e/space/?userid=194620?feed_filter=/zw/2016-09-02/961724.html
http://ddzan.net/e/space/?userid=194621?feed_filter=/we/2016-09-02/078419.html
http://ddzan.net/e/space/?userid=194622?feed_filter=/vq/2016-09-02/038451.html
http://ddzan.net/e/space/?userid=194623?feed_filter=/ma/2016-09-02/219537.html
http://ddzan.net/e/space/?userid=194624?feed_filter=/cd/2016-09-02/750938.html
http://ddzan.net/e/space/?userid=194625?feed_filter=/fl/2016-09-02/036549.html
http://ddzan.net/e/space/?userid=194626?feed_filter=/vq/2016-09-02/021896.html
http://ddzan.net/e/space/?userid=194627?feed_filter=/ny/2016-09-02/219370.html
http://ddzan.net/e/space/?userid=194628?feed_filter=/do/2016-09-02/860312.html
http://ddzan.net/e/space/?userid=194629?feed_filter=/wz/2016-09-02/589142.html
http://ddzan.net/e/space/?userid=194630?feed_filter=/bq/2016-09-02/629487.html
http://ddzan.net/e/space/?userid=194631?feed_filter=/pk/2016-09-02/961584.html
http://ddzan.net/e/space/?userid=194632?feed_filter=/dr/2016-09-02/146732.html
http://ddzan.net/e/space/?userid=194633?feed_filter=/eo/2016-09-02/318709.html
http://ddzan.net/e/space/?userid=194634?feed_filter=/af/2016-09-02/834957.html
http://ddzan.net/e/space/?userid=194635?feed_filter=/by/2016-09-02/021859.html
http://ddzan.net/e/space/?userid=194636?feed_filter=/fm/2016-09-02/180562.html
http://ddzan.net/e/space/?userid=194637?feed_filter=/xc/2016-09-02/475061.html
http://ddzan.net/e/space/?userid=194638?feed_filter=/ib/2016-09-02/134850.html
http://ddzan.net/e/space/?userid=194639?feed_filter=/hn/2016-09-02/035794.html
http://ddzan.net/e/space/?userid=194640?feed_filter=/nd/2016-09-02/415782.html
http://ddzan.net/e/space/?userid=194641?feed_filter=/bs/2016-09-02/718045.html
http://ddzan.net/e/space/?userid=194642?feed_filter=/ve/2016-09-02/780965.html
http://ddzan.net/e/space/?userid=194643?feed_filter=/ty/2016-09-02/749510.html
http://ddzan.net/e/space/?userid=194644?feed_filter=/gj/2016-09-02/492738.html
http://ddzan.net/e/space/?userid=194645?feed_filter=/pr/2016-09-02/310785.html
http://ddzan.net/e/space/?userid=194646?feed_filter=/fz/2016-09-02/245196.html
http://ddzan.net/e/space/?userid=194647?feed_filter=/lp/2016-09-02/751486.html
http://ddzan.net/e/space/?userid=194648?feed_filter=/qc/2016-09-02/510674.html
http://ddzan.net/e/space/?userid=194649?feed_filter=/hr/2016-09-02/280416.html
http://ddzan.net/e/space/?userid=194650?feed_filter=/qo/2016-09-02/607528.html
http://ddzan.net/e/space/?userid=194651?feed_filter=/cj/2016-09-02/129653.html
http://ddzan.net/e/space/?userid=194652?feed_filter=/de/2016-09-02/967318.html
http://ddzan.net/e/space/?userid=194653?feed_filter=/no/2016-09-02/473618.html
http://ddzan.net/e/space/?userid=194654?feed_filter=/an/2016-09-02/675238.html
http://ddzan.net/e/space/?userid=194655?feed_filter=/ia/2016-09-02/790438.html
http://ddzan.net/e/space/?userid=194656?feed_filter=/eo/2016-09-02/678052.html
http://ddzan.net/e/space/?userid=194657?feed_filter=/ic/2016-09-02/804529.html
http://ddzan.net/e/space/?userid=194658?feed_filter=/hr/2016-09-02/057318.html
http://ddzan.net/e/space/?userid=194659?feed_filter=/cz/2016-09-02/463709.html
http://ddzan.net/e/space/?userid=194660?feed_filter=/zm/2016-09-02/875906.html
http://ddzan.net/e/space/?userid=194661?feed_filter=/uy/2016-09-02/529806.html
http://ddzan.net/e/space/?userid=194662?feed_filter=/qy/2016-09-02/731568.html
http://ddzan.net/e/space/?userid=194663?feed_filter=/od/2016-09-02/068194.html
http://ddzan.net/e/space/?userid=194664?feed_filter=/vh/2016-09-02/529680.html
http://ddzan.net/e/space/?userid=194665?feed_filter=/hn/2016-09-02/835170.html
http://ddzan.net/e/space/?userid=194666?feed_filter=/us/2016-09-02/590728.html
http://ddzan.net/e/space/?userid=194667?feed_filter=/rt/2016-09-02/618370.html
http://ddzan.net/e/space/?userid=194668?feed_filter=/fj/2016-09-02/267130.html
http://ddzan.net/e/space/?userid=194669?feed_filter=/zp/2016-09-02/390165.html
http://ddzan.net/e/space/?userid=194670?feed_filter=/ql/2016-09-02/176934.html
http://ddzan.net/e/space/?userid=194671?feed_filter=/ah/2016-09-02/162487.html
http://ddzan.net/e/space/?userid=194672?feed_filter=/st/2016-09-02/136709.html
http://ddzan.net/e/space/?userid=194673?feed_filter=/wo/2016-09-02/579614.html
http://ddzan.net/e/space/?userid=194674?feed_filter=/xz/2016-09-02/640312.html
http://ddzan.net/e/space/?userid=194675?feed_filter=/qx/2016-09-02/081679.html
http://ddzan.net/e/space/?userid=194676?feed_filter=/lq/2016-09-02/529083.html
http://ddzan.net/e/space/?userid=194677?feed_filter=/fl/2016-09-02/732164.html
http://ddzan.net/e/space/?userid=194678?feed_filter=/ya/2016-09-02/849573.html
http://ddzan.net/e/space/?userid=194679?feed_filter=/hk/2016-09-02/154062.html
http://ddzan.net/e/space/?userid=194680?feed_filter=/qt/2016-09-02/501723.html
http://ddzan.net/e/space/?userid=194681?feed_filter=/en/2016-09-02/842365.html
http://ddzan.net/e/space/?userid=194682?feed_filter=/ph/2016-09-02/750619.html
http://ddzan.net/e/space/?userid=194683?feed_filter=/lf/2016-09-02/804273.html
http://ddzan.net/e/space/?userid=194684?feed_filter=/kp/2016-09-02/540936.html
http://ddzan.net/e/space/?userid=194685?feed_filter=/mo/2016-09-02/491036.html
http://ddzan.net/e/space/?userid=194686?feed_filter=/li/2016-09-02/631840.html
http://ddzan.net/e/space/?userid=194687?feed_filter=/oq/2016-09-02/865039.html
http://ddzan.net/e/space/?userid=194688?feed_filter=/ab/2016-09-02/497613.html
http://ddzan.net/e/space/?userid=194689?feed_filter=/ga/2016-09-02/958246.html
http://ddzan.net/e/space/?userid=194690?feed_filter=/yb/2016-09-02/051243.html
http://ddzan.net/e/space/?userid=194691?feed_filter=/bu/2016-09-02/418025.html
http://ddzan.net/e/space/?userid=194692?feed_filter=/cu/2016-09-02/863714.html
http://ddzan.net/e/space/?userid=194693?feed_filter=/sz/2016-09-02/897523.html
http://ddzan.net/e/space/?userid=194694?feed_filter=/wz/2016-09-02/938026.html
http://ddzan.net/e/space/?userid=194695?feed_filter=/zh/2016-09-02/320651.html
http://ddzan.net/e/space/?userid=194696?feed_filter=/kf/2016-09-02/375084.html
http://ddzan.net/e/space/?userid=194697?feed_filter=/nk/2016-09-02/753298.html
http://ddzan.net/e/space/?userid=194698?feed_filter=/hw/2016-09-02/852914.html
http://ddzan.net/e/space/?userid=194699?feed_filter=/vp/2016-09-02/126348.html
http://ddzan.net/e/space/?userid=194700?feed_filter=/si/2016-09-02/728154.html
http://ddzan.net/e/space/?userid=194701?feed_filter=/tv/2016-09-02/682475.html
http://ddzan.net/e/space/?userid=194702?feed_filter=/wa/2016-09-02/359768.html
http://ddzan.net/e/space/?userid=194703?feed_filter=/ne/2016-09-02/148975.html
http://ddzan.net/e/space/?userid=194704?feed_filter=/su/2016-09-02/906514.html
http://ddzan.net/e/space/?userid=194705?feed_filter=/ko/2016-09-02/207681.html
http://ddzan.net/e/space/?userid=194706?feed_filter=/pv/2016-09-02/918342.html
http://ddzan.net/e/space/?userid=194707?feed_filter=/hj/2016-09-02/325869.html
http://ddzan.net/e/space/?userid=194708?feed_filter=/pm/2016-09-02/576931.html
http://ddzan.net/e/space/?userid=194709?feed_filter=/nk/2016-09-02/285139.html
http://ddzan.net/e/space/?userid=194710?feed_filter=/bw/2016-09-02/405382.html
http://ddzan.net/e/space/?userid=194711?feed_filter=/nb/2016-09-02/576803.html
http://ddzan.net/e/space/?userid=194712?feed_filter=/gb/2016-09-02/235140.html
http://ddzan.net/e/space/?userid=194713?feed_filter=/rn/2016-09-02/846152.html
http://ddzan.net/e/space/?userid=194714?feed_filter=/fq/2016-09-02/354728.html
http://ddzan.net/e/space/?userid=194715?feed_filter=/up/2016-09-02/982076.html
http://ddzan.net/e/space/?userid=194716?feed_filter=/tp/2016-09-02/843625.html
http://ddzan.net/e/space/?userid=194717?feed_filter=/tn/2016-09-02/169285.html
http://ddzan.net/e/space/?userid=194718?feed_filter=/pu/2016-09-02/238906.html
http://ddzan.net/e/space/?userid=194719?feed_filter=/kp/2016-09-02/916025.html
http://ddzan.net/e/space/?userid=194720?feed_filter=/qz/2016-09-02/936845.html
http://ddzan.net/e/space/?userid=194721?feed_filter=/ig/2016-09-02/063487.html
http://ddzan.net/e/space/?userid=194722?feed_filter=/jl/2016-09-02/915830.html
http://ddzan.net/e/space/?userid=194723?feed_filter=/ul/2016-09-02/784635.html
http://ddzan.net/e/space/?userid=194724?feed_filter=/os/2016-09-02/145206.html
http://ddzan.net/e/space/?userid=194725?feed_filter=/qw/2016-09-02/617834.html
http://ddzan.net/e/space/?userid=194726?feed_filter=/ue/2016-09-02/273198.html
http://ddzan.net/e/space/?userid=194727?feed_filter=/ar/2016-09-02/731485.html
http://ddzan.net/e/space/?userid=194728?feed_filter=/uz/2016-09-02/107634.html
http://ddzan.net/e/space/?userid=194729?feed_filter=/gn/2016-09-02/921763.html
http://ddzan.net/e/space/?userid=194730?feed_filter=/hj/2016-09-02/053642.html
http://ddzan.net/e/space/?userid=194731?feed_filter=/fd/2016-09-02/537108.html
http://ddzan.net/e/space/?userid=194732?feed_filter=/dm/2016-09-02/139052.html
http://ddzan.net/e/space/?userid=194733?feed_filter=/ue/2016-09-02/019478.html
http://ddzan.net/e/space/?userid=194734?feed_filter=/da/2016-09-02/974018.html
http://ddzan.net/e/space/?userid=194735?feed_filter=/vw/2016-09-02/402187.html
http://ddzan.net/e/space/?userid=194736?feed_filter=/or/2016-09-02/783150.html
http://ddzan.net/e/space/?userid=194737?feed_filter=/ur/2016-09-02/983510.html
http://ddzan.net/e/space/?userid=194738?feed_filter=/zl/2016-09-02/348921.html
http://ddzan.net/e/space/?userid=194739?feed_filter=/rh/2016-09-02/527489.html
http://ddzan.net/e/space/?userid=194740?feed_filter=/yb/2016-09-02/930245.html
http://ddzan.net/e/space/?userid=194741?feed_filter=/xh/2016-09-02/076192.html
http://ddzan.net/e/space/?userid=194742?feed_filter=/cq/2016-09-02/502317.html
http://ddzan.net/e/space/?userid=194743?feed_filter=/al/2016-09-02/403675.html
http://ddzan.net/e/space/?userid=194744?feed_filter=/be/2016-09-02/534620.html
http://ddzan.net/e/space/?userid=194745?feed_filter=/is/2016-09-02/607935.html
http://ddzan.net/e/space/?userid=194746?feed_filter=/mv/2016-09-02/536821.html
http://ddzan.net/e/space/?userid=194747?feed_filter=/ot/2016-09-02/937420.html
http://ddzan.net/e/space/?userid=194748?feed_filter=/wx/2016-09-02/835120.html
http://ddzan.net/e/space/?userid=194749?feed_filter=/tb/2016-09-02/619075.html
http://ddzan.net/e/space/?userid=194750?feed_filter=/wa/2016-09-02/923567.html
http://ddzan.net/e/space/?userid=194751?feed_filter=/tk/2016-09-02/427630.html
http://ddzan.net/e/space/?userid=194752?feed_filter=/zu/2016-09-02/762819.html
http://ddzan.net/e/space/?userid=194753?feed_filter=/wt/2016-09-02/189760.html
http://ddzan.net/e/space/?userid=194754?feed_filter=/yq/2016-09-02/612759.html
http://ddzan.net/e/space/?userid=194755?feed_filter=/zt/2016-09-02/579643.html
http://ddzan.net/e/space/?userid=194756?feed_filter=/fy/2016-09-02/381756.html
http://ddzan.net/e/space/?userid=194757?feed_filter=/rk/2016-09-02/158740.html
http://ddzan.net/e/space/?userid=194758?feed_filter=/sd/2016-09-02/254169.html
http://ddzan.net/e/space/?userid=194759?feed_filter=/ou/2016-09-02/591473.html
http://ddzan.net/e/space/?userid=194760?feed_filter=/kl/2016-09-02/069823.html
http://ddzan.net/e/space/?userid=194761?feed_filter=/au/2016-09-02/502164.html
http://ddzan.net/e/space/?userid=194762?feed_filter=/hf/2016-09-02/326581.html
http://ddzan.net/e/space/?userid=194763?feed_filter=/jw/2016-09-02/916587.html
http://ddzan.net/e/space/?userid=194764?feed_filter=/wm/2016-09-02/963487.html
http://ddzan.net/e/space/?userid=194765?feed_filter=/cd/2016-09-02/496051.html
http://ddzan.net/e/space/?userid=194766?feed_filter=/qp/2016-09-02/539087.html
http://ddzan.net/e/space/?userid=194767?feed_filter=/yt/2016-09-02/452761.html
http://ddzan.net/e/space/?userid=194768?feed_filter=/mr/2016-09-02/547619.html
http://ddzan.net/e/space/?userid=194769?feed_filter=/ir/2016-09-02/820437.html
http://ddzan.net/e/space/?userid=194770?feed_filter=/cd/2016-09-02/720481.html
http://ddzan.net/e/space/?userid=194771?feed_filter=/nz/2016-09-02/538971.html
http://ddzan.net/e/space/?userid=194772?feed_filter=/bj/2016-09-02/627431.html
http://ddzan.net/e/space/?userid=194773?feed_filter=/nx/2016-09-02/165207.html
http://ddzan.net/e/space/?userid=194774?feed_filter=/rd/2016-09-02/015326.html
http://ddzan.net/e/space/?userid=194775?feed_filter=/ge/2016-09-02/847930.html
http://ddzan.net/e/space/?userid=194776?feed_filter=/fy/2016-09-02/720315.html
http://ddzan.net/e/space/?userid=194777?feed_filter=/hf/2016-09-02/975062.html
http://ddzan.net/e/space/?userid=194778?feed_filter=/dq/2016-09-02/430695.html
http://ddzan.net/e/space/?userid=194779?feed_filter=/md/2016-09-02/756381.html
http://ddzan.net/e/space/?userid=194780?feed_filter=/ko/2016-09-02/804296.html
http://ddzan.net/e/space/?userid=194781?feed_filter=/ok/2016-09-02/796823.html
http://ddzan.net/e/space/?userid=194782?feed_filter=/iq/2016-09-02/197520.html
http://ddzan.net/e/space/?userid=194783?feed_filter=/mc/2016-09-02/958167.html
http://ddzan.net/e/space/?userid=194784?feed_filter=/wm/2016-09-02/297305.html
http://ddzan.net/e/space/?userid=194785?feed_filter=/ms/2016-09-02/620354.html
http://ddzan.net/e/space/?userid=194786?feed_filter=/sk/2016-09-02/715896.html
http://ddzan.net/e/space/?userid=194787?feed_filter=/bj/2016-09-02/947128.html
http://ddzan.net/e/space/?userid=194788?feed_filter=/ib/2016-09-02/408531.html
http://ddzan.net/e/space/?userid=194789?feed_filter=/ip/2016-09-02/357810.html
http://ddzan.net/e/space/?userid=194790?feed_filter=/qj/2016-09-02/748960.html
http://ddzan.net/e/space/?userid=194791?feed_filter=/jq/2016-09-02/834250.html
http://ddzan.net/e/space/?userid=194792?feed_filter=/uo/2016-09-02/982537.html
http://ddzan.net/e/space/?userid=194793?feed_filter=/vm/2016-09-02/214837.html
http://ddzan.net/e/space/?userid=194794?feed_filter=/ma/2016-09-02/249135.html
http://ddzan.net/e/space/?userid=194795?feed_filter=/nz/2016-09-02/321568.html
http://ddzan.net/e/space/?userid=194796?feed_filter=/am/2016-09-02/718304.html
http://ddzan.net/e/space/?userid=194797?feed_filter=/kn/2016-09-02/401359.html
http://ddzan.net/e/space/?userid=194798?feed_filter=/sj/2016-09-02/817254.html
http://ddzan.net/e/space/?userid=194799?feed_filter=/db/2016-09-02/395264.html
http://ddzan.net/e/space/?userid=194800?feed_filter=/xy/2016-09-02/603415.html
http://ddzan.net/e/space/?userid=194801?feed_filter=/up/2016-09-02/016395.html
http://ddzan.net/e/space/?userid=194802?feed_filter=/ik/2016-09-02/597126.html
http://ddzan.net/e/space/?userid=194803?feed_filter=/mh/2016-09-02/159837.html
http://ddzan.net/e/space/?userid=194804?feed_filter=/xt/2016-09-02/803219.html
http://ddzan.net/e/space/?userid=194805?feed_filter=/se/2016-09-02/817350.html
http://ddzan.net/e/space/?userid=194806?feed_filter=/qe/2016-09-02/107946.html
http://ddzan.net/e/space/?userid=194807?feed_filter=/yb/2016-09-02/549318.html
http://ddzan.net/e/space/?userid=194808?feed_filter=/zl/2016-09-02/921603.html
http://ddzan.net/e/space/?userid=194809?feed_filter=/bn/2016-09-02/054816.html
http://ddzan.net/e/space/?userid=194810?feed_filter=/lq/2016-09-02/087961.html
http://ddzan.net/e/space/?userid=194811?feed_filter=/qh/2016-09-02/475016.html
http://ddzan.net/e/space/?userid=194812?feed_filter=/pv/2016-09-02/549687.html
http://ddzan.net/e/space/?userid=194813?feed_filter=/ka/2016-09-02/046879.html
http://ddzan.net/e/space/?userid=194814?feed_filter=/gx/2016-09-02/146723.html
http://ddzan.net/e/space/?userid=194815?feed_filter=/eg/2016-09-02/729843.html
http://ddzan.net/e/space/?userid=194816?feed_filter=/cw/2016-09-02/502961.html
http://ddzan.net/e/space/?userid=194817?feed_filter=/ze/2016-09-02/130675.html
http://ddzan.net/e/space/?userid=194818?feed_filter=/yt/2016-09-02/523807.html
http://ddzan.net/e/space/?userid=194819?feed_filter=/ga/2016-09-02/108426.html
http://ddzan.net/e/space/?userid=194820?feed_filter=/jk/2016-09-02/530847.html
http://ddzan.net/e/space/?userid=194821?feed_filter=/wj/2016-09-02/561489.html
http://ddzan.net/e/space/?userid=194822?feed_filter=/je/2016-09-02/415267.html
http://ddzan.net/e/space/?userid=194823?feed_filter=/qp/2016-09-02/829750.html
http://ddzan.net/e/space/?userid=194824?feed_filter=/gx/2016-09-02/502691.html
http://ddzan.net/e/space/?userid=194825?feed_filter=/ir/2016-09-02/826047.html
http://ddzan.net/e/space/?userid=194826?feed_filter=/zg/2016-09-02/473562.html
http://ddzan.net/e/space/?userid=194827?feed_filter=/qj/2016-09-02/758463.html
http://ddzan.net/e/space/?userid=194828?feed_filter=/xf/2016-09-02/570698.html
http://ddzan.net/e/space/?userid=194829?feed_filter=/pu/2016-09-02/065823.html
http://ddzan.net/e/space/?userid=194830?feed_filter=/ut/2016-09-02/247689.html
http://ddzan.net/e/space/?userid=194831?feed_filter=/ud/2016-09-02/135789.html
http://ddzan.net/e/space/?userid=194832?feed_filter=/us/2016-09-02/520179.html
http://ddzan.net/e/space/?userid=194833?feed_filter=/hu/2016-09-02/746821.html
http://ddzan.net/e/space/?userid=194834?feed_filter=/ar/2016-09-02/136084.html
http://ddzan.net/e/space/?userid=194835?feed_filter=/xv/2016-09-02/168754.html
http://ddzan.net/e/space/?userid=194836?feed_filter=/ba/2016-09-02/596308.html
http://ddzan.net/e/space/?userid=194837?feed_filter=/wo/2016-09-02/358102.html
http://ddzan.net/e/space/?userid=194838?feed_filter=/sv/2016-09-02/972054.html
http://ddzan.net/e/space/?userid=194839?feed_filter=/ql/2016-09-02/568031.html
http://ddzan.net/e/space/?userid=194840?feed_filter=/is/2016-09-02/503917.html
http://ddzan.net/e/space/?userid=194841?feed_filter=/bp/2016-09-02/562387.html
http://ddzan.net/e/space/?userid=194842?feed_filter=/yz/2016-09-02/214596.html
http://ddzan.net/e/space/?userid=194843?feed_filter=/ia/2016-09-02/724965.html
http://ddzan.net/e/space/?userid=194844?feed_filter=/sd/2016-09-02/528036.html
http://ddzan.net/e/space/?userid=194845?feed_filter=/fv/2016-09-02/861570.html
http://ddzan.net/e/space/?userid=194846?feed_filter=/fg/2016-09-02/246759.html
http://ddzan.net/e/space/?userid=194847?feed_filter=/iy/2016-09-02/507439.html
http://ddzan.net/e/space/?userid=194848?feed_filter=/ay/2016-09-02/390854.html
http://ddzan.net/e/space/?userid=194849?feed_filter=/yn/2016-09-02/051498.html
http://ddzan.net/e/space/?userid=194850?feed_filter=/tg/2016-09-02/176245.html
http://ddzan.net/e/space/?userid=194851?feed_filter=/wo/2016-09-02/564129.html
http://ddzan.net/e/space/?userid=194852?feed_filter=/lm/2016-09-02/456873.html
http://ddzan.net/e/space/?userid=194853?feed_filter=/lt/2016-09-02/514967.html
http://ddzan.net/e/space/?userid=194854?feed_filter=/lc/2016-09-02/012387.html
http://ddzan.net/e/space/?userid=194855?feed_filter=/md/2016-09-02/902486.html
http://ddzan.net/e/space/?userid=194856?feed_filter=/xj/2016-09-02/938210.html
http://ddzan.net/e/space/?userid=194857?feed_filter=/qw/2016-09-02/150284.html
http://ddzan.net/e/space/?userid=194858?feed_filter=/qe/2016-09-02/046297.html
http://ddzan.net/e/space/?userid=194859?feed_filter=/so/2016-09-02/473158.html
http://ddzan.net/e/space/?userid=194860?feed_filter=/sh/2016-09-02/956438.html
http://ddzan.net/e/space/?userid=194861?feed_filter=/je/2016-09-02/812756.html
http://ddzan.net/e/space/?userid=194862?feed_filter=/xu/2016-09-02/928615.html
http://ddzan.net/e/space/?userid=194863?feed_filter=/ab/2016-09-02/634085.html
http://ddzan.net/e/space/?userid=194864?feed_filter=/gz/2016-09-02/675234.html
http://ddzan.net/e/space/?userid=194865?feed_filter=/ab/2016-09-02/479215.html
http://ddzan.net/e/space/?userid=194866?feed_filter=/st/2016-09-02/135078.html
http://ddzan.net/e/space/?userid=194867?feed_filter=/jv/2016-09-02/918034.html
http://ddzan.net/e/space/?userid=194868?feed_filter=/lp/2016-09-02/839614.html
http://ddzan.net/e/space/?userid=194869?feed_filter=/km/2016-09-02/649137.html
http://ddzan.net/e/space/?userid=194870?feed_filter=/ka/2016-09-02/426081.html
http://ddzan.net/e/space/?userid=194871?feed_filter=/ln/2016-09-02/958174.html
http://ddzan.net/e/space/?userid=194872?feed_filter=/sf/2016-09-02/370249.html
http://ddzan.net/e/space/?userid=194873?feed_filter=/ad/2016-09-02/801953.html
http://ddzan.net/e/space/?userid=194874?feed_filter=/gy/2016-09-02/712546.html
http://ddzan.net/e/space/?userid=194875?feed_filter=/bm/2016-09-02/590843.html
http://ddzan.net/e/space/?userid=194876?feed_filter=/ro/2016-09-02/023657.html
http://ddzan.net/e/space/?userid=194877?feed_filter=/iy/2016-09-02/680491.html
http://ddzan.net/e/space/?userid=194878?feed_filter=/gs/2016-09-02/751940.html
http://ddzan.net/e/space/?userid=194879?feed_filter=/cr/2016-09-02/510482.html
http://ddzan.net/e/space/?userid=194880?feed_filter=/dl/2016-09-02/824591.html
http://ddzan.net/e/space/?userid=194881?feed_filter=/vn/2016-09-02/206895.html
http://ddzan.net/e/space/?userid=194882?feed_filter=/zy/2016-09-02/954602.html
http://ddzan.net/e/space/?userid=194883?feed_filter=/ml/2016-09-02/102549.html
http://ddzan.net/e/space/?userid=194884?feed_filter=/sg/2016-09-02/290586.html
http://ddzan.net/e/space/?userid=194885?feed_filter=/mq/2016-09-02/812064.html
http://ddzan.net/e/space/?userid=194886?feed_filter=/em/2016-09-02/709152.html
http://ddzan.net/e/space/?userid=194887?feed_filter=/yp/2016-09-02/049237.html
http://ddzan.net/e/space/?userid=194888?feed_filter=/zp/2016-09-02/845769.html
http://ddzan.net/e/space/?userid=194889?feed_filter=/cq/2016-09-02/280475.html
http://ddzan.net/e/space/?userid=194890?feed_filter=/od/2016-09-02/890547.html
http://ddzan.net/e/space/?userid=194891?feed_filter=/yn/2016-09-02/419685.html
http://ddzan.net/e/space/?userid=194892?feed_filter=/zh/2016-09-02/476213.html
http://ddzan.net/e/space/?userid=194893?feed_filter=/ao/2016-09-02/795436.html
http://ddzan.net/e/space/?userid=194894?feed_filter=/il/2016-09-02/846915.html
http://ddzan.net/e/space/?userid=194895?feed_filter=/qx/2016-09-02/293705.html
http://ddzan.net/e/space/?userid=194896?feed_filter=/rg/2016-09-02/319842.html
http://ddzan.net/e/space/?userid=194897?feed_filter=/fr/2016-09-02/792541.html
http://ddzan.net/e/space/?userid=194898?feed_filter=/qf/2016-09-02/830165.html
http://ddzan.net/e/space/?userid=194899?feed_filter=/ir/2016-09-02/418206.html
http://ddzan.net/e/space/?userid=194900?feed_filter=/ya/2016-09-02/518492.html
http://ddzan.net/e/space/?userid=194901?feed_filter=/qy/2016-09-02/392065.html
http://ddzan.net/e/space/?userid=194902?feed_filter=/ta/2016-09-02/296430.html
http://ddzan.net/e/space/?userid=194903?feed_filter=/wn/2016-09-02/893016.html
http://ddzan.net/e/space/?userid=194904?feed_filter=/yb/2016-09-02/561940.html
http://ddzan.net/e/space/?userid=194905?feed_filter=/wl/2016-09-02/736950.html
http://ddzan.net/e/space/?userid=194906?feed_filter=/yg/2016-09-02/715023.html
http://ddzan.net/e/space/?userid=194907?feed_filter=/ug/2016-09-02/692873.html
http://ddzan.net/e/space/?userid=194908?feed_filter=/eo/2016-09-02/807693.html
http://ddzan.net/e/space/?userid=194909?feed_filter=/ix/2016-09-02/439076.html
http://ddzan.net/e/space/?userid=194910?feed_filter=/ug/2016-09-02/748123.html
http://ddzan.net/e/space/?userid=194911?feed_filter=/hs/2016-09-02/097825.html
http://ddzan.net/e/space/?userid=194912?feed_filter=/uy/2016-09-02/372148.html
http://ddzan.net/e/space/?userid=194913?feed_filter=/lp/2016-09-02/861904.html
http://ddzan.net/e/space/?userid=194914?feed_filter=/xr/2016-09-02/514230.html
http://ddzan.net/e/space/?userid=194915?feed_filter=/cr/2016-09-02/247658.html
http://ddzan.net/e/space/?userid=194916?feed_filter=/dp/2016-09-02/849750.html
http://ddzan.net/e/space/?userid=194917?feed_filter=/ky/2016-09-02/602178.html
http://ddzan.net/e/space/?userid=194918?feed_filter=/lg/2016-09-02/736948.html
http://ddzan.net/e/space/?userid=194919?feed_filter=/yn/2016-09-02/758249.html
http://ddzan.net/e/space/?userid=194920?feed_filter=/ym/2016-09-02/521874.html
http://ddzan.net/e/space/?userid=194921?feed_filter=/wb/2016-09-02/014568.html
http://ddzan.net/e/space/?userid=194922?feed_filter=/xm/2016-09-02/980631.html
http://ddzan.net/e/space/?userid=194923?feed_filter=/fv/2016-09-02/468192.html
http://ddzan.net/e/space/?userid=194924?feed_filter=/ti/2016-09-02/265013.html
http://ddzan.net/e/space/?userid=194925?feed_filter=/pb/2016-09-02/319250.html
http://ddzan.net/e/space/?userid=194926?feed_filter=/sc/2016-09-02/165480.html
http://ddzan.net/e/space/?userid=194927?feed_filter=/ue/2016-09-02/712604.html
http://ddzan.net/e/space/?userid=194928?feed_filter=/sp/2016-09-02/430629.html
http://ddzan.net/e/space/?userid=194929?feed_filter=/ym/2016-09-02/603752.html
http://ddzan.net/e/space/?userid=194930?feed_filter=/di/2016-09-02/836251.html
http://ddzan.net/e/space/?userid=194931?feed_filter=/zs/2016-09-02/580271.html
http://ddzan.net/e/space/?userid=194932?feed_filter=/rq/2016-09-02/049167.html
http://ddzan.net/e/space/?userid=194933?feed_filter=/fg/2016-09-02/163407.html
http://ddzan.net/e/space/?userid=194934?feed_filter=/my/2016-09-02/534179.html
http://ddzan.net/e/space/?userid=194935?feed_filter=/gw/2016-09-02/039582.html
http://ddzan.net/e/space/?userid=194936?feed_filter=/rf/2016-09-02/413769.html
http://ddzan.net/e/space/?userid=194937?feed_filter=/su/2016-09-02/305681.html
http://ddzan.net/e/space/?userid=194938?feed_filter=/qa/2016-09-02/692547.html
http://ddzan.net/e/space/?userid=194939?feed_filter=/qy/2016-09-02/475296.html
http://ddzan.net/e/space/?userid=194940?feed_filter=/gc/2016-09-02/641725.html
http://ddzan.net/e/space/?userid=194941?feed_filter=/ju/2016-09-02/624709.html
http://ddzan.net/e/space/?userid=194942?feed_filter=/ly/2016-09-02/480253.html
http://ddzan.net/e/space/?userid=194943?feed_filter=/ix/2016-09-02/362810.html
http://ddzan.net/e/space/?userid=194944?feed_filter=/cb/2016-09-02/350649.html
http://ddzan.net/e/space/?userid=194945?feed_filter=/ps/2016-09-02/219378.html
http://ddzan.net/e/space/?userid=194946?feed_filter=/qf/2016-09-02/021965.html
http://ddzan.net/e/space/?userid=194947?feed_filter=/xm/2016-09-02/206798.html
http://ddzan.net/e/space/?userid=194948?feed_filter=/ql/2016-09-02/493516.html
http://ddzan.net/e/space/?userid=194949?feed_filter=/ug/2016-09-02/897143.html
http://ddzan.net/e/space/?userid=194950?feed_filter=/mg/2016-09-02/437509.html
http://ddzan.net/e/space/?userid=194951?feed_filter=/hs/2016-09-02/659287.html
http://ddzan.net/e/space/?userid=194952?feed_filter=/hz/2016-09-02/428053.html
http://ddzan.net/e/space/?userid=194953?feed_filter=/ar/2016-09-02/160298.html
http://ddzan.net/e/space/?userid=194954?feed_filter=/gl/2016-09-02/863591.html
http://ddzan.net/e/space/?userid=194955?feed_filter=/va/2016-09-02/468902.html
http://ddzan.net/e/space/?userid=194956?feed_filter=/ni/2016-09-02/954601.html
http://ddzan.net/e/space/?userid=194957?feed_filter=/cq/2016-09-02/698235.html
http://ddzan.net/e/space/?userid=194958?feed_filter=/yu/2016-09-02/405289.html
http://ddzan.net/e/space/?userid=194959?feed_filter=/sj/2016-09-02/823596.html
http://ddzan.net/e/space/?userid=194960?feed_filter=/cl/2016-09-02/297130.html
http://ddzan.net/e/space/?userid=194961?feed_filter=/jy/2016-09-02/693570.html
http://ddzan.net/e/space/?userid=194962?feed_filter=/oa/2016-09-02/316805.html
http://ddzan.net/e/space/?userid=194963?feed_filter=/gk/2016-09-02/573612.html
http://ddzan.net/e/space/?userid=194964?feed_filter=/ec/2016-09-02/609513.html
http://ddzan.net/e/space/?userid=194965?feed_filter=/vb/2016-09-02/819206.html
http://ddzan.net/e/space/?userid=194966?feed_filter=/to/2016-09-02/642853.html
http://ddzan.net/e/space/?userid=194967?feed_filter=/nu/2016-09-02/162987.html
http://ddzan.net/e/space/?userid=194968?feed_filter=/xm/2016-09-02/167905.html
http://ddzan.net/e/space/?userid=194969?feed_filter=/zn/2016-09-02/637482.html
http://ddzan.net/e/space/?userid=194970?feed_filter=/fq/2016-09-02/943815.html
http://ddzan.net/e/space/?userid=194971?feed_filter=/ql/2016-09-02/938157.html
http://ddzan.net/e/space/?userid=194972?feed_filter=/iv/2016-09-02/613745.html
http://ddzan.net/e/space/?userid=194973?feed_filter=/yc/2016-09-02/379201.html
http://ddzan.net/e/space/?userid=194974?feed_filter=/bo/2016-09-02/692184.html
http://ddzan.net/e/space/?userid=194975?feed_filter=/tc/2016-09-02/970583.html
http://ddzan.net/e/space/?userid=194976?feed_filter=/yg/2016-09-02/593782.html
http://ddzan.net/e/space/?userid=194977?feed_filter=/lp/2016-09-02/079184.html
http://ddzan.net/e/space/?userid=194978?feed_filter=/bq/2016-09-02/601543.html
http://ddzan.net/e/space/?userid=194979?feed_filter=/ur/2016-09-02/829017.html
http://ddzan.net/e/space/?userid=194980?feed_filter=/cd/2016-09-02/580763.html
http://ddzan.net/e/space/?userid=194981?feed_filter=/mn/2016-09-02/194087.html
http://ddzan.net/e/space/?userid=194982?feed_filter=/ur/2016-09-02/530841.html
http://ddzan.net/e/space/?userid=194983?feed_filter=/kv/2016-09-02/304652.html
http://ddzan.net/e/space/?userid=194984?feed_filter=/te/2016-09-02/358746.html
http://ddzan.net/e/space/?userid=194985?feed_filter=/oq/2016-09-02/972164.html
http://ddzan.net/e/space/?userid=194986?feed_filter=/dk/2016-09-02/846739.html
http://ddzan.net/e/space/?userid=194987?feed_filter=/qa/2016-09-02/174925.html
http://ddzan.net/e/space/?userid=194988?feed_filter=/iq/2016-09-02/792568.html
http://ddzan.net/e/space/?userid=194989?feed_filter=/qw/2016-09-02/859410.html
http://ddzan.net/e/space/?userid=194990?feed_filter=/hr/2016-09-02/072385.html
http://ddzan.net/e/space/?userid=194991?feed_filter=/vi/2016-09-02/240869.html
http://ddzan.net/e/space/?userid=194992?feed_filter=/lr/2016-09-02/586204.html
http://ddzan.net/e/space/?userid=194993?feed_filter=/hl/2016-09-02/190574.html
http://ddzan.net/e/space/?userid=194994?feed_filter=/fv/2016-09-02/719435.html
http://ddzan.net/e/space/?userid=194995?feed_filter=/dy/2016-09-02/216758.html
http://ddzan.net/e/space/?userid=194996?feed_filter=/hf/2016-09-02/875439.html
http://ddzan.net/e/space/?userid=194997?feed_filter=/wq/2016-09-02/432905.html
http://ddzan.net/e/space/?userid=194998?feed_filter=/ml/2016-09-02/789506.html
http://ddzan.net/e/space/?userid=194999?feed_filter=/ny/2016-09-02/750429.html
http://ddzan.net/e/space/?userid=195000?feed_filter=/wd/2016-09-02/415903.html
http://ddzan.net/e/space/?userid=195001?feed_filter=/iq/2016-09-02/049825.html
http://ddzan.net/e/space/?userid=195002?feed_filter=/xw/2016-09-02/148265.html
http://ddzan.net/e/space/?userid=195003?feed_filter=/pi/2016-09-02/061832.html
http://ddzan.net/e/space/?userid=195004?feed_filter=/zd/2016-09-02/302586.html
http://ddzan.net/e/space/?userid=195005?feed_filter=/me/2016-09-02/904573.html
http://ddzan.net/e/space/?userid=195006?feed_filter=/wh/2016-09-02/517409.html
http://ddzan.net/e/space/?userid=195007?feed_filter=/yh/2016-09-02/523107.html
http://ddzan.net/e/space/?userid=195008?feed_filter=/bu/2016-09-02/874093.html
http://ddzan.net/e/space/?userid=195009?feed_filter=/dn/2016-09-02/723946.html
http://ddzan.net/e/space/?userid=195010?feed_filter=/vm/2016-09-02/517802.html
http://ddzan.net/e/space/?userid=195011?feed_filter=/ag/2016-09-02/463598.html
http://ddzan.net/e/space/?userid=195012?feed_filter=/es/2016-09-02/825041.html
http://ddzan.net/e/space/?userid=195013?feed_filter=/aj/2016-09-02/728953.html
http://ddzan.net/e/space/?userid=195014?feed_filter=/kf/2016-09-02/947018.html
http://ddzan.net/e/space/?userid=195015?feed_filter=/od/2016-09-02/163075.html
http://ddzan.net/e/space/?userid=195016?feed_filter=/qd/2016-09-02/037465.html
http://ddzan.net/e/space/?userid=195017?feed_filter=/qd/2016-09-02/061795.html
http://ddzan.net/e/space/?userid=195018?feed_filter=/ng/2016-09-02/123564.html
http://ddzan.net/e/space/?userid=195019?feed_filter=/vk/2016-09-02/271560.html
http://ddzan.net/e/space/?userid=195020?feed_filter=/iy/2016-09-02/283674.html
http://ddzan.net/e/space/?userid=195021?feed_filter=/jo/2016-09-02/723180.html
http://ddzan.net/e/space/?userid=195022?feed_filter=/zp/2016-09-02/438601.html
http://ddzan.net/e/space/?userid=195023?feed_filter=/dq/2016-09-02/294053.html
http://ddzan.net/e/space/?userid=195024?feed_filter=/lu/2016-09-02/430521.html
http://ddzan.net/e/space/?userid=195025?feed_filter=/ae/2016-09-02/941567.html
http://ddzan.net/e/space/?userid=195026?feed_filter=/ar/2016-09-02/501972.html
http://ddzan.net/e/space/?userid=195027?feed_filter=/fg/2016-09-02/734986.html
http://ddzan.net/e/space/?userid=195028?feed_filter=/lt/2016-09-02/540769.html
http://ddzan.net/e/space/?userid=195029?feed_filter=/qo/2016-09-02/865742.html
http://ddzan.net/e/space/?userid=195030?feed_filter=/vh/2016-09-02/064158.html
http://ddzan.net/e/space/?userid=195031?feed_filter=/yl/2016-09-02/890543.html
http://ddzan.net/e/space/?userid=195032?feed_filter=/dg/2016-09-02/504279.html
http://ddzan.net/e/space/?userid=195033?feed_filter=/wv/2016-09-02/157896.html
http://ddzan.net/e/space/?userid=195034?feed_filter=/vl/2016-09-02/287369.html
http://ddzan.net/e/space/?userid=195035?feed_filter=/lh/2016-09-02/745086.html
http://ddzan.net/e/space/?userid=195036?feed_filter=/ot/2016-09-02/649235.html
http://ddzan.net/e/space/?userid=195037?feed_filter=/pd/2016-09-02/371490.html
http://ddzan.net/e/space/?userid=195038?feed_filter=/eh/2016-09-02/819705.html
http://ddzan.net/e/space/?userid=195039?feed_filter=/hx/2016-09-02/764310.html
http://ddzan.net/e/space/?userid=195040?feed_filter=/hk/2016-09-02/265784.html
http://ddzan.net/e/space/?userid=195041?feed_filter=/xy/2016-09-02/658012.html
http://ddzan.net/e/space/?userid=195042?feed_filter=/gv/2016-09-02/310879.html
http://ddzan.net/e/space/?userid=195043?feed_filter=/he/2016-09-02/781496.html
http://ddzan.net/e/space/?userid=195044?feed_filter=/dn/2016-09-02/241860.html
http://ddzan.net/e/space/?userid=195045?feed_filter=/js/2016-09-02/941836.html
http://ddzan.net/e/space/?userid=195046?feed_filter=/wt/2016-09-02/948507.html
http://ddzan.net/e/space/?userid=195047?feed_filter=/yw/2016-09-02/057683.html
http://ddzan.net/e/space/?userid=195048?feed_filter=/jt/2016-09-02/169804.html
http://ddzan.net/e/space/?userid=195049?feed_filter=/if/2016-09-02/370245.html
http://ddzan.net/e/space/?userid=195050?feed_filter=/np/2016-09-02/960354.html
http://ddzan.net/e/space/?userid=195051?feed_filter=/kg/2016-09-02/851247.html
http://ddzan.net/e/space/?userid=195052?feed_filter=/tw/2016-09-02/720153.html
http://ddzan.net/e/space/?userid=195053?feed_filter=/xv/2016-09-02/804953.html
http://ddzan.net/e/space/?userid=195054?feed_filter=/fm/2016-09-02/720193.html
http://ddzan.net/e/space/?userid=195055?feed_filter=/ai/2016-09-02/319267.html
http://ddzan.net/e/space/?userid=195056?feed_filter=/tm/2016-09-02/061984.html
http://ddzan.net/e/space/?userid=195057?feed_filter=/pr/2016-09-02/904256.html
http://ddzan.net/e/space/?userid=195058?feed_filter=/ud/2016-09-02/351967.html
http://ddzan.net/e/space/?userid=195059?feed_filter=/ke/2016-09-02/789546.html
http://ddzan.net/e/space/?userid=195060?feed_filter=/pa/2016-09-02/540692.html
http://ddzan.net/e/space/?userid=195061?feed_filter=/cj/2016-09-02/756041.html
http://ddzan.net/e/space/?userid=195062?feed_filter=/iz/2016-09-02/369207.html
http://ddzan.net/e/space/?userid=195063?feed_filter=/si/2016-09-02/057894.html
http://ddzan.net/e/space/?userid=195064?feed_filter=/gh/2016-09-02/703514.html
http://ddzan.net/e/space/?userid=195065?feed_filter=/xq/2016-09-02/012674.html
http://ddzan.net/e/space/?userid=195066?feed_filter=/ay/2016-09-02/278193.html
http://ddzan.net/e/space/?userid=195067?feed_filter=/ib/2016-09-02/231649.html
http://ddzan.net/e/space/?userid=195068?feed_filter=/kd/2016-09-02/654801.html
http://ddzan.net/e/space/?userid=195069?feed_filter=/iu/2016-09-02/803674.html
http://ddzan.net/e/space/?userid=195070?feed_filter=/hv/2016-09-02/843092.html
http://ddzan.net/e/space/?userid=195071?feed_filter=/ou/2016-09-02/457893.html
http://ddzan.net/e/space/?userid=195072?feed_filter=/nk/2016-09-02/017236.html
http://ddzan.net/e/space/?userid=195073?feed_filter=/px/2016-09-02/913607.html
http://ddzan.net/e/space/?userid=195074?feed_filter=/te/2016-09-02/467859.html
http://ddzan.net/e/space/?userid=195075?feed_filter=/fv/2016-09-02/165487.html
http://ddzan.net/e/space/?userid=195076?feed_filter=/ku/2016-09-02/253847.html
http://ddzan.net/e/space/?userid=195077?feed_filter=/dz/2016-09-02/397456.html
http://ddzan.net/e/space/?userid=195078?feed_filter=/ki/2016-09-02/346859.html
http://ddzan.net/e/space/?userid=195079?feed_filter=/ku/2016-09-02/293061.html
http://ddzan.net/e/space/?userid=195080?feed_filter=/re/2016-09-02/637149.html
http://ddzan.net/e/space/?userid=195081?feed_filter=/ld/2016-09-02/803971.html
http://ddzan.net/e/space/?userid=195082?feed_filter=/lo/2016-09-02/916427.html
http://ddzan.net/e/space/?userid=195083?feed_filter=/go/2016-09-02/032758.html
http://ddzan.net/e/space/?userid=195084?feed_filter=/jy/2016-09-02/015862.html
http://ddzan.net/e/space/?userid=195085?feed_filter=/pt/2016-09-02/397840.html
http://ddzan.net/e/space/?userid=195086?feed_filter=/jc/2016-09-02/540371.html
http://ddzan.net/e/space/?userid=195087?feed_filter=/vz/2016-09-02/394512.html
http://ddzan.net/e/space/?userid=195088?feed_filter=/wu/2016-09-02/470981.html
http://ddzan.net/e/space/?userid=195089?feed_filter=/pu/2016-09-02/084571.html
http://ddzan.net/e/space/?userid=195090?feed_filter=/kx/2016-09-02/528791.html
http://ddzan.net/e/space/?userid=195091?feed_filter=/nl/2016-09-02/682795.html
http://ddzan.net/e/space/?userid=195092?feed_filter=/ya/2016-09-02/086291.html
http://ddzan.net/e/space/?userid=195093?feed_filter=/vm/2016-09-02/194632.html
http://ddzan.net/e/space/?userid=195094?feed_filter=/oq/2016-09-02/329856.html
http://ddzan.net/e/space/?userid=195095?feed_filter=/om/2016-09-02/689423.html
http://ddzan.net/e/space/?userid=195096?feed_filter=/vy/2016-09-02/046928.html
http://ddzan.net/e/space/?userid=195097?feed_filter=/pj/2016-09-02/601938.html
http://ddzan.net/e/space/?userid=195098?feed_filter=/ui/2016-09-02/739218.html
http://ddzan.net/e/space/?userid=195099?feed_filter=/ki/2016-09-02/759203.html
http://ddzan.net/e/space/?userid=195100?feed_filter=/bo/2016-09-02/413256.html
http://ddzan.net/e/space/?userid=195101?feed_filter=/ht/2016-09-02/608172.html
http://ddzan.net/e/space/?userid=195102?feed_filter=/kl/2016-09-02/061487.html
http://ddzan.net/e/space/?userid=195103?feed_filter=/sy/2016-09-02/076135.html
http://ddzan.net/e/space/?userid=195104?feed_filter=/vs/2016-09-02/057834.html
http://ddzan.net/e/space/?userid=195105?feed_filter=/qx/2016-09-02/751986.html
http://ddzan.net/e/space/?userid=195106?feed_filter=/ws/2016-09-02/036427.html
http://ddzan.net/e/space/?userid=195107?feed_filter=/rb/2016-09-02/524719.html
http://ddzan.net/e/space/?userid=195108?feed_filter=/zl/2016-09-02/692137.html
http://ddzan.net/e/space/?userid=195109?feed_filter=/gf/2016-09-02/904618.html
http://ddzan.net/e/space/?userid=195110?feed_filter=/mx/2016-09-02/146923.html
http://ddzan.net/e/space/?userid=195111?feed_filter=/ra/2016-09-02/264078.html
http://ddzan.net/e/space/?userid=195112?feed_filter=/nr/2016-09-02/098754.html
http://ddzan.net/e/space/?userid=195113?feed_filter=/bu/2016-09-02/169547.html
http://ddzan.net/e/space/?userid=195114?feed_filter=/xt/2016-09-02/349028.html
http://ddzan.net/e/space/?userid=195115?feed_filter=/mh/2016-09-02/452069.html
http://ddzan.net/e/space/?userid=195116?feed_filter=/wu/2016-09-02/769421.html
http://ddzan.net/e/space/?userid=195117?feed_filter=/lx/2016-09-02/021986.html
http://ddzan.net/e/space/?userid=195118?feed_filter=/ai/2016-09-02/731460.html
http://ddzan.net/e/space/?userid=195119?feed_filter=/sl/2016-09-02/453796.html
http://ddzan.net/e/space/?userid=195120?feed_filter=/pj/2016-09-02/725901.html
http://ddzan.net/e/space/?userid=195121?feed_filter=/ow/2016-09-02/643907.html
http://ddzan.net/e/space/?userid=195122?feed_filter=/sq/2016-09-02/426507.html
http://ddzan.net/e/space/?userid=195123?feed_filter=/ur/2016-09-02/380741.html
http://ddzan.net/e/space/?userid=195124?feed_filter=/yc/2016-09-02/795031.html
http://ddzan.net/e/space/?userid=195125?feed_filter=/io/2016-09-02/910873.html
http://ddzan.net/e/space/?userid=195126?feed_filter=/xt/2016-09-02/137248.html
http://ddzan.net/e/space/?userid=195127?feed_filter=/wp/2016-09-02/760183.html
http://ddzan.net/e/space/?userid=195128?feed_filter=/be/2016-09-02/520984.html
http://ddzan.net/e/space/?userid=195129?feed_filter=/kr/2016-09-02/320165.html
http://ddzan.net/e/space/?userid=195130?feed_filter=/ba/2016-09-02/739860.html
http://ddzan.net/e/space/?userid=195131?feed_filter=/cb/2016-09-02/495137.html
http://ddzan.net/e/space/?userid=195132?feed_filter=/ij/2016-09-02/427510.html
http://ddzan.net/e/space/?userid=195133?feed_filter=/fe/2016-09-02/714865.html
http://ddzan.net/e/space/?userid=195134?feed_filter=/pu/2016-09-02/650294.html
http://ddzan.net/e/space/?userid=195135?feed_filter=/xm/2016-09-02/962153.html
http://ddzan.net/e/space/?userid=195136?feed_filter=/wl/2016-09-02/315697.html
http://ddzan.net/e/space/?userid=195137?feed_filter=/gy/2016-09-02/265740.html
http://ddzan.net/e/space/?userid=195138?feed_filter=/nc/2016-09-02/201386.html
http://ddzan.net/e/space/?userid=195139?feed_filter=/le/2016-09-02/793584.html
http://ddzan.net/e/space/?userid=195140?feed_filter=/wu/2016-09-02/561782.html
http://ddzan.net/e/space/?userid=195141?feed_filter=/nz/2016-09-02/073264.html
http://ddzan.net/e/space/?userid=195142?feed_filter=/xc/2016-09-02/726018.html
http://ddzan.net/e/space/?userid=195143?feed_filter=/sv/2016-09-02/836504.html
http://ddzan.net/e/space/?userid=195144?feed_filter=/vh/2016-09-02/273654.html
http://ddzan.net/e/space/?userid=195145?feed_filter=/th/2016-09-02/169507.html
http://ddzan.net/e/space/?userid=195146?feed_filter=/qp/2016-09-02/038975.html
http://ddzan.net/e/space/?userid=195147?feed_filter=/py/2016-09-02/745206.html
http://ddzan.net/e/space/?userid=195148?feed_filter=/mf/2016-09-02/809346.html
http://ddzan.net/e/space/?userid=195149?feed_filter=/bq/2016-09-02/645718.html
http://ddzan.net/e/space/?userid=195150?feed_filter=/wy/2016-09-02/675924.html
http://ddzan.net/e/space/?userid=195151?feed_filter=/kw/2016-09-02/950341.html
http://ddzan.net/e/space/?userid=195152?feed_filter=/xq/2016-09-02/831247.html
http://ddzan.net/e/space/?userid=195153?feed_filter=/qb/2016-09-02/952180.html
http://ddzan.net/e/space/?userid=195154?feed_filter=/ys/2016-09-02/762018.html
http://ddzan.net/e/space/?userid=195155?feed_filter=/ke/2016-09-02/382640.html
http://ddzan.net/e/space/?userid=195156?feed_filter=/vh/2016-09-02/298715.html
http://ddzan.net/e/space/?userid=195157?feed_filter=/wv/2016-09-02/612987.html
http://ddzan.net/e/space/?userid=195158?feed_filter=/ys/2016-09-02/862703.html
http://ddzan.net/e/space/?userid=195159?feed_filter=/nu/2016-09-02/486210.html
http://ddzan.net/e/space/?userid=195160?feed_filter=/gs/2016-09-02/457069.html
http://ddzan.net/e/space/?userid=195161?feed_filter=/wp/2016-09-02/187562.html
http://ddzan.net/e/space/?userid=195162?feed_filter=/ge/2016-09-02/794802.html
http://ddzan.net/e/space/?userid=195163?feed_filter=/hy/2016-09-02/586103.html
http://ddzan.net/e/space/?userid=195164?feed_filter=/sm/2016-09-02/650279.html
http://ddzan.net/e/space/?userid=195165?feed_filter=/nx/2016-09-02/039756.html
http://ddzan.net/e/space/?userid=195166?feed_filter=/ef/2016-09-02/218379.html
http://ddzan.net/e/space/?userid=195167?feed_filter=/hz/2016-09-02/712634.html
http://ddzan.net/e/space/?userid=195168?feed_filter=/vx/2016-09-02/487901.html
http://ddzan.net/e/space/?userid=195169?feed_filter=/te/2016-09-02/415287.html
http://ddzan.net/e/space/?userid=195170?feed_filter=/aj/2016-09-02/358092.html
http://ddzan.net/e/space/?userid=195171?feed_filter=/ac/2016-09-02/649785.html
http://ddzan.net/e/space/?userid=195172?feed_filter=/gh/2016-09-02/971563.html
http://ddzan.net/e/space/?userid=195173?feed_filter=/py/2016-09-02/231867.html
http://ddzan.net/e/space/?userid=195174?feed_filter=/dp/2016-09-02/528973.html
http://ddzan.net/e/space/?userid=195175?feed_filter=/jt/2016-09-02/482615.html
http://ddzan.net/e/space/?userid=195176?feed_filter=/ho/2016-09-02/715243.html
http://ddzan.net/e/space/?userid=195177?feed_filter=/na/2016-09-02/036758.html
http://ddzan.net/e/space/?userid=195178?feed_filter=/pl/2016-09-02/421058.html
http://ddzan.net/e/space/?userid=195179?feed_filter=/om/2016-09-02/915032.html
http://ddzan.net/e/space/?userid=195180?feed_filter=/pa/2016-09-02/932045.html
http://ddzan.net/e/space/?userid=195181?feed_filter=/bn/2016-09-02/952830.html
http://ddzan.net/e/space/?userid=195182?feed_filter=/yn/2016-09-02/685910.html
http://ddzan.net/e/space/?userid=195183?feed_filter=/tk/2016-09-02/601938.html
http://ddzan.net/e/space/?userid=195184?feed_filter=/zv/2016-09-02/216804.html
http://ddzan.net/e/space/?userid=195185?feed_filter=/gr/2016-09-02/390471.html
http://ddzan.net/e/space/?userid=195186?feed_filter=/gv/2016-09-02/146037.html
http://ddzan.net/e/space/?userid=195187?feed_filter=/sc/2016-09-02/136250.html
http://ddzan.net/e/space/?userid=195188?feed_filter=/mh/2016-09-02/164938.html
http://ddzan.net/e/space/?userid=195189?feed_filter=/fd/2016-09-02/297806.html

希望大家能够指点或提出宝贵意见,谢谢!一起学习。

转载请注明出处: http://blog.csdn.net/u011974987/article/details/52415037

个人站点:xuhao.tech

作者:angel5433 发表于2016/9/2 23:08:32 原文链接
阅读:33 评论:0 查看评论

Hibernate 框架初步语言 hql

$
0
0

Hibernate初步

ORM:在编写程序时,处理数据采用面向对象的方式,而保存数据却以关系型数据库的方式,因此需要一种能在两者之间进行转换的机制。这种机制称为ORM,ORM保存了对象和关系型数据库表的映射信息

Hibernate框架搭建

Hibernate3JAR包引入:

antlr-2.7.6.jar

语言转换工具,实现HQL到SQL的转换

commons-collections-3.1.jar

 

dom4j-1.6.1.jar

读写XML文件

hibernate3.jar

核心类库

hibernate-jpa-2.0-api-1.0.0.Final.jar

对JPA规范的支持,事物处理

javassist-3.12.0.GA.jar

分析、编辑、创建java字节码的类库

jta-1.1.jar

 

mysql-connector-java-5.1.12-bin.jar

数据库驱动

slf4j-api-1.6.1.jar

 

Hibernate4 jar包引入:


文件配置

Hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC

    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>

                       <!-- 数据库连接配置 -->

<!—数据库类型 -->

<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver

</property>

<!—数据库URL -->    

<propertyname="hibernate.connection.url">jdbc:mysql:///hib_demo

</property>

<!—用户名 -->

<property name="hibernate.connection.username">root

</property>

<!—用户名密码 -->

<property name="hibernate.connection.password">root

</property>

<!—配置Hibernate数据库类型  -->

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect

</property>

<!—显示SQL脚本语句 -->

<property name="hibernate.show_sql">true

</property>

       

<!-- 加载所有映射 -->

<mapping resource="映射文件目录"/>

   

</session-factory>

</hibernate-configuration>

sf = new Configuration()

            .configure()

            .addClass(Employee.class) 

            .buildSessionFactory()//(测试时候用)会自动加载映射文件:效果等同于    <mapping resource="映射文件目录"/>

 

数据库连接参数配置

例如:

sql语言配置

#hibernate.dialectorg.hibernate.dialect.MySQLDialect

#hibernate.dialectorg.hibernate.dialect.MySQLInnoDBDialect

#hibernate.dialectorg.hibernate.dialect.MySQLMyISAMDialect

自动建表

Hibernate.properties

hibernate.hbm2ddl.auto create-drop 每次在创建sessionFactory时候执行创建表;

                                                        当调用sesisonFactory的close方法的时候,删除表!

hibernate.hbm2ddl.auto create   每次都重新建表;如果表已经存在就先删除再创建

hibernate.hbm2ddl.auto update  如果表不存在就创建;表存在就不创建;

hibernate.hbm2ddl.auto validate  (生成环境时候) 执行验证: 当映射文件的内容与数据                                                   库表结构不一样的时候就报错!

 

代码自动建表和文件配置自动建表区别

文件配置自动建表在加载配置文件时候才会建表,代码自动建表启动时候就会建表。

代码自动建表:

        // 创建配置管理类对象

        Configuration config = new Configuration();

        // 加载主配置文件

        config.configure();

        // 创建工具类对象

        SchemaExport export = new SchemaExport(config);

        // 建表

        // 第一个参数:是否在控制台打印建表语句

        // 第二个参数:是否执行脚本

        export.create(truetrue);

 

对象的映射 (映射文件)

类名.hbm.xml             

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

         "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="cn.itcast.a_hello"  auto-import="trueHQL查询时不用指定包名/false得指定" >

         <class name="实体类的名字" table="数据库表名" catalog="数据表的名字" >

                   <!-- 主键 ,映射id属性必须有一个-->

                   <id name="实体类属性" type="属性的java类型" column="指定对应数据库表的主键" type=“字段类型”>

                            <generator class="主键生成器策略"/>

 

主键生成策略:

increment  个是由Hibernate在内存中生成主键,每次增量为1,不依赖于底层的数据库,因此所有的数据库都可以使用

identity      采用数据库生成的主键,用于为long、short、int类型生成唯一标识, Oracle 不支持自增字段.

sequence   对象标识符由底层的序列生成机制产生,要求底层数据库支持序列

native         根据底层数据库的能力,从identity、sequence、hilo中选择一个,灵活性更强。

assigned  指定主键生成策略为手动指定主键的值

uuid.hex     使用一个128-bit的UUID算法生成字符串类型的标识符

uuid.string  hibernate会算出一个16位的值插入

foreign  即把别的表的主键作为当前表的主键;

                   </id>

                   <!-- 非主键,映射 -->

                   <property name="实体类属性" column="指定对应数据库表的主键" ></property>

            <set name="集合属性名table="集合属性要映射到的表">

                            <key column="指定集合表的外键字段"></key>

                            <element column="addresstype="元素类型,一定要指定"></element>

                    </set>

<!-- list集合映射 list-index  指定的是排序列的名称 (因为要保证list集合的有序) -->

                     <list name=".." table="..">

                             <key column=".."></key>

                             <list-index column=".."></list-index>

                             <element column=".." type="string"></element>

                     </list>

             <!-- map集合的映射-->

                     <map name=".." table="..">

                           <key column=".."></key>

                           <map-key column=".." type=".." ></map-key>

                           <element column=".." type=".." ></element>

                     </map>

    </class>

 

type   指定映射表的字段的类型,如果不指定会匹配属性的类型

                                               java类型:     必须写全名

                                               hibernate类型:  直接写类型,都是小写

<!-- 如果列名称为数据库关键字,需要用反引号或改列名。 -->

<property name="desc" column="`desc`" type="java.lang.String"></property>

联合/复合主键

         如果找不到合适的列作为主键,除了用id列以外,我们一般用联合主键,即多列的值作为一个主键,从而确保记录的唯一性。

<!-- 复合主键映射 -->

                   <composite-id name="keys">

                            <key-property name="userName" type="string"></key-property>

                            <key-property name="address" type="string"></key-property>

                   </composite-id>

运行流程

执行流程:


会话工厂类SessionFactory创建

http://www.yqcq.gov.cn/e/space/?userid=17856&yqcq.xml?feed_filter=20160902AvIuW.html
http://www.yqcq.gov.cn/e/space/?userid=17857&yqcq.xml?feed_filter=20160902sQYES.html
http://www.yqcq.gov.cn/e/space/?userid=17858&yqcq.xml?feed_filter=2016090271jkg.html
http://www.yqcq.gov.cn/e/space/?userid=17859&yqcq.xml?feed_filter=20160902CtQul.html
http://www.yqcq.gov.cn/e/space/?userid=17860&yqcq.xml?feed_filter=20160902UctIL.html
http://www.yqcq.gov.cn/e/space/?userid=17862&yqcq.xml?feed_filter=20160902efFNq.html
http://www.yqcq.gov.cn/e/space/?userid=17863&yqcq.xml?feed_filter=201609028sNfv.html
http://www.yqcq.gov.cn/e/space/?userid=17864&yqcq.xml?feed_filter=20160902cu65Y.html
http://www.yqcq.gov.cn/e/space/?userid=17865&yqcq.xml?feed_filter=20160902iMIFH.html
http://www.yqcq.gov.cn/e/space/?userid=17866&yqcq.xml?feed_filter=20160902iBHlo.html
http://www.yqcq.gov.cn/e/space/?userid=17868&yqcq.xml?feed_filter=20160902X9RxU.html
http://www.yqcq.gov.cn/e/space/?userid=17869&yqcq.xml?feed_filter=20160902nmYHk.html
http://www.yqcq.gov.cn/e/space/?userid=17870&yqcq.xml?feed_filter=20160902Ng1fC.html
http://www.yqcq.gov.cn/e/space/?userid=17871&yqcq.xml?feed_filter=20160902gHeLD.html
http://www.yqcq.gov.cn/e/space/?userid=17872&yqcq.xml?feed_filter=20160902DTiUF.html
http://www.yqcq.gov.cn/e/space/?userid=17873&yqcq.xml?feed_filter=2016090236Al1.html
http://www.yqcq.gov.cn/e/space/?userid=17874&yqcq.xml?feed_filter=20160902dz5Gy.html
http://www.yqcq.gov.cn/e/space/?userid=17875&yqcq.xml?feed_filter=20160902IBF2s.html
http://www.yqcq.gov.cn/e/space/?userid=17877&yqcq.xml?feed_filter=20160902Kor7A.html
http://www.yqcq.gov.cn/e/space/?userid=17878&yqcq.xml?feed_filter=20160902iIL1l.html
http://www.yqcq.gov.cn/e/space/?userid=17879&yqcq.xml?feed_filter=201609025OatD.html
http://www.yqcq.gov.cn/e/space/?userid=17881&yqcq.xml?feed_filter=20160902HkIzV.html
http://www.yqcq.gov.cn/e/space/?userid=17882&yqcq.xml?feed_filter=20160902WFaKm.html
http://www.yqcq.gov.cn/e/space/?userid=17883&yqcq.xml?feed_filter=20160902hZQgj.html
http://www.yqcq.gov.cn/e/space/?userid=17884&yqcq.xml?feed_filter=20160902SOxUX.html
http://www.yqcq.gov.cn/e/space/?userid=17885&yqcq.xml?feed_filter=20160902BelzR.html
http://www.yqcq.gov.cn/e/space/?userid=17886&yqcq.xml?feed_filter=20160902fN1DW.html
http://www.yqcq.gov.cn/e/space/?userid=17887&yqcq.xml?feed_filter=20160902N846D.html
http://www.yqcq.gov.cn/e/space/?userid=17888&yqcq.xml?feed_filter=20160902JoQXw.html
http://www.yqcq.gov.cn/e/space/?userid=17889&yqcq.xml?feed_filter=20160902A1X42.html
http://www.yqcq.gov.cn/e/space/?userid=17890&yqcq.xml?feed_filter=20160902V9sgo.html
http://www.yqcq.gov.cn/e/space/?userid=17891&yqcq.xml?feed_filter=20160902yp8nm.html
http://www.yqcq.gov.cn/e/space/?userid=17892&yqcq.xml?feed_filter=20160902hVc9p.html
http://www.yqcq.gov.cn/e/space/?userid=17893&yqcq.xml?feed_filter=20160902A5GS6.html
http://www.yqcq.gov.cn/e/space/?userid=17894&yqcq.xml?feed_filter=2016090269Hy8.html
http://www.yqcq.gov.cn/e/space/?userid=17895&yqcq.xml?feed_filter=20160902ZkuyR.html
http://www.yqcq.gov.cn/e/space/?userid=17896&yqcq.xml?feed_filter=20160902wvYAb.html
http://www.yqcq.gov.cn/e/space/?userid=17897&yqcq.xml?feed_filter=20160902R48io.html
http://www.yqcq.gov.cn/e/space/?userid=17898&yqcq.xml?feed_filter=20160902o7GlQ.html
http://www.yqcq.gov.cn/e/space/?userid=17899&yqcq.xml?feed_filter=20160902WqU5y.html
http://www.yqcq.gov.cn/e/space/?userid=17900&yqcq.xml?feed_filter=20160902w5CBW.html
http://www.yqcq.gov.cn/e/space/?userid=17901&yqcq.xml?feed_filter=20160902SUPuO.html
http://www.yqcq.gov.cn/e/space/?userid=17902&yqcq.xml?feed_filter=20160902ClFvM.html
http://www.yqcq.gov.cn/e/space/?userid=17903&yqcq.xml?feed_filter=20160902G4aRP.html
http://www.yqcq.gov.cn/e/space/?userid=17904&yqcq.xml?feed_filter=20160902vR2Ff.html
http://www.yqcq.gov.cn/e/space/?userid=17905&yqcq.xml?feed_filter=201609024wCmK.html
http://www.yqcq.gov.cn/e/space/?userid=17906&yqcq.xml?feed_filter=20160902hxQ27.html
http://www.yqcq.gov.cn/e/space/?userid=17908&yqcq.xml?feed_filter=20160902pCAqG.html
http://www.yqcq.gov.cn/e/space/?userid=17909&yqcq.xml?feed_filter=20160902NyhY8.html
http://www.yqcq.gov.cn/e/space/?userid=17910&yqcq.xml?feed_filter=20160902rLMmf.html
http://www.yqcq.gov.cn/e/space/?userid=17911&yqcq.xml?feed_filter=20160902vCZ5U.html
http://www.yqcq.gov.cn/e/space/?userid=17912&yqcq.xml?feed_filter=20160902Sou12.html
http://www.yqcq.gov.cn/e/space/?userid=17913&yqcq.xml?feed_filter=20160902L24mc.html
http://www.yqcq.gov.cn/e/space/?userid=17914&yqcq.xml?feed_filter=20160902bc4ER.html
http://www.yqcq.gov.cn/e/space/?userid=17915&yqcq.xml?feed_filter=20160902hL6nG.html
http://www.yqcq.gov.cn/e/space/?userid=17916&yqcq.xml?feed_filter=20160902l46Ae.html
http://www.yqcq.gov.cn/e/space/?userid=17917&yqcq.xml?feed_filter=20160902wKy1S.html
http://www.yqcq.gov.cn/e/space/?userid=17918&yqcq.xml?feed_filter=20160902QF9hN.html
http://www.yqcq.gov.cn/e/space/?userid=17919&yqcq.xml?feed_filter=201609024mxcy.html
http://www.yqcq.gov.cn/e/space/?userid=17921&yqcq.xml?feed_filter=20160902E4fXy.html
http://www.yqcq.gov.cn/e/space/?userid=17922&yqcq.xml?feed_filter=20160902KMUvy.html
http://www.yqcq.gov.cn/e/space/?userid=17924&yqcq.xml?feed_filter=201609022X1M9.html
http://www.yqcq.gov.cn/e/space/?userid=17925&yqcq.xml?feed_filter=20160902sSA7G.html
http://www.yqcq.gov.cn/e/space/?userid=17926&yqcq.xml?feed_filter=20160902f7dcM.html
http://www.yqcq.gov.cn/e/space/?userid=17927&yqcq.xml?feed_filter=20160902RuzZV.html
http://www.yqcq.gov.cn/e/space/?userid=17928&yqcq.xml?feed_filter=201609028yQoe.html
http://www.yqcq.gov.cn/e/space/?userid=17929&yqcq.xml?feed_filter=20160902zlkK3.html
http://www.yqcq.gov.cn/e/space/?userid=17930&yqcq.xml?feed_filter=20160902mBAJK.html
http://www.yqcq.gov.cn/e/space/?userid=17931&yqcq.xml?feed_filter=20160902gvVdo.html
http://www.yqcq.gov.cn/e/space/?userid=17932&yqcq.xml?feed_filter=20160902Xaz7Q.html
http://www.yqcq.gov.cn/e/space/?userid=17933&yqcq.xml?feed_filter=20160902iXZ8P.html
http://www.yqcq.gov.cn/e/space/?userid=17934&yqcq.xml?feed_filter=20160902UoG8e.html
http://www.yqcq.gov.cn/e/space/?userid=17935&yqcq.xml?feed_filter=201609023SaLE.html
http://www.yqcq.gov.cn/e/space/?userid=17936&yqcq.xml?feed_filter=2016090292kEh.html
http://www.yqcq.gov.cn/e/space/?userid=17937&yqcq.xml?feed_filter=20160902Q9sIg.html
http://www.yqcq.gov.cn/e/space/?userid=17938&yqcq.xml?feed_filter=20160902dGEyc.html
http://www.yqcq.gov.cn/e/space/?userid=17939&yqcq.xml?feed_filter=20160902aoHEw.html
http://www.yqcq.gov.cn/e/space/?userid=17940&yqcq.xml?feed_filter=20160902oHs1C.html
http://www.yqcq.gov.cn/e/space/?userid=17941&yqcq.xml?feed_filter=20160902rnA6T.html
http://www.yqcq.gov.cn/e/space/?userid=17942&yqcq.xml?feed_filter=20160902g7Uyv.html
http://www.yqcq.gov.cn/e/space/?userid=17943&yqcq.xml?feed_filter=20160902kPbHo.html
http://www.yqcq.gov.cn/e/space/?userid=17944&yqcq.xml?feed_filter=20160902goVCu.html
http://www.yqcq.gov.cn/e/space/?userid=17945&yqcq.xml?feed_filter=20160902PsAYo.html
http://www.yqcq.gov.cn/e/space/?userid=17946&yqcq.xml?feed_filter=20160902EdpLg.html
http://www.yqcq.gov.cn/e/space/?userid=17947&yqcq.xml?feed_filter=20160902zoKaT.html
http://www.yqcq.gov.cn/e/space/?userid=17948&yqcq.xml?feed_filter=20160902dRcCS.html
http://www.yqcq.gov.cn/e/space/?userid=17950&yqcq.xml?feed_filter=20160902D5dKI.html
http://www.yqcq.gov.cn/e/space/?userid=17951&yqcq.xml?feed_filter=20160902bAYdq.html
http://www.yqcq.gov.cn/e/space/?userid=17952&yqcq.xml?feed_filter=20160902u8xcJ.html
http://www.yqcq.gov.cn/e/space/?userid=17954&yqcq.xml?feed_filter=20160902yIWxG.html
http://www.yqcq.gov.cn/e/space/?userid=17955&yqcq.xml?feed_filter=20160902M5nCK.html
http://www.yqcq.gov.cn/e/space/?userid=17956&yqcq.xml?feed_filter=20160902N6MYV.html
http://www.yqcq.gov.cn/e/space/?userid=17957&yqcq.xml?feed_filter=20160902UCylv.html
http://www.yqcq.gov.cn/e/space/?userid=17958&yqcq.xml?feed_filter=20160902G7RkX.html
http://www.yqcq.gov.cn/e/space/?userid=17959&yqcq.xml?feed_filter=20160902MKT93.html
http://www.yqcq.gov.cn/e/space/?userid=17960&yqcq.xml?feed_filter=20160902bJwuX.html
http://www.yqcq.gov.cn/e/space/?userid=17961&yqcq.xml?feed_filter=20160902sm4aw.html
http://www.yqcq.gov.cn/e/space/?userid=17962&yqcq.xml?feed_filter=20160902CqpQx.html
http://www.yqcq.gov.cn/e/space/?userid=17963&yqcq.xml?feed_filter=20160902cEFnt.html
http://www.yqcq.gov.cn/e/space/?userid=17964&yqcq.xml?feed_filter=20160902DaLbJ.html
http://www.yqcq.gov.cn/e/space/?userid=17965&yqcq.xml?feed_filter=20160902QmLRe.html
http://www.yqcq.gov.cn/e/space/?userid=17966&yqcq.xml?feed_filter=20160902ApBnk.html
http://www.yqcq.gov.cn/e/space/?userid=17967&yqcq.xml?feed_filter=20160902gDwOt.html
http://www.yqcq.gov.cn/e/space/?userid=17968&yqcq.xml?feed_filter=20160902arXSP.html
http://www.yqcq.gov.cn/e/space/?userid=17969&yqcq.xml?feed_filter=20160902ijDZh.html
http://www.yqcq.gov.cn/e/space/?userid=17970&yqcq.xml?feed_filter=20160902srafL.html
http://www.yqcq.gov.cn/e/space/?userid=17971&yqcq.xml?feed_filter=20160902FvRDY.html
http://www.yqcq.gov.cn/e/space/?userid=17972&yqcq.xml?feed_filter=20160902wth1n.html
http://www.yqcq.gov.cn/e/space/?userid=17973&yqcq.xml?feed_filter=20160902f1gCx.html
http://www.yqcq.gov.cn/e/space/?userid=17974&yqcq.xml?feed_filter=20160902vKdom.html
http://www.yqcq.gov.cn/e/space/?userid=17975&yqcq.xml?feed_filter=20160902lxbpz.html
http://www.yqcq.gov.cn/e/space/?userid=17976&yqcq.xml?feed_filter=20160902V4EUZ.html
http://www.yqcq.gov.cn/e/space/?userid=17977&yqcq.xml?feed_filter=201609023kurb.html
http://www.yqcq.gov.cn/e/space/?userid=17979&yqcq.xml?feed_filter=20160902bm3Sd.html
http://www.yqcq.gov.cn/e/space/?userid=17980&yqcq.xml?feed_filter=20160902s6va5.html
http://www.yqcq.gov.cn/e/space/?userid=17981&yqcq.xml?feed_filter=20160902dofq9.html
http://www.yqcq.gov.cn/e/space/?userid=17982&yqcq.xml?feed_filter=20160902oUvsB.html
http://www.yqcq.gov.cn/e/space/?userid=17983&yqcq.xml?feed_filter=20160902CISkU.html
http://www.yqcq.gov.cn/e/space/?userid=17984&yqcq.xml?feed_filter=20160902ZrN52.html
http://www.yqcq.gov.cn/e/space/?userid=17985&yqcq.xml?feed_filter=20160902bevAE.html
http://www.yqcq.gov.cn/e/space/?userid=17986&yqcq.xml?feed_filter=20160902OMdeN.html
http://www.yqcq.gov.cn/e/space/?userid=17987&yqcq.xml?feed_filter=20160902iDtG3.html
http://www.yqcq.gov.cn/e/space/?userid=17988&yqcq.xml?feed_filter=201609026bixl.html
http://www.yqcq.gov.cn/e/space/?userid=17989&yqcq.xml?feed_filter=20160902rJWBU.html
http://www.yqcq.gov.cn/e/space/?userid=17990&yqcq.xml?feed_filter=20160902O4EX8.html
http://www.yqcq.gov.cn/e/space/?userid=17991&yqcq.xml?feed_filter=20160902iQ5UL.html
http://www.yqcq.gov.cn/e/space/?userid=17992&yqcq.xml?feed_filter=20160902bT13I.html
http://www.yqcq.gov.cn/e/space/?userid=17993&yqcq.xml?feed_filter=20160902uaLex.html
http://www.yqcq.gov.cn/e/space/?userid=17994&yqcq.xml?feed_filter=20160902bA8UV.html
http://www.yqcq.gov.cn/e/space/?userid=17995&yqcq.xml?feed_filter=20160902PTUdW.html
http://www.yqcq.gov.cn/e/space/?userid=17996&yqcq.xml?feed_filter=20160902LWCrN.html
http://www.yqcq.gov.cn/e/space/?userid=17997&yqcq.xml?feed_filter=20160902w2cDQ.html
http://www.yqcq.gov.cn/e/space/?userid=17998&yqcq.xml?feed_filter=2016090281EAI.html
http://www.yqcq.gov.cn/e/space/?userid=17999&yqcq.xml?feed_filter=20160902tDiqK.html
http://www.yqcq.gov.cn/e/space/?userid=18000&yqcq.xml?feed_filter=20160902gaqjI.html
http://www.yqcq.gov.cn/e/space/?userid=18001&yqcq.xml?feed_filter=20160902uF2V6.html
http://www.yqcq.gov.cn/e/space/?userid=18002&yqcq.xml?feed_filter=20160902JAjn5.html
http://www.yqcq.gov.cn/e/space/?userid=18003&yqcq.xml?feed_filter=20160902IUzPt.html
http://www.yqcq.gov.cn/e/space/?userid=18004&yqcq.xml?feed_filter=20160902BHXvQ.html
http://www.yqcq.gov.cn/e/space/?userid=18005&yqcq.xml?feed_filter=20160902ifIus.html
http://www.yqcq.gov.cn/e/space/?userid=18006&yqcq.xml?feed_filter=20160902n12HS.html
http://www.yqcq.gov.cn/e/space/?userid=18008&yqcq.xml?feed_filter=201609025z9jB.html
http://www.yqcq.gov.cn/e/space/?userid=18009&yqcq.xml?feed_filter=20160902GsfYh.html
http://www.yqcq.gov.cn/e/space/?userid=18010&yqcq.xml?feed_filter=20160902Xkf52.html
http://www.yqcq.gov.cn/e/space/?userid=18011&yqcq.xml?feed_filter=20160902zFIgw.html
http://www.yqcq.gov.cn/e/space/?userid=18012&yqcq.xml?feed_filter=20160902ko6eA.html
http://www.yqcq.gov.cn/e/space/?userid=18013&yqcq.xml?feed_filter=20160902ebQYJ.html
http://www.yqcq.gov.cn/e/space/?userid=18014&yqcq.xml?feed_filter=20160902sIJNc.html
http://www.yqcq.gov.cn/e/space/?userid=18015&yqcq.xml?feed_filter=20160902Kazt9.html
http://www.yqcq.gov.cn/e/space/?userid=18016&yqcq.xml?feed_filter=20160902Malsc.html
http://www.yqcq.gov.cn/e/space/?userid=18017&yqcq.xml?feed_filter=20160902aFZGo.html
http://www.yqcq.gov.cn/e/space/?userid=18018&yqcq.xml?feed_filter=20160902jDxfT.html
http://www.yqcq.gov.cn/e/space/?userid=18019&yqcq.xml?feed_filter=20160902PIW4d.html
http://www.yqcq.gov.cn/e/space/?userid=18020&yqcq.xml?feed_filter=20160902W9jqr.html
http://www.yqcq.gov.cn/e/space/?userid=18021&yqcq.xml?feed_filter=20160902pUd6v.html
http://www.yqcq.gov.cn/e/space/?userid=18022&yqcq.xml?feed_filter=20160902i6XBP.html
http://www.yqcq.gov.cn/e/space/?userid=18023&yqcq.xml?feed_filter=20160902rPfdy.html
http://www.yqcq.gov.cn/e/space/?userid=18024&yqcq.xml?feed_filter=20160902T2z1K.html
http://www.yqcq.gov.cn/e/space/?userid=18025&yqcq.xml?feed_filter=20160902ZX9Kc.html
http://www.yqcq.gov.cn/e/space/?userid=18026&yqcq.xml?feed_filter=20160902oBQcO.html
http://www.yqcq.gov.cn/e/space/?userid=18027&yqcq.xml?feed_filter=201609022Opxq.html
http://www.yqcq.gov.cn/e/space/?userid=18028&yqcq.xml?feed_filter=20160902RuCJW.html
http://www.yqcq.gov.cn/e/space/?userid=18029&yqcq.xml?feed_filter=20160902X9cDQ.html
http://www.yqcq.gov.cn/e/space/?userid=18030&yqcq.xml?feed_filter=20160902fm6eQ.html
http://www.yqcq.gov.cn/e/space/?userid=18031&yqcq.xml?feed_filter=20160902nToOm.html
http://www.yqcq.gov.cn/e/space/?userid=18032&yqcq.xml?feed_filter=20160902xzSDQ.html
http://www.yqcq.gov.cn/e/space/?userid=18033&yqcq.xml?feed_filter=20160902JPOId.html
http://www.yqcq.gov.cn/e/space/?userid=18034&yqcq.xml?feed_filter=20160902MI7Zh.html
http://www.yqcq.gov.cn/e/space/?userid=18035&yqcq.xml?feed_filter=20160902BDWt5.html
http://www.yqcq.gov.cn/e/space/?userid=18036&yqcq.xml?feed_filter=20160902RHPeQ.html
http://www.yqcq.gov.cn/e/space/?userid=18037&yqcq.xml?feed_filter=201609022oTSD.html
http://www.yqcq.gov.cn/e/space/?userid=18038&yqcq.xml?feed_filter=201609024hpr1.html
http://www.yqcq.gov.cn/e/space/?userid=18039&yqcq.xml?feed_filter=20160902GB14V.html
http://www.yqcq.gov.cn/e/space/?userid=18040&yqcq.xml?feed_filter=20160902AapzT.html
http://www.yqcq.gov.cn/e/space/?userid=18041&yqcq.xml?feed_filter=201609026DBf8.html
http://www.yqcq.gov.cn/e/space/?userid=18042&yqcq.xml?feed_filter=20160902Y91Xu.html
http://www.yqcq.gov.cn/e/space/?userid=18043&yqcq.xml?feed_filter=201609023sr1g.html
http://www.yqcq.gov.cn/e/space/?userid=18044&yqcq.xml?feed_filter=20160902BZmJU.html
http://www.yqcq.gov.cn/e/space/?userid=18045&yqcq.xml?feed_filter=20160902BZVgO.html
http://www.yqcq.gov.cn/e/space/?userid=18046&yqcq.xml?feed_filter=20160902Ze2sp.html
http://www.yqcq.gov.cn/e/space/?userid=18048&yqcq.xml?feed_filter=201609022G51Z.html
http://www.yqcq.gov.cn/e/space/?userid=18049&yqcq.xml?feed_filter=20160902YdfSG.html
http://www.yqcq.gov.cn/e/space/?userid=18050&yqcq.xml?feed_filter=20160902Kku6P.html
http://www.yqcq.gov.cn/e/space/?userid=18051&yqcq.xml?feed_filter=201609024QmVa.html
http://www.yqcq.gov.cn/e/space/?userid=18052&yqcq.xml?feed_filter=20160902MixFc.html
http://www.yqcq.gov.cn/e/space/?userid=18054&yqcq.xml?feed_filter=20160902Sipe9.html
http://www.yqcq.gov.cn/e/space/?userid=18055&yqcq.xml?feed_filter=20160902JXCeg.html
http://www.yqcq.gov.cn/e/space/?userid=18056&yqcq.xml?feed_filter=20160902t9UQG.html
http://www.yqcq.gov.cn/e/space/?userid=18057&yqcq.xml?feed_filter=20160902ZWThJ.html
http://www.yqcq.gov.cn/e/space/?userid=18058&yqcq.xml?feed_filter=20160902Jn8qV.html
http://www.yqcq.gov.cn/e/space/?userid=18059&yqcq.xml?feed_filter=20160902vqY3m.html
http://www.yqcq.gov.cn/e/space/?userid=18060&yqcq.xml?feed_filter=20160902Hlh1K.html
http://www.yqcq.gov.cn/e/space/?userid=18061&yqcq.xml?feed_filter=20160902zXq9i.html
http://www.yqcq.gov.cn/e/space/?userid=18062&yqcq.xml?feed_filter=201609029bhwd.html
http://www.yqcq.gov.cn/e/space/?userid=18063&yqcq.xml?feed_filter=20160902D6vH2.html
http://www.yqcq.gov.cn/e/space/?userid=18064&yqcq.xml?feed_filter=20160902l5eXV.html
http://www.yqcq.gov.cn/e/space/?userid=18065&yqcq.xml?feed_filter=20160902TICad.html
http://www.yqcq.gov.cn/e/space/?userid=18067&yqcq.xml?feed_filter=20160902KBsj3.html
http://www.yqcq.gov.cn/e/space/?userid=18068&yqcq.xml?feed_filter=20160902VYf6t.html
http://www.yqcq.gov.cn/e/space/?userid=18069&yqcq.xml?feed_filter=20160902nVGWr.html
http://www.yqcq.gov.cn/e/space/?userid=18070&yqcq.xml?feed_filter=20160902lOoEn.html
http://www.yqcq.gov.cn/e/space/?userid=18071&yqcq.xml?feed_filter=201609024rFZO.html
http://www.yqcq.gov.cn/e/space/?userid=18072&yqcq.xml?feed_filter=201609022eJ6q.html
http://www.yqcq.gov.cn/e/space/?userid=18073&yqcq.xml?feed_filter=20160902zKnmv.html
http://www.yqcq.gov.cn/e/space/?userid=18074&yqcq.xml?feed_filter=20160902cJR9s.html
http://www.yqcq.gov.cn/e/space/?userid=18075&yqcq.xml?feed_filter=20160902kSwpo.html
http://www.yqcq.gov.cn/e/space/?userid=18076&yqcq.xml?feed_filter=20160902NwHoP.html
http://www.yqcq.gov.cn/e/space/?userid=18077&yqcq.xml?feed_filter=20160902g4iAr.html
http://www.yqcq.gov.cn/e/space/?userid=18078&yqcq.xml?feed_filter=20160902zslRb.html
http://www.yqcq.gov.cn/e/space/?userid=18079&yqcq.xml?feed_filter=20160902uJ56s.html
http://www.yqcq.gov.cn/e/space/?userid=18080&yqcq.xml?feed_filter=20160902nSP7Q.html
http://www.yqcq.gov.cn/e/space/?userid=18081&yqcq.xml?feed_filter=20160902g4K7y.html
http://www.yqcq.gov.cn/e/space/?userid=18082&yqcq.xml?feed_filter=20160902g9DEw.html
http://www.yqcq.gov.cn/e/space/?userid=18083&yqcq.xml?feed_filter=201609027aMw8.html
http://www.yqcq.gov.cn/e/space/?userid=18084&yqcq.xml?feed_filter=20160902czHCK.html
http://www.yqcq.gov.cn/e/space/?userid=18085&yqcq.xml?feed_filter=20160902RsQJG.html
http://www.yqcq.gov.cn/e/space/?userid=18086&yqcq.xml?feed_filter=20160902SRgM8.html
http://www.yqcq.gov.cn/e/space/?userid=18087&yqcq.xml?feed_filter=20160902DrUAa.html
http://www.yqcq.gov.cn/e/space/?userid=18088&yqcq.xml?feed_filter=20160902bLiMX.html
http://www.yqcq.gov.cn/e/space/?userid=18089&yqcq.xml?feed_filter=20160902zbkja.html
http://www.yqcq.gov.cn/e/space/?userid=18090&yqcq.xml?feed_filter=20160902heoVa.html
http://www.yqcq.gov.cn/e/space/?userid=18091&yqcq.xml?feed_filter=20160902Up3Yr.html
http://www.yqcq.gov.cn/e/space/?userid=18092&yqcq.xml?feed_filter=20160902stH7V.html
http://www.yqcq.gov.cn/e/space/?userid=18093&yqcq.xml?feed_filter=20160902Q4v21.html
http://www.yqcq.gov.cn/e/space/?userid=18094&yqcq.xml?feed_filter=20160902MEK3e.html
http://www.yqcq.gov.cn/e/space/?userid=18095&yqcq.xml?feed_filter=20160902aeXZp.html
http://www.yqcq.gov.cn/e/space/?userid=18096&yqcq.xml?feed_filter=20160902sujV5.html
http://www.yqcq.gov.cn/e/space/?userid=18097&yqcq.xml?feed_filter=20160902dC6oR.html
http://www.yqcq.gov.cn/e/space/?userid=18098&yqcq.xml?feed_filter=201609022gWf1.html
http://www.yqcq.gov.cn/e/space/?userid=18099&yqcq.xml?feed_filter=2016090231R2q.html
http://www.yqcq.gov.cn/e/space/?userid=18101&yqcq.xml?feed_filter=20160902kz2R4.html
http://www.yqcq.gov.cn/e/space/?userid=18102&yqcq.xml?feed_filter=20160902QWzkR.html
http://www.yqcq.gov.cn/e/space/?userid=18104&yqcq.xml?feed_filter=20160902hJsw8.html
http://www.yqcq.gov.cn/e/space/?userid=18105&yqcq.xml?feed_filter=20160902cl7Um.html
http://www.yqcq.gov.cn/e/space/?userid=18107&yqcq.xml?feed_filter=20160902q35zc.html
http://www.yqcq.gov.cn/e/space/?userid=18108&yqcq.xml?feed_filter=20160902Vi9DP.html
http://www.yqcq.gov.cn/e/space/?userid=18110&yqcq.xml?feed_filter=20160902n6Dx3.html
http://www.yqcq.gov.cn/e/space/?userid=18109&yqcq.xml?feed_filter=20160902aCo6l.html
http://www.yqcq.gov.cn/e/space/?userid=18111&yqcq.xml?feed_filter=2016090242Msj.html
http://www.yqcq.gov.cn/e/space/?userid=18112&yqcq.xml?feed_filter=20160902wFjyf.html
http://www.yqcq.gov.cn/e/space/?userid=18114&yqcq.xml?feed_filter=20160902iU3jZ.html
http://www.yqcq.gov.cn/e/space/?userid=18115&yqcq.xml?feed_filter=20160902T3Z5G.html
http://www.yqcq.gov.cn/e/space/?userid=18116&yqcq.xml?feed_filter=20160902ip24f.html
http://www.yqcq.gov.cn/e/space/?userid=18117&yqcq.xml?feed_filter=20160902PAspf.html
http://www.yqcq.gov.cn/e/space/?userid=18118&yqcq.xml?feed_filter=20160902m5a1z.html
http://www.yqcq.gov.cn/e/space/?userid=18120&yqcq.xml?feed_filter=20160902eAWat.html
http://www.yqcq.gov.cn/e/space/?userid=18121&yqcq.xml?feed_filter=20160902V96DH.html
http://www.yqcq.gov.cn/e/space/?userid=18122&yqcq.xml?feed_filter=20160902vQOL2.html
http://www.yqcq.gov.cn/e/space/?userid=18123&yqcq.xml?feed_filter=20160902XfMei.html
http://www.yqcq.gov.cn/e/space/?userid=18125&yqcq.xml?feed_filter=20160902W31Da.html
http://www.yqcq.gov.cn/e/space/?userid=18126&yqcq.xml?feed_filter=20160902okuef.html
http://www.yqcq.gov.cn/e/space/?userid=18127&yqcq.xml?feed_filter=20160902Joyvw.html
http://www.yqcq.gov.cn/e/space/?userid=18128&yqcq.xml?feed_filter=20160902UtrZO.html
http://www.yqcq.gov.cn/e/space/?userid=18129&yqcq.xml?feed_filter=20160902M1xgJ.html
http://www.yqcq.gov.cn/e/space/?userid=18130&yqcq.xml?feed_filter=20160902c1ZTW.html
http://www.yqcq.gov.cn/e/space/?userid=18131&yqcq.xml?feed_filter=201609027Q1Ba.html
http://www.yqcq.gov.cn/e/space/?userid=18132&yqcq.xml?feed_filter=20160902lsiPW.html
http://www.yqcq.gov.cn/e/space/?userid=18133&yqcq.xml?feed_filter=20160902rNS6s.html
http://www.yqcq.gov.cn/e/space/?userid=18134&yqcq.xml?feed_filter=201609029JPwu.html
http://www.yqcq.gov.cn/e/space/?userid=18135&yqcq.xml?feed_filter=20160902DeXzj.html
http://www.yqcq.gov.cn/e/space/?userid=18136&yqcq.xml?feed_filter=20160902DgFmy.html
http://www.yqcq.gov.cn/e/space/?userid=18137&yqcq.xml?feed_filter=20160902Hm1Up.html
http://www.yqcq.gov.cn/e/space/?userid=18138&yqcq.xml?feed_filter=20160902CwmkX.html
http://www.yqcq.gov.cn/e/space/?userid=18140&yqcq.xml?feed_filter=201609026Nfh2.html
http://www.yqcq.gov.cn/e/space/?userid=18141&yqcq.xml?feed_filter=20160902OWsrv.html
http://www.yqcq.gov.cn/e/space/?userid=18142&yqcq.xml?feed_filter=20160902r8UQp.html
http://www.yqcq.gov.cn/e/space/?userid=18143&yqcq.xml?feed_filter=20160902SviTH.html
http://www.yqcq.gov.cn/e/space/?userid=18144&yqcq.xml?feed_filter=20160902yknrd.html
http://www.yqcq.gov.cn/e/space/?userid=18145&yqcq.xml?feed_filter=20160902m1I7P.html
http://www.yqcq.gov.cn/e/space/?userid=18146&yqcq.xml?feed_filter=20160902RYoIJ.html
http://www.yqcq.gov.cn/e/space/?userid=18147&yqcq.xml?feed_filter=20160902HtY3O.html
http://www.yqcq.gov.cn/e/space/?userid=18148&yqcq.xml?feed_filter=20160902JvCir.html
http://www.yqcq.gov.cn/e/space/?userid=18149&yqcq.xml?feed_filter=20160902RkJoH.html
http://www.yqcq.gov.cn/e/space/?userid=18150&yqcq.xml?feed_filter=201609023RgbA.html
http://www.yqcq.gov.cn/e/space/?userid=18151&yqcq.xml?feed_filter=20160902q3kOs.html
http://www.yqcq.gov.cn/e/space/?userid=18153&yqcq.xml?feed_filter=20160902fIwqv.html
http://www.yqcq.gov.cn/e/space/?userid=18154&yqcq.xml?feed_filter=20160902NAfHo.html
http://www.yqcq.gov.cn/e/space/?userid=18155&yqcq.xml?feed_filter=20160902bUfPq.html
http://www.yqcq.gov.cn/e/space/?userid=18156&yqcq.xml?feed_filter=20160902OavJo.html
http://www.yqcq.gov.cn/e/space/?userid=18157&yqcq.xml?feed_filter=20160902Gve5t.html
http://www.yqcq.gov.cn/e/space/?userid=18158&yqcq.xml?feed_filter=201609025bZix.html
http://www.yqcq.gov.cn/e/space/?userid=18159&yqcq.xml?feed_filter=20160902Y9lPk.html
http://www.yqcq.gov.cn/e/space/?userid=18160&yqcq.xml?feed_filter=20160902rlVCI.html
http://www.yqcq.gov.cn/e/space/?userid=18161&yqcq.xml?feed_filter=201609022FVWj.html
http://www.yqcq.gov.cn/e/space/?userid=18162&yqcq.xml?feed_filter=20160902toXI4.html
http://www.yqcq.gov.cn/e/space/?userid=18163&yqcq.xml?feed_filter=20160902jGWCn.html
http://www.yqcq.gov.cn/e/space/?userid=18164&yqcq.xml?feed_filter=20160902ip2tR.html
http://www.yqcq.gov.cn/e/space/?userid=18165&yqcq.xml?feed_filter=20160902heoWI.html
http://www.yqcq.gov.cn/e/space/?userid=18166&yqcq.xml?feed_filter=20160902eXsPU.html
http://www.yqcq.gov.cn/e/space/?userid=18167&yqcq.xml?feed_filter=20160902bGWc2.html
http://www.yqcq.gov.cn/e/space/?userid=18168&yqcq.xml?feed_filter=201609025c8Zy.html
http://www.yqcq.gov.cn/e/space/?userid=18169&yqcq.xml?feed_filter=20160902ihzHY.html
http://www.yqcq.gov.cn/e/space/?userid=18170&yqcq.xml?feed_filter=20160902tuCHh.html
http://www.yqcq.gov.cn/e/space/?userid=18171&yqcq.xml?feed_filter=20160902ScLiQ.html
http://www.yqcq.gov.cn/e/space/?userid=18172&yqcq.xml?feed_filter=20160902y1QXo.html
http://www.yqcq.gov.cn/e/space/?userid=18173&yqcq.xml?feed_filter=20160902s4UnJ.html
http://www.yqcq.gov.cn/e/space/?userid=18174&yqcq.xml?feed_filter=20160902VpIJ9.html
http://www.yqcq.gov.cn/e/space/?userid=18175&yqcq.xml?feed_filter=201609029YOqH.html
http://www.yqcq.gov.cn/e/space/?userid=18176&yqcq.xml?feed_filter=20160902rh1oU.html
http://www.yqcq.gov.cn/e/space/?userid=18177&yqcq.xml?feed_filter=20160902IqpJK.html
http://www.yqcq.gov.cn/e/space/?userid=18178&yqcq.xml?feed_filter=20160902TkzlX.html
http://www.yqcq.gov.cn/e/space/?userid=18179&yqcq.xml?feed_filter=201609027qJbI.html
http://www.yqcq.gov.cn/e/space/?userid=18180&yqcq.xml?feed_filter=20160902Y1WFv.html
http://www.yqcq.gov.cn/e/space/?userid=18181&yqcq.xml?feed_filter=20160902M5186.html
http://www.yqcq.gov.cn/e/space/?userid=18182&yqcq.xml?feed_filter=20160902lHyPE.html
http://www.yqcq.gov.cn/e/space/?userid=18183&yqcq.xml?feed_filter=20160902b9YOI.html
http://www.yqcq.gov.cn/e/space/?userid=18184&yqcq.xml?feed_filter=20160902L3SMi.html
http://www.yqcq.gov.cn/e/space/?userid=18186&yqcq.xml?feed_filter=20160902MQJdq.html
http://www.yqcq.gov.cn/e/space/?userid=18187&yqcq.xml?feed_filter=20160902JrCAy.html
http://www.yqcq.gov.cn/e/space/?userid=18188&yqcq.xml?feed_filter=20160902OQ3Na.html
http://www.yqcq.gov.cn/e/space/?userid=18189&yqcq.xml?feed_filter=20160902eUTLW.html
http://www.yqcq.gov.cn/e/space/?userid=18190&yqcq.xml?feed_filter=20160902CzlTA.html
http://www.yqcq.gov.cn/e/space/?userid=18191&yqcq.xml?feed_filter=201609029DZMV.html
http://www.yqcq.gov.cn/e/space/?userid=18192&yqcq.xml?feed_filter=20160902ev8wI.html
http://www.yqcq.gov.cn/e/space/?userid=18193&yqcq.xml?feed_filter=20160902DshMc.html
http://www.yqcq.gov.cn/e/space/?userid=18194&yqcq.xml?feed_filter=20160902wP4V7.html
http://www.yqcq.gov.cn/e/space/?userid=18195&yqcq.xml?feed_filter=20160902SBGv7.html
http://www.yqcq.gov.cn/e/space/?userid=18196&yqcq.xml?feed_filter=20160902QpKki.html
http://www.yqcq.gov.cn/e/space/?userid=18198&yqcq.xml?feed_filter=20160902UauZI.html
http://www.yqcq.gov.cn/e/space/?userid=18199&yqcq.xml?feed_filter=20160902CVesh.html
http://www.yqcq.gov.cn/e/space/?userid=18200&yqcq.xml?feed_filter=20160902FbzKY.html
http://www.yqcq.gov.cn/e/space/?userid=18201&yqcq.xml?feed_filter=20160902Re4o7.html
http://www.yqcq.gov.cn/e/space/?userid=18202&yqcq.xml?feed_filter=20160902da6BL.html
http://www.yqcq.gov.cn/e/space/?userid=18203&yqcq.xml?feed_filter=20160902vKljp.html
http://www.yqcq.gov.cn/e/space/?userid=18204&yqcq.xml?feed_filter=20160902R1ycm.html
http://www.yqcq.gov.cn/e/space/?userid=18205&yqcq.xml?feed_filter=20160902765sC.html
http://www.yqcq.gov.cn/e/space/?userid=18206&yqcq.xml?feed_filter=2016090242nSC.html
http://www.yqcq.gov.cn/e/space/?userid=18207&yqcq.xml?feed_filter=20160902LA2un.html
http://www.yqcq.gov.cn/e/space/?userid=18208&yqcq.xml?feed_filter=20160902J1LdR.html
http://www.yqcq.gov.cn/e/space/?userid=18209&yqcq.xml?feed_filter=2016090219KA2.html
http://www.yqcq.gov.cn/e/space/?userid=18210&yqcq.xml?feed_filter=201609022hI49.html
http://www.yqcq.gov.cn/e/space/?userid=18212&yqcq.xml?feed_filter=20160902UZpuS.html
http://www.yqcq.gov.cn/e/space/?userid=18213&yqcq.xml?feed_filter=20160902bOYAn.html
http://www.yqcq.gov.cn/e/space/?userid=18214&yqcq.xml?feed_filter=20160902TZkEB.html
http://www.yqcq.gov.cn/e/space/?userid=18215&yqcq.xml?feed_filter=20160902dpiJT.html
http://www.yqcq.gov.cn/e/space/?userid=18216&yqcq.xml?feed_filter=20160902DHnip.html
http://www.yqcq.gov.cn/e/space/?userid=18217&yqcq.xml?feed_filter=20160902CR1t9.html
http://www.yqcq.gov.cn/e/space/?userid=18218&yqcq.xml?feed_filter=201609028fpTt.html
http://www.yqcq.gov.cn/e/space/?userid=18221&yqcq.xml?feed_filter=20160902mROMU.html
http://www.yqcq.gov.cn/e/space/?userid=18222&yqcq.xml?feed_filter=20160902V5Yh2.html
http://www.yqcq.gov.cn/e/space/?userid=18223&yqcq.xml?feed_filter=20160902CXIBi.html
http://www.yqcq.gov.cn/e/space/?userid=18224&yqcq.xml?feed_filter=20160902bpRe6.html
http://www.yqcq.gov.cn/e/space/?userid=18225&yqcq.xml?feed_filter=20160902oWGQn.html
http://www.yqcq.gov.cn/e/space/?userid=18227&yqcq.xml?feed_filter=20160902kh3FU.html
http://www.yqcq.gov.cn/e/space/?userid=18228&yqcq.xml?feed_filter=20160902NjM4Z.html
http://www.yqcq.gov.cn/e/space/?userid=18229&yqcq.xml?feed_filter=201609022Zias.html
http://www.yqcq.gov.cn/e/space/?userid=18230&yqcq.xml?feed_filter=20160902ekgaS.html
http://www.yqcq.gov.cn/e/space/?userid=18231&yqcq.xml?feed_filter=201609022ICWo.html
http://www.yqcq.gov.cn/e/space/?userid=18232&yqcq.xml?feed_filter=20160902T6bDh.html
http://www.yqcq.gov.cn/e/space/?userid=18233&yqcq.xml?feed_filter=201609025Quz2.html
http://www.yqcq.gov.cn/e/space/?userid=18234&yqcq.xml?feed_filter=20160902PfjpN.html
http://www.yqcq.gov.cn/e/space/?userid=18235&yqcq.xml?feed_filter=20160902bDyrE.html
http://www.yqcq.gov.cn/e/space/?userid=18237&yqcq.xml?feed_filter=20160902irWD9.html
http://www.yqcq.gov.cn/e/space/?userid=18239&yqcq.xml?feed_filter=201609024YZsd.html
http://www.yqcq.gov.cn/e/space/?userid=18240&yqcq.xml?feed_filter=20160902O4fJu.html
http://www.yqcq.gov.cn/e/space/?userid=18241&yqcq.xml?feed_filter=20160902W7nRj.html
http://www.yqcq.gov.cn/e/space/?userid=18242&yqcq.xml?feed_filter=201609027dMxe.html
http://www.yqcq.gov.cn/e/space/?userid=18243&yqcq.xml?feed_filter=20160902vfaNx.html
http://www.yqcq.gov.cn/e/space/?userid=18244&yqcq.xml?feed_filter=20160902VYq1I.html
http://www.yqcq.gov.cn/e/space/?userid=18245&yqcq.xml?feed_filter=20160902kitaL.html
http://www.yqcq.gov.cn/e/space/?userid=18246&yqcq.xml?feed_filter=20160902r4aFK.html
http://www.yqcq.gov.cn/e/space/?userid=18247&yqcq.xml?feed_filter=20160902JVPj1.html
http://www.yqcq.gov.cn/e/space/?userid=18248&yqcq.xml?feed_filter=20160902Dysjf.html
http://www.yqcq.gov.cn/e/space/?userid=18249&yqcq.xml?feed_filter=20160902wRuZD.html
http://www.yqcq.gov.cn/e/space/?userid=18251&yqcq.xml?feed_filter=20160902F5lEM.html
http://www.yqcq.gov.cn/e/space/?userid=18252&yqcq.xml?feed_filter=20160902ExcuL.html
http://www.yqcq.gov.cn/e/space/?userid=18253&yqcq.xml?feed_filter=201609024Shod.html
http://www.yqcq.gov.cn/e/space/?userid=18254&yqcq.xml?feed_filter=20160902PbN9O.html
http://www.yqcq.gov.cn/e/space/?userid=18255&yqcq.xml?feed_filter=20160902Z7NEy.html
http://www.yqcq.gov.cn/e/space/?userid=18257&yqcq.xml?feed_filter=20160902a6mEh.html
http://www.yqcq.gov.cn/e/space/?userid=18258&yqcq.xml?feed_filter=20160902bvYmU.html
http://www.yqcq.gov.cn/e/space/?userid=18259&yqcq.xml?feed_filter=201609024UN5W.html
http://www.yqcq.gov.cn/e/space/?userid=18261&yqcq.xml?feed_filter=20160902DulbW.html
http://www.yqcq.gov.cn/e/space/?userid=18262&yqcq.xml?feed_filter=20160902x8Z7R.html
http://www.yqcq.gov.cn/e/space/?userid=18264&yqcq.xml?feed_filter=20160902P1XI8.html
http://www.yqcq.gov.cn/e/space/?userid=18265&yqcq.xml?feed_filter=20160902P8AaO.html
http://www.yqcq.gov.cn/e/space/?userid=18266&yqcq.xml?feed_filter=20160902ALGFS.html
http://www.yqcq.gov.cn/e/space/?userid=18267&yqcq.xml?feed_filter=20160902RvOl6.html
http://www.yqcq.gov.cn/e/space/?userid=18269&yqcq.xml?feed_filter=20160902gLaZw.html
http://www.yqcq.gov.cn/e/space/?userid=18270&yqcq.xml?feed_filter=20160902nomxC.html
http://www.yqcq.gov.cn/e/space/?userid=18272&yqcq.xml?feed_filter=20160902AkKac.html
http://www.yqcq.gov.cn/e/space/?userid=18273&yqcq.xml?feed_filter=20160902OZN6V.html
http://www.yqcq.gov.cn/e/space/?userid=18274&yqcq.xml?feed_filter=20160902RY82p.html
http://www.yqcq.gov.cn/e/space/?userid=18276&yqcq.xml?feed_filter=20160902YNRFs.html
http://www.yqcq.gov.cn/e/space/?userid=18278&yqcq.xml?feed_filter=20160902xwPuG.html
http://www.yqcq.gov.cn/e/space/?userid=18280&yqcq.xml?feed_filter=20160902Dw52Q.html
http://www.yqcq.gov.cn/e/space/?userid=18281&yqcq.xml?feed_filter=20160902n1kEy.html
http://www.yqcq.gov.cn/e/space/?userid=18283&yqcq.xml?feed_filter=20160902Bu6VJ.html
http://www.yqcq.gov.cn/e/space/?userid=18284&yqcq.xml?feed_filter=20160902AQyjv.html
http://www.yqcq.gov.cn/e/space/?userid=18285&yqcq.xml?feed_filter=20160902blvMk.html
http://www.yqcq.gov.cn/e/space/?userid=18286&yqcq.xml?feed_filter=20160902xHeyF.html
http://www.yqcq.gov.cn/e/space/?userid=18287&yqcq.xml?feed_filter=20160902Xq8tx.html
http://www.yqcq.gov.cn/e/space/?userid=18288&yqcq.xml?feed_filter=2016090235yOG.html
http://www.yqcq.gov.cn/e/space/?userid=18290&yqcq.xml?feed_filter=20160902v8ebU.html
http://www.yqcq.gov.cn/e/space/?userid=18292&yqcq.xml?feed_filter=20160902wsLrD.html
http://www.yqcq.gov.cn/e/space/?userid=18294&yqcq.xml?feed_filter=20160902FPUfq.html
http://www.yqcq.gov.cn/e/space/?userid=18296&yqcq.xml?feed_filter=20160902ljWQB.html
http://www.yqcq.gov.cn/e/space/?userid=18297&yqcq.xml?feed_filter=20160902UtHT7.html
http://www.yqcq.gov.cn/e/space/?userid=18298&yqcq.xml?feed_filter=20160902xumZt.html
http://www.yqcq.gov.cn/e/space/?userid=18300&yqcq.xml?feed_filter=20160902wbuRB.html
http://www.yqcq.gov.cn/e/space/?userid=18301&yqcq.xml?feed_filter=20160902YmFWo.html
http://www.yqcq.gov.cn/e/space/?userid=18302&yqcq.xml?feed_filter=20160902DBIbm.html
http://www.yqcq.gov.cn/e/space/?userid=18303&yqcq.xml?feed_filter=20160902aY4id.html
http://www.yqcq.gov.cn/e/space/?userid=18306&yqcq.xml?feed_filter=20160902nhMas.html
http://www.yqcq.gov.cn/e/space/?userid=18307&yqcq.xml?feed_filter=20160902ydCmN.html
http://www.yqcq.gov.cn/e/space/?userid=18308&yqcq.xml?feed_filter=20160902fxwhd.html
http://www.yqcq.gov.cn/e/space/?userid=18309&yqcq.xml?feed_filter=20160902lD6VJ.html
http://www.yqcq.gov.cn/e/space/?userid=18312&yqcq.xml?feed_filter=20160902Sg1nI.html
http://www.yqcq.gov.cn/e/space/?userid=18313&yqcq.xml?feed_filter=20160902QirjW.html
http://www.yqcq.gov.cn/e/space/?userid=18314&yqcq.xml?feed_filter=20160902GDOcz.html
http://www.yqcq.gov.cn/e/space/?userid=18317&yqcq.xml?feed_filter=20160902uCt3m.html
http://www.yqcq.gov.cn/e/space/?userid=18318&yqcq.xml?feed_filter=20160902iNtG2.html


作者:fwlhy1216 发表于2016/9/2 23:33:16 原文链接
阅读:37 评论:0 查看评论

RxJava使用方法简析

$
0
0

我们很懒,所以我们就开发了很多很多的框架,用来节省我们的工作量、工作时间。异步操作难免是避不开的,官方提供的Handler机制以及AsyncTask ,都能实现异步操作,但是代码随着逻辑的增多而变得复杂,看上去混乱不堪有时候简直,所以,简洁高效的代码也是我们的追求。因此,为了异步,为了简洁,RxJava应运而生,来解决了以上的问题。

1.RxJava 地址以及添加

github地址:

https://github.com/ReactiveX/RxJava

https://github.com/ReactiveX/RxAndroid

依赖库添加:

compile ‘io.reactivex:rxjava:1.1.6’

compile ‘io.reactivex:rxandroid:1.2.1’

2.RxJava的用法示例

RxJava 有四个基本概念:Observable (可观察者,即被观察者)、 Observer (观察者)、 subscribe (订阅)、事件。Observable 和 Observer 通过 subscribe() 方法实现订阅关系,从而 Observable 可以在需要的时候发出事件来通知 Observer。

与传统观察者模式不同, RxJava 的事件回调方法除了普通事件 onNext() (相当于 onClick() / onEvent())之外,还定义了两个特殊的事件:onCompleted() 和 onError()。

onCompleted(): 事件队列完结。RxJava 不仅把每个事件单独处理,还会把它们看做一个队列。RxJava 规定,当不会再有新的 onNext() 发出时,需要触发 onCompleted() 方法作为标志。
onError(): 事件队列异常。在事件处理过程中出异常时,onError() 会被触发,同时队列自动终止,不允许再有事件发出。
在一个正确运行的事件序列中, onCompleted() 和 onError() 有且只有一个,并且是事件序列中的最后一个。需要注意的是,onCompleted() 和 onError() 二者也是互斥的,即在队列中调用了其中一个,就不应该再调用另一个。

2-1:基本实现

先来看一下最基础的用法,

Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                Log.d(TAG, "call: threadId:"+Thread.currentThread().getId());
                subscriber.onStart();
                subscriber.onNext("Hello World!");
                subscriber.onCompleted();
            }
        })
          .subscribe(new Observer<String>() {
              @Override
              public void onCompleted() {
                  Log.d(TAG, "onCompleted: threadId:"+Thread.currentThread().getId());
              }

              @Override
              public void onError(Throwable e) {
                  Log.e(TAG, "onError: threadId:"+Thread.currentThread().getId());
              }

              @Override
              public void onNext(String s) {
                  Log.d(TAG, "onNext: threadId:"+Thread.currentThread().getId());
                  Log.i(TAG, "onNext: s = "+s);
              }
          });

打印的结果如下所示:

09-03 11:43:57.322 16813-16813/? D/RxIavaDemo: call: threadId:1
09-03 11:43:57.322 16813-16813/? D/RxIavaDemo: onNext: threadId:1
09-03 11:43:57.322 16813-16813/? I/RxIavaDemo: onNext: s = Hello World!
09-03 11:43:57.322 16813-16813/? D/RxIavaDemo: onCompleted: threadId:1

从上可以看出,事件的处理和结果的接收都是在同一个线程里面处理的。但是,Rxjava的意义何在,异步呢?别急,看以下代码的处理,你就会发现了,异步原来是这么的简单。

        Log.i(TAG, "testFunction: threadId:"+Thread.currentThread().getId());
        Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                Log.d(TAG, "call: threadId:"+Thread.currentThread().getId());
                subscriber.onStart();
                subscriber.onNext("Hello World!");
                subscriber.onCompleted();
            }})
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<String>() {
                    @Override
                    public void onCompleted() {
                        Log.d(TAG, "onCompleted: threadId:" + Thread.currentThread().getId());
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e(TAG, "onError: threadId:" + Thread.currentThread().getId());
                    }

                    @Override
                    public void onNext(String s) {
                        Log.d(TAG, "onNext: threadId:" + Thread.currentThread().getId());
                        Log.i(TAG, "onNext: s = " + s);
                    }
                });

对比以上代码,我们简简单单的添加了两行代码:

 .subscribeOn(Schedulers.io())
 .observeOn(AndroidSchedulers.mainThread())

那么接下俩看以下打印的结果如何:

09-03 11:51:11.354 18454-18454/? I/RxIavaDemo: testFunction: threadId:1
09-03 11:51:11.413 18454-18484/? D/RxIavaDemo: call: threadId:24076
09-03 11:51:11.444 18454-18454/? D/RxIavaDemo: onNext: threadId:1
09-03 11:51:11.444 18454-18454/? I/RxIavaDemo: onNext: s = Hello World!
09-03 11:51:11.444 18454-18454/? D/RxIavaDemo: onCompleted: threadId:1

看见了没,第二行threadId与其它的threadId很明显的不一样啊,说明我们在处理事件的时候,发生在了一个新的线程里面,而结果的接收,还是在主线程里面操作的。怎么样,只要添加两句话,异步立马就实现了,异步处理耗时操作,就是这么easy。

以上是RxJava的很基础很简单的一个用法,那么我们接着往下看,比如我们有一组需求把一个String数组的字符串,单个打印出来,我们用Rxjava怎么实现呢?看代码:

        Log.i(TAG, "testFunction: threadId:"+Thread.currentThread().getId());
        Observable.from(new String[]{"one","two","three","four"})
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<String>() {
                    @Override
                    public void onCompleted() {
                        Log.d(TAG, "onCompleted: threadId:" + Thread.currentThread().getId());
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e(TAG, "onError: threadId:" + Thread.currentThread().getId());
                    }

                    @Override
                    public void onNext(String s) {
                        Log.i(TAG, "onNext: s = " + s);
                    }
                });

Observable的from方法是给我们封装好的,我们直接拿来用就可以了。具体参数含义以后再说,打印的结果看下:

09-03 11:59:40.799 20463-20463/? I/RxIavaDemo: testFunction: threadId:1
09-03 11:59:40.838 20463-20463/? I/RxIavaDemo: onNext: s = one
09-03 11:59:40.838 20463-20463/? I/RxIavaDemo: onNext: s = two
09-03 11:59:40.838 20463-20463/? I/RxIavaDemo: onNext: s = three
09-03 11:59:40.838 20463-20463/? I/RxIavaDemo: onNext: s = four
09-03 11:59:40.838 20463-20463/? D/RxIavaDemo: onCompleted: threadId:1

再来看一个官方提供的方法:

        Log.i(TAG, "testFunction: threadId:"+Thread.currentThread().getId());
        Observable.just("one","two","three","four")
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<String>() {
                    @Override
                    public void onCompleted() {
                        Log.d(TAG, "onCompleted: threadId:" + Thread.currentThread().getId());
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e(TAG, "onError: threadId:" + Thread.currentThread().getId());
                    }

                    @Override
                    public void onNext(String s) {
                        Log.i(TAG, "onNext: s = " + s);
                    }
                });

打印结果如下:

09-03 14:06:32.051 9822-9822/? I/RxIavaDemo: testFunction: threadId:1
09-03 14:06:32.089 9822-9822/? I/RxIavaDemo: onNext: s = one
09-03 14:06:32.089 9822-9822/? I/RxIavaDemo: onNext: s = two
09-03 14:06:32.089 9822-9822/? I/RxIavaDemo: onNext: s = three
09-03 14:06:32.089 9822-9822/? I/RxIavaDemo: onNext: s = four
09-03 14:06:32.089 9822-9822/? D/RxIavaDemo: onCompleted: threadId:1

和上面的from一样,结果并无二致。

2-2:转换

以上的都是小儿科,现在最牛逼的地方来了。比如说,我想把一组字符串{“1”,“2”,“3”,“4”}转成int类型,该咋办呢?别急,看Rxjava是如何做到的,

        Log.i(TAG, "testFunction: threadId:"+Thread.currentThread().getId());
        Observable.just("1","2","3","4")
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .map(new Func1<String, Integer>() {

                    @Override
                    public Integer call(String s) {
                        return Integer.parseInt(s);
                    }
                })
                .subscribe(new Action1<Integer>() {
                    @Override
                    public void call(Integer integer) {
                        Log.i(TAG, "call: integer = "+integer);
                    }
                });

很简单,添加一个map函数,在里面做string—>int类型的转换。下面看一下打印结果如何:

09-03 14:17:42.964 11974-11974/? I/RxIavaDemo: testFunction: threadId:1
09-03 14:17:43.002 11974-11974/? I/RxIavaDemo: call: integer = 1
09-03 14:17:43.002 11974-11974/? I/RxIavaDemo: call: integer = 2
09-03 14:17:43.002 11974-11974/? I/RxIavaDemo: call: integer = 3
09-03 14:17:43.002 11974-11974/? I/RxIavaDemo: call: integer = 4

map转换,是一对一的转换,像示例当中,我们把string转成int,但是当我们需要一对多的转换,该怎么做呢?比如说,定义一个学生类:Student.java:

public class Student{

        private String name;

        private List<String> courses;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public List<String> getCourses() {
            return courses;
        }

        public void setCourses(List<String> courses) {
            this.courses = courses;
        }
    }

里面定义了学生的名字,以及学生需要学习的课程数组。这个时候,我要打印课程列表的时候,该怎么办呢?首先,你可能会这样,

        Student student1 = new Student();
        student1.setName("Dandy");
        List<String> courses = new ArrayList<>();
        courses.add("语文");
        courses.add("数学");
        courses.add("英语");
        student1.setCourses(courses);

        Student student2 = new Student();
        student2.setName("Seeker");
        List<String> courses2 = new ArrayList<>();
        courses2.add("化学");
        courses2.add("地理");
        courses2.add("政治");
        student2.setCourses(courses2);

        Observable.just(student1,student2)
                .subscribe(new Action1<Student>() {
                    @Override
                    public void call(Student student) {
                        Log.i(TAG, "call: name = "+student.getName());
                        List<String> course = student.getCourses();
                        for(String str:course){
                            Log.i(TAG, "call: str = "+str);
                        }
                    }
                });

打印的结果如下:

09-03 14:44:30.318 16819-16819/? I/RxIavaDemo: testFunction: threadId:1
09-03 14:44:30.325 16819-16819/? I/RxIavaDemo: call: name = Dandy
09-03 14:44:30.325 16819-16819/? I/RxIavaDemo: call: str = 语文
09-03 14:44:30.325 16819-16819/? I/RxIavaDemo: call: str = 数学
09-03 14:44:30.325 16819-16819/? I/RxIavaDemo: call: str = 英语
09-03 14:44:30.325 16819-16819/? I/RxIavaDemo: call: name = Seeker
09-03 14:44:30.325 16819-16819/? I/RxIavaDemo: call: str = 化学
09-03 14:44:30.325 16819-16819/? I/RxIavaDemo: call: str = 地理
09-03 14:44:30.325 16819-16819/? I/RxIavaDemo: call: str = 政治

到时候想了,我不想执行一个for循环,该怎么办呢?上面提到的,转换,对了,我们做转换不就成,简单的通俗的一点理解,我转换一次,是list,那么我再转换一次不就是string了吗,怎么写呢?看下嘛:

        Observable.just(student1,student2)
                  .flatMap(new Func1<Student, Observable<String>>() {
                      @Override
                      public Observable<String> call(Student student) {
                          return Observable.from(student.getCourses());
                      }
                  })
                .subscribe(new Action1<String>() {
                    @Override
                    public void call(String s) {
                        Log.i(TAG, "call: s = "+s);     
                    }
                });

这里我们用到了flatmap这一函数,按通俗的一点理解:我们首先把Student转成了Observable,然后呢,又把student.getCourses()转成string挨个打印出来,结果如下:

09-03 14:54:30.340 18833-18833/? I/RxIavaDemo: testFunction: threadId:1
09-03 14:54:30.359 18833-18833/? I/RxIavaDemo: call: s = 语文
09-03 14:54:30.359 18833-18833/? I/RxIavaDemo: call: s = 数学
09-03 14:54:30.359 18833-18833/? I/RxIavaDemo: call: s = 英语
09-03 14:54:30.359 18833-18833/? I/RxIavaDemo: call: s = 化学
09-03 14:54:30.359 18833-18833/? I/RxIavaDemo: call: s = 地理
09-03 14:54:30.359 18833-18833/? I/RxIavaDemo: call: s = 政治

显然,我们要实现的功能做到了。
RxJava就是这么简单,就是这样简洁,就是这么异步,额,这个异步吗,只要你想,就一定可以实现,通过以上简单的用法示例,现总结流程如下:
这里写图片描述

总结不一定准确,但是我理解就行了,嘎嘎!

作者:tabolt 发表于2016/9/3 14:59:52 原文链接
阅读:91 评论:0 查看评论

android6.0 Activity(四) Surface创建

$
0
0


原文:http://blog.csdn.net/luoshengyang/article/details/8303098,原文代码比较老了,但是核心不变。在原文基础上修改了一些代码,以及加入自己少量的理解。

在上一篇博客中,我们分析了应用程序窗口连接到WindowManagerService服务的过程。在这个过程中,WindowManagerService服务会为应用程序窗口创建过一个到SurfaceFlinger服务的连接。有了这个连接之后,WindowManagerService服务就可以为应用程序窗口创建绘图表面了,以便可以用来渲染窗口的UI。在本文中,我们就详细分析应用程序窗口的绘图表面的创建过程。


一、Surface创建过程介绍

这节主要是把http://blog.csdn.net/luoshengyang/article/details/8303098这篇博客复制过来的

每一个在C++层实现的应用程序窗口都需要有一个绘图表面,然后才可以将自己的UI表现出来。这个绘图表面是需要由应用程序进程请求SurfaceFlinger服务来创建的,在SurfaceFlinger服务内部使用一个Layer对象来描述,同时,SurfaceFlinger服务会返回一个实现了ISurface接口的Binder本地对象给应用程序进程,于是,应用程序进程就可以获得一个实现了ISurface接口的Binder代理对象。有了这个实现了ISurface接口的Binder代理对象之后,在C++层实现的应用程序窗口就可以请求SurfaceFlinger服务分配图形缓冲区以及渲染已经填充好UI数据的图形缓冲区了。

  对于在Java层实现的Android应用程序窗口来说,它也需要请求SurfaceFlinger服务为它创建绘图表面,这个绘图表面使用一个Surface对象来描述。由于在Java层实现的Android应用程序窗口还要接受WindowManagerService服务管理,因此,它的绘图表面的创建流程就会比在C++层实现的应用程序窗口复杂一些。具体来说,就是在在Java层实现的Android应用程序窗口的绘图表面是通过两个Surface对象来描述,一个是在应用程序进程这一侧创建的,另一个是在WindowManagerService服务这一侧创建的,它们对应于SurfaceFlinger服务这一侧的同一个Layer对象,如图所示:

 在应用程序进程这一侧,每一个应用程序窗口,即每一个Activity组件,都有一个关联的Surface对象,这个Surface对象是保在在一个关联的ViewRootImpl对象的成员变量mSurface中的。这里我们只关注Surface类的实现。在应用程序进程这一侧,每一个Java层的Surface对都对应有一个C++层的Surface对象。

   在WindowManagerService服务这一侧,每一个应用程序窗口,即每一个Activity组件,都有一个对应的WindowState对象,这个WindowState对象的成员变量mSurface同样是指向了一个Surface对象,在WindowManagerService服务这一侧,每一个Java层的Surface对都对应有一个C++层的SurfaceControl对象。

一个应用程序窗口分别位于应用程序进程和WindowManagerService服务中的两个Surface对象有什么区别呢?虽然它们都是用来操作位于SurfaceFlinger服务中的同一个Layer对象的,不过,它们的操作方式却不一样。具体来说,就是位于应用程序进程这一侧的Surface对象负责绘制应用程序窗口的UI,即往应用程序窗口的图形缓冲区填充UI数据,而位于WindowManagerService服务这一侧的Surface对象负责设置应用程序窗口的属性,例如位置、大小等属性。这两种不同的操作方式分别是通过C++层的Surface对象和SurfaceControl对象来完成的,因此,位于应用程序进程和WindowManagerService服务中的两个Surface对象的用法是有区别的。之所以会有这样的区别,是因为绘制应用程序窗口是独立的,由应用程序进程来完即可,而设置应用程序窗口的属性却需要全局考虑,即需要由WindowManagerService服务来统筹安排,例如,一个应用程序窗口的Z轴坐标大小要考虑它到的窗口类型以及它与系统中的其它窗口的关系。

说到这里,另外一个问题又来了,由于一个应用程序窗口对应有两个Surface对象,那么它们是如何创建出来的呢?简单地说,就是按照以下步骤来创建:

       1. 应用程序进程请求WindowManagerService服务为一个应用程序窗口创建一个Surface对象;

       2. WindowManagerService服务请求SurfaceFlinger服务创建一个Layer对象,并且获得一个ISurface接口;

       3. WindowManagerService服务将获得的ISurface接口保存在其内部的一个Surface对象中,并且将该ISurface接口返回给应用程序进程;

       4. 应用程序进程得到WindowManagerService服务返回的ISurface接口之后,再将其封装成其内部的另外一个Surface对象中。

 那么应用程序窗口的绘图表面又是什么时候创建的呢?一般是在不存在的时候就创建,因为应用程序窗口在运行的过程中,它的绘图表面会根据需要来销毁以及重新创建的,例如,应用程序窗口在第一次显示的时候,就会请求WindowManagerService服务为其创建绘制表面。从前面Android应用程序窗口(Activity)的视图对象(View)的创建过程分析一文可以知道,当一个应用程序窗口被激活并且它的视图对象创建完成之后,应用程序进程就会调用与其所关联的一个ViewRootImpl对象的成员函数requestLayout来请求对其UI进行布局以及显示。由于这时候应用程序窗口的绘图表面尚未创建,因此,ViewRoot类的成员函数requestLayout就会请求WindowManagerService服务来创建绘图表面。接下来,我们就从ViewRoot类的成员函数requestLayout开始,分析应用程序窗口的绘图表面的创建过程,如图所示:

二、requestLayout函数

之前我们分析过在ViewRootImpl的setView函数中调用了requestLayout函数,现在我们来分析下这个函数, ViewRootImpl类的成员函数requestLayout首先调用另外一个成员函数checkThread来检查当前线程是否就是创建当前正在处理的ViewRootImpl对象的线程。如果不是的话,那么ViewRoot类的成员函数checkThread就会抛出一个异常出来。ViewRoot类是从Handler类继承下来的,用来处理应用程序窗口的UI布局和渲染等消息。由于这些消息都是与Ui相关的,因此它们就需要在UI线程中处理,这样我们就可以推断出当前正在处理的ViewRootImpl对象是要应用程序进程的UI线程中创建的。进一步地,我们就可以推断出ViewRootImpl类的成员函数checkThread实际上就是用来检查当前线程是否是应用程序进程的UI线程,如果不是的话,它就会抛出一个异常出来。

        通过了上述检查之后,ViewRootImpl类的成员函数requestLayout首先将其成员变量mLayoutRequested的值设置为true,表示应用程序进程的UI线程正在被请求执行一个UI布局操作,接着再调用另外一个成员函数scheduleTraversals来继续执行UI布局的操作。

    @Override
    public void requestLayout() {
        if (!mHandlingLayoutInLayoutRequest) {
            checkThread();
            mLayoutRequested = true;
            scheduleTraversals();
        }
    }

在scheduleTraversals函数中,ViewRootImpl类的成员变量mTraversalScheduled用来表示应用程序进程的UI线程是否已经在scheduleTraversals。如果已经调度了的话,它的值就会等于true。在这种情况下, ViewRootImpl类的成员函数scheduleTraversals就什么也不做,否则的话,它就会首先将成员变量mTraversalScheduled的值设置为true,就会发送一个消息来处理mTraversalRunnable这个Runnable。

    void scheduleTraversals() {
        if (!mTraversalScheduled) {
            mTraversalScheduled = true;
            mTraversalBarrier = mHandler.getLooper().getQueue().postSyncBarrier();
            mChoreographer.postCallback(
                    Choreographer.CALLBACK_TRAVERSAL, mTraversalRunnable, null);
            if (!mUnbufferedInputDispatch) {
                scheduleConsumeBatchedInput();
            }
            notifyRendererOfFramePending();
            pokeDrawLockIfNeeded();
        }
    }
我们来看下TraversalRunnable 这个Runnable,就是调用了doTraversal函数
    final class TraversalRunnable implements Runnable {
        @Override
        public void run() {
            doTraversal();
        }
    }

而在doTraversal这个函数中调用了performTraversals函数

    void doTraversal() {
        if (mTraversalScheduled) {
            mTraversalScheduled = false;
            mHandler.getLooper().getQueue().removeSyncBarrier(mTraversalBarrier);

            if (mProfile) {
                Debug.startMethodTracing("ViewAncestor");
            }

            performTraversals();

            if (mProfile) {
                Debug.stopMethodTracing();
                mProfile = false;
            }
        }
    }

         ViewRootImpl类的成员函数performTraversals的实现是相当复杂的,这里我们分析它的实现框架.

        在分析ViewRootImpl类的成员函数performTraversals的实现框架之前,我们首先了解ViewRoot类的以下五个成员变量:

        --mView:它的类型为View,但它实际上指向的是一个DecorView对象,用来描述应用程序窗口的顶级视图,这一点可以参考前面Android应用程序窗口(Activity)的视图对象(View)的创建过程分析一文。

        --mLayoutRequested:这是一个布尔变量,用来描述应用程序进程的UI线程是否需要正在被请求执行一个UI布局操作。

        --mFirst:这是一个布尔变量,用来描述应用程序进程的UI线程是否第一次处理一个应用程序窗口的UI。

        --mFullRedrawNeeded:这是一个布尔变量,用来描述应用程序进程的UI线程是否需要将一个应用程序窗口的全部区域都重新绘制。

        --mSurface:它指向一个Java层的Surface对象,用来描述一个应用程序窗口的绘图表面。

        注意,成员变量mSurface所指向的Surface对象在创建的时候,还没有在C++层有一个关联的Surface对象,因此,这时候它描述的就是一个无效的绘图表面。另外,这个Surface对象在应用程序窗口运行的过程中,也会可能被销毁,因此,这时候它描述的绘图表面也会变得无效。在上述两种情况中,我们都需要请求WindowManagerService服务来为当前正在处理的应用程序窗口创建有一个有效的绘图表面,以便可以在上面渲染UI。这个创建绘图表面的过程正是本文所要关心的。

        理解了上述五个成员变量之后,我们就可以分析ViewRootImpl类的成员函数performTraversals的实现框架了,如下所示:

        1. 将成员变量mView和mFullRedrawNeeded的值分别保存在本地变量host和fullRedrawNeeded中,并且将成员变量mTraversalScheduled的值设置为false,表示应用程序进程的UI线程中的消息已经被处理了。

        2. 本地变量newSurface用来描述当前正在处理的应用程序窗口在本轮的消息处理中是否新创建了一个绘图表面,它的初始值为false。

        3. 如果成员变量mLayoutRequested的值等于true,那么就表示应用程序进程的UI线程正在被请求对当前正在处理的应用程序窗口执行一个UI布局操作,因此,这时候就会调用本地变量host所描述的一个顶层视图对象的成员函数measure来测量位于各个层次的UI控件的大小。

        4. 如果当前正在处理的应用程序窗口的UI是第一次被处理,即成员变量mFirst的值等于true,或者当前正在处理的应用程序窗口的大小发生了变化,即本地变量windowShouldResize的值等于true,或者当前正在处理的应用程序窗口的边衬发生了变化,即本地变量insetsChanged的值等于true,或者正在处理的应用程序窗口的可见性发生了变化,即本地变量viewVisibilityChanged的值等于true,或者正在处理的应用程序窗口的UI布局参数发生了变化,即本地变量params指向了一个WindowManager.LayoutParams对象,那么应用程序进程的UI线程就会调用另外一个成员函数relayoutWindow来请求WindowManagerService服务重新布局系统中的所有窗口。WindowManagerService服务在重新布局系统中的所有窗口的过程中,如果发现当前正在处理的应用程序窗口尚未具有一个有效的绘图表面,那么就会为它创建一个有效的绘图表面,这一点是我们在本文中所要关注的。

        5. 应用程序进程的UI线程在调用ViewRootImpl类的成员函数relayoutWindow来请求WindowManagerService服务重新布局系统中的所有窗口之前,会调用成员变量mSurface所指向的一个Surface对象的成员函数isValid来判断它描述的是否是一个有效的绘图表面,并且将结果保存在本地变量hadSurface中。

        6. 应用程序进程的UI线程在调用ViewRootImpl类的成员函数relayoutWindow来请求WindowManagerService服务重新布局系统中的所有窗口之后,又会继续调用成员变量mSurface所指向的一个Surface对象的成员函数isValid来判断它描述的是否是一个有效的绘图表面。如果这时候成员变量mSurface所指向的一个Surface对象描述的是否是一个有效的绘图表面,并且本地变量hadSurface的值等于false,那么就说明WindowManagerService服务为当前正在处理的应用程序窗口新创建了一个有效的绘图表面,于是就会将本地变量newSurface和fullRedrawNeeded的值均修改为true。

        7. 应用程序进程的UI线程再次判断mLayoutRequested的值是否等于true。如果等于的话,那么就说明需要对当前正在处理的应用程序窗口的UI进行重新布局,这是通过调用本地变量host所描述的一个顶层视图对象的成员函数layout来实现的。在对当前正在处理的应用程序窗口的UI进行重新布局之前,应用程序进程的UI线程会将成员变量mLayoutRequested的值设置为false,表示之前所请求的一个UI布局操作已经得到处理了。

        8. 应用程序进程的UI线程接下来就要开始对当前正在处理的应用程序窗口的UI进行重新绘制了,不过在重绘之前,会先询问一下那些注册到当前正在处理的应用程序窗口中的Tree Observer,即调用它们的成员函数dispatchOnPreDraw,看看它们是否需要取消接下来的重绘操作,这个询问结果保存在本地变量cancelDraw中。

        9. 如果本地变量cancelDraw的值等于false,并且本地变量newSurface的值也等于false,那么就说明注册到当前正在处理的应用程序窗口中的Tree Observer不要求取消当前的这次重绘操作,并且当前正在处理的应用程序窗口也没有获得一个新的绘图表面。在这种情况下,应用程序进程的UI线程就会调用ViewRoot类的成员函数draw来对当前正在处理的应用程序窗口的UI进行重绘。在重绘之前,还会将ViewRoot类的成员变量mFullRedrawNeeded的值重置为false。

       10. 如果本地变量cancelDraw的值等于true,或者本地变量newSurface的值等于true,那么就说明注册到当前正在处理的应用程序窗口中的Tree Observer要求取消当前的这次重绘操作,或者当前正在处理的应用程序窗口获得了一个新的绘图表面。在这两种情况下,应用程序进程的UI线程就不能对当前正在处理的应用程序窗口的UI进行重绘了,而是要等到下一个消息到来的时候,再进行重绘,以便使得当前正在处理的应用程序窗口的各项参数可以得到重新设置。下一个消息需要马上被调度,因此,应用程序进程的UI线程就会重新执行ViewRootImpl类的成员函数scheduleTraversals。

       这样,我们就分析完成ViewRoot类的成员函数performTraversals的实现框架了,接下来我们就继续分析ViewRootImpl类的成员函数relayoutWindow的实现,以便可以看到当前正在处理的应用程序窗口的绘图表面是如何创建的。

在performTraversals函数中调用了relayoutWindow函数如下:

relayoutResult = relayoutWindow(params, viewVisibility, insetsPending);

然后在relayoutWindow函数中调用了WindowSession的relayout函数

        int relayoutResult = mWindowSession.relayout(
                mWindow, mSeq, params,
                (int) (mView.getMeasuredWidth() * appScale + 0.5f),
                (int) (mView.getMeasuredHeight() * appScale + 0.5f),
                viewVisibility, insetsPending ? WindowManagerGlobal.RELAYOUT_INSETS_PENDING : 0,
                mWinFrame, mPendingOverscanInsets, mPendingContentInsets, mPendingVisibleInsets,
                mPendingStableInsets, mPendingOutsets, mPendingConfiguration, mSurface);

我们先看看IWindowSession函数,这个函数是一个aidl需要在out目录下看其java文件

public interface IWindowSession extends android.os.IInterface  
{  
    ......  
  
    public static abstract class Stub extends android.os.Binder implements android.view.IWindowSession  
    {  
         ......  
  
         private static class Proxy implements android.view.IWindowSession  
         {  
             private android.os.IBinder mRemote;  
             ......  
  
             public int relayout(android.view.IWindow window, android.view.WindowManager.LayoutParams attrs,   
                   int requestedWidth, int requestedHeight, int viewVisibility, boolean insetsPending,   
                   android.graphics.Rect outFrame,   
                   android.graphics.Rect outContentInsets,   
                   android.graphics.Rect outVisibleInsets,   
                   android.content.res.Configuration outConfig,   
                   android.view.Surface outSurface) throws android.os.RemoteException  
            {  
                android.os.Parcel _data = android.os.Parcel.obtain();  
                android.os.Parcel _reply = android.os.Parcel.obtain();  
  
                int _result;  
                try {  
                    _data.writeInterfaceToken(DESCRIPTOR);  
                    _data.writeStrongBinder((((window!=null))?(window.asBinder()):(null)));  
  
                    if ((attrs!=null)) {  
                        _data.writeInt(1);  
                        attrs.writeToParcel(_data, 0);  
                    }  
                    else {  
                        _data.writeInt(0);  
                    }  
  
                    _data.writeInt(requestedWidth);  
                    _data.writeInt(requestedHeight);  
                    _data.writeInt(viewVisibility);  
                    _data.writeInt(((insetsPending)?(1):(0)));  
                     
                    mRemote.transact(Stub.TRANSACTION_relayout, _data, _reply, 0);  
                  
                    _reply.readException();  
                    _result = _reply.readInt();  
  
                    if ((0!=_reply.readInt())) {  
                        outFrame.readFromParcel(_reply);  
                    }  
  
                    if ((0!=_reply.readInt())) {  
                        outContentInsets.readFromParcel(_reply);  
                    }  
  
                    if ((0!=_reply.readInt())) {  
                        outVisibleInsets.readFromParcel(_reply);  
                    }  
  
                    if ((0!=_reply.readInt())) {  
                        outConfig.readFromParcel(_reply);  
                    }  
  
                    if ((0!=_reply.readInt())) {  
                        outSurface.readFromParcel(_reply);  
                    }  
  
                } finally {  
                    _reply.recycle();  
                    _data.recycle();  
                }  
  
                return _result;  
            }  
  
            ......  
        }  
  
        ......  
    }  
  
    ......  
}  

IWindowSession.Stub.Proxy类的成员函数relayout首先将从前面传进来的各个参数写入到Parcel对象_data中,接着再通过其成员变量mRemote所描述的一个Binder代理对象向运行在WindowManagerService服务内部的一个Session对象发送一个类型为TRANSACTION_relayout的进程间通信请求,其中,这个Session对象是用来描述从当前应用程序进程到WindowManagerService服务的一个连接的。

我们来看下ViewRootImpl的Surface的readFromParcel函数,获取数据之后调用了setNativeObjectLocked函数

    public void readFromParcel(Parcel source) {
        if (source == null) {
            throw new IllegalArgumentException("source must not be null");
        }

        synchronized (mLock) {
            // nativeReadFromParcel() will either return mNativeObject, or
            // create a new native Surface and return it after reducing
            // the reference count on mNativeObject.  Either way, it is
            // not necessary to call nativeRelease() here.
            mName = source.readString();
            setNativeObjectLocked(nativeReadFromParcel(mNativeObject, source));
        }
    }

setNativeObjectLocked函数保存了从WMS传过来的指针。

    private void setNativeObjectLocked(long ptr) {
        if (mNativeObject != ptr) {
            if (mNativeObject == 0 && ptr != 0) {
                mCloseGuard.open("release");
            } else if (mNativeObject != 0 && ptr == 0) {
                mCloseGuard.close();
            }
            mNativeObject = ptr;
            mGenerationId += 1;
            if (mHwuiContext != null) {
                mHwuiContext.updateSurface();
            }
        }
    }

        当运行在WindowManagerService服务内部的Session对象处理完成当前应用程序进程发送过来的类型为TRANSACTION_relayout的进程间通信请求之后,就会将处理结果写入到Parcel对象_reply中,并且将这个Parcel对象_reply返回给当前应用程序进程处理。返回结果包含了一系列与参数window所描述的应用程序窗口相关的参数,如下所示:

       1. 窗口的大小:最终保存在输出参数outFrame中。

       2. 窗口的内容区域边衬大小:最终保存在输出参数outContentInsets中。

       3. 窗口的可见区域边衬大小:最终保存在输出参数outVisibleInsets中。

       4. 窗口的配置信息:最终保存在输出参数outConfig中。

       5. 窗口的绘图表面:最终保存在输出参数outSurface中。

       这里我们只关注从WindowManagerService服务返回来的窗口绘图表面是如何保存到输出参数outSurface中的,即关注Surface类的成员函数readFromParcel的实现。从前面的调用过程可以知道,输出参数outSurface描述的便是当前正在处理的应用程序窗口的绘图表面,将WindowManagerService服务返回来的窗口绘图表面保存在它里面,就相当于是为当前正在处理的应用程序窗口创建了一个绘图表面。

       在分析Surface类的成员函数readFromParcel的实现之前,我们先分析Session类的成员函数relayout的实现,因为它是用来处理类型为TRANSACTION_relayout的进程间通信请求的。


2.1 WMS中创建SurfaceControl

session类的relayout的话最后调用了WMS的relayoutWindow函数

    public int relayout(IWindow window, int seq, WindowManager.LayoutParams attrs,
            int requestedWidth, int requestedHeight, int viewFlags,
            int flags, Rect outFrame, Rect outOverscanInsets, Rect outContentInsets,
            Rect outVisibleInsets, Rect outStableInsets, Rect outsets, Configuration
                    outConfig,
            Surface outSurface) {
        if (false) Slog.d(WindowManagerService.TAG, ">>>>>> ENTERED relayout from "
                + Binder.getCallingPid());
        int res = mService.relayoutWindow(this, window, seq, attrs,
                requestedWidth, requestedHeight, viewFlags, flags,
                outFrame, outOverscanInsets, outContentInsets, outVisibleInsets,
                outStableInsets, outsets, outConfig, outSurface);
        if (false) Slog.d(WindowManagerService.TAG, "<<<<<< EXITING relayout to "
                + Binder.getCallingPid());
        return res;
    }

在WMS中后面有如下代码,是把对象传到outSurface中去了。

                    SurfaceControl surfaceControl = winAnimator.createSurfaceLocked();
                    if (surfaceControl != null) {
                        outSurface.copyFrom(surfaceControl);

 WindowManagerService类的成员函数relayoutWindow的实现是相当复杂的,这里我们只关注与创建应用程序窗口的绘图表面相关的代码。

        简单来说,WindowManagerService类的成员函数relayoutWindow根据应用程序进程传递过来的一系列数据来重新设置由参数client所描述的一个应用程序窗口的大小和可见性等信息,而当一个应用程序窗口的大小或者可见性发生变化之后,系统中当前获得焦点的窗口,以及输入法窗口和壁纸窗口等都可能会发生变化,而且也会对其它窗口产生影响,因此,这时候WindowManagerService类的成员函数relayoutWindow就会对系统中的窗口的布局进行重新调整。对系统中的窗口的布局进行重新调整的过程是整个WindowManagerService服务最为复杂和核心的内容,我们同样是在后面的文章中再详细分析。

        现在,我们就主要分析参数client所描述的一个应用程序窗口的绘图表面的创建过程。

        WindowManagerService类的成员函数relayoutWindow首先获得与参数client所对应的一个WindowState对象win,这是通过调用WindowManagerService类的成员函数windowForClientLocked来实现的。如果这个对应的WindowState对象win不存在,那么就说明应用程序进程所请求处理的应用程序窗口不存在,这时候WindowManagerService类的成员函数relayoutWindow就直接返回一个0值给应用程序进程。

        WindowManagerService类的成员函数relayoutWindow接下来判断参数client所描述的一个应用程序窗口是否是可见的。一个窗口只有在可见的情况下,WindowManagerService服务才会为它创建一个绘图表面。 一个窗口是否可见由以下两个条件决定:

        1. 参数viewVisibility的值等于View.VISIBLE,表示应用程序进程请求将它设置为可见的。

        2. WindowState对象win的成员变量mAppToken不等于null,并且它所描述的一个AppWindowToken对象的成员变量clientHidden的值等于false。这意味着参数client所描述的窗口是一个应用程序窗口,即一个Activity组件窗口,并且这个Activity组件当前是处于可见状态的。当一个Activity组件当前是处于不可见状态时,它的窗口就也必须是处于不可见状态。

        注意,当WindowState对象win的成员变量mAppToken等于null时,只要满足条件1就可以了,因为这时候参数client所描述的窗口不是一个Activity组件窗口,它的可见性不像Activity组件窗口一样受到Activity组件的可见性影响。

        我们假设参数client所描述的是一个应用程序窗口,并且这个应用程序窗口是可见的,那么WindowManagerService类的成员函数relayoutWindow接下来就会调用WindowState对象win的winAnimator的函数createSurfaceLocked来为它创建一个绘图表面。如果这个绘图表面能创建成功,那么WindowManagerService类的成员函数relayoutWindow就会将它的内容拷贝到输出参数outSource所描述的一个Surface对象去,以便可以将它返回给应用程序进程处理。另一方面,如果这个绘图表面不能创建成功,那么WindowManagerService类的成员函数relayoutWindow就会将输出参数outSource所描述的一个Surface对象的内容释放掉,以便应用程序进程知道该Surface对象所描述的绘图表面已经失效了。

        接下来,我们就继续分析WindowState类的winAnimator的成员函数createSurfaceLocked的实现,以便可以了解一个应用程序窗口的绘图表面的创建过程。

    SurfaceControl createSurfaceLocked() {
        final WindowState w = mWin;
        if (mSurfaceControl == null) {
            if (DEBUG_ANIM || DEBUG_ORIENTATION) Slog.i(TAG,
                    "createSurface " + this + ": mDrawState=DRAW_PENDING");
            mDrawState = DRAW_PENDING;
            if (w.mAppToken != null) {
                if (w.mAppToken.mAppAnimator.animation == null) {
                    w.mAppToken.allDrawn = false;
                    w.mAppToken.deferClearAllDrawn = false;
                } else {
                    // Currently animating, persist current state of allDrawn until animation
                    // is complete.
                    w.mAppToken.deferClearAllDrawn = true;
                }
            }

            mService.makeWindowFreezingScreenIfNeededLocked(w);

            int flags = SurfaceControl.HIDDEN;
            final WindowManager.LayoutParams attrs = w.mAttrs;

            if (mService.isSecureLocked(w)) {
                flags |= SurfaceControl.SECURE;
            }

            int width;
            int height;
            if ((attrs.flags & LayoutParams.FLAG_SCALED) != 0) {
                // for a scaled surface, we always want the requested
                // size.
                width = w.mRequestedWidth;
                height = w.mRequestedHeight;
            } else {
                width = w.mCompatFrame.width();
                height = w.mCompatFrame.height();
            }

            // Something is wrong and SurfaceFlinger will not like this,
            // try to revert to sane values
            if (width <= 0) {
                width = 1;
            }
            if (height <= 0) {
                height = 1;
            }

            float left = w.mFrame.left + w.mXOffset;
            float top = w.mFrame.top + w.mYOffset;

            // Adjust for surface insets.
            width += attrs.surfaceInsets.left + attrs.surfaceInsets.right;
            height += attrs.surfaceInsets.top + attrs.surfaceInsets.bottom;
            left -= attrs.surfaceInsets.left;
            top -= attrs.surfaceInsets.top;

            if (DEBUG_VISIBILITY) {
                Slog.v(TAG, "Creating surface in session "
                        + mSession.mSurfaceSession + " window " + this
                        + " w=" + width + " h=" + height
                        + " x=" + left + " y=" + top
                        + " format=" + attrs.format + " flags=" + flags);
            }

            // We may abort, so initialize to defaults.
            mSurfaceShown = false;
            mSurfaceLayer = 0;
            mSurfaceAlpha = 0;
            mSurfaceX = 0;
            mSurfaceY = 0;
            w.mLastSystemDecorRect.set(0, 0, 0, 0);
            mHasClipRect = false;
            mClipRect.set(0, 0, 0, 0);
            mLastClipRect.set(0, 0, 0, 0);

            // Set up surface control with initial size.
            try {
                mSurfaceW = width;
                mSurfaceH = height;

                final boolean isHwAccelerated = (attrs.flags &
                        WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED) != 0;
                final int format = isHwAccelerated ? PixelFormat.TRANSLUCENT : attrs.format;
                if (!PixelFormat.formatHasAlpha(attrs.format)
                        && attrs.surfaceInsets.left == 0
                        && attrs.surfaceInsets.top == 0
                        && attrs.surfaceInsets.right == 0
                        && attrs.surfaceInsets.bottom  == 0) {
                    flags |= SurfaceControl.OPAQUE;
                }

                mSurfaceFormat = format;
                if (DEBUG_SURFACE_TRACE) {
                    mSurfaceControl = new SurfaceTrace(//新建一个SurfaceTrace对象
                            mSession.mSurfaceSession,
                            attrs.getTitle().toString(),
                            width, height, format, flags);
                } else {
                    mSurfaceControl = new SurfaceControl(
                        mSession.mSurfaceSession,
                        attrs.getTitle().toString(),
                        width, height, format, flags);
                }

 在创建一个应用程序窗口的绘图表面之前,我们需要知道以下数据:

        1. 应用程序窗口它所运行的应用程序进程的PID。

        2. 与应用程序窗口它所运行的应用程序进程所关联的一个SurfaceSession对象。

        3. 应用程序窗口的标题。

        4. 应用程序窗口的像素格式。

        5. 应用程序窗口的宽度。

        6. 应用程序窗口的高度。

        7. 应用程序窗口的图形缓冲区属性标志。

        第1个和第2个数据可以通过当前正在处理的WindowState对象的成员变量mSession所描述的一个Session对象的成员变量mPid和mSurfaceSession来获得;第3个和第4个数据可以通过当前正在处理的WindowState对象的成员变量mAttr所描述的一个WindowManager.LayoutParams对象的成员函数getTitle以及成员变量format来获得;接下来我们就分析后面3个数据是如何获得的。

        WindowState类的成员变量mFrame的类型为Rect,它用来描述应用程序窗口的位置和大小,它们是由WindowManagerService服务根据屏幕大小以及其它属性计算出来的,因此,通过调用过它的成员函数width和height就可以得到要创建绘图表面的应用程序窗口的宽度和高度,并且保存在变量w和h中。但是,当当前正在处理的WindowState对象的成员变量mAttr所描述的一个WindowManager.LayoutParams对象的成员变量flags的LayoutParams.FLAG_SCALED位不等于0时,就说明应用程序进程指定了该应用程序窗口的大小,这时候指定的应用程序窗口的宽度和高度就保存在WindowState类的成员变量mRequestedWidth和mRequestedHeight中,因此,我们就需要将当前正在处理的WindowState对象的成员变量mRequestedWidth和mRequestedHeight的值分别保存在变量w和h中。经过上述两步计算之后,如果得到的变量w和h等于0,那么就说明当前正在处理的WindowState对象所描述的应用程序窗口的大小还没有经过计算,或者还没有被指定过,这时候就需要将它们的值设置为1,避免接下来创建一个大小为0的绘图表面。

        如果当前正在处理的WindowState对象的成员变量mAttr所描述的一个WindowManager.LayoutParams对象的成员变量memoryType的值等于MEMORY_TYPE_PUSH_BUFFERS,那么就说明正在处理的应用程序窗口不拥有专属的图形缓冲区,这时候就需要将用来描述正在处理的应用程序窗口的图形缓冲区属性标志的变量flags的Surface.PUSH_BUFFERS位设置为1。

       此外,如果当前正在处理的WindowState对象的成员变量mAttr所描述的一个WindowManager.LayoutParams对象的成员变量flags的WindowManager.LayoutParams.FLAG_SECURE位不等于0,那么就说明正在处理的应用程序窗口的界面是安全的,即是受保护的,这时候就需要将用来描述正在处理的应用程序窗口的图形缓冲区属性标志的变量flags的Surface.SECURE位设置为1。当一个应用程序窗口的界面是受保护时,SurfaceFlinger服务在执行截屏功能时,就不能把它的界面截取下来。

       上述数据准备就绪之后,就可以创建当前正在处理的WindowState对象所描述的一个应用程序窗口的绘图表面了,不过在创建之前,还会初始化该WindowState对象的以下成员变量:

       --mReportDestroySurface的值被设置为false。当一个应用程序窗口的绘图表面被销毁时,WindowManagerService服务就会将相应的WindowState对象的成员变量mReportDestroySurface的值设置为true,表示要向该应用程序窗口所运行在应用程序进程发送一个绘图表面销毁通知。

       --mSurfacePendingDestroy的值被设置为false。当一个应用程序窗口的绘图表面正在等待销毁时,WindowManagerService服务就会将相应的WindowState对象的成员变量mReportDestroySurface的值设置为true。

       --mDrawPending的值被设置为true。当一个应用程序窗口的绘图表面处于创建之后并且绘制之前时,WindowManagerService服务就会将相应的WindowState对象的成员变量mDrawPending的值设置为true,以表示该应用程序窗口的绘图表面正在等待绘制。

       --mCommitDrawPending的值被设置为false。当一个应用程序窗口的绘图表面绘制完成之后并且可以显示出来之前时,WindowManagerService服务就会将相应的WindowState对象的成员变量mCommitDrawPending的值设置为true,以表示该应用程序窗口正在等待显示。

       --mReadyToShow的值被设置为false。有时候当一个应用程序窗口的绘图表面绘制完成并且可以显示出来之后,由于与该应用程序窗口所关联的一个Activity组件的其它窗口还未准备好显示出来,这时候WindowManagerService服务就会将相应的WindowState对象的成员变量mReadyToShow的值设置为true,以表示该应用程序窗口需要延迟显示出来,即需要等到与该应用程序窗口所关联的一个Activity组件的其它窗口也可以显示出来之后再显示。

       --如果成员变量mAppToken的值不等于null,那么就需要将它所描述的一个AppWindowToken对象的成员变量allDrawn的值设置为false。从前面Android应用程序窗口(Activity)与WindowManagerService服务的连接过程分析一文可以知道,一个AppWindowToken对象用来描述一个Activity组件的,当该AppWindowToken对象的成员变量allDrawn的值等于true时,就表示属于该Activity组件的所有窗口都已经绘制完成了。

       --mSurfaceShown的值被设置为false,表示应用程序窗口还没有显示出来,它是用来显示调试信息的。

       --mSurfaceLayer的值被设置为0,表示应用程序窗口的Z轴位置,它是用来显示调试信息的。

       --mSurfaceAlpha的值被设置为1,表示应用程序窗口的透明值,它是用来显示调试信息的。

       --mSurfaceX的值被设置为0,表示应用程序程序窗口的X轴位置,它是用来显示调试信息的。

       --mSurfaceY的值被设置为0,表示应用程序程序窗口的Y轴位置,它是用来显示调试信息的。

       --mSurfaceW的值被设置为w,表示应用程序程序窗口的宽度,它是用来显示调试信息的。

       --mSurfaceH的值被设置为h,表示应用程序程序窗口的高度,它是用来显示调试信息的。

       一个应用程序窗口的绘图表面在创建完成之后,函数就会将得到的一个Surface对象保存在当前正在处理的WindowState对象的成员变量mSurface中。注意,如果创建绘图表面失败,并且从Surface类的构造函数抛出来的异常的类型为Surface.OutOfResourcesException,那么就说明系统当前的内存不足了,这时候函数就会调用WindowManagerService类的成员函数reclaimSomeSurfaceMemoryLocked来回收内存。

       如果一切正常,那么函数接下来还会设置当前正在处理的WindowState对象所描述应用程序窗口的以下属性:

      1. X轴和Y轴位置。前面提到,WindowState类的成员变量mFrame是用来描述应用程序窗口的位置和大小的,其中,位置就是通过它所描述的一个Rect对象的成员变量left和top来表示的,它们分别应用窗口在X轴和Y轴上的位置。此外,当一个WindowState对象所描述的应用程序窗口是一个壁纸窗口时,该WindowState对象的成员变量mXOffset和mYOffset用来描述壁纸窗口相对当前要显示的窗口在X轴和Y轴上的偏移量。因此,将WindowState类的成员变量mXOffset的值加上另外一个成员变量mFrame所描述的一个Rect对象的成员变量left的值,就可以得到一个应用程序窗口在X轴上的位置,同样,将WindowState类的成员变量mYOffset的值加上另外一个成员变量mFrame所描述的一个Rect对象的成员变量top的值,就可以得到一个应用程序窗口在Y轴上的位置。最终得到的位置值就分别保存在WindowState类的成员变量mSurfaceX和mSurfaceY,并且会调用WindowState类的成员变量mSurface所描述的一个Surface对象的成员函数setPosition来将它们设置到SurfaceFlinger服务中去。

      2. Z轴位置。在前面Android应用程序窗口(Activity)与WindowManagerService服务的连接过程分析一文中提到,WindowState类的成员变量mAnimLayer用来描述一个应用程序窗口的Z轴位置,因此,这里就会先将它保存在WindowState类的另外一个成员变量mSurfaceLayer中,然后再调用WindowState类的成员变量mSurface所描述的一个Surface对象的成员函数setLayer来将它设置到SurfaceFlinger服务中去。

      3. 抖动标志。如果WindowState类的成员变量mAttr所描述的一个WindowManager.LayoutParams对象的成员变量flags的WindowManager.LayoutParams.FLAG_DITHER位不等于0,那么就说明一个应用程序窗口的图形缓冲区在渲染时,需要进行抖动处理,这时候就会调用WindowState类的成员变量mSurface所描述的一个Surface对象的成员函数setLayer来将对应的应用程序窗口的图形缓冲区的属性标志的Surface.SURFACE_DITHER位设置为1。

      4. 显示状态。由于当前正在处理的WindowState对象所描述的一个应用程序窗口的绘图表面刚刚创建出来,因此,我们就需要通知SurfaceFlinger服务将它隐藏起来,这是通过调用当前正在处理的WindowState对象的成员变量mSurface所描述的一个Surface对象的成员变量hide来实现的。这时候还会将当前正在处理的WindowState对象的成员变量mSurfaceShown和mLastHidden的值分别设置为false和true,以表示对应的应用程序窗口是处于隐藏状态的。

      注意,为了避免SurfaceFlinger服务每设置一个应用程序窗口属性就重新渲染一次系统的UI,上述4个属性设置需要在一个事务中进行,这样就可以避免出现界面闪烁。我们通过调用Surface类的静态成员函数openTransaction和closeTransaction就可以分别在SurfaceFlinger服务中打开和关闭一个事务。

      还有另外一个地方需要注意的是,在设置应用程序窗口属性的过程中,如果抛出了一个RuntimeException异常,那么就说明系统当前的内存不足了,这时候函数也会调用WindowManagerService类的成员函数reclaimSomeSurfaceMemoryLocked来回收内存。

      接下来,我们就继续分析Surface类的构造函数的实现,以便可以了解一个应用程序窗口的绘图表面的详细创建过程。


2.2 SurfaceControl在JNI层创建了SurfaceControl C++层对象那个

下面我们再来看看SurfaceControl的构造函数,主要是调用了nativeCreate函数

    public SurfaceControl(SurfaceSession session,
            String name, int w, int h, int format, int flags)
                    throws OutOfResourcesException {
        if (session == null) {
            throw new IllegalArgumentException("session must not be null");
        }
        if (name == null) {
            throw new IllegalArgumentException("name must not be null");
        }

        if ((flags & SurfaceControl.HIDDEN) == 0) {
            Log.w(TAG, "Surfaces should always be created with the HIDDEN flag set "
                    + "to ensure that they are not made visible prematurely before "
                    + "all of the surface's properties have been configured.  "
                    + "Set the other properties and make the surface visible within "
                    + "a transaction.  New surface name: " + name,
                    new Throwable());
        }

        mName = name;
        mNativeObject = nativeCreate(session, name, w, h, format, flags);
        if (mNativeObject == 0) {
            throw new OutOfResourcesException(
                    "Couldn't allocate SurfaceControl native object");
        }

        mCloseGuard.open("release");
    }

我们来看下这个nativeCreate就是通过上篇博客说的SurfaceComposerClient来获取一个c++层的SurfaceControl

static jlong nativeCreate(JNIEnv* env, jclass clazz, jobject sessionObj,
        jstring nameStr, jint w, jint h, jint format, jint flags) {
    ScopedUtfChars name(env, nameStr);
    sp<SurfaceComposerClient> client(android_view_SurfaceSession_getClient(env, sessionObj));
    sp<SurfaceControl> surface = client->createSurface(
            String8(name.c_str()), w, h, format, flags);
    if (surface == NULL) {
        jniThrowException(env, OutOfResourcesException, NULL);
        return 0;
    }
    surface->incStrong((void *)nativeCreate);
    return reinterpret_cast<jlong>(surface.get());
}

而nativeCreate返回的值保存在mNativeObject 中,后面所有一些操作函数都是通过mNativeObject 传到JNI进行操作的。

    public void setLayer(int zorder) {
        checkNotReleased();
        nativeSetLayer(mNativeObject, zorder);
    }

    public void setPosition(float x, float y) {
        checkNotReleased();
        nativeSetPosition(mNativeObject, x, y);
    }

    public void setSize(int w, int h) {
        checkNotReleased();
        nativeSetSize(mNativeObject, w, h);


在WMS中的Surface是保存在每一个Activity对应的WindowState的winAnimator的mSurfaceControl成员变量中。而Activity的Surface是保存在ViewRootImpl的Surface是通过WMS的outSurface保存在ViewRoot的mSurface中。

所以最后无论在WMS的SurfaceControl还是ViewRootImpl的Surface最后在c++层用的是同一个对象。
 

三、总结

至此,我们就分析完成Android应用程序窗口的绘图表面的创建过程了。通过这个过程我们就可以知道:

       1. 每一个应用程序窗口都对应有两个Java层的Surface对象,其中一个是在WindowManagerService服务这一侧创建的,而另外一个是在应用程序进程这一侧创建的。

       2. 在WindowManagerService服务这一侧创建的Java层的Surface对象在C++层关联有一个SurfaceControl对象,用来设置应用窗口的属性,例如,大小和位置等。

       3. 在应用程序进程这一侧创建的ava层的Surface对象在C++层关联有一个Surface对象,用来绘制应用程序窗品的UI。

       理解上述三个结论对理解Android应用程序窗口的实现框架以及WindowManagerService服务的实现都非常重要。 一个应用程序窗口的绘图表面在创建完成之后,接下来应用程序进程就可以在上面绘制它的UI了。

作者:kc58236582 发表于2016/9/3 15:07:26 原文链接
阅读:95 评论:0 查看评论

高仿知乎项目制作流程详解------------第一解:自定义组件的使用

$
0
0

首先来看一下我实现的效果图:


从”我的关注”开始,每一个条目都是一个自定义组合控件.下面,我来讲解一下具体实现步骤:

 

一.根据知乎的样式,创建并完成布局文件.

在本页面所有的自定义组件中,只有”夜间模式”一项最为复杂,在条目布局的右侧增加了一个按钮,所以我们就选择它作为自定义组件的基础布局.


具体布局如下:

<pre name="code" class="html"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:background="@drawable/selector_msi">

    <ImageView
        android:id="@+id/iv_more_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:paddingLeft="15dp"
        android:src="@drawable/ic_remove_red_eye_white_18dp"
        android:tint="@android:color/darker_gray" />

    <TextView
        android:id="@+id/tv_moretext"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/iv_more_icon"
        android:paddingLeft="15dp"
        android:text="我的关注"
        android:textSize="16sp" />

    <ImageView
        android:id="@+id/iv_more_line"
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:layout_alignLeft="@+id/tv_moretext"
        android:layout_alignParentBottom="true"
        android:layout_marginLeft="15dp"
        android:background="@drawable/list_divider"
        android:tint="@android:color/darker_gray"></ImageView>

    <Switch
        android:id="@+id/switch_more"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:paddingRight="10dp"
        android:visibility="invisible"
         />

</RelativeLayout>





二.设置自定义组件的属性

在res文件夹中,找到values文件夹,创建attrs.xml文件,在里面就可以对自定义组件的属性进行设置了,具体代码如下:

<pre name="code" class="html"><declare-styleable name="MorePersonalSettingItem">
        <!--设置条目文字-->
        <attr name="moretext" format="string" ></attr>
        <!--设置条目是否显示下方横线-->
        <attr name="isShowLine" format="boolean"></attr>
        <!--设置条目图片样式-->
        <attr name="moreicon" format="reference"></attr>
        <!--设置条目是否显示右侧按钮-->
        <attr name="isShowToggle" format="boolean"></attr>
    </declare-styleable>


三.创建自定义组件类,继承相应的布局,并给相应属性设置业务逻辑

为了使自定义组件的属性发挥作用,我们还需要通过代码实现对应的业务逻辑,这就需要创建自定义组件的类了,根据组件布局特点,我们让它继承RelativeLayout布局,当然其他布局也可以,感兴趣的朋友可以自行尝试.我的自定义组件命名为MorePersonalSettingItem.
具体实现代码如下:

public class MorePersonalSettingItem extends RelativeLayout {

    private static final String NAMESPACE = "http://schemas.android.com/apk/res-auto";
    private ImageView iv_more_icon;
    private ImageView iv_more_line;
    private TextView tv_moretext;
    private Switch switch_more;

    public MorePersonalSettingItem(Context context) {
        this(context,null);
    }

    public MorePersonalSettingItem(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }

    public MorePersonalSettingItem(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        //找到各个属性
        String moreText = attrs.getAttributeValue(NAMESPACE,"moretext");
        Boolean isShowLine = attrs.getAttributeBooleanValue(NAMESPACE,"isShowLine",true);
        int moreicon = attrs.getAttributeResourceValue(NAMESPACE, "moreicon", R.drawable.ic_live_tiny);
        Boolean isShowToggle = attrs.getAttributeBooleanValue(NAMESPACE,"isShowToggle",false);

        initView();

        iv_more_icon.setImageResource(moreicon);
        tv_moretext.setText(moreText);

        //判断是否显示横线
        if(isShowLine){
            iv_more_line.setVisibility(View.VISIBLE);
        } else {
            iv_more_line.setVisibility(View.INVISIBLE);
        }
        //判断是否显示按钮
        if(isShowToggle){
            switch_more.setVisibility(View.VISIBLE);
        } else {
            switch_more.setVisibility(View.INVISIBLE);
        }
    }

    public void initView(){
        //加载布局
        View view = View.inflate(getContext(), R.layout.more_setting_item,null);
        iv_more_icon = (ImageView)view.findViewById(R.id.iv_more_icon);
        iv_more_line = (ImageView)view.findViewById(R.id.iv_more_line);
        tv_moretext = (TextView)view.findViewById(R.id.tv_moretext);
        switch_more = (Switch)view.findViewById(R.id.switch_more);
        addView(view);
    }
}

四.使用自定义组件

这时候,我们的自定义组件就算创建完成了,可以到相应的布局文件中直接使用了.需要注意的是,在使用自定义组件的时候,一定要在组件名称前加上全包名,

并在外层大布局添加属性:

xmlns:app="http://schemas.android.com/apk/res-auto"

这样,在编译的时候才能找到对应的控件和属性,否则会报错

使用实例代码如下:

<!--第二块内容,个人设置-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="6dp"
        android:orientation="vertical">

        <com.example.zhihu10.ui.MorePersonalSettingItem
            android:id="@+id/msi_my_concern"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            app:isShowLine="true"
            app:moreicon="@drawable/ic_follow_more"
            app:moretext="我的关注"></com.example.zhihu10.ui.MorePersonalSettingItem>

        <com.example.zhihu10.ui.MorePersonalSettingItem
            android:id="@+id/msi_my_collect"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            app:isShowLine="true"
            app:moreicon="@drawable/ic_grade"
            app:moretext="我的收藏"></com.example.zhihu10.ui.MorePersonalSettingItem>

        <com.example.zhihu10.ui.MorePersonalSettingItem
            android:id="@+id/msi_my_draft"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            app:isShowLine="true"
            app:moreicon="@drawable/ic_draft_more"
            app:moretext="我的草稿"></com.example.zhihu10.ui.MorePersonalSettingItem>

        <com.example.zhihu10.ui.MorePersonalSettingItem
            android:id="@+id/msi_my_scan_nearby"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            app:isShowLine="true"
            app:moreicon="@drawable/ic_recent_views"
            app:moretext="最近浏览"></com.example.zhihu10.ui.MorePersonalSettingItem>

        <com.example.zhihu10.ui.MorePersonalSettingItem
            android:id="@+id/msi_my_zhihu"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            app:isShowLine="true"
            app:moreicon="@drawable/ic_zhi_logo"
            app:moretext="我的值乎"></com.example.zhihu10.ui.MorePersonalSettingItem>

        <com.example.zhihu10.ui.MorePersonalSettingItem
            android:id="@+id/msi_my_live"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            app:isShowLine="false"
            app:moreicon="@drawable/ic_feed_livebanner_logo"
            app:moretext="我的Live"></com.example.zhihu10.ui.MorePersonalSettingItem>

    </LinearLayout>
    <!--第三块内容,属性设置-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="15dp"
        android:orientation="vertical">

        <com.example.zhihu10.ui.MorePersonalSettingItem
            android:id="@+id/msi_night_mode"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            app:isShowLine="true"
            app:isShowToggle="true"
            app:moreicon="@drawable/ic_nightmode_more"
            app:moretext="夜间模式"></com.example.zhihu10.ui.MorePersonalSettingItem>

        <com.example.zhihu10.ui.MorePersonalSettingItem
            android:id="@+id/msi_my_setting"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            app:isShowLine="false"
            app:moreicon="@drawable/ic_drawer_settings"
            app:moretext="设置"></com.example.zhihu10.ui.MorePersonalSettingItem>

    </LinearLayout>
</LinearLayout>

好啦,自定义组件的简单使用我们就讲完了,当然这只是非常简单的例子,通过自定义组件,我们可以完成更多Android自带控件所不能完成的功能,进而实现更为复杂的布局和设置更美观的页面,这些就留待以后在具体的案例中讲解吧.

最后,感谢大家浏览我的博客,希望在Android开发的道路上一起成长!







作者:newone_helloworld 发表于2016/9/3 15:14:49 原文链接
阅读:104 评论:0 查看评论

U3D开发学习之路--Mecanim动画系统

$
0
0

Mecanim特性

  1. 针对人形角色提供了一种特殊的工作流,包含Avatar的创建和对肌肉的调节。
  2. 动画重定向的能力,可以非常方便地把动画从一个角色模型应用到其他角色模型上。
  3. 提供了可视化Animator视窗,可以直观地通过动画参数Transition(动画过渡线)等管理各个动画间的过度。

Mecanim常用

  1. Animator:Mecanim动画系统组件
  2. AnimatorController:动画控制器,控制动画逻辑
  3. Avatar:将角色的骨骼转化为可识别的一般骨骼或者人形骨骼

Mecanim一般创作步骤

1.     选择到模型源文件查看

2.     将动画模式调整为Mecanim可识别样式 (人类,动画可以复用) (非人类,动画不能复用)

Animation动画样式为

3.     Apply应用到模型

4.     (若为对勾显示则骨骼匹配成功,若为叉号显示则需要重新匹配)

5.     创建->给到角色上

6.     找到Window下Animator面板将需要的动画拖到面板中即可

需要重新匹配点击->进入此界面

找到->

动画状态机动画切换

此颜色的动画状态,说明此动画为默认动画(此处跳舞为默认动画)

1.      若想实现角色从待机切换到跳舞效果,先将待机动画拖拽到Animator面板(或者右键创建Empty,将右边属性motion选择待机动画)->将待机动画设置为默认动画(在待机动画状态右键选择 )-> 待机动画即为默认动画->在待机动画状态右键选择 ->

2.      添加动画参数

3.      选择动画过渡线设置条件

if(anim){
  anime.SetBool("AttackBool",Input.GetKeyDown(KeyCode.Space));
}


Mecanim BlendTree(混合树)

(可实现一个动画状态有多个动画效果,如跑,既可以前跑也可以左右跑)

1.  创建 BlendTree

2.  双击blendTree动画状态

3.  进入此界面,然后点击添加需要的动画->

注意:如果勾选则Threshold数值不能自己调整。

如果需要调整则取消勾选即可。

设置为,此处想通过键盘平行轴返回值控制左右跑动画,则为-1 ,0, 1。

添加AD小数,在BlendTree应用AD

Mecanim BlendTree2D

 

通过2个动画参数控制动画切换

InputWS InputAD分别对应POSX 与POSY两个数值


Mecanim层设置,用于角色动画混合效果(如:边跑边攻击)

点击此处添加层,可更改Name,通过Weight设置动画权重,Mask控制动画混合位置,并将此层需要的动画拖到面板中

注意Mask 在Project视窗创建,选择

此处为将腿遮罩,则腿不会播放dance动画,当调节Weight动画权重数值时可看到融合效果(范围从0~1),1为完全融合。

Weight 权重

      权重是指某个动画层在整个动画中的影响,

      若权重值为1则此层动画将与整个动画融合

      若权重值为0则此层动画与整个动画完全不融合

动画事件

找到角色源文件->找到需要的动画->


此脚本给在角色上,当攻击动画将要播放完时调用AttackBool();


判断动画是否在播放

Animator anim ;
	int idle = Animator.StringToHash("Base layer.Idle");//默认层的待机动画 
AnimatorStateInfo currentBaseStage;//当前播放的动画

	void Start () {
		anim = GetComponent<Animator>();
	}

	void Update () {
		currentBaseStage = anim.GetCurrentAnimatorStateInfo(0);//当前播放的动画
		if (currentBaseStage.nameHash == idle && !anim.IsInTransition(0))//正在播放待机动画,并且没有动画衔接
		{
			anim.SetBool("hit", false);
		}


作者:ballshe 发表于2016/9/3 16:34:33 原文链接
阅读:89 评论:0 查看评论

Android -- Wifi热点的打开与关闭流程简介

$
0
0

Android -- Wifi热点的打开与关闭流程简介


一、SoftAp打开流程

当我们在设置中打开热点时,会调用WifiManager::setWifiApEnabled(),参数enabled为true;间接调用同名的WifiServiceImpl::setWifiApEnabled():
/**
     * Start AccessPoint mode with the specified
     * configuration. If the radio is already running in
     * AP mode, update the new configuration
     * Note that starting in access point mode disables station
     * mode operation
     * @param wifiConfig SSID, security and channel details as
     *        part of WifiConfiguration
     * @return {@code true} if the operation succeeds, {@code false} otherwise
     *
     * @hide Dont open up yet
     */
    public boolean setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled) {
        try {
            mService.setWifiApEnabled(wifiConfig, enabled);
            return true;
        } catch (RemoteException e) {
            return false;
        }
    }
    /**
     * see {@link android.net.wifi.WifiManager#setWifiApEnabled(WifiConfiguration, boolean)}
     * @param wifiConfig SSID, security and channel details as
     *        part of WifiConfiguration
     * @param enabled true to enable and false to disable
     */
    public void setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled) {
        enforceChangePermission();
        ConnectivityManager.enforceTetherChangePermission(mContext);
        if (mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_TETHERING)) {
            throw new SecurityException("DISALLOW_CONFIG_TETHERING is enabled for this user.");
        }
        // null wifiConfig is a meaningful input for CMD_SET_AP
        if (wifiConfig == null || isValid(wifiConfig)) {
            mWifiController.obtainMessage(CMD_SET_AP, enabled ? 1 : 0, 0, wifiConfig).sendToTarget();
        } else {
            Slog.e(TAG, "Invalid WifiConfiguration");
        }
    }
参数中的wifiConfig对象保存了在Settings中操作时保留的热点信息,如热点名称、密钥和加密方式等等。与Wifi本身的打开和关闭类似,Wifi热点的打开流程也是通过WifiController状态机向WifiStateMachine转发消息的。与前面介绍的Wifi打开流程类似,CMD_SET_AP消息在ApStaDisabledState状态处理:
                case CMD_SET_AP:
                    if (msg.arg1 == 1) {
                        mWifiStateMachine.setHostApRunning((WifiConfiguration) msg.obj,
                                true);
                        transitionTo(mApEnabledState);//此时WifiController的状态停留在ApEnabledState
                    }
由此转入WifiStateMachine进行打开流程:
    /**
     * TODO: doc
     */
    public void setHostApRunning(WifiConfiguration wifiConfig, boolean enable) {
        if (enable) {
            sendMessage(CMD_START_AP, wifiConfig);
        } else {
            sendMessage(CMD_STOP_AP);
        }
    }
WifiStateMachine::InitialState会处理该消息:
case CMD_START_AP:
                    if (mWifiNative.loadDriver() == false) {
                        loge("Failed to load driver for softap");
                    } else {
                        if (enableSoftAp() == true) {
                            setWifiApState(WIFI_AP_STATE_ENABLING, 0);//该函数中会发送广播,告知外界当前热点的启动阶段
                            transitionTo(mSoftApStartingState);//切换状态
                        } else {
                            setWifiApState(WIFI_AP_STATE_FAILED,
                                    WifiManager.SAP_START_FAILURE_GENERAL);
                            transitionTo(mInitialState);
                        }
                    }
                    break;
首先肯定是先加载驱动,驱动加载成功后通过enableSoftAp()配置Wifi热点:
    /* SoftAP configuration */
    private boolean enableSoftAp() {
        if (WifiNative.getInterfaces() != 0) {
            if (!mWifiNative.toggleInterface(0)) {
                if (DBG) Log.e(TAG, "toggleInterface failed");
                return false;
            }
        } else {
            if (DBG) Log.d(TAG, "No interfaces to toggle");
        }

        try {
            mNwService.wifiFirmwareReload(mInterfaceName, "AP");//加载固件
            if (DBG) Log.d(TAG, "Firmware reloaded in AP mode");
        } catch (Exception e) {
            Log.e(TAG, "Failed to reload AP firmware " + e);
        }

        if (WifiNative.startHal() == false) {//启动HAL层
            /* starting HAL is optional */
            Log.e(TAG, "Failed to start HAL");
        }
        return true;
    }
Wifi热点首先需要绑定端口信息,再以AP模式通过NetworkManagerService在wlan0端口下加载固件;最后热点也需要HAL层的支持。
setWifiApState()会发送广播,告知当前热点打开的过程信息;同理,也有setWifiState(),告知外界当前Wifi打开的过程信息;如果我们有必要知道当前热点打开的过程进行到什么阶段了,可以监听WifiManager.WIFI_AP_STATE_CHANGED_ACTION广播。最后状态切换到SoftApStartingState,如果流程有误,则会重新进入InitialState。
接着看SoftApStartingState::enter():
        public void enter() {
            final Message message = getCurrentMessage();
            if (message.what == CMD_START_AP) {
                final WifiConfiguration config = (WifiConfiguration) message.obj;

                if (config == null) {
                    mWifiApConfigChannel.sendMessage(CMD_REQUEST_AP_CONFIG);//1
                } else {
                    mWifiApConfigChannel.sendMessage(CMD_SET_AP_CONFIG, config);//2
                    startSoftApWithConfig(config);
                }
            } else {
                throw new RuntimeException("Illegal transition to SoftApStartingState: " + message);
            }
        }
首先会判断打开热点时传入的WifiConfiguration对象是否为null;如果为空,则会向WifiApConfigStore发送CMD_REQUEST_AP_CONFIG消息,请求一个热点配置信息
。我们一起介绍这两个分支过程。回过头看InitialState状态的enter():
public void enter() {
            WifiNative.stopHal();
            mWifiNative.unloadDriver();
            if (mWifiP2pChannel == null) {
                mWifiP2pChannel = new AsyncChannel();
                mWifiP2pChannel.connect(mContext, getHandler(),
                    mWifiP2pServiceImpl.getP2pStateMachineMessenger());
            }

            if (mWifiApConfigChannel == null) {
                mWifiApConfigChannel = new AsyncChannel();
                mWifiApConfigStore = WifiApConfigStore.makeWifiApConfigStore(
                        mContext, getHandler());//WifiApConfigStore也是一个小的状态机,此时会构建mWifiApConfigStore对戏,并启动状态机
                mWifiApConfigStore.loadApConfiguration();//在WifiApConfigStore中加载默认的热点配置信息
                mWifiApConfigChannel.connectSync(mContext, getHandler(),
                        mWifiApConfigStore.getMessenger());//创建AsyncChannel对象,以供向WifiApConfigStore发送消息
            }

            if (mWifiConfigStore.enableHalBasedPno.get()) {
                // make sure developer Settings are in sync with the config option
                mHalBasedPnoEnableInDevSettings = true;
            }
        }
在创建完mWifiApConfigStore对象后,会调用mWifiApConfigStore.loadApConfiguration()加载热点配置信息:
    void loadApConfiguration() {
        DataInputStream in = null;
        try {
            WifiConfiguration config = new WifiConfiguration();
            in = new DataInputStream(new BufferedInputStream(new FileInputStream(
                            AP_CONFIG_FILE)));

            int version = in.readInt();
            if ((version != 1) && (version != 2)) {
                Log.e(TAG, "Bad version on hotspot configuration file, set defaults");
                setDefaultApConfiguration();
                return;
            }
            config.SSID = in.readUTF();

            if (version >= 2) {
                config.apBand = in.readInt();
                config.apChannel = in.readInt();
            }

            int authType = in.readInt();
            config.allowedKeyManagement.set(authType);
            if (authType != KeyMgmt.NONE) {
                config.preSharedKey = in.readUTF();
            }

            mWifiApConfig = config;
        } catch (IOException ignore) {
            setDefaultApConfiguration();
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {}
            }
        }
    }
主要是从/misc/wifi/softap.conf文件中读取其中的信息,并赋给WifiApConfigStore的成员变量mWifiApConfig,这个变量保存的就是当前SoftAp的配置信息。该文件一开始会有默认的信息保存其中,如果我们从没配置过热点,拿到的就是系统默认的信息;如果,上层配置了热点;我们也会将新的配置信息更新到softap.conf中,以供下载再次加载。再看消息处理过程:
case WifiStateMachine.CMD_REQUEST_AP_CONFIG:
                    mReplyChannel.replyToMessage(message,
                            WifiStateMachine.CMD_RESPONSE_AP_CONFIG, mWifiApConfig);
向WifiStateMachine回复CMD_RESPONSE_AP_CONFIG消息,并附带mWifiApConfig对象。在SoftApStartingState::enter()中,如果config不为空,我们直接去调用startSoftApWithConfig()启动SoftAP;如果一开始config为null,通过处理CMD_RESPONSE_AP_CONFIG,获取到新的config对象,也应该去开启SoftAP了:
case WifiStateMachine.CMD_RESPONSE_AP_CONFIG:
                    WifiConfiguration config = (WifiConfiguration) message.obj;
                    if (config != null) {
                        startSoftApWithConfig(config);
                    } else {
                        loge("Softap config is null!");//config依然为null,则热点打开失败
                        sendMessage(CMD_START_AP_FAILURE, WifiManager.SAP_START_FAILURE_GENERAL);//SoftApStartingState处理,状态重新切换到InitialState
                    }
                    break;
如果一开始的config对象不为空,从代码可知我们会先发送CMD_SET_AP_CONFIG消息,通知WifiApConfigStore更新配置信息,看处理流程:
    class InactiveState extends State {
        public boolean processMessage(Message message) {
            switch (message.what) {
                case WifiStateMachine.CMD_SET_AP_CONFIG:
                     WifiConfiguration config = (WifiConfiguration)message.obj;
                    if (config.SSID != null) {
                        mWifiApConfig = config;//将上层传入的配置信息先保存到成员变量中
                        transitionTo(mActiveState);//切换状态
                    } else {
                        Log.e(TAG, "Try to setup AP config without SSID: " + message);
                    }
首先将传入的配置对象保存到mWifiApConfig,接着切换状态:
    class ActiveState extends State {
        public void enter() {
            new Thread(new Runnable() {
                public void run() {
                    writeApConfiguration(mWifiApConfig);
                    sendMessage(WifiStateMachine.CMD_SET_AP_CONFIG_COMPLETED);
                }
            }).start();
        }

        public boolean processMessage(Message message) {
            switch (message.what) {
                //TODO: have feedback to the user when we do this
                //to indicate the write is currently in progress
                case WifiStateMachine.CMD_SET_AP_CONFIG:
                    deferMessage(message);
                    break;
                case WifiStateMachine.CMD_SET_AP_CONFIG_COMPLETED:
                    transitionTo(mInactiveState);
                    break;
                default:
                    return NOT_HANDLED;
            }
            return HANDLED;
        }
    }
enter()函数中,会调用writeApConfiguration()将mWifiApConfig的信息更新到/misc/wifi/softap.conf文件中,供下次加载使用:
    private void writeApConfiguration(final WifiConfiguration config) {
        DataOutputStream out = null;
        try {
            out = new DataOutputStream(new BufferedOutputStream(
                        new FileOutputStream(AP_CONFIG_FILE)));

            out.writeInt(AP_CONFIG_FILE_VERSION);
            out.writeUTF(config.SSID);
            out.writeInt(config.apBand);
            out.writeInt(config.apChannel);
            int authType = config.getAuthType();
            out.writeInt(authType);
            if(authType != KeyMgmt.NONE) {
                out.writeUTF(config.preSharedKey);
            }
        } catch (IOException e) {
            Log.e(TAG, "Error writing hotspot configuration" + e);
        } finally {
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {}
            }
        }
    }
处理比较简单,接着给自己发送CMD_SET_AP_CONFIG_COMPLETED消息,告知配置信息更新已经完毕,并重新进入InactiveState,重新等待下次配置信息的更新处理。
我们再返回到WifiStateMachine::SoftApStartingState处理CMD_RESPONSE_AP_CONFIG,如果再次获取后的config依然为null,则通知热点打开失败。接着就是真正开启热点的函数处理:
    /* Current design is to not set the config on a running hostapd but instead
     * stop and start tethering when user changes config on a running access point
     *
     * TODO: Add control channel setup through hostapd that allows changing config
     * on a running daemon
     */
    private void startSoftApWithConfig(final WifiConfiguration configuration) {
        // set channel
        final WifiConfiguration config = new WifiConfiguration(configuration);

        if (DBG) {
            Log.d(TAG, "SoftAp config channel is: " + config.apChannel);
        }

        //We need HAL support to set country code and get available channel list, if HAL is
        //not available, like razor, we regress to original implementaion (2GHz, channel 6)
        if (mWifiNative.isHalStarted()) {//因为SoftAp需要HAL层的支持,所有首先要进行确定,再继续配置
            //set country code through HAL Here
            if (mSetCountryCode != null) {
                if (!mWifiNative.setCountryCodeHal(mSetCountryCode.toUpperCase(Locale.ROOT))) {
                    if (config.apBand != 0) {
                        Log.e(TAG, "Fail to set country code. Can not setup Softap on 5GHz");
                        //countrycode is mandatory for 5GHz
                        sendMessage(CMD_START_AP_FAILURE, WifiManager.SAP_START_FAILURE_GENERAL);
                        return;
                    }
                }
            } else {
                if (config.apBand != 0) {
                    //countrycode is mandatory for 5GHz
                    Log.e(TAG, "Can not setup softAp on 5GHz without country code!");
                    sendMessage(CMD_START_AP_FAILURE, WifiManager.SAP_START_FAILURE_GENERAL);
                    return;
                }
            }

            if (config.apChannel == 0) {
                config.apChannel = chooseApChannel(config.apBand);
                if (config.apChannel == 0) {
                    if(mWifiNative.isGetChannelsForBandSupported()) {
                        //fail to get available channel
                        sendMessage(CMD_START_AP_FAILURE, WifiManager.SAP_START_FAILURE_NO_CHANNEL);
                        return;
                    } else {
                        //for some old device, wifiHal may not be supportedget valid channels are not
                        //supported
                        config.apBand = 0;
                        config.apChannel = 6;
                    }
                }
            }
        } else {
            //for some old device, wifiHal may not be supported
            config.apBand = 0;
            config.apChannel = 6;
        }
        // Start hostapd on a separate thread
        new Thread(new Runnable() {//开启一个新线程,来启动hostapd;我们支持wpa_s是支持Wifi的,hostapd则是支持SoftAP的
            public void run() {
                try {
                    mNwService.startAccessPoint(config, mInterfaceName);//通过NetworkManagerService,在无线端口上,按传入的配置信息开启SoftAP;
                } catch (Exception e) {
                    loge("Exception in softap start " + e);
                    try {
                        mNwService.stopAccessPoint(mInterfaceName);
                        mNwService.startAccessPoint(config, mInterfaceName);
                    } catch (Exception e1) {
                        loge("Exception in softap re-start " + e1);
                        sendMessage(CMD_START_AP_FAILURE, WifiManager.SAP_START_FAILURE_GENERAL);//打开失败,状态会重新切换到InitialState;等待下一次过程
                        return;
                    }
                }
                if (DBG) log("Soft AP start successful");
                sendMessage(CMD_START_AP_SUCCESS);//打开成功
            }
        }).start();
    }
如果最后热点打开成功,发送CMD_START_AP_SUCCESS,看处理过程,SoftApStartingState:
                case CMD_START_AP_SUCCESS:
                    setWifiApState(WIFI_AP_STATE_ENABLED, 0);//发送广播,告知SoftAp已经成功打开
                    transitionTo(mSoftApStartedState);//切换状态
                    break;
                case CMD_START_AP_FAILURE:
                    setWifiApState(WIFI_AP_STATE_FAILED, message.arg1);//发送广播,告知SoftAp未成功打开
                    transitionTo(mInitialState);//切换到初始状态
最终状态在SoftApStartedState:
    class SoftApStartedState extends State {
        @Override
        public boolean processMessage(Message message) {
            logStateAndMessage(message, getClass().getSimpleName());

            switch(message.what) {
                case CMD_STOP_AP:
                    if (DBG) log("Stopping Soft AP");
                    /* We have not tethered at this point, so we just shutdown soft Ap */
                    try {
                        mNwService.stopAccessPoint(mInterfaceName);
                    } catch(Exception e) {
                        loge("Exception in stopAccessPoint()");
                    }
                    setWifiApState(WIFI_AP_STATE_DISABLED, 0);
                    transitionTo(mInitialState);
                    break;
                case CMD_START_AP:
                    // Ignore a start on a running access point
                    break;
                    // Fail client mode operation when soft AP is enabled
                case CMD_START_SUPPLICANT:
                    loge("Cannot start supplicant with a running soft AP");
                    setWifiState(WIFI_STATE_UNKNOWN);
                    break;
                case CMD_TETHER_STATE_CHANGE:
                    TetherStateChange stateChange = (TetherStateChange) message.obj;
                    if (startTethering(stateChange.available)) {
                        transitionTo(mTetheringState);
                    }
                    break;
                default:
                    return NOT_HANDLED;
            }
            return HANDLED;
        }
到这里,一个完整的SoftAp打开流程就结束了。

二、SoftAp关闭流程

关闭SoftAp的方法调用与打开SoftAp一致,不过enabled此时是为false:
public boolean setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled) 
由第一部分的内容可知WifiController状态机在处理完SoftAp打开后,停在ApEnabledState状态,那么我们看它是怎么处理CMD_SET_AP的:
 case CMD_SET_AP:
      if (msg.arg1 == 0) {
              mWifiStateMachine.setHostApRunning(null, false);//在WifiStateMachine中开始热点关闭流程
              transitionTo(mApStaDisabledState);//切换到初始状态
       }
       break;
有前述可知,如果参数enabled为false,mag.arg1就应该为0,调用setHostApRunning()走关闭流程,并将WifiController中的状态重置为ApStaDisabledState,等待下一次流程的开始。看setHostApRunning():
    /**
     * TODO: doc
     */
    public void setHostApRunning(WifiConfiguration wifiConfig, boolean enable) {
        if (enable) {
            sendMessage(CMD_START_AP, wifiConfig);
        } else {
            sendMessage(CMD_STOP_AP);
        }
    }
发送CMD_STOP_AP消息;已知SoftAp成功打开后,WifiStateMachine停留在SoftApStartedState,看其处理:
                case CMD_STOP_AP:
                    if (DBG) log("Stopping Soft AP");
                    /* We have not tethered at this point, so we just shutdown soft Ap */
                    try {
                        mNwService.stopAccessPoint(mInterfaceName);//直接关闭SoftAp
                    } catch(Exception e) {
                        loge("Exception in stopAccessPoint()");
                    }
                    setWifiApState(WIFI_AP_STATE_DISABLED, 0);//发送广播,告知外界SoftAp的状态
                    transitionTo(mInitialState);//切换到初始状态
首先,通过NetworkManagermentService关闭SoftAp,并发送广播通知SoftAp的状态改变;最后WifiStateMachine切换到InitialState:
public void enter() {
            WifiNative.stopHal();
            mWifiNative.unloadDriver();
            if (mWifiP2pChannel == null) {
                mWifiP2pChannel = new AsyncChannel();
                mWifiP2pChannel.connect(mContext, getHandler(),
                    mWifiP2pServiceImpl.getP2pStateMachineMessenger());
            }

            if (mWifiApConfigChannel == null) {
                mWifiApConfigChannel = new AsyncChannel();
                mWifiApConfigStore = WifiApConfigStore.makeWifiApConfigStore(
                        mContext, getHandler());
                mWifiApConfigStore.loadApConfiguration();
                mWifiApConfigChannel.connectSync(mContext, getHandler(),
                        mWifiApConfigStore.getMessenger());
            }

            if (mWifiConfigStore.enableHalBasedPno.get()) {
                // make sure developer Settings are in sync with the config option
                mHalBasedPnoEnableInDevSettings = true;
            }
        }
停掉HAL层,卸载驱动;重新等待下一次Wifi/SoftAp的启动过程。到此,热点关闭的动作就结束了。
PS:
WifiManager中提供了两个关于SoftAp的操作函数:
1、设置SoftAP的配置信息
    /**
     * Sets the Wi-Fi AP Configuration.
     * @return {@code true} if the operation succeeded, {@code false} otherwise
     *
     * @hide Dont open yet
     */
    public boolean setWifiApConfiguration(WifiConfiguration wifiConfig) {
        try {
            mService.setWifiApConfiguration(wifiConfig);
            return true;
        } catch (RemoteException e) {
            return false;
        }
    }
设置Wi-Fi AP的配置信息,它真正的处理过程是向WifiApConfigStore发送CMD_SET_AP_CONFIG消息,告知其要更新配置信息了。这一部分处理在第一部分已经分析过。
2、获取当前SoftAp正在使用的配置信息
    /**
     * Gets the Wi-Fi AP Configuration.
     * @return AP details in WifiConfiguration
     *
     * @hide Dont open yet
     */
    public WifiConfiguration getWifiApConfiguration() {
        try {
            return mService.getWifiApConfiguration();
        } catch (RemoteException e) {
            return null;
        }
    }
它真正的处理过程是向WifiApConfigStore发送CMD_REQUEST_AP_CONFIG消息,请求WifiApConfigStore::mWifiApConfig成员,第一部分也已经说过,该变量保存的就是当前SoftAp正在使用的配置信息。


作者:csdn_of_coder 发表于2016/9/3 16:56:39 原文链接
阅读:51 评论:0 查看评论

数据结构(3)--循环链表

$
0
0

单向循环链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针不再是结束标记,而是指向整个链表的第一个结点,从而使单链表形成一个环。

和单链表相比,循环单链表的长处是从链尾到链头比较方便。当要处理的数据元素序列具有环型结构特点时,适合于采用循环单链表。

和单链表相同,循环单链表也有带头结点结构和不带头结点结构两种,带头结点的循环单链表实现插入和删除操作时,算法实现较为方便。
循环链表与单链表最重要的区别是:尾结点的指针,不再是p->next = null;而是:p->next=head。

主要的思想还是:我们要多次反复了解到我们假如添加了尾部节点,就要修改尾部的next指针域,让它指向heand头结点.

代码如下:
Node类:

/**
 * 循环表节点
 * @author Administrator
 *
 * @param <T>
 */
public class NewNode<T> {

        private T data;
        private NewNode next;

        NewNode(T data, NewNode next) {
            this.data = data;
            this.next = next;
        }

        NewNode(T data) {
            this(data,null);
        }

        NewNode() {
            this(null,null);
        }

        public T getData() {
            return this.data;
        }

        public NewNode getNext() {
            return this.next;
        }

        public void setData(T data) {
            this.data = data;
        }

        public void setNext(NewNode next) {
            this.next = next;
        }

        public String toString() {
            return getData().toString();
        }


}

循环单链表:

    /**
     * 循环链表其实跟单链表实现差不多,不过在尾部的指针指向在判断的时候,我们之前是一旦有空就不进行下去,现在是判断最后一个位置不是头指针.
     * @author Administrator
     * @param <T>
     *
     */
    public class CycleLinkList<T> {
        public NewNode<T> head,tail;//声明头尾节点
        //构造函数,建立空表
        public CycleLinkList() {
            this(null);
        }

        public CycleLinkList(T data) {
            if(data==null){
                head=new NewNode<T>(data,null);//创建头节点 ,数据为data,指针为空
                tail=head;//头尾节点一样
                tail.setNext(head);//尾节点的指针域指向头结点   
            }else{
                head=new NewNode<T>();
                tail=new NewNode<T>(data, head);//定义头尾节点
                head.setNext(tail);//这一个可能稍微难以理解,这里的其实就是在初始化一个空表,我们设定的tail其实指是一个动态声明的为指针

            }
        }
        //  清空链表,头=尾,this = null;
        public void clear() {
            removeAll();
            head.setNext(tail);
            tail.setNext(head);
            head = tail;
        }
        //  如果头=尾,返回true;否则,返回false
        public boolean isEmpty() {
            return tail == head;
        }

        // 获取链表当前元素个数,即表长
        // 原理判断假如temp不是尾节点,就一直获取下去,知道temp是尾节点
        public int Length() {
            int len = 0;
            NewNode<T> temp = head;//头结点
            while(temp.getNext() != head) { //
                len++;
                temp = temp.getNext();
            }
            return len;
        }


        public T getElement(int index){
            if(index<0){
                return  null;
            }
            NewNode<T> temp=head;
            int j=0;
            //这里主要是利用判断结点是否为最后的节点
            while(j<=index&&temp.getNext()!=head){
                j++;
                temp=temp.getNext();

            }
            return temp.getData();

        }

    //  尾添 
        /**
         * 思路:
         * 1. 新建结点,设定next为head
         * 2. 通过改变原来尾节点的next值进行改变
         * 3. 将temp作为尾节点
         * 注意:head、tail其实只是一个标志声明
         * @param element
         * @return
         */
        public boolean add(T element) {
            if(element == null) return false;
            NewNode<T> temp = new NewNode<T>(element,head);
            tail.setNext(temp);
            tail = temp;
            return true;
        }

         //  首添
        /**
         * 思路:
         * 1. 新建结点,设定next为原来的head.next;
         * 2. 将头结点的下一个坐标设置为新的点
         * 
         * @param element
         * @return
         */
        public boolean addHead(T element) {
            if(element == null) return false;
            NewNode<T> temp = new NewNode<T>(element,head.getNext());
            head.setNext(temp);
            return true;
        }

        private void removeAll() {
            // TODO Auto-generated method stub

        }
    //  任意位置添加
        public boolean addByIndex(int index, T element) {
            if(element == null) return false;
            if(index <= 0) 
                addHead(element); //重点在意等于0而已
            if(index >= Length())
                add(element);
            //中间插入
            /**
             * 思路:
             * 1.分别获取结点的属性
             * 2.结点属性分别修改
             * 3.获取修改后的结点
             * 4.设定结点跟在之前设定的结点后面
             */
            if(index > 0 && index < Length()) {
                int j = 0;
                NewNode<T> temp = head;
                NewNode<T> tempNext = temp.getNext();
                //通过遍历获取到了相应的node
                while(j < index && tempNext != head) {
                    j++;
                    temp = tempNext;
                    tempNext = tempNext.getNext();
                }
                NewNode<T> node = new NewNode<T>(element,tempNext);
                temp.setNext(node);
            }
            return true;
        }
    //  删除指定位置上的元素
        public T remove(int index) {
            if(isEmpty()) return null;
            T element = null;
            if(index <= 0) 
                return removeHead();
            if(index > Length())
                index = Length()-1;
            if(index > 0) {
                int j = 0;
                NewNode<T> temp = head;
                NewNode<T> tempNext = head.getNext();
                while(j < index && tempNext != head) {
                    temp = tempNext;
                    tempNext = tempNext.getNext();
                    j++;
                }
                element = tempNext.getData();
                temp.setNext(tempNext.getNext());
            }
            return element;
        }

    //  删除表中的第一条element的数据
        public T remove(T element) {
            if(isEmpty()) return null;
            if(element == null) return null;
            NewNode<T> temp = head.getNext();
            while(temp != head) {
                if(!(element.equals(temp.getData()))) {
                    temp = temp.getNext();
                }else{
                    return element;
                }
            }
            return null;
        }

    //  删除表头数据
        private T removeHead() {
            if(isEmpty()) return null;
            NewNode<T> firstNode = head.getNext();
            T element = firstNode.getData();
            head.setNext(head.getNext().getNext());
            return element;
        }
         //  重写父类toString()方法
        public String toString() {
            if(isEmpty())
                return "[ ]";
            StringBuffer sb = new StringBuffer();
            sb.append("[ ");
            int L = Length();
            for(int i = 0; i < L; i++) {
                sb.append(getElement(i)+" ");
            }
            sb.append("]");
            return sb.toString();
        }

    }

约瑟夫问题(单链表经典问题):

        /**
         * 有M个人,其编号分别为1-M。这M个人按顺序排成一个圈。
         * 现在给定一个数N,从第一个人开始依次报数,数到N的人出列,
         * 然后又从下一个人开始又从1开始依次报数,
         * 数到N的人又出列...如此循环,直到最后所有人出列为止。
         * 输出出列轨迹
         * 约瑟夫问题
         *
         *解决思路:
         *1 .定义两个LinkedList数组
         *2. 数完一圈就获取到暂时出列的人,将出列的人放到临时数组
         *3. 遍历临时数组,然后删除总数组中有着临时数组被选出的人
         *4. 再清空临时数组,接着继续使用刚刚的方法
         *
         */
            //存放M
            List<String> list = new LinkedList<String>();
            //一圈数数完之后,临时存放出列的人
            List<String> tmp = new LinkedList<String>();

            public CycleLinkedTest_Josephus(int m)
            {
                for (int i = 1; i <= m; i++)
                {
                    list.add(i + "");
                }
            }

            /**
             * 递归 执行主体
             * @param start
             * @param n
             */
            public void start(int start,int n)
            {
                int size = list.size();
                if (list.size() == 0)
                {
                    System.out.println("结束!!");
                    return ;
                }
                for (int i = 1; i <= size; i++)
                {
                    if ((i + start) % n == 0)
                    {
                        System.out.println(list.get(i - 1) + " 出局,");
                        tmp.add(list.get(i - 1));
                    }
                }
                //在m中删除临时队列的人
                for (String str : tmp)
                {
                    list.remove(str);
                }
                //清除list
                tmp.clear();
                //递归
                start((size + start) % n,n);
            }

            public static void main(String[] args)
            {
                long t1=System.currentTimeMillis();

                //M=100
                CycleLinkedTest_Josephus cj = new CycleLinkedTest_Josephus(2);
                //n=7
                cj.start(0,3);

                System.out.print("该算法花费时间:");
                System.out.println(System.currentTimeMillis()-t1+"ms");

            }


    }

单链表的其他面试题:
1. 查找单链表中的倒数第k个结点:
这里我们需要一个概念,就是快慢指针的概念.笼统地说,就是定义两个指针同步行走,但是位置不一样却又有关联.
指针1-(first):起点为第一个结点
指针2-(seond):移动到k-1
当指针2移动到size,这时候指针1就会在k的位置啦.

   public Node findLastNode(Node head, int k) {
            if (k == 0 || head == null) {
                return null;
            }

            Node first = head;
            Node second = head;

            //让second结点往后挪k-1个位置
            for (int i = 0; i < k - 1; i++) {
                System.out.println("i的值是" + i);
                second = second.next;
                if (second == null) { //说明k的值已经大于链表的长度了,做一次判断
                    //throw new NullPointerException("链表的长度小于" + k); //我们自己抛出异常,给用户以提示
                    return null;
                }
            }

            //让first和second结点整体向后移动,直到second走到最后一个结点
            while (second.next != null) {
                first = first.next;
                second = second.next;
            }

        //当second结点走到最后一个节点的时候,此时first指向的结点就是我们要找的结点
        return first;
    }

查找单链表中的中间结点(同样的思想):
这次是first走一步,second就走2步了.
//方法:查找链表的中间结点

       public Node findMidNode(Node head) {

        if (head == null) {
            return null;
        }

        Node first = head;
        Node second = head;
        //每次移动时,让second结点移动两位,first结点移动一位
        while (second != null && second.next != null) {
            first = first.next;
            second = second.next.next;
        }

        //直到second结点移动到null时,此时first指针指向的位置就是中间结点的位置
        return first;
    }



链表的翻转:


         //方法:链表的反转
         public Node reverseList(Node head) {

        //如果链表为空或者只有一个节点,无需反转,直接返回原链表的头结点
        if (head == null || head.next == null) {
            return head;
        }

        Node current = head;
        Node next = null; //定义当前结点的下一个结点
        Node reverseHead = null;  //反转后新链表的表头

        while (current != null) {
            next = current.next;  //暂时保存住当前结点的下一个结点,因为下一次要用

            current.next = reverseHead; //将current的下一个结点指向新链表的头结点
            reverseHead = current;  

            current = next;   // 操作结束后,current节点后移
        }

        return reverseHead;
    }
作者:qq_32421769 发表于2016/9/3 17:08:18 原文链接
阅读:47 评论:0 查看评论

Android编译系统-mm编译单个模块

$
0
0

因为Android的编译系统不同于Linux Kernel的递归式的编译系统,它的编译系统是一种称之为independent的模式,每个模块基本独立(它有可能依赖其他模块),每个模块都可以单独编译,这是Android independent编译系统模式的好处。但这并不意味着它是完美的,普通电脑编译android系统需要8个小时甚至更多(以本人的电脑为例),而编译linux kernel只需要半个小时,代码量是一回事,由independent模式造成的编译时间长应该是可以肯定的。正因为每个模块可以单独编译,所以android系统的编译就是依次编译每个模块,然后把所有编译好的模块和其他一些文件一起打包成镜像文件。因此,只要理解了每个模块的编译,理解android系统的编译就轻松多了。(以上均是个人观点,欢迎拍砖)

在我们source build/envsetup.sh 和 lunch 后,就可以执行mm命令编译单个模块了:

所以,编译的其实位置从mm说起:

function mm()
{
    local T=$(gettop)
    local DRV=$(getdriver $T)
    # If we're sitting in the root of the build tree, just do a
    # normal make.
    if [ -f build/core/envsetup.mk -a -f Makefile ]; then
        $DRV make $@
    else
        # Find the closest Android.mk file.
        local M=$(findmakefile)
        local MODULES=
        local GET_INSTALL_PATH=
        local ARGS=
        # Remove the path to top as the makefilepath needs to be relative
        local M=`echo $M|sed 's:'$T'/::'`
        if [ ! "$T" ]; then
            echo "Couldn't locate the top of the tree.  Try setting TOP."
            return 1
        elif [ ! "$M" ]; then
            echo "Couldn't locate a makefile from the current directory."
            return 1
        else
            for ARG in $@; do
                case $ARG in
                  GET-INSTALL-PATH) GET_INSTALL_PATH=$ARG;;
                esac
            done
            if [ -n "$GET_INSTALL_PATH" ]; then
              MODULES=
              ARGS=GET-INSTALL-PATH
            else
              MODULES=all_modules
              ARGS=$@
            fi
            ONE_SHOT_MAKEFILE=$M $DRV make -C $T -f build/core/main.mk $MODULES $ARGS
        fi
    fi
}

这个函数做了三件事情:1.找到Android.mk文件,2.设置ONE_SHOT_MAKEFILE=$M,3.执行make all_modules进行编译

1.findmakefile:

function findmakefile()
{
    TOPFILE=build/core/envsetup.mk
    local HERE=$PWD
    T=
    while [ \( ! \( -f $TOPFILE \) \) -a \( $PWD != "/" \) ]; do
        T=`PWD= /bin/pwd`
        if [ -f "$T/Android.mk" ]; then
            echo $T/Android.mk
            \cd $HERE
            return
        fi
        \cd ..
    done
    \cd $HERE
}
这个函数首先在当前目录下查找Android.mk,如果没有就向上查找。

2.ONE_SHOT_MAKEFILE=$M

$M = $(findmakefile),所以它就是用来编译的那个模块的Android.mk,一般情况下,如果你在当前目录下执行mm,而且当前目录下如果有个Android.mk的话,那她就是这个Android.mk的路劲+Android.mk了。

3.make -C $T -f build/core/main.mk $MODULES $ARGS

-C $T表明还是在源码顶级目录下执行make的,传入的参数一个是$MODULES=all_modules,$ARGS为空

这个时候,代码机会执行顶级的Makefile:

### DO NOT EDIT THIS FILE ###
include build/core/main.mk
### DO NOT EDIT THIS FILE ###

加载main.mk


main.mk往下加载,不久我们就看到了我们在mm函数中设置的ONE_SHOT_MAKEFILE变量了:

ifneq ($(ONE_SHOT_MAKEFILE),)
# We've probably been invoked by the "mm" shell function
# with a subdirectory's makefile.
include $(ONE_SHOT_MAKEFILE)
# Change CUSTOM_MODULES to include only modules that were
# defined by this makefile; this will install all of those
# modules as a side-effect.  Do this after including ONE_SHOT_MAKEFILE
# so that the modules will be installed in the same place they
# would have been with a normal make.
CUSTOM_MODULES := $(sort $(call get-tagged-modules,$(ALL_MODULE_TAGS)))
FULL_BUILD :=
# Stub out the notice targets, which probably aren't defined
# when using ONE_SHOT_MAKEFILE.
NOTICE-HOST-%: ;
NOTICE-TARGET-%: ;

# A helper goal printing out install paths
.PHONY: GET-INSTALL-PATH
GET-INSTALL-PATH:
	@$(foreach m, $(ALL_MODULES), $(if $(ALL_MODULES.$(m).INSTALLED), \
		echo 'INSTALL-PATH: $(m) $(ALL_MODULES.$(m).INSTALLED)';))

else # ONE_SHOT_MAKEFILE
这里判断ONE_SHOT_MAKEFILE是否为空,当然不为空了。紧接着开始加载这个Android.mk,也就是我们要编译的那个Android.mk。简单起见,这里以frameworks/base/cmds/screencap模块的编译为例,它的内容如下:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \
    screencap.cpp

LOCAL_SHARED_LIBRARIES := \
    libcutils \
    libutils \
    libbinder \
    libskia \
    libui \
    libgui

LOCAL_MODULE:= screencap

LOCAL_MODULE_TAGS := optional

LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code

include $(BUILD_EXECUTABLE)
它的变量非常少,这很有利于我们搞清它编译的过程。include 这个Android.mk后,又include $(CLEAR_VARS)
core/config.mk:69:CLEAR_VARS:= $(BUILD_SYSTEM)/clear_vars.mk
CLEAR_VARS定义在config.mk文件中,它指向一个clear_vars.mk文件:

LOCAL_MODULE:=
LOCAL_MODULE_PATH:=
LOCAL_MODULE_RELATIVE_PATH :=
LOCAL_MODULE_STEM:=
LOCAL_DONT_CHECK_MODULE:=
LOCAL_CHECKED_MODULE:=
LOCAL_BUILT_MODULE:=
LOCAL_BUILT_MODULE_STEM:=
。。。
这个文件就是把一大堆的文件置为空,除了LOCAL_PATH变量之外。

接着,它有include BUILD_EXTABLE指向的脚本。

core/config.mk:74:BUILD_EXECUTABLE:= $(BUILD_SYSTEM)/executable.mk
BUILD_EXTABLE变量也定义在config.mk中,它指向的excutable.mk脚本内容如下:




关于阅读Makefile,个人观点就是紧追依赖链。我们执行的make的时候不是传了一个目标叫all_mudules了吗?所以make就会从它开始推导依赖关系,然后从依赖链的最叶子的位置生成目标,一次向上。所以那就看看all_modules:

# phony target that include any targets in $(ALL_MODULES)
.PHONY: all_modules
ifndef BUILD_MODULES_IN_PATHS
all_modules: $(ALL_MODULES)
else
# BUILD_MODULES_IN_PATHS is a list of paths relative to the top of the tree
module_path_patterns := $(foreach p, $(BUILD_MODULES_IN_PATHS),\
    $(if $(filter %/,$(p)),$(p)%,$(p)/%))
my_all_modules := $(sort $(foreach m, $(ALL_MODULES),$(if $(filter\
    $(module_path_patterns), $(addsuffix /,$(ALL_MODULES.$(m).PATH))),$(m))))
all_modules: $(my_all_modules)
endif
all_modules的依赖取决于有没有定义BUILD_MODULES_IN_PATHS,然而我们并有定义它,所以它就all_modules的依赖就是$(ALL_MODULES)。

至此,就需要我们一步步推导依赖关系了,为方便理解,现直接把依赖关系以图的形式列出:


由于一张显示不完,$(linked_module)的依赖如下:




图中的变量未经推导,为了方便对比,推导出变量的值后的图如下:


$(linked_module):


从图中可以看到最终生成的文件有:

out/target/product/xxx/obj/excutable/screepcap__intermediates/screencap

out/target/product/xxx/symbols/system/bin/screencap

out/target/product/xxx/obj/excutable/screepcap__intermediates/PACKED/screencap

out/target/product/xxx/obj/excutable/screepcap__intermediates/LINKED/screencap

out/target/product/xxx/obj/excutable/screepcap__intermediates/screencap.o

out/target/product/xxx/obj/excutable/screepcap__intermediates/export_includes out/target/product/xxx/obj/excutable/screepcap__intermediates/import_includes

至于变量的推导过程,大家顺着文件加载的顺序慢慢推导就是了,这个过程可能比较花时间,但也是没办法的事。

以下是一些重要文件的加载顺序(只有部分比较重要的):


画圈的是我认为非常重要的文件。

在所有依赖生成以后,Android是怎么编译某个模块的呢?

以下是我认为的核心代码,代码在dynamic_binary.mk中:

$(linked_module): $(my_target_crtbegin_dynamic_o) $(all_objects) $(all_libraries) $(my_target_crtend_o)
	$(transform-o-to-executable)
还记得我们推导出来的linked_module的值吗?它等于:

out/target/product/xxx/obj/excutable/screepcap__intermediates/LINKED/screencap

生成这个文件后,从依赖关系上也可以看出,其他文件在此基础上生成,而这个文件使用transform-o-to-executable函数生成,该函数定义如下:

define transform-o-to-executable
@mkdir -p $(dir $@)
@echo "target Executable: $(PRIVATE_MODULE) ($@)"
$(transform-o-to-executable-inner)
endef
调用transform-o-to-executable-inner函数进一步处理:

define transform-o-to-executable-inner
$(hide) $(PRIVATE_CXX) -pie \
	-nostdlib -Bdynamic \
	-Wl,-dynamic-linker,$($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_LINKER) \
	-Wl,--gc-sections \
	-Wl,-z,nocopyreloc \
	$(PRIVATE_TARGET_GLOBAL_LD_DIRS) \
	-Wl,-rpath-link=$(PRIVATE_TARGET_OUT_INTERMEDIATE_LIBRARIES) \
	$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTBEGIN_DYNAMIC_O)) \
	$(PRIVATE_ALL_OBJECTS) \
	-Wl,--whole-archive \
	$(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
	-Wl,--no-whole-archive \
	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \
	$(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \
	$(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_TARGET_LIBGCOV)) \
	$(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_TARGET_LIBPROFILE_RT)) \
	$(PRIVATE_TARGET_LIBATOMIC) \
	$(PRIVATE_TARGET_LIBGCC) \
	$(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
	-o $@ \
	$(PRIVATE_TARGET_GLOBAL_LDFLAGS) \
	$(PRIVATE_LDFLAGS) \
	$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTEND_O)) \
	$(PRIVATE_LDLIBS)
endef

这个函数使用clang编译器,最终生成了$(linked_module)目标。

而从$(linked_module)生成out/target/product/xxx/obj/excutable/screepcap__intermediates/PACKED/screencap则使用了如下方法:

$(relocation_packer_output): $(relocation_packer_input) | $(ACP)
	@echo "target Unpacked: $(PRIVATE_MODULE) ($@)"
	$(copy-file-to-target)
endif
copy-file-to-target定义如下:

define copy-file-to-target
@mkdir -p $(dir $@)
$(hide) $(ACP) -fp $< $@
endef

可以看就是一个简单的拷贝,所以这两个文件并没有什么不同。

生成out/target/product/xxx/symbols/system/bin/screencap也是在$(linked_module)的基础上做拷贝:

$(symbolic_output) : $(symbolic_input) | $(ACP)
	@echo "target Symbolic: $(PRIVATE_MODULE) ($@)"
	$(copy-file-to-target)
浏览其他几个screencap文件的生成方法发现,其他几个screencap文件都是在$(linked_module)基础上拷贝而来,而$(linked_module)文件则使用transform-o-to-executable编译生成。因此,到这里一个完整的可执行文件的编译就告一段落了。编译apk、共享库等其他模块的思路都与之类似,正所谓触类旁通,只要完整掌握了一种类型模块的编译,其他类型的模块编译都变得容易理解了。









作者:u011913612 发表于2016/9/3 17:14:45 原文链接
阅读:88 评论:0 查看评论

使用surfaceview实现直播中的点赞效果

$
0
0

转载请注明出处 http://blog.csdn.net/u011453163/article/details/52424328

直播功能现在已经是一个很热门的功能了,很多应用都会涉及到直播模块,比如 花椒 NOW 还有辣妈帮。。等,最近因为项目需要也加入了直播功能。直播中有一个点赞的效果 ,今天我也按照自己的思路实现了一个这样的点赞功能,效果如下:
这里写图片描述

简单描述一下效果
1.产生一颗心
2.由下至上的曲线运动
3.开头有一段放大效果
4.透明度渐变效果

实现以上效果涉及到的知识点
曲线轨迹 :属性动画+贝赛尔曲线算法
由于点赞效果在直播中的持续时间是比较长的
所以这里使用的是surfaceview 可以在工作线程中绘制ui
ui绘制:surfaceview

该效果的轨迹原型图
这里写图片描述

轨迹坐标点是通过属性动画 TypeEvaluator 生成的

 private class BezierEvaluator implements TypeEvaluator<Point> {

        private Point centerPoint;

        public BezierEvaluator(Point centerPoint) {
            this.centerPoint = centerPoint;
        }

        @Override
        public Point evaluate(float t, Point startValue, Point endValue) {
            int x = (int) ((1 - t) * (1 - t) * startValue.x + 2 * t * (1 - t) * centerPoint.x + t * t * endValue.x);
            int y = (int) ((1 - t) * (1 - t) * startValue.y + 2 * t * (1 - t) * centerPoint.y + t * t * endValue.y);
            return new Point(x, y);
        }
    }

接下来分享一下代码的实现思路
由两个类构成的 Zanbean ZanView

public class ZanBean {

    /**心的当前坐标*/
    public Point point;
    /**移动动画*/
    private ValueAnimator moveAnim;
    /**放大动画*/
    private ValueAnimator zoomAnim;
    /**透明度*/
    public int alpha=255;//
    /**心图*/
    private Bitmap bitmap;
    /**绘制bitmap的矩阵  用来做缩放和移动的*/
    private Matrix matrix = new Matrix();
    /**缩放系数*/
    private float sf=0;
    /**产生随机数*/
    private Random random;
    public boolean isEnd=false;//是否结束
    public ZanBean(Context context,int resId,ZanView zanView) {
        random=new Random();
        bitmap= BitmapFactory.decodeResource(context.getResources(),resId);
        init(new Point(zanView.getWidth() / 2, zanView.getHeight()), new Point((random.nextInt(zanView.getWidth())), 0));
    }
    public ZanBean(Context context,Bitmap bitmap,ZanView zanView) {
        random=new Random();
        this.bitmap= bitmap;
        init(new Point(zanView.getWidth() / 2, zanView.getHeight()), new Point((random.nextInt(zanView.getWidth())), 0));
    }
    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    private void init(final Point startPoint, Point endPoint){
        moveAnim =ValueAnimator.ofObject(new BezierEvaluator(new Point(random.nextInt(startPoint.x*2),Math.abs(endPoint.y-startPoint.y)/2)),startPoint,endPoint);
        moveAnim.setDuration(2500);
        moveAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                point= (Point) animation.getAnimatedValue();
                alpha= (int) ((float)point.y/(float)startPoint.y*255);
            }
        });
        moveAnim.start();
        zoomAnim =ValueAnimator.ofFloat(0,1f).setDuration(700);
        zoomAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                Float f= (Float) animation.getAnimatedValue();
                sf=f.floatValue();
            }
        });
        zoomAnim.start();
    }

    public void pause(){
        if(moveAnim !=null&& moveAnim.isRunning()){
            moveAnim.pause();
        }
        if(zoomAnim !=null&& zoomAnim.isRunning()){
            zoomAnim.pause();
        }
    }

    public void resume(){
        if(moveAnim !=null&& moveAnim.isPaused()){
            moveAnim.resume();
        }
        if(zoomAnim !=null&& zoomAnim.isPaused()){
            zoomAnim.resume();
        }
    }

    /**主要绘制函数*/
    public void draw(Canvas canvas, Paint p){
        if(bitmap!=null&&alpha>0) {
            p.setAlpha(alpha);
            matrix.setScale(sf,sf,bitmap.getWidth()/2,bitmap.getHeight()/2);
            matrix.postTranslate(point.x-bitmap.getWidth()/2,point.y-bitmap.getHeight()/2);
            canvas.drawBitmap(bitmap, matrix, p);
        }else {
            isEnd=true;
        }
    }
    /**
     * 二次贝塞尔曲线
     */
    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    private class BezierEvaluator implements TypeEvaluator<Point> {

        private Point centerPoint;

        public BezierEvaluator(Point centerPoint) {
            this.centerPoint = centerPoint;
        }

        @Override
        public Point evaluate(float t, Point startValue, Point endValue) {
            int x = (int) ((1 - t) * (1 - t) * startValue.x + 2 * t * (1 - t) * centerPoint.x + t * t * endValue.x);
            int y = (int) ((1 - t) * (1 - t) * startValue.y + 2 * t * (1 - t) * centerPoint.y + t * t * endValue.y);
            return new Point(x, y);
        }
    }
}

Zanbean
用来记录心的轨迹 和 绘制的工作

这里简单介绍一下init方法

 @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    private void init(final Point startPoint, Point endPoint){
        moveAnim =ValueAnimator.ofObject(new BezierEvaluator(new Point(random.nextInt(startPoint.x*2),Math.abs(endPoint.y-startPoint.y)/2)),startPoint,endPoint);
        moveAnim.setDuration(2500);
        moveAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                point= (Point) animation.getAnimatedValue();
                alpha= (int) ((float)point.y/(float)startPoint.y*255);
            }
        });
        moveAnim.start();
        zoomAnim =ValueAnimator.ofFloat(0,1f).setDuration(700);
        zoomAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                Float f= (Float) animation.getAnimatedValue();
                sf=f.floatValue();
            }
        });
        zoomAnim.start();
    }

在创建对象的时候 属性动画会直接启动。更符合场景,相当每个心丢进画面就会自动跑起来,每个心都是独立的个体

然后是ZanView 画面绘制和呈现的主体

public class ZanView extends SurfaceView implements SurfaceHolder.Callback {

    private SurfaceHolder surfaceHolder;

    /**心的个数*/
    private ArrayList<ZanBean> zanBeen = new ArrayList<>();
    private Paint p;
    /**负责绘制的工作线程*/
    private DrawThread drawThread;
    public ZanView(Context context) {
        this(context, null);
    }

    public ZanView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public ZanView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        this.setZOrderOnTop(true);
        /**设置画布  背景透明*/
        this.getHolder().setFormat(PixelFormat.TRANSLUCENT);
        surfaceHolder = getHolder();
        surfaceHolder.addCallback(this);
        p = new Paint();
        p.setAntiAlias(true);
        drawThread = new DrawThread();
    }

    /**点赞动作  添加心的函数 控制画面最大心的个数*/
    public void addZanXin(ZanBean zanBean){
        zanBeen.add(zanBean);
        if(zanBeen.size()>40){
            zanBeen.remove(0);
        }
        start();
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        if(drawThread==null){
            drawThread=new DrawThread();
        }
        drawThread.start();
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        if(drawThread!=null){
            drawThread.isRun = false;
            drawThread=null;
        }
    }

    class DrawThread extends Thread {
        boolean isRun = true;
        @Override
        public void run() {
            super.run();
            /**绘制的线程 死循环 不断的跑动*/
            while (isRun) {
                Canvas canvas = null;
                try {
                    synchronized (surfaceHolder) {
                        canvas = surfaceHolder.lockCanvas();
                        /**清除画面*/
                        canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
                        boolean isEnd=true;

                        /**对所有心进行遍历绘制*/
                        for (int i = 0; i < zanBeen.size(); i++) {
                            isEnd=zanBeen.get(i).isEnd;
                            zanBeen.get(i).draw(canvas, p);
                        }
                        /**这里做一个性能优化的动作,由于线程是死循环的 在没有心需要的绘制的时候会结束线程*/
                        if(isEnd){
                            isRun=false;
                            drawThread=null;
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    if (canvas != null) {
                        surfaceHolder.unlockCanvasAndPost(canvas);
                    }
                }
            try {
                /**用于控制绘制帧率*/
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }}
    }

     public void stop(){
         if(drawThread!=null){

             for (int i = 0; i < zanBeen.size(); i++) {
                 zanBeen.get(i).pause();
             }

             drawThread.isRun=false;
             drawThread=null;
         }

     }

    public void start(){
        if(drawThread==null){
            for (int i = 0; i < zanBeen.size(); i++) {
                zanBeen.get(i).resume();
            }
        drawThread=new DrawThread();
        drawThread.start();}
    }
}

以上是ZanView的所有代码 重要的地方都做了注释 还是比较好懂的吧

为了验证贝赛尔曲线
只要将这句话注释就能看到每一帧的轨迹

          /**清除画面*/
                        canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);

这里写图片描述

以上就是关于点赞 心动的效果 有什么问题欢迎指出

作者:u011453163 发表于2016/9/3 17:17:27 原文链接
阅读:82 评论:0 查看评论

MPAndroidChart~BarChart

$
0
0

简介

MPAndroidChart是PhilJay大神给Android开发者带来的福利。MPAndroidChart是一个功能强大并且使用灵活的图表开源库,支持Android和IOS两种,这里我们暂时只关注Android版本。

Wiki

https://github.com/PhilJay/MPAndroidChart/wiki

Javadoc

https://jitpack.io/com/github/PhilJay/MPAndroidChart/v3.0.0-beta1/javadoc/

今日之图~LineChart

先看图,压压惊
这里写图片描述

这里写图片描述

布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="mapdemo.example.com.mpandroidchartdemo.MainActivity">
    <!-- 主布局中添加BarChart-->
    <com.github.mikephil.charting.charts.BarChart
        android:id="@+id/barchart"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Hello World!" />
</RelativeLayout>

对于Chart,可以采用布局文件添加方式,也可以采用代码添加方式。

代码

public class MainActivity extends AppCompatActivity {

    @Bind(R.id.barchart)
    BarChart barchart;

    private Random random;//用于产生随机数字

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        random = new Random();
        initBarChart();
    }

    private void initBarChart() {
        ArrayList<BarEntry> yVals = new ArrayList<>();//Y轴方向第一组数组
        ArrayList<BarEntry> yVals2 = new ArrayList<>();//Y轴方向第二组数组
        ArrayList<BarEntry> yVals3 = new ArrayList<>();//Y轴方向第三组数组
        ArrayList<String> xVals = new ArrayList<>();//X轴数据

        for (int i = 0; i < 12; i++) {//添加数据源
            xVals.add((i + 1) + "月");
            yVals.add(new BarEntry(random.nextInt(10000), i));
            yVals2.add(new BarEntry(random.nextInt(10000), i));
            yVals3.add(new BarEntry(random.nextInt(10000), i));

        }

        BarDataSet barDataSet = new BarDataSet(yVals, "小明每月支出");
        barDataSet.setColor(Color.RED);//设置第一组数据颜色

        BarDataSet barDataSet2 = new BarDataSet(yVals2, "小花每月支出");
        barDataSet2.setColor(Color.GREEN);//设置第二组数据颜色

        BarDataSet barDataSet3 = new BarDataSet(yVals3, "小蔡每月支出");
        barDataSet3.setColor(Color.YELLOW);//设置第三组数据颜色

        ArrayList<IBarDataSet> threebardata = new ArrayList<>();//IBarDataSet 接口很关键,是添加多组数据的关键结构,LineChart也是可以采用对应的接口类,也可以添加多组数据
        threebardata.add(barDataSet);
        threebardata.add(barDataSet2);
        threebardata.add(barDataSet3);

        BarData bardata = new BarData(xVals, threebardata);
        barchart.setData(bardata);
        barchart.getLegend().setPosition(Legend.LegendPosition.ABOVE_CHART_LEFT);//设置注解的位置在左上方
        barchart.getLegend().setForm(Legend.LegendForm.CIRCLE);//这是左边显示小图标的形状

        barchart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM);//设置X轴的位置
        barchart.getXAxis().setDrawGridLines(false);//不显示网格

        barchart.getAxisRight().setEnabled(false);//右侧不显示Y轴
        barchart.getAxisLeft().setAxisMinValue(0.0f);//设置Y轴显示最小值,不然0下面会有空隙
        barchart.getAxisLeft().setDrawGridLines(false);//不设置Y轴网格

        barchart.setDescription("No Deal");//设置描述
        barchart.setDescriptionTextSize(20.f);//设置描述字体
        barchart.animateXY(1000, 2000);//设置动画
    }
}

这里,一些使用方式可以具体去看看对应的类机构,比如BarChart

这里写图片描述

通过查看它对应的源码,可以更好的使用功能,AS会自动的帮我们反编译一些内容,能借助AS很好的学习一些开源Jar包。

在上面这个例子中,如何让现实的数值为“xxx元”呢?

MPAndroidChart中存在ValueFormatter这个东西,通过这个还做一个转换,如实现“xxx元”的效果

bardata.setValueFormatter(new ValueFormatter() {
            @Override
            public String getFormattedValue(float v, Entry entry, int i, ViewPortHandler viewPortHandler) {
                return entry.getVal() + "元";//只用拿到对应Entry的值然后加个“元”即可,传入的这几个参数,v就是Y轴的value, entry为数据入口,i就是X轴方向的位置,viewPortHandler应该就是对应View的操作手,控制视图的移动缩放什么的
            }
        });

这里写图片描述

作者:poorkick 发表于2016/9/3 17:17:39 原文链接
阅读:98 评论:0 查看评论

android 移植 ffmpeg (二) 测试用例

$
0
0

android 移植 ffmpeg (一)中已经对环境进行了设置。 这一章将重点讨论怎么在应用中加入ffmpeg组件。

所有测试都将在 Android Studio工具中进行。

测试例子源地址: https://github.com/roman10/android-ffmpeg-tutorial 

本例子是在android-ffmpeg-tutorial01 基础上进行了简单调整。调整后的源码页:http://download.csdn.net/detail/net_wolf_007/9620856


一. 工程目录结构



目录中主要有6个地方进行变动,所以逐一说明一下。

1 assets路径

测试视频存放地, 目前测试视频为1.mp4. 通过命令 ffmpeg -i 1.mp4 得到视频信息。
       视频信息为:(时长10.04秒, 比特率: 352Kb/s, 分辨率: 640*360)

2 Java 文件目录

  MainActivity.java 主Java程序, 后面会对程序进行说明

Utils.java 工具类。提供了文件拷贝功能,程序中主要用于把1.mp4导入到指定目录

3 NDK工作目录 jni文件夹

      tutorial01.c: 
          测试ffmpeg源文件,主要功能,调用ffmpeg sdk分析视频,并把指定的图片上传给Java代码。后面会进一步说明。
     Applicaton.mk文件: 
           定义了应用程序编译的基本信息, 非必要。主要告诉ndk要编译的指令集,及对应的Android平台。
            Android NDK编译系统支持3种API: armeabi, armeabi-v7a和x86,分别对应 ARMv5TE, ARMv7-A和X86指令集的CPU.默认支持armeabi.
      Android.mk
           NDK 编译命令文件,用来告诉NDK如何编译此项目的。
           常用的命令在上一篇(android 移植 ffmpeg (一))文章中已经有了说明,这里仅补充没有说明的。
           LOCAL_LDLIBS := -llog -ljnigraphics -lz
                        linker flags。 可以用它来添加系统库
          LOCAL_SHARED_LIBRARIES := libavformat libavcodec libswscale libswresample libavutil
                       要链接到本模块的动态库。
          $(call import-module,ffmpeg/android)
                 import-module:  允许寻找并inport其它modules到本Android.mk中来。 它会从NDK_MODULE_PATH寻找指定的模块名。 
                   使用方法:  $(call import-module,<name>)
                这里就是把ffmpeg/android的模块导入进来,即把ffmpeg/android/下的Android.mk导入进本模块来。 
                这样上面 LOCAL_SHARED_LIBRARIES指字的库名才能找到。

4 NDK生成目录 libs目录

     一般NDK生成目录位于./libs/armeabi/目录下
    里面有目录 armeabi, 即生成支持ARMv5TE指令集的CPU的库。这些库可直接在ARMv5TE指令集的CPU上去行。
    如果要设置成支持多个指令集的话,可在 Application.mk中进行设置,则可生成多个文件夹,每个文件夹中的文件名一样。

5 build.gradle文件配置

     需要配置相应的NDK配置
     

6 local.properties 文件匹配

    需要配置SDK,NDK的路径名。我的机器的配置是:
        
     NDK的配置还可以通过如下方法进行设置: File->Project Structure… 快捷建(Command + ;)进行设置。 
    


二. 生成代码文件

生成库文件:

需要通过命令行来生成 

       命令行运行到main目录下,调用ndk_build.

172-15-70-196:main jerome$ pwd
/Users/jerome/dev/ffmpeg/android-ffmpeg-tutorial01/app/src/main
172-15-70-196:main jerome$ /Users/jerome/dev/android-ndk-r12b/ndk-build 
[armeabi] Compile thumb  : tutorial01 <= tutorial01.c
jni/tutorial01.c: In function 'naMain':
jni/tutorial01.c:117:2: warning: 'codec' is deprecated (declared at /Users/jerome/dev/android-ndk-r12b/sources/ffmpeg/android/include/libavformat/avformat.h:881) [-Wdeprecated-declarations]
  pCodecCtx=pFormatCtx->streams[videoStream]->codec;
  ^
[armeabi] SharedLibrary  : libtutorial01.so
[armeabi] Install        : libtutorial01.so => libs/armeabi/libtutorial01.so
[armeabi] Install        : libavformat-57.so => libs/armeabi/libavformat-57.so
[armeabi] Install        : libavcodec-57.so => libs/armeabi/libavcodec-57.so
[armeabi] Install        : libswscale-4.so => libs/armeabi/libswscale-4.so
[armeabi] Install        : libswresample-2.so => libs/armeabi/libswresample-2.so
[armeabi] Install        : libavutil-55.so => libs/armeabi/libavutil-55.so
172-15-70-196:main jerome$ 

编译运行apk

直接运行调试。这过程中会碰到如下问题, 需要修改ffmpeg源码,再重新编译ffmpeg:
cannot locate symbol "log2f" referenced by "libavcodec-57.so"..
cannot locate symbol "log2" referenced by "libavcodec-57.so"..
原因: 这个跟ndk与android版本有关。
解决办法: 
修改 ./libavutil/libm.h里面的定义,不再判断是否已经存在函数。使用重新定义
//#if !HAVE_LOG2
//#undef log2
#define log2(x) (log(x) * 1.44269504088896340736)
//#endif /* HAVE_LOG2 */

//#if !HAVE_LOG2F
//#undef log2f
#define log2f(x) ((float)log2(x))
//#endif /* HAVE_LOG2F */

cannot locate symbol "atof" referenced by "libavformat-57.so"...
原因:android的stdlib.h中atof是内联的, 外部模块不能直接使用。跟android版本有关。
解决办法:将所有的atof改成strtod


修改完之后:
1 重新生成ffmpeg(调用 ./build_andriod_mac.sh), 
2 调用ndk_build生成C库文件。
3. 运行android Java代码。

4. 点击界面的start按钮,生成图片。

至此,程序运行OK.

三. NDK开发运行流程

ndk-build 编译流程:

1. 查找环境变量NDK_PROJECT_PATH,如果用户没有设置,就根据如下流程查找!
    /Users/jerome/dev/android-ndk-r12b/build/core/build-local.mk中的代码部分
ifndef NDK_PROJECT_PATH
    ifneq (,$(strip $(wildcard AndroidManifest.xml)))
        NDK_PROJECT_PATH := .
    else
        ifneq (,$(strip $(wildcard jni/Android.mk)))
            NDK_PROJECT_PATH := .
        endif
    endif
endif
ifndef NDK_PROJECT_PATH
    NDK_PROJECT_PATH := $(call find-project-dir,.,jni/Android.mk)
endif
ifndef NDK_PROJECT_PATH
    NDK_PROJECT_PATH := $(call find-project-dir,.,AndroidManifest.xml)
endif
说明:就是在当前目录及父目录中查找文件:AndroidManifest.xml 或 jni/Android.mk 文件,如果找到,就把找到的目录赋给NDK_PROJECT_PATH, 如果没找到,就直接报错。Android NDK: Could not find application project directory ! 


2. 查找环境变量APP_BUILD_SCRIPT: 如果没设置,就运行如下代码。
   在/Users/jerome/dev/android-ndk-r12b/build/core/add-application.mk 中
 _build_script := $(strip $(wildcard $(APP_PROJECT_PATH)/jni/Android.mk))
    ifndef _build_script
        $(call __ndk_info,There is no Android.mk under $(APP_PROJECT_PATH)/jni)
        $(call __ndk_info,If this is intentional, please define APP_BUILD_SCRIPT to point)
        $(call __ndk_info,to a valid NDK build script.)
        $(call __ndk_error,Aborting...)
    endif
    APP_BUILD_SCRIPT := $(_build_script)
说明: 如果没找到APP_BUILD_SCRIPT的定义,就查找APP_PROJECT_PATH下的 jni/Android.mk, 如果找到就赋值给APP_BUILD_SCRIPT。如果没有找到,就报错。Android NDK: Your APP_BUILD_SCRIPT points to an unknown file: ./jni/Android.mk 

这里查找的是APP_PROJECT_PATH, 与1中的NDK_PROJECT_PATH的关系如下(core/add-application.mk 中)。
APP_PROJECT_PATH := $(strip $(APP_PROJECT_PATH))
ifndef APP_PROJECT_PATH
    APP_PROJECT_PATH := $(NDK_PROJECT_PATH)
endif
如果定义了环境变量APP_PROJECT_PATH, 就使用定义的值,如果没有就使用 NDK_PROJECT_PATH的值。

3. 加载其它模块Android.mk文件
APP_BUILD_SCRIPT中查找是否有如下语句,有,则加载对应的库文件
$(call import-module,ffmpeg/android)
查找逻辑是通过查找环境变量:NDK_MODULE_PATH下的对应模块的Android.mk文件, 上例中就是查找 ffmpeg/android/Android.mk文件。如果找不到就报错。Android NDK: jni/Android.mk: Cannot find module with tag 'ffmpeg/android' in import path    
NDK_MODULE_PATH 是可以有多个值。看脚本(core/setup-imports.mk)
NDK_MODULE_PATH := $(strip $(NDK_MODULE_PATH))
ifdef NDK_MODULE_PATH
  ifneq ($(words $(NDK_MODULE_PATH)),1)
    $(call __ndk_info,ERROR: You NDK_MODULE_PATH variable contains spaces)
    $(call __ndk_info,Please fix the error and start again.)
    $(call __ndk_error,Aborting)
  endif
endif

$(call import-init)
$(foreach __path,$(subst $(HOST_DIRSEP),$(space),$(NDK_MODULE_PATH)),\
  $(call import-add-path,$(__path))\
)
$(call import-add-path-optional,$(NDK_ROOT)/sources)
$(call import-add-path-optional,$(NDK_ROOT)/../development/ndk/sources)

由上脚本可知, 如果设置了NDK_MODULE_PATH,则就在NDK_MODULE_PATH中查找,如果没有设置,那就是$(NDK_ROOT)/sources目录中查找(还记得嘛,这也是我们编译ffmpeg存放的目录!),还就有是在$(NDK_ROOT)/../development/ndk/sources目录中查找!
$(NDK_ROOT)目录就是ndk-build运行的目录, 如果用户不确定, 可直接设置环境变量:
1. vim ~/.bash_profile
2. 添加 export NDK_ROOT=/Users/jerome/dev/android-ndk-r12b
3. source .bash_profile


4. 编译合成后的Android.mk文件,生成指定的结果文件。


这样 ndk-build的运行逻辑就清晰了。通过设置主要环境变量, 就可以实现模块化编程。
NDK_ROOT: 代码根目录, 默认为ndk-build所在的目录。
NDK_PROJECT_PATH: 默认为ndk-build运行的目录。
APP_PROJECT_PATH: 保存脚本的路径
APP_BUILD_SCRIPT: 脚本路径
NDK_MODULE_PATH: 模块路径, 用户定义的路径
还有两个系统模块路径: $(NDK_ROOT)/sources, $(NDK_ROOT)/../development/ndk/sources。

Gradle打包流程就不分析了。


四. 后记


本篇主要让程序运行起来,并分析ndk-build的逻辑,下一篇,将重点说明程序结构,及代码流程。





作者:net_wolf_007 发表于2016/9/3 17:24:02 原文链接
阅读:91 评论:0 查看评论

Crash日志,分析专用

$
0
0


iOS Crash日志

Understanding Crash Reports on iPhone OS

https://developer.apple.com/videos/wwdc/2010/?id=317

http://www.cnblogs.com/smileEvday/p/Crash1.html

http://www.cocoachina.com/industry/20130725/6677.html   

http://www.cnblogs.com/tiechui/p/3820044.html (http://developer.apple.com/library/ios/#technotes/tn2151/_index.html)

 

 

  当一个应用程序在一台iOS 设备上崩溃时,一份“崩溃报告”将在该设备上次创建并存储起来。崩溃报告描述应用程序是在何种条件下崩溃的,大部分情况下包含一份当前正在运行线程的完整的堆栈跟踪。

产生崩溃日志的原因

  • 应用违反操作系统规则,包括在启动、恢复、挂起、退出时watchdog超时、用户强制退出和低内存终止等。
  • 应用中有Bug

  从多任务窗口中终止一个暂停的应用程序不会产生崩溃日志。一旦一个应用被暂停,它有资格被iOS在任何时间终止,因此不会产生崩溃日志。

 

Crash获取途径

  • 本机通过Xcode的Devices窗口获取某个设备的崩溃日志
  • 设备与电脑上的iTunes Store同步后,会将崩溃日志保存在电脑上。根据电脑操作系统的不同,崩溃日志将保存在以下位置:
    • Mac OS X:               ~/Library/Logs/CrashReporter/MobileDevice/
    • Windows XP:            C:/Documents and Settings/Application Data/Apple Computer/Logs/CrashReporte/rMobileDevice/
    • Windows Vista以上:   C:/Users/用户名/AppData/Roaming/Apple Computer/Logs/CrashReporter/MobileDevice/
  • 应用提交到App Store后,可通过itunes connect后台获取到用户上报的Crash日志。
  • 有很多优秀的第三方Crash收集系统大大的方便了我们收集Crash,甚至还带了符号化Crash日志的功能。比较常用的有CrashlyticsFlurry等。

 

Crash文件结构

1.Process Information

复制代码
Incident Identifier: 66AFBBF0-7ACB-4319-97C7-6F44E09FF9EB         //崩溃报告的唯一标识符
CrashReporter Key:   97aec51145730a778c0d1cfdfc17c1b8c86ba4c5     //设备标识相对应的唯一键值(并非真正的设备的UDID,为保护隐私iOS6以后已无法获取)
Hardware Model:      iPad5,3                                      //发生Crash的设备类型
Process:             XXXXClient [407]                     //Crash的进程名称,通常都是我们的App的名字, []里面是当时进程的ID
Path:                /private/var/mobile/Containers/Bundle/Application/0380D606-3A40-4633-A1B2-7E1F3E3D4FCA/XXXXClient.app/XXXXClient   
            //可执行程序在手机上的存储位置,注意路径时到x.app/x,x.app其实是作为一个Bundle的,真正的可执行文件其实是Bundle里面的x Identifier: com.xxxx.myapp //App的Indentifier,通常为“com.xxx.yyy” Version: 1 (1.0.0) //App的版本号,由Info.plist中CFBundleShortVersionString + CFBundleVersion Code Type: ARM-64 (Native)                 //App的CPU架构 Parent Process: launchd [1] //当前进程的父进程,由于iOS中App通常都是单进程的,一般父进程都是launchd
复制代码

2.Basic Information

Date/Time:           2016-02-19 00:34:43.449 -0800                //Crash发生的时间
Launch Time:         2016-02-19 00:34:43.399 -0800               
OS Version:          iOS 8.4 (12H143)                             //系统版本,括号内的数字代表的时Bulid号
Report Version:      105                                          //Crash日志的格式

3.Exception

Exception Type:    EXC_CRASH (SIGABRT)                             //异常类型
Exception Subtype: //v104 Exception Codes:   0x0000000000000000, 0x0000000000000000 //v105 Triggered by Thread: 0 //v105
Crashed Thread //v104

 4.Thread Backtrace

发生Crash的线程的Crash调用栈,从上到下分别代表调用顺序,最上面的一个表示抛出异常的位置,依次往下可以看到API的调用顺序。

复制代码
Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
//编号 二进制库名 调用方法的地址 基本地址 + 偏移 0 libsystem_kernel.dylib 0x0000000194b3b270 __pthread_kill + 8 1 libsystem_pthread.dylib 0x0000000194bd916c pthread_kill + 108 2 libsystem_c.dylib 0x0000000194ab2b14 abort + 108 3 ...g_rt.asan_ios_dynamic.dylib 0x00000001032756d0 0x103224000 + 333520 4 ...g_rt.asan_ios_dynamic.dylib 0x000000010326955c 0x103224000 + 283996 5 ...g_rt.asan_ios_dynamic.dylib 0x000000010326cf28 0x103224000 + 298792 6 ...g_rt.asan_ios_dynamic.dylib 0x0000000103269640 0x103224000 + 284224 7 ...g_rt.asan_ios_dynamic.dylib 0x000000010326d0e8 0x103224000 + 299240 8 ...g_rt.asan_ios_dynamic.dylib 0x000000010325ef50 0x103224000 + 241488 9 ...g_rt.asan_ios_dynamic.dylib 0x0000000103268d18 0x103224000 + 281880 10 dyld 0x00000001200b9234 ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&) + 256 11 dyld 0x00000001200b93ec ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&) + 32 12 dyld 0x00000001200b5688 ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&) + 328 13 dyld 0x00000001200b561c ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&) + 220 14 dyld 0x00000001200b54d8 ImageLoader::processInitializers(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&) + 136 15 dyld 0x00000001200b57a0 ImageLoader::runInitializers(ImageLoader::LinkContext const&, ImageLoader::InitializerTimingList&) + 80 16 dyld 0x00000001200aa150 dyld::initializeMainExecutable() + 196 17 dyld 0x00000001200ad8bc dyld::_main(macho_header const*, unsigned long, int, char const**, char const**, char const**, unsigned long*) + 2664 18 dyld 0x00000001200a9040 _dyld_start + 64
复制代码

5.Thread State

Crash时发生时刻,线程的状态(寄存器中的值)

复制代码
Thread 0 crashed with ARM Thread State (64-bit):
    x0: 0x0000000000000000   x1: 0x0000000000000000   x2: 0x0000000000000000   x3: 0x0000000000010000
    x4: 0x000000000000027b   x5: 0x0000000000000000   x6: 0x0000000000000000   x7: 0x0000000000000250
    x8: 0x0000000008000000   x9: 0x0000000004000000  x10: 0x0000000000000000  x11: 0x0000000000000018
   x12: 0x0000000000000001  x13: 0x0000000000062aa8  x14: 0x0000000000000015  x15: 0x0000000000000000
   x16: 0x0000000000000148  x17: 0x0000000000000000  x18: 0x0000000000000000  x19: 0x0000000000000006
   x20: 0x0000000198ae4310  x21: 0x0000000103280963  x22: 0x0000000000000000  x23: 0x0000000000000000
   x24: 0x0000000000000093  x25: 0x000000016fd182d8  x26: 0x00000001200d8d11  x27: 0x000000010328c000
   x28: 0x00000001032243d0  fp: 0x000000016fd17920   lr: 0x0000000194bd9170
    sp: 0x000000016fd17900   pc: 0x0000000194b3b270 cpsr: 0x00000000
复制代码

6.Binary Images

Crash时刻App加载的所有的库,其中第一行是Crash发生时我们App可执行文件的信息,可以看出为armv7,可执行文件的包得uuid位c0f……cd65,解析Crash的时候dsym文件的uuid必须和这个一样才能完成Crash的符号化解析。

复制代码
Binary Images:
0x1000e4000 - 0x101fdffff XXXClient arm64  <aa8ef7e9f9c43c7c87f4f75cf266d479> /var/mobile/Containers/Bundle/Application/0380D606-3A40-4633-A1B2-7E1F3E3D4FCA/XXXXClient.app/XXXXClient
0x103224000 - 0x103287fff libclang_rt.asan_ios_dynamic.dylib arm64  <c51061e5b8443a8e9b6c2b76628b4b95> /var/mobile/Containers/Bundle/Application/0380D606-3A40-4633-A1B2-7E1F3E3D4FCA/XXXX.app/Frameworks/libclang_rt.asan_ios_dynamic.dylib
0x1200a8000 - 0x1200cffff dyld arm64  <de589e6153453237a6cf724cb236d83c> /usr/lib/dyld
0x1810ac000 - 0x181240fff AVFoundation arm64  <b9c4b32ba43a3a798c4adcaad3608f52> /System/Library/Frameworks/AVFoundation.framework/AVFoundation
0x181244000 - 0x1812a8fff libAVFAudio.dylib arm64  <6667f63f0f1635668dc941d6b79062e1> /System/Library/Frameworks/AVFoundation.framework/libAVFAudio.dylib
0x194bf0000 - 0x194bf5fff libunwind.dylib arm64  <8b87982b31ad3569a95e75457cadba3e> /usr/lib/system/libunwind.dylib
0x194bf8000 - 0x194c1bfff libxpc.dylib arm64  <c9f3c08a8a3b3849a905d24911240853> /usr/lib/system/libxpc.dylib
复制代码

 

符号化

包含堆栈跟踪的崩溃报告需要先进行符号化symbolicated)才可以进行分析。符号化的过程是将内存地址替换为便于人们阅读的函数名称和行号。假如你通过Xcode的Organizer窗口获取崩溃日志,那么该报告将在几秒钟后自动进行符号化。否则你需要将.crash文件导入到Xcode的Organizer进行符号化。

复制代码
//符号化前
6  Rage Masters   0x0001625c        0x2a000 + 3003

//符号化后
6  Rage Masters   0x0001625c        -[RMAppDelegate application:didFinishLaunchingWithOptions:]  (RMAppDelegate.m:35)
复制代码

 

符号化与归档

  Xcode符号化崩溃日志时,需要访问与App Store上对应的应用二进制文件以及生成二进制文件时产生的 .dSYM 文件。必需完全匹配才行。否则,日志将无法被完全符号化。所以,保留每个分发给用户的编译版本非常重要。提交应用前进行归档时,Xcode将保存应用的二进制文件。可以在Xcode Organizer的Archives标签栏下找到所有已归档的应用文件。在发现崩溃日志时,如果有相匹配的.dSYM文件和应用二进制文件,Xcode会自动对崩溃日志进行符号化。如果你换到别的电脑或创建新的账户,务必将所有二进制文件移动到正确的位置,使Xcode能找到它们。

注意: 你必需同时保留应用二进制文件和.dSYM文件才能将崩溃日志完整符号化。每次提交到iTunes Connect的构建都必需归档。.dSYM文件和二进制文件是特定绑定于每一次构建和后续构建的,即使来自相同的源代码文件,每一次构建也与其他构建不同,不能相互替换。如果你使用Build 和 Archive 命令,这些文件会自动放在适当位置。 如果不是使用Build 和 Archive命令,放在Spotlight能够搜索到的位置(比如Home目录)即可。)

 

      在崩溃报告中最令人感兴趣的部分是在你的应用程序执行终止时的堆栈跟踪。这个跟踪和你在调试器中停止执行时的类似,但遗憾的是这里没有提供被认为是符号的方法或函数的名称。取而代之的是16位的内存地址和它所指向的你的应用程序或系统框架的可执行代码。你需要将这些地址映射到符号中。崩溃日志在输出时并不包含土豪信息,你需要在你分析日志前进行符号化处理。

      符号化——将堆栈跟踪地址转化为源代码方法名称及行号——需要上次到苹果应用商店的应用程序的二进制文件以及构建二进制文件时产生的.dSYM文件。这些必须是精确匹配的,否则你的报告将不能完整地符号化。基本要求你保持每个分发给用户(忽略那些分发的细节)的构建和它的.dSYM是一致的。

      注意:

      你必须保存应用程序的二进制文件和.dSYM文件以便于完整地符号化崩溃日志。你应该打包每一个你所提交到iTunes Connect中的构建。.dSYM文件和应用程序的二进制文件应该绑定到一起,不管是基础版本的构建还是后续版本的构建。即便是相同的源代码,不同构建的文件也不会弄混。假如你使用“构建并打包”命令,那么它们将会被自动放置到一个合适的位置。虽然任何位置都可以用Spotlight搜索到。

      Xcode的“打包(Archive)”命令使保持二进制文件和.dSYM匹配变得很简单,当你使用打包命令(通过点击产品(“Product”)-)打包(Archive)或是按下Shift+Command+B),Xode将会把应用程序的二进制文件及包含符号信息的.dSYM文件收集到一起,并存储到你的主目录文件夹下的一个合适位置。你可以在Xcode中的Organizer下的“已打包(Archived)”中知道你所打包的所有应用程序。Xcode在符号化崩溃日志时会自动寻找打包的应用程序,在确认你要的发布应用程序和.dSYM文件匹配的情况下,你可以将它们打包,直接提交到ITunes Connect。

      如果Xcode拥有产生崩溃日志的应用程序的二进制代码和.dSYM文件,那么它将自动进行符号化。Xcode Organizer符号化所需要提供的是崩溃日志及相应的二进制文件和.dSYM文件。打开Xcode Organizer,选择“设备(Devices)”选选看,选择边栏顶部“文库(LIBRARY)”下的“设备日志(Device Logs)”,点击导入按钮,选择需要符号化的.crash文件,当这些步骤完成后,Xcode将自动符号化崩溃日志并显示结果。

 

 

常见Crash类型

0x8badf00d(eat bad food)    Watchdog timeout

紧接着下面会有一段描述:

Application Specific Information:

com.xxx.yyy   failed to resume in time

 

该应用程序花了太长的时间加载,终止或响应系统时间。如果你没有把需要花费时间比较长的操作(如网络访问)放在后台线程上就很容易发生这种情况。

从iOS 4.x开始,退出应用时,应用不会立即终止,而是退到后台。但是,如果你的应用响应不够快,操作系统有可能会终止你的应用,并产生一个崩溃日志。下面这些方法,应用只有有限的时间去完成处理。如果花费时间太长,操作系统将终止应用。

application:didFinishLaunchingWithOptions:

applicationWillResignActive:
applicationDidEnterBackground:
applicationWillEnterForeground:
applicationDidBecomeActive:
applicationWillTerminate:
后面的分号说明只有一个参数
 
 

 

对于此类Crash,我们应该去审视自己App初始化时做的事情是否正确,是否在主线程请求了网络,或者其他耗时的事情卡住了正常初始化流程。

通常系统允许一个App从启动到可以相应用户事件的时间最多为5S,如果超过了5S,App就会被系统终止掉。在Launch,resume,suspend,quit时都会有相应的时间要求。在Highlight Thread里面我们可以看到被终止时调用到的位置,xxxAppDelegate加上行号。 

PS. 在连接Xcode调试时为了便于调试,系统会暂时禁用掉Watchdog,所以此类问题的发现需要使用正常的启动模式。

 

0xdeadfa11(dead fall)  User force-quit

  这个强制退出跟我们平时所说的kill掉后台任务操作还不太一样,通常在程序bug造成系统无法响应时可以采用长按电源键,当屏幕出现关机确认画面时按下Home键即可关闭当前程序。

  双击Home按钮后,你将看到运行过的所有应用。那些应用不一定是正在运行,也不一定是被挂起。 通常,用户点击Home按钮时,应用将在后台保留约10分钟,然后操作系统自动将其终止。 所以双击Home按钮显示的应用列表只是表明那是一系列过去打开过的应用。删除那些应用的图标不会产生任何崩溃日志。

 

0xbaaaaaad

该Crash log并非一个真正的Crash,它仅仅只是包含了整个系统某一时刻的运行状态。通常可以通过同时按Home键和音量键,可能由于用户不小心触发

 

0xbad22222

当VOIP程序在后台太过频繁的激活时,系统可能会终止此类程序

 

0xc00010ff

程序执行大量耗费CPU和GPU的运算,导致设备过热,触发系统过热保护被系统终止

 

0xdead10cc

程序退到后台时还占用系统资源,如通讯录被系统终止

 

Low Memory termination

跟一般的Crash结构不太一样,通常有Free pages,Wired Pages,Purgeable pages,largest process 组成,同时会列出当前时刻系统运行所有进程的信息。IOS 内存警告 Memory warning level

App在运行过程中,系统内存紧张时通常会先发警告(子类化UIViewController时,你或许已经注意到didReceiveMemoryWarning方法),同时把后台挂起的程序终止掉,最终如果还是内存不够的话就会终止掉当前前台的进程。

当接受到内存警告的事后,我们应该释放尽可能多的内存,Crash其实也可以看做是对App的一种保护。

 当监测到内存不足时,iOS的虚拟内存系统依靠应用程序间的合作来释放内存。内存不足的通知被发送到所有正在运行的应用程序,并作为内存释放的请求来进行处理,以期望降低所使用的内存总量。如果内存的压力始终存在,那么系统可能会终止一些后台进程来降低内存压力。如果可以释放足够多的内存,那么你的应用程序将继续运行而不会产生崩溃报告。如果不可以,那么你的程序将被iOS终止,因为此时已没有足够的内存来满足应用程序的需求,一份内存不足的报告将被产生并存储在设备中。

      内存不足报告与其他崩溃报告的不同之处在于它里面没有应用程序的堆栈跟踪。每个进程的内存使用量依据内存页面的数量进行报告,每个内存页面量的大小为4KB。你将会看到“抛弃(jettisoned)”紧跟在iOS为了释放内存而终止的进程名称后。如果你看到它紧跟在你的应用程序名称后面,那么可以确定这个应用因为使用了太多的内存而被终止。否则,应该不是内存压力引起的崩溃。你可以通过查看.crash文件(下一节中进行描述)获取更多信息。

      当你看到一个内存不足报告时,你更应该研究一下你使用内存的方式和你对内存不足警告的处理方式,而不是去关心在程序终止时你的哪一部分代码被执行了。内存分配帮助(Memory Allocations Help)列举了如何使用泄露工具(Leaks Instrument)来发现内存泄露,以及如何使用分配工具(Allocations Instrument's)的标记堆功能来避免被抛弃的内存。内存使用性能指导方案(Memory Usage Performance Guidelines)讨论了像其他内存使用秘诀一样的适当的方案来响应内存不足通知。同时也建议你看一下WWSC2010中的关于使用工具进行高效内存分析的视频(Advanced Memory Analysis with Instruments)。

 

  泄露和分配工具不能跟踪显存。你需要使用VM Tracker工具(包含在分配工具模板中)来运行你的应用以便观察显存的使用情况。VM Tracker默认是禁用的。为了在你的应用程序使用VM Tracker,请点击工具,选中“自动快照Automatic Snapshotting”标志或者手工按下“获取快照(Snapshot Now)”按钮。

当应用发生低内存闪退时,你必需看看应用中内存使用的方式,以及是如何处理低内存警告的。你可以使用Instruments工具中使用Allocations 和 Leaks来发现内存分配问题和内存泄漏问题。如果你不知道如何利用 Instruments 检查内存问题,可以看看这个教程 。

 
还有,别忘记虚拟内存! Instruments工具的Leaks 和 Allocations 不能跟踪显存使用情况。必需使用 VM Tracker 才能查看显存使用情况。
 
VM Tracker 默认是关闭的。打开Instrument,手动 选中Automatic Snapshotting 标志或者按下Snapshot Now 按钮。

当内存使用达到一定程度时,操作系统将发出一个 UIApplicationDidReceiveMemoryWarningNotification 通知。同时,调用 didReceiveMemoryWarning 方法。

 
此时,为了让应用继续正常运行,操作系统开始终止在后台的其他应用以释放一些内存。所有后台应用被终止后,如果你的应用还需要更多内存,操作系统会将你的应用也终止掉,并产生一个崩溃日志。而在这种情况下被终止的后台应用,不会产生崩溃日志。
 
在极短时间内分配一大块内存将给系统内存带来巨大负担。这样,也会产生内存警告的通知。
 
 
低内存崩溃日志上没有应用线程的堆栈回溯。相反,上面显示的是以内存页数为单位的各进程内存使用量。
被iOS因释放内存页终止的进程名称后面你会看到jettisoned 字样。如果看到它出现在你的应用名称后面,说明你的应用因使用太多内存而被终止了。
 
Free Pages    可用内存页数(每页大约4KB)
Purgeable pages   可被清除重用的内存
Largest process  闪退时使用大部分内存的应用
Processes显示了闪退时各进程列表,还包含内存使用量。包含进程名 (第一列), 进程唯一标识符(第二名), 进程使用的内存页数(第三列)。最后一列是每个应用的状态。通常,发生闪退的应用的状态是 frontmost。
 
 
 SpringBoard 进程是显示主屏幕的应用
 
 

Crash due to bugs

 

常见Exception Type

EXC_BAD_ACCESS  通常用于访问了不改访问的内存导致。一般EXC_BAD_ACCESS后面的"()"还会带有补充信息。

  • SIGSEGV: 通常由于重复释放对象导致,这种类型在切换了ARC以后应该已经很少见到了。
  • SIGABRT:  收到Abort信号退出,通常Foundation库中的容器为了保护状态正常会做一些检测,例如插入nil到数组中等会遇到此类错误。
  • SEGV:(Segmentation  Violation),代表无效内存地址,比如空指针,未初始化指针,栈溢出等;
  • SIGBUS:总线错误,与 SIGSEGV 不同的是,SIGSEGV 访问的是无效地址,而 SIGBUS 访问的是有效地址,但总线访问异常(如地址对齐问题)
  • SIGILL:尝试执行非法的指令,可能不被识别或者没有权限

  

异常代码是SIGABRT。通常,  SIGABRT 异常是由于某个对象接收到未实现的消息引起的。 或者,用简单的话说,在某个对象上调用了不存在的方法。
 
这种情况一般不会发生,因为A对象调用了B方法,如果B方法不存在,编译器会报错。但是,如果你是使用selector间接调用方法的,编译器则无法检测对象是否存在该方法了。

  

 

EXC_BAD_INSTRUCTION

  此类异常通常由于线程执行非法指令导致

EXC_ARITHMETIC

  除零错误会抛出此类异常

 

 

 ------------------------------

AddressSenitizer引发的崩溃

iOS9可以正常启动。

iOS9以下版本设备连接调试可以正确启动,断开调试后启动崩溃,日志如下

复制代码
Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Triggered by Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib          0x0000000197747270 __pthread_kill + 8
1   libsystem_pthread.dylib         0x00000001977e516c pthread_kill + 108
2   libsystem_c.dylib               0x00000001976beb14 abort + 108
3   ...g_rt.asan_ios_dynamic.dylib  0x00000001019d56d0 0x101984000 + 333520
4   ...g_rt.asan_ios_dynamic.dylib  0x00000001019c955c 0x101984000 + 283996
5   ...g_rt.asan_ios_dynamic.dylib  0x00000001019ccf28 0x101984000 + 298792
6   ...g_rt.asan_ios_dynamic.dylib  0x00000001019c9640 0x101984000 + 284224
7   ...g_rt.asan_ios_dynamic.dylib  0x00000001019cd0e8 0x101984000 + 299240
8   ...g_rt.asan_ios_dynamic.dylib  0x00000001019bef50 0x101984000 + 241488
9   ...g_rt.asan_ios_dynamic.dylib  0x00000001019c8d18 0x101984000 + 281880
10  dyld                            0x0000000120095234 ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&) + 256
11  dyld                            0x00000001200953ec ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&) + 32
12  dyld                            0x0000000120091688 ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&) + 328
13  dyld                            0x000000012009161c ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&) + 220
14  dyld                            0x00000001200914d8 ImageLoader::processInitializers(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&) + 136
15  dyld                            0x00000001200917a0 ImageLoader::runInitializers(ImageLoader::LinkContext const&, ImageLoader::InitializerTimingList&) + 80
16  dyld                            0x0000000120086150 dyld::initializeMainExecutable() + 196
17  dyld                            0x00000001200898bc dyld::_main(macho_header const*, unsigned long, int, char const**, char const**, char const**, unsigned long*) + 2664
18  dyld                            0x0000000120085040 _dyld_start + 64
复制代码

 

 XCode 7 give use new opportunity AddressSenitizer!
 DISABLE it's if you want run app without connected device to debug XCode mode.

http://stackoverflow.com/questions/32663540/run-app-deployed-with-xcode-7-gives-a-crash

更多关于AddressSenitizer

http://www.cocoachina.com/ios/20151020/13794.html

http://www.cnblogs.com/xitang/p/4904405.html






作者:sun2728 发表于2016/9/3 17:41:41 原文链接
阅读:102 评论:0 查看评论

Android蓝牙源码分析——BTA层消息分发

$
0
0

这里BTA是Bluetooth Application的缩写,从上层下来的请求都要经过这个BTA层,通过发送消息的方式将请求丢到BTA层中处理。这个发送消息的函数定义在bta_sys_main.c中,如下:

void bta_sys_sendmsg(void *p_msg)
{
    GKI_send_msg(bta_sys_cb.task_id, p_bta_sys_cfg->mbox, p_msg);
}

我们在进入GKI_send_msg前,先搞清楚bta_sys_cb,这货定义在bta_sys_main.c中,如下:

/* system manager control block definition */
tBTA_SYS_CB bta_sys_cb;

这个bta_sys_cb是BTA层的总体Control Block。数据结构定义在bta_sys_int.h中,如下:

/* system manager control block */
typedef struct
{
    tBTA_SYS_REG            *reg[BTA_ID_MAX];       /* registration structures */
    BOOLEAN                 is_reg[BTA_ID_MAX];     /* registration structures */
    ......

} tBTA_SYS_CB;

这里值得注意的是reg,这是个数组,数组类型是tBTA_SYS_REG,里面是BTA下面的各个子系统的回调,最多有BTA_ID_MAX个。我们看看tBTA_SYS_REG的定义:

/* registration structure */
typedef struct
{
    tBTA_SYS_EVT_HDLR   *evt_hdlr;
    tBTA_SYS_DISABLE    *disable;
} tBTA_SYS_REG;

/* event handler function type */
typedef BOOLEAN (tBTA_SYS_EVT_HDLR)(BT_HDR *p_msg);

/* disable function type */
typedef void (tBTA_SYS_DISABLE)(void);

原来就是两个函数,一个是关于事件处理的,一个是关于disable的。就是说BTA下面的各个子系统都有自己的事件处理逻辑和disable逻辑。

我们再看看有哪些子系统,各子系统ID定义如下:

/* SW sub-systems */
#define BTA_ID_SYS          0            /* system manager */
/* BLUETOOTH PART - from 0 to BTA_ID_BLUETOOTH_MAX */
#define BTA_ID_DM           1            /* device manager */
#define BTA_ID_DM_SEARCH    2            /* device manager search */
#define BTA_ID_DM_SEC       3            /* device manager security */
#define BTA_ID_DG           4            /* data gateway */
#define BTA_ID_AG           5            /* audio gateway */
#define BTA_ID_OPC          6            /* object push client */
#define BTA_ID_OPS          7            /* object push server */
#define BTA_ID_FTS          8            /* file transfer server */
#define BTA_ID_CT           9            /* cordless telephony terminal */
#define BTA_ID_FTC          10           /* file transfer client */
#define BTA_ID_SS           11           /* synchronization server */
#define BTA_ID_PR           12           /* Printer client */
#define BTA_ID_BIC          13           /* Basic Imaging Client */
#define BTA_ID_PAN          14           /* Personal Area Networking */
#define BTA_ID_BIS          15           /* Basic Imaging Server */
#define BTA_ID_ACC          16           /* Advanced Camera Client */
#define BTA_ID_SC           17           /* SIM Card Access server */
#define BTA_ID_AV           18           /* Advanced audio/video */
#define BTA_ID_AVK          19           /* Audio/video sink */
#define BTA_ID_HD           20           /* HID Device */
#define BTA_ID_CG           21           /* Cordless Gateway */
#define BTA_ID_BP           22           /* Basic Printing Client */
#define BTA_ID_HH           23           /* Human Interface Device Host */
#define BTA_ID_PBS          24           /* Phone Book Access Server */
#define BTA_ID_PBC          25           /* Phone Book Access Client */
#define BTA_ID_JV           26           /* Java */
#define BTA_ID_HS           27           /* Headset */
#define BTA_ID_MSE          28           /* Message Server Equipment */
#define BTA_ID_MCE          29           /* Message Client Equipment */
#define BTA_ID_HL           30           /* Health Device Profile*/
#define BTA_ID_GATTC        31           /* GATT Client */
#define BTA_ID_GATTS        32           /* GATT Client */
#define BTA_ID_BLUETOOTH_MAX   33        /* last BT profile */

/* FM */
#define BTA_ID_FM           34           /* FM  */
#define BTA_ID_FMTX         35           /* FM TX */

/* SENSOR */
#define BTA_ID_SSR          36           /* Sensor  */

/* GPS */
#define BTA_ID_GPS          37           /* GPS  */

/* GENERIC */
#define BTA_ID_PRM          38
#define BTA_ID_SYSTEM       39           /* platform-specific */
#define BTA_ID_SWRAP        40           /* Insight script wrapper */
#define BTA_ID_MIP          41           /* Multicase Individual Polling */
#define BTA_ID_RT           42           /* Audio Routing module: This module is always on. */


/* JV */
#define BTA_ID_JV1          43           /* JV1 */
#define BTA_ID_JV2          44           /* JV2 */

#define BTA_ID_MAX          (43 + BTA_DM_NUM_JV_ID)

可见一共有43个ID,另外加两个JV_ID。这些ID中比较眼熟的有BTA_ID_GATTC和BTA_ID_GATTS,应该都是和GATT相关的,一个是Server,一个是Client。

我们再来看bta_sys_cb是在哪里初始化的,在bta_sys_main.c中,如下:

BTA_API void bta_sys_init(void)
{
    memset(&bta_sys_cb, 0, sizeof(tBTA_SYS_CB));
    ptim_init(&bta_sys_cb.ptim_cb, BTA_SYS_TIMER_PERIOD, p_bta_sys_cfg->timer);
    bta_sys_cb.task_id = GKI_get_taskid();

    /* register BTA SYS message handler */
    bta_sys_register( BTA_ID_SYS,  &bta_sys_hw_reg);

    /* register for BTM notifications */
    BTM_RegisterForDeviceStatusNotif ((tBTM_DEV_STATUS_CB*)&bta_sys_hw_btm_cback );
}

这个bta_sys_init就是初始化整个BTA的,是在btu_task线程中调用的。而btu_task线程入口是在bte_main.c的bte_main_enable中,再往上走是btif_core.c的btif_enable_bluetooth中,看样子这是打开蓝牙时调用的,再往上走是bluetooth.c的enable函数。而btif_task初始化是在btif_core.c中的btif_init_bluetooth,往上是bluetooth.c中的init函数,相比btu_task还是简单些。

我们回到bta_sys_init,这里我们关注的逻辑是首先设置bta_sys_cb的task_id为BTU TASK。然后注册BTA_ID_SYS的消息处理函数。我们看这个bta_sys_register是怎么注册的,如下:

void bta_sys_register(UINT8 id, const tBTA_SYS_REG *p_reg)
{
    bta_sys_cb.reg[id] = (tBTA_SYS_REG *) p_reg;
    bta_sys_cb.is_reg[id] = TRUE;
}

逻辑很简单,我们看看GATTC是在哪里注册的,是在bta_gattc_api.c中的BTA_GATTC_AppRegister,如下:

void BTA_GATTC_AppRegister(tBT_UUID *p_app_uuid, tBTA_GATTC_CBACK *p_client_cb)
{
    tBTA_GATTC_API_REG  *p_buf;

    if (bta_sys_is_register(BTA_ID_GATTC) == FALSE)
    {
        bta_sys_register(BTA_ID_GATTC, &bta_gattc_reg);
    }

    ......
    return;
}

这个函数是在btif_gatt_client.c的btgattc_handle_event中调用,往上走是注册clientIf时也就是打开gatt时。所以我们了解了当打开gatt连接时,会自动去注册GATTC子系统。这个子系统的回调在bta_gattc_api.c中:

static const tBTA_SYS_REG bta_gattc_reg =
{
    bta_gattc_hdl_event,  // 在bta_gattc_main.c中
    BTA_GATTC_Disable
};

我们重点关注GATTC子系统下的事件处理函数为bta_gattc_hdl_event,这个之后会用到的。因为所有Gatt相关的事件处理最终都调到了这个。

我们回到bta_sys_sendmsg,这里调用了GKI_send_msg(bta_sys_cb.task_id, p_bta_sys_cfg->mbox, p_msg);,这个bta_sys_cb的task_id毫无疑问是btu_task了,其中的mbox是什么呢?我们来看p_bta_sys_cfg是在哪里初始化的,在bta_sys_cfg.c中,如下:

/* GKI task mailbox event for BTA. */
#ifndef BTA_MBOX_EVT
#define BTA_MBOX_EVT                TASK_MBOX_2_EVT_MASK
#endif

/* GKI task mailbox for BTA. */
#ifndef BTA_MBOX
#define BTA_MBOX                    TASK_MBOX_2
#endif

/* GKI timer id used for protocol timer for BTA. */
#ifndef BTA_TIMER
#define BTA_TIMER                   TIMER_1
#endif

const tBTA_SYS_CFG bta_sys_cfg =
{
    BTA_MBOX_EVT,               /* GKI mailbox event */
    BTA_MBOX,                   /* GKI mailbox id */
    BTA_TIMER,                  /* GKI timer id */
    APPL_INITIAL_TRACE_LEVEL    /* initial trace level */
};

tBTA_SYS_CFG *p_bta_sys_cfg = (tBTA_SYS_CFG *)&bta_sys_cfg;

就是说bta对应的mailbox是BTA_MBOX,也就是TASK_MBOX_2。每个task都有4个mailbox用于接收buff,这个是2号邮箱。

好了,bta_sys_sendmsg就是向btu task的2号邮箱发送了msg。处理函数在哪里呢?在btu_task中如下:

if (event & TASK_MBOX_2_EVT_MASK)
{
    while ((p_msg = (BT_HDR *) GKI_read_mbox(TASK_MBOX_2)) != NULL)
    {
        bta_sys_event(p_msg);
    }
}

是在bta_sys_event中,发送消息可以在别的线程,但是处理消息都回到了btu_task线程内部。

BTA_API void bta_sys_event(BT_HDR *p_msg)
{
    UINT8       id;
    BOOLEAN     freebuf = TRUE;

    /* get subsystem id from event */
    id = (UINT8) (p_msg->event >> 8);

    /* verify id and call subsystem event handler */
    if ((id < BTA_ID_MAX) && (bta_sys_cb.reg[id] != NULL))
    {
        freebuf = (*bta_sys_cb.reg[id]->evt_hdlr)(p_msg);
    }

    if (freebuf)
    {
        GKI_freebuf(p_msg);
    }

}

这里根据event获取id,然后获取到对应BTA的子系统的回调,每个子系统有自己的事件处理函数的。所以如果这里是GATT相关的事件,则会走到GATT的事件处理函数,为bta_gattc_hdl_event,在bta_gattc_main.c中。

总结一下,所有BTA消息最终都送到了BTU TASK中,由bta_sys_event来处理。如果是Gatt相关的消息,则最终由bta_gattc_hdl_event处理。

作者:dingjikerbo 发表于2016/9/3 18:15:46 原文链接
阅读:89 评论:0 查看评论

Android蓝牙源码分析——Gatt写设备

$
0
0

BluetoothGatt中的writeCharacteristic的实现在GattService中,如下:

void writeCharacteristic(int clientIf, String address, int handle, int writeType, int authReq, byte[] value) {
    gattClientWriteCharacteristicNative(connId, handle, writeType, authReq, value);
}

这个gattClientWriteCharacteristicNative的实现在com_android_bluetooth_gatt.cpp中,

static void gattClientWriteCharacteristicNative(JNIEnv* env, jobject object,
    jint conn_id, jint handle, jint write_type, jint auth_req, jbyteArray value) {
    ......
    sGattIf->client->write_characteristic(conn_id, handle, write_type, auth_req,
                                          std::move(vect_val));
}

这个sGattIf的client是定义在btif_gatt_client.c中的btgattClientInterface,这里调到了btif_gattc_write_char函数,

static bt_status_t btif_gattc_write_char(int conn_id, btgatt_srvc_id_t* srvc_id,
                                         btgatt_gatt_id_t* char_id, int write_type,
                                         int len, int auth_req, char* p_value)
{
    btif_gattc_cb_t btif_cb;
    btif_cb.conn_id = (uint16_t) conn_id;
    btif_cb.auth_req = (uint8_t) auth_req;
    btif_cb.write_type = (uint8_t) write_type;
    btif_cb.len = len > BTGATT_MAX_ATTR_LEN ? BTGATT_MAX_ATTR_LEN : len;
    memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t));
    memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t));
    memcpy(btif_cb.value, p_value, btif_cb.len);
    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_WRITE_CHAR,
                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
}

这里发送到butif task中,由btgattc_handle_event处理,事件为BTIF_GATTC_WRITE_CHAR,如下:

case BTIF_GATTC_WRITE_CHAR:
    btif_to_bta_srvc_id(&in_char_id.srvc_id, &p_cb->srvc_id);
    btif_to_bta_gatt_id(&in_char_id.char_id, &p_cb->char_id);

    BTA_GATTC_WriteCharValue(p_cb->conn_id, &in_char_id,
                             p_cb->write_type,
                             p_cb->len,
                             p_cb->value,
                             p_cb->auth_req);
    break;

再来看看BTA_GATTC_WriteCharValue的实现,如下:

void BTA_GATTC_WriteCharValue ( UINT16 conn_id,
                                tBTA_GATTC_CHAR_ID *p_char_id,
                                tBTA_GATTC_WRITE_TYPE  write_type,
                                UINT16 len,
                                UINT8 *p_value,
                                tBTA_GATT_AUTH_REQ auth_req)
{
    tBTA_GATTC_API_WRITE  *p_buf;

    if ((p_buf = (tBTA_GATTC_API_WRITE *) GKI_getbuf((UINT16)(sizeof(tBTA_GATTC_API_WRITE) + len))) != NULL)
    {
        memset(p_buf, 0, sizeof(tBTA_GATTC_API_WRITE) + len);

        p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT;
        p_buf->hdr.layer_specific = conn_id;
        p_buf->auth_req = auth_req;

        memcpy(&p_buf->srvc_id, &p_char_id->srvc_id, sizeof(tBTA_GATT_SRVC_ID));
        memcpy(&p_buf->char_id, &p_char_id->char_id, sizeof(tBTA_GATT_ID));

        p_buf->write_type = write_type;
        p_buf->len = len;

        if (p_value && len > 0)
        {
            p_buf->p_value = (UINT8 *)(p_buf + 1);
            memcpy(p_buf->p_value, p_value, len);
        }

        bta_sys_sendmsg(p_buf);
    }
    return;
}

这里看来真正的写是在btu_task中,这里发送的事件为BTA_GATTC_API_WRITE_EVT。如下:

enum
{
    BTA_GATTC_API_OPEN_EVT   = BTA_SYS_EVT_START(BTA_ID_GATTC),
    BTA_GATTC_INT_OPEN_FAIL_EVT,
    BTA_GATTC_API_CANCEL_OPEN_EVT,
    BTA_GATTC_INT_CANCEL_OPEN_OK_EVT,

    BTA_GATTC_API_READ_EVT,
    BTA_GATTC_API_WRITE_EVT,
    ......
};

可见这些事件都属于BTA_ID_GATTC的子系统,所以在btu_task中的事件处理函数为bta_gattc_main.c中的bta_gattc_hdl_event。奇怪的是在这个函数中没找到这个事件的处理分支,而是走到了默认处理逻辑中,如下:

tBTA_GATTC_CLCB *p_clcb = bta_gattc_find_clcb_by_conn_id(p_msg->layer_specific);

if (p_clcb != NULL)
{
    rt = bta_gattc_sm_execute(p_clcb, p_msg->event, (tBTA_GATTC_DATA *) p_msg);
}

这里的意思是先通过layer_specific找到p_clcb,再进状态机。这个layer_specific其实就是connection id,是clientIf和address生成的一个连接id。在我们write character之前已经初始化gatt过了,所以这里肯定注册过对应的clcb,我们直接进入状态机好了,这个bta_gattc_sm_execute定义在bta_gattc_main.c中,如下:

BOOLEAN bta_gattc_sm_execute(tBTA_GATTC_CLCB *p_clcb, UINT16 event, tBTA_GATTC_DATA *p_data)
{
    tBTA_GATTC_ST_TBL     state_table;
    UINT8               action;
    int                 i;
    BOOLEAN             rt = TRUE;

    /* look up the state table for the current state */
    state_table = bta_gattc_st_tbl[p_clcb->state];

    event &= 0x00FF;

    /* set next state */
    p_clcb->state = state_table[event][BTA_GATTC_NEXT_STATE];

    /* execute action functions */
    for (i = 0; i < BTA_GATTC_ACTIONS; i++)
    {
        if ((action = state_table[event][i]) != BTA_GATTC_IGNORE)
        {
            (*bta_gattc_action[action])(p_clcb, p_data);
            if (p_clcb->p_q_cmd == p_data) {
                /* buffer is queued, don't free in the bta dispatcher.
                 * we free it ourselves when a completion event is received.
                 */
                rt = FALSE;
            }
        }
        else
        {
            break;
        }
    }
    return rt;
}

这个状态机逻辑是先根据当前状态获取到对应的状态表,再根据发过来的事件获取当前状态下该事件的处理函数,同时将状态切到对应的下一个状态。这个状态机的表bta_gattc_st_tbl如下:

/* state table */
const tBTA_GATTC_ST_TBL bta_gattc_st_tbl[] =
{
    bta_gattc_st_idle,
    bta_gattc_st_w4_conn,
    bta_gattc_st_connected,
    bta_gattc_st_discover
};

对应的状态为:

enum
{
    BTA_GATTC_IDLE_ST = 0,      /* Idle  */
    BTA_GATTC_W4_CONN_ST,       /* Wait for connection -  (optional) */
    BTA_GATTC_CONN_ST,          /* connected state */
    BTA_GATTC_DISCOVER_ST       /* discover is in progress */
};

假如当前状态是已连接,那么对应的状态表为bta_gattc_st_connected,如下:

/* state table for open state */
static const UINT8 bta_gattc_st_connected[][BTA_GATTC_NUM_COLS] =
{
/* Event                            Action 1                            Next state */
/* BTA_GATTC_API_OPEN_EVT           */   {BTA_GATTC_OPEN,               BTA_GATTC_CONN_ST},
/* BTA_GATTC_INT_OPEN_FAIL_EVT      */   {BTA_GATTC_IGNORE,             BTA_GATTC_CONN_ST},
/* BTA_GATTC_API_CANCEL_OPEN_EVT    */   {BTA_GATTC_CANCEL_OPEN_ERROR, BTA_GATTC_CONN_ST},
/* BTA_GATTC_INT_CANCEL_OPEN_OK_EVT */   {BTA_GATTC_IGNORE,            BTA_GATTC_CONN_ST},

/* BTA_GATTC_API_READ_EVT           */   {BTA_GATTC_READ,               BTA_GATTC_CONN_ST},
/* BTA_GATTC_API_WRITE_EVT          */   {BTA_GATTC_WRITE,              BTA_GATTC_CONN_ST},
/* BTA_GATTC_API_EXEC_EVT           */   {BTA_GATTC_EXEC,               BTA_GATTC_CONN_ST},
/* BTA_GATTC_API_CFG_MTU_EVT        */   {BTA_GATTC_CFG_MTU,            BTA_GATTC_CONN_ST},

/* BTA_GATTC_API_CLOSE_EVT          */   {BTA_GATTC_CLOSE,              BTA_GATTC_IDLE_ST},

/* BTA_GATTC_API_SEARCH_EVT         */   {BTA_GATTC_SEARCH,             BTA_GATTC_CONN_ST},
/* BTA_GATTC_API_CONFIRM_EVT        */   {BTA_GATTC_CONFIRM,            BTA_GATTC_CONN_ST},
/* BTA_GATTC_API_READ_MULTI_EVT     */   {BTA_GATTC_READ_MULTI,         BTA_GATTC_CONN_ST},
/* BTA_GATTC_API_REFRESH_EVT        */   {BTA_GATTC_IGNORE,             BTA_GATTC_CONN_ST},

/* BTA_GATTC_INT_CONN_EVT           */   {BTA_GATTC_IGNORE,             BTA_GATTC_CONN_ST},
/* BTA_GATTC_INT_DISCOVER_EVT       */   {BTA_GATTC_START_DISCOVER,     BTA_GATTC_DISCOVER_ST},
/* BTA_GATTC_DISCOVER_CMPL_EVT       */  {BTA_GATTC_IGNORE,             BTA_GATTC_CONN_ST},
/* BTA_GATTC_OP_CMPL_EVT            */   {BTA_GATTC_OP_CMPL,            BTA_GATTC_CONN_ST},

/* BTA_GATTC_INT_DISCONN_EVT        */   {BTA_GATTC_CLOSE,              BTA_GATTC_IDLE_ST},

/* ===> for cache loading, saving   */
/* BTA_GATTC_START_CACHE_EVT        */   {BTA_GATTC_CACHE_OPEN,         BTA_GATTC_DISCOVER_ST},
/* BTA_GATTC_CI_CACHE_OPEN_EVT      */   {BTA_GATTC_IGNORE,             BTA_GATTC_CONN_ST},
/* BTA_GATTC_CI_CACHE_LOAD_EVT      */   {BTA_GATTC_IGNORE,             BTA_GATTC_CONN_ST},
/* BTA_GATTC_CI_CACHE_SAVE_EVT      */   {BTA_GATTC_IGNORE,             BTA_GATTC_CONN_ST}
};

我们的事件是BTA_GATTC_API_WRITE_EVT,取低8位,为5,所以对应的是BTA_GATTC_WRITE,下一个状态为BTA_GATTC_CONN_ST。我们看BTA_GATTC_WRITE对应的函数,到bta_gattc_action中查,在bta_gattc_main.c中:

/* action function list */
const tBTA_GATTC_ACTION bta_gattc_action[] =
{
    bta_gattc_open,
    bta_gattc_open_fail,
    bta_gattc_open_error,
    bta_gattc_cancel_open,
    bta_gattc_cancel_open_ok,
    bta_gattc_cancel_open_error,
    bta_gattc_conn,
    bta_gattc_start_discover,
    bta_gattc_disc_cmpl,

    bta_gattc_q_cmd,
    bta_gattc_close,
    bta_gattc_close_fail,
    bta_gattc_read,
    bta_gattc_write,

    ......
};

为bta_gattc_write函数,在bta_gattc_act.c中,如下:

void bta_gattc_write(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data)
{
    UINT16              handle = 0;
    tGATT_VALUE         attr = {0};
    tBTA_GATTC_OP_CMPL  op_cmpl;
    tBTA_GATT_STATUS    status = BTA_GATT_OK;

    if (bta_gattc_enqueue(p_clcb, p_data))
    {
        if ((handle = bta_gattc_id2handle(p_clcb->p_srcb,
                                          &p_data->api_write.srvc_id,
                                          &p_data->api_write.char_id,
                                          p_data->api_write.p_descr_type)) == 0)
        {
            status = BTA_GATT_ERROR;
        }
        else
        {
            attr.handle= handle;
            attr.offset = p_data->api_write.offset;
            attr.len    = p_data->api_write.len;
            attr.auth_req = p_data->api_write.auth_req;

            if (p_data->api_write.p_value)
                memcpy(attr.value, p_data->api_write.p_value, p_data->api_write.len);

            status = GATTC_Write(p_clcb->bta_conn_id, p_data->api_write.write_type, &attr);
        }

        /* write fail */
        if (status != BTA_GATT_OK)
        {
            memset(&op_cmpl, 0, sizeof(tBTA_GATTC_OP_CMPL));

            op_cmpl.status  = status;
            op_cmpl.op_code = GATTC_OPTYPE_WRITE;
            op_cmpl.p_cmpl  = NULL;

            bta_gattc_sm_execute(p_clcb, BTA_GATTC_OP_CMPL_EVT, (tBTA_GATTC_DATA *)&op_cmpl);
        }
    }
}

这里首先调用bta_gattc_enqueue将请求放入队列,如果成功就校验要写的character是否有效,如果有效,则调用GATTC_Write真正的写了。

先看这个bta_gattc_enqueue的逻辑,如下:

BOOLEAN bta_gattc_enqueue(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) {
    if (p_clcb->p_q_cmd == NULL) {
        p_clcb->p_q_cmd = p_data;
    } else {
        APPL_TRACE_ERROR("already has a pending command!!");
        /* skip the callback now. ----- need to send callback ? */
    }
    return (p_clcb->p_q_cmd != NULL) ? TRUE : FALSE;
}

这里逻辑很简单,不是什么队列,就是相当于一个单例,一次只能有一个命令在执行。如果之前的结果还没完又来一个命令,则这里直接返回了,连回调都收不到,所以我们所有GATT操作要串行化。

我们看GATTC_Write函数的实现,在gatt_api.c中,如下:

tGATT_STATUS GATTC_Write (UINT16 conn_id, tGATT_WRITE_TYPE type, tGATT_VALUE *p_write)
{
    tGATT_STATUS status = GATT_SUCCESS;
    tGATT_CLCB      *p_clcb;
    tGATT_VALUE     *p;
    tGATT_IF        gatt_if=GATT_GET_GATT_IF(conn_id);
    UINT8           tcb_idx = GATT_GET_TCB_IDX(conn_id);
    tGATT_TCB       *p_tcb = gatt_get_tcb_by_idx(tcb_idx);
    tGATT_REG       *p_reg = gatt_get_regcb(gatt_if);

    if ((p_clcb = gatt_clcb_alloc(conn_id)) != NULL )
    {
        p_clcb->operation  = GATTC_OPTYPE_WRITE;
        p_clcb->op_subtype = type;
        p_clcb->auth_req = p_write->auth_req;

        if (( p_clcb->p_attr_buf = (UINT8 *)GKI_getbuf((UINT16)sizeof(tGATT_VALUE))) != NULL)
        {
            memcpy(p_clcb->p_attr_buf, (void *)p_write, sizeof(tGATT_VALUE));

            p =  (tGATT_VALUE *)p_clcb->p_attr_buf;
            if (type == GATT_WRITE_PREPARE)
            {
                p_clcb->start_offset = p_write->offset;
                p->offset = 0;
            }

            if (gatt_security_check_start(p_clcb) == FALSE)
            {
                status = GATT_NO_RESOURCES;
            }
        }
        else
        {
            status = GATT_NO_RESOURCES;
        }

        if (status == GATT_NO_RESOURCES)
            gatt_clcb_dealloc(p_clcb);
    }
    else
    {
        status = GATT_NO_RESOURCES;
    }
    return status;
}

这里出现了一堆错误GATT_NO_RESOURCES,值为128,平时貌似没见过,所以我们这里不关心,继续看gatt_security_check_start,这里主要是做安全检查,检查通过才会真正开始写,在gatt_auth.c中,如下:

BOOLEAN gatt_security_check_start(tGATT_CLCB *p_clcb)
{
    tGATT_TCB           *p_tcb = p_clcb->p_tcb;
    tGATT_SEC_ACTION    gatt_sec_act;
    tBTM_BLE_SEC_ACT    btm_ble_sec_act;
    BOOLEAN             status = TRUE;
    tBTM_STATUS         btm_status;
    tGATT_SEC_ACTION    sec_act_old =  gatt_get_sec_act(p_tcb);

    gatt_sec_act = gatt_determine_sec_act(p_clcb);

    if (sec_act_old == GATT_SEC_NONE)
        gatt_set_sec_act(p_tcb, gatt_sec_act);

    switch (gatt_sec_act )
    {
        ......
        default:
            gatt_sec_check_complete(TRUE, p_clcb, gatt_sec_act);
            break;
    }

    if (status == FALSE)
    {
        gatt_set_sec_act(p_tcb, GATT_SEC_NONE);
        gatt_set_ch_state(p_tcb, GATT_CH_OPEN);
    }

    return status;
}

由于我们写无需权限验证,所以这里gatt_determine_sec_act返回的就是GATT_SET_OK,所以走到了default分支的gatt_sec_check_complete,如下:

void gatt_sec_check_complete(BOOLEAN sec_check_ok, tGATT_CLCB   *p_clcb, UINT8 sec_act)
{
    if (p_clcb && p_clcb->p_tcb && GKI_queue_is_empty(&p_clcb->p_tcb->pending_enc_clcb))
        gatt_set_sec_act(p_clcb->p_tcb, GATT_SEC_NONE);

    if (!sec_check_ok)
    {
        gatt_end_operation(p_clcb, GATT_AUTH_FAIL, NULL);
    }
    else if (p_clcb->operation == GATTC_OPTYPE_WRITE)
    {
        gatt_act_write(p_clcb, sec_act);
    }
    else if (p_clcb->operation == GATTC_OPTYPE_READ)
    {
        gatt_act_read(p_clcb, p_clcb->counter);
    }
}

这里终于准备写了,走到的是gatt_act_write,在gatt_cl.c中,如下:

void gatt_act_write (tGATT_CLCB *p_clcb, UINT8 sec_act)
{
    tGATT_TCB           *p_tcb = p_clcb->p_tcb;
    UINT8               rt = GATT_SUCCESS, op_code = 0;
    tGATT_VALUE         *p_attr = (tGATT_VALUE *)p_clcb->p_attr_buf;

    if (p_attr)
    {
        switch (p_clcb->op_subtype)
        {
            ......

            case GATT_WRITE:
                if (p_attr->len <= (p_tcb->payload_size - GATT_HDR_SIZE))
                {
                    p_clcb->s_handle = p_attr->handle;

                    rt = gatt_send_write_msg(p_tcb,
                                             p_clcb->clcb_idx,
                                             GATT_REQ_WRITE,
                                             p_attr->handle,
                                             p_attr->len,
                                             0,
                                             p_attr->value);
                }
                else /* prepare write for long attribute */
                {
                    gatt_send_prepare_write(p_tcb, p_clcb);
                }
                break;

            ......

            default:
                rt = GATT_INTERNAL_ERROR;
                GATT_TRACE_ERROR("Unknown write type: %d", p_clcb->op_subtype);
                break;
        }
    }
    else
        rt = GATT_INTERNAL_ERROR;

    ......
}

这里我们看普通写,如果要写的长度小,就直接走gatt_send_write_msg,否则走gatt_send_prepare_write,其实最后都是调的gatt_send_write_msg,如下:

UINT8 gatt_send_write_msg (tGATT_TCB *p_tcb, UINT16 clcb_idx, UINT8 op_code,
                           UINT16 handle, UINT16 len,
                           UINT16 offset, UINT8 *p_data)
{
    tGATT_CL_MSG     msg;

    msg.attr_value.handle = handle;
    msg.attr_value.len = len;
    msg.attr_value.offset = offset;

    memcpy (msg.attr_value.value, p_data, len);

    /* write by handle */
    return attp_send_cl_msg(p_tcb, clcb_idx, op_code, &msg);
}

这里逻辑很简单,继续往下走,在att_protocol.c中:

tGATT_STATUS attp_send_cl_msg (tGATT_TCB *p_tcb, UINT16 clcb_idx, UINT8 op_code, tGATT_CL_MSG *p_msg)
{
    tGATT_STATUS     status = GATT_NO_RESOURCES;
    BT_HDR          *p_cmd = NULL;
    UINT16          offset = 0, handle;

    if (p_tcb != NULL)
    {
        switch (op_code)
        {
        ......
        case GATT_REQ_PREPARE_WRITE:
            offset = p_msg->attr_value.offset;
            /* fall through */
        case GATT_REQ_WRITE:
        case GATT_CMD_WRITE:
        case GATT_SIGN_CMD_WRITE:
            if (GATT_HANDLE_IS_VALID (p_msg->attr_value.handle))
            {
                p_cmd = attp_build_value_cmd (p_tcb->payload_size,
                                              op_code, p_msg->attr_value.handle,
                                              offset,
                                              p_msg->attr_value.len,
                                              p_msg->attr_value.value);
            }
            else
                status = GATT_ILLEGAL_PARAMETER;
            break;
        ......

        default:
            break;
        }

        if (p_cmd != NULL)
            status = attp_cl_send_cmd(p_tcb, clcb_idx, op_code, p_cmd);

    }

    return status;
}

由于我们的op_code是GATT_REQ_WRITE,所以这里先通过attp_build_value_cmd封装好了cmd,然后调用attp_cl_send_cmd发送出去。之所以这么做是因为这个任务也许不能马上执行,所以需要丢到一个队列中。这个cmd就相当于队列中的一个task。我们看这个cmd是怎么丢到队列中的:

tGATT_STATUS attp_cl_send_cmd(tGATT_TCB *p_tcb, UINT16 clcb_idx, UINT8 cmd_code, BT_HDR *p_cmd)
{
    tGATT_STATUS att_ret = GATT_SUCCESS;

    if (p_tcb != NULL)
    {
        cmd_code &= ~GATT_AUTH_SIGN_MASK;

        /* no pending request or value confirmation */
        if (p_tcb->pending_cl_req == p_tcb->next_slot_inq ||
            cmd_code == GATT_HANDLE_VALUE_CONF)
        {
            att_ret = attp_send_msg_to_l2cap(p_tcb, p_cmd);
            if (att_ret == GATT_CONGESTED || att_ret == GATT_SUCCESS)
            {
                /* do not enq cmd if handle value confirmation or set request */
                if (cmd_code != GATT_HANDLE_VALUE_CONF && cmd_code != GATT_CMD_WRITE)
                {
                    gatt_start_rsp_timer (clcb_idx);
                    gatt_cmd_enq(p_tcb, clcb_idx, FALSE, cmd_code, NULL);
                }
            }
            else
                att_ret = GATT_INTERNAL_ERROR;
        }
        else
        {
            att_ret = GATT_CMD_STARTED;
            gatt_cmd_enq(p_tcb, clcb_idx, TRUE, cmd_code, p_cmd);
        }
    }
    else
        att_ret = GATT_ERROR;

    return att_ret;
}

这里的意思是如果当前没有别的待处理的请求的话就直接调用attp_send_msg_to_l2cap给请求丢到L2CAP层处理了,否则加到等待队列中。如果是丢到L2CAP层的请求则还要通过gatt_start_rsp_timer 启动一个定时器来检查回调。

到这里还有两个问题没有讨论到,一个是L2CAP层怎么处理写设备请求的,另一个是GKI层定时器的处理逻辑,这些会留给下文。

作者:dingjikerbo 发表于2016/9/3 18:36:43 原文链接
阅读:99 评论:0 查看评论

iOS开发中,block与代理的对比,双方的优缺点及在什么样的环境下,优先使用哪一种更为合适?

$
0
0
1.block和代理的对比
2.双方的优缺点

3.什么样的环境下,优先使用哪一种?依据是什么?


作者:黄兢成
链接:http://www.zhihu.com/question/29023547/answer/109570584
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

block 和 delegate 都可以通知外面。block 更轻型,使用更简单,能够直接访问上下文,这样类中不需要存储临时数据,使用 block 的代码通常会在同一个地方,这样读代码也连贯。delegate 更重一些,需要实现接口,它的方法分离开来,很多时候需要存储一些临时数据,另外相关的代码会被分离到各处,没有 block 好读。

应该优先使用 block。而有两个情况可以考虑 delegate。

1. 有多个相关方法。假如每个方法都设置一个 block, 这样会更麻烦。而 delegate 让多个方法分成一组,只需要设置一次,就可以多次回调。当多于 3 个方法时就应该优先采用 delegate。

比如一个网络类,假如只有成功和失败两种情况,每个方法可以设计成单独 block。但假如存在多个方法,比如有成功、失败、缓存、https 验证,网络进度等等,这种情况下,delegate 就要比 block 要好。

在 swift 中,利用 enum, 多个方法也可以合并成一个 block 接口。swift 中的枚举根据情况不同,可以关联不同数据类型。而在 objc 就不建议这样做,objc 这种情况下,额外数据需要使用 NSObject 或者 字典进行强转,接口就不够安全。

2. 为了避免循环引用,也可以使用 delegate。使用 block 时稍微不注意就形成循环引用,导致对象释放不了。这种循环引用,一旦出现就比较难检查出来。而 delegate 的方法是分离开的,并不会引用上下文,因此会更安全些。

假如写一个库供他人使用,不清楚使用者的水平如何。这时为防止误用,宁愿麻烦一些,笨一些,使用 delegate 来替代 block。

将 block 简单分类,有三种情形。

* 临时性的,只用在栈当中,不会存储起来。
比如数组的 foreach 遍历,这个遍历用到的 block 是临时的,不会存储起来。

* 需要存储起来,但只会调用一次,或者有一个完成时期。
比如一个 UIView 的动画,动画完成之后,需要使用 block 通知外面,一旦调用 block 之后,这个 block 就可以删掉。

* 需要存储起来,可能会调用多次。
比如按钮的点击事件,假如采用 block 实现,这种 block 就需要长期存储,并且会调用多次。调用之后,block 也不可以删除,可能还有下一次按钮的点击。

对于临时性的,只在栈中使用的 block, 没有循环引用问题,block 会自动释放。而只调用一次的 block,需要看内部的实现,正确的实现应该是 block 调用之后,马上赋值为空,这样 block 也会释放,同样不会循环引用。

而多次调用时,block 需要长期存储,就很容易出现循环引用问题。

Cocoa 中的 API 设计也是这样的,临时性的,只会调用一次的,采用 block。而多次调用的,并不会使用 block。比如按钮事件,就使用 target-action。有些库将按钮事件从 target-action 封装成 block 接口, 反而容易出问题。

作者:Bill Cheng
链接:http://www.zhihu.com/question/29023547/answer/110199052
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

Block 和 Delegate 两种在 iOS 开发中都有广泛的应用,如果加上 NSNotification 的话就把三大 iOS 回调方式给凑齐了。我这里根据这三者来进行说明。

Delegation (代理)是一种很常见的回调方式,和 Singleton (一样),在大部分编程语言里都有实现方法。
Block 是一种苹果开发的基于 C 的调用方式 [1],在 iOS 和 Mac 开发上都有广泛的应用。Block 从某种程度上来说是一种很新的回调方式,苹果在2009年将其引入 Mac OS X 10.6,之后在2010年将其引入到 iOS 4.0。值得一提的是,同样是在 iOS 4.0 ,苹果引入了 ARC (Automatic Reference Counting),准确的说的话是 ARCLite , iOS 5 才正式加入了 ARC [2]。
NSNotification 这个作为苹果在 2001 年发布 Mac OS X 的时候就集成在 Foundation 库里面的类,一直作为一种全局回调通知的功能而存在。有趣的是,按照苹果官方文档对于 Delegation 的说明,在 Cocoa Framwroks 中,苹果的 Delegation 被表述为是一种单观察者通知的实现。[3]

三种回调方式,能共存于 Objective-C 之中,现在又集体被继承到了 Swift 里面,说明三者肯定是有不同和各自的优劣之处的。
下面我就我个人这些年的 iOS 开发了解,简单说一下三者的优劣。

Delegation 是一种很清晰回调形式,从 Protocol 的建立,到之后的引用,和对于 delegate 声明的变量处理,都非常具有条理。建立完 Delegation 之后,其他方法在调用的时候会很清晰整个回调的流程和处理。在处理一些延迟回调或者触发回掉的时候,声明调用的类里面的回调方法在编写时可以按照很独立的逻辑在制作。在使用 Delegation 的时候,一个回调方法可以对应多个不同的 Delegation ,这不仅简化了编程过程,也让能回调处理更加清晰。
Delegation 不好的地方在于,在类中调用 delegate 方法的时候,需要对 delegate 本体进行一定的验证核对,防止出现方法对象为空的情况,再一个就是受制于 performSelector 这个 selector 方法,回掉返回的参数被限制在了 NS 类的范围内,数量也很有限(当然可以用直接调用方法的形式在绕过,并不推荐;也可以用 Array 套着传, 不过这样需要有文档支持,不然不够清晰,回调方法也需要独立的验证,故也不推荐):
if (self.delegate && [self.delegate respondsToSelector:@selector(ABC:)]){
        [self.delegate performSelector:@selector(ABC:) withObject:@"ABC"];
}
//需要验证代理是否为空,同时验证代理方法是否存在
这个问题在 Swfit 中有了很不错的解决:
delegate?.ABC?(@"ABC")
至于说 Delegation 的另外一个问题,那就是使用了 Delegation 之后,代码阅读变成了一件很困难的事情,你需要在不同的 Class 文件中一次次的跳转来理解整个代码思路,要知道糟糕的 XCode 还经常会跳错方法(Command + 点击跳转,跳到了同名的其他方法),导致代码可读性的下降。要说的话,这一点在 Swift(2.2)版本中有一定的优化,不过 Swift 的 Selector 还在修正中,之后也许会在对于 Delegation 的可读性上做更多的优化。
最后一个比较核心的问题就在于,在一批变量声明了代理之后,在代理回掉被执行时,你是不太好知道这个变量究竟是这一批中的哪一个的。这也就是为什么苹果在制作 delgate 和 datasource 的时候都会在代理方法的返回值中带上声明代理类本身的原因。

Block 是一种很好用的回掉方式,其解决了 Delegation 在确认声明对象上的问题,由于 Block 回调方法一般都跟随在声明之后,所以可以很快确认回调来源,通过 __block 声明的变量也可以很方便的穿越到回调方法中进行使用,代码可读性上,一般来说使用 Block 的代码比使用 Delegation 的代码可读性更强(当然你也可以声明 Block 回调方法对应变量,然后按照和 Delegation 差不多的方法来调用他)。
Block 的缺陷主要就在于使用 ARC 情况下的循环引用。从某种程度上来说, Block 回调的方法内变量实际上是关联在声明 Block 的类里面的,但 Block 回调方法本身是在使用 Block 的类中的,同时使用类的 self 本身是可以在 Block 回调方法中被请求的,这里就会出现使用类 A 引用声明类 B ,B 在关联的 Block 中又引用了使用类 A ,这样一个循环之后引用可以无限循环下去,在这种无限循环的引用下, ARC 就无法知道 A 和 B 的确切弃用时间,所以 A 和 B 会在内存中永远存活下去,直到进程被消灭。所以,在很多时候,我们必须要使用 __weak 来声明一个 weakself ,来帮助 ARC 判断内存回收的时间。
这里要指出的是, Block 的回调方法也是可以复用,创建回调方法这一套东西在 Objective-C 中是继承于 C 样式的,一般来说,这个东西是没人用。[4]
void (^simpleBlock)(id responseObject) = ^(id responseObject){
        NSLog(@"This is a block");
    };
//这里创建了 simpleBlock 之后就可以像 Delegation 回调方法那样在各种回调声明中使用了

NSNotification 本身是一个非常强大的回调,因为他的回调是全局而且一对多的,广播的特性使得很多时候使用 NSNotification 能一次解决大面积的问题。同时,由于 NSNotification 是一套很古老的回调机制,在一些时候,当我们需要对 iOS Framework 做一些特殊处理的时候,会用到一些获取隐藏 NSNotification 的方法,这个在之前权限不完善的时候,企业开发中使用很广泛。记得当年 iOS 7 Tech Talk 上海站,我带着代码去找苹果的人问一个问题的时候,他们就查了之后文档给了我一个隐藏的 NSNotification 名,帮我解决了问题。(这个通知之后开放给开发者了,记得应该是一个键盘的通知)
至于说 NSNotification,就和上面说到的一样,也主要是在于他的全局广播属性和权限机制。
在使用 NSNotification 的时候,注册完回调方法之后,开发者需要自行对注册进行取消操作。比如说你注册一个 A 方法到 B 通知,由于某些原因 A 方法所在的类被 ARC 回收掉了,那么在 B 通知被触发的时候,由于 A 的通知注册信息还在,就会出现调用了非法的内存地址的情况。我曾经遇到了一次,应该是在调用 Jianting Zhu 还是 Jim Liu 的 WeiboSDK 的时候,记得那一版 SDK 特别奇葩,所有回调都是通过 NSNotification 来进行的,一开始用的时候不太懂,各种注册回调方法,然后发现 App 跑起来会莫名的闪退,那时候也不太懂,只能硬着头皮把代码都改成代理的形式。后来在做键盘的时候碰到了类似的报错,花时间研究了之后才发现是通知回调了已经被回收的类里面的方法,这时候才知道要如果通知没有注销会带来调用上的问题。
至于说 NSNotification 的权限问题,对于写类的人来说是比较头疼的,很多时候只能靠文档和调用者的自觉,出于权限考虑,如果不是特别需求全局广播这个特性,一般不太建议使用 NSNotification。
NSNotification 由于自身的限制,在回调可以传递的内容上也存在数量和内容的限制,虽然可以通过 Array 的方法绕过,但这样在代码可读性就会有折扣,对于文档也需要有要求,回调方法中还需要验证。

那么,在何种情况下使用上面三者呢?

对于初级的开发人员来说,关键在于使用习惯。如果你从其他语言转到 Objective-C 或者 Swift ,相信 Delegation 肯定让你觉得更加亲切,那么在初级阶段请使用好这个语法糖,多用,多去理解;如果你用着 AFNetworking 看着其他老前辈的说法用 Block 觉得效率很高很开心,那就开心的用,直到你被循环引用烦到了为止(笑);如果你用 NSNotification ……你还是别用了。然后,在你代码写多了之后,你可以开始尝试接触其他回调方式,去感受这些回调方式的不同。

对于中级的开发人员,关键在于对于回调流程的理解。
你要知道你的回调是一个什么性质的回调,如果这个回调是一个不定期触发,或者会多次触发的,那么 Delegation 应该更适合;如果这个回调是一个一次性的,并且和调用方法是单线性关系的,那么 Block 应该更适合;如果这个回调是广播性质的,需要很多个不同的类都接收到,那么 NSNotification 更适合。
在不同的执行线(不是线程),不同的执行次数、执行数量上的区别,是鉴别使用哪一种回调的最好判断方法。
对于 Block 来说,他的执行线应该是和调用方法、回调方法连续在一起的;对于 Delegation 和 NSNotification 来说,他的执行线可以是连续的,也可以是调用方法和回调方法之间有很长的间隔,或者说回调方法在执行线上会多次出现。

对于高级的开发人员……你们要是不懂上面那些就不要做高级开发了,你们应该去研究线程、 GCD 、 NSOperation 这些玩意。


作者:super_man_ww 发表于2016/9/3 20:31:21 原文链接
阅读:67 评论:0 查看评论

OkHttp3源码详解(一)

$
0
0

           上次在哪篇博客看到这句话,我们不重复造轮子不表示我们不需要知道轮子该怎么造及如何更好的造,我觉得很有道理

对于用到项目的某个开源项目我们不应该只停留在会用的阶段,废话不多说,直接开始okhttp源码的学习之路

        从上至下我们先从Request类开始阅读

       

       一.Request

        每一次网络请求都是一个Request,Request是对url,method,header,body的封装,也是对Http协议中请求行,请求头,实体内容的封装

         

       
      Request request = new Request
                        .Builder()
                        .url(url)
                        .post(body)
                        .addHeader("Accept","*/*")
                        .cacheContro()
                       .build();

 通常我们通过构建折模式来构建一个Request,对于构建者在OkHttp的源码中到处都可以看到,大家可以自己去翻一翻,我们来看一下Request里的代码,Request主要有如下属性

 

  private final HttpUrl url;//请求url封装
  private final String method;//请求方法
  private final Headers headers;//请求头
  private final RequestBody body;//请求体,也就是http协议的实体内容
  private final Object tag;//被请求的标签

  private volatile URL javaNetUrl; // Lazily initialized.
  private volatile URI javaNetUri; // Lazily initialized.
  private volatile CacheControl cacheControl; // 缓存控制的封装

  1.HttpUrl

HttpUrl主要用来规范普通的url连接,并且解析url的组成部分

我们来看一下url的构成

scheme://username:password@host:port/pathSegment/pathSegment?queryParameter#fragment;

现通过下面的例子来示例httpUrl的使用
https://www.google.com/search?q=maplejaw
使用parse解析url字符串:

HttpUrl url = HttpUrl.parse("https://www.google.com/search?q=maplejaw");

通过构造者模式来常见:

HttpUrl url = new HttpUrl.Builder()
        .scheme("https")
        .host("www.google.com")
        .addPathSegment("search")
        .addQueryParameter("q", "maplejaw")
        .build();

   

2.Headers

Headers用于配置请求头,对于请求头配置大家一定不陌生吧,比如Content-Type,User-Agent和Cache-Control等等

创建Headers也有两种方式。如下:
(1)of()创建:传入的数组必须是偶数对,否则会抛出异常。

Headers.of("name1","value1","name2","value2",.....);
  还可以使用它的重载方法of(Map<String,String> map)方法来创建

(2)构建者模式创建

   

 Headers mHeaders=new Headers.Builder()
            .set("name1","value1")//set表示name1是唯一的,会覆盖掉已经存在的
            .add("name2","value2")//add不会覆盖已经存在的头,可以存在多个
            .build();

我们来看一下Header的内部,源码就不粘贴了很简单,Headers内部是通过一个数组来保存header private final String[] namesAndValues;大家可能会有这样的疑问,为什么不用Map而用数组呢?因为Map的Key是唯一的,而header要求不唯一

另外,数组方便取数组吗?很方便,我们来看着两个方法

/** Returns the field at {@code position} or null if that is out of range. */
  public String name(int index) {
    int nameIndex = index * 2;
    if (nameIndex < 0 || nameIndex >= namesAndValues.length) {
      return null;
    }
    return namesAndValues[nameIndex];
  }

  /** Returns the value at {@code index} or null if that is out of range. */
  public String value(int index) {
    int valueIndex = index * 2 + 1;
    if (valueIndex < 0 || valueIndex >= namesAndValues.length) {
      return null;
    }
    return namesAndValues[valueIndex];
  }

最后通过toString方法转变成String,方便写入请求头,

<span style="font-size:14px;"> @Override public String toString() {
    StringBuilder result = new StringBuilder();
    for (int i = 0, size = size(); i < size; i++) {
      result.append(name(i)).append(": ").append(value(i)).append("\n");
    }
    return result.toString();
  }</span>

2.CacheControl

    Cache-Control对应请求头中Cache-Control中的值,我们先来看一下Http协议中Cache-Control

   ( 1)  Cache-Control:

     Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令有下几种:

  • Public:所有内容都将被缓存(客户端和代理服务器都可缓存)。
  • Private:内容只缓存到私有缓存中(仅客户端可以缓存,代理服务器不可缓存)
  • no-cache:请求或者响应消息不能缓存
  • no-store:不使用缓存,也不存储缓存
  • max-age:缓存的内容将在指定时间(秒)后失效, 这个选项只在HTTP 1.1可用, 并如果和Last-Modified一起使用时, 优先级较高
    在 xxx 秒后,浏览器重新发送请求到服务器,指定时间(秒)内,客户端会直接返回cache而不会发起网络请求,若过期会自动发起网络请求
  • min-fresh:指示客户端可以接收响应时间小于当前时间加上指定时间的响应。
  • max-stale:指示客户端可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
   (2)CacheControl类

       ①常用的函数

     

 final CacheControl.Builder builder = new CacheControl.Builder();
            builder.noCache();//不使用缓存,全部走网络
            builder.noStore();//不使用缓存,也不存储缓存
            builder.onlyIfCached();//只使用缓存
            builder.noTransform();//禁止转码
            builder.maxAge(10, TimeUnit.MILLISECONDS);//指示客户机可以接收生存期不大于指定时间的响应。
            builder.maxStale(10, TimeUnit.SECONDS);//指示客户机可以接收超出超时期间的响应消息
            builder.minFresh(10, TimeUnit.SECONDS);//指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
            CacheControl cache = builder.build();//cacheControl

     

     ②CacheControl的两个常量:

    

 public static final CacheControl FORCE_NETWORK = new Builder().noCache().build();//不使用缓存
  public static final CacheControl FORCE_CACHE = new Builder()
      .onlyIfCached()
      .maxStale(Integer.MAX_VALUE, TimeUnit.SECONDS)
      .build();//只使用缓存

     ③请求时如何使用:

  

final CacheControl.Builder builder = new CacheControl.Builder();
            builder.maxAge(10, TimeUnit.MILLISECONDS);
            CacheControl cache = builder.build();
            final Request request = new Request.Builder().cacheControl(cache).url(requestUrl).build();
            final Call call = mOkHttpClient.newCall(request);//
            call.enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
                    failedCallBack("访问失败", callBack);
                    Log.e(TAG, e.toString());
                }

                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    if (response.isSuccessful()) {
                        String string = response.body().string();
                        Log.e(TAG, "response ----->" + string);
                        successCallBack((T) string, callBack);
                    } else {
                        failedCallBack("服务器错误", callBack);
                    }
                }
            });
            return call;
        } catch (Exception e) {
            Log.e(TAG, e.toString());
        }
 
     以上如果Cache没有过去会直接返回cache而不会去发起网络请求,若过期自动发起网络请求,注意:如果您使用FORCE_CACHE和网络的响应需求,OkHttp则会返回一个504提示,告诉你不可满足请求响应,所以我们加一个判断在没有网络的情况下使用
      
     //判断网络是否连接
        boolean connected = NetworkUtil.isConnected(context);
         if (!connected) {
             request = request.newBuilder().cacheControl(CacheControl.FORCE_CACHE).build();
          }
     以上这些就是CacheControl类的学习,源码没必要看了,虽然很长但是比较简单,也就是通过方法来选择使用哪种缓存模式而已


3.RequestBody

requestBody也就是请求实体内容,我们先来看一下如何来构建一个RequestBody

(1)Request.create()方法创建

  public static final MediaType TEXT = MediaType.parse("text/plain; charset=utf-8");
     public static final MediaType STREAM = MediaType.parse("application/octet-stream");
     public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");

     //构建字符串请求体
     RequestBody body1 = RequestBody.create(TEXT, string);
     //构建字节请求体
     RequestBody body2 = RequestBody.create(STREAM, byte);
     //构建文件请求体
     RequestBody body3 = RequestBody.create(STREAM, file);
     //post上传json
     RequestBody body4 = RequestBody.create(JSON, json);//json为String类型的

     //将请求体设置给请求方法内
     Request request = new Request.Builder()
       .url(url)
       .post(xx)// xx表示body1,body2,body3,body4中的某一个
       .build();


(2)构建表单请求体,提交键值对(OkHttp3没有FormEncodingBuilder这个类,替代它的是功能更加强大的FormBody:)

 //构建表单RequestBody
     RequestBody formBody=new FormBody.Builder()
                 .add("name","maplejaw")
                 .add("age","18")
                  ...     
                 .build();

 (3)构建分块表单请求体:(OkHttp3取消了MultipartBuilder,取而代之的是MultipartBody.Builder()
                  既可以添加表单,又可以也可以添加文件等二进制数据)

  

public static final MediaType STREAM = MediaType.parse("application/octet-stream");
      //构建表单RequestBody
      RequestBody multipartBody=new MultipartBody.Builder()
                .setType(MultipartBody.FORM)//指明为 multipart/form-data 类型
                .addFormDataPart("age","20") //添加表单数据
                .addFormDataPart("avatar","111.jpg",RequestBody.create(STREAM,file)) //添加文件,其中avatar为表单名,111.jpg为文件名。
                .addPart(..)//该方法用于添加RequestBody,Headers和添加自定义Part,一般来说以上已经够用
                .build();



   知道了RequestBody的创建,我们来看一下源码

   RequestBody也就是请求实体内容,对于一个Get请求时没有实体内容的,Post提交才有,而且浏览器与服务器通信时基本上只有表单上传才会用到POST提交,所以RequestBody其实也就是封装了浏览器表单上传时对应的实体内容,对于实体内容是什么样还不清楚的可以去看一下我的一篇博客Android的Http协议的通信详解

  OkHttp3中RequestBody有三种创建方式

  ①方式一:

 

 public static RequestBody create(MediaType contentType, String content) {
    Charset charset = Util.UTF_8;
    if (contentType != null) {
      charset = contentType.charset();//MediaType的为请求头中的ContentType创建方式:public static final MediaType TEXT = 
                                      //MediaType.parse("text/plain; charset=utf-8")
      if (charset == null) {
        charset = Util.UTF_8;<span style="font-family:Microsoft YaHei;">//如果contentType中没有指定charset,默认使用UTF-8</span>
        contentType = MediaType.parse(contentType + "; charset=utf-8");
      }
    }
    byte[] bytes = content.getBytes(charset);
    return create(contentType, bytes);
  }
   最终会调用下面的方法

  

 /** Returns a new request body that transmits {@code content}. */
  public static RequestBody create(final MediaType contentType, final byte[] content,
      final int offset, final int byteCount) {
    if (content == null) throw new NullPointerException("content == null");
    Util.checkOffsetAndCount(content.length, offset, byteCount);
    return new RequestBody() {
      @Override public MediaType contentType() {
        return contentType;
      }

      @Override public long contentLength() {
        return byteCount;
      }

      @Override public void writeTo(BufferedSink sink) throws IOException {
        sink.write(content, offset, byteCount);
      }
    };
  }
   ②方式二:FormBody表单创建,我们来看一下

    FormBody用于普通post表单上传键值对,我们先来看一下创建的方法,再看源码

  

 RequestBody formBody=new FormBody.Builder()
                 .add("name","maplejaw")
                 .add("age","18")
                  ...     
                 .build();

  也就是简单的键值对,通过构建者模式得到FormBody对象,我们来看一下源码z

 

 private static final MediaType CONTENT_TYPE =
  MediaType.parse("application/x-www-form-urlencoded");<span style="font-family:Microsoft YaHei;">//ContentType,请求头中</span>

  private final List<String> encodedNames;
  private final List<String> encodedValues;

  private FormBody(List<String> encodedNames, List<String> encodedValues) {
    this.encodedNames = Util.immutableList(encodedNames);
    this.encodedValues = Util.immutableList(encodedValues);
  }

  /** The number of key-value pairs in this form-encoded body. */
  public int size() {
    return encodedNames.size();
  }

  public String encodedName(int index) {
    return encodedNames.get(index);
  }

  public String name(int index) {
    return percentDecode(encodedName(index), true);
  }

  public String encodedValue(int index) {
    return encodedValues.get(index);
  }

  public String value(int index) {
    return percentDecode(encodedValue(index), true);
  }

  @Override public MediaType contentType() {
    return CONTENT_TYPE;
  }

  @Override public long contentLength() {
    return writeOrCountBytes(null, true);
  }

  @Override public void writeTo(BufferedSink sink) throws IOException {
    writeOrCountBytes(sink, false);
  }
<span style="font-family:Microsoft YaHei;">   </span>
  private long writeOrCountBytes(BufferedSink sink, boolean countBytes) {
    long byteCount = 0L;

    Buffer buffer;
    if (countBytes) {
      buffer = new Buffer();
    } else {
      buffer = sink.buffer();
    }

    for (int i = 0, size = encodedNames.size(); i < size; i++) {
      if (i > 0) buffer.writeByte('&');
      buffer.writeUtf8(encodedNames.get(i));
      buffer.writeByte('=');
      buffer.writeUtf8(encodedValues.get(i));
    }

    if (countBytes) {
      byteCount = buffer.size();
      buffer.clear();
    }

    return byteCount;
  }
   我们主要来看一下方法writeOrCountBytes通过writeOrCountBytes来计算请求体大小和将请求体写入BufferedSink。

至于BufferSink和Buffer类,这两个类是Okio中的类,Buffer相当于一个缓存区,BufferedSink相当于OutputStream,它扩展了

OutputStream的功能,Okio的完整源码我后续也会写博客

  

   ③方式三:MultipartBody分块表单创建

   MultipartBody, 既可以添加表单,又可以也可以添加文件等二进制数据,我们就看几个重要的方法

  

 public static Part createFormData(String name, String filename, RequestBody body) {
      if (name == null) {
        throw new NullPointerException("name == null");
      }
      StringBuilder disposition = new StringBuilder("form-data; name=");
      appendQuotedString(disposition, name);

      if (filename != null) {
        disposition.append("; filename=");
        appendQuotedString(disposition, filename);
      }

      return create(Headers.of("Content-Disposition", disposition.toString()), body);
    }

  我们来看这个方法,我们是addPart还是addFormDataPart最终都走到了这个方法,封装成一个Part对象,也就是实体内容中

的Content-Disposition跟文件二进制流或者键值对的值

  MultipartBody和FormBody大体上相同,主要区别在于writeOrCountBytes方法,分块表单主要是将每个块的大小进行累加来求出请求体大小,如果其中有一个块没有指定大小,就会返回-1。所以分块表单中如果包含文件,默认是无法计算出大小的,除非你自己给文件的RequestBody指定contentLength。

  

  private long writeOrCountBytes(BufferedSink sink, boolean countBytes) throws IOException {
    long byteCount = 0L;

    Buffer byteCountBuffer = null;
    if (countBytes) {
      //如果是计算大小的话,就new个
      sink = byteCountBuffer = new Buffer();
    }
    //循环块
    for (int p = 0, partCount = parts.size(); p < partCount; p++) {
      Part part = parts.get(p);
      //获取每个块的头
      Headers headers = part.headers;
      //获取每个块的请求体
      RequestBody body = part.body;

      //写 --xxxxxxxxxx 边界     
      sink.write(DASHDASH);
      sink.write(boundary);
      sink.write(CRLF);

      //写块的头
      if (headers != null) {
        for (int h = 0, headerCount = headers.size(); h < headerCount; h++) {
          sink.writeUtf8(headers.name(h))
              .write(COLONSPACE)
              .writeUtf8(headers.value(h))
              .write(CRLF);
        }
      }

      //写块的Content_Type
      MediaType contentType = body.contentType();
      if (contentType != null) {
        sink.writeUtf8("Content-Type: ")
            .writeUtf8(contentType.toString())
            .write(CRLF);
      }

      //写块的大小
      long contentLength = body.contentLength();
      if (contentLength != -1) {
        sink.writeUtf8("Content-Length: ")
            .writeDecimalLong(contentLength)
            .write(CRLF);
      } else if (countBytes) {
        // We can't measure the body's size without the sizes of its components.
        //如果有个块没有这名大小,就返回-1.
        byteCountBuffer.clear();
        return -1L;
      }

      sink.write(CRLF);

      //如果是计算大小就累加,否则写入BufferedSink
      if (countBytes) {
        byteCount += contentLength;
      } else {
        body.writeTo(sink);
      }

      sink.write(CRLF);
    }

 //写 --xxxxxxxxxx-- 结束边界
    sink.write(DASHDASH);
    sink.write(boundary);
    sink.write(DASHDASH);
    sink.write(CRLF);


    if (countBytes) {
      byteCount += byteCountBuffer.size();
      byteCountBuffer.clear();
    }

    return byteCount;
  }

  好了OkHttp Request类的源码也差不读就这么多,比较简单,从简单的来嘛从浅到深,后面的博客将继续深入的学习OkHttp的源码,我这个人比较较真喜欢追究看源码弄懂到底是这么回事,这两天把大学里面的计算机网络的书又翻出来看了看,以前在学习的时候还是基础没打牢啊
 

 


作者:qq_31694651 发表于2016/9/3 23:04:26 原文链接
阅读:22 评论:0 查看评论

第三方SDK:百度地图(一)HelloBaiduMap

$
0
0

第三方SDK:百度地图(一)HelloBaiduMap

百度官方文档:http://lbsyun.baidu.com/index.php?title=androidsdk

使用步骤:

  1. 下载百度地图的SDK +申请密钥
  2. 环境配置(添加jar+so)
  3. 配置AndroidManifest.xml(key+user-permission)
  4. 编写代码

1 下载百度地图的SDK+申请密钥

由于我们是基本实现百度地图的功能,所以只需要设置基本地图即可。

这里写图片描述

百度官方:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/key
申请密钥需要填写: 应用名称 + 包名 + SHA1
获取SHA1有2种方式(ADT>=22和使用keytool )

1-1申请密钥需要填写如图:

这里写图片描述

1-2获取SHA1有2种方式

1-2-1ADT>=22 获取SHA1

步骤:windows-->preferences-->Android-->Builder-->SHA1 FingerPrint。

1-2-2使用keytool :Android Studio 或 ADT < 22

步骤:进入cmd,输入: cd .android,再输入:keytool -list -v -keystore debug.store,(密钥口令是android)即可得到SHA1.

注意:正式上线的时候要用发布版的key.store,而不是debug.store,否则会出现没有地图只有网格的情况。

SHA1获取如图:
这里写图片描述

2 环境配置:添加 jar + so

百度官方文档:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/buildproject
首先需要下载BaiduMapSDK,在AS/Eclipse中添加

2-1 Android Studio添加jar + so

  1. 第一步:在工程app/libs目录下放入baidumapapi_vX_X_X.jar包,在src/main/目录下新建jniLibs目录,工程会自动加载src目录下的so动态库,放入libBaiduMapSDK_vX_X_X_X.so如下图所示,注意jar和so的前3位版本号必须一致,并且保证使用一次下载的文件夹中的两个文件,不能不同功能组件的jar或so交叉使用。
  2. 第二步:工程配置还需要把jar包集成到自己的工程中,如图上图所示,放入libs目录下。对于每个jar文件,右键-选择Add As Library,导入到工程中。对应在build.gradle生成工程所依赖的jar文件说明。

2-2 Eclipse中添加jar + so

直接将下载的libs中的文件不知道项目中libs文件夹中即可。(工具栏的project-->Build Automatolly打钩,意思是:自动编译)
so文件可以只将armeabi文件夹复制到libs中即可(armeabi是手机CPU架构,现在大部分手机是arm架构)

如图:
这里写图片描述

3 配置AndroidManifest.xml(key+user-permission)

百度官方文档:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/hellobaidumap

user-permission 直接复制 文档中的即可。
key:第一步:申请密钥获取的key。

配置key见下图:
这里写图片描述

3-1AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.baidu.bdmap01"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    <!-- 配置百度地图的权限 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />

    <!-- 注意设置application的name-->
    <application
        android:name="com.baidu.bdmap01.MyApplication"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.baidu.bdmap01.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

     <!-- 配置百度地图key -->
        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="bbzRqPFYCQUWnm2nEzsZpGe6nzvHHSkG" />
    </application>

</manifest>

4代码

  1. 初始化Context
  2. 布局中添加MapView组件
  3. 创建地图Activity,管理地图生命周期;

4-1初始化SDK

package com.baidu.bdmap01;

import com.baidu.mapapi.SDKInitializer;

import android.app.Application;

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        //在使用SDK各组件之前初始化context信息,传入ApplicationContext  
        //注意该方法要再setContentView方法之前实现  
        SDKInitializer.initialize(getApplicationContext());  

        super.onCreate();
    }
}

4-2布局中添加MapView组件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <com.baidu.mapapi.map.MapView
        android:id="@+id/bmapView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true" />

</LinearLayout>

4-3创建地图Activity,管理地图生命周期

package com.baidu.bdmap01;

import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapView;

import android.os.Bundle;
import android.app.Activity;

public class MainActivity extends Activity {

    private MapView mMapView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 获取地图控件引用
        mMapView = (MapView) findViewById(R.id.bmapView);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
        mMapView.onDestroy();
    }

    @Override
    protected void onResume() {
        super.onResume();
        // 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
        mMapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        // 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
        mMapView.onPause();
    }

}

结果如图:
这里写图片描述

5注意事项:

1 闪退

由于是在Application中进行的初始化,但忘记在Androidmanifest.xml的application节点下设置name属性,导致闪退。

2 只显示网格,没有地图

1.appKey错误(packagename也要复制全面)
2.Eclipse中project.properties的target=android-18不匹配。
3.数据多,网络慢。

比例尺默认是5公里,数据太多,加载慢,可以将比例尺改为放大或缩小,地图会马上显示出来。例如:放大到2公里,或50公里(>=50均可),地图会马上显示出来,比默认的5公里显示的快多了(实际验证多次,而且默认5公里要很久才显示出来)

下载:

下载源码:https://github.com/s1168805219/BaiDuDemo01

作者:ss1168805219 发表于2016/9/3 23:12:01 原文链接
阅读:19 评论:0 查看评论

分享一个我用的 unity 日志系统

$
0
0

我们在开发中,往往会觉得unity自带的日志系统不是那么好用,比如,不能筛选日志,不能打印在屏幕上,想生成自己的日志文件,等等等等的需求,这时候就需要自己来扩展编辑器的相关功能了。
我这里实现的需求比较简单,就是给日志加了个key,可以根据这个key来对暂时不需要显示的日志进行过滤,还有就是将我们的日志打印到屏幕上去。

打印屏幕的类参考了由 Jeremy Hollingsworth 和 Simon Waite 这2人写的一个 DebugConsole.cs 类,不过他们2个的版本实在是太早了,而且还有错误和啰嗦的地方,有兴趣的话你可以去搜来看看。外加老外真的很喜欢用while循环呀,好多能用for的地方也是while,是因为这样写字比较少吗?看来大家都是懒癌晚期患者,(:зゝ∠)

一直犯懒,终于把它给写了。。。有时间我也给它扔到 github 上去。。。
外加如果想要输出日志文件,或者其它什么功能的,你就自己加就好了,我当前的需求还是挺简单的~

效果如图:

这样用
这里写图片描述

或者这样用
这里写图片描述

一共由2个类组成,一个负责控制台打印,一个负责屏幕打印

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Text;

namespace GameFramework
{
    /// <summary>
    /// 日志管理器
    /// </summary>
    public class DebugMgr
    {
        #region 日志结构

        /// <summary>
        /// 日志基类
        /// </summary>
        protected abstract class LogDataBase
        {
            /// <summary>
            /// key
            /// </summary>
            public string key;
            /// <summary>
            /// 日志
            /// </summary>
            public string log;

            /// <summary>
            /// 构造
            /// </summary>
            /// <param name="_key">key</param>
            /// <param name="_log">日志</param>
            public LogDataBase(string _key, string _log)
            {
                key = _key;
                log = _log;
            }

            /// <summary>
            /// 获取log
            /// </summary>
            /// <param name="format">格式</param>
            /// <returns>log</returns>
            protected string GetLog(string format)
            {
                string txt = string.Format(format, key, log);
                return txt;
            }

            /// <summary>
            /// 打印
            /// </summary>
            /// <param name="format">格式</param>
            /// <returns>日志</returns>
            public abstract string Print(string format);
        }

        /// <summary>
        /// 日志类
        /// </summary>
        protected class LogData : LogDataBase
        {
            public LogData(string key, string message)
                : base(key, message)
            { }

            public override string Print(string format)
            {
                string logTxt = base.GetLog(format);
                Debug.Log(logTxt);
                return logTxt;
            }
        }

        /// <summary>
        /// 警告类
        /// </summary>
        protected class LogWarningData : LogDataBase
        {
            public LogWarningData(string key, string message)
                : base(key, message)
            { }

            public override string Print(string format)
            {
                string logTxt = base.GetLog(format);
                Debug.LogWarning(logTxt);
                return logTxt;
            }
        }

        /// <summary>
        /// 错误类
        /// </summary>
        protected class LogErrorData : LogDataBase
        {
            public LogErrorData(string key, string message)
                : base(key, message)
            { }

            public override string Print(string format)
            {
                string logTxt = base.GetLog(format);
                Debug.LogError(logTxt);
                return logTxt;
            }
        }

        #endregion 日志结构类 ------------------------------------


        /// <summary>
        /// 日志格式
        /// </summary>
        public static string format = "{0}:{1}";

        /// <summary>
        /// 屏幕显示
        /// </summary>
        public static bool screenDisplay = false;

        // 过滤key集合
        private static List<string> s_filterKeyList = new List<string>();

        /// <summary>
        /// 清除所有key
        /// </summary>
        public static void ClearFilterKey()
        {
            s_filterKeyList.Clear();
        }
        /// <summary>
        /// 增加key
        /// </summary>
        /// <param name="key">key</param>
        public static void AddFilterKey(string key)
        {
            // 不加重复的key
            if (s_filterKeyList.Contains(key))
                return;
            s_filterKeyList.Add(key);
        }
        /// <summary>
        /// 移除key
        /// </summary>
        /// <param name="key">key</param>
        public static void RemoveFilterKey(string key)
        {
            if (s_filterKeyList.Contains(key))
                s_filterKeyList.Remove(key);
        }

        // 打印
        private static string Print(LogDataBase ld)
        {
            // 日志不能为空
            if (ld == null)
                return "";

            // 日志key是被过滤的
            if (s_filterKeyList.Contains(ld.key))
                return "";

            // 打印日志
            string logTxt = ld.Print(format);
            return logTxt;
        }

        /// <summary>
        /// 日志
        /// </summary>
        /// <param name="log">日志</param>
        /// <param name="key">key</param>
        public static void Log(string log, string key = "日志")
        {
            LogData ld = new LogData(key, log);
            string logTxt = DebugMgr.Print(ld);

            if (screenDisplay)
                DebugConsole.Log(logTxt);
            else
                DebugConsole.Clear();
        }
        /// <summary>
        /// 警告
        /// </summary>
        /// <param name="log">日志</param>
        /// <param name="key">key</param>
        public static void LogWarning(string log, string key = "警告")
        {
            LogWarningData ld = new LogWarningData(key, log);
            string logTxt = DebugMgr.Print(ld);

            if (screenDisplay)
                DebugConsole.LogWarning(logTxt);
            else
                DebugConsole.Clear();
        }
        /// <summary>
        /// 错误
        /// </summary>
        /// <param name="log">日志</param>
        /// <param name="key">key</param>
        public static void LogError(string log, string key = "错误")
        {
            LogErrorData ld = new LogErrorData(key, log);
            string logTxt = DebugMgr.Print(ld);

            if (screenDisplay)
                DebugConsole.LogError(logTxt);
            else
                DebugConsole.Clear();
        }
    }
}
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

namespace GameFramework
{
    public class DebugConsole : MonoBehaviour
    {
        /// <summary>
        /// 日志颜色枚举
        /// </summary>
        public enum LogColor
        {
            NORMAL, WARNING, ERROR
        }

        /// <summary>
        /// 普通颜色
        /// </summary>
        public Color normalColor = Color.green;
        /// <summary>
        /// 警告颜色
        /// </summary>
        public Color warningColor = Color.yellow;
        /// <summary>
        /// 错误颜色
        /// </summary>
        public Color errorColor = Color.red;

        /// <summary>
        /// 第一个gui组件
        /// </summary>
        public GameObject debugGui = null;
        /// <summary>
        /// 默认gui位置
        /// </summary>
        public Vector3 defaultGuiPosition = new Vector3(0.01f, 0.98f, 0f);

        /// <summary>
        /// 显示最大日志数
        /// </summary>
        public int maxLogs = 30;
        /// <summary>
        /// 行间距
        /// </summary>
        public float lineSpacing = 0.03f;

        /// <summary>
        /// 能拖动
        /// </summary>
        public bool draggable = true;
        /// <summary>
        /// 是否显示
        /// </summary>
        public bool visible = true;


        // 集合
        private List<GUIText> m_guiList = new List<GUIText>();
        private List<string> m_logList = new List<string>();
        private List<LogColor> m_colorList = new List<LogColor>();


        // 单例
        private static DebugConsole s_instance = null;
        /// <summary>
        /// 获取单例
        /// </summary>
        /// <returns>单例</returns>
        public static DebugConsole GetInstance()
        {
            if (s_instance == null)
            {
                s_instance = (DebugConsole)FindObjectOfType(typeof(DebugConsole));
                if (s_instance == null)
                {
                    GameObject console = new GameObject();
                    console.name = "DebugConsole";
                    console.AddComponent<DebugConsole>();

                    s_instance = (DebugConsole)FindObjectOfType(typeof(DebugConsole));
                }
            }

            return s_instance;
        }

        void Awake()
        {
            DontDestroyOnLoad(this);
            s_instance = this;
            this.InitGuis();
        }

        private void InitGuis()
        {
            // 初始化第一个gui
            if (debugGui == null)
            {
                debugGui = new GameObject();
                debugGui.name = "DebugGUI(0)";
                debugGui.transform.SetParent(this.transform, false);
                debugGui.transform.position = defaultGuiPosition;

                GUIText gt = debugGui.AddComponent<GUIText>();
                m_guiList.Add(gt);
            }

            // 创建其它的gui
            Vector3 position = debugGui.transform.position;
            int guiCount = 1;
            while (guiCount < maxLogs)
            {
                position.y -= lineSpacing;

                GameObject clone = (GameObject)Instantiate(debugGui, position, transform.rotation);
                clone.name = string.Format("DebugGUI({0})", guiCount);
                GUIText gt = clone.GetComponent<GUIText>();
                m_guiList.Add(gt);

                position = clone.transform.position;

                ++guiCount;
            }
            // 设置父节点
            guiCount = 0;
            while (guiCount < m_guiList.Count)
            {
                GUIText temp = (GUIText)m_guiList[guiCount];
                temp.transform.parent = debugGui.transform;

                ++guiCount;
            }
        }


        // 连接到手指
        private bool connectedToMouse = false;
        void Update()
        {
            // 拖拽移动
            if (draggable)
            {
                if (Input.GetMouseButtonDown(0))
                {
                    if (connectedToMouse)
                    {
                        connectedToMouse = false;
                    }
                    else if (connectedToMouse == false && debugGui.GetComponent<GUIText>().HitTest((Vector3)Input.mousePosition))
                    {
                        connectedToMouse = true;
                    }
                }

                if (connectedToMouse)
                {
                    float posX = Input.mousePosition.x / Screen.width;
                    float posY = Input.mousePosition.y / Screen.height;
                    debugGui.transform.position = new Vector3(posX, posY, 0F);
                }
            }
        }


        /// <summary>
        /// 清屏
        /// </summary>
        private void ClearScreen()
        {
            // 对象还没创建全的情况下不清
            if (m_guiList.Count < maxLogs)
                return;

            int count = 0;
            while (count < m_guiList.Count)
            {
                GUIText gt = m_guiList[count];
                gt.text = "";

                ++count;
            }
        }

        /// <summary>
        /// 精简多出来的消息
        /// </summary>
        private void Prune()
        {
            if (m_logList.Count <= maxLogs)
                return;

            int diff = m_logList.Count - maxLogs;

            m_logList.RemoveRange(0, diff);
            m_colorList.RemoveRange(0, diff);
        }

        /// <summary>
        /// 显示
        /// </summary>
        private void Display()
        {
            if (visible)
            {
                // 先尝试是否能精简
                this.Prune();

                // gui不够
                if (m_guiList.Count < maxLogs)
                    return;

                // 显示
                int guiCount = 0;
                while (guiCount < m_guiList.Count && guiCount < m_logList.Count)
                {
                    GUIText gt = m_guiList[guiCount];

                    // 文本
                    gt.text = m_logList[guiCount];

                    // 颜色
                    LogColor lc = m_colorList[guiCount];
                    switch (lc)
                    {
                        case LogColor.NORMAL:
                            {
                                gt.material.color = this.normalColor;
                            }
                            break;
                        case LogColor.WARNING:
                            {
                                gt.material.color = this.warningColor;
                            }
                            break;
                        case LogColor.ERROR:
                            {
                                gt.material.color = this.errorColor;
                            }
                            break;
                    }

                    // 循环
                    ++guiCount;
                }
            }
            else
            {
                // 清屏
                this.ClearScreen();
            }
        }

        // 加日志
        private void AddLog(string log, LogColor color = LogColor.NORMAL)
        {
            m_logList.Add(log);
            m_colorList.Add(color);
            this.Display();
        }
        // 清日志
        private void ClearLog()
        {
            m_logList.Clear();
            m_colorList.Clear();
            this.ClearScreen();
        }

        /// <summary>
        /// 日志
        /// </summary>
        /// <param name="log">日志</param>
        public static void Log(string log)
        {
            DebugConsole.GetInstance().AddLog(log, LogColor.NORMAL);
        }
        /// <summary>
        /// 警告
        /// </summary>
        /// <param name="log">日志</param>
        public static void LogWarning(string log)
        {
            DebugConsole.GetInstance().AddLog(log, LogColor.WARNING);
        }
        /// <summary>
        /// 错误
        /// </summary>
        /// <param name="log">日志</param>
        public static void LogError(string log)
        {
            DebugConsole.GetInstance().AddLog(log, LogColor.ERROR);
        }
        /// <summary>
        /// 清除
        /// </summary>
        public static void Clear()
        {
            DebugConsole.GetInstance().ClearLog();
        }
    }
}

测试类:

using UnityEngine;
using System.Collections;

using GameFramework;

public class Test : MonoBehaviour
{
    public bool screenDisplay = false;

    // Use this for initialization
    void Start()
    {
        DebugMgr.Log("开始了");
    }

    private int m_count = 0;

    void OnGUI()
    {
        if (GUI.Button(new Rect(500, 0, 100, 100), "加log"))
        {
            DebugMgr.screenDisplay = screenDisplay;

            string log = "count = " + m_count;
            DebugMgr.Log(log);
            DebugMgr.LogWarning(log);
            DebugMgr.LogError(log);

            ++m_count;
        }
    }
}

友情提示一下,你可能发现了,现在你左键点一下 Console 窗口下的日志,系统会给你跳转到 DebugMgr 类里,而不是真正打日志的地方,想要解决这个问题也很简单。你就把这2个类编译封装成一个单独的c#类库项目,生成dll后,再导入项目中就可以了,这样 unity 在追踪程序的堆栈调用时,跳转的位置就会指向你真正打日志的地方了,轻松又愉快~

作者:WPAPA 发表于2016/9/3 23:14:17 原文链接
阅读:26 评论:0 查看评论
Viewing all 5930 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>