@openreplay/tracker 14.0.10-beta.2 → 14.0.11

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 (273) hide show
  1. package/{cjs → dist/cjs}/index.js +29 -49
  2. package/dist/cjs/index.js.map +1 -0
  3. package/{cjs → dist/cjs/main}/app/index.d.ts +17 -5
  4. package/{lib → dist/cjs/main}/app/logger.d.ts +1 -0
  5. package/{lib → dist/cjs/main}/app/messages.gen.d.ts +2 -2
  6. package/{lib/app/nodes.d.ts → dist/cjs/main/app/nodes/index.d.ts} +14 -7
  7. package/dist/cjs/main/app/nodes/maintainer.d.ts +28 -0
  8. package/{lib → dist/cjs/main}/app/observer/iframe_observer.d.ts +2 -0
  9. package/{lib → dist/cjs/main}/app/observer/iframe_offsets.d.ts +1 -1
  10. package/{lib → dist/cjs/main}/app/observer/observer.d.ts +3 -1
  11. package/{lib → dist/cjs/main}/app/observer/top_observer.d.ts +7 -1
  12. package/{cjs → dist/cjs/main}/app/sanitizer.d.ts +5 -2
  13. package/{cjs → dist/cjs/main}/app/session.d.ts +6 -3
  14. package/{cjs → dist/cjs/main}/index.d.ts +2 -2
  15. package/{cjs → dist/cjs/main}/modules/attributeSender.d.ts +5 -2
  16. package/{cjs → dist/cjs/main}/modules/conditionsManager.d.ts +1 -1
  17. package/{cjs → dist/cjs/main}/modules/tagWatcher.d.ts +8 -4
  18. package/{lib → dist/cjs/main}/modules/userTesting/SignalManager.d.ts +2 -2
  19. package/{lib → dist/cjs/main}/utils.d.ts +4 -3
  20. package/dist/lib/index.js +9358 -0
  21. package/dist/lib/index.js.map +1 -0
  22. package/{lib → dist/lib/main}/app/index.d.ts +17 -5
  23. package/{cjs → dist/lib/main}/app/logger.d.ts +1 -0
  24. package/{cjs → dist/lib/main}/app/messages.gen.d.ts +2 -2
  25. package/{cjs/app/nodes.d.ts → dist/lib/main/app/nodes/index.d.ts} +14 -7
  26. package/dist/lib/main/app/nodes/maintainer.d.ts +28 -0
  27. package/{cjs → dist/lib/main}/app/observer/iframe_observer.d.ts +2 -0
  28. package/{cjs → dist/lib/main}/app/observer/iframe_offsets.d.ts +1 -1
  29. package/{cjs → dist/lib/main}/app/observer/observer.d.ts +3 -1
  30. package/{cjs → dist/lib/main}/app/observer/top_observer.d.ts +7 -1
  31. package/{lib → dist/lib/main}/app/sanitizer.d.ts +5 -2
  32. package/{lib → dist/lib/main}/app/session.d.ts +6 -3
  33. package/{lib → dist/lib/main}/index.d.ts +2 -2
  34. package/{lib → dist/lib/main}/modules/attributeSender.d.ts +5 -2
  35. package/{lib → dist/lib/main}/modules/conditionsManager.d.ts +1 -1
  36. package/{lib → dist/lib/main}/modules/tagWatcher.d.ts +8 -4
  37. package/{cjs → dist/lib/main}/modules/userTesting/SignalManager.d.ts +2 -2
  38. package/{cjs → dist/lib/main}/utils.d.ts +4 -3
  39. package/package.json +31 -20
  40. package/.eslintignore +0 -11
  41. package/.nvmrc +0 -1
  42. package/.prettierignore +0 -1
  43. package/CHANGELOG.md +0 -297
  44. package/bun.lockb +0 -0
  45. package/cjs/app/canvas.js +0 -204
  46. package/cjs/app/guards.js +0 -37
  47. package/cjs/app/index.js +0 -1397
  48. package/cjs/app/logger.js +0 -37
  49. package/cjs/app/messages.gen.js +0 -702
  50. package/cjs/app/nodes.js +0 -111
  51. package/cjs/app/observer/iframe_observer.js +0 -35
  52. package/cjs/app/observer/iframe_offsets.js +0 -56
  53. package/cjs/app/observer/observer.js +0 -383
  54. package/cjs/app/observer/shadow_root_observer.js +0 -24
  55. package/cjs/app/observer/top_observer.js +0 -134
  56. package/cjs/app/sanitizer.js +0 -82
  57. package/cjs/app/session.js +0 -140
  58. package/cjs/app/ticker.js +0 -48
  59. package/cjs/common/interaction.js +0 -2
  60. package/cjs/common/messages.gen.js +0 -4
  61. package/cjs/modules/attributeSender.js +0 -51
  62. package/cjs/modules/axiosSpy.js +0 -122
  63. package/cjs/modules/conditionsManager.js +0 -343
  64. package/cjs/modules/connection.js +0 -15
  65. package/cjs/modules/console.js +0 -127
  66. package/cjs/modules/constructedStyleSheets.js +0 -138
  67. package/cjs/modules/cssrules.js +0 -99
  68. package/cjs/modules/exception.js +0 -85
  69. package/cjs/modules/featureFlags.js +0 -89
  70. package/cjs/modules/focus.js +0 -45
  71. package/cjs/modules/fonts.js +0 -57
  72. package/cjs/modules/img.js +0 -110
  73. package/cjs/modules/input.js +0 -203
  74. package/cjs/modules/mouse.js +0 -195
  75. package/cjs/modules/network.js +0 -244
  76. package/cjs/modules/performance.js +0 -53
  77. package/cjs/modules/scroll.js +0 -84
  78. package/cjs/modules/selection.js +0 -37
  79. package/cjs/modules/tabs.js +0 -13
  80. package/cjs/modules/tagWatcher.js +0 -76
  81. package/cjs/modules/timing.js +0 -173
  82. package/cjs/modules/userTesting/SignalManager.js +0 -83
  83. package/cjs/modules/userTesting/dnd.js +0 -40
  84. package/cjs/modules/userTesting/index.js +0 -464
  85. package/cjs/modules/userTesting/recorder.js +0 -101
  86. package/cjs/modules/userTesting/styles.js +0 -266
  87. package/cjs/modules/userTesting/utils.js +0 -87
  88. package/cjs/modules/viewport.js +0 -43
  89. package/cjs/package.json +0 -1
  90. package/cjs/utils.js +0 -249
  91. package/coverage/clover.xml +0 -4304
  92. package/coverage/coverage-final.json +0 -55
  93. package/coverage/lcov-report/base.css +0 -224
  94. package/coverage/lcov-report/block-navigation.js +0 -87
  95. package/coverage/lcov-report/favicon.png +0 -0
  96. package/coverage/lcov-report/index.html +0 -206
  97. package/coverage/lcov-report/main/app/canvas.ts.html +0 -712
  98. package/coverage/lcov-report/main/app/guards.ts.html +0 -232
  99. package/coverage/lcov-report/main/app/index.html +0 -236
  100. package/coverage/lcov-report/main/app/index.ts.html +0 -3955
  101. package/coverage/lcov-report/main/app/logger.ts.html +0 -211
  102. package/coverage/lcov-report/main/app/messages.gen.ts.html +0 -3034
  103. package/coverage/lcov-report/main/app/nodes.ts.html +0 -406
  104. package/coverage/lcov-report/main/app/observer/iframe_observer.ts.html +0 -148
  105. package/coverage/lcov-report/main/app/observer/iframe_offsets.ts.html +0 -289
  106. package/coverage/lcov-report/main/app/observer/index.html +0 -161
  107. package/coverage/lcov-report/main/app/observer/shadow_root_observer.ts.html +0 -142
  108. package/coverage/lcov-report/main/app/observer/top_observer.ts.html +0 -541
  109. package/coverage/lcov-report/main/app/sanitizer.ts.html +0 -403
  110. package/coverage/lcov-report/main/app/session.ts.html +0 -622
  111. package/coverage/lcov-report/main/app/ticker.ts.html +0 -250
  112. package/coverage/lcov-report/main/index.html +0 -131
  113. package/coverage/lcov-report/main/index.ts.html +0 -1597
  114. package/coverage/lcov-report/main/modules/Network/beaconProxy.ts.html +0 -400
  115. package/coverage/lcov-report/main/modules/Network/fetchProxy.ts.html +0 -1075
  116. package/coverage/lcov-report/main/modules/Network/index.html +0 -191
  117. package/coverage/lcov-report/main/modules/Network/index.ts.html +0 -244
  118. package/coverage/lcov-report/main/modules/Network/networkMessage.ts.html +0 -400
  119. package/coverage/lcov-report/main/modules/Network/utils.ts.html +0 -709
  120. package/coverage/lcov-report/main/modules/Network/xhrProxy.ts.html +0 -877
  121. package/coverage/lcov-report/main/modules/attributeSender.ts.html +0 -241
  122. package/coverage/lcov-report/main/modules/axiosSpy.ts.html +0 -709
  123. package/coverage/lcov-report/main/modules/conditionsManager.ts.html +0 -1381
  124. package/coverage/lcov-report/main/modules/connection.ts.html +0 -160
  125. package/coverage/lcov-report/main/modules/console.ts.html +0 -541
  126. package/coverage/lcov-report/main/modules/constructedStyleSheets.ts.html +0 -571
  127. package/coverage/lcov-report/main/modules/cssrules.ts.html +0 -418
  128. package/coverage/lcov-report/main/modules/exception.ts.html +0 -385
  129. package/coverage/lcov-report/main/modules/featureFlags.ts.html +0 -415
  130. package/coverage/lcov-report/main/modules/focus.ts.html +0 -220
  131. package/coverage/lcov-report/main/modules/fonts.ts.html +0 -289
  132. package/coverage/lcov-report/main/modules/img.ts.html +0 -436
  133. package/coverage/lcov-report/main/modules/index.html +0 -431
  134. package/coverage/lcov-report/main/modules/input.ts.html +0 -826
  135. package/coverage/lcov-report/main/modules/mouse.ts.html +0 -826
  136. package/coverage/lcov-report/main/modules/network.ts.html +0 -1123
  137. package/coverage/lcov-report/main/modules/performance.ts.html +0 -367
  138. package/coverage/lcov-report/main/modules/scroll.ts.html +0 -364
  139. package/coverage/lcov-report/main/modules/selection.ts.html +0 -202
  140. package/coverage/lcov-report/main/modules/tabs.ts.html +0 -124
  141. package/coverage/lcov-report/main/modules/tagWatcher.ts.html +0 -337
  142. package/coverage/lcov-report/main/modules/timing.ts.html +0 -877
  143. package/coverage/lcov-report/main/modules/userTesting/SignalManager.ts.html +0 -370
  144. package/coverage/lcov-report/main/modules/userTesting/dnd.ts.html +0 -220
  145. package/coverage/lcov-report/main/modules/userTesting/index.html +0 -191
  146. package/coverage/lcov-report/main/modules/userTesting/index.ts.html +0 -1909
  147. package/coverage/lcov-report/main/modules/userTesting/recorder.ts.html +0 -430
  148. package/coverage/lcov-report/main/modules/userTesting/styles.ts.html +0 -937
  149. package/coverage/lcov-report/main/modules/userTesting/utils.ts.html +0 -364
  150. package/coverage/lcov-report/main/modules/viewport.ts.html +0 -250
  151. package/coverage/lcov-report/main/utils.ts.html +0 -814
  152. package/coverage/lcov-report/prettify.css +0 -1
  153. package/coverage/lcov-report/prettify.js +0 -2
  154. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  155. package/coverage/lcov-report/sorter.js +0 -196
  156. package/coverage/lcov-report/webworker/BatchWriter.ts.html +0 -499
  157. package/coverage/lcov-report/webworker/MessageEncoder.gen.ts.html +0 -1021
  158. package/coverage/lcov-report/webworker/PrimitiveEncoder.ts.html +0 -436
  159. package/coverage/lcov-report/webworker/QueueSender.ts.html +0 -547
  160. package/coverage/lcov-report/webworker/index.html +0 -176
  161. package/coverage/lcov-report/webworker/index.ts.html +0 -667
  162. package/coverage/lcov.info +0 -8425
  163. package/jest.config.js +0 -13
  164. package/lib/app/canvas.js +0 -202
  165. package/lib/app/guards.js +0 -26
  166. package/lib/app/index.js +0 -1367
  167. package/lib/app/logger.js +0 -33
  168. package/lib/app/messages.gen.js +0 -622
  169. package/lib/app/nodes.js +0 -108
  170. package/lib/app/observer/iframe_observer.js +0 -29
  171. package/lib/app/observer/iframe_offsets.js +0 -53
  172. package/lib/app/observer/observer.js +0 -380
  173. package/lib/app/observer/shadow_root_observer.js +0 -18
  174. package/lib/app/observer/top_observer.js +0 -128
  175. package/lib/app/sanitizer.js +0 -77
  176. package/lib/app/session.js +0 -137
  177. package/lib/app/ticker.js +0 -45
  178. package/lib/common/interaction.js +0 -1
  179. package/lib/common/messages.gen.js +0 -3
  180. package/lib/common/tsconfig.tsbuildinfo +0 -1
  181. package/lib/index.js +0 -423
  182. package/lib/modules/attributeSender.js +0 -46
  183. package/lib/modules/axiosSpy.js +0 -119
  184. package/lib/modules/conditionsManager.js +0 -340
  185. package/lib/modules/connection.js +0 -12
  186. package/lib/modules/console.js +0 -124
  187. package/lib/modules/constructedStyleSheets.js +0 -133
  188. package/lib/modules/cssrules.js +0 -97
  189. package/lib/modules/exception.js +0 -76
  190. package/lib/modules/featureFlags.js +0 -86
  191. package/lib/modules/focus.js +0 -42
  192. package/lib/modules/fonts.js +0 -54
  193. package/lib/modules/img.js +0 -107
  194. package/lib/modules/input.js +0 -198
  195. package/lib/modules/mouse.js +0 -192
  196. package/lib/modules/network.js +0 -238
  197. package/lib/modules/performance.js +0 -49
  198. package/lib/modules/scroll.js +0 -81
  199. package/lib/modules/selection.js +0 -35
  200. package/lib/modules/tabs.js +0 -10
  201. package/lib/modules/tagWatcher.js +0 -73
  202. package/lib/modules/timing.js +0 -170
  203. package/lib/modules/userTesting/SignalManager.js +0 -80
  204. package/lib/modules/userTesting/dnd.js +0 -37
  205. package/lib/modules/userTesting/index.js +0 -435
  206. package/lib/modules/userTesting/recorder.js +0 -97
  207. package/lib/modules/userTesting/styles.js +0 -263
  208. package/lib/modules/userTesting/utils.js +0 -79
  209. package/lib/modules/viewport.js +0 -40
  210. package/lib/utils.js +0 -230
  211. package/rollup.config.js +0 -12
  212. package/scripts/checkver.cjs +0 -7
  213. package/tsconfig-base.json +0 -16
  214. /package/{cjs → dist/cjs}/common/interaction.d.ts +0 -0
  215. /package/{cjs → dist/cjs}/common/messages.gen.d.ts +0 -0
  216. /package/{cjs → dist/cjs/main}/app/canvas.d.ts +0 -0
  217. /package/{cjs → dist/cjs/main}/app/guards.d.ts +0 -0
  218. /package/{cjs → dist/cjs/main}/app/observer/shadow_root_observer.d.ts +0 -0
  219. /package/{cjs → dist/cjs/main}/app/ticker.d.ts +0 -0
  220. /package/{cjs → dist/cjs/main}/modules/axiosSpy.d.ts +0 -0
  221. /package/{cjs → dist/cjs/main}/modules/connection.d.ts +0 -0
  222. /package/{cjs → dist/cjs/main}/modules/console.d.ts +0 -0
  223. /package/{cjs → dist/cjs/main}/modules/constructedStyleSheets.d.ts +0 -0
  224. /package/{cjs → dist/cjs/main}/modules/cssrules.d.ts +0 -0
  225. /package/{cjs → dist/cjs/main}/modules/exception.d.ts +0 -0
  226. /package/{cjs → dist/cjs/main}/modules/featureFlags.d.ts +0 -0
  227. /package/{cjs → dist/cjs/main}/modules/focus.d.ts +0 -0
  228. /package/{cjs → dist/cjs/main}/modules/fonts.d.ts +0 -0
  229. /package/{cjs → dist/cjs/main}/modules/img.d.ts +0 -0
  230. /package/{cjs → dist/cjs/main}/modules/input.d.ts +0 -0
  231. /package/{cjs → dist/cjs/main}/modules/mouse.d.ts +0 -0
  232. /package/{cjs → dist/cjs/main}/modules/network.d.ts +0 -0
  233. /package/{cjs → dist/cjs/main}/modules/performance.d.ts +0 -0
  234. /package/{cjs → dist/cjs/main}/modules/scroll.d.ts +0 -0
  235. /package/{cjs → dist/cjs/main}/modules/selection.d.ts +0 -0
  236. /package/{cjs → dist/cjs/main}/modules/tabs.d.ts +0 -0
  237. /package/{cjs → dist/cjs/main}/modules/timing.d.ts +0 -0
  238. /package/{cjs → dist/cjs/main}/modules/userTesting/dnd.d.ts +0 -0
  239. /package/{cjs → dist/cjs/main}/modules/userTesting/index.d.ts +0 -0
  240. /package/{cjs → dist/cjs/main}/modules/userTesting/recorder.d.ts +0 -0
  241. /package/{cjs → dist/cjs/main}/modules/userTesting/styles.d.ts +0 -0
  242. /package/{cjs → dist/cjs/main}/modules/userTesting/utils.d.ts +0 -0
  243. /package/{cjs → dist/cjs/main}/modules/viewport.d.ts +0 -0
  244. /package/{lib → dist/lib}/common/interaction.d.ts +0 -0
  245. /package/{lib → dist/lib}/common/messages.gen.d.ts +0 -0
  246. /package/{lib → dist/lib/main}/app/canvas.d.ts +0 -0
  247. /package/{lib → dist/lib/main}/app/guards.d.ts +0 -0
  248. /package/{lib → dist/lib/main}/app/observer/shadow_root_observer.d.ts +0 -0
  249. /package/{lib → dist/lib/main}/app/ticker.d.ts +0 -0
  250. /package/{lib → dist/lib/main}/modules/axiosSpy.d.ts +0 -0
  251. /package/{lib → dist/lib/main}/modules/connection.d.ts +0 -0
  252. /package/{lib → dist/lib/main}/modules/console.d.ts +0 -0
  253. /package/{lib → dist/lib/main}/modules/constructedStyleSheets.d.ts +0 -0
  254. /package/{lib → dist/lib/main}/modules/cssrules.d.ts +0 -0
  255. /package/{lib → dist/lib/main}/modules/exception.d.ts +0 -0
  256. /package/{lib → dist/lib/main}/modules/featureFlags.d.ts +0 -0
  257. /package/{lib → dist/lib/main}/modules/focus.d.ts +0 -0
  258. /package/{lib → dist/lib/main}/modules/fonts.d.ts +0 -0
  259. /package/{lib → dist/lib/main}/modules/img.d.ts +0 -0
  260. /package/{lib → dist/lib/main}/modules/input.d.ts +0 -0
  261. /package/{lib → dist/lib/main}/modules/mouse.d.ts +0 -0
  262. /package/{lib → dist/lib/main}/modules/network.d.ts +0 -0
  263. /package/{lib → dist/lib/main}/modules/performance.d.ts +0 -0
  264. /package/{lib → dist/lib/main}/modules/scroll.d.ts +0 -0
  265. /package/{lib → dist/lib/main}/modules/selection.d.ts +0 -0
  266. /package/{lib → dist/lib/main}/modules/tabs.d.ts +0 -0
  267. /package/{lib → dist/lib/main}/modules/timing.d.ts +0 -0
  268. /package/{lib → dist/lib/main}/modules/userTesting/dnd.d.ts +0 -0
  269. /package/{lib → dist/lib/main}/modules/userTesting/index.d.ts +0 -0
  270. /package/{lib → dist/lib/main}/modules/userTesting/recorder.d.ts +0 -0
  271. /package/{lib → dist/lib/main}/modules/userTesting/styles.d.ts +0 -0
  272. /package/{lib → dist/lib/main}/modules/userTesting/utils.d.ts +0 -0
  273. /package/{lib → dist/lib/main}/modules/viewport.d.ts +0 -0
@@ -1,3955 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for main/app/index.ts</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../../prettify.css" />
9
- <link rel="stylesheet" href="../../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../../index.html">All files</a> / <a href="index.html">main/app</a> index.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">0% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>0/508</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">0% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>0/280</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">0% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>0/89</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">0% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>0/493</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input oninput="onInput()" type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line low'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a>
146
- <a name='L81'></a><a href='#L81'>81</a>
147
- <a name='L82'></a><a href='#L82'>82</a>
148
- <a name='L83'></a><a href='#L83'>83</a>
149
- <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a>
177
- <a name='L112'></a><a href='#L112'>112</a>
178
- <a name='L113'></a><a href='#L113'>113</a>
179
- <a name='L114'></a><a href='#L114'>114</a>
180
- <a name='L115'></a><a href='#L115'>115</a>
181
- <a name='L116'></a><a href='#L116'>116</a>
182
- <a name='L117'></a><a href='#L117'>117</a>
183
- <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a>
222
- <a name='L157'></a><a href='#L157'>157</a>
223
- <a name='L158'></a><a href='#L158'>158</a>
224
- <a name='L159'></a><a href='#L159'>159</a>
225
- <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a>
227
- <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a>
229
- <a name='L164'></a><a href='#L164'>164</a>
230
- <a name='L165'></a><a href='#L165'>165</a>
231
- <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a>
233
- <a name='L168'></a><a href='#L168'>168</a>
234
- <a name='L169'></a><a href='#L169'>169</a>
235
- <a name='L170'></a><a href='#L170'>170</a>
236
- <a name='L171'></a><a href='#L171'>171</a>
237
- <a name='L172'></a><a href='#L172'>172</a>
238
- <a name='L173'></a><a href='#L173'>173</a>
239
- <a name='L174'></a><a href='#L174'>174</a>
240
- <a name='L175'></a><a href='#L175'>175</a>
241
- <a name='L176'></a><a href='#L176'>176</a>
242
- <a name='L177'></a><a href='#L177'>177</a>
243
- <a name='L178'></a><a href='#L178'>178</a>
244
- <a name='L179'></a><a href='#L179'>179</a>
245
- <a name='L180'></a><a href='#L180'>180</a>
246
- <a name='L181'></a><a href='#L181'>181</a>
247
- <a name='L182'></a><a href='#L182'>182</a>
248
- <a name='L183'></a><a href='#L183'>183</a>
249
- <a name='L184'></a><a href='#L184'>184</a>
250
- <a name='L185'></a><a href='#L185'>185</a>
251
- <a name='L186'></a><a href='#L186'>186</a>
252
- <a name='L187'></a><a href='#L187'>187</a>
253
- <a name='L188'></a><a href='#L188'>188</a>
254
- <a name='L189'></a><a href='#L189'>189</a>
255
- <a name='L190'></a><a href='#L190'>190</a>
256
- <a name='L191'></a><a href='#L191'>191</a>
257
- <a name='L192'></a><a href='#L192'>192</a>
258
- <a name='L193'></a><a href='#L193'>193</a>
259
- <a name='L194'></a><a href='#L194'>194</a>
260
- <a name='L195'></a><a href='#L195'>195</a>
261
- <a name='L196'></a><a href='#L196'>196</a>
262
- <a name='L197'></a><a href='#L197'>197</a>
263
- <a name='L198'></a><a href='#L198'>198</a>
264
- <a name='L199'></a><a href='#L199'>199</a>
265
- <a name='L200'></a><a href='#L200'>200</a>
266
- <a name='L201'></a><a href='#L201'>201</a>
267
- <a name='L202'></a><a href='#L202'>202</a>
268
- <a name='L203'></a><a href='#L203'>203</a>
269
- <a name='L204'></a><a href='#L204'>204</a>
270
- <a name='L205'></a><a href='#L205'>205</a>
271
- <a name='L206'></a><a href='#L206'>206</a>
272
- <a name='L207'></a><a href='#L207'>207</a>
273
- <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a>
275
- <a name='L210'></a><a href='#L210'>210</a>
276
- <a name='L211'></a><a href='#L211'>211</a>
277
- <a name='L212'></a><a href='#L212'>212</a>
278
- <a name='L213'></a><a href='#L213'>213</a>
279
- <a name='L214'></a><a href='#L214'>214</a>
280
- <a name='L215'></a><a href='#L215'>215</a>
281
- <a name='L216'></a><a href='#L216'>216</a>
282
- <a name='L217'></a><a href='#L217'>217</a>
283
- <a name='L218'></a><a href='#L218'>218</a>
284
- <a name='L219'></a><a href='#L219'>219</a>
285
- <a name='L220'></a><a href='#L220'>220</a>
286
- <a name='L221'></a><a href='#L221'>221</a>
287
- <a name='L222'></a><a href='#L222'>222</a>
288
- <a name='L223'></a><a href='#L223'>223</a>
289
- <a name='L224'></a><a href='#L224'>224</a>
290
- <a name='L225'></a><a href='#L225'>225</a>
291
- <a name='L226'></a><a href='#L226'>226</a>
292
- <a name='L227'></a><a href='#L227'>227</a>
293
- <a name='L228'></a><a href='#L228'>228</a>
294
- <a name='L229'></a><a href='#L229'>229</a>
295
- <a name='L230'></a><a href='#L230'>230</a>
296
- <a name='L231'></a><a href='#L231'>231</a>
297
- <a name='L232'></a><a href='#L232'>232</a>
298
- <a name='L233'></a><a href='#L233'>233</a>
299
- <a name='L234'></a><a href='#L234'>234</a>
300
- <a name='L235'></a><a href='#L235'>235</a>
301
- <a name='L236'></a><a href='#L236'>236</a>
302
- <a name='L237'></a><a href='#L237'>237</a>
303
- <a name='L238'></a><a href='#L238'>238</a>
304
- <a name='L239'></a><a href='#L239'>239</a>
305
- <a name='L240'></a><a href='#L240'>240</a>
306
- <a name='L241'></a><a href='#L241'>241</a>
307
- <a name='L242'></a><a href='#L242'>242</a>
308
- <a name='L243'></a><a href='#L243'>243</a>
309
- <a name='L244'></a><a href='#L244'>244</a>
310
- <a name='L245'></a><a href='#L245'>245</a>
311
- <a name='L246'></a><a href='#L246'>246</a>
312
- <a name='L247'></a><a href='#L247'>247</a>
313
- <a name='L248'></a><a href='#L248'>248</a>
314
- <a name='L249'></a><a href='#L249'>249</a>
315
- <a name='L250'></a><a href='#L250'>250</a>
316
- <a name='L251'></a><a href='#L251'>251</a>
317
- <a name='L252'></a><a href='#L252'>252</a>
318
- <a name='L253'></a><a href='#L253'>253</a>
319
- <a name='L254'></a><a href='#L254'>254</a>
320
- <a name='L255'></a><a href='#L255'>255</a>
321
- <a name='L256'></a><a href='#L256'>256</a>
322
- <a name='L257'></a><a href='#L257'>257</a>
323
- <a name='L258'></a><a href='#L258'>258</a>
324
- <a name='L259'></a><a href='#L259'>259</a>
325
- <a name='L260'></a><a href='#L260'>260</a>
326
- <a name='L261'></a><a href='#L261'>261</a>
327
- <a name='L262'></a><a href='#L262'>262</a>
328
- <a name='L263'></a><a href='#L263'>263</a>
329
- <a name='L264'></a><a href='#L264'>264</a>
330
- <a name='L265'></a><a href='#L265'>265</a>
331
- <a name='L266'></a><a href='#L266'>266</a>
332
- <a name='L267'></a><a href='#L267'>267</a>
333
- <a name='L268'></a><a href='#L268'>268</a>
334
- <a name='L269'></a><a href='#L269'>269</a>
335
- <a name='L270'></a><a href='#L270'>270</a>
336
- <a name='L271'></a><a href='#L271'>271</a>
337
- <a name='L272'></a><a href='#L272'>272</a>
338
- <a name='L273'></a><a href='#L273'>273</a>
339
- <a name='L274'></a><a href='#L274'>274</a>
340
- <a name='L275'></a><a href='#L275'>275</a>
341
- <a name='L276'></a><a href='#L276'>276</a>
342
- <a name='L277'></a><a href='#L277'>277</a>
343
- <a name='L278'></a><a href='#L278'>278</a>
344
- <a name='L279'></a><a href='#L279'>279</a>
345
- <a name='L280'></a><a href='#L280'>280</a>
346
- <a name='L281'></a><a href='#L281'>281</a>
347
- <a name='L282'></a><a href='#L282'>282</a>
348
- <a name='L283'></a><a href='#L283'>283</a>
349
- <a name='L284'></a><a href='#L284'>284</a>
350
- <a name='L285'></a><a href='#L285'>285</a>
351
- <a name='L286'></a><a href='#L286'>286</a>
352
- <a name='L287'></a><a href='#L287'>287</a>
353
- <a name='L288'></a><a href='#L288'>288</a>
354
- <a name='L289'></a><a href='#L289'>289</a>
355
- <a name='L290'></a><a href='#L290'>290</a>
356
- <a name='L291'></a><a href='#L291'>291</a>
357
- <a name='L292'></a><a href='#L292'>292</a>
358
- <a name='L293'></a><a href='#L293'>293</a>
359
- <a name='L294'></a><a href='#L294'>294</a>
360
- <a name='L295'></a><a href='#L295'>295</a>
361
- <a name='L296'></a><a href='#L296'>296</a>
362
- <a name='L297'></a><a href='#L297'>297</a>
363
- <a name='L298'></a><a href='#L298'>298</a>
364
- <a name='L299'></a><a href='#L299'>299</a>
365
- <a name='L300'></a><a href='#L300'>300</a>
366
- <a name='L301'></a><a href='#L301'>301</a>
367
- <a name='L302'></a><a href='#L302'>302</a>
368
- <a name='L303'></a><a href='#L303'>303</a>
369
- <a name='L304'></a><a href='#L304'>304</a>
370
- <a name='L305'></a><a href='#L305'>305</a>
371
- <a name='L306'></a><a href='#L306'>306</a>
372
- <a name='L307'></a><a href='#L307'>307</a>
373
- <a name='L308'></a><a href='#L308'>308</a>
374
- <a name='L309'></a><a href='#L309'>309</a>
375
- <a name='L310'></a><a href='#L310'>310</a>
376
- <a name='L311'></a><a href='#L311'>311</a>
377
- <a name='L312'></a><a href='#L312'>312</a>
378
- <a name='L313'></a><a href='#L313'>313</a>
379
- <a name='L314'></a><a href='#L314'>314</a>
380
- <a name='L315'></a><a href='#L315'>315</a>
381
- <a name='L316'></a><a href='#L316'>316</a>
382
- <a name='L317'></a><a href='#L317'>317</a>
383
- <a name='L318'></a><a href='#L318'>318</a>
384
- <a name='L319'></a><a href='#L319'>319</a>
385
- <a name='L320'></a><a href='#L320'>320</a>
386
- <a name='L321'></a><a href='#L321'>321</a>
387
- <a name='L322'></a><a href='#L322'>322</a>
388
- <a name='L323'></a><a href='#L323'>323</a>
389
- <a name='L324'></a><a href='#L324'>324</a>
390
- <a name='L325'></a><a href='#L325'>325</a>
391
- <a name='L326'></a><a href='#L326'>326</a>
392
- <a name='L327'></a><a href='#L327'>327</a>
393
- <a name='L328'></a><a href='#L328'>328</a>
394
- <a name='L329'></a><a href='#L329'>329</a>
395
- <a name='L330'></a><a href='#L330'>330</a>
396
- <a name='L331'></a><a href='#L331'>331</a>
397
- <a name='L332'></a><a href='#L332'>332</a>
398
- <a name='L333'></a><a href='#L333'>333</a>
399
- <a name='L334'></a><a href='#L334'>334</a>
400
- <a name='L335'></a><a href='#L335'>335</a>
401
- <a name='L336'></a><a href='#L336'>336</a>
402
- <a name='L337'></a><a href='#L337'>337</a>
403
- <a name='L338'></a><a href='#L338'>338</a>
404
- <a name='L339'></a><a href='#L339'>339</a>
405
- <a name='L340'></a><a href='#L340'>340</a>
406
- <a name='L341'></a><a href='#L341'>341</a>
407
- <a name='L342'></a><a href='#L342'>342</a>
408
- <a name='L343'></a><a href='#L343'>343</a>
409
- <a name='L344'></a><a href='#L344'>344</a>
410
- <a name='L345'></a><a href='#L345'>345</a>
411
- <a name='L346'></a><a href='#L346'>346</a>
412
- <a name='L347'></a><a href='#L347'>347</a>
413
- <a name='L348'></a><a href='#L348'>348</a>
414
- <a name='L349'></a><a href='#L349'>349</a>
415
- <a name='L350'></a><a href='#L350'>350</a>
416
- <a name='L351'></a><a href='#L351'>351</a>
417
- <a name='L352'></a><a href='#L352'>352</a>
418
- <a name='L353'></a><a href='#L353'>353</a>
419
- <a name='L354'></a><a href='#L354'>354</a>
420
- <a name='L355'></a><a href='#L355'>355</a>
421
- <a name='L356'></a><a href='#L356'>356</a>
422
- <a name='L357'></a><a href='#L357'>357</a>
423
- <a name='L358'></a><a href='#L358'>358</a>
424
- <a name='L359'></a><a href='#L359'>359</a>
425
- <a name='L360'></a><a href='#L360'>360</a>
426
- <a name='L361'></a><a href='#L361'>361</a>
427
- <a name='L362'></a><a href='#L362'>362</a>
428
- <a name='L363'></a><a href='#L363'>363</a>
429
- <a name='L364'></a><a href='#L364'>364</a>
430
- <a name='L365'></a><a href='#L365'>365</a>
431
- <a name='L366'></a><a href='#L366'>366</a>
432
- <a name='L367'></a><a href='#L367'>367</a>
433
- <a name='L368'></a><a href='#L368'>368</a>
434
- <a name='L369'></a><a href='#L369'>369</a>
435
- <a name='L370'></a><a href='#L370'>370</a>
436
- <a name='L371'></a><a href='#L371'>371</a>
437
- <a name='L372'></a><a href='#L372'>372</a>
438
- <a name='L373'></a><a href='#L373'>373</a>
439
- <a name='L374'></a><a href='#L374'>374</a>
440
- <a name='L375'></a><a href='#L375'>375</a>
441
- <a name='L376'></a><a href='#L376'>376</a>
442
- <a name='L377'></a><a href='#L377'>377</a>
443
- <a name='L378'></a><a href='#L378'>378</a>
444
- <a name='L379'></a><a href='#L379'>379</a>
445
- <a name='L380'></a><a href='#L380'>380</a>
446
- <a name='L381'></a><a href='#L381'>381</a>
447
- <a name='L382'></a><a href='#L382'>382</a>
448
- <a name='L383'></a><a href='#L383'>383</a>
449
- <a name='L384'></a><a href='#L384'>384</a>
450
- <a name='L385'></a><a href='#L385'>385</a>
451
- <a name='L386'></a><a href='#L386'>386</a>
452
- <a name='L387'></a><a href='#L387'>387</a>
453
- <a name='L388'></a><a href='#L388'>388</a>
454
- <a name='L389'></a><a href='#L389'>389</a>
455
- <a name='L390'></a><a href='#L390'>390</a>
456
- <a name='L391'></a><a href='#L391'>391</a>
457
- <a name='L392'></a><a href='#L392'>392</a>
458
- <a name='L393'></a><a href='#L393'>393</a>
459
- <a name='L394'></a><a href='#L394'>394</a>
460
- <a name='L395'></a><a href='#L395'>395</a>
461
- <a name='L396'></a><a href='#L396'>396</a>
462
- <a name='L397'></a><a href='#L397'>397</a>
463
- <a name='L398'></a><a href='#L398'>398</a>
464
- <a name='L399'></a><a href='#L399'>399</a>
465
- <a name='L400'></a><a href='#L400'>400</a>
466
- <a name='L401'></a><a href='#L401'>401</a>
467
- <a name='L402'></a><a href='#L402'>402</a>
468
- <a name='L403'></a><a href='#L403'>403</a>
469
- <a name='L404'></a><a href='#L404'>404</a>
470
- <a name='L405'></a><a href='#L405'>405</a>
471
- <a name='L406'></a><a href='#L406'>406</a>
472
- <a name='L407'></a><a href='#L407'>407</a>
473
- <a name='L408'></a><a href='#L408'>408</a>
474
- <a name='L409'></a><a href='#L409'>409</a>
475
- <a name='L410'></a><a href='#L410'>410</a>
476
- <a name='L411'></a><a href='#L411'>411</a>
477
- <a name='L412'></a><a href='#L412'>412</a>
478
- <a name='L413'></a><a href='#L413'>413</a>
479
- <a name='L414'></a><a href='#L414'>414</a>
480
- <a name='L415'></a><a href='#L415'>415</a>
481
- <a name='L416'></a><a href='#L416'>416</a>
482
- <a name='L417'></a><a href='#L417'>417</a>
483
- <a name='L418'></a><a href='#L418'>418</a>
484
- <a name='L419'></a><a href='#L419'>419</a>
485
- <a name='L420'></a><a href='#L420'>420</a>
486
- <a name='L421'></a><a href='#L421'>421</a>
487
- <a name='L422'></a><a href='#L422'>422</a>
488
- <a name='L423'></a><a href='#L423'>423</a>
489
- <a name='L424'></a><a href='#L424'>424</a>
490
- <a name='L425'></a><a href='#L425'>425</a>
491
- <a name='L426'></a><a href='#L426'>426</a>
492
- <a name='L427'></a><a href='#L427'>427</a>
493
- <a name='L428'></a><a href='#L428'>428</a>
494
- <a name='L429'></a><a href='#L429'>429</a>
495
- <a name='L430'></a><a href='#L430'>430</a>
496
- <a name='L431'></a><a href='#L431'>431</a>
497
- <a name='L432'></a><a href='#L432'>432</a>
498
- <a name='L433'></a><a href='#L433'>433</a>
499
- <a name='L434'></a><a href='#L434'>434</a>
500
- <a name='L435'></a><a href='#L435'>435</a>
501
- <a name='L436'></a><a href='#L436'>436</a>
502
- <a name='L437'></a><a href='#L437'>437</a>
503
- <a name='L438'></a><a href='#L438'>438</a>
504
- <a name='L439'></a><a href='#L439'>439</a>
505
- <a name='L440'></a><a href='#L440'>440</a>
506
- <a name='L441'></a><a href='#L441'>441</a>
507
- <a name='L442'></a><a href='#L442'>442</a>
508
- <a name='L443'></a><a href='#L443'>443</a>
509
- <a name='L444'></a><a href='#L444'>444</a>
510
- <a name='L445'></a><a href='#L445'>445</a>
511
- <a name='L446'></a><a href='#L446'>446</a>
512
- <a name='L447'></a><a href='#L447'>447</a>
513
- <a name='L448'></a><a href='#L448'>448</a>
514
- <a name='L449'></a><a href='#L449'>449</a>
515
- <a name='L450'></a><a href='#L450'>450</a>
516
- <a name='L451'></a><a href='#L451'>451</a>
517
- <a name='L452'></a><a href='#L452'>452</a>
518
- <a name='L453'></a><a href='#L453'>453</a>
519
- <a name='L454'></a><a href='#L454'>454</a>
520
- <a name='L455'></a><a href='#L455'>455</a>
521
- <a name='L456'></a><a href='#L456'>456</a>
522
- <a name='L457'></a><a href='#L457'>457</a>
523
- <a name='L458'></a><a href='#L458'>458</a>
524
- <a name='L459'></a><a href='#L459'>459</a>
525
- <a name='L460'></a><a href='#L460'>460</a>
526
- <a name='L461'></a><a href='#L461'>461</a>
527
- <a name='L462'></a><a href='#L462'>462</a>
528
- <a name='L463'></a><a href='#L463'>463</a>
529
- <a name='L464'></a><a href='#L464'>464</a>
530
- <a name='L465'></a><a href='#L465'>465</a>
531
- <a name='L466'></a><a href='#L466'>466</a>
532
- <a name='L467'></a><a href='#L467'>467</a>
533
- <a name='L468'></a><a href='#L468'>468</a>
534
- <a name='L469'></a><a href='#L469'>469</a>
535
- <a name='L470'></a><a href='#L470'>470</a>
536
- <a name='L471'></a><a href='#L471'>471</a>
537
- <a name='L472'></a><a href='#L472'>472</a>
538
- <a name='L473'></a><a href='#L473'>473</a>
539
- <a name='L474'></a><a href='#L474'>474</a>
540
- <a name='L475'></a><a href='#L475'>475</a>
541
- <a name='L476'></a><a href='#L476'>476</a>
542
- <a name='L477'></a><a href='#L477'>477</a>
543
- <a name='L478'></a><a href='#L478'>478</a>
544
- <a name='L479'></a><a href='#L479'>479</a>
545
- <a name='L480'></a><a href='#L480'>480</a>
546
- <a name='L481'></a><a href='#L481'>481</a>
547
- <a name='L482'></a><a href='#L482'>482</a>
548
- <a name='L483'></a><a href='#L483'>483</a>
549
- <a name='L484'></a><a href='#L484'>484</a>
550
- <a name='L485'></a><a href='#L485'>485</a>
551
- <a name='L486'></a><a href='#L486'>486</a>
552
- <a name='L487'></a><a href='#L487'>487</a>
553
- <a name='L488'></a><a href='#L488'>488</a>
554
- <a name='L489'></a><a href='#L489'>489</a>
555
- <a name='L490'></a><a href='#L490'>490</a>
556
- <a name='L491'></a><a href='#L491'>491</a>
557
- <a name='L492'></a><a href='#L492'>492</a>
558
- <a name='L493'></a><a href='#L493'>493</a>
559
- <a name='L494'></a><a href='#L494'>494</a>
560
- <a name='L495'></a><a href='#L495'>495</a>
561
- <a name='L496'></a><a href='#L496'>496</a>
562
- <a name='L497'></a><a href='#L497'>497</a>
563
- <a name='L498'></a><a href='#L498'>498</a>
564
- <a name='L499'></a><a href='#L499'>499</a>
565
- <a name='L500'></a><a href='#L500'>500</a>
566
- <a name='L501'></a><a href='#L501'>501</a>
567
- <a name='L502'></a><a href='#L502'>502</a>
568
- <a name='L503'></a><a href='#L503'>503</a>
569
- <a name='L504'></a><a href='#L504'>504</a>
570
- <a name='L505'></a><a href='#L505'>505</a>
571
- <a name='L506'></a><a href='#L506'>506</a>
572
- <a name='L507'></a><a href='#L507'>507</a>
573
- <a name='L508'></a><a href='#L508'>508</a>
574
- <a name='L509'></a><a href='#L509'>509</a>
575
- <a name='L510'></a><a href='#L510'>510</a>
576
- <a name='L511'></a><a href='#L511'>511</a>
577
- <a name='L512'></a><a href='#L512'>512</a>
578
- <a name='L513'></a><a href='#L513'>513</a>
579
- <a name='L514'></a><a href='#L514'>514</a>
580
- <a name='L515'></a><a href='#L515'>515</a>
581
- <a name='L516'></a><a href='#L516'>516</a>
582
- <a name='L517'></a><a href='#L517'>517</a>
583
- <a name='L518'></a><a href='#L518'>518</a>
584
- <a name='L519'></a><a href='#L519'>519</a>
585
- <a name='L520'></a><a href='#L520'>520</a>
586
- <a name='L521'></a><a href='#L521'>521</a>
587
- <a name='L522'></a><a href='#L522'>522</a>
588
- <a name='L523'></a><a href='#L523'>523</a>
589
- <a name='L524'></a><a href='#L524'>524</a>
590
- <a name='L525'></a><a href='#L525'>525</a>
591
- <a name='L526'></a><a href='#L526'>526</a>
592
- <a name='L527'></a><a href='#L527'>527</a>
593
- <a name='L528'></a><a href='#L528'>528</a>
594
- <a name='L529'></a><a href='#L529'>529</a>
595
- <a name='L530'></a><a href='#L530'>530</a>
596
- <a name='L531'></a><a href='#L531'>531</a>
597
- <a name='L532'></a><a href='#L532'>532</a>
598
- <a name='L533'></a><a href='#L533'>533</a>
599
- <a name='L534'></a><a href='#L534'>534</a>
600
- <a name='L535'></a><a href='#L535'>535</a>
601
- <a name='L536'></a><a href='#L536'>536</a>
602
- <a name='L537'></a><a href='#L537'>537</a>
603
- <a name='L538'></a><a href='#L538'>538</a>
604
- <a name='L539'></a><a href='#L539'>539</a>
605
- <a name='L540'></a><a href='#L540'>540</a>
606
- <a name='L541'></a><a href='#L541'>541</a>
607
- <a name='L542'></a><a href='#L542'>542</a>
608
- <a name='L543'></a><a href='#L543'>543</a>
609
- <a name='L544'></a><a href='#L544'>544</a>
610
- <a name='L545'></a><a href='#L545'>545</a>
611
- <a name='L546'></a><a href='#L546'>546</a>
612
- <a name='L547'></a><a href='#L547'>547</a>
613
- <a name='L548'></a><a href='#L548'>548</a>
614
- <a name='L549'></a><a href='#L549'>549</a>
615
- <a name='L550'></a><a href='#L550'>550</a>
616
- <a name='L551'></a><a href='#L551'>551</a>
617
- <a name='L552'></a><a href='#L552'>552</a>
618
- <a name='L553'></a><a href='#L553'>553</a>
619
- <a name='L554'></a><a href='#L554'>554</a>
620
- <a name='L555'></a><a href='#L555'>555</a>
621
- <a name='L556'></a><a href='#L556'>556</a>
622
- <a name='L557'></a><a href='#L557'>557</a>
623
- <a name='L558'></a><a href='#L558'>558</a>
624
- <a name='L559'></a><a href='#L559'>559</a>
625
- <a name='L560'></a><a href='#L560'>560</a>
626
- <a name='L561'></a><a href='#L561'>561</a>
627
- <a name='L562'></a><a href='#L562'>562</a>
628
- <a name='L563'></a><a href='#L563'>563</a>
629
- <a name='L564'></a><a href='#L564'>564</a>
630
- <a name='L565'></a><a href='#L565'>565</a>
631
- <a name='L566'></a><a href='#L566'>566</a>
632
- <a name='L567'></a><a href='#L567'>567</a>
633
- <a name='L568'></a><a href='#L568'>568</a>
634
- <a name='L569'></a><a href='#L569'>569</a>
635
- <a name='L570'></a><a href='#L570'>570</a>
636
- <a name='L571'></a><a href='#L571'>571</a>
637
- <a name='L572'></a><a href='#L572'>572</a>
638
- <a name='L573'></a><a href='#L573'>573</a>
639
- <a name='L574'></a><a href='#L574'>574</a>
640
- <a name='L575'></a><a href='#L575'>575</a>
641
- <a name='L576'></a><a href='#L576'>576</a>
642
- <a name='L577'></a><a href='#L577'>577</a>
643
- <a name='L578'></a><a href='#L578'>578</a>
644
- <a name='L579'></a><a href='#L579'>579</a>
645
- <a name='L580'></a><a href='#L580'>580</a>
646
- <a name='L581'></a><a href='#L581'>581</a>
647
- <a name='L582'></a><a href='#L582'>582</a>
648
- <a name='L583'></a><a href='#L583'>583</a>
649
- <a name='L584'></a><a href='#L584'>584</a>
650
- <a name='L585'></a><a href='#L585'>585</a>
651
- <a name='L586'></a><a href='#L586'>586</a>
652
- <a name='L587'></a><a href='#L587'>587</a>
653
- <a name='L588'></a><a href='#L588'>588</a>
654
- <a name='L589'></a><a href='#L589'>589</a>
655
- <a name='L590'></a><a href='#L590'>590</a>
656
- <a name='L591'></a><a href='#L591'>591</a>
657
- <a name='L592'></a><a href='#L592'>592</a>
658
- <a name='L593'></a><a href='#L593'>593</a>
659
- <a name='L594'></a><a href='#L594'>594</a>
660
- <a name='L595'></a><a href='#L595'>595</a>
661
- <a name='L596'></a><a href='#L596'>596</a>
662
- <a name='L597'></a><a href='#L597'>597</a>
663
- <a name='L598'></a><a href='#L598'>598</a>
664
- <a name='L599'></a><a href='#L599'>599</a>
665
- <a name='L600'></a><a href='#L600'>600</a>
666
- <a name='L601'></a><a href='#L601'>601</a>
667
- <a name='L602'></a><a href='#L602'>602</a>
668
- <a name='L603'></a><a href='#L603'>603</a>
669
- <a name='L604'></a><a href='#L604'>604</a>
670
- <a name='L605'></a><a href='#L605'>605</a>
671
- <a name='L606'></a><a href='#L606'>606</a>
672
- <a name='L607'></a><a href='#L607'>607</a>
673
- <a name='L608'></a><a href='#L608'>608</a>
674
- <a name='L609'></a><a href='#L609'>609</a>
675
- <a name='L610'></a><a href='#L610'>610</a>
676
- <a name='L611'></a><a href='#L611'>611</a>
677
- <a name='L612'></a><a href='#L612'>612</a>
678
- <a name='L613'></a><a href='#L613'>613</a>
679
- <a name='L614'></a><a href='#L614'>614</a>
680
- <a name='L615'></a><a href='#L615'>615</a>
681
- <a name='L616'></a><a href='#L616'>616</a>
682
- <a name='L617'></a><a href='#L617'>617</a>
683
- <a name='L618'></a><a href='#L618'>618</a>
684
- <a name='L619'></a><a href='#L619'>619</a>
685
- <a name='L620'></a><a href='#L620'>620</a>
686
- <a name='L621'></a><a href='#L621'>621</a>
687
- <a name='L622'></a><a href='#L622'>622</a>
688
- <a name='L623'></a><a href='#L623'>623</a>
689
- <a name='L624'></a><a href='#L624'>624</a>
690
- <a name='L625'></a><a href='#L625'>625</a>
691
- <a name='L626'></a><a href='#L626'>626</a>
692
- <a name='L627'></a><a href='#L627'>627</a>
693
- <a name='L628'></a><a href='#L628'>628</a>
694
- <a name='L629'></a><a href='#L629'>629</a>
695
- <a name='L630'></a><a href='#L630'>630</a>
696
- <a name='L631'></a><a href='#L631'>631</a>
697
- <a name='L632'></a><a href='#L632'>632</a>
698
- <a name='L633'></a><a href='#L633'>633</a>
699
- <a name='L634'></a><a href='#L634'>634</a>
700
- <a name='L635'></a><a href='#L635'>635</a>
701
- <a name='L636'></a><a href='#L636'>636</a>
702
- <a name='L637'></a><a href='#L637'>637</a>
703
- <a name='L638'></a><a href='#L638'>638</a>
704
- <a name='L639'></a><a href='#L639'>639</a>
705
- <a name='L640'></a><a href='#L640'>640</a>
706
- <a name='L641'></a><a href='#L641'>641</a>
707
- <a name='L642'></a><a href='#L642'>642</a>
708
- <a name='L643'></a><a href='#L643'>643</a>
709
- <a name='L644'></a><a href='#L644'>644</a>
710
- <a name='L645'></a><a href='#L645'>645</a>
711
- <a name='L646'></a><a href='#L646'>646</a>
712
- <a name='L647'></a><a href='#L647'>647</a>
713
- <a name='L648'></a><a href='#L648'>648</a>
714
- <a name='L649'></a><a href='#L649'>649</a>
715
- <a name='L650'></a><a href='#L650'>650</a>
716
- <a name='L651'></a><a href='#L651'>651</a>
717
- <a name='L652'></a><a href='#L652'>652</a>
718
- <a name='L653'></a><a href='#L653'>653</a>
719
- <a name='L654'></a><a href='#L654'>654</a>
720
- <a name='L655'></a><a href='#L655'>655</a>
721
- <a name='L656'></a><a href='#L656'>656</a>
722
- <a name='L657'></a><a href='#L657'>657</a>
723
- <a name='L658'></a><a href='#L658'>658</a>
724
- <a name='L659'></a><a href='#L659'>659</a>
725
- <a name='L660'></a><a href='#L660'>660</a>
726
- <a name='L661'></a><a href='#L661'>661</a>
727
- <a name='L662'></a><a href='#L662'>662</a>
728
- <a name='L663'></a><a href='#L663'>663</a>
729
- <a name='L664'></a><a href='#L664'>664</a>
730
- <a name='L665'></a><a href='#L665'>665</a>
731
- <a name='L666'></a><a href='#L666'>666</a>
732
- <a name='L667'></a><a href='#L667'>667</a>
733
- <a name='L668'></a><a href='#L668'>668</a>
734
- <a name='L669'></a><a href='#L669'>669</a>
735
- <a name='L670'></a><a href='#L670'>670</a>
736
- <a name='L671'></a><a href='#L671'>671</a>
737
- <a name='L672'></a><a href='#L672'>672</a>
738
- <a name='L673'></a><a href='#L673'>673</a>
739
- <a name='L674'></a><a href='#L674'>674</a>
740
- <a name='L675'></a><a href='#L675'>675</a>
741
- <a name='L676'></a><a href='#L676'>676</a>
742
- <a name='L677'></a><a href='#L677'>677</a>
743
- <a name='L678'></a><a href='#L678'>678</a>
744
- <a name='L679'></a><a href='#L679'>679</a>
745
- <a name='L680'></a><a href='#L680'>680</a>
746
- <a name='L681'></a><a href='#L681'>681</a>
747
- <a name='L682'></a><a href='#L682'>682</a>
748
- <a name='L683'></a><a href='#L683'>683</a>
749
- <a name='L684'></a><a href='#L684'>684</a>
750
- <a name='L685'></a><a href='#L685'>685</a>
751
- <a name='L686'></a><a href='#L686'>686</a>
752
- <a name='L687'></a><a href='#L687'>687</a>
753
- <a name='L688'></a><a href='#L688'>688</a>
754
- <a name='L689'></a><a href='#L689'>689</a>
755
- <a name='L690'></a><a href='#L690'>690</a>
756
- <a name='L691'></a><a href='#L691'>691</a>
757
- <a name='L692'></a><a href='#L692'>692</a>
758
- <a name='L693'></a><a href='#L693'>693</a>
759
- <a name='L694'></a><a href='#L694'>694</a>
760
- <a name='L695'></a><a href='#L695'>695</a>
761
- <a name='L696'></a><a href='#L696'>696</a>
762
- <a name='L697'></a><a href='#L697'>697</a>
763
- <a name='L698'></a><a href='#L698'>698</a>
764
- <a name='L699'></a><a href='#L699'>699</a>
765
- <a name='L700'></a><a href='#L700'>700</a>
766
- <a name='L701'></a><a href='#L701'>701</a>
767
- <a name='L702'></a><a href='#L702'>702</a>
768
- <a name='L703'></a><a href='#L703'>703</a>
769
- <a name='L704'></a><a href='#L704'>704</a>
770
- <a name='L705'></a><a href='#L705'>705</a>
771
- <a name='L706'></a><a href='#L706'>706</a>
772
- <a name='L707'></a><a href='#L707'>707</a>
773
- <a name='L708'></a><a href='#L708'>708</a>
774
- <a name='L709'></a><a href='#L709'>709</a>
775
- <a name='L710'></a><a href='#L710'>710</a>
776
- <a name='L711'></a><a href='#L711'>711</a>
777
- <a name='L712'></a><a href='#L712'>712</a>
778
- <a name='L713'></a><a href='#L713'>713</a>
779
- <a name='L714'></a><a href='#L714'>714</a>
780
- <a name='L715'></a><a href='#L715'>715</a>
781
- <a name='L716'></a><a href='#L716'>716</a>
782
- <a name='L717'></a><a href='#L717'>717</a>
783
- <a name='L718'></a><a href='#L718'>718</a>
784
- <a name='L719'></a><a href='#L719'>719</a>
785
- <a name='L720'></a><a href='#L720'>720</a>
786
- <a name='L721'></a><a href='#L721'>721</a>
787
- <a name='L722'></a><a href='#L722'>722</a>
788
- <a name='L723'></a><a href='#L723'>723</a>
789
- <a name='L724'></a><a href='#L724'>724</a>
790
- <a name='L725'></a><a href='#L725'>725</a>
791
- <a name='L726'></a><a href='#L726'>726</a>
792
- <a name='L727'></a><a href='#L727'>727</a>
793
- <a name='L728'></a><a href='#L728'>728</a>
794
- <a name='L729'></a><a href='#L729'>729</a>
795
- <a name='L730'></a><a href='#L730'>730</a>
796
- <a name='L731'></a><a href='#L731'>731</a>
797
- <a name='L732'></a><a href='#L732'>732</a>
798
- <a name='L733'></a><a href='#L733'>733</a>
799
- <a name='L734'></a><a href='#L734'>734</a>
800
- <a name='L735'></a><a href='#L735'>735</a>
801
- <a name='L736'></a><a href='#L736'>736</a>
802
- <a name='L737'></a><a href='#L737'>737</a>
803
- <a name='L738'></a><a href='#L738'>738</a>
804
- <a name='L739'></a><a href='#L739'>739</a>
805
- <a name='L740'></a><a href='#L740'>740</a>
806
- <a name='L741'></a><a href='#L741'>741</a>
807
- <a name='L742'></a><a href='#L742'>742</a>
808
- <a name='L743'></a><a href='#L743'>743</a>
809
- <a name='L744'></a><a href='#L744'>744</a>
810
- <a name='L745'></a><a href='#L745'>745</a>
811
- <a name='L746'></a><a href='#L746'>746</a>
812
- <a name='L747'></a><a href='#L747'>747</a>
813
- <a name='L748'></a><a href='#L748'>748</a>
814
- <a name='L749'></a><a href='#L749'>749</a>
815
- <a name='L750'></a><a href='#L750'>750</a>
816
- <a name='L751'></a><a href='#L751'>751</a>
817
- <a name='L752'></a><a href='#L752'>752</a>
818
- <a name='L753'></a><a href='#L753'>753</a>
819
- <a name='L754'></a><a href='#L754'>754</a>
820
- <a name='L755'></a><a href='#L755'>755</a>
821
- <a name='L756'></a><a href='#L756'>756</a>
822
- <a name='L757'></a><a href='#L757'>757</a>
823
- <a name='L758'></a><a href='#L758'>758</a>
824
- <a name='L759'></a><a href='#L759'>759</a>
825
- <a name='L760'></a><a href='#L760'>760</a>
826
- <a name='L761'></a><a href='#L761'>761</a>
827
- <a name='L762'></a><a href='#L762'>762</a>
828
- <a name='L763'></a><a href='#L763'>763</a>
829
- <a name='L764'></a><a href='#L764'>764</a>
830
- <a name='L765'></a><a href='#L765'>765</a>
831
- <a name='L766'></a><a href='#L766'>766</a>
832
- <a name='L767'></a><a href='#L767'>767</a>
833
- <a name='L768'></a><a href='#L768'>768</a>
834
- <a name='L769'></a><a href='#L769'>769</a>
835
- <a name='L770'></a><a href='#L770'>770</a>
836
- <a name='L771'></a><a href='#L771'>771</a>
837
- <a name='L772'></a><a href='#L772'>772</a>
838
- <a name='L773'></a><a href='#L773'>773</a>
839
- <a name='L774'></a><a href='#L774'>774</a>
840
- <a name='L775'></a><a href='#L775'>775</a>
841
- <a name='L776'></a><a href='#L776'>776</a>
842
- <a name='L777'></a><a href='#L777'>777</a>
843
- <a name='L778'></a><a href='#L778'>778</a>
844
- <a name='L779'></a><a href='#L779'>779</a>
845
- <a name='L780'></a><a href='#L780'>780</a>
846
- <a name='L781'></a><a href='#L781'>781</a>
847
- <a name='L782'></a><a href='#L782'>782</a>
848
- <a name='L783'></a><a href='#L783'>783</a>
849
- <a name='L784'></a><a href='#L784'>784</a>
850
- <a name='L785'></a><a href='#L785'>785</a>
851
- <a name='L786'></a><a href='#L786'>786</a>
852
- <a name='L787'></a><a href='#L787'>787</a>
853
- <a name='L788'></a><a href='#L788'>788</a>
854
- <a name='L789'></a><a href='#L789'>789</a>
855
- <a name='L790'></a><a href='#L790'>790</a>
856
- <a name='L791'></a><a href='#L791'>791</a>
857
- <a name='L792'></a><a href='#L792'>792</a>
858
- <a name='L793'></a><a href='#L793'>793</a>
859
- <a name='L794'></a><a href='#L794'>794</a>
860
- <a name='L795'></a><a href='#L795'>795</a>
861
- <a name='L796'></a><a href='#L796'>796</a>
862
- <a name='L797'></a><a href='#L797'>797</a>
863
- <a name='L798'></a><a href='#L798'>798</a>
864
- <a name='L799'></a><a href='#L799'>799</a>
865
- <a name='L800'></a><a href='#L800'>800</a>
866
- <a name='L801'></a><a href='#L801'>801</a>
867
- <a name='L802'></a><a href='#L802'>802</a>
868
- <a name='L803'></a><a href='#L803'>803</a>
869
- <a name='L804'></a><a href='#L804'>804</a>
870
- <a name='L805'></a><a href='#L805'>805</a>
871
- <a name='L806'></a><a href='#L806'>806</a>
872
- <a name='L807'></a><a href='#L807'>807</a>
873
- <a name='L808'></a><a href='#L808'>808</a>
874
- <a name='L809'></a><a href='#L809'>809</a>
875
- <a name='L810'></a><a href='#L810'>810</a>
876
- <a name='L811'></a><a href='#L811'>811</a>
877
- <a name='L812'></a><a href='#L812'>812</a>
878
- <a name='L813'></a><a href='#L813'>813</a>
879
- <a name='L814'></a><a href='#L814'>814</a>
880
- <a name='L815'></a><a href='#L815'>815</a>
881
- <a name='L816'></a><a href='#L816'>816</a>
882
- <a name='L817'></a><a href='#L817'>817</a>
883
- <a name='L818'></a><a href='#L818'>818</a>
884
- <a name='L819'></a><a href='#L819'>819</a>
885
- <a name='L820'></a><a href='#L820'>820</a>
886
- <a name='L821'></a><a href='#L821'>821</a>
887
- <a name='L822'></a><a href='#L822'>822</a>
888
- <a name='L823'></a><a href='#L823'>823</a>
889
- <a name='L824'></a><a href='#L824'>824</a>
890
- <a name='L825'></a><a href='#L825'>825</a>
891
- <a name='L826'></a><a href='#L826'>826</a>
892
- <a name='L827'></a><a href='#L827'>827</a>
893
- <a name='L828'></a><a href='#L828'>828</a>
894
- <a name='L829'></a><a href='#L829'>829</a>
895
- <a name='L830'></a><a href='#L830'>830</a>
896
- <a name='L831'></a><a href='#L831'>831</a>
897
- <a name='L832'></a><a href='#L832'>832</a>
898
- <a name='L833'></a><a href='#L833'>833</a>
899
- <a name='L834'></a><a href='#L834'>834</a>
900
- <a name='L835'></a><a href='#L835'>835</a>
901
- <a name='L836'></a><a href='#L836'>836</a>
902
- <a name='L837'></a><a href='#L837'>837</a>
903
- <a name='L838'></a><a href='#L838'>838</a>
904
- <a name='L839'></a><a href='#L839'>839</a>
905
- <a name='L840'></a><a href='#L840'>840</a>
906
- <a name='L841'></a><a href='#L841'>841</a>
907
- <a name='L842'></a><a href='#L842'>842</a>
908
- <a name='L843'></a><a href='#L843'>843</a>
909
- <a name='L844'></a><a href='#L844'>844</a>
910
- <a name='L845'></a><a href='#L845'>845</a>
911
- <a name='L846'></a><a href='#L846'>846</a>
912
- <a name='L847'></a><a href='#L847'>847</a>
913
- <a name='L848'></a><a href='#L848'>848</a>
914
- <a name='L849'></a><a href='#L849'>849</a>
915
- <a name='L850'></a><a href='#L850'>850</a>
916
- <a name='L851'></a><a href='#L851'>851</a>
917
- <a name='L852'></a><a href='#L852'>852</a>
918
- <a name='L853'></a><a href='#L853'>853</a>
919
- <a name='L854'></a><a href='#L854'>854</a>
920
- <a name='L855'></a><a href='#L855'>855</a>
921
- <a name='L856'></a><a href='#L856'>856</a>
922
- <a name='L857'></a><a href='#L857'>857</a>
923
- <a name='L858'></a><a href='#L858'>858</a>
924
- <a name='L859'></a><a href='#L859'>859</a>
925
- <a name='L860'></a><a href='#L860'>860</a>
926
- <a name='L861'></a><a href='#L861'>861</a>
927
- <a name='L862'></a><a href='#L862'>862</a>
928
- <a name='L863'></a><a href='#L863'>863</a>
929
- <a name='L864'></a><a href='#L864'>864</a>
930
- <a name='L865'></a><a href='#L865'>865</a>
931
- <a name='L866'></a><a href='#L866'>866</a>
932
- <a name='L867'></a><a href='#L867'>867</a>
933
- <a name='L868'></a><a href='#L868'>868</a>
934
- <a name='L869'></a><a href='#L869'>869</a>
935
- <a name='L870'></a><a href='#L870'>870</a>
936
- <a name='L871'></a><a href='#L871'>871</a>
937
- <a name='L872'></a><a href='#L872'>872</a>
938
- <a name='L873'></a><a href='#L873'>873</a>
939
- <a name='L874'></a><a href='#L874'>874</a>
940
- <a name='L875'></a><a href='#L875'>875</a>
941
- <a name='L876'></a><a href='#L876'>876</a>
942
- <a name='L877'></a><a href='#L877'>877</a>
943
- <a name='L878'></a><a href='#L878'>878</a>
944
- <a name='L879'></a><a href='#L879'>879</a>
945
- <a name='L880'></a><a href='#L880'>880</a>
946
- <a name='L881'></a><a href='#L881'>881</a>
947
- <a name='L882'></a><a href='#L882'>882</a>
948
- <a name='L883'></a><a href='#L883'>883</a>
949
- <a name='L884'></a><a href='#L884'>884</a>
950
- <a name='L885'></a><a href='#L885'>885</a>
951
- <a name='L886'></a><a href='#L886'>886</a>
952
- <a name='L887'></a><a href='#L887'>887</a>
953
- <a name='L888'></a><a href='#L888'>888</a>
954
- <a name='L889'></a><a href='#L889'>889</a>
955
- <a name='L890'></a><a href='#L890'>890</a>
956
- <a name='L891'></a><a href='#L891'>891</a>
957
- <a name='L892'></a><a href='#L892'>892</a>
958
- <a name='L893'></a><a href='#L893'>893</a>
959
- <a name='L894'></a><a href='#L894'>894</a>
960
- <a name='L895'></a><a href='#L895'>895</a>
961
- <a name='L896'></a><a href='#L896'>896</a>
962
- <a name='L897'></a><a href='#L897'>897</a>
963
- <a name='L898'></a><a href='#L898'>898</a>
964
- <a name='L899'></a><a href='#L899'>899</a>
965
- <a name='L900'></a><a href='#L900'>900</a>
966
- <a name='L901'></a><a href='#L901'>901</a>
967
- <a name='L902'></a><a href='#L902'>902</a>
968
- <a name='L903'></a><a href='#L903'>903</a>
969
- <a name='L904'></a><a href='#L904'>904</a>
970
- <a name='L905'></a><a href='#L905'>905</a>
971
- <a name='L906'></a><a href='#L906'>906</a>
972
- <a name='L907'></a><a href='#L907'>907</a>
973
- <a name='L908'></a><a href='#L908'>908</a>
974
- <a name='L909'></a><a href='#L909'>909</a>
975
- <a name='L910'></a><a href='#L910'>910</a>
976
- <a name='L911'></a><a href='#L911'>911</a>
977
- <a name='L912'></a><a href='#L912'>912</a>
978
- <a name='L913'></a><a href='#L913'>913</a>
979
- <a name='L914'></a><a href='#L914'>914</a>
980
- <a name='L915'></a><a href='#L915'>915</a>
981
- <a name='L916'></a><a href='#L916'>916</a>
982
- <a name='L917'></a><a href='#L917'>917</a>
983
- <a name='L918'></a><a href='#L918'>918</a>
984
- <a name='L919'></a><a href='#L919'>919</a>
985
- <a name='L920'></a><a href='#L920'>920</a>
986
- <a name='L921'></a><a href='#L921'>921</a>
987
- <a name='L922'></a><a href='#L922'>922</a>
988
- <a name='L923'></a><a href='#L923'>923</a>
989
- <a name='L924'></a><a href='#L924'>924</a>
990
- <a name='L925'></a><a href='#L925'>925</a>
991
- <a name='L926'></a><a href='#L926'>926</a>
992
- <a name='L927'></a><a href='#L927'>927</a>
993
- <a name='L928'></a><a href='#L928'>928</a>
994
- <a name='L929'></a><a href='#L929'>929</a>
995
- <a name='L930'></a><a href='#L930'>930</a>
996
- <a name='L931'></a><a href='#L931'>931</a>
997
- <a name='L932'></a><a href='#L932'>932</a>
998
- <a name='L933'></a><a href='#L933'>933</a>
999
- <a name='L934'></a><a href='#L934'>934</a>
1000
- <a name='L935'></a><a href='#L935'>935</a>
1001
- <a name='L936'></a><a href='#L936'>936</a>
1002
- <a name='L937'></a><a href='#L937'>937</a>
1003
- <a name='L938'></a><a href='#L938'>938</a>
1004
- <a name='L939'></a><a href='#L939'>939</a>
1005
- <a name='L940'></a><a href='#L940'>940</a>
1006
- <a name='L941'></a><a href='#L941'>941</a>
1007
- <a name='L942'></a><a href='#L942'>942</a>
1008
- <a name='L943'></a><a href='#L943'>943</a>
1009
- <a name='L944'></a><a href='#L944'>944</a>
1010
- <a name='L945'></a><a href='#L945'>945</a>
1011
- <a name='L946'></a><a href='#L946'>946</a>
1012
- <a name='L947'></a><a href='#L947'>947</a>
1013
- <a name='L948'></a><a href='#L948'>948</a>
1014
- <a name='L949'></a><a href='#L949'>949</a>
1015
- <a name='L950'></a><a href='#L950'>950</a>
1016
- <a name='L951'></a><a href='#L951'>951</a>
1017
- <a name='L952'></a><a href='#L952'>952</a>
1018
- <a name='L953'></a><a href='#L953'>953</a>
1019
- <a name='L954'></a><a href='#L954'>954</a>
1020
- <a name='L955'></a><a href='#L955'>955</a>
1021
- <a name='L956'></a><a href='#L956'>956</a>
1022
- <a name='L957'></a><a href='#L957'>957</a>
1023
- <a name='L958'></a><a href='#L958'>958</a>
1024
- <a name='L959'></a><a href='#L959'>959</a>
1025
- <a name='L960'></a><a href='#L960'>960</a>
1026
- <a name='L961'></a><a href='#L961'>961</a>
1027
- <a name='L962'></a><a href='#L962'>962</a>
1028
- <a name='L963'></a><a href='#L963'>963</a>
1029
- <a name='L964'></a><a href='#L964'>964</a>
1030
- <a name='L965'></a><a href='#L965'>965</a>
1031
- <a name='L966'></a><a href='#L966'>966</a>
1032
- <a name='L967'></a><a href='#L967'>967</a>
1033
- <a name='L968'></a><a href='#L968'>968</a>
1034
- <a name='L969'></a><a href='#L969'>969</a>
1035
- <a name='L970'></a><a href='#L970'>970</a>
1036
- <a name='L971'></a><a href='#L971'>971</a>
1037
- <a name='L972'></a><a href='#L972'>972</a>
1038
- <a name='L973'></a><a href='#L973'>973</a>
1039
- <a name='L974'></a><a href='#L974'>974</a>
1040
- <a name='L975'></a><a href='#L975'>975</a>
1041
- <a name='L976'></a><a href='#L976'>976</a>
1042
- <a name='L977'></a><a href='#L977'>977</a>
1043
- <a name='L978'></a><a href='#L978'>978</a>
1044
- <a name='L979'></a><a href='#L979'>979</a>
1045
- <a name='L980'></a><a href='#L980'>980</a>
1046
- <a name='L981'></a><a href='#L981'>981</a>
1047
- <a name='L982'></a><a href='#L982'>982</a>
1048
- <a name='L983'></a><a href='#L983'>983</a>
1049
- <a name='L984'></a><a href='#L984'>984</a>
1050
- <a name='L985'></a><a href='#L985'>985</a>
1051
- <a name='L986'></a><a href='#L986'>986</a>
1052
- <a name='L987'></a><a href='#L987'>987</a>
1053
- <a name='L988'></a><a href='#L988'>988</a>
1054
- <a name='L989'></a><a href='#L989'>989</a>
1055
- <a name='L990'></a><a href='#L990'>990</a>
1056
- <a name='L991'></a><a href='#L991'>991</a>
1057
- <a name='L992'></a><a href='#L992'>992</a>
1058
- <a name='L993'></a><a href='#L993'>993</a>
1059
- <a name='L994'></a><a href='#L994'>994</a>
1060
- <a name='L995'></a><a href='#L995'>995</a>
1061
- <a name='L996'></a><a href='#L996'>996</a>
1062
- <a name='L997'></a><a href='#L997'>997</a>
1063
- <a name='L998'></a><a href='#L998'>998</a>
1064
- <a name='L999'></a><a href='#L999'>999</a>
1065
- <a name='L1000'></a><a href='#L1000'>1000</a>
1066
- <a name='L1001'></a><a href='#L1001'>1001</a>
1067
- <a name='L1002'></a><a href='#L1002'>1002</a>
1068
- <a name='L1003'></a><a href='#L1003'>1003</a>
1069
- <a name='L1004'></a><a href='#L1004'>1004</a>
1070
- <a name='L1005'></a><a href='#L1005'>1005</a>
1071
- <a name='L1006'></a><a href='#L1006'>1006</a>
1072
- <a name='L1007'></a><a href='#L1007'>1007</a>
1073
- <a name='L1008'></a><a href='#L1008'>1008</a>
1074
- <a name='L1009'></a><a href='#L1009'>1009</a>
1075
- <a name='L1010'></a><a href='#L1010'>1010</a>
1076
- <a name='L1011'></a><a href='#L1011'>1011</a>
1077
- <a name='L1012'></a><a href='#L1012'>1012</a>
1078
- <a name='L1013'></a><a href='#L1013'>1013</a>
1079
- <a name='L1014'></a><a href='#L1014'>1014</a>
1080
- <a name='L1015'></a><a href='#L1015'>1015</a>
1081
- <a name='L1016'></a><a href='#L1016'>1016</a>
1082
- <a name='L1017'></a><a href='#L1017'>1017</a>
1083
- <a name='L1018'></a><a href='#L1018'>1018</a>
1084
- <a name='L1019'></a><a href='#L1019'>1019</a>
1085
- <a name='L1020'></a><a href='#L1020'>1020</a>
1086
- <a name='L1021'></a><a href='#L1021'>1021</a>
1087
- <a name='L1022'></a><a href='#L1022'>1022</a>
1088
- <a name='L1023'></a><a href='#L1023'>1023</a>
1089
- <a name='L1024'></a><a href='#L1024'>1024</a>
1090
- <a name='L1025'></a><a href='#L1025'>1025</a>
1091
- <a name='L1026'></a><a href='#L1026'>1026</a>
1092
- <a name='L1027'></a><a href='#L1027'>1027</a>
1093
- <a name='L1028'></a><a href='#L1028'>1028</a>
1094
- <a name='L1029'></a><a href='#L1029'>1029</a>
1095
- <a name='L1030'></a><a href='#L1030'>1030</a>
1096
- <a name='L1031'></a><a href='#L1031'>1031</a>
1097
- <a name='L1032'></a><a href='#L1032'>1032</a>
1098
- <a name='L1033'></a><a href='#L1033'>1033</a>
1099
- <a name='L1034'></a><a href='#L1034'>1034</a>
1100
- <a name='L1035'></a><a href='#L1035'>1035</a>
1101
- <a name='L1036'></a><a href='#L1036'>1036</a>
1102
- <a name='L1037'></a><a href='#L1037'>1037</a>
1103
- <a name='L1038'></a><a href='#L1038'>1038</a>
1104
- <a name='L1039'></a><a href='#L1039'>1039</a>
1105
- <a name='L1040'></a><a href='#L1040'>1040</a>
1106
- <a name='L1041'></a><a href='#L1041'>1041</a>
1107
- <a name='L1042'></a><a href='#L1042'>1042</a>
1108
- <a name='L1043'></a><a href='#L1043'>1043</a>
1109
- <a name='L1044'></a><a href='#L1044'>1044</a>
1110
- <a name='L1045'></a><a href='#L1045'>1045</a>
1111
- <a name='L1046'></a><a href='#L1046'>1046</a>
1112
- <a name='L1047'></a><a href='#L1047'>1047</a>
1113
- <a name='L1048'></a><a href='#L1048'>1048</a>
1114
- <a name='L1049'></a><a href='#L1049'>1049</a>
1115
- <a name='L1050'></a><a href='#L1050'>1050</a>
1116
- <a name='L1051'></a><a href='#L1051'>1051</a>
1117
- <a name='L1052'></a><a href='#L1052'>1052</a>
1118
- <a name='L1053'></a><a href='#L1053'>1053</a>
1119
- <a name='L1054'></a><a href='#L1054'>1054</a>
1120
- <a name='L1055'></a><a href='#L1055'>1055</a>
1121
- <a name='L1056'></a><a href='#L1056'>1056</a>
1122
- <a name='L1057'></a><a href='#L1057'>1057</a>
1123
- <a name='L1058'></a><a href='#L1058'>1058</a>
1124
- <a name='L1059'></a><a href='#L1059'>1059</a>
1125
- <a name='L1060'></a><a href='#L1060'>1060</a>
1126
- <a name='L1061'></a><a href='#L1061'>1061</a>
1127
- <a name='L1062'></a><a href='#L1062'>1062</a>
1128
- <a name='L1063'></a><a href='#L1063'>1063</a>
1129
- <a name='L1064'></a><a href='#L1064'>1064</a>
1130
- <a name='L1065'></a><a href='#L1065'>1065</a>
1131
- <a name='L1066'></a><a href='#L1066'>1066</a>
1132
- <a name='L1067'></a><a href='#L1067'>1067</a>
1133
- <a name='L1068'></a><a href='#L1068'>1068</a>
1134
- <a name='L1069'></a><a href='#L1069'>1069</a>
1135
- <a name='L1070'></a><a href='#L1070'>1070</a>
1136
- <a name='L1071'></a><a href='#L1071'>1071</a>
1137
- <a name='L1072'></a><a href='#L1072'>1072</a>
1138
- <a name='L1073'></a><a href='#L1073'>1073</a>
1139
- <a name='L1074'></a><a href='#L1074'>1074</a>
1140
- <a name='L1075'></a><a href='#L1075'>1075</a>
1141
- <a name='L1076'></a><a href='#L1076'>1076</a>
1142
- <a name='L1077'></a><a href='#L1077'>1077</a>
1143
- <a name='L1078'></a><a href='#L1078'>1078</a>
1144
- <a name='L1079'></a><a href='#L1079'>1079</a>
1145
- <a name='L1080'></a><a href='#L1080'>1080</a>
1146
- <a name='L1081'></a><a href='#L1081'>1081</a>
1147
- <a name='L1082'></a><a href='#L1082'>1082</a>
1148
- <a name='L1083'></a><a href='#L1083'>1083</a>
1149
- <a name='L1084'></a><a href='#L1084'>1084</a>
1150
- <a name='L1085'></a><a href='#L1085'>1085</a>
1151
- <a name='L1086'></a><a href='#L1086'>1086</a>
1152
- <a name='L1087'></a><a href='#L1087'>1087</a>
1153
- <a name='L1088'></a><a href='#L1088'>1088</a>
1154
- <a name='L1089'></a><a href='#L1089'>1089</a>
1155
- <a name='L1090'></a><a href='#L1090'>1090</a>
1156
- <a name='L1091'></a><a href='#L1091'>1091</a>
1157
- <a name='L1092'></a><a href='#L1092'>1092</a>
1158
- <a name='L1093'></a><a href='#L1093'>1093</a>
1159
- <a name='L1094'></a><a href='#L1094'>1094</a>
1160
- <a name='L1095'></a><a href='#L1095'>1095</a>
1161
- <a name='L1096'></a><a href='#L1096'>1096</a>
1162
- <a name='L1097'></a><a href='#L1097'>1097</a>
1163
- <a name='L1098'></a><a href='#L1098'>1098</a>
1164
- <a name='L1099'></a><a href='#L1099'>1099</a>
1165
- <a name='L1100'></a><a href='#L1100'>1100</a>
1166
- <a name='L1101'></a><a href='#L1101'>1101</a>
1167
- <a name='L1102'></a><a href='#L1102'>1102</a>
1168
- <a name='L1103'></a><a href='#L1103'>1103</a>
1169
- <a name='L1104'></a><a href='#L1104'>1104</a>
1170
- <a name='L1105'></a><a href='#L1105'>1105</a>
1171
- <a name='L1106'></a><a href='#L1106'>1106</a>
1172
- <a name='L1107'></a><a href='#L1107'>1107</a>
1173
- <a name='L1108'></a><a href='#L1108'>1108</a>
1174
- <a name='L1109'></a><a href='#L1109'>1109</a>
1175
- <a name='L1110'></a><a href='#L1110'>1110</a>
1176
- <a name='L1111'></a><a href='#L1111'>1111</a>
1177
- <a name='L1112'></a><a href='#L1112'>1112</a>
1178
- <a name='L1113'></a><a href='#L1113'>1113</a>
1179
- <a name='L1114'></a><a href='#L1114'>1114</a>
1180
- <a name='L1115'></a><a href='#L1115'>1115</a>
1181
- <a name='L1116'></a><a href='#L1116'>1116</a>
1182
- <a name='L1117'></a><a href='#L1117'>1117</a>
1183
- <a name='L1118'></a><a href='#L1118'>1118</a>
1184
- <a name='L1119'></a><a href='#L1119'>1119</a>
1185
- <a name='L1120'></a><a href='#L1120'>1120</a>
1186
- <a name='L1121'></a><a href='#L1121'>1121</a>
1187
- <a name='L1122'></a><a href='#L1122'>1122</a>
1188
- <a name='L1123'></a><a href='#L1123'>1123</a>
1189
- <a name='L1124'></a><a href='#L1124'>1124</a>
1190
- <a name='L1125'></a><a href='#L1125'>1125</a>
1191
- <a name='L1126'></a><a href='#L1126'>1126</a>
1192
- <a name='L1127'></a><a href='#L1127'>1127</a>
1193
- <a name='L1128'></a><a href='#L1128'>1128</a>
1194
- <a name='L1129'></a><a href='#L1129'>1129</a>
1195
- <a name='L1130'></a><a href='#L1130'>1130</a>
1196
- <a name='L1131'></a><a href='#L1131'>1131</a>
1197
- <a name='L1132'></a><a href='#L1132'>1132</a>
1198
- <a name='L1133'></a><a href='#L1133'>1133</a>
1199
- <a name='L1134'></a><a href='#L1134'>1134</a>
1200
- <a name='L1135'></a><a href='#L1135'>1135</a>
1201
- <a name='L1136'></a><a href='#L1136'>1136</a>
1202
- <a name='L1137'></a><a href='#L1137'>1137</a>
1203
- <a name='L1138'></a><a href='#L1138'>1138</a>
1204
- <a name='L1139'></a><a href='#L1139'>1139</a>
1205
- <a name='L1140'></a><a href='#L1140'>1140</a>
1206
- <a name='L1141'></a><a href='#L1141'>1141</a>
1207
- <a name='L1142'></a><a href='#L1142'>1142</a>
1208
- <a name='L1143'></a><a href='#L1143'>1143</a>
1209
- <a name='L1144'></a><a href='#L1144'>1144</a>
1210
- <a name='L1145'></a><a href='#L1145'>1145</a>
1211
- <a name='L1146'></a><a href='#L1146'>1146</a>
1212
- <a name='L1147'></a><a href='#L1147'>1147</a>
1213
- <a name='L1148'></a><a href='#L1148'>1148</a>
1214
- <a name='L1149'></a><a href='#L1149'>1149</a>
1215
- <a name='L1150'></a><a href='#L1150'>1150</a>
1216
- <a name='L1151'></a><a href='#L1151'>1151</a>
1217
- <a name='L1152'></a><a href='#L1152'>1152</a>
1218
- <a name='L1153'></a><a href='#L1153'>1153</a>
1219
- <a name='L1154'></a><a href='#L1154'>1154</a>
1220
- <a name='L1155'></a><a href='#L1155'>1155</a>
1221
- <a name='L1156'></a><a href='#L1156'>1156</a>
1222
- <a name='L1157'></a><a href='#L1157'>1157</a>
1223
- <a name='L1158'></a><a href='#L1158'>1158</a>
1224
- <a name='L1159'></a><a href='#L1159'>1159</a>
1225
- <a name='L1160'></a><a href='#L1160'>1160</a>
1226
- <a name='L1161'></a><a href='#L1161'>1161</a>
1227
- <a name='L1162'></a><a href='#L1162'>1162</a>
1228
- <a name='L1163'></a><a href='#L1163'>1163</a>
1229
- <a name='L1164'></a><a href='#L1164'>1164</a>
1230
- <a name='L1165'></a><a href='#L1165'>1165</a>
1231
- <a name='L1166'></a><a href='#L1166'>1166</a>
1232
- <a name='L1167'></a><a href='#L1167'>1167</a>
1233
- <a name='L1168'></a><a href='#L1168'>1168</a>
1234
- <a name='L1169'></a><a href='#L1169'>1169</a>
1235
- <a name='L1170'></a><a href='#L1170'>1170</a>
1236
- <a name='L1171'></a><a href='#L1171'>1171</a>
1237
- <a name='L1172'></a><a href='#L1172'>1172</a>
1238
- <a name='L1173'></a><a href='#L1173'>1173</a>
1239
- <a name='L1174'></a><a href='#L1174'>1174</a>
1240
- <a name='L1175'></a><a href='#L1175'>1175</a>
1241
- <a name='L1176'></a><a href='#L1176'>1176</a>
1242
- <a name='L1177'></a><a href='#L1177'>1177</a>
1243
- <a name='L1178'></a><a href='#L1178'>1178</a>
1244
- <a name='L1179'></a><a href='#L1179'>1179</a>
1245
- <a name='L1180'></a><a href='#L1180'>1180</a>
1246
- <a name='L1181'></a><a href='#L1181'>1181</a>
1247
- <a name='L1182'></a><a href='#L1182'>1182</a>
1248
- <a name='L1183'></a><a href='#L1183'>1183</a>
1249
- <a name='L1184'></a><a href='#L1184'>1184</a>
1250
- <a name='L1185'></a><a href='#L1185'>1185</a>
1251
- <a name='L1186'></a><a href='#L1186'>1186</a>
1252
- <a name='L1187'></a><a href='#L1187'>1187</a>
1253
- <a name='L1188'></a><a href='#L1188'>1188</a>
1254
- <a name='L1189'></a><a href='#L1189'>1189</a>
1255
- <a name='L1190'></a><a href='#L1190'>1190</a>
1256
- <a name='L1191'></a><a href='#L1191'>1191</a>
1257
- <a name='L1192'></a><a href='#L1192'>1192</a>
1258
- <a name='L1193'></a><a href='#L1193'>1193</a>
1259
- <a name='L1194'></a><a href='#L1194'>1194</a>
1260
- <a name='L1195'></a><a href='#L1195'>1195</a>
1261
- <a name='L1196'></a><a href='#L1196'>1196</a>
1262
- <a name='L1197'></a><a href='#L1197'>1197</a>
1263
- <a name='L1198'></a><a href='#L1198'>1198</a>
1264
- <a name='L1199'></a><a href='#L1199'>1199</a>
1265
- <a name='L1200'></a><a href='#L1200'>1200</a>
1266
- <a name='L1201'></a><a href='#L1201'>1201</a>
1267
- <a name='L1202'></a><a href='#L1202'>1202</a>
1268
- <a name='L1203'></a><a href='#L1203'>1203</a>
1269
- <a name='L1204'></a><a href='#L1204'>1204</a>
1270
- <a name='L1205'></a><a href='#L1205'>1205</a>
1271
- <a name='L1206'></a><a href='#L1206'>1206</a>
1272
- <a name='L1207'></a><a href='#L1207'>1207</a>
1273
- <a name='L1208'></a><a href='#L1208'>1208</a>
1274
- <a name='L1209'></a><a href='#L1209'>1209</a>
1275
- <a name='L1210'></a><a href='#L1210'>1210</a>
1276
- <a name='L1211'></a><a href='#L1211'>1211</a>
1277
- <a name='L1212'></a><a href='#L1212'>1212</a>
1278
- <a name='L1213'></a><a href='#L1213'>1213</a>
1279
- <a name='L1214'></a><a href='#L1214'>1214</a>
1280
- <a name='L1215'></a><a href='#L1215'>1215</a>
1281
- <a name='L1216'></a><a href='#L1216'>1216</a>
1282
- <a name='L1217'></a><a href='#L1217'>1217</a>
1283
- <a name='L1218'></a><a href='#L1218'>1218</a>
1284
- <a name='L1219'></a><a href='#L1219'>1219</a>
1285
- <a name='L1220'></a><a href='#L1220'>1220</a>
1286
- <a name='L1221'></a><a href='#L1221'>1221</a>
1287
- <a name='L1222'></a><a href='#L1222'>1222</a>
1288
- <a name='L1223'></a><a href='#L1223'>1223</a>
1289
- <a name='L1224'></a><a href='#L1224'>1224</a>
1290
- <a name='L1225'></a><a href='#L1225'>1225</a>
1291
- <a name='L1226'></a><a href='#L1226'>1226</a>
1292
- <a name='L1227'></a><a href='#L1227'>1227</a>
1293
- <a name='L1228'></a><a href='#L1228'>1228</a>
1294
- <a name='L1229'></a><a href='#L1229'>1229</a>
1295
- <a name='L1230'></a><a href='#L1230'>1230</a>
1296
- <a name='L1231'></a><a href='#L1231'>1231</a>
1297
- <a name='L1232'></a><a href='#L1232'>1232</a>
1298
- <a name='L1233'></a><a href='#L1233'>1233</a>
1299
- <a name='L1234'></a><a href='#L1234'>1234</a>
1300
- <a name='L1235'></a><a href='#L1235'>1235</a>
1301
- <a name='L1236'></a><a href='#L1236'>1236</a>
1302
- <a name='L1237'></a><a href='#L1237'>1237</a>
1303
- <a name='L1238'></a><a href='#L1238'>1238</a>
1304
- <a name='L1239'></a><a href='#L1239'>1239</a>
1305
- <a name='L1240'></a><a href='#L1240'>1240</a>
1306
- <a name='L1241'></a><a href='#L1241'>1241</a>
1307
- <a name='L1242'></a><a href='#L1242'>1242</a>
1308
- <a name='L1243'></a><a href='#L1243'>1243</a>
1309
- <a name='L1244'></a><a href='#L1244'>1244</a>
1310
- <a name='L1245'></a><a href='#L1245'>1245</a>
1311
- <a name='L1246'></a><a href='#L1246'>1246</a>
1312
- <a name='L1247'></a><a href='#L1247'>1247</a>
1313
- <a name='L1248'></a><a href='#L1248'>1248</a>
1314
- <a name='L1249'></a><a href='#L1249'>1249</a>
1315
- <a name='L1250'></a><a href='#L1250'>1250</a>
1316
- <a name='L1251'></a><a href='#L1251'>1251</a>
1317
- <a name='L1252'></a><a href='#L1252'>1252</a>
1318
- <a name='L1253'></a><a href='#L1253'>1253</a>
1319
- <a name='L1254'></a><a href='#L1254'>1254</a>
1320
- <a name='L1255'></a><a href='#L1255'>1255</a>
1321
- <a name='L1256'></a><a href='#L1256'>1256</a>
1322
- <a name='L1257'></a><a href='#L1257'>1257</a>
1323
- <a name='L1258'></a><a href='#L1258'>1258</a>
1324
- <a name='L1259'></a><a href='#L1259'>1259</a>
1325
- <a name='L1260'></a><a href='#L1260'>1260</a>
1326
- <a name='L1261'></a><a href='#L1261'>1261</a>
1327
- <a name='L1262'></a><a href='#L1262'>1262</a>
1328
- <a name='L1263'></a><a href='#L1263'>1263</a>
1329
- <a name='L1264'></a><a href='#L1264'>1264</a>
1330
- <a name='L1265'></a><a href='#L1265'>1265</a>
1331
- <a name='L1266'></a><a href='#L1266'>1266</a>
1332
- <a name='L1267'></a><a href='#L1267'>1267</a>
1333
- <a name='L1268'></a><a href='#L1268'>1268</a>
1334
- <a name='L1269'></a><a href='#L1269'>1269</a>
1335
- <a name='L1270'></a><a href='#L1270'>1270</a>
1336
- <a name='L1271'></a><a href='#L1271'>1271</a>
1337
- <a name='L1272'></a><a href='#L1272'>1272</a>
1338
- <a name='L1273'></a><a href='#L1273'>1273</a>
1339
- <a name='L1274'></a><a href='#L1274'>1274</a>
1340
- <a name='L1275'></a><a href='#L1275'>1275</a>
1341
- <a name='L1276'></a><a href='#L1276'>1276</a>
1342
- <a name='L1277'></a><a href='#L1277'>1277</a>
1343
- <a name='L1278'></a><a href='#L1278'>1278</a>
1344
- <a name='L1279'></a><a href='#L1279'>1279</a>
1345
- <a name='L1280'></a><a href='#L1280'>1280</a>
1346
- <a name='L1281'></a><a href='#L1281'>1281</a>
1347
- <a name='L1282'></a><a href='#L1282'>1282</a>
1348
- <a name='L1283'></a><a href='#L1283'>1283</a>
1349
- <a name='L1284'></a><a href='#L1284'>1284</a>
1350
- <a name='L1285'></a><a href='#L1285'>1285</a>
1351
- <a name='L1286'></a><a href='#L1286'>1286</a>
1352
- <a name='L1287'></a><a href='#L1287'>1287</a>
1353
- <a name='L1288'></a><a href='#L1288'>1288</a>
1354
- <a name='L1289'></a><a href='#L1289'>1289</a>
1355
- <a name='L1290'></a><a href='#L1290'>1290</a>
1356
- <a name='L1291'></a><a href='#L1291'>1291</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
1357
- <span class="cline-any cline-no">&nbsp;</span>
1358
- <span class="cline-any cline-no">&nbsp;</span>
1359
- <span class="cline-any cline-no">&nbsp;</span>
1360
- <span class="cline-any cline-neutral">&nbsp;</span>
1361
- <span class="cline-any cline-neutral">&nbsp;</span>
1362
- <span class="cline-any cline-neutral">&nbsp;</span>
1363
- <span class="cline-any cline-neutral">&nbsp;</span>
1364
- <span class="cline-any cline-neutral">&nbsp;</span>
1365
- <span class="cline-any cline-neutral">&nbsp;</span>
1366
- <span class="cline-any cline-neutral">&nbsp;</span>
1367
- <span class="cline-any cline-neutral">&nbsp;</span>
1368
- <span class="cline-any cline-no">&nbsp;</span>
1369
- <span class="cline-any cline-neutral">&nbsp;</span>
1370
- <span class="cline-any cline-neutral">&nbsp;</span>
1371
- <span class="cline-any cline-neutral">&nbsp;</span>
1372
- <span class="cline-any cline-neutral">&nbsp;</span>
1373
- <span class="cline-any cline-neutral">&nbsp;</span>
1374
- <span class="cline-any cline-neutral">&nbsp;</span>
1375
- <span class="cline-any cline-neutral">&nbsp;</span>
1376
- <span class="cline-any cline-neutral">&nbsp;</span>
1377
- <span class="cline-any cline-no">&nbsp;</span>
1378
- <span class="cline-any cline-no">&nbsp;</span>
1379
- <span class="cline-any cline-no">&nbsp;</span>
1380
- <span class="cline-any cline-no">&nbsp;</span>
1381
- <span class="cline-any cline-no">&nbsp;</span>
1382
- <span class="cline-any cline-no">&nbsp;</span>
1383
- <span class="cline-any cline-no">&nbsp;</span>
1384
- <span class="cline-any cline-no">&nbsp;</span>
1385
- <span class="cline-any cline-no">&nbsp;</span>
1386
- <span class="cline-any cline-neutral">&nbsp;</span>
1387
- <span class="cline-any cline-neutral">&nbsp;</span>
1388
- <span class="cline-any cline-neutral">&nbsp;</span>
1389
- <span class="cline-any cline-neutral">&nbsp;</span>
1390
- <span class="cline-any cline-no">&nbsp;</span>
1391
- <span class="cline-any cline-no">&nbsp;</span>
1392
- <span class="cline-any cline-no">&nbsp;</span>
1393
- <span class="cline-any cline-neutral">&nbsp;</span>
1394
- <span class="cline-any cline-neutral">&nbsp;</span>
1395
- <span class="cline-any cline-neutral">&nbsp;</span>
1396
- <span class="cline-any cline-neutral">&nbsp;</span>
1397
- <span class="cline-any cline-neutral">&nbsp;</span>
1398
- <span class="cline-any cline-neutral">&nbsp;</span>
1399
- <span class="cline-any cline-neutral">&nbsp;</span>
1400
- <span class="cline-any cline-neutral">&nbsp;</span>
1401
- <span class="cline-any cline-neutral">&nbsp;</span>
1402
- <span class="cline-any cline-neutral">&nbsp;</span>
1403
- <span class="cline-any cline-neutral">&nbsp;</span>
1404
- <span class="cline-any cline-neutral">&nbsp;</span>
1405
- <span class="cline-any cline-neutral">&nbsp;</span>
1406
- <span class="cline-any cline-neutral">&nbsp;</span>
1407
- <span class="cline-any cline-neutral">&nbsp;</span>
1408
- <span class="cline-any cline-neutral">&nbsp;</span>
1409
- <span class="cline-any cline-neutral">&nbsp;</span>
1410
- <span class="cline-any cline-neutral">&nbsp;</span>
1411
- <span class="cline-any cline-neutral">&nbsp;</span>
1412
- <span class="cline-any cline-neutral">&nbsp;</span>
1413
- <span class="cline-any cline-neutral">&nbsp;</span>
1414
- <span class="cline-any cline-neutral">&nbsp;</span>
1415
- <span class="cline-any cline-neutral">&nbsp;</span>
1416
- <span class="cline-any cline-neutral">&nbsp;</span>
1417
- <span class="cline-any cline-neutral">&nbsp;</span>
1418
- <span class="cline-any cline-neutral">&nbsp;</span>
1419
- <span class="cline-any cline-no">&nbsp;</span>
1420
- <span class="cline-any cline-no">&nbsp;</span>
1421
- <span class="cline-any cline-no">&nbsp;</span>
1422
- <span class="cline-any cline-no">&nbsp;</span>
1423
- <span class="cline-any cline-neutral">&nbsp;</span>
1424
- <span class="cline-any cline-neutral">&nbsp;</span>
1425
- <span class="cline-any cline-neutral">&nbsp;</span>
1426
- <span class="cline-any cline-neutral">&nbsp;</span>
1427
- <span class="cline-any cline-neutral">&nbsp;</span>
1428
- <span class="cline-any cline-neutral">&nbsp;</span>
1429
- <span class="cline-any cline-neutral">&nbsp;</span>
1430
- <span class="cline-any cline-neutral">&nbsp;</span>
1431
- <span class="cline-any cline-neutral">&nbsp;</span>
1432
- <span class="cline-any cline-neutral">&nbsp;</span>
1433
- <span class="cline-any cline-neutral">&nbsp;</span>
1434
- <span class="cline-any cline-neutral">&nbsp;</span>
1435
- <span class="cline-any cline-neutral">&nbsp;</span>
1436
- <span class="cline-any cline-neutral">&nbsp;</span>
1437
- <span class="cline-any cline-neutral">&nbsp;</span>
1438
- <span class="cline-any cline-neutral">&nbsp;</span>
1439
- <span class="cline-any cline-neutral">&nbsp;</span>
1440
- <span class="cline-any cline-neutral">&nbsp;</span>
1441
- <span class="cline-any cline-neutral">&nbsp;</span>
1442
- <span class="cline-any cline-neutral">&nbsp;</span>
1443
- <span class="cline-any cline-neutral">&nbsp;</span>
1444
- <span class="cline-any cline-neutral">&nbsp;</span>
1445
- <span class="cline-any cline-neutral">&nbsp;</span>
1446
- <span class="cline-any cline-neutral">&nbsp;</span>
1447
- <span class="cline-any cline-neutral">&nbsp;</span>
1448
- <span class="cline-any cline-no">&nbsp;</span>
1449
- <span class="cline-any cline-no">&nbsp;</span>
1450
- <span class="cline-any cline-neutral">&nbsp;</span>
1451
- <span class="cline-any cline-neutral">&nbsp;</span>
1452
- <span class="cline-any cline-neutral">&nbsp;</span>
1453
- <span class="cline-any cline-neutral">&nbsp;</span>
1454
- <span class="cline-any cline-neutral">&nbsp;</span>
1455
- <span class="cline-any cline-no">&nbsp;</span>
1456
- <span class="cline-any cline-no">&nbsp;</span>
1457
- <span class="cline-any cline-no">&nbsp;</span>
1458
- <span class="cline-any cline-no">&nbsp;</span>
1459
- <span class="cline-any cline-no">&nbsp;</span>
1460
- <span class="cline-any cline-neutral">&nbsp;</span>
1461
- <span class="cline-any cline-neutral">&nbsp;</span>
1462
- <span class="cline-any cline-neutral">&nbsp;</span>
1463
- <span class="cline-any cline-neutral">&nbsp;</span>
1464
- <span class="cline-any cline-neutral">&nbsp;</span>
1465
- <span class="cline-any cline-neutral">&nbsp;</span>
1466
- <span class="cline-any cline-neutral">&nbsp;</span>
1467
- <span class="cline-any cline-neutral">&nbsp;</span>
1468
- <span class="cline-any cline-neutral">&nbsp;</span>
1469
- <span class="cline-any cline-neutral">&nbsp;</span>
1470
- <span class="cline-any cline-neutral">&nbsp;</span>
1471
- <span class="cline-any cline-neutral">&nbsp;</span>
1472
- <span class="cline-any cline-neutral">&nbsp;</span>
1473
- <span class="cline-any cline-neutral">&nbsp;</span>
1474
- <span class="cline-any cline-neutral">&nbsp;</span>
1475
- <span class="cline-any cline-neutral">&nbsp;</span>
1476
- <span class="cline-any cline-neutral">&nbsp;</span>
1477
- <span class="cline-any cline-neutral">&nbsp;</span>
1478
- <span class="cline-any cline-neutral">&nbsp;</span>
1479
- <span class="cline-any cline-neutral">&nbsp;</span>
1480
- <span class="cline-any cline-neutral">&nbsp;</span>
1481
- <span class="cline-any cline-neutral">&nbsp;</span>
1482
- <span class="cline-any cline-neutral">&nbsp;</span>
1483
- <span class="cline-any cline-neutral">&nbsp;</span>
1484
- <span class="cline-any cline-neutral">&nbsp;</span>
1485
- <span class="cline-any cline-neutral">&nbsp;</span>
1486
- <span class="cline-any cline-neutral">&nbsp;</span>
1487
- <span class="cline-any cline-neutral">&nbsp;</span>
1488
- <span class="cline-any cline-neutral">&nbsp;</span>
1489
- <span class="cline-any cline-neutral">&nbsp;</span>
1490
- <span class="cline-any cline-neutral">&nbsp;</span>
1491
- <span class="cline-any cline-neutral">&nbsp;</span>
1492
- <span class="cline-any cline-neutral">&nbsp;</span>
1493
- <span class="cline-any cline-no">&nbsp;</span>
1494
- <span class="cline-any cline-neutral">&nbsp;</span>
1495
- <span class="cline-any cline-neutral">&nbsp;</span>
1496
- <span class="cline-any cline-no">&nbsp;</span>
1497
- <span class="cline-any cline-no">&nbsp;</span>
1498
- <span class="cline-any cline-no">&nbsp;</span>
1499
- <span class="cline-any cline-no">&nbsp;</span>
1500
- <span class="cline-any cline-no">&nbsp;</span>
1501
- <span class="cline-any cline-neutral">&nbsp;</span>
1502
- <span class="cline-any cline-neutral">&nbsp;</span>
1503
- <span class="cline-any cline-no">&nbsp;</span>
1504
- <span class="cline-any cline-neutral">&nbsp;</span>
1505
- <span class="cline-any cline-neutral">&nbsp;</span>
1506
- <span class="cline-any cline-neutral">&nbsp;</span>
1507
- <span class="cline-any cline-neutral">&nbsp;</span>
1508
- <span class="cline-any cline-neutral">&nbsp;</span>
1509
- <span class="cline-any cline-neutral">&nbsp;</span>
1510
- <span class="cline-any cline-neutral">&nbsp;</span>
1511
- <span class="cline-any cline-neutral">&nbsp;</span>
1512
- <span class="cline-any cline-neutral">&nbsp;</span>
1513
- <span class="cline-any cline-no">&nbsp;</span>
1514
- <span class="cline-any cline-neutral">&nbsp;</span>
1515
- <span class="cline-any cline-neutral">&nbsp;</span>
1516
- <span class="cline-any cline-neutral">&nbsp;</span>
1517
- <span class="cline-any cline-neutral">&nbsp;</span>
1518
- <span class="cline-any cline-no">&nbsp;</span>
1519
- <span class="cline-any cline-no">&nbsp;</span>
1520
- <span class="cline-any cline-neutral">&nbsp;</span>
1521
- <span class="cline-any cline-neutral">&nbsp;</span>
1522
- <span class="cline-any cline-no">&nbsp;</span>
1523
- <span class="cline-any cline-no">&nbsp;</span>
1524
- <span class="cline-any cline-no">&nbsp;</span>
1525
- <span class="cline-any cline-neutral">&nbsp;</span>
1526
- <span class="cline-any cline-neutral">&nbsp;</span>
1527
- <span class="cline-any cline-neutral">&nbsp;</span>
1528
- <span class="cline-any cline-no">&nbsp;</span>
1529
- <span class="cline-any cline-no">&nbsp;</span>
1530
- <span class="cline-any cline-neutral">&nbsp;</span>
1531
- <span class="cline-any cline-neutral">&nbsp;</span>
1532
- <span class="cline-any cline-neutral">&nbsp;</span>
1533
- <span class="cline-any cline-neutral">&nbsp;</span>
1534
- <span class="cline-any cline-no">&nbsp;</span>
1535
- <span class="cline-any cline-no">&nbsp;</span>
1536
- <span class="cline-any cline-no">&nbsp;</span>
1537
- <span class="cline-any cline-no">&nbsp;</span>
1538
- <span class="cline-any cline-neutral">&nbsp;</span>
1539
- <span class="cline-any cline-no">&nbsp;</span>
1540
- <span class="cline-any cline-neutral">&nbsp;</span>
1541
- <span class="cline-any cline-no">&nbsp;</span>
1542
- <span class="cline-any cline-neutral">&nbsp;</span>
1543
- <span class="cline-any cline-neutral">&nbsp;</span>
1544
- <span class="cline-any cline-neutral">&nbsp;</span>
1545
- <span class="cline-any cline-neutral">&nbsp;</span>
1546
- <span class="cline-any cline-neutral">&nbsp;</span>
1547
- <span class="cline-any cline-neutral">&nbsp;</span>
1548
- <span class="cline-any cline-no">&nbsp;</span>
1549
- <span class="cline-any cline-neutral">&nbsp;</span>
1550
- <span class="cline-any cline-no">&nbsp;</span>
1551
- <span class="cline-any cline-no">&nbsp;</span>
1552
- <span class="cline-any cline-no">&nbsp;</span>
1553
- <span class="cline-any cline-no">&nbsp;</span>
1554
- <span class="cline-any cline-neutral">&nbsp;</span>
1555
- <span class="cline-any cline-neutral">&nbsp;</span>
1556
- <span class="cline-any cline-neutral">&nbsp;</span>
1557
- <span class="cline-any cline-neutral">&nbsp;</span>
1558
- <span class="cline-any cline-neutral">&nbsp;</span>
1559
- <span class="cline-any cline-neutral">&nbsp;</span>
1560
- <span class="cline-any cline-neutral">&nbsp;</span>
1561
- <span class="cline-any cline-neutral">&nbsp;</span>
1562
- <span class="cline-any cline-neutral">&nbsp;</span>
1563
- <span class="cline-any cline-neutral">&nbsp;</span>
1564
- <span class="cline-any cline-neutral">&nbsp;</span>
1565
- <span class="cline-any cline-neutral">&nbsp;</span>
1566
- <span class="cline-any cline-neutral">&nbsp;</span>
1567
- <span class="cline-any cline-neutral">&nbsp;</span>
1568
- <span class="cline-any cline-neutral">&nbsp;</span>
1569
- <span class="cline-any cline-neutral">&nbsp;</span>
1570
- <span class="cline-any cline-neutral">&nbsp;</span>
1571
- <span class="cline-any cline-neutral">&nbsp;</span>
1572
- <span class="cline-any cline-neutral">&nbsp;</span>
1573
- <span class="cline-any cline-neutral">&nbsp;</span>
1574
- <span class="cline-any cline-neutral">&nbsp;</span>
1575
- <span class="cline-any cline-neutral">&nbsp;</span>
1576
- <span class="cline-any cline-neutral">&nbsp;</span>
1577
- <span class="cline-any cline-neutral">&nbsp;</span>
1578
- <span class="cline-any cline-neutral">&nbsp;</span>
1579
- <span class="cline-any cline-neutral">&nbsp;</span>
1580
- <span class="cline-any cline-no">&nbsp;</span>
1581
- <span class="cline-any cline-no">&nbsp;</span>
1582
- <span class="cline-any cline-no">&nbsp;</span>
1583
- <span class="cline-any cline-neutral">&nbsp;</span>
1584
- <span class="cline-any cline-neutral">&nbsp;</span>
1585
- <span class="cline-any cline-no">&nbsp;</span>
1586
- <span class="cline-any cline-no">&nbsp;</span>
1587
- <span class="cline-any cline-no">&nbsp;</span>
1588
- <span class="cline-any cline-no">&nbsp;</span>
1589
- <span class="cline-any cline-no">&nbsp;</span>
1590
- <span class="cline-any cline-no">&nbsp;</span>
1591
- <span class="cline-any cline-no">&nbsp;</span>
1592
- <span class="cline-any cline-no">&nbsp;</span>
1593
- <span class="cline-any cline-no">&nbsp;</span>
1594
- <span class="cline-any cline-no">&nbsp;</span>
1595
- <span class="cline-any cline-no">&nbsp;</span>
1596
- <span class="cline-any cline-no">&nbsp;</span>
1597
- <span class="cline-any cline-no">&nbsp;</span>
1598
- <span class="cline-any cline-no">&nbsp;</span>
1599
- <span class="cline-any cline-neutral">&nbsp;</span>
1600
- <span class="cline-any cline-no">&nbsp;</span>
1601
- <span class="cline-any cline-no">&nbsp;</span>
1602
- <span class="cline-any cline-neutral">&nbsp;</span>
1603
- <span class="cline-any cline-no">&nbsp;</span>
1604
- <span class="cline-any cline-neutral">&nbsp;</span>
1605
- <span class="cline-any cline-no">&nbsp;</span>
1606
- <span class="cline-any cline-no">&nbsp;</span>
1607
- <span class="cline-any cline-neutral">&nbsp;</span>
1608
- <span class="cline-any cline-neutral">&nbsp;</span>
1609
- <span class="cline-any cline-neutral">&nbsp;</span>
1610
- <span class="cline-any cline-neutral">&nbsp;</span>
1611
- <span class="cline-any cline-no">&nbsp;</span>
1612
- <span class="cline-any cline-no">&nbsp;</span>
1613
- <span class="cline-any cline-neutral">&nbsp;</span>
1614
- <span class="cline-any cline-neutral">&nbsp;</span>
1615
- <span class="cline-any cline-no">&nbsp;</span>
1616
- <span class="cline-any cline-no">&nbsp;</span>
1617
- <span class="cline-any cline-neutral">&nbsp;</span>
1618
- <span class="cline-any cline-neutral">&nbsp;</span>
1619
- <span class="cline-any cline-no">&nbsp;</span>
1620
- <span class="cline-any cline-no">&nbsp;</span>
1621
- <span class="cline-any cline-neutral">&nbsp;</span>
1622
- <span class="cline-any cline-no">&nbsp;</span>
1623
- <span class="cline-any cline-neutral">&nbsp;</span>
1624
- <span class="cline-any cline-no">&nbsp;</span>
1625
- <span class="cline-any cline-no">&nbsp;</span>
1626
- <span class="cline-any cline-no">&nbsp;</span>
1627
- <span class="cline-any cline-no">&nbsp;</span>
1628
- <span class="cline-any cline-no">&nbsp;</span>
1629
- <span class="cline-any cline-no">&nbsp;</span>
1630
- <span class="cline-any cline-no">&nbsp;</span>
1631
- <span class="cline-any cline-no">&nbsp;</span>
1632
- <span class="cline-any cline-no">&nbsp;</span>
1633
- <span class="cline-any cline-no">&nbsp;</span>
1634
- <span class="cline-any cline-no">&nbsp;</span>
1635
- <span class="cline-any cline-no">&nbsp;</span>
1636
- <span class="cline-any cline-no">&nbsp;</span>
1637
- <span class="cline-any cline-no">&nbsp;</span>
1638
- <span class="cline-any cline-no">&nbsp;</span>
1639
- <span class="cline-any cline-no">&nbsp;</span>
1640
- <span class="cline-any cline-no">&nbsp;</span>
1641
- <span class="cline-any cline-no">&nbsp;</span>
1642
- <span class="cline-any cline-neutral">&nbsp;</span>
1643
- <span class="cline-any cline-no">&nbsp;</span>
1644
- <span class="cline-any cline-neutral">&nbsp;</span>
1645
- <span class="cline-any cline-neutral">&nbsp;</span>
1646
- <span class="cline-any cline-neutral">&nbsp;</span>
1647
- <span class="cline-any cline-no">&nbsp;</span>
1648
- <span class="cline-any cline-neutral">&nbsp;</span>
1649
- <span class="cline-any cline-no">&nbsp;</span>
1650
- <span class="cline-any cline-no">&nbsp;</span>
1651
- <span class="cline-any cline-neutral">&nbsp;</span>
1652
- <span class="cline-any cline-neutral">&nbsp;</span>
1653
- <span class="cline-any cline-no">&nbsp;</span>
1654
- <span class="cline-any cline-no">&nbsp;</span>
1655
- <span class="cline-any cline-no">&nbsp;</span>
1656
- <span class="cline-any cline-neutral">&nbsp;</span>
1657
- <span class="cline-any cline-neutral">&nbsp;</span>
1658
- <span class="cline-any cline-neutral">&nbsp;</span>
1659
- <span class="cline-any cline-no">&nbsp;</span>
1660
- <span class="cline-any cline-no">&nbsp;</span>
1661
- <span class="cline-any cline-neutral">&nbsp;</span>
1662
- <span class="cline-any cline-no">&nbsp;</span>
1663
- <span class="cline-any cline-neutral">&nbsp;</span>
1664
- <span class="cline-any cline-no">&nbsp;</span>
1665
- <span class="cline-any cline-neutral">&nbsp;</span>
1666
- <span class="cline-any cline-neutral">&nbsp;</span>
1667
- <span class="cline-any cline-no">&nbsp;</span>
1668
- <span class="cline-any cline-neutral">&nbsp;</span>
1669
- <span class="cline-any cline-no">&nbsp;</span>
1670
- <span class="cline-any cline-neutral">&nbsp;</span>
1671
- <span class="cline-any cline-neutral">&nbsp;</span>
1672
- <span class="cline-any cline-neutral">&nbsp;</span>
1673
- <span class="cline-any cline-neutral">&nbsp;</span>
1674
- <span class="cline-any cline-neutral">&nbsp;</span>
1675
- <span class="cline-any cline-neutral">&nbsp;</span>
1676
- <span class="cline-any cline-neutral">&nbsp;</span>
1677
- <span class="cline-any cline-neutral">&nbsp;</span>
1678
- <span class="cline-any cline-no">&nbsp;</span>
1679
- <span class="cline-any cline-no">&nbsp;</span>
1680
- <span class="cline-any cline-neutral">&nbsp;</span>
1681
- <span class="cline-any cline-neutral">&nbsp;</span>
1682
- <span class="cline-any cline-neutral">&nbsp;</span>
1683
- <span class="cline-any cline-neutral">&nbsp;</span>
1684
- <span class="cline-any cline-neutral">&nbsp;</span>
1685
- <span class="cline-any cline-neutral">&nbsp;</span>
1686
- <span class="cline-any cline-no">&nbsp;</span>
1687
- <span class="cline-any cline-no">&nbsp;</span>
1688
- <span class="cline-any cline-no">&nbsp;</span>
1689
- <span class="cline-any cline-no">&nbsp;</span>
1690
- <span class="cline-any cline-neutral">&nbsp;</span>
1691
- <span class="cline-any cline-no">&nbsp;</span>
1692
- <span class="cline-any cline-no">&nbsp;</span>
1693
- <span class="cline-any cline-no">&nbsp;</span>
1694
- <span class="cline-any cline-neutral">&nbsp;</span>
1695
- <span class="cline-any cline-no">&nbsp;</span>
1696
- <span class="cline-any cline-no">&nbsp;</span>
1697
- <span class="cline-any cline-no">&nbsp;</span>
1698
- <span class="cline-any cline-no">&nbsp;</span>
1699
- <span class="cline-any cline-neutral">&nbsp;</span>
1700
- <span class="cline-any cline-no">&nbsp;</span>
1701
- <span class="cline-any cline-no">&nbsp;</span>
1702
- <span class="cline-any cline-no">&nbsp;</span>
1703
- <span class="cline-any cline-no">&nbsp;</span>
1704
- <span class="cline-any cline-neutral">&nbsp;</span>
1705
- <span class="cline-any cline-neutral">&nbsp;</span>
1706
- <span class="cline-any cline-neutral">&nbsp;</span>
1707
- <span class="cline-any cline-neutral">&nbsp;</span>
1708
- <span class="cline-any cline-neutral">&nbsp;</span>
1709
- <span class="cline-any cline-neutral">&nbsp;</span>
1710
- <span class="cline-any cline-neutral">&nbsp;</span>
1711
- <span class="cline-any cline-neutral">&nbsp;</span>
1712
- <span class="cline-any cline-neutral">&nbsp;</span>
1713
- <span class="cline-any cline-neutral">&nbsp;</span>
1714
- <span class="cline-any cline-neutral">&nbsp;</span>
1715
- <span class="cline-any cline-neutral">&nbsp;</span>
1716
- <span class="cline-any cline-no">&nbsp;</span>
1717
- <span class="cline-any cline-no">&nbsp;</span>
1718
- <span class="cline-any cline-neutral">&nbsp;</span>
1719
- <span class="cline-any cline-neutral">&nbsp;</span>
1720
- <span class="cline-any cline-neutral">&nbsp;</span>
1721
- <span class="cline-any cline-neutral">&nbsp;</span>
1722
- <span class="cline-any cline-neutral">&nbsp;</span>
1723
- <span class="cline-any cline-neutral">&nbsp;</span>
1724
- <span class="cline-any cline-neutral">&nbsp;</span>
1725
- <span class="cline-any cline-neutral">&nbsp;</span>
1726
- <span class="cline-any cline-neutral">&nbsp;</span>
1727
- <span class="cline-any cline-no">&nbsp;</span>
1728
- <span class="cline-any cline-neutral">&nbsp;</span>
1729
- <span class="cline-any cline-neutral">&nbsp;</span>
1730
- <span class="cline-any cline-no">&nbsp;</span>
1731
- <span class="cline-any cline-neutral">&nbsp;</span>
1732
- <span class="cline-any cline-neutral">&nbsp;</span>
1733
- <span class="cline-any cline-no">&nbsp;</span>
1734
- <span class="cline-any cline-no">&nbsp;</span>
1735
- <span class="cline-any cline-neutral">&nbsp;</span>
1736
- <span class="cline-any cline-neutral">&nbsp;</span>
1737
- <span class="cline-any cline-no">&nbsp;</span>
1738
- <span class="cline-any cline-no">&nbsp;</span>
1739
- <span class="cline-any cline-no">&nbsp;</span>
1740
- <span class="cline-any cline-no">&nbsp;</span>
1741
- <span class="cline-any cline-neutral">&nbsp;</span>
1742
- <span class="cline-any cline-no">&nbsp;</span>
1743
- <span class="cline-any cline-no">&nbsp;</span>
1744
- <span class="cline-any cline-neutral">&nbsp;</span>
1745
- <span class="cline-any cline-neutral">&nbsp;</span>
1746
- <span class="cline-any cline-neutral">&nbsp;</span>
1747
- <span class="cline-any cline-no">&nbsp;</span>
1748
- <span class="cline-any cline-no">&nbsp;</span>
1749
- <span class="cline-any cline-no">&nbsp;</span>
1750
- <span class="cline-any cline-no">&nbsp;</span>
1751
- <span class="cline-any cline-neutral">&nbsp;</span>
1752
- <span class="cline-any cline-no">&nbsp;</span>
1753
- <span class="cline-any cline-neutral">&nbsp;</span>
1754
- <span class="cline-any cline-no">&nbsp;</span>
1755
- <span class="cline-any cline-neutral">&nbsp;</span>
1756
- <span class="cline-any cline-neutral">&nbsp;</span>
1757
- <span class="cline-any cline-neutral">&nbsp;</span>
1758
- <span class="cline-any cline-neutral">&nbsp;</span>
1759
- <span class="cline-any cline-neutral">&nbsp;</span>
1760
- <span class="cline-any cline-neutral">&nbsp;</span>
1761
- <span class="cline-any cline-no">&nbsp;</span>
1762
- <span class="cline-any cline-no">&nbsp;</span>
1763
- <span class="cline-any cline-neutral">&nbsp;</span>
1764
- <span class="cline-any cline-neutral">&nbsp;</span>
1765
- <span class="cline-any cline-neutral">&nbsp;</span>
1766
- <span class="cline-any cline-neutral">&nbsp;</span>
1767
- <span class="cline-any cline-neutral">&nbsp;</span>
1768
- <span class="cline-any cline-neutral">&nbsp;</span>
1769
- <span class="cline-any cline-neutral">&nbsp;</span>
1770
- <span class="cline-any cline-neutral">&nbsp;</span>
1771
- <span class="cline-any cline-no">&nbsp;</span>
1772
- <span class="cline-any cline-no">&nbsp;</span>
1773
- <span class="cline-any cline-no">&nbsp;</span>
1774
- <span class="cline-any cline-no">&nbsp;</span>
1775
- <span class="cline-any cline-no">&nbsp;</span>
1776
- <span class="cline-any cline-no">&nbsp;</span>
1777
- <span class="cline-any cline-neutral">&nbsp;</span>
1778
- <span class="cline-any cline-no">&nbsp;</span>
1779
- <span class="cline-any cline-no">&nbsp;</span>
1780
- <span class="cline-any cline-no">&nbsp;</span>
1781
- <span class="cline-any cline-no">&nbsp;</span>
1782
- <span class="cline-any cline-no">&nbsp;</span>
1783
- <span class="cline-any cline-neutral">&nbsp;</span>
1784
- <span class="cline-any cline-no">&nbsp;</span>
1785
- <span class="cline-any cline-no">&nbsp;</span>
1786
- <span class="cline-any cline-no">&nbsp;</span>
1787
- <span class="cline-any cline-neutral">&nbsp;</span>
1788
- <span class="cline-any cline-neutral">&nbsp;</span>
1789
- <span class="cline-any cline-no">&nbsp;</span>
1790
- <span class="cline-any cline-no">&nbsp;</span>
1791
- <span class="cline-any cline-no">&nbsp;</span>
1792
- <span class="cline-any cline-no">&nbsp;</span>
1793
- <span class="cline-any cline-neutral">&nbsp;</span>
1794
- <span class="cline-any cline-neutral">&nbsp;</span>
1795
- <span class="cline-any cline-neutral">&nbsp;</span>
1796
- <span class="cline-any cline-neutral">&nbsp;</span>
1797
- <span class="cline-any cline-neutral">&nbsp;</span>
1798
- <span class="cline-any cline-no">&nbsp;</span>
1799
- <span class="cline-any cline-neutral">&nbsp;</span>
1800
- <span class="cline-any cline-neutral">&nbsp;</span>
1801
- <span class="cline-any cline-neutral">&nbsp;</span>
1802
- <span class="cline-any cline-neutral">&nbsp;</span>
1803
- <span class="cline-any cline-neutral">&nbsp;</span>
1804
- <span class="cline-any cline-neutral">&nbsp;</span>
1805
- <span class="cline-any cline-neutral">&nbsp;</span>
1806
- <span class="cline-any cline-neutral">&nbsp;</span>
1807
- <span class="cline-any cline-no">&nbsp;</span>
1808
- <span class="cline-any cline-no">&nbsp;</span>
1809
- <span class="cline-any cline-no">&nbsp;</span>
1810
- <span class="cline-any cline-no">&nbsp;</span>
1811
- <span class="cline-any cline-no">&nbsp;</span>
1812
- <span class="cline-any cline-no">&nbsp;</span>
1813
- <span class="cline-any cline-no">&nbsp;</span>
1814
- <span class="cline-any cline-neutral">&nbsp;</span>
1815
- <span class="cline-any cline-neutral">&nbsp;</span>
1816
- <span class="cline-any cline-neutral">&nbsp;</span>
1817
- <span class="cline-any cline-neutral">&nbsp;</span>
1818
- <span class="cline-any cline-no">&nbsp;</span>
1819
- <span class="cline-any cline-no">&nbsp;</span>
1820
- <span class="cline-any cline-neutral">&nbsp;</span>
1821
- <span class="cline-any cline-no">&nbsp;</span>
1822
- <span class="cline-any cline-neutral">&nbsp;</span>
1823
- <span class="cline-any cline-neutral">&nbsp;</span>
1824
- <span class="cline-any cline-neutral">&nbsp;</span>
1825
- <span class="cline-any cline-neutral">&nbsp;</span>
1826
- <span class="cline-any cline-no">&nbsp;</span>
1827
- <span class="cline-any cline-no">&nbsp;</span>
1828
- <span class="cline-any cline-no">&nbsp;</span>
1829
- <span class="cline-any cline-neutral">&nbsp;</span>
1830
- <span class="cline-any cline-neutral">&nbsp;</span>
1831
- <span class="cline-any cline-no">&nbsp;</span>
1832
- <span class="cline-any cline-neutral">&nbsp;</span>
1833
- <span class="cline-any cline-neutral">&nbsp;</span>
1834
- <span class="cline-any cline-no">&nbsp;</span>
1835
- <span class="cline-any cline-neutral">&nbsp;</span>
1836
- <span class="cline-any cline-neutral">&nbsp;</span>
1837
- <span class="cline-any cline-neutral">&nbsp;</span>
1838
- <span class="cline-any cline-no">&nbsp;</span>
1839
- <span class="cline-any cline-no">&nbsp;</span>
1840
- <span class="cline-any cline-no">&nbsp;</span>
1841
- <span class="cline-any cline-no">&nbsp;</span>
1842
- <span class="cline-any cline-neutral">&nbsp;</span>
1843
- <span class="cline-any cline-no">&nbsp;</span>
1844
- <span class="cline-any cline-neutral">&nbsp;</span>
1845
- <span class="cline-any cline-neutral">&nbsp;</span>
1846
- <span class="cline-any cline-neutral">&nbsp;</span>
1847
- <span class="cline-any cline-neutral">&nbsp;</span>
1848
- <span class="cline-any cline-neutral">&nbsp;</span>
1849
- <span class="cline-any cline-neutral">&nbsp;</span>
1850
- <span class="cline-any cline-neutral">&nbsp;</span>
1851
- <span class="cline-any cline-neutral">&nbsp;</span>
1852
- <span class="cline-any cline-neutral">&nbsp;</span>
1853
- <span class="cline-any cline-no">&nbsp;</span>
1854
- <span class="cline-any cline-neutral">&nbsp;</span>
1855
- <span class="cline-any cline-neutral">&nbsp;</span>
1856
- <span class="cline-any cline-neutral">&nbsp;</span>
1857
- <span class="cline-any cline-no">&nbsp;</span>
1858
- <span class="cline-any cline-no">&nbsp;</span>
1859
- <span class="cline-any cline-neutral">&nbsp;</span>
1860
- <span class="cline-any cline-no">&nbsp;</span>
1861
- <span class="cline-any cline-neutral">&nbsp;</span>
1862
- <span class="cline-any cline-neutral">&nbsp;</span>
1863
- <span class="cline-any cline-neutral">&nbsp;</span>
1864
- <span class="cline-any cline-no">&nbsp;</span>
1865
- <span class="cline-any cline-no">&nbsp;</span>
1866
- <span class="cline-any cline-neutral">&nbsp;</span>
1867
- <span class="cline-any cline-no">&nbsp;</span>
1868
- <span class="cline-any cline-neutral">&nbsp;</span>
1869
- <span class="cline-any cline-neutral">&nbsp;</span>
1870
- <span class="cline-any cline-neutral">&nbsp;</span>
1871
- <span class="cline-any cline-neutral">&nbsp;</span>
1872
- <span class="cline-any cline-neutral">&nbsp;</span>
1873
- <span class="cline-any cline-neutral">&nbsp;</span>
1874
- <span class="cline-any cline-neutral">&nbsp;</span>
1875
- <span class="cline-any cline-neutral">&nbsp;</span>
1876
- <span class="cline-any cline-neutral">&nbsp;</span>
1877
- <span class="cline-any cline-neutral">&nbsp;</span>
1878
- <span class="cline-any cline-no">&nbsp;</span>
1879
- <span class="cline-any cline-no">&nbsp;</span>
1880
- <span class="cline-any cline-neutral">&nbsp;</span>
1881
- <span class="cline-any cline-no">&nbsp;</span>
1882
- <span class="cline-any cline-no">&nbsp;</span>
1883
- <span class="cline-any cline-neutral">&nbsp;</span>
1884
- <span class="cline-any cline-neutral">&nbsp;</span>
1885
- <span class="cline-any cline-no">&nbsp;</span>
1886
- <span class="cline-any cline-no">&nbsp;</span>
1887
- <span class="cline-any cline-neutral">&nbsp;</span>
1888
- <span class="cline-any cline-neutral">&nbsp;</span>
1889
- <span class="cline-any cline-neutral">&nbsp;</span>
1890
- <span class="cline-any cline-neutral">&nbsp;</span>
1891
- <span class="cline-any cline-neutral">&nbsp;</span>
1892
- <span class="cline-any cline-neutral">&nbsp;</span>
1893
- <span class="cline-any cline-no">&nbsp;</span>
1894
- <span class="cline-any cline-no">&nbsp;</span>
1895
- <span class="cline-any cline-no">&nbsp;</span>
1896
- <span class="cline-any cline-no">&nbsp;</span>
1897
- <span class="cline-any cline-no">&nbsp;</span>
1898
- <span class="cline-any cline-neutral">&nbsp;</span>
1899
- <span class="cline-any cline-no">&nbsp;</span>
1900
- <span class="cline-any cline-no">&nbsp;</span>
1901
- <span class="cline-any cline-neutral">&nbsp;</span>
1902
- <span class="cline-any cline-no">&nbsp;</span>
1903
- <span class="cline-any cline-no">&nbsp;</span>
1904
- <span class="cline-any cline-neutral">&nbsp;</span>
1905
- <span class="cline-any cline-neutral">&nbsp;</span>
1906
- <span class="cline-any cline-no">&nbsp;</span>
1907
- <span class="cline-any cline-neutral">&nbsp;</span>
1908
- <span class="cline-any cline-neutral">&nbsp;</span>
1909
- <span class="cline-any cline-neutral">&nbsp;</span>
1910
- <span class="cline-any cline-no">&nbsp;</span>
1911
- <span class="cline-any cline-neutral">&nbsp;</span>
1912
- <span class="cline-any cline-neutral">&nbsp;</span>
1913
- <span class="cline-any cline-neutral">&nbsp;</span>
1914
- <span class="cline-any cline-neutral">&nbsp;</span>
1915
- <span class="cline-any cline-neutral">&nbsp;</span>
1916
- <span class="cline-any cline-neutral">&nbsp;</span>
1917
- <span class="cline-any cline-neutral">&nbsp;</span>
1918
- <span class="cline-any cline-neutral">&nbsp;</span>
1919
- <span class="cline-any cline-neutral">&nbsp;</span>
1920
- <span class="cline-any cline-no">&nbsp;</span>
1921
- <span class="cline-any cline-neutral">&nbsp;</span>
1922
- <span class="cline-any cline-neutral">&nbsp;</span>
1923
- <span class="cline-any cline-neutral">&nbsp;</span>
1924
- <span class="cline-any cline-neutral">&nbsp;</span>
1925
- <span class="cline-any cline-neutral">&nbsp;</span>
1926
- <span class="cline-any cline-neutral">&nbsp;</span>
1927
- <span class="cline-any cline-no">&nbsp;</span>
1928
- <span class="cline-any cline-neutral">&nbsp;</span>
1929
- <span class="cline-any cline-neutral">&nbsp;</span>
1930
- <span class="cline-any cline-neutral">&nbsp;</span>
1931
- <span class="cline-any cline-no">&nbsp;</span>
1932
- <span class="cline-any cline-neutral">&nbsp;</span>
1933
- <span class="cline-any cline-neutral">&nbsp;</span>
1934
- <span class="cline-any cline-neutral">&nbsp;</span>
1935
- <span class="cline-any cline-no">&nbsp;</span>
1936
- <span class="cline-any cline-no">&nbsp;</span>
1937
- <span class="cline-any cline-no">&nbsp;</span>
1938
- <span class="cline-any cline-no">&nbsp;</span>
1939
- <span class="cline-any cline-neutral">&nbsp;</span>
1940
- <span class="cline-any cline-no">&nbsp;</span>
1941
- <span class="cline-any cline-no">&nbsp;</span>
1942
- <span class="cline-any cline-neutral">&nbsp;</span>
1943
- <span class="cline-any cline-no">&nbsp;</span>
1944
- <span class="cline-any cline-neutral">&nbsp;</span>
1945
- <span class="cline-any cline-no">&nbsp;</span>
1946
- <span class="cline-any cline-neutral">&nbsp;</span>
1947
- <span class="cline-any cline-no">&nbsp;</span>
1948
- <span class="cline-any cline-no">&nbsp;</span>
1949
- <span class="cline-any cline-no">&nbsp;</span>
1950
- <span class="cline-any cline-neutral">&nbsp;</span>
1951
- <span class="cline-any cline-neutral">&nbsp;</span>
1952
- <span class="cline-any cline-no">&nbsp;</span>
1953
- <span class="cline-any cline-neutral">&nbsp;</span>
1954
- <span class="cline-any cline-neutral">&nbsp;</span>
1955
- <span class="cline-any cline-neutral">&nbsp;</span>
1956
- <span class="cline-any cline-no">&nbsp;</span>
1957
- <span class="cline-any cline-neutral">&nbsp;</span>
1958
- <span class="cline-any cline-neutral">&nbsp;</span>
1959
- <span class="cline-any cline-neutral">&nbsp;</span>
1960
- <span class="cline-any cline-no">&nbsp;</span>
1961
- <span class="cline-any cline-neutral">&nbsp;</span>
1962
- <span class="cline-any cline-neutral">&nbsp;</span>
1963
- <span class="cline-any cline-neutral">&nbsp;</span>
1964
- <span class="cline-any cline-no">&nbsp;</span>
1965
- <span class="cline-any cline-no">&nbsp;</span>
1966
- <span class="cline-any cline-no">&nbsp;</span>
1967
- <span class="cline-any cline-neutral">&nbsp;</span>
1968
- <span class="cline-any cline-neutral">&nbsp;</span>
1969
- <span class="cline-any cline-no">&nbsp;</span>
1970
- <span class="cline-any cline-no">&nbsp;</span>
1971
- <span class="cline-any cline-neutral">&nbsp;</span>
1972
- <span class="cline-any cline-neutral">&nbsp;</span>
1973
- <span class="cline-any cline-no">&nbsp;</span>
1974
- <span class="cline-any cline-neutral">&nbsp;</span>
1975
- <span class="cline-any cline-neutral">&nbsp;</span>
1976
- <span class="cline-any cline-neutral">&nbsp;</span>
1977
- <span class="cline-any cline-neutral">&nbsp;</span>
1978
- <span class="cline-any cline-neutral">&nbsp;</span>
1979
- <span class="cline-any cline-neutral">&nbsp;</span>
1980
- <span class="cline-any cline-no">&nbsp;</span>
1981
- <span class="cline-any cline-no">&nbsp;</span>
1982
- <span class="cline-any cline-no">&nbsp;</span>
1983
- <span class="cline-any cline-no">&nbsp;</span>
1984
- <span class="cline-any cline-neutral">&nbsp;</span>
1985
- <span class="cline-any cline-neutral">&nbsp;</span>
1986
- <span class="cline-any cline-neutral">&nbsp;</span>
1987
- <span class="cline-any cline-no">&nbsp;</span>
1988
- <span class="cline-any cline-neutral">&nbsp;</span>
1989
- <span class="cline-any cline-neutral">&nbsp;</span>
1990
- <span class="cline-any cline-neutral">&nbsp;</span>
1991
- <span class="cline-any cline-no">&nbsp;</span>
1992
- <span class="cline-any cline-neutral">&nbsp;</span>
1993
- <span class="cline-any cline-neutral">&nbsp;</span>
1994
- <span class="cline-any cline-neutral">&nbsp;</span>
1995
- <span class="cline-any cline-no">&nbsp;</span>
1996
- <span class="cline-any cline-no">&nbsp;</span>
1997
- <span class="cline-any cline-neutral">&nbsp;</span>
1998
- <span class="cline-any cline-no">&nbsp;</span>
1999
- <span class="cline-any cline-neutral">&nbsp;</span>
2000
- <span class="cline-any cline-neutral">&nbsp;</span>
2001
- <span class="cline-any cline-neutral">&nbsp;</span>
2002
- <span class="cline-any cline-no">&nbsp;</span>
2003
- <span class="cline-any cline-no">&nbsp;</span>
2004
- <span class="cline-any cline-no">&nbsp;</span>
2005
- <span class="cline-any cline-no">&nbsp;</span>
2006
- <span class="cline-any cline-neutral">&nbsp;</span>
2007
- <span class="cline-any cline-neutral">&nbsp;</span>
2008
- <span class="cline-any cline-no">&nbsp;</span>
2009
- <span class="cline-any cline-no">&nbsp;</span>
2010
- <span class="cline-any cline-no">&nbsp;</span>
2011
- <span class="cline-any cline-neutral">&nbsp;</span>
2012
- <span class="cline-any cline-no">&nbsp;</span>
2013
- <span class="cline-any cline-neutral">&nbsp;</span>
2014
- <span class="cline-any cline-neutral">&nbsp;</span>
2015
- <span class="cline-any cline-neutral">&nbsp;</span>
2016
- <span class="cline-any cline-neutral">&nbsp;</span>
2017
- <span class="cline-any cline-neutral">&nbsp;</span>
2018
- <span class="cline-any cline-neutral">&nbsp;</span>
2019
- <span class="cline-any cline-neutral">&nbsp;</span>
2020
- <span class="cline-any cline-neutral">&nbsp;</span>
2021
- <span class="cline-any cline-no">&nbsp;</span>
2022
- <span class="cline-any cline-no">&nbsp;</span>
2023
- <span class="cline-any cline-no">&nbsp;</span>
2024
- <span class="cline-any cline-no">&nbsp;</span>
2025
- <span class="cline-any cline-neutral">&nbsp;</span>
2026
- <span class="cline-any cline-no">&nbsp;</span>
2027
- <span class="cline-any cline-no">&nbsp;</span>
2028
- <span class="cline-any cline-no">&nbsp;</span>
2029
- <span class="cline-any cline-neutral">&nbsp;</span>
2030
- <span class="cline-any cline-neutral">&nbsp;</span>
2031
- <span class="cline-any cline-neutral">&nbsp;</span>
2032
- <span class="cline-any cline-neutral">&nbsp;</span>
2033
- <span class="cline-any cline-neutral">&nbsp;</span>
2034
- <span class="cline-any cline-neutral">&nbsp;</span>
2035
- <span class="cline-any cline-neutral">&nbsp;</span>
2036
- <span class="cline-any cline-neutral">&nbsp;</span>
2037
- <span class="cline-any cline-neutral">&nbsp;</span>
2038
- <span class="cline-any cline-neutral">&nbsp;</span>
2039
- <span class="cline-any cline-neutral">&nbsp;</span>
2040
- <span class="cline-any cline-neutral">&nbsp;</span>
2041
- <span class="cline-any cline-neutral">&nbsp;</span>
2042
- <span class="cline-any cline-neutral">&nbsp;</span>
2043
- <span class="cline-any cline-neutral">&nbsp;</span>
2044
- <span class="cline-any cline-neutral">&nbsp;</span>
2045
- <span class="cline-any cline-neutral">&nbsp;</span>
2046
- <span class="cline-any cline-neutral">&nbsp;</span>
2047
- <span class="cline-any cline-neutral">&nbsp;</span>
2048
- <span class="cline-any cline-neutral">&nbsp;</span>
2049
- <span class="cline-any cline-neutral">&nbsp;</span>
2050
- <span class="cline-any cline-neutral">&nbsp;</span>
2051
- <span class="cline-any cline-neutral">&nbsp;</span>
2052
- <span class="cline-any cline-neutral">&nbsp;</span>
2053
- <span class="cline-any cline-neutral">&nbsp;</span>
2054
- <span class="cline-any cline-neutral">&nbsp;</span>
2055
- <span class="cline-any cline-neutral">&nbsp;</span>
2056
- <span class="cline-any cline-neutral">&nbsp;</span>
2057
- <span class="cline-any cline-neutral">&nbsp;</span>
2058
- <span class="cline-any cline-no">&nbsp;</span>
2059
- <span class="cline-any cline-no">&nbsp;</span>
2060
- <span class="cline-any cline-no">&nbsp;</span>
2061
- <span class="cline-any cline-neutral">&nbsp;</span>
2062
- <span class="cline-any cline-neutral">&nbsp;</span>
2063
- <span class="cline-any cline-neutral">&nbsp;</span>
2064
- <span class="cline-any cline-neutral">&nbsp;</span>
2065
- <span class="cline-any cline-neutral">&nbsp;</span>
2066
- <span class="cline-any cline-neutral">&nbsp;</span>
2067
- <span class="cline-any cline-neutral">&nbsp;</span>
2068
- <span class="cline-any cline-no">&nbsp;</span>
2069
- <span class="cline-any cline-no">&nbsp;</span>
2070
- <span class="cline-any cline-no">&nbsp;</span>
2071
- <span class="cline-any cline-no">&nbsp;</span>
2072
- <span class="cline-any cline-no">&nbsp;</span>
2073
- <span class="cline-any cline-no">&nbsp;</span>
2074
- <span class="cline-any cline-neutral">&nbsp;</span>
2075
- <span class="cline-any cline-no">&nbsp;</span>
2076
- <span class="cline-any cline-no">&nbsp;</span>
2077
- <span class="cline-any cline-no">&nbsp;</span>
2078
- <span class="cline-any cline-no">&nbsp;</span>
2079
- <span class="cline-any cline-no">&nbsp;</span>
2080
- <span class="cline-any cline-no">&nbsp;</span>
2081
- <span class="cline-any cline-no">&nbsp;</span>
2082
- <span class="cline-any cline-no">&nbsp;</span>
2083
- <span class="cline-any cline-neutral">&nbsp;</span>
2084
- <span class="cline-any cline-no">&nbsp;</span>
2085
- <span class="cline-any cline-no">&nbsp;</span>
2086
- <span class="cline-any cline-no">&nbsp;</span>
2087
- <span class="cline-any cline-neutral">&nbsp;</span>
2088
- <span class="cline-any cline-no">&nbsp;</span>
2089
- <span class="cline-any cline-no">&nbsp;</span>
2090
- <span class="cline-any cline-no">&nbsp;</span>
2091
- <span class="cline-any cline-no">&nbsp;</span>
2092
- <span class="cline-any cline-neutral">&nbsp;</span>
2093
- <span class="cline-any cline-no">&nbsp;</span>
2094
- <span class="cline-any cline-no">&nbsp;</span>
2095
- <span class="cline-any cline-neutral">&nbsp;</span>
2096
- <span class="cline-any cline-no">&nbsp;</span>
2097
- <span class="cline-any cline-neutral">&nbsp;</span>
2098
- <span class="cline-any cline-neutral">&nbsp;</span>
2099
- <span class="cline-any cline-neutral">&nbsp;</span>
2100
- <span class="cline-any cline-no">&nbsp;</span>
2101
- <span class="cline-any cline-no">&nbsp;</span>
2102
- <span class="cline-any cline-neutral">&nbsp;</span>
2103
- <span class="cline-any cline-no">&nbsp;</span>
2104
- <span class="cline-any cline-neutral">&nbsp;</span>
2105
- <span class="cline-any cline-no">&nbsp;</span>
2106
- <span class="cline-any cline-no">&nbsp;</span>
2107
- <span class="cline-any cline-neutral">&nbsp;</span>
2108
- <span class="cline-any cline-no">&nbsp;</span>
2109
- <span class="cline-any cline-no">&nbsp;</span>
2110
- <span class="cline-any cline-neutral">&nbsp;</span>
2111
- <span class="cline-any cline-no">&nbsp;</span>
2112
- <span class="cline-any cline-neutral">&nbsp;</span>
2113
- <span class="cline-any cline-neutral">&nbsp;</span>
2114
- <span class="cline-any cline-no">&nbsp;</span>
2115
- <span class="cline-any cline-no">&nbsp;</span>
2116
- <span class="cline-any cline-neutral">&nbsp;</span>
2117
- <span class="cline-any cline-neutral">&nbsp;</span>
2118
- <span class="cline-any cline-neutral">&nbsp;</span>
2119
- <span class="cline-any cline-neutral">&nbsp;</span>
2120
- <span class="cline-any cline-neutral">&nbsp;</span>
2121
- <span class="cline-any cline-neutral">&nbsp;</span>
2122
- <span class="cline-any cline-neutral">&nbsp;</span>
2123
- <span class="cline-any cline-neutral">&nbsp;</span>
2124
- <span class="cline-any cline-no">&nbsp;</span>
2125
- <span class="cline-any cline-no">&nbsp;</span>
2126
- <span class="cline-any cline-no">&nbsp;</span>
2127
- <span class="cline-any cline-no">&nbsp;</span>
2128
- <span class="cline-any cline-no">&nbsp;</span>
2129
- <span class="cline-any cline-no">&nbsp;</span>
2130
- <span class="cline-any cline-no">&nbsp;</span>
2131
- <span class="cline-any cline-no">&nbsp;</span>
2132
- <span class="cline-any cline-no">&nbsp;</span>
2133
- <span class="cline-any cline-no">&nbsp;</span>
2134
- <span class="cline-any cline-neutral">&nbsp;</span>
2135
- <span class="cline-any cline-no">&nbsp;</span>
2136
- <span class="cline-any cline-no">&nbsp;</span>
2137
- <span class="cline-any cline-no">&nbsp;</span>
2138
- <span class="cline-any cline-no">&nbsp;</span>
2139
- <span class="cline-any cline-no">&nbsp;</span>
2140
- <span class="cline-any cline-neutral">&nbsp;</span>
2141
- <span class="cline-any cline-no">&nbsp;</span>
2142
- <span class="cline-any cline-no">&nbsp;</span>
2143
- <span class="cline-any cline-neutral">&nbsp;</span>
2144
- <span class="cline-any cline-no">&nbsp;</span>
2145
- <span class="cline-any cline-neutral">&nbsp;</span>
2146
- <span class="cline-any cline-neutral">&nbsp;</span>
2147
- <span class="cline-any cline-neutral">&nbsp;</span>
2148
- <span class="cline-any cline-no">&nbsp;</span>
2149
- <span class="cline-any cline-no">&nbsp;</span>
2150
- <span class="cline-any cline-no">&nbsp;</span>
2151
- <span class="cline-any cline-neutral">&nbsp;</span>
2152
- <span class="cline-any cline-no">&nbsp;</span>
2153
- <span class="cline-any cline-neutral">&nbsp;</span>
2154
- <span class="cline-any cline-no">&nbsp;</span>
2155
- <span class="cline-any cline-no">&nbsp;</span>
2156
- <span class="cline-any cline-neutral">&nbsp;</span>
2157
- <span class="cline-any cline-no">&nbsp;</span>
2158
- <span class="cline-any cline-neutral">&nbsp;</span>
2159
- <span class="cline-any cline-neutral">&nbsp;</span>
2160
- <span class="cline-any cline-neutral">&nbsp;</span>
2161
- <span class="cline-any cline-neutral">&nbsp;</span>
2162
- <span class="cline-any cline-neutral">&nbsp;</span>
2163
- <span class="cline-any cline-neutral">&nbsp;</span>
2164
- <span class="cline-any cline-neutral">&nbsp;</span>
2165
- <span class="cline-any cline-neutral">&nbsp;</span>
2166
- <span class="cline-any cline-neutral">&nbsp;</span>
2167
- <span class="cline-any cline-neutral">&nbsp;</span>
2168
- <span class="cline-any cline-neutral">&nbsp;</span>
2169
- <span class="cline-any cline-neutral">&nbsp;</span>
2170
- <span class="cline-any cline-neutral">&nbsp;</span>
2171
- <span class="cline-any cline-neutral">&nbsp;</span>
2172
- <span class="cline-any cline-no">&nbsp;</span>
2173
- <span class="cline-any cline-neutral">&nbsp;</span>
2174
- <span class="cline-any cline-neutral">&nbsp;</span>
2175
- <span class="cline-any cline-neutral">&nbsp;</span>
2176
- <span class="cline-any cline-neutral">&nbsp;</span>
2177
- <span class="cline-any cline-neutral">&nbsp;</span>
2178
- <span class="cline-any cline-neutral">&nbsp;</span>
2179
- <span class="cline-any cline-no">&nbsp;</span>
2180
- <span class="cline-any cline-neutral">&nbsp;</span>
2181
- <span class="cline-any cline-neutral">&nbsp;</span>
2182
- <span class="cline-any cline-neutral">&nbsp;</span>
2183
- <span class="cline-any cline-neutral">&nbsp;</span>
2184
- <span class="cline-any cline-neutral">&nbsp;</span>
2185
- <span class="cline-any cline-neutral">&nbsp;</span>
2186
- <span class="cline-any cline-no">&nbsp;</span>
2187
- <span class="cline-any cline-neutral">&nbsp;</span>
2188
- <span class="cline-any cline-neutral">&nbsp;</span>
2189
- <span class="cline-any cline-neutral">&nbsp;</span>
2190
- <span class="cline-any cline-neutral">&nbsp;</span>
2191
- <span class="cline-any cline-neutral">&nbsp;</span>
2192
- <span class="cline-any cline-neutral">&nbsp;</span>
2193
- <span class="cline-any cline-neutral">&nbsp;</span>
2194
- <span class="cline-any cline-neutral">&nbsp;</span>
2195
- <span class="cline-any cline-neutral">&nbsp;</span>
2196
- <span class="cline-any cline-neutral">&nbsp;</span>
2197
- <span class="cline-any cline-no">&nbsp;</span>
2198
- <span class="cline-any cline-no">&nbsp;</span>
2199
- <span class="cline-any cline-no">&nbsp;</span>
2200
- <span class="cline-any cline-neutral">&nbsp;</span>
2201
- <span class="cline-any cline-neutral">&nbsp;</span>
2202
- <span class="cline-any cline-neutral">&nbsp;</span>
2203
- <span class="cline-any cline-neutral">&nbsp;</span>
2204
- <span class="cline-any cline-neutral">&nbsp;</span>
2205
- <span class="cline-any cline-neutral">&nbsp;</span>
2206
- <span class="cline-any cline-neutral">&nbsp;</span>
2207
- <span class="cline-any cline-neutral">&nbsp;</span>
2208
- <span class="cline-any cline-neutral">&nbsp;</span>
2209
- <span class="cline-any cline-no">&nbsp;</span>
2210
- <span class="cline-any cline-neutral">&nbsp;</span>
2211
- <span class="cline-any cline-neutral">&nbsp;</span>
2212
- <span class="cline-any cline-neutral">&nbsp;</span>
2213
- <span class="cline-any cline-neutral">&nbsp;</span>
2214
- <span class="cline-any cline-neutral">&nbsp;</span>
2215
- <span class="cline-any cline-neutral">&nbsp;</span>
2216
- <span class="cline-any cline-neutral">&nbsp;</span>
2217
- <span class="cline-any cline-neutral">&nbsp;</span>
2218
- <span class="cline-any cline-neutral">&nbsp;</span>
2219
- <span class="cline-any cline-neutral">&nbsp;</span>
2220
- <span class="cline-any cline-neutral">&nbsp;</span>
2221
- <span class="cline-any cline-neutral">&nbsp;</span>
2222
- <span class="cline-any cline-neutral">&nbsp;</span>
2223
- <span class="cline-any cline-neutral">&nbsp;</span>
2224
- <span class="cline-any cline-neutral">&nbsp;</span>
2225
- <span class="cline-any cline-neutral">&nbsp;</span>
2226
- <span class="cline-any cline-neutral">&nbsp;</span>
2227
- <span class="cline-any cline-neutral">&nbsp;</span>
2228
- <span class="cline-any cline-neutral">&nbsp;</span>
2229
- <span class="cline-any cline-neutral">&nbsp;</span>
2230
- <span class="cline-any cline-neutral">&nbsp;</span>
2231
- <span class="cline-any cline-neutral">&nbsp;</span>
2232
- <span class="cline-any cline-neutral">&nbsp;</span>
2233
- <span class="cline-any cline-neutral">&nbsp;</span>
2234
- <span class="cline-any cline-neutral">&nbsp;</span>
2235
- <span class="cline-any cline-neutral">&nbsp;</span>
2236
- <span class="cline-any cline-no">&nbsp;</span>
2237
- <span class="cline-any cline-no">&nbsp;</span>
2238
- <span class="cline-any cline-neutral">&nbsp;</span>
2239
- <span class="cline-any cline-neutral">&nbsp;</span>
2240
- <span class="cline-any cline-neutral">&nbsp;</span>
2241
- <span class="cline-any cline-neutral">&nbsp;</span>
2242
- <span class="cline-any cline-no">&nbsp;</span>
2243
- <span class="cline-any cline-no">&nbsp;</span>
2244
- <span class="cline-any cline-neutral">&nbsp;</span>
2245
- <span class="cline-any cline-neutral">&nbsp;</span>
2246
- <span class="cline-any cline-neutral">&nbsp;</span>
2247
- <span class="cline-any cline-neutral">&nbsp;</span>
2248
- <span class="cline-any cline-neutral">&nbsp;</span>
2249
- <span class="cline-any cline-neutral">&nbsp;</span>
2250
- <span class="cline-any cline-neutral">&nbsp;</span>
2251
- <span class="cline-any cline-no">&nbsp;</span>
2252
- <span class="cline-any cline-no">&nbsp;</span>
2253
- <span class="cline-any cline-neutral">&nbsp;</span>
2254
- <span class="cline-any cline-no">&nbsp;</span>
2255
- <span class="cline-any cline-no">&nbsp;</span>
2256
- <span class="cline-any cline-neutral">&nbsp;</span>
2257
- <span class="cline-any cline-neutral">&nbsp;</span>
2258
- <span class="cline-any cline-neutral">&nbsp;</span>
2259
- <span class="cline-any cline-neutral">&nbsp;</span>
2260
- <span class="cline-any cline-neutral">&nbsp;</span>
2261
- <span class="cline-any cline-neutral">&nbsp;</span>
2262
- <span class="cline-any cline-neutral">&nbsp;</span>
2263
- <span class="cline-any cline-no">&nbsp;</span>
2264
- <span class="cline-any cline-no">&nbsp;</span>
2265
- <span class="cline-any cline-no">&nbsp;</span>
2266
- <span class="cline-any cline-neutral">&nbsp;</span>
2267
- <span class="cline-any cline-no">&nbsp;</span>
2268
- <span class="cline-any cline-no">&nbsp;</span>
2269
- <span class="cline-any cline-no">&nbsp;</span>
2270
- <span class="cline-any cline-no">&nbsp;</span>
2271
- <span class="cline-any cline-neutral">&nbsp;</span>
2272
- <span class="cline-any cline-no">&nbsp;</span>
2273
- <span class="cline-any cline-neutral">&nbsp;</span>
2274
- <span class="cline-any cline-neutral">&nbsp;</span>
2275
- <span class="cline-any cline-neutral">&nbsp;</span>
2276
- <span class="cline-any cline-neutral">&nbsp;</span>
2277
- <span class="cline-any cline-no">&nbsp;</span>
2278
- <span class="cline-any cline-no">&nbsp;</span>
2279
- <span class="cline-any cline-neutral">&nbsp;</span>
2280
- <span class="cline-any cline-no">&nbsp;</span>
2281
- <span class="cline-any cline-no">&nbsp;</span>
2282
- <span class="cline-any cline-no">&nbsp;</span>
2283
- <span class="cline-any cline-neutral">&nbsp;</span>
2284
- <span class="cline-any cline-neutral">&nbsp;</span>
2285
- <span class="cline-any cline-no">&nbsp;</span>
2286
- <span class="cline-any cline-no">&nbsp;</span>
2287
- <span class="cline-any cline-neutral">&nbsp;</span>
2288
- <span class="cline-any cline-no">&nbsp;</span>
2289
- <span class="cline-any cline-neutral">&nbsp;</span>
2290
- <span class="cline-any cline-no">&nbsp;</span>
2291
- <span class="cline-any cline-neutral">&nbsp;</span>
2292
- <span class="cline-any cline-no">&nbsp;</span>
2293
- <span class="cline-any cline-neutral">&nbsp;</span>
2294
- <span class="cline-any cline-neutral">&nbsp;</span>
2295
- <span class="cline-any cline-neutral">&nbsp;</span>
2296
- <span class="cline-any cline-neutral">&nbsp;</span>
2297
- <span class="cline-any cline-neutral">&nbsp;</span>
2298
- <span class="cline-any cline-no">&nbsp;</span>
2299
- <span class="cline-any cline-no">&nbsp;</span>
2300
- <span class="cline-any cline-neutral">&nbsp;</span>
2301
- <span class="cline-any cline-neutral">&nbsp;</span>
2302
- <span class="cline-any cline-neutral">&nbsp;</span>
2303
- <span class="cline-any cline-neutral">&nbsp;</span>
2304
- <span class="cline-any cline-neutral">&nbsp;</span>
2305
- <span class="cline-any cline-neutral">&nbsp;</span>
2306
- <span class="cline-any cline-neutral">&nbsp;</span>
2307
- <span class="cline-any cline-neutral">&nbsp;</span>
2308
- <span class="cline-any cline-neutral">&nbsp;</span>
2309
- <span class="cline-any cline-neutral">&nbsp;</span>
2310
- <span class="cline-any cline-no">&nbsp;</span>
2311
- <span class="cline-any cline-no">&nbsp;</span>
2312
- <span class="cline-any cline-no">&nbsp;</span>
2313
- <span class="cline-any cline-neutral">&nbsp;</span>
2314
- <span class="cline-any cline-no">&nbsp;</span>
2315
- <span class="cline-any cline-neutral">&nbsp;</span>
2316
- <span class="cline-any cline-neutral">&nbsp;</span>
2317
- <span class="cline-any cline-neutral">&nbsp;</span>
2318
- <span class="cline-any cline-neutral">&nbsp;</span>
2319
- <span class="cline-any cline-neutral">&nbsp;</span>
2320
- <span class="cline-any cline-no">&nbsp;</span>
2321
- <span class="cline-any cline-neutral">&nbsp;</span>
2322
- <span class="cline-any cline-neutral">&nbsp;</span>
2323
- <span class="cline-any cline-neutral">&nbsp;</span>
2324
- <span class="cline-any cline-neutral">&nbsp;</span>
2325
- <span class="cline-any cline-neutral">&nbsp;</span>
2326
- <span class="cline-any cline-neutral">&nbsp;</span>
2327
- <span class="cline-any cline-neutral">&nbsp;</span>
2328
- <span class="cline-any cline-neutral">&nbsp;</span>
2329
- <span class="cline-any cline-neutral">&nbsp;</span>
2330
- <span class="cline-any cline-neutral">&nbsp;</span>
2331
- <span class="cline-any cline-neutral">&nbsp;</span>
2332
- <span class="cline-any cline-neutral">&nbsp;</span>
2333
- <span class="cline-any cline-neutral">&nbsp;</span>
2334
- <span class="cline-any cline-neutral">&nbsp;</span>
2335
- <span class="cline-any cline-neutral">&nbsp;</span>
2336
- <span class="cline-any cline-neutral">&nbsp;</span>
2337
- <span class="cline-any cline-neutral">&nbsp;</span>
2338
- <span class="cline-any cline-neutral">&nbsp;</span>
2339
- <span class="cline-any cline-neutral">&nbsp;</span>
2340
- <span class="cline-any cline-neutral">&nbsp;</span>
2341
- <span class="cline-any cline-no">&nbsp;</span>
2342
- <span class="cline-any cline-no">&nbsp;</span>
2343
- <span class="cline-any cline-neutral">&nbsp;</span>
2344
- <span class="cline-any cline-no">&nbsp;</span>
2345
- <span class="cline-any cline-neutral">&nbsp;</span>
2346
- <span class="cline-any cline-neutral">&nbsp;</span>
2347
- <span class="cline-any cline-no">&nbsp;</span>
2348
- <span class="cline-any cline-neutral">&nbsp;</span>
2349
- <span class="cline-any cline-neutral">&nbsp;</span>
2350
- <span class="cline-any cline-neutral">&nbsp;</span>
2351
- <span class="cline-any cline-neutral">&nbsp;</span>
2352
- <span class="cline-any cline-neutral">&nbsp;</span>
2353
- <span class="cline-any cline-no">&nbsp;</span>
2354
- <span class="cline-any cline-no">&nbsp;</span>
2355
- <span class="cline-any cline-no">&nbsp;</span>
2356
- <span class="cline-any cline-no">&nbsp;</span>
2357
- <span class="cline-any cline-no">&nbsp;</span>
2358
- <span class="cline-any cline-neutral">&nbsp;</span>
2359
- <span class="cline-any cline-no">&nbsp;</span>
2360
- <span class="cline-any cline-no">&nbsp;</span>
2361
- <span class="cline-any cline-no">&nbsp;</span>
2362
- <span class="cline-any cline-no">&nbsp;</span>
2363
- <span class="cline-any cline-neutral">&nbsp;</span>
2364
- <span class="cline-any cline-neutral">&nbsp;</span>
2365
- <span class="cline-any cline-neutral">&nbsp;</span>
2366
- <span class="cline-any cline-neutral">&nbsp;</span>
2367
- <span class="cline-any cline-neutral">&nbsp;</span>
2368
- <span class="cline-any cline-neutral">&nbsp;</span>
2369
- <span class="cline-any cline-neutral">&nbsp;</span>
2370
- <span class="cline-any cline-neutral">&nbsp;</span>
2371
- <span class="cline-any cline-neutral">&nbsp;</span>
2372
- <span class="cline-any cline-neutral">&nbsp;</span>
2373
- <span class="cline-any cline-neutral">&nbsp;</span>
2374
- <span class="cline-any cline-neutral">&nbsp;</span>
2375
- <span class="cline-any cline-neutral">&nbsp;</span>
2376
- <span class="cline-any cline-neutral">&nbsp;</span>
2377
- <span class="cline-any cline-neutral">&nbsp;</span>
2378
- <span class="cline-any cline-neutral">&nbsp;</span>
2379
- <span class="cline-any cline-neutral">&nbsp;</span>
2380
- <span class="cline-any cline-neutral">&nbsp;</span>
2381
- <span class="cline-any cline-neutral">&nbsp;</span>
2382
- <span class="cline-any cline-neutral">&nbsp;</span>
2383
- <span class="cline-any cline-no">&nbsp;</span>
2384
- <span class="cline-any cline-no">&nbsp;</span>
2385
- <span class="cline-any cline-neutral">&nbsp;</span>
2386
- <span class="cline-any cline-neutral">&nbsp;</span>
2387
- <span class="cline-any cline-neutral">&nbsp;</span>
2388
- <span class="cline-any cline-neutral">&nbsp;</span>
2389
- <span class="cline-any cline-neutral">&nbsp;</span>
2390
- <span class="cline-any cline-neutral">&nbsp;</span>
2391
- <span class="cline-any cline-neutral">&nbsp;</span>
2392
- <span class="cline-any cline-no">&nbsp;</span>
2393
- <span class="cline-any cline-no">&nbsp;</span>
2394
- <span class="cline-any cline-no">&nbsp;</span>
2395
- <span class="cline-any cline-neutral">&nbsp;</span>
2396
- <span class="cline-any cline-no">&nbsp;</span>
2397
- <span class="cline-any cline-no">&nbsp;</span>
2398
- <span class="cline-any cline-no">&nbsp;</span>
2399
- <span class="cline-any cline-neutral">&nbsp;</span>
2400
- <span class="cline-any cline-neutral">&nbsp;</span>
2401
- <span class="cline-any cline-neutral">&nbsp;</span>
2402
- <span class="cline-any cline-neutral">&nbsp;</span>
2403
- <span class="cline-any cline-neutral">&nbsp;</span>
2404
- <span class="cline-any cline-neutral">&nbsp;</span>
2405
- <span class="cline-any cline-neutral">&nbsp;</span>
2406
- <span class="cline-any cline-no">&nbsp;</span>
2407
- <span class="cline-any cline-neutral">&nbsp;</span>
2408
- <span class="cline-any cline-neutral">&nbsp;</span>
2409
- <span class="cline-any cline-neutral">&nbsp;</span>
2410
- <span class="cline-any cline-neutral">&nbsp;</span>
2411
- <span class="cline-any cline-neutral">&nbsp;</span>
2412
- <span class="cline-any cline-no">&nbsp;</span>
2413
- <span class="cline-any cline-no">&nbsp;</span>
2414
- <span class="cline-any cline-no">&nbsp;</span>
2415
- <span class="cline-any cline-neutral">&nbsp;</span>
2416
- <span class="cline-any cline-no">&nbsp;</span>
2417
- <span class="cline-any cline-neutral">&nbsp;</span>
2418
- <span class="cline-any cline-neutral">&nbsp;</span>
2419
- <span class="cline-any cline-neutral">&nbsp;</span>
2420
- <span class="cline-any cline-neutral">&nbsp;</span>
2421
- <span class="cline-any cline-neutral">&nbsp;</span>
2422
- <span class="cline-any cline-neutral">&nbsp;</span>
2423
- <span class="cline-any cline-no">&nbsp;</span>
2424
- <span class="cline-any cline-no">&nbsp;</span>
2425
- <span class="cline-any cline-neutral">&nbsp;</span>
2426
- <span class="cline-any cline-no">&nbsp;</span>
2427
- <span class="cline-any cline-neutral">&nbsp;</span>
2428
- <span class="cline-any cline-neutral">&nbsp;</span>
2429
- <span class="cline-any cline-no">&nbsp;</span>
2430
- <span class="cline-any cline-no">&nbsp;</span>
2431
- <span class="cline-any cline-neutral">&nbsp;</span>
2432
- <span class="cline-any cline-no">&nbsp;</span>
2433
- <span class="cline-any cline-neutral">&nbsp;</span>
2434
- <span class="cline-any cline-no">&nbsp;</span>
2435
- <span class="cline-any cline-no">&nbsp;</span>
2436
- <span class="cline-any cline-neutral">&nbsp;</span>
2437
- <span class="cline-any cline-neutral">&nbsp;</span>
2438
- <span class="cline-any cline-no">&nbsp;</span>
2439
- <span class="cline-any cline-no">&nbsp;</span>
2440
- <span class="cline-any cline-no">&nbsp;</span>
2441
- <span class="cline-any cline-no">&nbsp;</span>
2442
- <span class="cline-any cline-neutral">&nbsp;</span>
2443
- <span class="cline-any cline-no">&nbsp;</span>
2444
- <span class="cline-any cline-no">&nbsp;</span>
2445
- <span class="cline-any cline-neutral">&nbsp;</span>
2446
- <span class="cline-any cline-neutral">&nbsp;</span>
2447
- <span class="cline-any cline-neutral">&nbsp;</span>
2448
- <span class="cline-any cline-neutral">&nbsp;</span>
2449
- <span class="cline-any cline-neutral">&nbsp;</span>
2450
- <span class="cline-any cline-neutral">&nbsp;</span>
2451
- <span class="cline-any cline-neutral">&nbsp;</span>
2452
- <span class="cline-any cline-no">&nbsp;</span>
2453
- <span class="cline-any cline-neutral">&nbsp;</span>
2454
- <span class="cline-any cline-neutral">&nbsp;</span>
2455
- <span class="cline-any cline-neutral">&nbsp;</span>
2456
- <span class="cline-any cline-no">&nbsp;</span>
2457
- <span class="cline-any cline-neutral">&nbsp;</span>
2458
- <span class="cline-any cline-no">&nbsp;</span>
2459
- <span class="cline-any cline-neutral">&nbsp;</span>
2460
- <span class="cline-any cline-neutral">&nbsp;</span>
2461
- <span class="cline-any cline-no">&nbsp;</span>
2462
- <span class="cline-any cline-no">&nbsp;</span>
2463
- <span class="cline-any cline-neutral">&nbsp;</span>
2464
- <span class="cline-any cline-no">&nbsp;</span>
2465
- <span class="cline-any cline-no">&nbsp;</span>
2466
- <span class="cline-any cline-neutral">&nbsp;</span>
2467
- <span class="cline-any cline-neutral">&nbsp;</span>
2468
- <span class="cline-any cline-no">&nbsp;</span>
2469
- <span class="cline-any cline-no">&nbsp;</span>
2470
- <span class="cline-any cline-neutral">&nbsp;</span>
2471
- <span class="cline-any cline-neutral">&nbsp;</span>
2472
- <span class="cline-any cline-neutral">&nbsp;</span>
2473
- <span class="cline-any cline-no">&nbsp;</span>
2474
- <span class="cline-any cline-no">&nbsp;</span>
2475
- <span class="cline-any cline-neutral">&nbsp;</span>
2476
- <span class="cline-any cline-no">&nbsp;</span>
2477
- <span class="cline-any cline-neutral">&nbsp;</span>
2478
- <span class="cline-any cline-no">&nbsp;</span>
2479
- <span class="cline-any cline-neutral">&nbsp;</span>
2480
- <span class="cline-any cline-neutral">&nbsp;</span>
2481
- <span class="cline-any cline-neutral">&nbsp;</span>
2482
- <span class="cline-any cline-no">&nbsp;</span>
2483
- <span class="cline-any cline-no">&nbsp;</span>
2484
- <span class="cline-any cline-no">&nbsp;</span>
2485
- <span class="cline-any cline-neutral">&nbsp;</span>
2486
- <span class="cline-any cline-no">&nbsp;</span>
2487
- <span class="cline-any cline-no">&nbsp;</span>
2488
- <span class="cline-any cline-no">&nbsp;</span>
2489
- <span class="cline-any cline-no">&nbsp;</span>
2490
- <span class="cline-any cline-no">&nbsp;</span>
2491
- <span class="cline-any cline-neutral">&nbsp;</span>
2492
- <span class="cline-any cline-neutral">&nbsp;</span>
2493
- <span class="cline-any cline-neutral">&nbsp;</span>
2494
- <span class="cline-any cline-no">&nbsp;</span>
2495
- <span class="cline-any cline-no">&nbsp;</span>
2496
- <span class="cline-any cline-neutral">&nbsp;</span>
2497
- <span class="cline-any cline-no">&nbsp;</span>
2498
- <span class="cline-any cline-no">&nbsp;</span>
2499
- <span class="cline-any cline-no">&nbsp;</span>
2500
- <span class="cline-any cline-neutral">&nbsp;</span>
2501
- <span class="cline-any cline-neutral">&nbsp;</span>
2502
- <span class="cline-any cline-neutral">&nbsp;</span>
2503
- <span class="cline-any cline-neutral">&nbsp;</span>
2504
- <span class="cline-any cline-no">&nbsp;</span>
2505
- <span class="cline-any cline-neutral">&nbsp;</span>
2506
- <span class="cline-any cline-neutral">&nbsp;</span>
2507
- <span class="cline-any cline-neutral">&nbsp;</span>
2508
- <span class="cline-any cline-no">&nbsp;</span>
2509
- <span class="cline-any cline-neutral">&nbsp;</span>
2510
- <span class="cline-any cline-neutral">&nbsp;</span>
2511
- <span class="cline-any cline-no">&nbsp;</span>
2512
- <span class="cline-any cline-no">&nbsp;</span>
2513
- <span class="cline-any cline-no">&nbsp;</span>
2514
- <span class="cline-any cline-no">&nbsp;</span>
2515
- <span class="cline-any cline-no">&nbsp;</span>
2516
- <span class="cline-any cline-neutral">&nbsp;</span>
2517
- <span class="cline-any cline-neutral">&nbsp;</span>
2518
- <span class="cline-any cline-no">&nbsp;</span>
2519
- <span class="cline-any cline-no">&nbsp;</span>
2520
- <span class="cline-any cline-no">&nbsp;</span>
2521
- <span class="cline-any cline-no">&nbsp;</span>
2522
- <span class="cline-any cline-neutral">&nbsp;</span>
2523
- <span class="cline-any cline-neutral">&nbsp;</span>
2524
- <span class="cline-any cline-neutral">&nbsp;</span>
2525
- <span class="cline-any cline-no">&nbsp;</span>
2526
- <span class="cline-any cline-no">&nbsp;</span>
2527
- <span class="cline-any cline-neutral">&nbsp;</span>
2528
- <span class="cline-any cline-neutral">&nbsp;</span>
2529
- <span class="cline-any cline-no">&nbsp;</span>
2530
- <span class="cline-any cline-no">&nbsp;</span>
2531
- <span class="cline-any cline-no">&nbsp;</span>
2532
- <span class="cline-any cline-no">&nbsp;</span>
2533
- <span class="cline-any cline-no">&nbsp;</span>
2534
- <span class="cline-any cline-no">&nbsp;</span>
2535
- <span class="cline-any cline-no">&nbsp;</span>
2536
- <span class="cline-any cline-no">&nbsp;</span>
2537
- <span class="cline-any cline-neutral">&nbsp;</span>
2538
- <span class="cline-any cline-no">&nbsp;</span>
2539
- <span class="cline-any cline-neutral">&nbsp;</span>
2540
- <span class="cline-any cline-neutral">&nbsp;</span>
2541
- <span class="cline-any cline-no">&nbsp;</span>
2542
- <span class="cline-any cline-no">&nbsp;</span>
2543
- <span class="cline-any cline-neutral">&nbsp;</span>
2544
- <span class="cline-any cline-neutral">&nbsp;</span>
2545
- <span class="cline-any cline-neutral">&nbsp;</span>
2546
- <span class="cline-any cline-no">&nbsp;</span>
2547
- <span class="cline-any cline-neutral">&nbsp;</span>
2548
- <span class="cline-any cline-neutral">&nbsp;</span>
2549
- <span class="cline-any cline-neutral">&nbsp;</span>
2550
- <span class="cline-any cline-no">&nbsp;</span>
2551
- <span class="cline-any cline-neutral">&nbsp;</span>
2552
- <span class="cline-any cline-neutral">&nbsp;</span>
2553
- <span class="cline-any cline-neutral">&nbsp;</span>
2554
- <span class="cline-any cline-no">&nbsp;</span>
2555
- <span class="cline-any cline-neutral">&nbsp;</span>
2556
- <span class="cline-any cline-neutral">&nbsp;</span>
2557
- <span class="cline-any cline-neutral">&nbsp;</span>
2558
- <span class="cline-any cline-neutral">&nbsp;</span>
2559
- <span class="cline-any cline-neutral">&nbsp;</span>
2560
- <span class="cline-any cline-neutral">&nbsp;</span>
2561
- <span class="cline-any cline-neutral">&nbsp;</span>
2562
- <span class="cline-any cline-no">&nbsp;</span>
2563
- <span class="cline-any cline-neutral">&nbsp;</span>
2564
- <span class="cline-any cline-neutral">&nbsp;</span>
2565
- <span class="cline-any cline-neutral">&nbsp;</span>
2566
- <span class="cline-any cline-neutral">&nbsp;</span>
2567
- <span class="cline-any cline-no">&nbsp;</span>
2568
- <span class="cline-any cline-no">&nbsp;</span>
2569
- <span class="cline-any cline-neutral">&nbsp;</span>
2570
- <span class="cline-any cline-neutral">&nbsp;</span>
2571
- <span class="cline-any cline-no">&nbsp;</span>
2572
- <span class="cline-any cline-no">&nbsp;</span>
2573
- <span class="cline-any cline-no">&nbsp;</span>
2574
- <span class="cline-any cline-no">&nbsp;</span>
2575
- <span class="cline-any cline-neutral">&nbsp;</span>
2576
- <span class="cline-any cline-neutral">&nbsp;</span>
2577
- <span class="cline-any cline-neutral">&nbsp;</span>
2578
- <span class="cline-any cline-no">&nbsp;</span>
2579
- <span class="cline-any cline-no">&nbsp;</span>
2580
- <span class="cline-any cline-no">&nbsp;</span>
2581
- <span class="cline-any cline-no">&nbsp;</span>
2582
- <span class="cline-any cline-no">&nbsp;</span>
2583
- <span class="cline-any cline-no">&nbsp;</span>
2584
- <span class="cline-any cline-neutral">&nbsp;</span>
2585
- <span class="cline-any cline-neutral">&nbsp;</span>
2586
- <span class="cline-any cline-neutral">&nbsp;</span>
2587
- <span class="cline-any cline-no">&nbsp;</span>
2588
- <span class="cline-any cline-neutral">&nbsp;</span>
2589
- <span class="cline-any cline-neutral">&nbsp;</span>
2590
- <span class="cline-any cline-neutral">&nbsp;</span>
2591
- <span class="cline-any cline-neutral">&nbsp;</span>
2592
- <span class="cline-any cline-neutral">&nbsp;</span>
2593
- <span class="cline-any cline-no">&nbsp;</span>
2594
- <span class="cline-any cline-neutral">&nbsp;</span>
2595
- <span class="cline-any cline-neutral">&nbsp;</span>
2596
- <span class="cline-any cline-neutral">&nbsp;</span>
2597
- <span class="cline-any cline-no">&nbsp;</span>
2598
- <span class="cline-any cline-neutral">&nbsp;</span>
2599
- <span class="cline-any cline-neutral">&nbsp;</span>
2600
- <span class="cline-any cline-neutral">&nbsp;</span>
2601
- <span class="cline-any cline-no">&nbsp;</span>
2602
- <span class="cline-any cline-no">&nbsp;</span>
2603
- <span class="cline-any cline-neutral">&nbsp;</span>
2604
- <span class="cline-any cline-neutral">&nbsp;</span>
2605
- <span class="cline-any cline-neutral">&nbsp;</span>
2606
- <span class="cline-any cline-neutral">&nbsp;</span>
2607
- <span class="cline-any cline-neutral">&nbsp;</span>
2608
- <span class="cline-any cline-neutral">&nbsp;</span>
2609
- <span class="cline-any cline-neutral">&nbsp;</span>
2610
- <span class="cline-any cline-neutral">&nbsp;</span>
2611
- <span class="cline-any cline-no">&nbsp;</span>
2612
- <span class="cline-any cline-no">&nbsp;</span>
2613
- <span class="cline-any cline-no">&nbsp;</span>
2614
- <span class="cline-any cline-neutral">&nbsp;</span>
2615
- <span class="cline-any cline-neutral">&nbsp;</span>
2616
- <span class="cline-any cline-neutral">&nbsp;</span>
2617
- <span class="cline-any cline-neutral">&nbsp;</span>
2618
- <span class="cline-any cline-neutral">&nbsp;</span>
2619
- <span class="cline-any cline-no">&nbsp;</span>
2620
- <span class="cline-any cline-neutral">&nbsp;</span>
2621
- <span class="cline-any cline-no">&nbsp;</span>
2622
- <span class="cline-any cline-neutral">&nbsp;</span>
2623
- <span class="cline-any cline-neutral">&nbsp;</span>
2624
- <span class="cline-any cline-neutral">&nbsp;</span>
2625
- <span class="cline-any cline-neutral">&nbsp;</span>
2626
- <span class="cline-any cline-no">&nbsp;</span>
2627
- <span class="cline-any cline-no">&nbsp;</span>
2628
- <span class="cline-any cline-no">&nbsp;</span>
2629
- <span class="cline-any cline-no">&nbsp;</span>
2630
- <span class="cline-any cline-no">&nbsp;</span>
2631
- <span class="cline-any cline-no">&nbsp;</span>
2632
- <span class="cline-any cline-no">&nbsp;</span>
2633
- <span class="cline-any cline-no">&nbsp;</span>
2634
- <span class="cline-any cline-no">&nbsp;</span>
2635
- <span class="cline-any cline-no">&nbsp;</span>
2636
- <span class="cline-any cline-no">&nbsp;</span>
2637
- <span class="cline-any cline-no">&nbsp;</span>
2638
- <span class="cline-any cline-neutral">&nbsp;</span>
2639
- <span class="cline-any cline-no">&nbsp;</span>
2640
- <span class="cline-any cline-neutral">&nbsp;</span>
2641
- <span class="cline-any cline-no">&nbsp;</span>
2642
- <span class="cline-any cline-neutral">&nbsp;</span>
2643
- <span class="cline-any cline-neutral">&nbsp;</span>
2644
- <span class="cline-any cline-neutral">&nbsp;</span>
2645
- <span class="cline-any cline-neutral">&nbsp;</span>
2646
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >import ConditionsManager from '../modules/conditionsManager.js'</span>
2647
- <span class="cstat-no" title="statement not covered" >import FeatureFlags from '../modules/featureFlags.js'</span>
2648
- <span class="cstat-no" title="statement not covered" >import Message, { TagTrigger } from './messages.gen.js'</span>
2649
- <span class="cstat-no" title="statement not covered" >import {</span>
2650
- Timestamp,
2651
- Metadata,
2652
- UserID,
2653
- Type as MType,
2654
- TabChange,
2655
- TabData,
2656
- WSChannel,
2657
- } from './messages.gen.js'
2658
- <span class="cstat-no" title="statement not covered" >import {</span>
2659
- now,
2660
- adjustTimeOrigin,
2661
- deprecationWarn,
2662
- inIframe,
2663
- createEventListener,
2664
- deleteEventListener,
2665
- requestIdleCb,
2666
- } from '../utils.js'
2667
- <span class="cstat-no" title="statement not covered" >import Nodes from './nodes.js'</span>
2668
- <span class="cstat-no" title="statement not covered" >import Observer from './observer/top_observer.js'</span>
2669
- <span class="cstat-no" title="statement not covered" >import Sanitizer from './sanitizer.js'</span>
2670
- <span class="cstat-no" title="statement not covered" >import Ticker from './ticker.js'</span>
2671
- <span class="cstat-no" title="statement not covered" >import Logger, { LogLevel, ILogLevel } from './logger.js'</span>
2672
- <span class="cstat-no" title="statement not covered" >import Session from './session.js'</span>
2673
- <span class="cstat-no" title="statement not covered" >import { gzip } from 'fflate'</span>
2674
- <span class="cstat-no" title="statement not covered" >import { deviceMemory, jsHeapSizeLimit } from '../modules/performance.js'</span>
2675
- <span class="cstat-no" title="statement not covered" >import AttributeSender from '../modules/attributeSender.js'</span>
2676
- import type { Options as ObserverOptions } from './observer/top_observer.js'
2677
- import type { Options as SanitizerOptions } from './sanitizer.js'
2678
- import type { Options as SessOptions } from './session.js'
2679
- import type { Options as NetworkOptions } from '../modules/network.js'
2680
- <span class="cstat-no" title="statement not covered" >import CanvasRecorder from './canvas.js'</span>
2681
- <span class="cstat-no" title="statement not covered" >import UserTestManager from '../modules/userTesting/index.js'</span>
2682
- <span class="cstat-no" title="statement not covered" >import TagWatcher from '../modules/tagWatcher.js'</span>
2683
- &nbsp;
2684
- import type {
2685
- Options as WebworkerOptions,
2686
- ToWorkerData,
2687
- FromWorkerData,
2688
- } from '../../common/interaction.js'
2689
- &nbsp;
2690
- interface TypedWorker extends Omit&lt;Worker, 'postMessage'&gt; {
2691
- postMessage(data: ToWorkerData): void
2692
- }
2693
- &nbsp;
2694
- // TODO: Unify and clearly describe options logic
2695
- export interface StartOptions {
2696
- userID?: string
2697
- metadata?: Record&lt;string, string&gt;
2698
- forceNew?: boolean
2699
- sessionHash?: string
2700
- assistOnly?: boolean
2701
- }
2702
- &nbsp;
2703
- interface OnStartInfo {
2704
- sessionID: string
2705
- sessionToken: string
2706
- userUUID: string
2707
- }
2708
- &nbsp;
2709
- const CANCELED = <span class="cstat-no" title="statement not covered" >'canceled' as const</span>
2710
- const uxtStorageKey = <span class="cstat-no" title="statement not covered" >'or_uxt_active'</span>
2711
- const bufferStorageKey = <span class="cstat-no" title="statement not covered" >'or_buffer_1'</span>
2712
- const START_ERROR = <span class="cstat-no" title="statement not covered" >':(' as const</span>
2713
- type SuccessfulStart = OnStartInfo &amp; {
2714
- success: true
2715
- }
2716
- type UnsuccessfulStart = {
2717
- reason: typeof CANCELED | string
2718
- success: false
2719
- }
2720
- &nbsp;
2721
- type RickRoll = {
2722
- source: string
2723
- context: string
2724
- } &amp; (
2725
- | {
2726
- line: 'never-gonna-give-you-up'
2727
- }
2728
- | {
2729
- line: 'never-gonna-let-you-down'
2730
- token: string
2731
- }
2732
- | {
2733
- line: 'never-gonna-run-around-and-desert-you'
2734
- token: string
2735
- }
2736
- )
2737
- &nbsp;
2738
- const UnsuccessfulStart = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(r</span>eason: string): UnsuccessfulStart =&gt; (<span class="cstat-no" title="statement not covered" >{ reason, success: false })</span></span>
2739
- const SuccessfulStart = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(b</span>ody: OnStartInfo): SuccessfulStart =&gt; <span class="cstat-no" title="statement not covered" >({ ...body, success: true })</span></span>
2740
- export type StartPromiseReturn = SuccessfulStart | UnsuccessfulStart
2741
- &nbsp;
2742
- type StartCallback = (i: OnStartInfo) =&gt; void
2743
- type CommitCallback = (messages: Array&lt;Message&gt;) =&gt; void
2744
- &nbsp;
2745
- <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >enum A</span>ctivityState {</span>
2746
- <span class="cstat-no" title="statement not covered" > NotActive,</span>
2747
- <span class="cstat-no" title="statement not covered" > Starting,</span>
2748
- <span class="cstat-no" title="statement not covered" > Active,</span>
2749
- <span class="cstat-no" title="statement not covered" > ColdStart,</span>
2750
- }
2751
- &nbsp;
2752
- type AppOptions = {
2753
- revID: string
2754
- node_id: string
2755
- session_reset_key: string
2756
- session_token_key: string
2757
- session_pageno_key: string
2758
- session_tabid_key: string
2759
- local_uuid_key: string
2760
- ingestPoint: string
2761
- resourceBaseHref: string | null // resourceHref?
2762
- __is_snippet: boolean
2763
- __debug_report_edp: string | null
2764
- __debug__?: ILogLevel
2765
- __save_canvas_locally?: boolean
2766
- fixedCanvasScaling?: boolean
2767
- localStorage: Storage | null
2768
- sessionStorage: Storage | null
2769
- forceSingleTab?: boolean
2770
- disableStringDict?: boolean
2771
- assistSocketHost?: string
2772
- disableCanvas?: boolean
2773
- &nbsp;
2774
- /** @deprecated */
2775
- onStart?: StartCallback
2776
- network?: NetworkOptions
2777
- } &amp; WebworkerOptions &amp;
2778
- SessOptions
2779
- &nbsp;
2780
- export type Options = AppOptions &amp; ObserverOptions &amp; SanitizerOptions
2781
- &nbsp;
2782
- // TODO: use backendHost only
2783
- export const <span class="cstat-no" title="statement not covered" >DEFAULT_INGEST_POINT = 'https://api.openreplay.com/ingest'</span>
2784
- &nbsp;
2785
- function <span class="fstat-no" title="function not covered" >getTimezone(</span>) {
2786
- const offset = <span class="cstat-no" title="statement not covered" >new Date().getTimezoneOffset() * -1</span>
2787
- const sign = <span class="cstat-no" title="statement not covered" >offset &gt;= 0 ? '+' : '-'</span>
2788
- const hours = <span class="cstat-no" title="statement not covered" >Math.floor(Math.abs(offset) / 60)</span>
2789
- const minutes = <span class="cstat-no" title="statement not covered" >Math.abs(offset) % 60</span>
2790
- <span class="cstat-no" title="statement not covered" > return `UTC${sign}${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}`</span>
2791
- }
2792
- &nbsp;
2793
- <span class="cstat-no" title="statement not covered" >export default class A</span>pp {
2794
- readonly nodes: Nodes
2795
- readonly ticker: Ticker
2796
- readonly projectKey: string
2797
- readonly sanitizer: Sanitizer
2798
- readonly debug: Logger
2799
- readonly notify: Logger
2800
- readonly session: Session
2801
- readonly localStorage: Storage
2802
- readonly sessionStorage: Storage
2803
- private readonly <span class="cstat-no" title="statement not covered" >messages: Array&lt;Message&gt; = []</span>
2804
- /**
2805
- * we need 2 buffers, so we don't lose anything
2806
- * @read coldStart implementation
2807
- * */
2808
- private <span class="cstat-no" title="statement not covered" >bufferedMessages1: Array&lt;Message&gt; = []</span>
2809
- private readonly <span class="cstat-no" title="statement not covered" >bufferedMessages2: Array&lt;Message&gt; = []</span>
2810
- /* private */
2811
- readonly observer: Observer // non-private for attachContextCallback
2812
- private readonly <span class="cstat-no" title="statement not covered" >startCallbacks: Array&lt;StartCallback&gt; = []</span>
2813
- private readonly <span class="cstat-no" title="statement not covered" >stopCallbacks: Array&lt;() =&gt; any&gt; = []</span>
2814
- private readonly <span class="cstat-no" title="statement not covered" >commitCallbacks: Array&lt;CommitCallback&gt; = []</span>
2815
- public readonly options: AppOptions
2816
- public readonly networkOptions?: NetworkOptions
2817
- private readonly revID: string
2818
- private <span class="cstat-no" title="statement not covered" >activityState: ActivityState = ActivityState.NotActive</span>
2819
- private readonly <span class="cstat-no" title="statement not covered" >version = 'TRACKER_VERSION' /</span>/ TODO: version compatability check inside each plugin.
2820
- private readonly worker?: TypedWorker
2821
- &nbsp;
2822
- public attributeSender: AttributeSender
2823
- public featureFlags: FeatureFlags
2824
- public <span class="cstat-no" title="statement not covered" >socketMode = false</span>
2825
- private <span class="cstat-no" title="statement not covered" >compressionThreshold = 24 * 1000</span>
2826
- private <span class="cstat-no" title="statement not covered" >restartAttempts = 0</span>
2827
- private readonly <span class="cstat-no" title="statement not covered" >bc: BroadcastChannel | null = null</span>
2828
- private readonly contextId
2829
- private <span class="cstat-no" title="statement not covered" >canvasRecorder: CanvasRecorder | null = null</span>
2830
- private uxtManager: UserTestManager
2831
- private <span class="cstat-no" title="statement not covered" >conditionsManager: ConditionsManager | null = null</span>
2832
- private readonly tagWatcher: TagWatcher
2833
- &nbsp;
2834
- <span class="fstat-no" title="function not covered" > constructor(</span>
2835
- projectKey: string,
2836
- sessionToken: string | undefined,
2837
- options: Partial&lt;Options&gt;,
2838
- private readonly <span class="cstat-no" title="statement not covered" >signalError: (error: string, apis: string[]) =&gt; void,</span>
2839
- ) {
2840
- <span class="cstat-no" title="statement not covered" > this.contextId = Math.random().toString(36).slice(2)</span>
2841
- <span class="cstat-no" title="statement not covered" > this.projectKey = projectKey</span>
2842
- <span class="cstat-no" title="statement not covered" > this.networkOptions = options.network</span>
2843
- <span class="cstat-no" title="statement not covered" > this.options = Object.assign(</span>
2844
- {
2845
- revID: '',
2846
- node_id: '__openreplay_id',
2847
- session_token_key: '__openreplay_token',
2848
- session_pageno_key: '__openreplay_pageno',
2849
- session_reset_key: '__openreplay_reset',
2850
- session_tabid_key: '__openreplay_tabid',
2851
- local_uuid_key: '__openreplay_uuid',
2852
- ingestPoint: DEFAULT_INGEST_POINT,
2853
- resourceBaseHref: null,
2854
- __is_snippet: false,
2855
- __debug_report_edp: null,
2856
- __debug__: LogLevel.Silent,
2857
- __save_canvas_locally: false,
2858
- localStorage: null,
2859
- sessionStorage: null,
2860
- disableStringDict: false,
2861
- forceSingleTab: false,
2862
- assistSocketHost: '',
2863
- fixedCanvasScaling: false,
2864
- disableCanvas: false,
2865
- assistOnly: false,
2866
- },
2867
- options,
2868
- )
2869
- &nbsp;
2870
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.options.forceSingleTab &amp;&amp; globalThis &amp;&amp; 'BroadcastChannel' in globalThis) {</span>
2871
- const host = <span class="cstat-no" title="statement not covered" >location.hostname.split('.').slice(-2).join('_')</span>
2872
- <span class="cstat-no" title="statement not covered" > this.bc = inIframe() ? null : new BroadcastChannel(`rick_${host}`)</span>
2873
- }
2874
- &nbsp;
2875
- <span class="cstat-no" title="statement not covered" > this.revID = this.options.revID</span>
2876
- <span class="cstat-no" title="statement not covered" > this.localStorage = this.options.localStorage ?? window.localStorage</span>
2877
- <span class="cstat-no" title="statement not covered" > this.sessionStorage = this.options.sessionStorage ?? window.sessionStorage</span>
2878
- <span class="cstat-no" title="statement not covered" > this.sanitizer = new Sanitizer(this, options)</span>
2879
- <span class="cstat-no" title="statement not covered" > this.nodes = new Nodes(this.options.node_id)</span>
2880
- <span class="cstat-no" title="statement not covered" > this.observer = new Observer(this, options)</span>
2881
- <span class="cstat-no" title="statement not covered" > this.ticker = new Ticker(this)</span>
2882
- <span class="cstat-no" title="statement not covered" > this.ticker.attach(<span class="fstat-no" title="function not covered" >() =</span>&gt; <span class="cstat-no" title="statement not covered" >this.commit())</span></span>
2883
- <span class="cstat-no" title="statement not covered" > this.debug = new Logger(this.options.__debug__)</span>
2884
- <span class="cstat-no" title="statement not covered" > this.session = new Session(this, this.options)</span>
2885
- <span class="cstat-no" title="statement not covered" > this.attributeSender = new AttributeSender(this, Boolean(this.options.disableStringDict))</span>
2886
- <span class="cstat-no" title="statement not covered" > this.featureFlags = new FeatureFlags(this)</span>
2887
- <span class="cstat-no" title="statement not covered" > this.tagWatcher = new TagWatcher(this.sessionStorage, this.debug.error, <span class="fstat-no" title="function not covered" >(t</span>ag) =&gt; {</span>
2888
- <span class="cstat-no" title="statement not covered" > this.send(TagTrigger(tag) as Message)</span>
2889
- })
2890
- <span class="cstat-no" title="statement not covered" > this.session.attachUpdateCallback(<span class="fstat-no" title="function not covered" >({</span> userID, metadata }) =&gt; {</span>
2891
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (userID != null) {</span>
2892
- // TODO: nullable userID
2893
- <span class="cstat-no" title="statement not covered" > this.send(UserID(userID))</span>
2894
- }
2895
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (metadata != null) {</span>
2896
- <span class="cstat-no" title="statement not covered" > Object.entries(metadata).forEach(<span class="fstat-no" title="function not covered" >([</span>key, value]) =&gt; <span class="cstat-no" title="statement not covered" >this.send(Metadata(key, value)))</span></span>
2897
- }
2898
- })
2899
- &nbsp;
2900
- // @deprecated (use sessionHash on start instead)
2901
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (sessionToken != null) {</span>
2902
- <span class="cstat-no" title="statement not covered" > this.session.applySessionHash(sessionToken)</span>
2903
- }
2904
- &nbsp;
2905
- <span class="cstat-no" title="statement not covered" > try {</span>
2906
- <span class="cstat-no" title="statement not covered" > this.worker = new Worker(</span>
2907
- URL.createObjectURL(new Blob(['WEBWORKER_BODY'], { type: 'text/javascript' })),
2908
- )
2909
- <span class="cstat-no" title="statement not covered" > this.worker.onerror = <span class="fstat-no" title="function not covered" >(e</span>) =&gt; {</span>
2910
- <span class="cstat-no" title="statement not covered" > this._debug('webworker_error', e)</span>
2911
- }
2912
- <span class="cstat-no" title="statement not covered" > this.worker.onmessage = <span class="fstat-no" title="function not covered" >({</span> data }: MessageEvent&lt;FromWorkerData&gt;) =&gt; {</span>
2913
- // handling 401 auth restart (new token assignment)
2914
- <span class="cstat-no" title="statement not covered" > if (data === 'a_stop') {</span>
2915
- <span class="cstat-no" title="statement not covered" > this.stop(false)</span>
2916
- } else <span class="cstat-no" title="statement not covered" >if (data === 'a_start') {</span>
2917
- <span class="cstat-no" title="statement not covered" > void this.start({}, true)</span>
2918
- } else <span class="cstat-no" title="statement not covered" >if (data === 'not_init') {</span>
2919
- <span class="cstat-no" title="statement not covered" > this.debug.warn('OR WebWorker: writer not initialised. Restarting tracker')</span>
2920
- } else <span class="cstat-no" title="statement not covered" >if (data.type === 'failure') {</span>
2921
- <span class="cstat-no" title="statement not covered" > this.stop(false)</span>
2922
- <span class="cstat-no" title="statement not covered" > this.debug.error('worker_failed', data.reason)</span>
2923
- <span class="cstat-no" title="statement not covered" > this._debug('worker_failed', data.reason)</span>
2924
- } else <span class="cstat-no" title="statement not covered" >if (data.type === 'compress') {</span>
2925
- const batch = <span class="cstat-no" title="statement not covered" >data.batch</span>
2926
- const batchSize = <span class="cstat-no" title="statement not covered" >batch.byteLength</span>
2927
- <span class="cstat-no" title="statement not covered" > if (batchSize &gt; this.compressionThreshold) {</span>
2928
- <span class="cstat-no" title="statement not covered" > gzip(data.batch, { mtime: 0 }, <span class="fstat-no" title="function not covered" >(e</span>rr, result) =&gt; {</span>
2929
- <span class="cstat-no" title="statement not covered" > if (err) {</span>
2930
- <span class="cstat-no" title="statement not covered" > this.debug.error('Openreplay compression error:', err)</span>
2931
- <span class="cstat-no" title="statement not covered" > this.worker?.postMessage({ type: 'uncompressed', batch: batch })</span>
2932
- } else {
2933
- <span class="cstat-no" title="statement not covered" > this.worker?.postMessage({ type: 'compressed', batch: result })</span>
2934
- }
2935
- })
2936
- } else {
2937
- <span class="cstat-no" title="statement not covered" > this.worker?.postMessage({ type: 'uncompressed', batch: batch })</span>
2938
- }
2939
- } else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="if path not taken" >I</span>if (data.type === 'queue_empty') {</span>
2940
- <span class="cstat-no" title="statement not covered" > this.onSessionSent()</span>
2941
- }
2942
- }
2943
- const alertWorker = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
2944
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.worker) {</span>
2945
- <span class="cstat-no" title="statement not covered" > this.worker.postMessage(null)</span>
2946
- }
2947
- }
2948
- // keep better tactics, discard others?
2949
- <span class="cstat-no" title="statement not covered" > this.attachEventListener(window, 'beforeunload', alertWorker, false)</span>
2950
- <span class="cstat-no" title="statement not covered" > this.attachEventListener(document.body, 'mouseleave', alertWorker, false, false)</span>
2951
- // TODO: stop session after inactivity timeout (make configurable)
2952
- <span class="cstat-no" title="statement not covered" > this.attachEventListener(document, 'visibilitychange', alertWorker, false)</span>
2953
- } catch (e) {
2954
- <span class="cstat-no" title="statement not covered" > this._debug('worker_start', e)</span>
2955
- }
2956
- &nbsp;
2957
- const thisTab = <span class="cstat-no" title="statement not covered" >this.session.getTabId()</span>
2958
- &nbsp;
2959
- const proto = <span class="cstat-no" title="statement not covered" >{</span>
2960
- // ask if there are any tabs alive
2961
- ask: 'never-gonna-give-you-up',
2962
- // yes, there are someone out there
2963
- resp: 'never-gonna-let-you-down',
2964
- // you stole someone's identity
2965
- reg: 'never-gonna-run-around-and-desert-you',
2966
- } as const
2967
- &nbsp;
2968
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.bc) {</span>
2969
- <span class="cstat-no" title="statement not covered" > this.bc.postMessage({</span>
2970
- line: proto.ask,
2971
- source: thisTab,
2972
- context: this.contextId,
2973
- })
2974
- }
2975
- &nbsp;
2976
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.bc !== null) {</span>
2977
- <span class="cstat-no" title="statement not covered" > this.bc.onmessage = <span class="fstat-no" title="function not covered" >(e</span>v: MessageEvent&lt;RickRoll&gt;) =&gt; {</span>
2978
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (ev.data.context === this.contextId) {</span>
2979
- <span class="cstat-no" title="statement not covered" > return</span>
2980
- }
2981
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (ev.data.line === proto.resp) {</span>
2982
- const sessionToken = <span class="cstat-no" title="statement not covered" >ev.data.token</span>
2983
- <span class="cstat-no" title="statement not covered" > this.session.setSessionToken(sessionToken)</span>
2984
- }
2985
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (ev.data.line === proto.reg) {</span>
2986
- const sessionToken = <span class="cstat-no" title="statement not covered" >ev.data.token</span>
2987
- <span class="cstat-no" title="statement not covered" > this.session.regenerateTabId()</span>
2988
- <span class="cstat-no" title="statement not covered" > this.session.setSessionToken(sessionToken)</span>
2989
- }
2990
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (ev.data.line === proto.ask) {</span>
2991
- const token = <span class="cstat-no" title="statement not covered" >this.session.getSessionToken()</span>
2992
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (token &amp;&amp; this.bc) {</span>
2993
- <span class="cstat-no" title="statement not covered" > this.bc.postMessage({</span>
2994
- line: ev.data.source === thisTab ? proto.reg : proto.resp,
2995
- token,
2996
- source: thisTab,
2997
- context: this.contextId,
2998
- })
2999
- }
3000
- }
3001
- }
3002
- }
3003
- }
3004
- &nbsp;
3005
- private <span class="fstat-no" title="function not covered" >_debug(</span>context: string, e: any) {
3006
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.options.__debug_report_edp !== null) {</span>
3007
- <span class="cstat-no" title="statement not covered" > void fetch(this.options.__debug_report_edp, {</span>
3008
- method: 'POST',
3009
- headers: { 'Content-Type': 'application/json' },
3010
- body: JSON.stringify({
3011
- context,
3012
- // @ts-ignore
3013
- error: `${e as unknown as string}`,
3014
- }),
3015
- })
3016
- }
3017
- <span class="cstat-no" title="statement not covered" > this.debug.error('OpenReplay error: ', context, e)</span>
3018
- }
3019
- &nbsp;
3020
- private <span class="cstat-no" title="statement not covered" >_usingOldFetchPlugin = false</span>
3021
- &nbsp;
3022
- <span class="fstat-no" title="function not covered" > send(</span>message: Message, urgent = <span class="branch-0 cbranch-no" title="branch not covered" >false)</span>: void {
3023
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.activityState === ActivityState.NotActive) {</span>
3024
- <span class="cstat-no" title="statement not covered" > return</span>
3025
- }
3026
- // === Back compatibility with Fetch/Axios plugins ===
3027
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (message[0] === MType.Fetch) {</span>
3028
- <span class="cstat-no" title="statement not covered" > this._usingOldFetchPlugin = true</span>
3029
- <span class="cstat-no" title="statement not covered" > deprecationWarn('Fetch plugin', "'network' init option", '/installation/network-options')</span>
3030
- <span class="cstat-no" title="statement not covered" > deprecationWarn('Axios plugin', "'network' init option", '/installation/network-options')</span>
3031
- }
3032
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this._usingOldFetchPlugin &amp;&amp; message[0] === MType.NetworkRequest) {</span>
3033
- <span class="cstat-no" title="statement not covered" > return</span>
3034
- }
3035
- &nbsp;
3036
- // ====================================================
3037
- <span class="cstat-no" title="statement not covered" > if (this.activityState === ActivityState.ColdStart) {</span>
3038
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(message)</span>
3039
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.singleBuffer) {</span>
3040
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages2.push(message)</span>
3041
- }
3042
- <span class="cstat-no" title="statement not covered" > this.conditionsManager?.processMessage(message)</span>
3043
- } else {
3044
- <span class="cstat-no" title="statement not covered" > this.messages.push(message)</span>
3045
- }
3046
- // TODO: commit on start if there were `urgent` sends;
3047
- // Clarify where urgent can be used for;
3048
- // Clarify workflow for each type of message in case it was sent before start
3049
- // (like Fetch before start; maybe add an option "preCapture: boolean" or sth alike)
3050
- // Careful: `this.delay` is equal to zero before start so all Timestamp-s will have to be updated on start
3051
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.activityState === ActivityState.Active &amp;&amp; urgent) {</span>
3052
- <span class="cstat-no" title="statement not covered" > this.commit()</span>
3053
- }
3054
- }
3055
- &nbsp;
3056
- /**
3057
- * Normal workflow: add timestamp and tab data to batch, then commit it
3058
- * every ~30ms
3059
- * */
3060
- private <span class="fstat-no" title="function not covered" >_nCommit(</span>): void {
3061
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.socketMode) {</span>
3062
- <span class="cstat-no" title="statement not covered" > this.messages.unshift(TabData(this.session.getTabId()))</span>
3063
- <span class="cstat-no" title="statement not covered" > this.messages.unshift(Timestamp(this.timestamp()))</span>
3064
- <span class="cstat-no" title="statement not covered" > this.commitCallbacks.forEach(<span class="fstat-no" title="function not covered" >(c</span>b) =&gt; <span class="cstat-no" title="statement not covered" >cb(this.messages))</span></span>
3065
- <span class="cstat-no" title="statement not covered" > this.messages.length = 0</span>
3066
- <span class="cstat-no" title="statement not covered" > return</span>
3067
- }
3068
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.worker !== undefined &amp;&amp; this.messages.length) {</span>
3069
- <span class="cstat-no" title="statement not covered" > try {</span>
3070
- <span class="cstat-no" title="statement not covered" > requestIdleCb(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
3071
- <span class="cstat-no" title="statement not covered" > this.messages.unshift(TabData(this.session.getTabId()))</span>
3072
- <span class="cstat-no" title="statement not covered" > this.messages.unshift(Timestamp(this.timestamp()))</span>
3073
- // why I need to add opt chaining?
3074
- <span class="cstat-no" title="statement not covered" > this.worker?.postMessage(this.messages)</span>
3075
- <span class="cstat-no" title="statement not covered" > this.commitCallbacks.forEach(<span class="fstat-no" title="function not covered" >(c</span>b) =&gt; <span class="cstat-no" title="statement not covered" >cb(this.messages))</span></span>
3076
- <span class="cstat-no" title="statement not covered" > this.messages.length = 0</span>
3077
- })
3078
- } catch (e) {
3079
- <span class="cstat-no" title="statement not covered" > this._debug('worker_commit', e)</span>
3080
- <span class="cstat-no" title="statement not covered" > this.stop(true)</span>
3081
- <span class="cstat-no" title="statement not covered" > setTimeout(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
3082
- <span class="cstat-no" title="statement not covered" > void this.start()</span>
3083
- }, 500)
3084
- }
3085
- }
3086
- }
3087
- &nbsp;
3088
- <span class="cstat-no" title="statement not covered" > coldStartCommitN = 0</span>
3089
- &nbsp;
3090
- /**
3091
- * Cold start: add timestamp and tab data to both batches
3092
- * every 2nd tick, ~60ms
3093
- * this will make batches a bit larger and replay will work with bigger jumps every frame
3094
- * but in turn we don't overload batch writer on session start with 1000 batches
3095
- * */
3096
- private <span class="fstat-no" title="function not covered" >_cStartCommit(</span>): void {
3097
- <span class="cstat-no" title="statement not covered" > this.coldStartCommitN += 1</span>
3098
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.coldStartCommitN === 2) {</span>
3099
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(Timestamp(this.timestamp()))</span>
3100
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(TabData(this.session.getTabId()))</span>
3101
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages2.push(Timestamp(this.timestamp()))</span>
3102
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages2.push(TabData(this.session.getTabId()))</span>
3103
- <span class="cstat-no" title="statement not covered" > this.coldStartCommitN = 0</span>
3104
- }
3105
- }
3106
- &nbsp;
3107
- private <span class="fstat-no" title="function not covered" >commit(</span>): void {
3108
- <span class="cstat-no" title="statement not covered" > if (this.activityState === ActivityState.ColdStart) {</span>
3109
- <span class="cstat-no" title="statement not covered" > this._cStartCommit()</span>
3110
- } else {
3111
- <span class="cstat-no" title="statement not covered" > this._nCommit()</span>
3112
- }
3113
- }
3114
- &nbsp;
3115
- private <span class="fstat-no" title="function not covered" >postToWorker(</span>messages: Array&lt;Message&gt;) {
3116
- <span class="cstat-no" title="statement not covered" > this.worker?.postMessage(messages)</span>
3117
- <span class="cstat-no" title="statement not covered" > this.commitCallbacks.forEach(<span class="fstat-no" title="function not covered" >(c</span>b) =&gt; <span class="cstat-no" title="statement not covered" >cb(messages))</span></span>
3118
- <span class="cstat-no" title="statement not covered" > messages.length = 0</span>
3119
- }
3120
- &nbsp;
3121
- private <span class="cstat-no" title="statement not covered" >delay = 0</span>
3122
- &nbsp;
3123
- <span class="fstat-no" title="function not covered" > timestamp(</span>): number {
3124
- <span class="cstat-no" title="statement not covered" > return now() + this.delay</span>
3125
- }
3126
- &nbsp;
3127
- <span class="fstat-no" title="function not covered" > safe&lt;</span>T extends (this: any, ...args: any[]) =&gt; void&gt;(fn: T): T {
3128
- const app = <span class="cstat-no" title="statement not covered" >this</span>
3129
- <span class="cstat-no" title="statement not covered" > return <span class="fstat-no" title="function not covered" >function (this: any, .</span>..args: any[]) {</span>
3130
- <span class="cstat-no" title="statement not covered" > try {</span>
3131
- <span class="cstat-no" title="statement not covered" > fn.apply(this, args)</span>
3132
- } catch (e) {
3133
- <span class="cstat-no" title="statement not covered" > app._debug('safe_fn_call', e)</span>
3134
- // time: this.timestamp(),
3135
- // name: e.name,
3136
- // message: e.message,
3137
- // stack: e.stack
3138
- }
3139
- } as T // TODO: correct typing
3140
- }
3141
- &nbsp;
3142
- <span class="fstat-no" title="function not covered" > attachCommitCallback(</span>cb: CommitCallback): void {
3143
- <span class="cstat-no" title="statement not covered" > this.commitCallbacks.push(cb)</span>
3144
- }
3145
- &nbsp;
3146
- <span class="fstat-no" title="function not covered" > attachStartCallback(</span>cb: StartCallback, useSafe = <span class="branch-0 cbranch-no" title="branch not covered" >false)</span>: void {
3147
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (useSafe) {</span>
3148
- <span class="cstat-no" title="statement not covered" > cb = this.safe(cb)</span>
3149
- }
3150
- <span class="cstat-no" title="statement not covered" > this.startCallbacks.push(cb)</span>
3151
- }
3152
- &nbsp;
3153
- <span class="fstat-no" title="function not covered" > attachStopCallback(</span>cb: () =&gt; any, useSafe = <span class="branch-0 cbranch-no" title="branch not covered" >false)</span>: void {
3154
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (useSafe) {</span>
3155
- <span class="cstat-no" title="statement not covered" > cb = this.safe(cb)</span>
3156
- }
3157
- <span class="cstat-no" title="statement not covered" > this.stopCallbacks.push(cb)</span>
3158
- }
3159
- &nbsp;
3160
- // Use app.nodes.attachNodeListener for registered nodes instead
3161
- <span class="fstat-no" title="function not covered" > attachEventListener(</span>
3162
- target: EventTarget,
3163
- type: string,
3164
- listener: EventListener,
3165
- useSafe = <span class="branch-0 cbranch-no" title="branch not covered" >true,</span>
3166
- useCapture = <span class="branch-0 cbranch-no" title="branch not covered" >true,</span>
3167
- ): void {
3168
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (useSafe) {</span>
3169
- <span class="cstat-no" title="statement not covered" > listener = this.safe(listener)</span>
3170
- }
3171
- <span class="cstat-no" title="statement not covered" > this.attachStartCallback(</span>
3172
- <span class="fstat-no" title="function not covered" > () =</span>&gt; (<span class="cstat-no" title="statement not covered" >target ? createEventListener(target, type, listener, useCapture) : null)</span>,
3173
- useSafe,
3174
- )
3175
- <span class="cstat-no" title="statement not covered" > this.attachStopCallback(</span>
3176
- <span class="fstat-no" title="function not covered" > () =</span>&gt; (<span class="cstat-no" title="statement not covered" >target ? deleteEventListener(target, type, listener, useCapture) : null)</span>,
3177
- useSafe,
3178
- )
3179
- }
3180
- &nbsp;
3181
- // TODO: full correct semantic
3182
- <span class="fstat-no" title="function not covered" > checkRequiredVersion(</span>version: string): boolean {
3183
- const reqVer = <span class="cstat-no" title="statement not covered" >version.split(/[.-]/)</span>
3184
- const ver = <span class="cstat-no" title="statement not covered" >this.version.split(/[.-]/)</span>
3185
- <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i &lt; 3; i++) {</span>
3186
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (isNaN(Number(ver[i])) || isNaN(Number(reqVer[i]))) {</span>
3187
- <span class="cstat-no" title="statement not covered" > return false</span>
3188
- }
3189
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (Number(ver[i]) &gt; Number(reqVer[i])) {</span>
3190
- <span class="cstat-no" title="statement not covered" > return true</span>
3191
- }
3192
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (Number(ver[i]) &lt; Number(reqVer[i])) {</span>
3193
- <span class="cstat-no" title="statement not covered" > return false</span>
3194
- }
3195
- }
3196
- <span class="cstat-no" title="statement not covered" > return true</span>
3197
- }
3198
- &nbsp;
3199
- private <span class="fstat-no" title="function not covered" >getTrackerInfo(</span>) {
3200
- <span class="cstat-no" title="statement not covered" > return {</span>
3201
- userUUID: this.localStorage.getItem(this.options.local_uuid_key),
3202
- projectKey: this.projectKey,
3203
- revID: this.revID,
3204
- trackerVersion: this.version,
3205
- isSnippet: this.options.__is_snippet,
3206
- }
3207
- }
3208
- &nbsp;
3209
- <span class="fstat-no" title="function not covered" > getSessionInfo(</span>) {
3210
- <span class="cstat-no" title="statement not covered" > return {</span>
3211
- ...this.session.getInfo(),
3212
- ...this.getTrackerInfo(),
3213
- }
3214
- }
3215
- &nbsp;
3216
- <span class="fstat-no" title="function not covered" > getSessionToken(</span>): string | undefined {
3217
- <span class="cstat-no" title="statement not covered" > return this.session.getSessionToken()</span>
3218
- }
3219
- &nbsp;
3220
- <span class="fstat-no" title="function not covered" > getSessionID(</span>): string | undefined {
3221
- <span class="cstat-no" title="statement not covered" > return this.session.getInfo().sessionID || undefined</span>
3222
- }
3223
- &nbsp;
3224
- <span class="fstat-no" title="function not covered" > getSessionURL(</span>options?: { withCurrentTime?: boolean }): string | undefined {
3225
- const { projectID, sessionID, timestamp } = <span class="cstat-no" title="statement not covered" >this.session.getInfo()</span>
3226
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!projectID || !sessionID) {</span>
3227
- <span class="cstat-no" title="statement not covered" > this.debug.error('OpenReplay error: Unable to build session URL')</span>
3228
- <span class="cstat-no" title="statement not covered" > return undefined</span>
3229
- }
3230
- const ingest = <span class="cstat-no" title="statement not covered" >this.options.ingestPoint</span>
3231
- const isSaas = <span class="cstat-no" title="statement not covered" >/api\.openreplay\.com/.test(ingest)</span>
3232
- &nbsp;
3233
- const projectPath = <span class="cstat-no" title="statement not covered" >isSaas ? 'https://app.openreplay.com/ingest' : ingest</span>
3234
- &nbsp;
3235
- const url = <span class="cstat-no" title="statement not covered" >projectPath.replace(/ingest$/, `${projectID}/session/${sessionID}`)</span>
3236
- &nbsp;
3237
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (options?.withCurrentTime) {</span>
3238
- const jumpTo = <span class="cstat-no" title="statement not covered" >now() - timestamp</span>
3239
- <span class="cstat-no" title="statement not covered" > return `${url}?jumpto=${jumpTo}`</span>
3240
- }
3241
- &nbsp;
3242
- <span class="cstat-no" title="statement not covered" > return url</span>
3243
- }
3244
- &nbsp;
3245
- <span class="fstat-no" title="function not covered" > getHost(</span>): string {
3246
- <span class="cstat-no" title="statement not covered" > return new URL(this.options.ingestPoint).host</span>
3247
- }
3248
- &nbsp;
3249
- <span class="fstat-no" title="function not covered" > getProjectKey(</span>): string {
3250
- <span class="cstat-no" title="statement not covered" > return this.projectKey</span>
3251
- }
3252
- &nbsp;
3253
- <span class="fstat-no" title="function not covered" > getBaseHref(</span>): string {
3254
- <span class="cstat-no" title="statement not covered" > if (typeof this.options.resourceBaseHref === 'string') {</span>
3255
- <span class="cstat-no" title="statement not covered" > return this.options.resourceBaseHref</span>
3256
- } else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="if path not taken" >I</span>if (typeof this.options.resourceBaseHref === 'object') {</span>
3257
- //TODO: switch between types
3258
- }
3259
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (document.baseURI) {</span>
3260
- <span class="cstat-no" title="statement not covered" > return document.baseURI</span>
3261
- }
3262
- // IE only
3263
- <span class="cstat-no" title="statement not covered" > return (</span>
3264
- document.head?.getElementsByTagName('base')[0]?.getAttribute('href') ||
3265
- location.origin + location.pathname
3266
- )
3267
- }
3268
- &nbsp;
3269
- <span class="fstat-no" title="function not covered" > resolveResourceURL(</span>resourceURL: string): string {
3270
- const base = <span class="cstat-no" title="statement not covered" >new URL(this.getBaseHref())</span>
3271
- <span class="cstat-no" title="statement not covered" > base.pathname += '/' + new URL(resourceURL).pathname</span>
3272
- <span class="cstat-no" title="statement not covered" > base.pathname.replace(/\/+/g, '/')</span>
3273
- <span class="cstat-no" title="statement not covered" > return base.toString()</span>
3274
- }
3275
- &nbsp;
3276
- <span class="fstat-no" title="function not covered" > isServiceURL(</span>url: string): boolean {
3277
- <span class="cstat-no" title="statement not covered" > return url.startsWith(this.options.ingestPoint)</span>
3278
- }
3279
- &nbsp;
3280
- <span class="fstat-no" title="function not covered" > active(</span>): boolean {
3281
- <span class="cstat-no" title="statement not covered" > return this.activityState === ActivityState.Active</span>
3282
- }
3283
- &nbsp;
3284
- <span class="fstat-no" title="function not covered" > resetNextPageSession(</span>flag: boolean) {
3285
- <span class="cstat-no" title="statement not covered" > if (flag) {</span>
3286
- <span class="cstat-no" title="statement not covered" > this.sessionStorage.setItem(this.options.session_reset_key, 't')</span>
3287
- } else {
3288
- <span class="cstat-no" title="statement not covered" > this.sessionStorage.removeItem(this.options.session_reset_key)</span>
3289
- }
3290
- }
3291
- &nbsp;
3292
- <span class="cstat-no" title="statement not covered" > coldInterval: ReturnType&lt;typeof setInterval&gt; | null = null</span>
3293
- <span class="cstat-no" title="statement not covered" > orderNumber = 0</span>
3294
- <span class="cstat-no" title="statement not covered" > coldStartTs = 0</span>
3295
- <span class="cstat-no" title="statement not covered" > singleBuffer = false</span>
3296
- &nbsp;
3297
- private <span class="fstat-no" title="function not covered" >checkSessionToken(</span>forceNew?: boolean) {
3298
- const lsReset = <span class="cstat-no" title="statement not covered" >this.sessionStorage.getItem(this.options.session_reset_key) !== null</span>
3299
- const needNewSessionID = <span class="cstat-no" title="statement not covered" >forceNew || lsReset</span>
3300
- const sessionToken = <span class="cstat-no" title="statement not covered" >this.session.getSessionToken()</span>
3301
- &nbsp;
3302
- <span class="cstat-no" title="statement not covered" > return needNewSessionID || !sessionToken</span>
3303
- }
3304
- &nbsp;
3305
- /**
3306
- * start buffering messages without starting the actual session, which gives
3307
- * user 30 seconds to "activate" and record session by calling `start()` on conditional trigger
3308
- * and we will then send buffered batch, so it won't get lost
3309
- * */
3310
- public async <span class="fstat-no" title="function not covered" >coldStart(</span>startOpts: StartOptions = <span class="branch-0 cbranch-no" title="branch not covered" >{},</span> conditional?: boolean) {
3311
- <span class="cstat-no" title="statement not covered" > this.singleBuffer = false</span>
3312
- const second = <span class="cstat-no" title="statement not covered" >1000</span>
3313
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (conditional) {</span>
3314
- <span class="cstat-no" title="statement not covered" > this.conditionsManager = new ConditionsManager(this, startOpts)</span>
3315
- }
3316
- const isNewSession = <span class="cstat-no" title="statement not covered" >this.checkSessionToken(startOpts.forceNew)</span>
3317
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (conditional) {</span>
3318
- const r = <span class="cstat-no" title="statement not covered" >await fetch(this.options.ingestPoint + '/v1/web/start', {</span>
3319
- method: 'POST',
3320
- headers: {
3321
- 'Content-Type': 'application/json',
3322
- },
3323
- body: JSON.stringify({
3324
- ...this.getTrackerInfo(),
3325
- timestamp: now(),
3326
- doNotRecord: true,
3327
- bufferDiff: 0,
3328
- userID: this.session.getInfo().userID,
3329
- token: undefined,
3330
- deviceMemory,
3331
- jsHeapSizeLimit,
3332
- timezone: getTimezone(),
3333
- width: window.innerWidth,
3334
- height: window.innerHeight,
3335
- }),
3336
- })
3337
- const {
3338
- // this token is needed to fetch conditions and flags,
3339
- // but it can't be used to record a session
3340
- token,
3341
- userBrowser,
3342
- userCity,
3343
- userCountry,
3344
- userDevice,
3345
- userOS,
3346
- userState,
3347
- projectID,
3348
- } = <span class="cstat-no" title="statement not covered" >await r.json()</span>
3349
- <span class="cstat-no" title="statement not covered" > this.session.assign({ projectID })</span>
3350
- <span class="cstat-no" title="statement not covered" > this.session.setUserInfo({</span>
3351
- userBrowser,
3352
- userCity,
3353
- userCountry,
3354
- userDevice,
3355
- userOS,
3356
- userState,
3357
- })
3358
- const onStartInfo = <span class="cstat-no" title="statement not covered" >{ sessionToken: token, userUUID: '', sessionID: '' }</span>
3359
- <span class="cstat-no" title="statement not covered" > this.startCallbacks.forEach(<span class="fstat-no" title="function not covered" >(c</span>b) =&gt; <span class="cstat-no" title="statement not covered" >cb(onStartInfo))</span></span>
3360
- <span class="cstat-no" title="statement not covered" > await this.conditionsManager?.fetchConditions(projectID as string, token as string)</span>
3361
- <span class="cstat-no" title="statement not covered" > await this.featureFlags.reloadFlags(token as string)</span>
3362
- <span class="cstat-no" title="statement not covered" > await this.tagWatcher.fetchTags(this.options.ingestPoint, token as string)</span>
3363
- <span class="cstat-no" title="statement not covered" > this.conditionsManager?.processFlags(this.featureFlags.flags)</span>
3364
- }
3365
- const cycle = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
3366
- <span class="cstat-no" title="statement not covered" > this.orderNumber += 1</span>
3367
- <span class="cstat-no" title="statement not covered" > adjustTimeOrigin()</span>
3368
- <span class="cstat-no" title="statement not covered" > this.coldStartTs = now()</span>
3369
- <span class="cstat-no" title="statement not covered" > if (this.orderNumber % 2 === 0) {</span>
3370
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.length = 0</span>
3371
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(Timestamp(this.timestamp()))</span>
3372
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(TabData(this.session.getTabId()))</span>
3373
- } else {
3374
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages2.length = 0</span>
3375
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages2.push(Timestamp(this.timestamp()))</span>
3376
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages2.push(TabData(this.session.getTabId()))</span>
3377
- }
3378
- <span class="cstat-no" title="statement not covered" > this.stop(false)</span>
3379
- <span class="cstat-no" title="statement not covered" > this.activityState = ActivityState.ColdStart</span>
3380
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startOpts.sessionHash) {</span>
3381
- <span class="cstat-no" title="statement not covered" > this.session.applySessionHash(startOpts.sessionHash)</span>
3382
- }
3383
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startOpts.forceNew) {</span>
3384
- <span class="cstat-no" title="statement not covered" > this.session.reset()</span>
3385
- }
3386
- <span class="cstat-no" title="statement not covered" > this.session.assign({</span>
3387
- userID: startOpts.userID,
3388
- metadata: startOpts.metadata,
3389
- })
3390
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isNewSession) {</span>
3391
- <span class="cstat-no" title="statement not covered" > this.debug.log('continuing session on new tab', this.session.getTabId())</span>
3392
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
3393
- <span class="cstat-no" title="statement not covered" > this.send(TabChange(this.session.getTabId()))</span>
3394
- }
3395
- <span class="cstat-no" title="statement not covered" > this.observer.observe()</span>
3396
- <span class="cstat-no" title="statement not covered" > this.ticker.start()</span>
3397
- }
3398
- <span class="cstat-no" title="statement not covered" > this.coldInterval = setInterval(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
3399
- <span class="cstat-no" title="statement not covered" > cycle()</span>
3400
- }, 30 * second)
3401
- <span class="cstat-no" title="statement not covered" > cycle()</span>
3402
- }
3403
- &nbsp;
3404
- <span class="cstat-no" title="statement not covered" > onSessionSent = <span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
3405
- <span class="cstat-no" title="statement not covered" > return</span>
3406
- }
3407
- &nbsp;
3408
- /**
3409
- * Starts offline session recording
3410
- * @param {Object} startOpts - options for session start, same as .start()
3411
- * @param {Function} onSessionSent - callback that will be called once session is fully sent
3412
- * */
3413
- public <span class="fstat-no" title="function not covered" >offlineRecording(</span>startOpts: StartOptions = <span class="branch-0 cbranch-no" title="branch not covered" >{},</span> onSessionSent: () =&gt; void) {
3414
- <span class="cstat-no" title="statement not covered" > this.onSessionSent = onSessionSent</span>
3415
- <span class="cstat-no" title="statement not covered" > this.singleBuffer = true</span>
3416
- const isNewSession = <span class="cstat-no" title="statement not covered" >this.checkSessionToken(startOpts.forceNew)</span>
3417
- <span class="cstat-no" title="statement not covered" > adjustTimeOrigin()</span>
3418
- <span class="cstat-no" title="statement not covered" > this.coldStartTs = now()</span>
3419
- const saverBuffer = <span class="cstat-no" title="statement not covered" >this.localStorage.getItem(bufferStorageKey)</span>
3420
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (saverBuffer) {</span>
3421
- const data = <span class="cstat-no" title="statement not covered" >JSON.parse(saverBuffer)</span>
3422
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages1 = Array.isArray(data) ? data : this.bufferedMessages1</span>
3423
- <span class="cstat-no" title="statement not covered" > this.localStorage.removeItem(bufferStorageKey)</span>
3424
- }
3425
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(Timestamp(this.timestamp()))</span>
3426
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(TabData(this.session.getTabId()))</span>
3427
- <span class="cstat-no" title="statement not covered" > this.activityState = ActivityState.ColdStart</span>
3428
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startOpts.sessionHash) {</span>
3429
- <span class="cstat-no" title="statement not covered" > this.session.applySessionHash(startOpts.sessionHash)</span>
3430
- }
3431
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startOpts.forceNew) {</span>
3432
- <span class="cstat-no" title="statement not covered" > this.session.reset()</span>
3433
- }
3434
- <span class="cstat-no" title="statement not covered" > this.session.assign({</span>
3435
- userID: startOpts.userID,
3436
- metadata: startOpts.metadata,
3437
- })
3438
- const onStartInfo = <span class="cstat-no" title="statement not covered" >{ sessionToken: '', userUUID: '', sessionID: '' }</span>
3439
- <span class="cstat-no" title="statement not covered" > this.startCallbacks.forEach(<span class="fstat-no" title="function not covered" >(c</span>b) =&gt; <span class="cstat-no" title="statement not covered" >cb(onStartInfo))</span></span>
3440
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isNewSession) {</span>
3441
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
3442
- <span class="cstat-no" title="statement not covered" > this.send(TabChange(this.session.getTabId()))</span>
3443
- }
3444
- <span class="cstat-no" title="statement not covered" > this.observer.observe()</span>
3445
- <span class="cstat-no" title="statement not covered" > this.ticker.start()</span>
3446
- &nbsp;
3447
- <span class="cstat-no" title="statement not covered" > return {</span>
3448
- saveBuffer: this.saveBuffer,
3449
- getBuffer: this.getBuffer,
3450
- setBuffer: this.setBuffer,
3451
- }
3452
- }
3453
- &nbsp;
3454
- /**
3455
- * Saves the captured messages in localStorage (or whatever is used in its place)
3456
- *
3457
- * Then when this.offlineRecording is called, it will preload this messages and clear the storage item
3458
- *
3459
- * Keeping the size of local storage reasonable is up to the end users of this library
3460
- * */
3461
- public <span class="fstat-no" title="function not covered" >saveBuffer(</span>) {
3462
- <span class="cstat-no" title="statement not covered" > this.localStorage.setItem(bufferStorageKey, JSON.stringify(this.bufferedMessages1))</span>
3463
- }
3464
- &nbsp;
3465
- /**
3466
- * @returns buffer with stored messages for offline recording
3467
- * */
3468
- public <span class="fstat-no" title="function not covered" >getBuffer(</span>) {
3469
- <span class="cstat-no" title="statement not covered" > return this.bufferedMessages1</span>
3470
- }
3471
- &nbsp;
3472
- /**
3473
- * Used to set a buffer with messages array
3474
- * */
3475
- public <span class="fstat-no" title="function not covered" >setBuffer(</span>buffer: Message[]) {
3476
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages1 = buffer</span>
3477
- }
3478
- &nbsp;
3479
- /**
3480
- * Uploads the stored session buffer to backend
3481
- * @returns promise that resolves once messages are loaded, it has to be awaited
3482
- * so the session can be uploaded properly
3483
- * @resolve - if messages were loaded in service worker successfully
3484
- * @reject {string} - error message
3485
- * */
3486
- public async <span class="fstat-no" title="function not covered" >uploadOfflineRecording(</span>) {
3487
- <span class="cstat-no" title="statement not covered" > this.stop(false)</span>
3488
- const timestamp = <span class="cstat-no" title="statement not covered" >now()</span>
3489
- <span class="cstat-no" title="statement not covered" > this.worker?.postMessage({</span>
3490
- type: 'start',
3491
- pageNo: this.session.incPageNo(),
3492
- ingestPoint: this.options.ingestPoint,
3493
- timestamp: this.coldStartTs,
3494
- url: document.URL,
3495
- connAttemptCount: this.options.connAttemptCount,
3496
- connAttemptGap: this.options.connAttemptGap,
3497
- tabId: this.session.getTabId(),
3498
- })
3499
- const r = <span class="cstat-no" title="statement not covered" >await fetch(this.options.ingestPoint + '/v1/web/start', {</span>
3500
- method: 'POST',
3501
- headers: {
3502
- 'Content-Type': 'application/json',
3503
- },
3504
- body: JSON.stringify({
3505
- ...this.getTrackerInfo(),
3506
- timestamp: timestamp,
3507
- doNotRecord: false,
3508
- bufferDiff: timestamp - this.coldStartTs,
3509
- userID: this.session.getInfo().userID,
3510
- token: undefined,
3511
- deviceMemory,
3512
- jsHeapSizeLimit,
3513
- timezone: getTimezone(),
3514
- }),
3515
- })
3516
- const {
3517
- token,
3518
- userBrowser,
3519
- userCity,
3520
- userCountry,
3521
- userDevice,
3522
- userOS,
3523
- userState,
3524
- beaconSizeLimit,
3525
- projectID,
3526
- } = <span class="cstat-no" title="statement not covered" >await r.json()</span>
3527
- <span class="cstat-no" title="statement not covered" > this.worker?.postMessage({</span>
3528
- type: 'auth',
3529
- token,
3530
- beaconSizeLimit,
3531
- })
3532
- <span class="cstat-no" title="statement not covered" > this.session.assign({ projectID })</span>
3533
- <span class="cstat-no" title="statement not covered" > this.session.setUserInfo({</span>
3534
- userBrowser,
3535
- userCity,
3536
- userCountry,
3537
- userDevice,
3538
- userOS,
3539
- userState,
3540
- })
3541
- <span class="cstat-no" title="statement not covered" > while (this.bufferedMessages1.length &gt; 0) {</span>
3542
- <span class="cstat-no" title="statement not covered" > await this.flushBuffer(this.bufferedMessages1)</span>
3543
- }
3544
- <span class="cstat-no" title="statement not covered" > this.postToWorker([['q_end']] as unknown as Message[])</span>
3545
- <span class="cstat-no" title="statement not covered" > this.clearBuffers()</span>
3546
- }
3547
- &nbsp;
3548
- private <span class="fstat-no" title="function not covered" >_start(</span>
3549
- startOpts: StartOptions = <span class="branch-0 cbranch-no" title="branch not covered" >{},</span>
3550
- resetByWorker = <span class="branch-0 cbranch-no" title="branch not covered" >false,</span>
3551
- conditionName?: string,
3552
- ): Promise&lt;StartPromiseReturn&gt; {
3553
- const isColdStart = <span class="cstat-no" title="statement not covered" >this.activityState === ActivityState.ColdStart</span>
3554
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (isColdStart &amp;&amp; this.coldInterval) {</span>
3555
- <span class="cstat-no" title="statement not covered" > clearInterval(this.coldInterval)</span>
3556
- }
3557
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.worker) {</span>
3558
- const reason = <span class="cstat-no" title="statement not covered" >'No worker found: perhaps, CSP is not set.'</span>
3559
- <span class="cstat-no" title="statement not covered" > this.signalError(reason, [])</span>
3560
- <span class="cstat-no" title="statement not covered" > return Promise.resolve(UnsuccessfulStart(reason))</span>
3561
- }
3562
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
3563
- this.activityState === ActivityState.Active ||
3564
- this.activityState === ActivityState.Starting
3565
- ) {
3566
- const reason =
3567
- <span class="cstat-no" title="statement not covered" > 'OpenReplay: trying to call `start()` on the instance that has been started already.'</span>
3568
- <span class="cstat-no" title="statement not covered" > return Promise.resolve(UnsuccessfulStart(reason))</span>
3569
- }
3570
- <span class="cstat-no" title="statement not covered" > this.activityState = ActivityState.Starting</span>
3571
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isColdStart) {</span>
3572
- <span class="cstat-no" title="statement not covered" > adjustTimeOrigin()</span>
3573
- }
3574
- &nbsp;
3575
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startOpts.sessionHash) {</span>
3576
- <span class="cstat-no" title="statement not covered" > this.session.applySessionHash(startOpts.sessionHash)</span>
3577
- }
3578
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startOpts.forceNew) {</span>
3579
- // Reset session metadata only if requested directly
3580
- <span class="cstat-no" title="statement not covered" > this.session.reset()</span>
3581
- }
3582
- <span class="cstat-no" title="statement not covered" > this.session.assign({</span>
3583
- // MBTODO: maybe it would make sense to `forceNew` if the `userID` was changed
3584
- userID: startOpts.userID,
3585
- metadata: startOpts.metadata,
3586
- })
3587
- &nbsp;
3588
- const timestamp = <span class="cstat-no" title="statement not covered" >now()</span>
3589
- <span class="cstat-no" title="statement not covered" > this.worker.postMessage({</span>
3590
- type: 'start',
3591
- pageNo: this.session.incPageNo(),
3592
- ingestPoint: this.options.ingestPoint,
3593
- timestamp: isColdStart ? this.coldStartTs : timestamp,
3594
- url: document.URL,
3595
- connAttemptCount: this.options.connAttemptCount,
3596
- connAttemptGap: this.options.connAttemptGap,
3597
- tabId: this.session.getTabId(),
3598
- })
3599
- &nbsp;
3600
- const sessionToken = <span class="cstat-no" title="statement not covered" >this.session.getSessionToken()</span>
3601
- const isNewSession = <span class="cstat-no" title="statement not covered" >this.checkSessionToken(startOpts.forceNew)</span>
3602
- <span class="cstat-no" title="statement not covered" > this.sessionStorage.removeItem(this.options.session_reset_key)</span>
3603
- &nbsp;
3604
- <span class="cstat-no" title="statement not covered" > this.debug.log(</span>
3605
- 'OpenReplay: starting session; need new session id?',
3606
- isNewSession,
3607
- 'session token: ',
3608
- sessionToken,
3609
- )
3610
- <span class="cstat-no" title="statement not covered" > return window</span>
3611
- .fetch(this.options.ingestPoint + '/v1/web/start', {
3612
- method: 'POST',
3613
- headers: {
3614
- 'Content-Type': 'application/json',
3615
- },
3616
- body: JSON.stringify({
3617
- ...this.getTrackerInfo(),
3618
- timestamp,
3619
- doNotRecord: false,
3620
- bufferDiff: timestamp - this.coldStartTs,
3621
- userID: this.session.getInfo().userID,
3622
- token: isNewSession ? undefined : sessionToken,
3623
- deviceMemory,
3624
- jsHeapSizeLimit,
3625
- timezone: getTimezone(),
3626
- condition: conditionName,
3627
- assistOnly: startOpts.assistOnly ?? this.socketMode,
3628
- }),
3629
- })
3630
- .then(<span class="fstat-no" title="function not covered" >(r</span>) =&gt; {
3631
- <span class="cstat-no" title="statement not covered" > if (r.status === 200) {</span>
3632
- <span class="cstat-no" title="statement not covered" > return r.json()</span>
3633
- } else {
3634
- <span class="cstat-no" title="statement not covered" > return r</span>
3635
- .text()
3636
- .then(<span class="fstat-no" title="function not covered" >(t</span>ext) =&gt;
3637
- <span class="cstat-no" title="statement not covered" > text === CANCELED</span>
3638
- ? Promise.reject(CANCELED)
3639
- : Promise.reject(`Server error: ${r.status}. ${text}`),
3640
- )
3641
- }
3642
- })
3643
- .then(<span class="fstat-no" title="function not covered" >async (r</span>) =&gt;<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > {</span></span>
3644
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.worker) {</span>
3645
- const reason = <span class="cstat-no" title="statement not covered" >'no worker found after start request (this might not happen)'</span>
3646
- <span class="cstat-no" title="statement not covered" > this.signalError(reason, [])</span>
3647
- <span class="cstat-no" title="statement not covered" > return Promise.reject(reason)</span>
3648
- }
3649
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.activityState === ActivityState.NotActive) {</span>
3650
- const reason = <span class="cstat-no" title="statement not covered" >'Tracker stopped during authorization'</span>
3651
- <span class="cstat-no" title="statement not covered" > this.signalError(reason, [])</span>
3652
- <span class="cstat-no" title="statement not covered" > return Promise.reject(reason)</span>
3653
- }
3654
- const {
3655
- token,
3656
- userUUID,
3657
- projectID,
3658
- beaconSizeLimit,
3659
- compressionThreshold, // how big the batch should be before we decide to compress it
3660
- delay, // derived from token
3661
- sessionID, // derived from token
3662
- startTimestamp, // real startTS (server time), derived from sessionID
3663
- userBrowser,
3664
- userCity,
3665
- userCountry,
3666
- userDevice,
3667
- userOS,
3668
- userState,
3669
- canvasEnabled,
3670
- canvasQuality,
3671
- canvasFPS,
3672
- assistOnly: socketOnly,
3673
- } = <span class="cstat-no" title="statement not covered" >r</span>
3674
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
3675
- typeof token !== 'string' ||
3676
- typeof userUUID !== 'string' ||
3677
- (typeof startTimestamp !== 'number' &amp;&amp; typeof startTimestamp !== 'undefined') ||
3678
- typeof sessionID !== 'string' ||
3679
- typeof delay !== 'number' ||
3680
- (typeof beaconSizeLimit !== 'number' &amp;&amp; typeof beaconSizeLimit !== 'undefined')
3681
- ) {
3682
- const reason = <span class="cstat-no" title="statement not covered" >`Incorrect server response: ${JSON.stringify(r)}`</span>
3683
- <span class="cstat-no" title="statement not covered" > this.signalError(reason, [])</span>
3684
- <span class="cstat-no" title="statement not covered" > return Promise.reject(reason)</span>
3685
- }
3686
- <span class="cstat-no" title="statement not covered" > this.delay = delay</span>
3687
- <span class="cstat-no" title="statement not covered" > this.session.setSessionToken(token)</span>
3688
- <span class="cstat-no" title="statement not covered" > this.session.setUserInfo({</span>
3689
- userBrowser,
3690
- userCity,
3691
- userCountry,
3692
- userDevice,
3693
- userOS,
3694
- userState,
3695
- })
3696
- <span class="cstat-no" title="statement not covered" > this.session.assign({</span>
3697
- sessionID,
3698
- timestamp: startTimestamp || timestamp,
3699
- projectID,
3700
- })
3701
- &nbsp;
3702
- <span class="cstat-no" title="statement not covered" > if (socketOnly) {</span>
3703
- <span class="cstat-no" title="statement not covered" > this.socketMode = true</span>
3704
- <span class="cstat-no" title="statement not covered" > this.worker.postMessage('stop')</span>
3705
- } else {
3706
- <span class="cstat-no" title="statement not covered" > this.worker.postMessage({</span>
3707
- type: 'auth',
3708
- token,
3709
- beaconSizeLimit,
3710
- })
3711
- }
3712
- &nbsp;
3713
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isNewSession &amp;&amp; token === sessionToken) {</span>
3714
- <span class="cstat-no" title="statement not covered" > this.debug.log('continuing session on new tab', this.session.getTabId())</span>
3715
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
3716
- <span class="cstat-no" title="statement not covered" > this.send(TabChange(this.session.getTabId()))</span>
3717
- }
3718
- // (Re)send Metadata for the case of a new session
3719
- <span class="cstat-no" title="statement not covered" > Object.entries(this.session.getInfo().metadata).forEach(<span class="fstat-no" title="function not covered" >([</span>key, value]) =&gt;</span>
3720
- <span class="cstat-no" title="statement not covered" > this.send(Metadata(key, value)),</span>
3721
- )
3722
- <span class="cstat-no" title="statement not covered" > this.localStorage.setItem(this.options.local_uuid_key, userUUID)</span>
3723
- &nbsp;
3724
- <span class="cstat-no" title="statement not covered" > this.compressionThreshold = compressionThreshold</span>
3725
- const onStartInfo = <span class="cstat-no" title="statement not covered" >{ sessionToken: token, userUUID, sessionID }</span>
3726
- // TODO: start as early as possible (before receiving the token)
3727
- /** after start */
3728
- <span class="cstat-no" title="statement not covered" > this.startCallbacks.forEach(<span class="fstat-no" title="function not covered" >(c</span>b) =&gt; <span class="cstat-no" title="statement not covered" >cb(onStartInfo))</span> /</span>/ MBTODO: callbacks after DOM "mounted" (observed)
3729
- <span class="cstat-no" title="statement not covered" > void this.featureFlags.reloadFlags()</span>
3730
- <span class="cstat-no" title="statement not covered" > await this.tagWatcher.fetchTags(this.options.ingestPoint, token)</span>
3731
- <span class="cstat-no" title="statement not covered" > this.activityState = ActivityState.Active</span>
3732
- &nbsp;
3733
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (canvasEnabled &amp;&amp; !this.options.disableCanvas) {</span>
3734
- <span class="cstat-no" title="statement not covered" > this.canvasRecorder =</span>
3735
- this.canvasRecorder ??
3736
- new CanvasRecorder(this, {
3737
- fps: canvasFPS,
3738
- quality: canvasQuality,
3739
- isDebug: this.options.__save_canvas_locally,
3740
- fixedScaling: this.options.fixedCanvasScaling,
3741
- })
3742
- <span class="cstat-no" title="statement not covered" > this.canvasRecorder.startTracking()</span>
3743
- }
3744
- &nbsp;
3745
- /** --------------- COLD START BUFFER ------------------*/
3746
- <span class="cstat-no" title="statement not covered" > if (isColdStart) {</span>
3747
- const biggestBuffer =
3748
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.length &gt; this.bufferedMessages2.length</span>
3749
- ? this.bufferedMessages1
3750
- : this.bufferedMessages2
3751
- <span class="cstat-no" title="statement not covered" > while (biggestBuffer.length &gt; 0) {</span>
3752
- <span class="cstat-no" title="statement not covered" > await this.flushBuffer(biggestBuffer)</span>
3753
- }
3754
- <span class="cstat-no" title="statement not covered" > this.clearBuffers()</span>
3755
- <span class="cstat-no" title="statement not covered" > this.commit()</span>
3756
- /** --------------- COLD START BUFFER ------------------*/
3757
- } else {
3758
- <span class="cstat-no" title="statement not covered" > this.observer.observe()</span>
3759
- <span class="cstat-no" title="statement not covered" > this.ticker.start()</span>
3760
- }
3761
- &nbsp;
3762
- // get rid of onStart ?
3763
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (typeof this.options.onStart === 'function') {</span>
3764
- <span class="cstat-no" title="statement not covered" > this.options.onStart(onStartInfo)</span>
3765
- }
3766
- <span class="cstat-no" title="statement not covered" > this.restartAttempts = 0</span>
3767
- &nbsp;
3768
- <span class="cstat-no" title="statement not covered" > this.uxtManager = this.uxtManager</span>
3769
- ? this.uxtManager
3770
- : new UserTestManager(this, uxtStorageKey)
3771
- let uxtId: number | undefined
3772
- const savedUxtTag = <span class="cstat-no" title="statement not covered" >this.localStorage.getItem(uxtStorageKey)</span>
3773
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (savedUxtTag) {</span>
3774
- <span class="cstat-no" title="statement not covered" > uxtId = parseInt(savedUxtTag, 10)</span>
3775
- }
3776
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (location?.search) {</span>
3777
- const query = <span class="cstat-no" title="statement not covered" >new URLSearchParams(location.search)</span>
3778
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (query.has('oruxt')) {</span>
3779
- const qId = <span class="cstat-no" title="statement not covered" >query.get('oruxt')</span>
3780
- <span class="cstat-no" title="statement not covered" > uxtId = qId ? parseInt(qId, 10) : undefined</span>
3781
- }
3782
- }
3783
- &nbsp;
3784
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (uxtId) {</span>
3785
- <span class="cstat-no" title="statement not covered" > if (!this.uxtManager.isActive) {</span>
3786
- // eslint-disable-next-line
3787
- <span class="cstat-no" title="statement not covered" > this.uxtManager.getTest(uxtId, token, Boolean(savedUxtTag)).then(<span class="fstat-no" title="function not covered" >(i</span>d) =&gt; {</span>
3788
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (id) {</span>
3789
- <span class="cstat-no" title="statement not covered" > this.onUxtCb.forEach(<span class="fstat-no" title="function not covered" >(c</span>b: (id: number) =&gt; void) =&gt; <span class="cstat-no" title="statement not covered" >cb(id))</span></span>
3790
- }
3791
- })
3792
- } else {
3793
- // @ts-ignore
3794
- <span class="cstat-no" title="statement not covered" > this.onUxtCb.forEach(<span class="fstat-no" title="function not covered" >(c</span>b: (id: number) =&gt; void) =&gt; <span class="cstat-no" title="statement not covered" >cb(uxtId))</span></span>
3795
- }
3796
- }
3797
- &nbsp;
3798
- <span class="cstat-no" title="statement not covered" > return SuccessfulStart(onStartInfo)</span>
3799
- })
3800
- .catch(<span class="fstat-no" title="function not covered" >(r</span>eason) =&gt; {
3801
- <span class="cstat-no" title="statement not covered" > this.stop()</span>
3802
- <span class="cstat-no" title="statement not covered" > this.session.reset()</span>
3803
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (reason === CANCELED) {</span>
3804
- <span class="cstat-no" title="statement not covered" > this.signalError(CANCELED, [])</span>
3805
- <span class="cstat-no" title="statement not covered" > return UnsuccessfulStart(CANCELED)</span>
3806
- }
3807
- &nbsp;
3808
- <span class="cstat-no" title="statement not covered" > this._debug('session_start', reason)</span>
3809
- const errorMessage = <span class="cstat-no" title="statement not covered" >reason instanceof Error ? reason.message : reason.toString()</span>
3810
- <span class="cstat-no" title="statement not covered" > this.signalError(errorMessage, [])</span>
3811
- <span class="cstat-no" title="statement not covered" > return UnsuccessfulStart(errorMessage)</span>
3812
- })
3813
- }
3814
- &nbsp;
3815
- <span class="cstat-no" title="statement not covered" > restartCanvasTracking = <span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
3816
- <span class="cstat-no" title="statement not covered" > this.canvasRecorder?.restartTracking()</span>
3817
- }
3818
- &nbsp;
3819
- <span class="cstat-no" title="statement not covered" > flushBuffer = <span class="fstat-no" title="function not covered" >async (b</span>uffer: Message[]) =&gt;<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > {</span></span></span>
3820
- <span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >(r</span>es) =&gt; {</span>
3821
- let ended = <span class="cstat-no" title="statement not covered" >false</span>
3822
- const messagesBatch: Message[] = <span class="cstat-no" title="statement not covered" >[buffer.shift() as unknown as Message]</span>
3823
- <span class="cstat-no" title="statement not covered" > while (!ended) {</span>
3824
- const nextMsg = <span class="cstat-no" title="statement not covered" >buffer[0]</span>
3825
- <span class="cstat-no" title="statement not covered" > if (!nextMsg || nextMsg[0] === MType.Timestamp) {</span>
3826
- <span class="cstat-no" title="statement not covered" > ended = true</span>
3827
- } else {
3828
- <span class="cstat-no" title="statement not covered" > messagesBatch.push(buffer.shift() as unknown as Message)</span>
3829
- }
3830
- }
3831
- <span class="cstat-no" title="statement not covered" > this.postToWorker(messagesBatch)</span>
3832
- <span class="cstat-no" title="statement not covered" > res(null)</span>
3833
- })
3834
- }
3835
- &nbsp;
3836
- <span class="cstat-no" title="statement not covered" > onUxtCb = []</span>
3837
- &nbsp;
3838
- <span class="fstat-no" title="function not covered" > addOnUxtCb(</span>cb: (id: number) =&gt; void) {
3839
- // @ts-ignore
3840
- <span class="cstat-no" title="statement not covered" > this.onUxtCb.push(cb)</span>
3841
- }
3842
- &nbsp;
3843
- <span class="fstat-no" title="function not covered" > getUxtId(</span>): number | null {
3844
- <span class="cstat-no" title="statement not covered" > return this.uxtManager?.getTestId()</span>
3845
- }
3846
- &nbsp;
3847
- /**
3848
- * basically we ask other tabs during constructor
3849
- * and here we just apply 10ms delay just in case
3850
- * */
3851
- <span class="fstat-no" title="function not covered" > start(</span>...args: Parameters&lt;App['_start']&gt;): Promise&lt;StartPromiseReturn&gt; {
3852
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
3853
- this.activityState === ActivityState.Active ||
3854
- this.activityState === ActivityState.Starting
3855
- ) {
3856
- const reason =
3857
- <span class="cstat-no" title="statement not covered" > 'OpenReplay: trying to call `start()` on the instance that has been started already.'</span>
3858
- <span class="cstat-no" title="statement not covered" > return Promise.resolve(UnsuccessfulStart(reason))</span>
3859
- }
3860
- &nbsp;
3861
- <span class="cstat-no" title="statement not covered" > if (!document.hidden) {</span>
3862
- <span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve) =&gt; {</span>
3863
- <span class="cstat-no" title="statement not covered" > setTimeout(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
3864
- <span class="cstat-no" title="statement not covered" > resolve(this._start(...args))</span>
3865
- }, 25)
3866
- })
3867
- } else {
3868
- <span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve) =&gt; {</span>
3869
- const onVisibilityChange = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
3870
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!document.hidden) {</span>
3871
- <span class="cstat-no" title="statement not covered" > document.removeEventListener('visibilitychange', onVisibilityChange)</span>
3872
- <span class="cstat-no" title="statement not covered" > setTimeout(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
3873
- <span class="cstat-no" title="statement not covered" > resolve(this._start(...args))</span>
3874
- }, 25)
3875
- }
3876
- }
3877
- <span class="cstat-no" title="statement not covered" > document.addEventListener('visibilitychange', onVisibilityChange)</span>
3878
- })
3879
- }
3880
- }
3881
- &nbsp;
3882
- <span class="fstat-no" title="function not covered" > forceFlushBatch(</span>) {
3883
- <span class="cstat-no" title="statement not covered" > this.worker?.postMessage('forceFlushBatch')</span>
3884
- }
3885
- &nbsp;
3886
- <span class="fstat-no" title="function not covered" > getTabId(</span>) {
3887
- <span class="cstat-no" title="statement not covered" > return this.session.getTabId()</span>
3888
- }
3889
- &nbsp;
3890
- <span class="fstat-no" title="function not covered" > clearBuffers(</span>) {
3891
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.length = 0</span>
3892
- <span class="cstat-no" title="statement not covered" > this.bufferedMessages2.length = 0</span>
3893
- }
3894
- &nbsp;
3895
- /**
3896
- * Creates a named hook that expects event name, data string and msg direction (up/down),
3897
- * it will skip any message bigger than 5 mb or event name bigger than 255 symbols
3898
- * @returns {(msgType: string, data: string, dir: "up" | "down") =&gt; void}
3899
- * */
3900
- <span class="fstat-no" title="function not covered" > trackWs(</span>channelName: string): (msgType: string, data: string, dir: 'up' | 'down') =&gt; void {
3901
- const channel = <span class="cstat-no" title="statement not covered" >channelName</span>
3902
- <span class="cstat-no" title="statement not covered" > return <span class="fstat-no" title="function not covered" >(m</span>sgType: string, data: string, dir: 'up' | 'down' = <span class="branch-0 cbranch-no" title="branch not covered" >'down')</span> =&gt; {</span>
3903
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
3904
- typeof msgType !== 'string' ||
3905
- typeof data !== 'string' ||
3906
- data.length &gt; 5 * 1024 * 1024 ||
3907
- msgType.length &gt; 255
3908
- ) {
3909
- <span class="cstat-no" title="statement not covered" > return</span>
3910
- }
3911
- <span class="cstat-no" title="statement not covered" > this.send(WSChannel('websocket', channel, data, this.timestamp(), dir, msgType))</span>
3912
- }
3913
- }
3914
- &nbsp;
3915
- <span class="fstat-no" title="function not covered" > stop(</span>stopWorker = <span class="branch-0 cbranch-no" title="branch not covered" >true)</span>: void {
3916
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.activityState !== ActivityState.NotActive) {</span>
3917
- <span class="cstat-no" title="statement not covered" > try {</span>
3918
- <span class="cstat-no" title="statement not covered" > this.attributeSender.clear()</span>
3919
- <span class="cstat-no" title="statement not covered" > this.sanitizer.clear()</span>
3920
- <span class="cstat-no" title="statement not covered" > this.observer.disconnect()</span>
3921
- <span class="cstat-no" title="statement not covered" > this.nodes.clear()</span>
3922
- <span class="cstat-no" title="statement not covered" > this.ticker.stop()</span>
3923
- <span class="cstat-no" title="statement not covered" > this.stopCallbacks.forEach(<span class="fstat-no" title="function not covered" >(c</span>b) =&gt; <span class="cstat-no" title="statement not covered" >cb())</span></span>
3924
- <span class="cstat-no" title="statement not covered" > this.debug.log('OpenReplay tracking stopped.')</span>
3925
- <span class="cstat-no" title="statement not covered" > this.tagWatcher.clear()</span>
3926
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.worker &amp;&amp; stopWorker) {</span>
3927
- <span class="cstat-no" title="statement not covered" > this.worker.postMessage('stop')</span>
3928
- }
3929
- <span class="cstat-no" title="statement not covered" > this.canvasRecorder?.clear()</span>
3930
- } finally {
3931
- <span class="cstat-no" title="statement not covered" > this.activityState = ActivityState.NotActive</span>
3932
- }
3933
- }
3934
- }
3935
- }
3936
- &nbsp;</pre></td></tr></table></pre>
3937
-
3938
- <div class='push'></div><!-- for sticky footer -->
3939
- </div><!-- /wrapper -->
3940
- <div class='footer quiet pad2 space-top1 center small'>
3941
- Code coverage generated by
3942
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
3943
- at 2024-06-04T11:50:55.506Z
3944
- </div>
3945
- <script src="../../prettify.js"></script>
3946
- <script>
3947
- window.onload = function () {
3948
- prettyPrint();
3949
- };
3950
- </script>
3951
- <script src="../../sorter.js"></script>
3952
- <script src="../../block-navigation.js"></script>
3953
- </body>
3954
- </html>
3955
-