Utility常用功能类 MD5 ClientIP JS弹窗消息
UTILITY
Utility
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
using Microsoft.Practices.EnterpriseLibrary.Logging;
5
using System.Security.Cryptography;
6
using System.Web;
7
using System.Collections;
8
using System.Text.RegularExpressions;
9
using Dart.PowerTCP.SecureMail;
10
using System.Net.Sockets;
11
using System.IO;
12
using System.Data.SqlClient;
13
using System.Data;
14
using System.Collections.Specialized;
15![](/Images/OutliningIndicators/None.gif)
16
namespace ChinaValue.CommonV2008
17
{
18
/// <summary>
19
/// 常用功能类
20
/// </summary>
21
public class Utility
22
{
23
/// <summary>
24
/// 检测非法Post字符
25
/// </summary>
26
/// <param name="content"></param>
27
/// <returns></returns>
28
public static Boolean ValidatePostContent(String content)
29
{
30
Regex regexBadString = new Regex(@"<\s*?(/form)|(form)|(iframe)|(frame)|(meta)|(script).+?>", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
31
return !regexBadString.Match(content).Success;
32
}
33![](/Images/OutliningIndicators/InBlock.gif)
34
/// <summary>
35
/// 写错误日志
36
/// </summary>
37
/// <param name="strInformation"></param>
38
/// <param name="strTitle"></param>
39
public static void LogInfo(String strTitle, String strInformation)
40
{
41
LogEntry logEntry = new LogEntry();
42
logEntry.Title = strTitle;
43
logEntry.Message = strInformation;
44
logEntry.Categories.Add("General");
45
logEntry.TimeStamp = DateTime.Now;
46
Logger.Write(logEntry);
47
}
48![](/Images/OutliningIndicators/InBlock.gif)
49
/// <summary>
50
/// 写指定路径的日志
51
/// </summary>
52
/// <param name="logUrl">日志路径,物理地址</param>
53
/// <param name="title"></param>
54
/// <param name="information"></param>
55
public static void LogInfo(String logUrl, String title, String information)
56
{
57
using (FileStream fs = new FileStream(logUrl, FileMode.Append, FileAccess.Write))
58
{
59
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);
60
sw.WriteLine(information);
61
sw.Flush();
62
sw.Close();
63
fs.Close();
64
}
65
}
66![](/Images/OutliningIndicators/InBlock.gif)
67
/// <summary>
68
/// MD5加密
69
/// </summary>
70
/// <param name="toCryString"></param>
71
/// <returns></returns>
72
public static String MD5(String toCryString)
73
{
74
MD5CryptoServiceProvider hashmd5;
75
hashmd5 = new MD5CryptoServiceProvider();
76
return BitConverter.ToString(hashmd5.ComputeHash(Encoding.Default.GetBytes(toCryString))).Replace("-", "").ToLower();
77
}
78![](/Images/OutliningIndicators/InBlock.gif)
79
/// <summary>
80
/// 获取客户端的IP地址
81
/// </summary>
82
/// <returns></returns>
83
public static String ClientIP()
84
{
85
//判断是否通过代理服务器上网
86
if (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
87
{
88
return HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString(); //真实的IP
89
}
90
else
91
{
92
return HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();
93
}
94
}
95![](/Images/OutliningIndicators/InBlock.gif)
96
/// <summary>
97
/// 在客户端弹出一个消息框(Page)
98
/// </summary>
99
/// <param name="strMsg">待显示的信息</param>
100
public static void ShowClientMessegeBox(System.Web.UI.Page pageFor, String strMessage)
101
{
102
System.Text.StringBuilder strBuilder = new System.Text.StringBuilder("<script>alert(\"");
103
strBuilder.Append(strMessage.Replace("\r\n", "\\r\\n"));
104
strBuilder.Append("\")</script>");
105
pageFor.ClientScript.RegisterStartupScript(pageFor.GetType(), "alertBox", strBuilder.ToString());
106
}
107![](/Images/OutliningIndicators/InBlock.gif)
108
/// <summary>
109
/// 在客户端弹出一个消息框(UserControl)
110
/// </summary>
111
/// <param name="strMsg">待显示的信息</param>
112
public static void ShowClientMessegeBox(System.Web.UI.UserControl ucFor, String strMessage)
113
{
114
System.Text.StringBuilder strBuilder = new System.Text.StringBuilder("<script>alert(\"");
115
strBuilder.Append(strMessage.Replace("\r\n", "\\r\\n"));
116
strBuilder.Append("\")</script>");
117
ucFor.Page.ClientScript.RegisterStartupScript(ucFor.GetType(), "alertBox", strBuilder.ToString());
118
}
119![](/Images/OutliningIndicators/InBlock.gif)
120
/// <summary>
121
/// 在客户端跳转页面
122
/// </summary>
123
/// <param name="Url"></param>
124
public static void RedirectAtClient(String redirectUrl)
125
{
126
HttpContext.Current.Response.Write("<script language=\"javascript\" type=\"text/javascript\">");
127
HttpContext.Current.Response.Write("location.href='" + redirectUrl + "';");
128
HttpContext.Current.Response.Write("</script>");
129
HttpContext.Current.Response.End();
130
}
131![](/Images/OutliningIndicators/InBlock.gif)
132
/// <summary>
133
/// 在客户端弹出消息框并跳转
134
/// </summary>
135
/// <param name="pageFor"></param>
136
/// <param name="message">待显示的信息</param>
137
/// <param name="redirectUrl">待跳转的地址</param>
138
public static void ShowClientMessegeBoxAndRedirect(String message, String redirectUrl)
139
{
140
HttpContext.Current.Response.Write("<script language=\"javascript\" type=\"text/javascript\">");
141
HttpContext.Current.Response.Write("alert('" + message + "');");
142
HttpContext.Current.Response.Write("location.href='" + redirectUrl + "';");
143
HttpContext.Current.Response.Write("</script>");
144
HttpContext.Current.Response.End();
145
}
146![](/Images/OutliningIndicators/InBlock.gif)
147
/// <summary>
148
/// 在客户端弹出消息框并关闭窗口
149
/// </summary>
150
/// <param name="message">待显示的信息</param>
151
public static void ShowClientMessegeBoxAndClose(String message)
152
{
153
HttpContext.Current.Response.Write("<script language=\"javascript\" type=\"text/javascript\">");
154
HttpContext.Current.Response.Write("alert('" + message + "');");
155
HttpContext.Current.Response.Write("window.close();");
156
HttpContext.Current.Response.Write("</script>");
157
HttpContext.Current.Response.End();
158
}
159![](/Images/OutliningIndicators/InBlock.gif)
160![](/Images/OutliningIndicators/InBlock.gif)
161
/// <summary>
162
/// 在客户端弹出消息框并父窗口跳转
163
/// </summary>
164
/// <param name="message">待显示的信息</param>
165
public static void ShowClientMessegeBoxAndRedirectAtParent(String message, String redirectUrl)
166
{
167
HttpContext.Current.Response.Write("<script language=\"javascript\" type=\"text/javascript\">");
168
HttpContext.Current.Response.Write("alert('" + message + "');");
169
HttpContext.Current.Response.Write("window.parent.location.href='" + redirectUrl + "';");
170
HttpContext.Current.Response.Write("</script>");
171
HttpContext.Current.Response.End();
172
}
173![](/Images/OutliningIndicators/InBlock.gif)
174
/// <summary>
175
/// 在客户端关闭新开窗口并刷新Opener
176
/// </summary>
177
/// <param name="pageFor"></param>
178
/// <param name="message">待显示的信息</param>
179
/// <param name="redirectUrl">待跳转的地址</param>
180
public static void CloseAndRefreshOpener()
181
{
182
HttpContext.Current.Response.Write("<script language=\"javascript\" type=\"text/javascript\">");
183
HttpContext.Current.Response.Write("window.opener.location.href=window.opener.location.href;");
184
HttpContext.Current.Response.Write("window.focus();");
185
HttpContext.Current.Response.Write("window.opener=null;");
186
HttpContext.Current.Response.Write("window.close();");
187
HttpContext.Current.Response.Write("</script>");
188
HttpContext.Current.Response.End();
189
}
190![](/Images/OutliningIndicators/InBlock.gif)
191
/// <summary>
192
/// 在客户端刷新Opener
193
/// </summary>
194
/// <param name="pageFor"></param>
195
/// <param name="message">待显示的信息</param>
196
/// <param name="redirectUrl">待跳转的地址</param>
197
public static void RefreshOpener()
198
{
199
HttpContext.Current.Response.Write("<script language=\"javascript\" type=\"text/javascript\">");
200
HttpContext.Current.Response.Write("window.opener.location.href=window.opener.location.href;");
201
HttpContext.Current.Response.Write("window.focus();");
202
HttpContext.Current.Response.Write("</script>");
203
}
204![](/Images/OutliningIndicators/InBlock.gif)
205
/// <summary>
206
/// 替换瘦文本框中的空格、大于号、小于号以及软回车,自动转换Email、HTTP地址
207
/// </summary>
208
/// <param name="content"></param>
209
/// <returns></returns>
210
public static String EncodeTextBox(String content)
211
{
212
StringBuilder sbContent = new StringBuilder(content);
213![](/Images/OutliningIndicators/InBlock.gif)
214
sbContent = sbContent.Replace("<", "<");//处理小于号
215
sbContent = sbContent.Replace(">", ">");//处理大于号
216
sbContent = sbContent.Replace("\"", """);//处理双引号
217![](/Images/OutliningIndicators/InBlock.gif)
218
//替换URL
219
Regex regUrl = new Regex(@"(http:\/\/[\w.]+(\/?\w+)+[.a-zA-Z0-9\?=]+)", RegexOptions.IgnoreCase | RegexOptions.Compiled);
220
sbContent = new StringBuilder(regUrl.Replace(sbContent.ToString(), "<a href=\"$0\" target=\"_blank\">$0</a>"));
221![](/Images/OutliningIndicators/InBlock.gif)
222
//替换Email
223
Regex regEmail = new Regex(@"([a-zA-Z_0-9.-]+\@[a-zA-Z_0-9.-]+\.\w+)", RegexOptions.IgnoreCase | RegexOptions.Compiled);
224
sbContent = new StringBuilder(regEmail.Replace(sbContent.ToString(), "<a href=\"mailto:$0\">$0</a>"));
225![](/Images/OutliningIndicators/InBlock.gif)
226
sbContent = sbContent.Replace("\n", "<br />");//处理换行
227
sbContent = sbContent.Replace(" ", " ");//处理空格
228![](/Images/OutliningIndicators/InBlock.gif)
229
return sbContent.ToString();
230
}
231![](/Images/OutliningIndicators/InBlock.gif)
232
/// <summary>
233
/// 与EncodeTextBox方法作用相反
234
/// </summary>
235
/// <param name="content"></param>
236
/// <returns></returns>
237
public static String DecodeTextBox(String content)
238
{
239
StringBuilder sbContent = new StringBuilder(Utility.DropHtmlTags(content)); //去掉html标签
240![](/Images/OutliningIndicators/InBlock.gif)
241
sbContent = sbContent.Replace(""", "\"");//处理双引号
242
sbContent = sbContent.Replace(" ", " ");//处理空格
243
sbContent = sbContent.Replace("<", "<");//处理小于号
244
sbContent = sbContent.Replace(">", ">");//处理大于号
245
sbContent = sbContent.Replace("<br />", "\n");//处理换行
246![](/Images/OutliningIndicators/InBlock.gif)
247
return sbContent.ToString();
248
}
249![](/Images/OutliningIndicators/InBlock.gif)
250
/// <summary>
251
/// 对字符串进行Base64编码
252
/// </summary>
253
/// <param name="content"></param>
254
/// <returns></returns>
255
public static String EncodeBase64(String content)
256
{
257
String encode = "";
258
Byte[] bytes = Encoding.Default.GetBytes(content);
259![](/Images/OutliningIndicators/InBlock.gif)
260
try
261
{
262
encode = Convert.ToBase64String(bytes);
263
}
264
catch
265
{
266
encode = content;
267
}
268![](/Images/OutliningIndicators/InBlock.gif)
269
return encode;
270
}
271![](/Images/OutliningIndicators/InBlock.gif)
272
/// <summary>
273
/// 对字符串进行Base64解码
274
/// </summary>
275
/// <param name="content"></param>
276
/// <returns></returns>
277
public static String DecodeBase64(String content)
278
{
279
String decode = "";
280
Byte[] bytes = Convert.FromBase64String(content);
281![](/Images/OutliningIndicators/InBlock.gif)
282
try
283
{
284
decode = Encoding.Default.GetString(bytes);
285
}
286
catch
287
{
288
decode = content;
289
}
290![](/Images/OutliningIndicators/InBlock.gif)
291
return decode;
292
}
293![](/Images/OutliningIndicators/InBlock.gif)
294
/// <summary>
295
/// DES加密
296
/// </summary>
297
/// <param name="pToEncrypt">要加密的字符串</param>
298
/// <param name="sKey">密钥</param>
299
/// <returns></returns>
300
public static String EncodeDES(String pToEncrypt, String sKey)
301
{
302
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
303![](/Images/OutliningIndicators/InBlock.gif)
304
//把字符串放到byte数组中
305
Byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
306![](/Images/OutliningIndicators/InBlock.gif)
307
//建立加密对象的密钥和偏移量
308
//原文使用ASCIIEncoding.ASCII方法的GetBytes方法
309
//使得输入密码必须输入英文文本
310
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
311
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
312
MemoryStream ms = new MemoryStream();
313
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
314![](/Images/OutliningIndicators/InBlock.gif)
315
//Write the byte array into the crypto stream
316
//(It will end up in the memory stream)
317
cs.Write(inputByteArray, 0, inputByteArray.Length);
318
cs.FlushFinalBlock();
319![](/Images/OutliningIndicators/InBlock.gif)
320
//Get the data back from the memory stream, and into a string
321
StringBuilder ret = new StringBuilder();
322
foreach (Byte b in ms.ToArray())
323
{
324
//Format as hex
325
ret.AppendFormat("{0:X2}", b);
326
}
327![](/Images/OutliningIndicators/InBlock.gif)
328
ret.ToString();
329![](/Images/OutliningIndicators/InBlock.gif)
330
return ret.ToString();
331
}
332![](/Images/OutliningIndicators/InBlock.gif)
333
/// <summary>
334
/// DES解密
335
/// </summary>
336
/// <param name="pToDecrypt">要解密的字符串</param>
337
/// <param name="sKey">密钥</param>
338
/// <returns></returns>
339
public static String DecodeDES(String pToDecrypt, String sKey)
340
{
341
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
342![](/Images/OutliningIndicators/InBlock.gif)
343
Byte[] inputByteArray = new Byte[pToDecrypt.Length / 2];
344![](/Images/OutliningIndicators/InBlock.gif)
345
for (Int32 x = 0; x < pToDecrypt.Length / 2; x++)
346
{
347
Int32 i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
348
inputByteArray[x] = (Byte)i;
349
}
350![](/Images/OutliningIndicators/InBlock.gif)
351
//建立加密对象的密钥和偏移量,此值重要,不能修改
352
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
353
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
354
MemoryStream ms = new MemoryStream();
355
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
356![](/Images/OutliningIndicators/InBlock.gif)
357
//Flush the data through the crypto stream into the memory stream
358
cs.Write(inputByteArray, 0, inputByteArray.Length);
359
cs.FlushFinalBlock();
360![](/Images/OutliningIndicators/InBlock.gif)
361
//Get the decrypted data back from the memory stream
362
return Encoding.Default.GetString(ms.ToArray());
363
}
364![](/Images/OutliningIndicators/InBlock.gif)
365
/// <summary>
366
/// DES与Base64组合加密
367
/// </summary>
368
/// <param name="data"></param>
369
/// <param name="key"></param>
370
/// <returns></returns>
371
public static String EncodeDESAndBase64(String data, String key)
372
{
373
Byte[] byKey = Encoding.Default.GetBytes(key);
374
Byte[] byIV = Encoding.Default.GetBytes(key);
375![](/Images/OutliningIndicators/InBlock.gif)
376
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
377
Int32 i = cryptoProvider.KeySize;
378
MemoryStream ms = new MemoryStream();
379
CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write);
380![](/Images/OutliningIndicators/InBlock.gif)
381
StreamWriter sw = new StreamWriter(cst);
382
cst.Write(System.Text.Encoding.Default.GetBytes(data), 0, System.Text.Encoding.Default.GetByteCount(data));
383
sw.Flush();
384
cst.FlushFinalBlock();
385
sw.Flush();
386![](/Images/OutliningIndicators/InBlock.gif)
387
return Convert.ToBase64String(ms.GetBuffer(), 0, (Int32)ms.Length);
388
}
389![](/Images/OutliningIndicators/InBlock.gif)
390
/// <summary>
391
/// DES与Base64组合解密
392
/// </summary>
393
/// <param name="data"></param>
394
/// <param name="key"></param>
395
/// <returns></returns>
396
public static String DecodeDESAndBase64(String data, String key)
397
{
398
//把密钥转成二进制数组
399
Byte[] byKey = Encoding.Default.GetBytes(key);
400
Byte[] byIV = Encoding.Default.GetBytes(key);
401![](/Images/OutliningIndicators/InBlock.gif)
402
Byte[] byEnc;
403![](/Images/OutliningIndicators/InBlock.gif)
404
try
405
{
406
//base64解码
407
byEnc = Convert.FromBase64String(data);
408
}
409
catch
410
{
411
return null;
412
}
413![](/Images/OutliningIndicators/InBlock.gif)
414
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
415
MemoryStream ms = new MemoryStream(byEnc);
416
CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read);
417
StreamReader sr = new StreamReader(cst);
418
Byte[] tmp = new Byte[ms.Length];
419
cst.Read(tmp, 0, tmp.Length);
420
String result = System.Text.Encoding.Default.GetString(tmp);
421![](/Images/OutliningIndicators/InBlock.gif)
422
return result;
423
}
424![](/Images/OutliningIndicators/InBlock.gif)
425
/// <summary>
426
/// 数组转换为ArrayList
427
/// </summary>
428
/// <param name="array">待转换的数组</param>
429
/// <returns></returns>
430
public static ArrayList ArrayToArrayList(String[] array)
431
{
432
ArrayList arrayList = new ArrayList();
433![](/Images/OutliningIndicators/InBlock.gif)
434
for (Int32 i = 0; i < array.Length; i++)
435
{
436
arrayList.Add(array[i]);
437
}
438![](/Images/OutliningIndicators/InBlock.gif)
439
return arrayList;
440
}
441![](/Images/OutliningIndicators/InBlock.gif)
442
/// <summary>
443
/// 数组转换为ArrayList
444
/// </summary>
445
/// <param name="array">待转换的数组</param>
446
/// <returns></returns>
447
public static ArrayList ArrayToArrayList(Char[] array)
448
{
449
ArrayList arrayList = new ArrayList();
450![](/Images/OutliningIndicators/InBlock.gif)
451
for (Int32 i = 0; i < array.Length; i++)
452
{
453
arrayList.Add(array[i]);
454
}
455![](/Images/OutliningIndicators/InBlock.gif)
456
return arrayList;
457
}
458![](/Images/OutliningIndicators/InBlock.gif)
459
/// <summary>
460
/// 截断字符串,截断结果的长度将不会超过制定的最大长度
461
/// </summary>
462
/// <param name="strContent"></param>
463
/// <param name="intMaxLength"></param>
464
/// <returns></returns>
465
public static String CompressString(String strContent, Int32 intMaxLength)
466
{
467
return CompressString(strContent, intMaxLength, true);
468
}
469![](/Images/OutliningIndicators/InBlock.gif)
470
/// <summary>
471
/// 截断字符串,截断结果的长度将不会超过制定的最大长度,并且可以指定是否添加省略号
472
/// </summary>
473
/// <param name="strContent"></param>
474
/// <param name="intMaxLength"></param>
475
/// <param name="appendSuffix"></param>
476
/// <returns></returns>
477
public static String CompressString(String strContent, Int32 intMaxLength, Boolean appendSuffix)
478
{
479
if (String.IsNullOrEmpty(strContent))
480
{
481
return String.Empty;
482
}
483
else
484
{
485
int intUnicodeLength = 0;
486
int intCharCount = 0;
487
for (Int32 i = 0; i < strContent.Length && intUnicodeLength < intMaxLength; i++)
488
{
489
if (strContent[i] > 255)
490
intUnicodeLength += 2;
491
else
492
intUnicodeLength++;
493![](/Images/OutliningIndicators/InBlock.gif)
494
intCharCount++;
495
}
496![](/Images/OutliningIndicators/InBlock.gif)
497
if (intUnicodeLength >= intMaxLength)
498
{
499
if (appendSuffix)
500
{
501
return strContent.Substring(0, intCharCount) + "…";
502
}
503
else
504
{
505
return strContent.Substring(0, intCharCount);
506
}
507
}
508
else
509
{
510
return strContent;
511
}
512
}
513
}
514![](/Images/OutliningIndicators/InBlock.gif)
515
/// <summary>
516
/// 去掉字符串中的所有空格
517
/// </summary>
518
/// <param name="HtmlText"></param>
519
/// <returns></returns>
520
public static String DropBlanks(string HtmlText)
521
{
522
if (!String.IsNullOrEmpty(HtmlText))
523
{
524
System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"[\s| ]", System.Text.RegularExpressions.RegexOptions.Singleline | System.Text.RegularExpressions.RegexOptions.Compiled);
525
return reg.Replace(HtmlText, string.Empty).Replace(" ", " ");
526
}
527
else
528
{
529
return String.Empty;
530
}
531
}
532![](/Images/OutliningIndicators/InBlock.gif)
533
/// <summary>
534
/// 去除Html"标签"
535
/// </summary>
536
/// <param name="HtmlText"></param>
537
/// <returns></returns>
538
public static String DropHtmlTags(string HtmlText)
539
{
540
if (string.IsNullOrEmpty(HtmlText))
541
{
542
return String.Empty;
543
}
544
else
545
{
546
System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"<.*?>", System.Text.RegularExpressions.RegexOptions.Singleline | System.Text.RegularExpressions.RegexOptions.Compiled);
547
return reg.Replace(HtmlText, string.Empty);
548
}
549
}
550![](/Images/OutliningIndicators/InBlock.gif)
551
/// <summary>
552
/// 发送邮件(账户友好名称为:“价值中国网”)
553
/// </summary>
554
/// <param name="userID">邮件发送目的用户ID</param>
555
/// <param name="subject">邮件主题</param>
556
/// <param name="body">邮件内容</param>
557
/// <returns></returns>
558
public static Boolean SendMail(Int32 userID, String subject, String body)
559
{
560
SqlParameter[] para = new SqlParameter[1];
561
para[0] = new SqlParameter("@ID", SqlDbType.Int, 4);
562
para[0].Value = userID;
563![](/Images/OutliningIndicators/InBlock.gif)
564
String sqlStr = "SELECT Email FROM huiyuan WHERE [ID] = @ID";
565![](/Images/OutliningIndicators/InBlock.gif)
566
Object objEmail = SqlHelper.ExecuteScalar(WebConfig.ConnStrWWW, CommandType.Text, sqlStr, para);
567![](/Images/OutliningIndicators/InBlock.gif)
568
if (objEmail != null)
569
{
570
return SendMail("价值中国网", objEmail.ToString(), subject, body);
571
}
572![](/Images/OutliningIndicators/InBlock.gif)
573
return false;
574
}
575![](/Images/OutliningIndicators/InBlock.gif)
576
/// <summary>
577
/// 发送邮件(账户友好名称为:“价值中国网”)
578
/// </summary>
579
/// <param name="toEmail">邮件发送目的Email</param>
580
/// <param name="subject">邮件主题</param>
581
/// <param name="body">邮件内容</param>
582
/// <returns></returns>
583
public static Boolean SendMail(String toEmail, String subject, String body)
584
{
585
return SendMail("价值中国网", toEmail, subject, body);
586
}
587![](/Images/OutliningIndicators/InBlock.gif)
588
/// <summary>
589
/// 发送邮件
590
/// </summary>
591
/// <param name="fromFriendlyName">收件人看到的友好名称</param>
592
/// <param name="toEmail">邮件发送目的Email</param>
593
/// <param name="subject">邮件主题</param>
594
/// <param name="body">邮件内容</param>
595
/// <returns></returns>
596
public static Boolean SendMail(String fromFriendlyName, String toEmail, String subject, String body)
597
{
598
return SendMail(fromFriendlyName, WebConfig.SMTPMailAccount, toEmail, subject, body);
599
}
600![](/Images/OutliningIndicators/InBlock.gif)
601
/// <summary>
602
/// 发送邮件
603
/// </summary>
604
/// <param name="fromFriendlyName">收件人看到的友好名称</param>
605
/// <param name="fromFriendlyMail">收件人看到的友好Email</param>
606
/// <param name="toEmail">邮件发送目的Email</param>
607
/// <param name="subject">邮件主题</param>
608
/// <param name="body">邮件内容</param>
609
/// <returns></returns>
610
public static Boolean SendMail(String fromFriendlyName, String fromFriendlyMail, String toEmail, String subject, String body)
611
{
612
Boolean sendResult = false;
613![](/Images/OutliningIndicators/InBlock.gif)
614
String fromTrueUser = WebConfig.SMTPMailAccount.Substring(0, WebConfig.SMTPMailAccount.IndexOf('@'));
615
String fromTrueDomain = WebConfig.SMTPMailAccount.Substring(WebConfig.SMTPMailAccount.IndexOf('@') + 1, WebConfig.SMTPMailAccount.Length - fromTrueUser.Length - 1);
616![](/Images/OutliningIndicators/InBlock.gif)
617
String fromUser = fromFriendlyMail.Substring(0, fromFriendlyMail.IndexOf('@'));
618
String fromDomain = fromFriendlyMail.Substring(fromFriendlyMail.IndexOf('@') + 1, fromFriendlyMail.Length - fromUser.Length - 1);
619![](/Images/OutliningIndicators/InBlock.gif)
620
Smtp smtpServer = new Smtp();
621
smtpServer.UseAuthentication = true;
622
smtpServer.Server = WebConfig.SMTPServerAddress;
623
smtpServer.Username = WebConfig.SMTPUserName;
624
smtpServer.Password = WebConfig.SMTPPassword;
625
smtpServer.MailFrom = new MailAddress(fromFriendlyName, fromTrueUser, fromTrueDomain);
626![](/Images/OutliningIndicators/InBlock.gif)
627
StringBuilder sbMailBody = new StringBuilder();
628
sbMailBody.Append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\" /><body>");
629
sbMailBody.Append(body);
630
sbMailBody.Append("</body></html>");
631![](/Images/OutliningIndicators/InBlock.gif)
632
MessageStream msgStream = new MessageStream();
633
msgStream.Type = "text/html";
634
msgStream.From.Domain = fromDomain;
635
msgStream.From.User = fromUser;
636
msgStream.From.Friendly = fromFriendlyName;
637
msgStream.To.Add(new MailAddress(toEmail));
638![](/Images/OutliningIndicators/InBlock.gif)
639
msgStream.Charset = "gb2312";
640
//以下各种时间格式都会造成用户收到的邮件时间不准,暂时没有好的解决办法
641
//msgStream.Date = DateTime.Now.ToString("r") + " +0800";
642
//msgStream.Date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
643
//msgStream.Date = DateTime.Now.ToString("g");
644
//msgStream.Date = DateTime.Now.ToString();
645
msgStream.Mailer = "www.chinavalue.net";
646![](/Images/OutliningIndicators/InBlock.gif)
647
msgStream.Subject = subject;
648
msgStream.Text = sbMailBody.ToString();
649![](/Images/OutliningIndicators/InBlock.gif)
650
try
651
{
652
smtpServer.Send(msgStream);
653
smtpServer.Close();
654![](/Images/OutliningIndicators/InBlock.gif)
655
sendResult = true;
656
}
657
catch (ProtocolException exProtocol)
658
{
659
//TODO: Log exception
660
Utility.LogInfo("ChinaValue.Info.Common.SendMail Error", exProtocol.ToString());
661
}
662
catch (SocketException exSocket)
663
{
664
//TODO: Log exception
665
Utility.LogInfo("ChinaValue.Info.Common.SendMail Error", exSocket.ToString());
666
}
667
catch (IOException exIO)
668
{
669
//TODO: Log IOException
670
Utility.LogInfo("ChinaValue.Info.Common.SendMail Error", exIO.ToString());
671
}
672
catch (ArgumentException exArg)
673
{
674
//TODO: Log Argument Exception
675
Utility.LogInfo("ChinaValue.Info.Common.SendMail Error", exArg.ToString());
676
}
677![](/Images/OutliningIndicators/InBlock.gif)
678
return sendResult;
679
}
680![](/Images/OutliningIndicators/InBlock.gif)
681
/// <summary>
682
/// 发送站内信息
683
/// </summary>
684
/// <param name="intFromUserId">发送用户的ID</param>
685
/// <param name="intToUserId">接收用户的ID</param>
686
/// <param name="msgSubject">消息标题</param>
687
/// <param name="msgBody">消息内容</param>
688
/// <returns></returns>
689
public static Boolean SendMessage(Int32 fromUserID, Int32 toUserID, String msgSubject, String msgBody)
690
{
691
return SendMessage(fromUserID, toUserID, msgSubject, msgBody, String.Empty);
692
}
693![](/Images/OutliningIndicators/InBlock.gif)
694
/// <summary>
695
/// 发送系统消息
696
/// </summary>
697
/// <param name="toUserID">接收用户的ID</param>
698
/// <param name="msgSubject">消息标题</param>
699
/// <param name="msgBody">消息内容</param>
700
/// <returns></returns>
701
public static Boolean SendMessage(Int32 toUserID, String msgSubject, String msgBody)
702
{
703
return SendMessage(0, toUserID, msgSubject, msgBody, "价值中国");
704
}
705![](/Images/OutliningIndicators/InBlock.gif)
706
/// <summary>
707
/// 发送站内信息
708
/// </summary>
709
/// <param name="fromUserID">发送用户的ID</param>
710
/// <param name="toUserID">接收用户的ID</param>
711
/// <param name="msgSubject">消息标题</param>
712
/// <param name="msgBody">消息内容</param>
713
/// <param name="systemUserName">系统消息的发送者姓名</param>
714
/// <returns></returns>
715
public static Boolean SendMessage(Int32 fromUserID, Int32 toUserID, String msgSubject, String msgBody, String systemUserName)
716
{
717
SqlParameter[] para = new SqlParameter[5];
718
para[0] = new SqlParameter("@title", SqlDbType.NText);
719
para[0].Value = msgSubject;
720
para[1] = new SqlParameter("@content", SqlDbType.NText);
721
para[1].Value = msgBody;
722
para[2] = new SqlParameter("@toUserID", SqlDbType.Int, 4);
723
para[2].Value = toUserID;
724
para[3] = new SqlParameter("@fromUserID", SqlDbType.Int, 4);
725
para[3].Value = fromUserID;
726
para[4] = new SqlParameter("@systemUserName", SqlDbType.NVarChar, 20);
727
para[4].Value = systemUserName;
728![](/Images/OutliningIndicators/InBlock.gif)
729
if (SqlHelper.ExecuteNonQuery(WebConfig.DBConnectionString, CommandType.StoredProcedure, "pr_Message_Send", para) > 0)
730
{
731
return true;
732
}
733![](/Images/OutliningIndicators/InBlock.gif)
734
return false;
735
}
736![](/Images/OutliningIndicators/InBlock.gif)
737
/// <summary>
738
/// 发送站内消息 + Email
739
/// </summary>
740
/// <param name="toUserID">收件人ID</param>
741
/// <param name="subject">消息主题</param>
742
/// <param name="body">消息内容</param>
743
/// <returns></returns>
744
public static Boolean SendMailAndMessage(Int32 toUserID, String subject, String body)
745
{
746
return SendMail(toUserID, subject, body) & SendMessage(toUserID, subject, body);
747
}
748![](/Images/OutliningIndicators/InBlock.gif)
749
/// <summary>
750
/// 清除Word冗余格式
751
/// </summary>
752
/// <param name="str"></param>
753
/// <returns></returns>
754
public static string CleanWordStyle(String str)
755
{
756
StringCollection sc = new StringCollection();
757![](/Images/OutliningIndicators/InBlock.gif)
758
// get rid of unnecessary tag spans (comments and title)
759
sc.Add(@"<!--(\w|\W)+?-->");
760
sc.Add(@"<title>(\w|\W)+?</title>");
761![](/Images/OutliningIndicators/InBlock.gif)
762
// Get rid of classes and styles
763
sc.Add(@"\s?class=\w+");
764
sc.Add(@"\s+style='[^']+'");
765![](/Images/OutliningIndicators/InBlock.gif)
766
// Get rid of unnecessary tags
767
sc.Add(
768
@"<(meta|link|/?o:|/?style|/?st\d|/?head|/?html|body|/?body|/?span|!\[)[^>]*?>");
769![](/Images/OutliningIndicators/InBlock.gif)
770
// Get rid of empty paragraph tags
771
sc.Add(@"(<[^>]+>)+ (</\w+>)+");
772![](/Images/OutliningIndicators/InBlock.gif)
773
// remove bizarre v: element attached to <img> tag
774
sc.Add(@"\s+v:\w+=""[^""]+""");
775![](/Images/OutliningIndicators/InBlock.gif)
776
// remove extra lines
777
sc.Add(@"(\n\r){2,}");
778![](/Images/OutliningIndicators/InBlock.gif)
779
// remove font tags
780
sc.Add(@"</?font.*?>");
781![](/Images/OutliningIndicators/InBlock.gif)
782
// remove font tags
783
sc.Add(@"</?b\W+.*?>");
784![](/Images/OutliningIndicators/InBlock.gif)
785
// remove font tags
786
sc.Add(@"<\?xml.*?>");
787![](/Images/OutliningIndicators/InBlock.gif)
788
foreach (String s in sc)
789
{
790
str = Regex.Replace(str, s, "", RegexOptions.IgnoreCase | RegexOptions.Multiline);
791
}
792![](/Images/OutliningIndicators/InBlock.gif)
793
String pattern = @"<p.*?>";
794
Regex reg = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Multiline);
795
str = reg.Replace(str, "<p>");
796![](/Images/OutliningIndicators/InBlock.gif)
797
pattern = @"<div.*?>";
798
reg = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Multiline);
799
str = reg.Replace(str, "<div>");
800![](/Images/OutliningIndicators/InBlock.gif)
801
return str;
802
}
803![](/Images/OutliningIndicators/InBlock.gif)
804
/// <summary>
805
/// 检测操作是否已进行,用于限制规定时间内只能进行一次的操作
806
/// </summary>
807
/// <param name="key">用户监测的Cookie、Session键</param>
808
/// <param name="expireTime">下次操作的间隔时间(分钟)</param>
809
/// <param name="userSession">是否启用Session(默认只用Cookie)</param>
810
/// <returns></returns>
811
public static Boolean OperationDone(String key, Int32 expireTime, Boolean userSession)
812
{
813
if (!String.IsNullOrEmpty(CVCookie.Read(key))) //Cookie最省服务器资源,Cookie存在的情况下,直接返回-1,不再继续
814
{
815
return true;
816
}
817![](/Images/OutliningIndicators/InBlock.gif)
818
if (userSession)
819
{
820
if (HttpContext.Current.Session[key] != null)
821
{
822
if (!String.IsNullOrEmpty(HttpContext.Current.Session[key].ToString()))
823
{
824
return true;
825
}
826
}
827
}
828![](/Images/OutliningIndicators/InBlock.gif)
829
//Cookie、Session的默认值
830
String defaultValue = "1";
831![](/Images/OutliningIndicators/InBlock.gif)
832
CVCookie.Set(key, defaultValue, expireTime * 60); //expireTime秒内只能操作一次
833![](/Images/OutliningIndicators/InBlock.gif)
834
if (userSession)
835
{
836
HttpContext.Current.Session.Timeout = expireTime;
837
HttpContext.Current.Session[key] = defaultValue; //用Session可以避免Cookie被删除
838
}
839![](/Images/OutliningIndicators/InBlock.gif)
840
return false;
841
}
842![](/Images/OutliningIndicators/InBlock.gif)
843
/// <summary>
844
/// 检测操作是否已进行,用于限制规定时间内只能进行一次的操作(Cookie、Session并用)
845
/// </summary>
846
/// <param name="key">用户监测的Cookie、Session键</param>
847
/// <param name="expireTime">下次操作的间隔时间(秒)</param>
848
/// <returns></returns>
849
public static Boolean OperationDone(String key, Int32 expireTime)
850
{
851
return OperationDone(key, expireTime, true);
852
}
853
}
854
}
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/None.gif)
8
![](/Images/OutliningIndicators/None.gif)
9
![](/Images/OutliningIndicators/None.gif)
10
![](/Images/OutliningIndicators/None.gif)
11
![](/Images/OutliningIndicators/None.gif)
12
![](/Images/OutliningIndicators/None.gif)
13
![](/Images/OutliningIndicators/None.gif)
14
![](/Images/OutliningIndicators/None.gif)
15
![](/Images/OutliningIndicators/None.gif)
16
![](/Images/OutliningIndicators/None.gif)
17
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
18
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
23
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
33
![](/Images/OutliningIndicators/InBlock.gif)
34
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
35
![](/Images/OutliningIndicators/InBlock.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/InBlock.gif)
38
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
39
![](/Images/OutliningIndicators/InBlock.gif)
40
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/InBlock.gif)
43
![](/Images/OutliningIndicators/InBlock.gif)
44
![](/Images/OutliningIndicators/InBlock.gif)
45
![](/Images/OutliningIndicators/InBlock.gif)
46
![](/Images/OutliningIndicators/InBlock.gif)
47
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
48
![](/Images/OutliningIndicators/InBlock.gif)
49
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
50
![](/Images/OutliningIndicators/InBlock.gif)
51
![](/Images/OutliningIndicators/InBlock.gif)
52
![](/Images/OutliningIndicators/InBlock.gif)
53
![](/Images/OutliningIndicators/InBlock.gif)
54
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
55
![](/Images/OutliningIndicators/InBlock.gif)
56
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
57
![](/Images/OutliningIndicators/InBlock.gif)
58
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
59
![](/Images/OutliningIndicators/InBlock.gif)
60
![](/Images/OutliningIndicators/InBlock.gif)
61
![](/Images/OutliningIndicators/InBlock.gif)
62
![](/Images/OutliningIndicators/InBlock.gif)
63
![](/Images/OutliningIndicators/InBlock.gif)
64
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
65
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
66
![](/Images/OutliningIndicators/InBlock.gif)
67
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
68
![](/Images/OutliningIndicators/InBlock.gif)
69
![](/Images/OutliningIndicators/InBlock.gif)
70
![](/Images/OutliningIndicators/InBlock.gif)
71
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
72
![](/Images/OutliningIndicators/InBlock.gif)
73
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
74
![](/Images/OutliningIndicators/InBlock.gif)
75
![](/Images/OutliningIndicators/InBlock.gif)
76
![](/Images/OutliningIndicators/InBlock.gif)
77
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
78
![](/Images/OutliningIndicators/InBlock.gif)
79
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
80
![](/Images/OutliningIndicators/InBlock.gif)
81
![](/Images/OutliningIndicators/InBlock.gif)
82
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
83
![](/Images/OutliningIndicators/InBlock.gif)
84
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
85
![](/Images/OutliningIndicators/InBlock.gif)
86
![](/Images/OutliningIndicators/InBlock.gif)
87
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
88
![](/Images/OutliningIndicators/InBlock.gif)
89
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
90
![](/Images/OutliningIndicators/InBlock.gif)
91
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
92
![](/Images/OutliningIndicators/InBlock.gif)
93
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
94
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
95
![](/Images/OutliningIndicators/InBlock.gif)
96
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
97
![](/Images/OutliningIndicators/InBlock.gif)
98
![](/Images/OutliningIndicators/InBlock.gif)
99
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
100
![](/Images/OutliningIndicators/InBlock.gif)
101
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
102
![](/Images/OutliningIndicators/InBlock.gif)
103
![](/Images/OutliningIndicators/InBlock.gif)
104
![](/Images/OutliningIndicators/InBlock.gif)
105
![](/Images/OutliningIndicators/InBlock.gif)
106
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
107
![](/Images/OutliningIndicators/InBlock.gif)
108
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
109
![](/Images/OutliningIndicators/InBlock.gif)
110
![](/Images/OutliningIndicators/InBlock.gif)
111
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
112
![](/Images/OutliningIndicators/InBlock.gif)
113
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
114
![](/Images/OutliningIndicators/InBlock.gif)
115
![](/Images/OutliningIndicators/InBlock.gif)
116
![](/Images/OutliningIndicators/InBlock.gif)
117
![](/Images/OutliningIndicators/InBlock.gif)
118
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
119
![](/Images/OutliningIndicators/InBlock.gif)
120
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
121
![](/Images/OutliningIndicators/InBlock.gif)
122
![](/Images/OutliningIndicators/InBlock.gif)
123
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
124
![](/Images/OutliningIndicators/InBlock.gif)
125
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
126
![](/Images/OutliningIndicators/InBlock.gif)
127
![](/Images/OutliningIndicators/InBlock.gif)
128
![](/Images/OutliningIndicators/InBlock.gif)
129
![](/Images/OutliningIndicators/InBlock.gif)
130
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
131
![](/Images/OutliningIndicators/InBlock.gif)
132
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
133
![](/Images/OutliningIndicators/InBlock.gif)
134
![](/Images/OutliningIndicators/InBlock.gif)
135
![](/Images/OutliningIndicators/InBlock.gif)
136
![](/Images/OutliningIndicators/InBlock.gif)
137
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
138
![](/Images/OutliningIndicators/InBlock.gif)
139
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
140
![](/Images/OutliningIndicators/InBlock.gif)
141
![](/Images/OutliningIndicators/InBlock.gif)
142
![](/Images/OutliningIndicators/InBlock.gif)
143
![](/Images/OutliningIndicators/InBlock.gif)
144
![](/Images/OutliningIndicators/InBlock.gif)
145
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
146
![](/Images/OutliningIndicators/InBlock.gif)
147
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
148
![](/Images/OutliningIndicators/InBlock.gif)
149
![](/Images/OutliningIndicators/InBlock.gif)
150
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
151
![](/Images/OutliningIndicators/InBlock.gif)
152
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
153
![](/Images/OutliningIndicators/InBlock.gif)
154
![](/Images/OutliningIndicators/InBlock.gif)
155
![](/Images/OutliningIndicators/InBlock.gif)
156
![](/Images/OutliningIndicators/InBlock.gif)
157
![](/Images/OutliningIndicators/InBlock.gif)
158
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
159
![](/Images/OutliningIndicators/InBlock.gif)
160
![](/Images/OutliningIndicators/InBlock.gif)
161
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
162
![](/Images/OutliningIndicators/InBlock.gif)
163
![](/Images/OutliningIndicators/InBlock.gif)
164
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
165
![](/Images/OutliningIndicators/InBlock.gif)
166
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
167
![](/Images/OutliningIndicators/InBlock.gif)
168
![](/Images/OutliningIndicators/InBlock.gif)
169
![](/Images/OutliningIndicators/InBlock.gif)
170
![](/Images/OutliningIndicators/InBlock.gif)
171
![](/Images/OutliningIndicators/InBlock.gif)
172
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
173
![](/Images/OutliningIndicators/InBlock.gif)
174
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
175
![](/Images/OutliningIndicators/InBlock.gif)
176
![](/Images/OutliningIndicators/InBlock.gif)
177
![](/Images/OutliningIndicators/InBlock.gif)
178
![](/Images/OutliningIndicators/InBlock.gif)
179
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
180
![](/Images/OutliningIndicators/InBlock.gif)
181
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
182
![](/Images/OutliningIndicators/InBlock.gif)
183
![](/Images/OutliningIndicators/InBlock.gif)
184
![](/Images/OutliningIndicators/InBlock.gif)
185
![](/Images/OutliningIndicators/InBlock.gif)
186
![](/Images/OutliningIndicators/InBlock.gif)
187
![](/Images/OutliningIndicators/InBlock.gif)
188
![](/Images/OutliningIndicators/InBlock.gif)
189
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
190
![](/Images/OutliningIndicators/InBlock.gif)
191
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
192
![](/Images/OutliningIndicators/InBlock.gif)
193
![](/Images/OutliningIndicators/InBlock.gif)
194
![](/Images/OutliningIndicators/InBlock.gif)
195
![](/Images/OutliningIndicators/InBlock.gif)
196
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
197
![](/Images/OutliningIndicators/InBlock.gif)
198
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
199
![](/Images/OutliningIndicators/InBlock.gif)
200
![](/Images/OutliningIndicators/InBlock.gif)
201
![](/Images/OutliningIndicators/InBlock.gif)
202
![](/Images/OutliningIndicators/InBlock.gif)
203
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
204
![](/Images/OutliningIndicators/InBlock.gif)
205
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
206
![](/Images/OutliningIndicators/InBlock.gif)
207
![](/Images/OutliningIndicators/InBlock.gif)
208
![](/Images/OutliningIndicators/InBlock.gif)
209
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
210
![](/Images/OutliningIndicators/InBlock.gif)
211
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
212
![](/Images/OutliningIndicators/InBlock.gif)
213
![](/Images/OutliningIndicators/InBlock.gif)
214
![](/Images/OutliningIndicators/InBlock.gif)
215
![](/Images/OutliningIndicators/InBlock.gif)
216
![](/Images/OutliningIndicators/InBlock.gif)
217
![](/Images/OutliningIndicators/InBlock.gif)
218
![](/Images/OutliningIndicators/InBlock.gif)
219
![](/Images/OutliningIndicators/InBlock.gif)
220
![](/Images/OutliningIndicators/InBlock.gif)
221
![](/Images/OutliningIndicators/InBlock.gif)
222
![](/Images/OutliningIndicators/InBlock.gif)
223
![](/Images/OutliningIndicators/InBlock.gif)
224
![](/Images/OutliningIndicators/InBlock.gif)
225
![](/Images/OutliningIndicators/InBlock.gif)
226
![](/Images/OutliningIndicators/InBlock.gif)
227
![](/Images/OutliningIndicators/InBlock.gif)
228
![](/Images/OutliningIndicators/InBlock.gif)
229
![](/Images/OutliningIndicators/InBlock.gif)
230
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
231
![](/Images/OutliningIndicators/InBlock.gif)
232
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
233
![](/Images/OutliningIndicators/InBlock.gif)
234
![](/Images/OutliningIndicators/InBlock.gif)
235
![](/Images/OutliningIndicators/InBlock.gif)
236
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
237
![](/Images/OutliningIndicators/InBlock.gif)
238
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
239
![](/Images/OutliningIndicators/InBlock.gif)
240
![](/Images/OutliningIndicators/InBlock.gif)
241
![](/Images/OutliningIndicators/InBlock.gif)
242
![](/Images/OutliningIndicators/InBlock.gif)
243
![](/Images/OutliningIndicators/InBlock.gif)
244
![](/Images/OutliningIndicators/InBlock.gif)
245
![](/Images/OutliningIndicators/InBlock.gif)
246
![](/Images/OutliningIndicators/InBlock.gif)
247
![](/Images/OutliningIndicators/InBlock.gif)
248
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
249
![](/Images/OutliningIndicators/InBlock.gif)
250
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
251
![](/Images/OutliningIndicators/InBlock.gif)
252
![](/Images/OutliningIndicators/InBlock.gif)
253
![](/Images/OutliningIndicators/InBlock.gif)
254
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
255
![](/Images/OutliningIndicators/InBlock.gif)
256
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
257
![](/Images/OutliningIndicators/InBlock.gif)
258
![](/Images/OutliningIndicators/InBlock.gif)
259
![](/Images/OutliningIndicators/InBlock.gif)
260
![](/Images/OutliningIndicators/InBlock.gif)
261
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
262
![](/Images/OutliningIndicators/InBlock.gif)
263
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
264
![](/Images/OutliningIndicators/InBlock.gif)
265
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
266
![](/Images/OutliningIndicators/InBlock.gif)
267
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
268
![](/Images/OutliningIndicators/InBlock.gif)
269
![](/Images/OutliningIndicators/InBlock.gif)
270
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
271
![](/Images/OutliningIndicators/InBlock.gif)
272
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
273
![](/Images/OutliningIndicators/InBlock.gif)
274
![](/Images/OutliningIndicators/InBlock.gif)
275
![](/Images/OutliningIndicators/InBlock.gif)
276
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
277
![](/Images/OutliningIndicators/InBlock.gif)
278
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
279
![](/Images/OutliningIndicators/InBlock.gif)
280
![](/Images/OutliningIndicators/InBlock.gif)
281
![](/Images/OutliningIndicators/InBlock.gif)
282
![](/Images/OutliningIndicators/InBlock.gif)
283
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
284
![](/Images/OutliningIndicators/InBlock.gif)
285
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
286
![](/Images/OutliningIndicators/InBlock.gif)
287
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
288
![](/Images/OutliningIndicators/InBlock.gif)
289
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
290
![](/Images/OutliningIndicators/InBlock.gif)
291
![](/Images/OutliningIndicators/InBlock.gif)
292
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
293
![](/Images/OutliningIndicators/InBlock.gif)
294
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
295
![](/Images/OutliningIndicators/InBlock.gif)
296
![](/Images/OutliningIndicators/InBlock.gif)
297
![](/Images/OutliningIndicators/InBlock.gif)
298
![](/Images/OutliningIndicators/InBlock.gif)
299
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
300
![](/Images/OutliningIndicators/InBlock.gif)
301
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
302
![](/Images/OutliningIndicators/InBlock.gif)
303
![](/Images/OutliningIndicators/InBlock.gif)
304
![](/Images/OutliningIndicators/InBlock.gif)
305
![](/Images/OutliningIndicators/InBlock.gif)
306
![](/Images/OutliningIndicators/InBlock.gif)
307
![](/Images/OutliningIndicators/InBlock.gif)
308
![](/Images/OutliningIndicators/InBlock.gif)
309
![](/Images/OutliningIndicators/InBlock.gif)
310
![](/Images/OutliningIndicators/InBlock.gif)
311
![](/Images/OutliningIndicators/InBlock.gif)
312
![](/Images/OutliningIndicators/InBlock.gif)
313
![](/Images/OutliningIndicators/InBlock.gif)
314
![](/Images/OutliningIndicators/InBlock.gif)
315
![](/Images/OutliningIndicators/InBlock.gif)
316
![](/Images/OutliningIndicators/InBlock.gif)
317
![](/Images/OutliningIndicators/InBlock.gif)
318
![](/Images/OutliningIndicators/InBlock.gif)
319
![](/Images/OutliningIndicators/InBlock.gif)
320
![](/Images/OutliningIndicators/InBlock.gif)
321
![](/Images/OutliningIndicators/InBlock.gif)
322
![](/Images/OutliningIndicators/InBlock.gif)
323
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
324
![](/Images/OutliningIndicators/InBlock.gif)
325
![](/Images/OutliningIndicators/InBlock.gif)
326
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
327
![](/Images/OutliningIndicators/InBlock.gif)
328
![](/Images/OutliningIndicators/InBlock.gif)
329
![](/Images/OutliningIndicators/InBlock.gif)
330
![](/Images/OutliningIndicators/InBlock.gif)
331
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
332
![](/Images/OutliningIndicators/InBlock.gif)
333
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
334
![](/Images/OutliningIndicators/InBlock.gif)
335
![](/Images/OutliningIndicators/InBlock.gif)
336
![](/Images/OutliningIndicators/InBlock.gif)
337
![](/Images/OutliningIndicators/InBlock.gif)
338
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
339
![](/Images/OutliningIndicators/InBlock.gif)
340
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
341
![](/Images/OutliningIndicators/InBlock.gif)
342
![](/Images/OutliningIndicators/InBlock.gif)
343
![](/Images/OutliningIndicators/InBlock.gif)
344
![](/Images/OutliningIndicators/InBlock.gif)
345
![](/Images/OutliningIndicators/InBlock.gif)
346
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
347
![](/Images/OutliningIndicators/InBlock.gif)
348
![](/Images/OutliningIndicators/InBlock.gif)
349
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
350
![](/Images/OutliningIndicators/InBlock.gif)
351
![](/Images/OutliningIndicators/InBlock.gif)
352
![](/Images/OutliningIndicators/InBlock.gif)
353
![](/Images/OutliningIndicators/InBlock.gif)
354
![](/Images/OutliningIndicators/InBlock.gif)
355
![](/Images/OutliningIndicators/InBlock.gif)
356
![](/Images/OutliningIndicators/InBlock.gif)
357
![](/Images/OutliningIndicators/InBlock.gif)
358
![](/Images/OutliningIndicators/InBlock.gif)
359
![](/Images/OutliningIndicators/InBlock.gif)
360
![](/Images/OutliningIndicators/InBlock.gif)
361
![](/Images/OutliningIndicators/InBlock.gif)
362
![](/Images/OutliningIndicators/InBlock.gif)
363
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
364
![](/Images/OutliningIndicators/InBlock.gif)
365
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
366
![](/Images/OutliningIndicators/InBlock.gif)
367
![](/Images/OutliningIndicators/InBlock.gif)
368
![](/Images/OutliningIndicators/InBlock.gif)
369
![](/Images/OutliningIndicators/InBlock.gif)
370
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
371
![](/Images/OutliningIndicators/InBlock.gif)
372
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
373
![](/Images/OutliningIndicators/InBlock.gif)
374
![](/Images/OutliningIndicators/InBlock.gif)
375
![](/Images/OutliningIndicators/InBlock.gif)
376
![](/Images/OutliningIndicators/InBlock.gif)
377
![](/Images/OutliningIndicators/InBlock.gif)
378
![](/Images/OutliningIndicators/InBlock.gif)
379
![](/Images/OutliningIndicators/InBlock.gif)
380
![](/Images/OutliningIndicators/InBlock.gif)
381
![](/Images/OutliningIndicators/InBlock.gif)
382
![](/Images/OutliningIndicators/InBlock.gif)
383
![](/Images/OutliningIndicators/InBlock.gif)
384
![](/Images/OutliningIndicators/InBlock.gif)
385
![](/Images/OutliningIndicators/InBlock.gif)
386
![](/Images/OutliningIndicators/InBlock.gif)
387
![](/Images/OutliningIndicators/InBlock.gif)
388
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
389
![](/Images/OutliningIndicators/InBlock.gif)
390
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
391
![](/Images/OutliningIndicators/InBlock.gif)
392
![](/Images/OutliningIndicators/InBlock.gif)
393
![](/Images/OutliningIndicators/InBlock.gif)
394
![](/Images/OutliningIndicators/InBlock.gif)
395
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
396
![](/Images/OutliningIndicators/InBlock.gif)
397
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
398
![](/Images/OutliningIndicators/InBlock.gif)
399
![](/Images/OutliningIndicators/InBlock.gif)
400
![](/Images/OutliningIndicators/InBlock.gif)
401
![](/Images/OutliningIndicators/InBlock.gif)
402
![](/Images/OutliningIndicators/InBlock.gif)
403
![](/Images/OutliningIndicators/InBlock.gif)
404
![](/Images/OutliningIndicators/InBlock.gif)
405
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
406
![](/Images/OutliningIndicators/InBlock.gif)
407
![](/Images/OutliningIndicators/InBlock.gif)
408
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
409
![](/Images/OutliningIndicators/InBlock.gif)
410
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
411
![](/Images/OutliningIndicators/InBlock.gif)
412
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
413
![](/Images/OutliningIndicators/InBlock.gif)
414
![](/Images/OutliningIndicators/InBlock.gif)
415
![](/Images/OutliningIndicators/InBlock.gif)
416
![](/Images/OutliningIndicators/InBlock.gif)
417
![](/Images/OutliningIndicators/InBlock.gif)
418
![](/Images/OutliningIndicators/InBlock.gif)
419
![](/Images/OutliningIndicators/InBlock.gif)
420
![](/Images/OutliningIndicators/InBlock.gif)
421
![](/Images/OutliningIndicators/InBlock.gif)
422
![](/Images/OutliningIndicators/InBlock.gif)
423
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
424
![](/Images/OutliningIndicators/InBlock.gif)
425
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
426
![](/Images/OutliningIndicators/InBlock.gif)
427
![](/Images/OutliningIndicators/InBlock.gif)
428
![](/Images/OutliningIndicators/InBlock.gif)
429
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
430
![](/Images/OutliningIndicators/InBlock.gif)
431
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
432
![](/Images/OutliningIndicators/InBlock.gif)
433
![](/Images/OutliningIndicators/InBlock.gif)
434
![](/Images/OutliningIndicators/InBlock.gif)
435
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
436
![](/Images/OutliningIndicators/InBlock.gif)
437
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
438
![](/Images/OutliningIndicators/InBlock.gif)
439
![](/Images/OutliningIndicators/InBlock.gif)
440
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
441
![](/Images/OutliningIndicators/InBlock.gif)
442
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
443
![](/Images/OutliningIndicators/InBlock.gif)
444
![](/Images/OutliningIndicators/InBlock.gif)
445
![](/Images/OutliningIndicators/InBlock.gif)
446
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
447
![](/Images/OutliningIndicators/InBlock.gif)
448
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
449
![](/Images/OutliningIndicators/InBlock.gif)
450
![](/Images/OutliningIndicators/InBlock.gif)
451
![](/Images/OutliningIndicators/InBlock.gif)
452
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
453
![](/Images/OutliningIndicators/InBlock.gif)
454
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
455
![](/Images/OutliningIndicators/InBlock.gif)
456
![](/Images/OutliningIndicators/InBlock.gif)
457
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
458
![](/Images/OutliningIndicators/InBlock.gif)
459
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
460
![](/Images/OutliningIndicators/InBlock.gif)
461
![](/Images/OutliningIndicators/InBlock.gif)
462
![](/Images/OutliningIndicators/InBlock.gif)
463
![](/Images/OutliningIndicators/InBlock.gif)
464
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
465
![](/Images/OutliningIndicators/InBlock.gif)
466
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
467
![](/Images/OutliningIndicators/InBlock.gif)
468
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
469
![](/Images/OutliningIndicators/InBlock.gif)
470
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
471
![](/Images/OutliningIndicators/InBlock.gif)
472
![](/Images/OutliningIndicators/InBlock.gif)
473
![](/Images/OutliningIndicators/InBlock.gif)
474
![](/Images/OutliningIndicators/InBlock.gif)
475
![](/Images/OutliningIndicators/InBlock.gif)
476
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
477
![](/Images/OutliningIndicators/InBlock.gif)
478
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
479
![](/Images/OutliningIndicators/InBlock.gif)
480
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
481
![](/Images/OutliningIndicators/InBlock.gif)
482
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
483
![](/Images/OutliningIndicators/InBlock.gif)
484
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
485
![](/Images/OutliningIndicators/InBlock.gif)
486
![](/Images/OutliningIndicators/InBlock.gif)
487
![](/Images/OutliningIndicators/InBlock.gif)
488
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
489
![](/Images/OutliningIndicators/InBlock.gif)
490
![](/Images/OutliningIndicators/InBlock.gif)
491
![](/Images/OutliningIndicators/InBlock.gif)
492
![](/Images/OutliningIndicators/InBlock.gif)
493
![](/Images/OutliningIndicators/InBlock.gif)
494
![](/Images/OutliningIndicators/InBlock.gif)
495
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
496
![](/Images/OutliningIndicators/InBlock.gif)
497
![](/Images/OutliningIndicators/InBlock.gif)
498
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
499
![](/Images/OutliningIndicators/InBlock.gif)
500
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
501
![](/Images/OutliningIndicators/InBlock.gif)
502
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
503
![](/Images/OutliningIndicators/InBlock.gif)
504
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
505
![](/Images/OutliningIndicators/InBlock.gif)
506
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
507
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
508
![](/Images/OutliningIndicators/InBlock.gif)
509
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
510
![](/Images/OutliningIndicators/InBlock.gif)
511
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
512
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
513
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
514
![](/Images/OutliningIndicators/InBlock.gif)
515
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
516
![](/Images/OutliningIndicators/InBlock.gif)
517
![](/Images/OutliningIndicators/InBlock.gif)
518
![](/Images/OutliningIndicators/InBlock.gif)
519
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
520
![](/Images/OutliningIndicators/InBlock.gif)
521
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
522
![](/Images/OutliningIndicators/InBlock.gif)
523
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
524
![](/Images/OutliningIndicators/InBlock.gif)
525
![](/Images/OutliningIndicators/InBlock.gif)
526
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
527
![](/Images/OutliningIndicators/InBlock.gif)
528
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
529
![](/Images/OutliningIndicators/InBlock.gif)
530
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
531
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
532
![](/Images/OutliningIndicators/InBlock.gif)
533
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
534
![](/Images/OutliningIndicators/InBlock.gif)
535
![](/Images/OutliningIndicators/InBlock.gif)
536
![](/Images/OutliningIndicators/InBlock.gif)
537
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
538
![](/Images/OutliningIndicators/InBlock.gif)
539
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
540
![](/Images/OutliningIndicators/InBlock.gif)
541
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
542
![](/Images/OutliningIndicators/InBlock.gif)
543
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
544
![](/Images/OutliningIndicators/InBlock.gif)
545
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
546
![](/Images/OutliningIndicators/InBlock.gif)
547
![](/Images/OutliningIndicators/InBlock.gif)
548
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
549
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
550
![](/Images/OutliningIndicators/InBlock.gif)
551
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
552
![](/Images/OutliningIndicators/InBlock.gif)
553
![](/Images/OutliningIndicators/InBlock.gif)
554
![](/Images/OutliningIndicators/InBlock.gif)
555
![](/Images/OutliningIndicators/InBlock.gif)
556
![](/Images/OutliningIndicators/InBlock.gif)
557
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
558
![](/Images/OutliningIndicators/InBlock.gif)
559
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
560
![](/Images/OutliningIndicators/InBlock.gif)
561
![](/Images/OutliningIndicators/InBlock.gif)
562
![](/Images/OutliningIndicators/InBlock.gif)
563
![](/Images/OutliningIndicators/InBlock.gif)
564
![](/Images/OutliningIndicators/InBlock.gif)
565
![](/Images/OutliningIndicators/InBlock.gif)
566
![](/Images/OutliningIndicators/InBlock.gif)
567
![](/Images/OutliningIndicators/InBlock.gif)
568
![](/Images/OutliningIndicators/InBlock.gif)
569
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
570
![](/Images/OutliningIndicators/InBlock.gif)
571
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
572
![](/Images/OutliningIndicators/InBlock.gif)
573
![](/Images/OutliningIndicators/InBlock.gif)
574
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
575
![](/Images/OutliningIndicators/InBlock.gif)
576
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
577
![](/Images/OutliningIndicators/InBlock.gif)
578
![](/Images/OutliningIndicators/InBlock.gif)
579
![](/Images/OutliningIndicators/InBlock.gif)
580
![](/Images/OutliningIndicators/InBlock.gif)
581
![](/Images/OutliningIndicators/InBlock.gif)
582
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
583
![](/Images/OutliningIndicators/InBlock.gif)
584
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
585
![](/Images/OutliningIndicators/InBlock.gif)
586
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
587
![](/Images/OutliningIndicators/InBlock.gif)
588
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
589
![](/Images/OutliningIndicators/InBlock.gif)
590
![](/Images/OutliningIndicators/InBlock.gif)
591
![](/Images/OutliningIndicators/InBlock.gif)
592
![](/Images/OutliningIndicators/InBlock.gif)
593
![](/Images/OutliningIndicators/InBlock.gif)
594
![](/Images/OutliningIndicators/InBlock.gif)
595
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
596
![](/Images/OutliningIndicators/InBlock.gif)
597
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
598
![](/Images/OutliningIndicators/InBlock.gif)
599
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
600
![](/Images/OutliningIndicators/InBlock.gif)
601
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
602
![](/Images/OutliningIndicators/InBlock.gif)
603
![](/Images/OutliningIndicators/InBlock.gif)
604
![](/Images/OutliningIndicators/InBlock.gif)
605
![](/Images/OutliningIndicators/InBlock.gif)
606
![](/Images/OutliningIndicators/InBlock.gif)
607
![](/Images/OutliningIndicators/InBlock.gif)
608
![](/Images/OutliningIndicators/InBlock.gif)
609
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
610
![](/Images/OutliningIndicators/InBlock.gif)
611
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
612
![](/Images/OutliningIndicators/InBlock.gif)
613
![](/Images/OutliningIndicators/InBlock.gif)
614
![](/Images/OutliningIndicators/InBlock.gif)
615
![](/Images/OutliningIndicators/InBlock.gif)
616
![](/Images/OutliningIndicators/InBlock.gif)
617
![](/Images/OutliningIndicators/InBlock.gif)
618
![](/Images/OutliningIndicators/InBlock.gif)
619
![](/Images/OutliningIndicators/InBlock.gif)
620
![](/Images/OutliningIndicators/InBlock.gif)
621
![](/Images/OutliningIndicators/InBlock.gif)
622
![](/Images/OutliningIndicators/InBlock.gif)
623
![](/Images/OutliningIndicators/InBlock.gif)
624
![](/Images/OutliningIndicators/InBlock.gif)
625
![](/Images/OutliningIndicators/InBlock.gif)
626
![](/Images/OutliningIndicators/InBlock.gif)
627
![](/Images/OutliningIndicators/InBlock.gif)
628
![](/Images/OutliningIndicators/InBlock.gif)
629
![](/Images/OutliningIndicators/InBlock.gif)
630
![](/Images/OutliningIndicators/InBlock.gif)
631
![](/Images/OutliningIndicators/InBlock.gif)
632
![](/Images/OutliningIndicators/InBlock.gif)
633
![](/Images/OutliningIndicators/InBlock.gif)
634
![](/Images/OutliningIndicators/InBlock.gif)
635
![](/Images/OutliningIndicators/InBlock.gif)
636
![](/Images/OutliningIndicators/InBlock.gif)
637
![](/Images/OutliningIndicators/InBlock.gif)
638
![](/Images/OutliningIndicators/InBlock.gif)
639
![](/Images/OutliningIndicators/InBlock.gif)
640
![](/Images/OutliningIndicators/InBlock.gif)
641
![](/Images/OutliningIndicators/InBlock.gif)
642
![](/Images/OutliningIndicators/InBlock.gif)
643
![](/Images/OutliningIndicators/InBlock.gif)
644
![](/Images/OutliningIndicators/InBlock.gif)
645
![](/Images/OutliningIndicators/InBlock.gif)
646
![](/Images/OutliningIndicators/InBlock.gif)
647
![](/Images/OutliningIndicators/InBlock.gif)
648
![](/Images/OutliningIndicators/InBlock.gif)
649
![](/Images/OutliningIndicators/InBlock.gif)
650
![](/Images/OutliningIndicators/InBlock.gif)
651
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
652
![](/Images/OutliningIndicators/InBlock.gif)
653
![](/Images/OutliningIndicators/InBlock.gif)
654
![](/Images/OutliningIndicators/InBlock.gif)
655
![](/Images/OutliningIndicators/InBlock.gif)
656
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
657
![](/Images/OutliningIndicators/InBlock.gif)
658
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
659
![](/Images/OutliningIndicators/InBlock.gif)
660
![](/Images/OutliningIndicators/InBlock.gif)
661
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
662
![](/Images/OutliningIndicators/InBlock.gif)
663
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
664
![](/Images/OutliningIndicators/InBlock.gif)
665
![](/Images/OutliningIndicators/InBlock.gif)
666
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
667
![](/Images/OutliningIndicators/InBlock.gif)
668
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
669
![](/Images/OutliningIndicators/InBlock.gif)
670
![](/Images/OutliningIndicators/InBlock.gif)
671
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
672
![](/Images/OutliningIndicators/InBlock.gif)
673
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
674
![](/Images/OutliningIndicators/InBlock.gif)
675
![](/Images/OutliningIndicators/InBlock.gif)
676
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
677
![](/Images/OutliningIndicators/InBlock.gif)
678
![](/Images/OutliningIndicators/InBlock.gif)
679
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
680
![](/Images/OutliningIndicators/InBlock.gif)
681
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
682
![](/Images/OutliningIndicators/InBlock.gif)
683
![](/Images/OutliningIndicators/InBlock.gif)
684
![](/Images/OutliningIndicators/InBlock.gif)
685
![](/Images/OutliningIndicators/InBlock.gif)
686
![](/Images/OutliningIndicators/InBlock.gif)
687
![](/Images/OutliningIndicators/InBlock.gif)
688
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
689
![](/Images/OutliningIndicators/InBlock.gif)
690
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
691
![](/Images/OutliningIndicators/InBlock.gif)
692
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
693
![](/Images/OutliningIndicators/InBlock.gif)
694
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
695
![](/Images/OutliningIndicators/InBlock.gif)
696
![](/Images/OutliningIndicators/InBlock.gif)
697
![](/Images/OutliningIndicators/InBlock.gif)
698
![](/Images/OutliningIndicators/InBlock.gif)
699
![](/Images/OutliningIndicators/InBlock.gif)
700
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
701
![](/Images/OutliningIndicators/InBlock.gif)
702
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
703
![](/Images/OutliningIndicators/InBlock.gif)
704
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
705
![](/Images/OutliningIndicators/InBlock.gif)
706
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
707
![](/Images/OutliningIndicators/InBlock.gif)
708
![](/Images/OutliningIndicators/InBlock.gif)
709
![](/Images/OutliningIndicators/InBlock.gif)
710
![](/Images/OutliningIndicators/InBlock.gif)
711
![](/Images/OutliningIndicators/InBlock.gif)
712
![](/Images/OutliningIndicators/InBlock.gif)
713
![](/Images/OutliningIndicators/InBlock.gif)
714
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
715
![](/Images/OutliningIndicators/InBlock.gif)
716
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
717
![](/Images/OutliningIndicators/InBlock.gif)
718
![](/Images/OutliningIndicators/InBlock.gif)
719
![](/Images/OutliningIndicators/InBlock.gif)
720
![](/Images/OutliningIndicators/InBlock.gif)
721
![](/Images/OutliningIndicators/InBlock.gif)
722
![](/Images/OutliningIndicators/InBlock.gif)
723
![](/Images/OutliningIndicators/InBlock.gif)
724
![](/Images/OutliningIndicators/InBlock.gif)
725
![](/Images/OutliningIndicators/InBlock.gif)
726
![](/Images/OutliningIndicators/InBlock.gif)
727
![](/Images/OutliningIndicators/InBlock.gif)
728
![](/Images/OutliningIndicators/InBlock.gif)
729
![](/Images/OutliningIndicators/InBlock.gif)
730
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
731
![](/Images/OutliningIndicators/InBlock.gif)
732
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
733
![](/Images/OutliningIndicators/InBlock.gif)
734
![](/Images/OutliningIndicators/InBlock.gif)
735
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
736
![](/Images/OutliningIndicators/InBlock.gif)
737
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
738
![](/Images/OutliningIndicators/InBlock.gif)
739
![](/Images/OutliningIndicators/InBlock.gif)
740
![](/Images/OutliningIndicators/InBlock.gif)
741
![](/Images/OutliningIndicators/InBlock.gif)
742
![](/Images/OutliningIndicators/InBlock.gif)
743
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
744
![](/Images/OutliningIndicators/InBlock.gif)
745
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
746
![](/Images/OutliningIndicators/InBlock.gif)
747
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
748
![](/Images/OutliningIndicators/InBlock.gif)
749
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
750
![](/Images/OutliningIndicators/InBlock.gif)
751
![](/Images/OutliningIndicators/InBlock.gif)
752
![](/Images/OutliningIndicators/InBlock.gif)
753
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
754
![](/Images/OutliningIndicators/InBlock.gif)
755
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
756
![](/Images/OutliningIndicators/InBlock.gif)
757
![](/Images/OutliningIndicators/InBlock.gif)
758
![](/Images/OutliningIndicators/InBlock.gif)
759
![](/Images/OutliningIndicators/InBlock.gif)
760
![](/Images/OutliningIndicators/InBlock.gif)
761
![](/Images/OutliningIndicators/InBlock.gif)
762
![](/Images/OutliningIndicators/InBlock.gif)
763
![](/Images/OutliningIndicators/InBlock.gif)
764
![](/Images/OutliningIndicators/InBlock.gif)
765
![](/Images/OutliningIndicators/InBlock.gif)
766
![](/Images/OutliningIndicators/InBlock.gif)
767
![](/Images/OutliningIndicators/InBlock.gif)
768
![](/Images/OutliningIndicators/InBlock.gif)
769
![](/Images/OutliningIndicators/InBlock.gif)
770
![](/Images/OutliningIndicators/InBlock.gif)
771
![](/Images/OutliningIndicators/InBlock.gif)
772
![](/Images/OutliningIndicators/InBlock.gif)
773
![](/Images/OutliningIndicators/InBlock.gif)
774
![](/Images/OutliningIndicators/InBlock.gif)
775
![](/Images/OutliningIndicators/InBlock.gif)
776
![](/Images/OutliningIndicators/InBlock.gif)
777
![](/Images/OutliningIndicators/InBlock.gif)
778
![](/Images/OutliningIndicators/InBlock.gif)
779
![](/Images/OutliningIndicators/InBlock.gif)
780
![](/Images/OutliningIndicators/InBlock.gif)
781
![](/Images/OutliningIndicators/InBlock.gif)
782
![](/Images/OutliningIndicators/InBlock.gif)
783
![](/Images/OutliningIndicators/InBlock.gif)
784
![](/Images/OutliningIndicators/InBlock.gif)
785
![](/Images/OutliningIndicators/InBlock.gif)
786
![](/Images/OutliningIndicators/InBlock.gif)
787
![](/Images/OutliningIndicators/InBlock.gif)
788
![](/Images/OutliningIndicators/InBlock.gif)
789
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
790
![](/Images/OutliningIndicators/InBlock.gif)
791
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
792
![](/Images/OutliningIndicators/InBlock.gif)
793
![](/Images/OutliningIndicators/InBlock.gif)
794
![](/Images/OutliningIndicators/InBlock.gif)
795
![](/Images/OutliningIndicators/InBlock.gif)
796
![](/Images/OutliningIndicators/InBlock.gif)
797
![](/Images/OutliningIndicators/InBlock.gif)
798
![](/Images/OutliningIndicators/InBlock.gif)
799
![](/Images/OutliningIndicators/InBlock.gif)
800
![](/Images/OutliningIndicators/InBlock.gif)
801
![](/Images/OutliningIndicators/InBlock.gif)
802
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
803
![](/Images/OutliningIndicators/InBlock.gif)
804
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
805
![](/Images/OutliningIndicators/InBlock.gif)
806
![](/Images/OutliningIndicators/InBlock.gif)
807
![](/Images/OutliningIndicators/InBlock.gif)
808
![](/Images/OutliningIndicators/InBlock.gif)
809
![](/Images/OutliningIndicators/InBlock.gif)
810
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
811
![](/Images/OutliningIndicators/InBlock.gif)
812
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
813
![](/Images/OutliningIndicators/InBlock.gif)
814
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
815
![](/Images/OutliningIndicators/InBlock.gif)
816
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
817
![](/Images/OutliningIndicators/InBlock.gif)
818
![](/Images/OutliningIndicators/InBlock.gif)
819
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
820
![](/Images/OutliningIndicators/InBlock.gif)
821
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
822
![](/Images/OutliningIndicators/InBlock.gif)
823
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
824
![](/Images/OutliningIndicators/InBlock.gif)
825
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
826
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
827
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
828
![](/Images/OutliningIndicators/InBlock.gif)
829
![](/Images/OutliningIndicators/InBlock.gif)
830
![](/Images/OutliningIndicators/InBlock.gif)
831
![](/Images/OutliningIndicators/InBlock.gif)
832
![](/Images/OutliningIndicators/InBlock.gif)
833
![](/Images/OutliningIndicators/InBlock.gif)
834
![](/Images/OutliningIndicators/InBlock.gif)
835
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
836
![](/Images/OutliningIndicators/InBlock.gif)
837
![](/Images/OutliningIndicators/InBlock.gif)
838
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
839
![](/Images/OutliningIndicators/InBlock.gif)
840
![](/Images/OutliningIndicators/InBlock.gif)
841
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
842
![](/Images/OutliningIndicators/InBlock.gif)
843
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
844
![](/Images/OutliningIndicators/InBlock.gif)
845
![](/Images/OutliningIndicators/InBlock.gif)
846
![](/Images/OutliningIndicators/InBlock.gif)
847
![](/Images/OutliningIndicators/InBlock.gif)
848
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
849
![](/Images/OutliningIndicators/InBlock.gif)
850
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
851
![](/Images/OutliningIndicators/InBlock.gif)
852
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
853
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
854
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
Ajax.jQuery.Java.