@pezkuwi/types-codec 16.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/README.md +3 -0
  2. package/build/abstract/Array.d.ts +89 -0
  3. package/build/abstract/Base.d.ts +75 -0
  4. package/build/abstract/Int.d.ts +80 -0
  5. package/build/abstract/Object.d.ts +67 -0
  6. package/build/abstract/index.d.ts +3 -0
  7. package/build/base/Compact.d.ts +88 -0
  8. package/build/base/DoNotConstruct.d.ts +63 -0
  9. package/build/base/Enum.d.ts +118 -0
  10. package/build/base/Int.d.ts +16 -0
  11. package/build/base/Null.d.ts +56 -0
  12. package/build/base/Option.d.ts +94 -0
  13. package/build/base/Result.d.ts +38 -0
  14. package/build/base/Tuple.d.ts +42 -0
  15. package/build/base/UInt.d.ts +15 -0
  16. package/build/base/Vec.d.ts +28 -0
  17. package/build/base/VecAny.d.ts +15 -0
  18. package/build/base/VecFixed.d.ts +30 -0
  19. package/build/base/index.d.ts +12 -0
  20. package/build/bundle.d.ts +7 -0
  21. package/build/extended/BTreeMap.d.ts +5 -0
  22. package/build/extended/BTreeSet.d.ts +64 -0
  23. package/build/extended/BitVec.d.ts +37 -0
  24. package/build/extended/Bytes.d.ts +29 -0
  25. package/build/extended/HashMap.d.ts +5 -0
  26. package/build/extended/Linkage.d.ts +37 -0
  27. package/build/extended/Map.d.ts +59 -0
  28. package/build/extended/OptionBool.d.ts +36 -0
  29. package/build/extended/Range.d.ts +29 -0
  30. package/build/extended/RangeInclusive.d.ts +6 -0
  31. package/build/extended/Type.d.ts +16 -0
  32. package/build/extended/U8aFixed.d.ts +16 -0
  33. package/build/extended/WrapperKeepOpaque.d.ts +40 -0
  34. package/build/extended/WrapperOpaque.d.ts +10 -0
  35. package/build/extended/index.d.ts +14 -0
  36. package/build/index.d.ts +2 -0
  37. package/build/native/Bool.d.ts +71 -0
  38. package/build/native/Date.d.ts +84 -0
  39. package/build/native/Float.d.ts +68 -0
  40. package/build/native/Json.d.ts +69 -0
  41. package/build/native/Raw.d.ts +87 -0
  42. package/build/native/Set.d.ts +84 -0
  43. package/build/native/Struct.d.ts +106 -0
  44. package/build/native/Text.d.ts +77 -0
  45. package/build/native/index.d.ts +8 -0
  46. package/build/packageDetect.d.ts +1 -0
  47. package/build/packageInfo.d.ts +6 -0
  48. package/build/primitive/F32.d.ts +11 -0
  49. package/build/primitive/F64.d.ts +11 -0
  50. package/build/primitive/I128.d.ts +11 -0
  51. package/build/primitive/I16.d.ts +11 -0
  52. package/build/primitive/I256.d.ts +11 -0
  53. package/build/primitive/I32.d.ts +11 -0
  54. package/build/primitive/I64.d.ts +11 -0
  55. package/build/primitive/I8.d.ts +11 -0
  56. package/build/primitive/ISize.d.ts +12 -0
  57. package/build/primitive/U128.d.ts +11 -0
  58. package/build/primitive/U16.d.ts +11 -0
  59. package/build/primitive/U256.d.ts +11 -0
  60. package/build/primitive/U32.d.ts +11 -0
  61. package/build/primitive/U64.d.ts +11 -0
  62. package/build/primitive/U8.d.ts +11 -0
  63. package/build/primitive/USize.d.ts +12 -0
  64. package/build/primitive/index.d.ts +16 -0
  65. package/build/types/codec.d.ts +113 -0
  66. package/build/types/helpers.d.ts +27 -0
  67. package/build/types/index.d.ts +4 -0
  68. package/build/types/interfaces.d.ts +74 -0
  69. package/build/types/registry.d.ts +67 -0
  70. package/build/utils/compareArray.d.ts +1 -0
  71. package/build/utils/compareMap.d.ts +1 -0
  72. package/build/utils/compareSet.d.ts +1 -0
  73. package/build/utils/decodeU8a.d.ts +26 -0
  74. package/build/utils/index.d.ts +8 -0
  75. package/build/utils/sanitize.d.ts +15 -0
  76. package/build/utils/sortValues.d.ts +12 -0
  77. package/build/utils/toConstructors.d.ts +16 -0
  78. package/build/utils/typesToMap.d.ts +2 -0
  79. package/build/utils/util.d.ts +3 -0
  80. package/package.json +34 -0
  81. package/src/abstract/Array.ts +213 -0
  82. package/src/abstract/Base.ts +129 -0
  83. package/src/abstract/Int.ts +271 -0
  84. package/src/abstract/Object.ts +99 -0
  85. package/src/abstract/index.ts +6 -0
  86. package/src/base/Compact.spec.ts +99 -0
  87. package/src/base/Compact.ts +198 -0
  88. package/src/base/DoNotConstruct.spec.ts +23 -0
  89. package/src/base/DoNotConstruct.ts +118 -0
  90. package/src/base/Enum.spec.ts +487 -0
  91. package/src/base/Enum.ts +460 -0
  92. package/src/base/Int.spec.ts +225 -0
  93. package/src/base/Int.ts +34 -0
  94. package/src/base/Null.spec.ts +41 -0
  95. package/src/base/Null.ts +96 -0
  96. package/src/base/Option.spec.ts +216 -0
  97. package/src/base/Option.ts +275 -0
  98. package/src/base/Result.spec.ts +64 -0
  99. package/src/base/Result.ts +79 -0
  100. package/src/base/Tuple.spec.ts +161 -0
  101. package/src/base/Tuple.ts +149 -0
  102. package/src/base/UInt.spec.ts +192 -0
  103. package/src/base/UInt.ts +30 -0
  104. package/src/base/Vec.spec.ts +224 -0
  105. package/src/base/Vec.ts +133 -0
  106. package/src/base/VecAny.ts +23 -0
  107. package/src/base/VecFixed.spec.ts +78 -0
  108. package/src/base/VecFixed.ts +92 -0
  109. package/src/base/index.ts +15 -0
  110. package/src/bundle.ts +13 -0
  111. package/src/checkTypes.manual.ts +12 -0
  112. package/src/extended/BTreeMap.spec.ts +245 -0
  113. package/src/extended/BTreeMap.ts +16 -0
  114. package/src/extended/BTreeSet.spec.ts +260 -0
  115. package/src/extended/BTreeSet.ts +233 -0
  116. package/src/extended/BitVec.spec.ts +97 -0
  117. package/src/extended/BitVec.ts +137 -0
  118. package/src/extended/Bytes.spec.ts +75 -0
  119. package/src/extended/Bytes.ts +88 -0
  120. package/src/extended/HashMap.spec.ts +36 -0
  121. package/src/extended/HashMap.ts +16 -0
  122. package/src/extended/Linkage.spec.ts +43 -0
  123. package/src/extended/Linkage.ts +81 -0
  124. package/src/extended/Map.spec.ts +123 -0
  125. package/src/extended/Map.ts +255 -0
  126. package/src/extended/OptionBool.spec.ts +49 -0
  127. package/src/extended/OptionBool.ts +93 -0
  128. package/src/extended/Range.spec.ts +37 -0
  129. package/src/extended/Range.ts +56 -0
  130. package/src/extended/RangeInclusive.ts +20 -0
  131. package/src/extended/Type.spec.ts +118 -0
  132. package/src/extended/Type.ts +29 -0
  133. package/src/extended/U8aFixed.spec.ts +117 -0
  134. package/src/extended/U8aFixed.ts +57 -0
  135. package/src/extended/WrapperKeepOpaque.spec.ts +101 -0
  136. package/src/extended/WrapperKeepOpaque.ts +128 -0
  137. package/src/extended/WrapperOpaque.spec.ts +58 -0
  138. package/src/extended/WrapperOpaque.ts +27 -0
  139. package/src/extended/index.ts +17 -0
  140. package/src/index.ts +6 -0
  141. package/src/mod.ts +4 -0
  142. package/src/native/Bool.spec.ts +74 -0
  143. package/src/native/Bool.ts +137 -0
  144. package/src/native/Date.spec.ts +85 -0
  145. package/src/native/Date.ts +169 -0
  146. package/src/native/Float.spec.ts +51 -0
  147. package/src/native/Float.ts +136 -0
  148. package/src/native/Json.ts +147 -0
  149. package/src/native/Raw.spec.ts +113 -0
  150. package/src/native/Raw.ts +171 -0
  151. package/src/native/Set.spec.ts +116 -0
  152. package/src/native/Set.ts +269 -0
  153. package/src/native/Struct.data.ts +4 -0
  154. package/src/native/Struct.spec.ts +411 -0
  155. package/src/native/Struct.ts +338 -0
  156. package/src/native/Text.spec.ts +85 -0
  157. package/src/native/Text.ts +184 -0
  158. package/src/native/index.ts +11 -0
  159. package/src/packageDetect.ts +11 -0
  160. package/src/packageInfo.ts +6 -0
  161. package/src/primitive/F32.ts +14 -0
  162. package/src/primitive/F64.ts +14 -0
  163. package/src/primitive/I128.ts +14 -0
  164. package/src/primitive/I16.ts +14 -0
  165. package/src/primitive/I256.ts +14 -0
  166. package/src/primitive/I32.ts +14 -0
  167. package/src/primitive/I64.ts +14 -0
  168. package/src/primitive/I8.ts +14 -0
  169. package/src/primitive/ISize.ts +21 -0
  170. package/src/primitive/U128.ts +14 -0
  171. package/src/primitive/U16.ts +14 -0
  172. package/src/primitive/U256.ts +14 -0
  173. package/src/primitive/U32.ts +14 -0
  174. package/src/primitive/U64.ts +14 -0
  175. package/src/primitive/U8.ts +14 -0
  176. package/src/primitive/USize.ts +21 -0
  177. package/src/primitive/index.ts +19 -0
  178. package/src/test/performance.ts +61 -0
  179. package/src/types/codec.ts +140 -0
  180. package/src/types/helpers.ts +50 -0
  181. package/src/types/index.ts +7 -0
  182. package/src/types/interfaces.ts +98 -0
  183. package/src/types/registry.ts +86 -0
  184. package/src/utils/compareArray.ts +22 -0
  185. package/src/utils/compareMap.ts +40 -0
  186. package/src/utils/compareSet.ts +23 -0
  187. package/src/utils/decodeU8a.ts +123 -0
  188. package/src/utils/index.ts +11 -0
  189. package/src/utils/sanitize.spec.ts +89 -0
  190. package/src/utils/sanitize.ts +290 -0
  191. package/src/utils/sortValues.ts +103 -0
  192. package/src/utils/toConstructors.ts +46 -0
  193. package/src/utils/typesToMap.ts +14 -0
  194. package/src/utils/util.ts +8 -0
  195. package/tsconfig.build.json +16 -0
  196. package/tsconfig.build.tsbuildinfo +1 -0
  197. package/tsconfig.spec.json +21 -0
@@ -0,0 +1,269 @@
1
+ // Copyright 2017-2025 @polkadot/types-codec authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import type { HexString } from '@pezkuwi/util/types';
5
+ import type { CodecClass, Inspect, ISet, IU8a, Registry } from '../types/index.js';
6
+
7
+ import { BN, bnToBn, bnToU8a, isBn, isNumber, isString, isU8a, isUndefined, objectProperties, stringify, stringPascalCase, u8aToBn, u8aToHex, u8aToU8a } from '@pezkuwi/util';
8
+
9
+ import { compareArray } from '../utils/index.js';
10
+
11
+ type SetValues = Record<string, number | BN>;
12
+
13
+ function encodeSet (setValues: SetValues, values: string[]): BN {
14
+ const encoded = new BN(0);
15
+
16
+ for (let i = 0, count = values.length; i < count; i++) {
17
+ encoded.ior(bnToBn(setValues[values[i]] || 0));
18
+ }
19
+
20
+ return encoded;
21
+ }
22
+
23
+ /** @internal */
24
+ function decodeSetArray (setValues: SetValues, values: string[]): string[] {
25
+ const count = values.length;
26
+ const result = new Array<string>(count);
27
+
28
+ for (let i = 0; i < count; i++) {
29
+ const key = values[i];
30
+
31
+ if (isUndefined(setValues[key])) {
32
+ throw new Error(`Set: Invalid key '${key}' passed to Set, allowed ${Object.keys(setValues).join(', ')}`);
33
+ }
34
+
35
+ result[i] = key;
36
+ }
37
+
38
+ return result;
39
+ }
40
+
41
+ /** @internal */
42
+ function decodeSetNumber (setValues: SetValues, _value: BN | number): string[] {
43
+ const bn = bnToBn(_value);
44
+ const keys = Object.keys(setValues);
45
+ const result: string[] = [];
46
+
47
+ for (let i = 0, count = keys.length; i < count; i++) {
48
+ const key = keys[i];
49
+
50
+ if (bn.and(bnToBn(setValues[key])).eq(bnToBn(setValues[key]))) {
51
+ result.push(key);
52
+ }
53
+ }
54
+
55
+ const computed = encodeSet(setValues, result);
56
+
57
+ if (!bn.eq(computed)) {
58
+ throw new Error(`Set: Mismatch decoding '${bn.toString()}', computed as '${computed.toString()}' with ${result.join(', ')}`);
59
+ }
60
+
61
+ return result;
62
+ }
63
+
64
+ /** @internal */
65
+ function decodeSet (setValues: SetValues, value: string[] | Set<string> | Uint8Array | BN | number | string = 0, bitLength: number): string[] {
66
+ if (bitLength % 8 !== 0) {
67
+ throw new Error(`Expected valid bitLength, power of 8, found ${bitLength}`);
68
+ }
69
+
70
+ const byteLength = bitLength / 8;
71
+
72
+ if (isU8a(value)) {
73
+ return value.length === 0
74
+ ? []
75
+ : decodeSetNumber(setValues, u8aToBn(value.subarray(0, byteLength), { isLe: true }));
76
+ } else if (isString(value)) {
77
+ return decodeSet(setValues, u8aToU8a(value), byteLength);
78
+ } else if (value instanceof Set || Array.isArray(value)) {
79
+ const input = Array.isArray(value)
80
+ ? value
81
+ : [...value.values()];
82
+
83
+ return decodeSetArray(setValues, input);
84
+ }
85
+
86
+ return decodeSetNumber(setValues, value);
87
+ }
88
+
89
+ /**
90
+ * @name Set
91
+ * @description
92
+ * An Set is an array of string values, represented an an encoded type by
93
+ * a bitwise representation of the values.
94
+ */
95
+ export class CodecSet extends Set<string> implements ISet<string> {
96
+ readonly registry: Registry;
97
+
98
+ public createdAtHash?: IU8a;
99
+ public initialU8aLength?: number;
100
+ public isStorageFallback?: boolean;
101
+
102
+ readonly #allowed: SetValues;
103
+ readonly #byteLength: number;
104
+
105
+ constructor (registry: Registry, setValues: SetValues, value?: string[] | Set<string> | Uint8Array | BN | number | string, bitLength = 8) {
106
+ super(decodeSet(setValues, value, bitLength));
107
+
108
+ this.registry = registry;
109
+ this.#allowed = setValues;
110
+ this.#byteLength = bitLength / 8;
111
+ }
112
+
113
+ public static with (values: SetValues, bitLength?: number): CodecClass<CodecSet> {
114
+ return class extends CodecSet {
115
+ static {
116
+ const keys = Object.keys(values);
117
+ const count = keys.length;
118
+ const isKeys = new Array<string>(count);
119
+
120
+ for (let i = 0; i < count; i++) {
121
+ isKeys[i] = `is${stringPascalCase(keys[i])}`;
122
+ }
123
+
124
+ objectProperties(this.prototype, isKeys, (_: string, i: number, self: CodecSet) =>
125
+ self.strings.includes(keys[i])
126
+ );
127
+ }
128
+
129
+ constructor (registry: Registry, value?: string[] | Set<string> | Uint8Array | BN | number | string) {
130
+ super(registry, values, value, bitLength);
131
+ }
132
+ };
133
+ }
134
+
135
+ /**
136
+ * @description The length of the value when encoded as a Uint8Array
137
+ */
138
+ public get encodedLength (): number {
139
+ return this.#byteLength;
140
+ }
141
+
142
+ /**
143
+ * @description returns a hash of the contents
144
+ */
145
+ public get hash (): IU8a {
146
+ return this.registry.hash(this.toU8a());
147
+ }
148
+
149
+ /**
150
+ * @description true is the Set contains no values
151
+ */
152
+ public get isEmpty (): boolean {
153
+ return this.size === 0;
154
+ }
155
+
156
+ /**
157
+ * @description The actual set values as a string[]
158
+ */
159
+ public get strings (): string[] {
160
+ return [...super.values()];
161
+ }
162
+
163
+ /**
164
+ * @description The encoded value for the set members
165
+ */
166
+ public get valueEncoded (): BN {
167
+ return encodeSet(this.#allowed, this.strings);
168
+ }
169
+
170
+ /**
171
+ * @description adds a value to the Set (extended to allow for validity checking)
172
+ */
173
+ public override add = (key: string): this => {
174
+ // ^^^ add = () property done to assign this instance's this, otherwise Set.add creates "some" chaos
175
+ // we have the isUndefined(this._setValues) in here as well, add is used internally
176
+ // in the Set constructor (so it is undefined at this point, and should allow)
177
+ if (this.#allowed && isUndefined(this.#allowed[key])) {
178
+ throw new Error(`Set: Invalid key '${key}' on add`);
179
+ }
180
+
181
+ super.add(key);
182
+
183
+ return this;
184
+ };
185
+
186
+ /**
187
+ * @description Compares the value of the input to see if there is a match
188
+ */
189
+ public eq (other?: unknown): boolean {
190
+ if (Array.isArray(other)) {
191
+ // we don't actually care about the order, sort the values
192
+ return compareArray(this.strings.sort(), other.sort());
193
+ } else if (other instanceof Set) {
194
+ return this.eq([...other.values()]);
195
+ } else if (isNumber(other) || isBn(other as string)) {
196
+ return this.valueEncoded.eq(bnToBn(other as string));
197
+ }
198
+
199
+ return false;
200
+ }
201
+
202
+ /**
203
+ * @description Returns a breakdown of the hex encoding for this Codec
204
+ */
205
+ public inspect (): Inspect {
206
+ return {
207
+ outer: [this.toU8a()]
208
+ };
209
+ }
210
+
211
+ /**
212
+ * @description Returns a hex string representation of the value
213
+ */
214
+ public toHex (): HexString {
215
+ return u8aToHex(this.toU8a());
216
+ }
217
+
218
+ /**
219
+ * @description Converts the Object to to a human-friendly JSON, with additional fields, expansion and formatting of information
220
+ */
221
+ public toHuman (): string[] {
222
+ return this.toJSON();
223
+ }
224
+
225
+ /**
226
+ * @description Converts the Object to JSON, typically used for RPC transfers
227
+ */
228
+ public toJSON (): string[] {
229
+ return this.strings;
230
+ }
231
+
232
+ /**
233
+ * @description The encoded value for the set members
234
+ */
235
+ public toNumber (): number {
236
+ return this.valueEncoded.toNumber();
237
+ }
238
+
239
+ /**
240
+ * @description Converts the value in a best-fit primitive form
241
+ */
242
+ public toPrimitive (): string[] {
243
+ return this.toJSON();
244
+ }
245
+
246
+ /**
247
+ * @description Returns the base runtime type name for this instance
248
+ */
249
+ public toRawType (): string {
250
+ return stringify({ _set: this.#allowed });
251
+ }
252
+
253
+ /**
254
+ * @description Returns the string representation of the value
255
+ */
256
+ public override toString (): string {
257
+ return `[${this.strings.join(', ')}]`;
258
+ }
259
+
260
+ /**
261
+ * @description Encodes the value as a Uint8Array as per the SCALE specifications
262
+ */
263
+ public toU8a (_isBare?: boolean): Uint8Array {
264
+ return bnToU8a(this.valueEncoded, {
265
+ bitLength: this.#byteLength * 8,
266
+ isLe: true
267
+ });
268
+ }
269
+ }
@@ -0,0 +1,4 @@
1
+ // Copyright 2017-2025 @polkadot/types-codec authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ export const TEST_A = '0x0000000000048670f76b10bd81bf93b0b420ad46c209d1183202abcdfce1b0e13108ccf4020000000000000000000000000000000000000000000000000000000000000000000088b116afe3b5020000000000000001000000000000000000000000000000420d0300030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060202';