.net下模拟不同身份登陆以获取不同权限
1
.net下模拟不同身份登陆以获取不同权限
2
3
作者:佚名 时间:
2004
-
04
-
16
09
:
14
出处:互连网 责编:chinaitpower
4
5
摘要:.net下模拟不同身份登陆以获取不同权限
6
7
8
不管是asp.net、web service还是window service,程序运行的时候只有本地计算机的部分权限,有时候需要更大的权限,比如读写某台服务器或域中的一台计算机上的文件等,这就需要更大的权限,比如域帐户权限。
9![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
10
通过获取不同身份的WindowsImpersonationContext对象,可以模拟不同用户登陆,请看我生成的NetworkSecurity类的
11
public
static
WindowsImpersonationContext ImpersonateUser(
string
strDomain,
12
string
strLogin,
13![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
14
string
strPwd,
15![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
16
LogonType logonType,
17![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
18
LogonProvider logonProvider);
19![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
20
附NetworkSecurity.cs源代码如下:
21![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
22![](https://i-blog.csdnimg.cn/blog_migrate/9c217eb12d6dd909c263960332b6c85a.gif)
/**/
/*
23
* Author : TongWei
24
* Date : 2005-1-25
25
* Rights : China Netwave Inc.@2005
26
*/
27![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
28
using
System;
29
using
System.Runtime.InteropServices;
30
using
System.Security.Principal;
31
using
System.Security.Permissions;
32![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
33
namespace
CNW.OMP.Common.Utility
34![](https://i-blog.csdnimg.cn/blog_migrate/9c217eb12d6dd909c263960332b6c85a.gif)
{
35
public enum LogonType : int
36![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
{
37![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
/**//// <summary>
38
/// This logon type is intended for users who will be interactively using the computer, such as a user
39
/// being logged on by a terminal server, remote shell, or similar process. This logon type has the
40
/// additional expense of caching logon information for disconnected operation, and is therefore
41
/// inappropriate for some client/server applications, such as a mail server.
42
/// </summary>
43
LOGON32_LOGON_INTERACTIVE = 2,
44![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
45![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
/**//// <summary>
46
/// This logon type is intended for high performance servers to authenticate clear text passwords.
47
/// The LogonUser function does not cache credentials for this logon type.
48
/// </summary>
49
LOGON32_LOGON_NETWORK = 3,
50![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
51![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
/**//// <summary>
52
/// This logon type is intended for batch servers, where processes may be executing on behalf of a user
53
/// without their direct intervention; or for higher performance servers that process many clear-text
54
/// authentication attempts at a time, such as mail or web servers. The LogonUser function does not cache
55
/// credentials for this logon type.
56
/// </summary>
57
LOGON32_LOGON_BATCH = 4,
58![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
59![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
/**//// <summary>
60
/// Indicates a service-type logon. The account provided must have the service privilege enabled.
61
/// </summary>
62
LOGON32_LOGON_SERVICE = 5,
63![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
64![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
/**//// <summary>
65
/// This logon type is intended for GINA DLLs logging on users who will be interactively using the computer.
66
/// This logon type allows a unique audit record to be generated that shows when the workstation was unlocked.
67
/// </summary>
68
LOGON32_LOGON_UNLOCK = 7,
69![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
70![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
/**//// <summary>
71
/// Windows XP/2000: This logon type preserves the name and password in the authentication packages,
72
/// allowing the server to make connections to other network servers while impersonating the client.
73
/// This allows a server to accept clear text credentials from a client, call LogonUser, verify that
74
/// the user can access the system across the network, and still communicate with other servers.
75
/// </summary>
76
LOGON32_LOGON_NETWORK_CLEARTEXT = 8,
77![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
78![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
/**//// <summary>
79
/// Windows XP/2000: This logon type allows the caller to clone its current token and specify new credentials
80
/// for outbound connections. The new logon session has the same local identity, but uses different credentials
81
/// for other network connections.
82
/// This logon type is supported only by the LOGON32_PROVIDER_WINNT50 logon provider.
83
/// </summary>
84
LOGON32_LOGON_NEW_CREDENTIALS = 9
85
};
86![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
87
public enum LogonProvider : int
88![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
{
89![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
/**//// <summary>
90
/// Use the standard logon provider for the system. The default security provider is NTLM.
91
/// Windows XP: The default provider is negotiate, unless you pass NULL for the domain name and
92
/// the user name is not in UPN format. In this case the default provider is NTLM.
93
/// </summary>
94
LOGON32_PROVIDER_DEFAULT = 0,
95![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
96![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
/**//// <summary>
97
/// Use the Windows NT 3.5 logon provider.
98
/// </summary>
99
LOGON32_PROVIDER_WINNT35 = 1,
100![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
101![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
/**//// <summary>
102
/// Use the NTLM logon provider.
103
/// </summary>
104
LOGON32_PROVIDER_WINNT40 = 2,
105![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
106![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
/**//// <summary>
107
/// Windows XP/2000: Use the negotiate logon provider.
108
/// </summary>
109
LOGON32_PROVIDER_WINNT50 = 3
110
};
111![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
112
class SecuUtil32
113![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
{
114
[DllImport("advapi32.dll", SetLastError=true)]
115
public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword,
116
int dwLogonType, int dwLogonProvider, ref IntPtr TokenHandle);
117![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
118
[DllImport("kernel32.dll", CharSet=CharSet.Auto)]
119
public extern static bool CloseHandle(IntPtr handle);
120![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
121
[DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]
122
public extern static bool DuplicateToken(IntPtr ExistingTokenHandle,
123
int SECURITY_IMPERSONATION_LEVEL, ref IntPtr DuplicateTokenHandle);
124
}
125![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
126
public class NetworkSecurity
127![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
{
128
public NetworkSecurity()
129![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
{
130
//
131
// TODO: Add constructor logic here
132
//
133
}
134![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
135![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
/**//// <summary>
136
/// The ImpersonateUser function attempts to log a user on to the local computer.
137
/// The local computer is the computer from which ImpersonateUser was called.
138
/// You cannot use ImpersonateUser to log on to a remote computer.
139
/// You specify the user with a user name and domain, and authenticate the user with a clear-text password.
140
/// If the function succeeds, you receive a handle to a token that represents the logged-on user.
141
/// You can then use this token handle to impersonate the specified user, or in most cases,
142
/// to create a process running in the context of the specified user.
143
/// </summary>
144
/// <param name="strDomain">
145
/// specifies the name of the domain or server whose account database contains the strLogin account.
146
/// </param>
147
/// <param name="strLogin">specifies the name of the user.</param>
148
/// <param name="strPwd">specifies the clear-text password for the user account specified by strLogin.</param>
149
/// <param name="logonType">Specifies the type of logon operation to perform.</param>
150
/// <param name="logonProvider">Specifies the logon provider.</param>
151
/// <example>
152
/// //Add System.Security.dll
153
/// //using System.Security.Principal;
154
///
155
/// string strDomain=ConfigurationSettings.AppSettings["mSALoginDomainName"];
156
/// string strUser=ConfigurationSettings.AppSettings["mSALoginDomainUser"];
157
/// string strPassword=ConfigurationSettings.AppSettings["mSALoginDomainPassword"];
158
///
159
/// WindowsImpersonationContext impContext = null;
160
/// try
161
/// {
162
/// impContext = NetworkSecurity.ImpersonateUser(strDomain,strUser,strPassword,
163
/// LogonType.LOGON32_LOGON_SERVICE,
164
/// LogonProvider.LOGON32_PROVIDER_DEFAULT);
165
/// }
166
/// catch
167
/// {
168
///
169
/// }
170
///
171
/// //work under this logined user
172
///
173
/// impContext.Undo();
174
/// </example>
175
/// <returns>
176
/// </returns>
177
public static WindowsImpersonationContext ImpersonateUser(string strDomain,
178
string strLogin,
179
string strPwd,
180
LogonType logonType,
181
LogonProvider logonProvider)
182![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
{
183
// Initialize tokens
184
IntPtr tokenHandle = new IntPtr(0);
185
IntPtr dupeTokenHandle = new IntPtr(0);
186
tokenHandle = IntPtr.Zero;
187
dupeTokenHandle = IntPtr.Zero;
188![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
189
// If domain name was blank, assume local machine
190
if (strDomain == "")
191
strDomain = System.Environment.MachineName;
192![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
193
try
194![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
{
195
const int SecurityImpersonation = 2;
196![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
197
// Call LogonUser to obtain a handle to an access token.
198
bool returnValue = SecuUtil32.LogonUser(
199
strLogin,
200
strDomain,
201
strPwd,
202
(int)logonType,
203
(int)logonProvider,
204
ref tokenHandle);
205![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
206
// Did impersonation fail?
207
if (false == returnValue)
208![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
{
209
int ret = Marshal.GetLastWin32Error();
210
// Throw the exception show the reason why LogonUser failed
211
string strErr = String.Format("LogonUser failed with error code : {0}", ret);
212
throw new ApplicationException(strErr, null);
213
}
214![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
215
// Get identity before impersonation
216
bool retVal = SecuUtil32.DuplicateToken(tokenHandle, SecurityImpersonation, ref dupeTokenHandle);
217![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
218
// Did DuplicateToken fail?
219
if (false == retVal)
220![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
{
221
// Close existing handle
222
SecuUtil32.CloseHandle(tokenHandle);
223
// Throw the exception show the reason why DuplicateToken failed
224
throw new ApplicationException("Failed to duplicate token", null);
225
}
226![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
227
// Create new identity using new primary token
228
// The token that is passed to the following constructor must
229
// be a primary token in order to use it for impersonation.
230
WindowsIdentity newId = new WindowsIdentity(dupeTokenHandle);
231
WindowsImpersonationContext impersonatedUser = newId.Impersonate();
232![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
233
return impersonatedUser;
234
}
235
catch (Exception ex)
236![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
{
237
throw new ApplicationException(ex.Message, ex);
238
}
239
finally
240![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
{
241
// Close handle
242
if (tokenHandle != IntPtr.Zero)
243
SecuUtil32.CloseHandle(tokenHandle);
244
if (dupeTokenHandle != IntPtr.Zero)
245
SecuUtil32.CloseHandle(dupeTokenHandle);
246
}
247
}
248
}
249
}
250
251
252
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
2
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
3
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
4
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
5
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
6
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
7
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
8
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
9
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
10
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
11
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
12
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
13
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
14
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
15
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
16
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
17
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
18
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
19
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
20
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
21
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
22
![](https://i-blog.csdnimg.cn/blog_migrate/9c217eb12d6dd909c263960332b6c85a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/78b493b6775b2a8f963c6a25590a4e8d.gif)
23
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
24
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
25
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
26
![](https://i-blog.csdnimg.cn/blog_migrate/936064393599ac8b0bca7778b2398a21.gif)
27
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
28
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
29
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
30
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
31
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
32
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
33
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
34
![](https://i-blog.csdnimg.cn/blog_migrate/9c217eb12d6dd909c263960332b6c85a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/78b493b6775b2a8f963c6a25590a4e8d.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
35
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
36
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
37
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
38
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
39
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
40
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
41
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
42
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
43
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
44
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
45
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
46
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
47
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
48
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
49
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
50
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
51
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
52
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
53
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
54
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
55
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
56
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
57
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
58
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
59
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
60
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
61
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
62
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
63
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
64
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
65
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
66
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
67
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
68
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
69
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
70
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
71
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
72
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
73
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
74
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
75
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
76
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
77
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
78
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
79
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
80
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
81
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
82
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
83
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
84
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
85
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
86
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
87
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
88
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
89
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
90
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
91
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
92
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
93
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
94
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
95
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
96
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
97
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
98
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
99
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
100
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
101
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
102
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
103
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
104
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
105
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
106
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
107
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
108
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
109
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
110
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
111
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
112
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
113
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
114
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
115
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
116
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
117
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
118
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
119
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
120
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
121
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
122
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
123
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
124
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
125
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
126
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
127
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
128
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
129
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
130
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
131
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
132
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
133
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
134
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
135
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
136
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
137
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
138
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
139
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
140
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
141
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
142
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
143
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
144
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
145
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
146
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
147
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
148
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
149
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
150
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
151
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
152
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
153
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
154
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
155
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
156
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
157
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
158
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
159
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
160
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
161
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
162
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
163
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
164
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
165
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
166
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
167
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
168
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
169
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
170
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
171
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
172
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
173
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
174
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
175
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
176
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
177
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
178
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
179
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
180
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
181
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
182
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
183
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
184
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
185
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
186
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
187
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
188
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
189
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
190
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
191
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
192
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
193
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
194
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
195
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
196
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
197
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
198
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
199
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
200
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
201
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
202
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
203
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
204
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
205
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
206
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
207
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
208
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
209
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
210
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
211
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
212
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
213
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
214
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
215
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
216
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
217
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
218
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
219
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
220
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
221
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
222
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
223
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
224
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
225
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
226
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
227
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
228
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
229
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
230
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
231
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
232
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
233
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
234
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
235
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
236
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
237
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
238
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
239
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
240
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
241
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
242
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
243
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
244
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
245
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
246
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
247
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
248
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
249
![](https://i-blog.csdnimg.cn/blog_migrate/936064393599ac8b0bca7778b2398a21.gif)
250
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
251
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
252
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9c217eb12d6dd909c263960332b6c85a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/78b493b6775b2a8f963c6a25590a4e8d.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/936064393599ac8b0bca7778b2398a21.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9c217eb12d6dd909c263960332b6c85a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/78b493b6775b2a8f963c6a25590a4e8d.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/176279efec9e89c995aaf2745d8c7be5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/40370315a25c375c11fa1551f4a28350.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/739af78e06ddee03323a198ec2b6b95b.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/936064393599ac8b0bca7778b2398a21.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9c217eb12d6dd909c263960332b6c85a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/78b493b6775b2a8f963c6a25590a4e8d.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa20e05f62f5d9bed248e65f83bc62d1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/936064393599ac8b0bca7778b2398a21.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ad67d229eb802c1d948e1810519f8917.gif)