1
//
------------------------------------
2
//
RSA Encoder
3
//
创建于 2004年10月11日
4
//
创建人 luoluo
5
//
说明 一个说明RSA原理的简单程序
6
//
达不到Encoder的要求,且由于Jscript
7
//
的整型精度不够,不适合做RSA加密解密
8
//
的程序
9
//
------------------------------------
10
11![None.gif](/Images/OutliningIndicators/None.gif)
12
//
///
13
14
//
------------------------------------
15
//
函数名: isNumber
16
//
参数: int n
17
//
返回值: boolean
18
//
作用: 判断变量是否是数字
19
//
------------------------------------
20![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
function
isNumber(n)
{
21
return ! isNaN(n);
22
}
23![None.gif](/Images/OutliningIndicators/None.gif)
24![None.gif](/Images/OutliningIndicators/None.gif)
25
//
------------------------------------
26
//
函数名: isInt
27
//
参数: int n
28
//
返回值: boolean
29
//
作用: 判断变量是否是整数
30
//
------------------------------------
31![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
function
isInt(n)
{
32
if (! isNumber(n))
33
throw n + " is not a number";
34
35
var re = /\./i;
36
return (n.toString().search(re) == -1);
37
}
38![None.gif](/Images/OutliningIndicators/None.gif)
39
//
------------------------------------
40
//
函数名: gcd
41
//
参数一: x int
42
//
参数二: y int
43
//
返回值: int
44
//
作用: 求两个数的最大公因数(公约数)
45
//
------------------------------------
46![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
function
gcd(x, y)
{
47
// 验证参数的类型
48
if (! isInt(x))
49
throw x + " is not a integer";
50
if (! isInt(y))
51
throw y + " is not a integer";
52
53
x = parseInt(x);
54
y = parseInt(y);
55
56
var ret; // 存放返回值
57
58
// 取参数的绝对值
59
if (x < 0)
60
x = -x;
61
if (y < 0)
62
y = -y;
63
64
// 判断是否为0
65
if (! (x + y))
66
throw "x and y can't be zero";
67
68
// 计算最大公因数
69
ret = y;
70
71![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
while (x > 0)
{
72
ret = x;
73
x = y % x;
74
y = ret;
75
}
76
77
// 返回
78
return ret;
79
}
80![None.gif](/Images/OutliningIndicators/None.gif)
81
//
------------------------------------
82
//
函数名: isEven
83
//
参数: int n
84
//
返回值: boolean
85
//
作用: 判断变量是否是偶数
86
//
------------------------------------
87![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
function
isEven(n)
{
88
if (! isInt(n))
89
throw n + " is not a integer";
90
91
return (n & 0x01 == 0);
92
}
93![None.gif](/Images/OutliningIndicators/None.gif)
94
//
------------------------------------
95
//
函数名: isEven
96
//
参数: int n
97
//
返回值: boolean
98
//
作用: 判断变量是否是奇数
99
//
------------------------------------
100![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
function
isOdd(n)
{
101
if (! isInt(n))
102
throw n + " is not ainteger";
103
104
return (n & 0x01 != 0);
105
}
106![None.gif](/Images/OutliningIndicators/None.gif)
107
//
------------------------------------
108
//
函数名: inverse
109
//
参数: int u
110
//
参数: int v
111
//
v * d = 1 (mod u)
112
//
返回值: int
113
//
作用: 返回v关于u的乘法逆元素
114
//
说明: 修改自课本上的程序
115
//
------------------------------------
116![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
function
inverse(u, v)
{
117
if (! isInt(u))
118
throw u + " is not a integer";
119
if (! isInt(v))
120
throw v + " is not a integer";
121
122
u = parseInt(u);
123
v = parseInt(v);
124
125
var t1, t2, t3;
126
var u1, u2, u3;
127
128
if (isEven(u) && isEven(v))
129
return 0;
130
131
u1 = 1;
132
u2 = 0;
133
u3 = u;
134
t1 = v;
135
t2 = u - 1;
136
t3 = v;
137
138![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
do
{
139![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
do
{
140![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (isEven(u3))
{
141![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (isOdd(u1) || isOdd(u2))
{
142
u1 += v;
143
u2 += u;
144
}
145
146
u1 >>= 1;
147
u2 >>= 1;
148
u3 >>= 1;
149
}
150
151![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (isEven(t3) || u3 < t3)
{
152
u1^=t1, t1^=u1, u1^=t1;
153
u2^=t2, t2^=u2, u2^=t2;
154
u3^=t3, t3^=u3, u3^=t3;
155
}
156
} while (isEven(u3));
157
158![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
while ((u1 < t1) || (u2 < t2))
{
159
u1 += v;
160
u2 += u;
161
}
162
163
u1 -= t1;
164
u2 -= t2;
165
u3 -= t3;
166
} while (t3 > 0);
167
168![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
while (u1 > v && u2 >= u)
{
169
u1 -= v;
170
u2 -= u;
171
}
172
173
return (u - u2);
174
}
175![None.gif](/Images/OutliningIndicators/None.gif)
176
//
------------------------------------
177
//
函数名: isPrime
178
//
参数: int n
179
//
返回值: boolean
180
//
作用: 判断变量是否是素数
181
//
------------------------------------
182![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
function
isPrime(n)
{
183
if (! isInt(n))
184
throw n + " is not a integer";
185
186
var ret = true;
187
188![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for (var i = 2; i <= n - 1; i ++)
{
189
if (! (n % i))
190![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
191
ret = false;
192
break;
193
}
194
}
195
196
return ret;
197
}
198![None.gif](/Images/OutliningIndicators/None.gif)
199
//
------------------------------------
200
//
函数名: randomPrime
201
//
参数: int n
202
//
返回值: int
203
//
作用: 产生随机十进制n位素数
204
//
------------------------------------
205![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
function
randomPrime(n)
{
206
var x;
207
208![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
do
{
209
x = Math.random();
210
x = parseInt(x * Math.pow(10, n));
211
} while (! isPrime(x) || x.toString().length != n);
212
213
return x;
214
}
215![None.gif](/Images/OutliningIndicators/None.gif)
216
//
------------------------------------
217
//
函数名: randomPrimeOfX
218
//
参数: int n
219
//
返回值: int
220
//
作用: 产生随机十进制n位与X互素的数
221
//
------------------------------------
222![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
function
randomPrimeOfX(x, n)
{
223
var y;
224
225![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
do
{
226
y = Math.random();
227
y = parseInt(y * Math.pow(10, n));
228
} while (gcd(x, y) != 1 || y.toString().length != n);
229
230
return y;
231
}
232![None.gif](/Images/OutliningIndicators/None.gif)
233![None.gif](/Images/OutliningIndicators/None.gif)
234
//
------------------------------------
235
//
类名: RSAEncoder
236
//
作用: RSA加密解密
237
//
------------------------------------
238![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
function
RSAEncoder()
{
239
this.p = randomPrime(2);
240
this.q = randomPrime(2);
241
242
this.n = 0;
243
this.e = 0;
244
this.d = 0;
245
246
this.init = init;
247
248
this.encode = encode;
249
250
this.decode = decode;
251
}
252![None.gif](/Images/OutliningIndicators/None.gif)
253
//
------------------------------------
254
//
函数名: init
255
//
作用: RSAEncoder初始化
256
//
------------------------------------
257![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
function
init()
{
258
this.n = this.p * this.q;
259
this.e = randomPrimeOfX((this.p - 1) * (this.q - 1), 2);
260
this.d = inverse((this.p - 1) * (this.q - 1), this.e);
261
}
262![None.gif](/Images/OutliningIndicators/None.gif)
263
//
------------------------------------
264
//
函数名: encode
265
//
参数: int m
266
//
返回值: int
267
//
作用: 加密信息
268
//
------------------------------------
269![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
function
encode(m)
{
270
return (Math.pow(m, this.e) % this.n);
271
}
272![None.gif](/Images/OutliningIndicators/None.gif)
273![None.gif](/Images/OutliningIndicators/None.gif)
274
//
------------------------------------
275
//
函数名: decode
276
//
参数: int m
277
//
返回值: int
278
//
作用: 解密信息
279
//
------------------------------------
280![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
function
decode(c)
{
281
return (Math.pow(c, this.d) % this.n);
282
}
283
![None.gif](/Images/OutliningIndicators/None.gif)
2
![None.gif](/Images/OutliningIndicators/None.gif)
3
![None.gif](/Images/OutliningIndicators/None.gif)
4
![None.gif](/Images/OutliningIndicators/None.gif)
5
![None.gif](/Images/OutliningIndicators/None.gif)
6
![None.gif](/Images/OutliningIndicators/None.gif)
7
![None.gif](/Images/OutliningIndicators/None.gif)
8
![None.gif](/Images/OutliningIndicators/None.gif)
9
![None.gif](/Images/OutliningIndicators/None.gif)
10
![None.gif](/Images/OutliningIndicators/None.gif)
11
![None.gif](/Images/OutliningIndicators/None.gif)
12
![None.gif](/Images/OutliningIndicators/None.gif)
13
![None.gif](/Images/OutliningIndicators/None.gif)
14
![None.gif](/Images/OutliningIndicators/None.gif)
15
![None.gif](/Images/OutliningIndicators/None.gif)
16
![None.gif](/Images/OutliningIndicators/None.gif)
17
![None.gif](/Images/OutliningIndicators/None.gif)
18
![None.gif](/Images/OutliningIndicators/None.gif)
19
![None.gif](/Images/OutliningIndicators/None.gif)
20
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
21
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
22
![ExpandedBlockEnd.gif](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
23
![None.gif](/Images/OutliningIndicators/None.gif)
24
![None.gif](/Images/OutliningIndicators/None.gif)
25
![None.gif](/Images/OutliningIndicators/None.gif)
26
![None.gif](/Images/OutliningIndicators/None.gif)
27
![None.gif](/Images/OutliningIndicators/None.gif)
28
![None.gif](/Images/OutliningIndicators/None.gif)
29
![None.gif](/Images/OutliningIndicators/None.gif)
30
![None.gif](/Images/OutliningIndicators/None.gif)
31
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
32
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
33
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
34
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
35
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
36
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
37
![ExpandedBlockEnd.gif](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
38
![None.gif](/Images/OutliningIndicators/None.gif)
39
![None.gif](/Images/OutliningIndicators/None.gif)
40
![None.gif](/Images/OutliningIndicators/None.gif)
41
![None.gif](/Images/OutliningIndicators/None.gif)
42
![None.gif](/Images/OutliningIndicators/None.gif)
43
![None.gif](/Images/OutliningIndicators/None.gif)
44
![None.gif](/Images/OutliningIndicators/None.gif)
45
![None.gif](/Images/OutliningIndicators/None.gif)
46
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
47
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
48
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
49
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
50
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
51
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
52
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
53
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
54
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
55
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
56
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
57
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
58
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
59
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
60
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
61
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
62
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
63
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
64
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
65
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
66
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
67
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
68
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
69
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
70
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
71
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
72
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
73
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
74
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
75
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
76
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
77
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
78
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
79
![ExpandedBlockEnd.gif](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
80
![None.gif](/Images/OutliningIndicators/None.gif)
81
![None.gif](/Images/OutliningIndicators/None.gif)
82
![None.gif](/Images/OutliningIndicators/None.gif)
83
![None.gif](/Images/OutliningIndicators/None.gif)
84
![None.gif](/Images/OutliningIndicators/None.gif)
85
![None.gif](/Images/OutliningIndicators/None.gif)
86
![None.gif](/Images/OutliningIndicators/None.gif)
87
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
88
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
89
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
90
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
91
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
92
![ExpandedBlockEnd.gif](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
93
![None.gif](/Images/OutliningIndicators/None.gif)
94
![None.gif](/Images/OutliningIndicators/None.gif)
95
![None.gif](/Images/OutliningIndicators/None.gif)
96
![None.gif](/Images/OutliningIndicators/None.gif)
97
![None.gif](/Images/OutliningIndicators/None.gif)
98
![None.gif](/Images/OutliningIndicators/None.gif)
99
![None.gif](/Images/OutliningIndicators/None.gif)
100
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
101
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
102
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
103
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
104
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
105
![ExpandedBlockEnd.gif](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
106
![None.gif](/Images/OutliningIndicators/None.gif)
107
![None.gif](/Images/OutliningIndicators/None.gif)
108
![None.gif](/Images/OutliningIndicators/None.gif)
109
![None.gif](/Images/OutliningIndicators/None.gif)
110
![None.gif](/Images/OutliningIndicators/None.gif)
111
![None.gif](/Images/OutliningIndicators/None.gif)
112
![None.gif](/Images/OutliningIndicators/None.gif)
113
![None.gif](/Images/OutliningIndicators/None.gif)
114
![None.gif](/Images/OutliningIndicators/None.gif)
115
![None.gif](/Images/OutliningIndicators/None.gif)
116
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
117
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
118
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
119
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
120
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
121
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
122
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
123
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
124
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
125
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
126
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
127
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
128
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
129
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
130
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
131
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
132
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
133
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
134
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
135
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
136
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
137
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
138
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
139
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
140
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
141
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
142
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
143
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
144
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
145
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
146
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
147
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
148
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
149
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
150
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
151
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
152
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
153
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
154
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
155
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
156
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
157
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
158
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
159
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
160
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
161
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
162
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
163
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
164
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
165
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
166
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
167
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
168
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
169
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
170
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
171
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
172
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
173
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
174
![ExpandedBlockEnd.gif](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
175
![None.gif](/Images/OutliningIndicators/None.gif)
176
![None.gif](/Images/OutliningIndicators/None.gif)
177
![None.gif](/Images/OutliningIndicators/None.gif)
178
![None.gif](/Images/OutliningIndicators/None.gif)
179
![None.gif](/Images/OutliningIndicators/None.gif)
180
![None.gif](/Images/OutliningIndicators/None.gif)
181
![None.gif](/Images/OutliningIndicators/None.gif)
182
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
183
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
184
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
185
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
186
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
187
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
188
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
189
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
190
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
191
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
192
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
193
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
194
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
195
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
196
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
197
![ExpandedBlockEnd.gif](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
198
![None.gif](/Images/OutliningIndicators/None.gif)
199
![None.gif](/Images/OutliningIndicators/None.gif)
200
![None.gif](/Images/OutliningIndicators/None.gif)
201
![None.gif](/Images/OutliningIndicators/None.gif)
202
![None.gif](/Images/OutliningIndicators/None.gif)
203
![None.gif](/Images/OutliningIndicators/None.gif)
204
![None.gif](/Images/OutliningIndicators/None.gif)
205
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
206
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
207
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
208
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
209
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
210
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
211
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
212
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
213
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
214
![ExpandedBlockEnd.gif](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
215
![None.gif](/Images/OutliningIndicators/None.gif)
216
![None.gif](/Images/OutliningIndicators/None.gif)
217
![None.gif](/Images/OutliningIndicators/None.gif)
218
![None.gif](/Images/OutliningIndicators/None.gif)
219
![None.gif](/Images/OutliningIndicators/None.gif)
220
![None.gif](/Images/OutliningIndicators/None.gif)
221
![None.gif](/Images/OutliningIndicators/None.gif)
222
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
223
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
224
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
225
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
226
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
227
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
228
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
229
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
230
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
231
![ExpandedBlockEnd.gif](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
232
![None.gif](/Images/OutliningIndicators/None.gif)
233
![None.gif](/Images/OutliningIndicators/None.gif)
234
![None.gif](/Images/OutliningIndicators/None.gif)
235
![None.gif](/Images/OutliningIndicators/None.gif)
236
![None.gif](/Images/OutliningIndicators/None.gif)
237
![None.gif](/Images/OutliningIndicators/None.gif)
238
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
239
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
240
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
241
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
242
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
243
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
244
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
245
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
246
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
247
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
248
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
249
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
250
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
251
![ExpandedBlockEnd.gif](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
252
![None.gif](/Images/OutliningIndicators/None.gif)
253
![None.gif](/Images/OutliningIndicators/None.gif)
254
![None.gif](/Images/OutliningIndicators/None.gif)
255
![None.gif](/Images/OutliningIndicators/None.gif)
256
![None.gif](/Images/OutliningIndicators/None.gif)
257
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
258
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
259
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
260
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
261
![ExpandedBlockEnd.gif](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
262
![None.gif](/Images/OutliningIndicators/None.gif)
263
![None.gif](/Images/OutliningIndicators/None.gif)
264
![None.gif](/Images/OutliningIndicators/None.gif)
265
![None.gif](/Images/OutliningIndicators/None.gif)
266
![None.gif](/Images/OutliningIndicators/None.gif)
267
![None.gif](/Images/OutliningIndicators/None.gif)
268
![None.gif](/Images/OutliningIndicators/None.gif)
269
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
270
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
271
![ExpandedBlockEnd.gif](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
272
![None.gif](/Images/OutliningIndicators/None.gif)
273
![None.gif](/Images/OutliningIndicators/None.gif)
274
![None.gif](/Images/OutliningIndicators/None.gif)
275
![None.gif](/Images/OutliningIndicators/None.gif)
276
![None.gif](/Images/OutliningIndicators/None.gif)
277
![None.gif](/Images/OutliningIndicators/None.gif)
278
![None.gif](/Images/OutliningIndicators/None.gif)
279
![None.gif](/Images/OutliningIndicators/None.gif)
280
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
281
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
282
![ExpandedBlockEnd.gif](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
283
![None.gif](/Images/OutliningIndicators/None.gif)