@grnsft/if 0.7.1 → 0.7.2

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 (212) hide show
  1. package/build/common/config/strings.d.ts +2 -0
  2. package/build/common/config/strings.js +5 -3
  3. package/build/if-run/builtins/interpolation/index.js +18 -10
  4. package/build/if-run/lib/compute.js +8 -10
  5. package/build/if-run/lib/explain.js +69 -44
  6. package/build/if-run/lib/initialize.js +2 -2
  7. package/build/if-run/lib/regroup.d.ts +1 -1
  8. package/build/if-run/lib/regroup.js +41 -49
  9. package/build/if-run/types/explain.d.ts +3 -7
  10. package/build/if-run/types/explain.js +1 -1
  11. package/build/if-run/util/aggregation-helper.js +3 -3
  12. package/manifests/examples/builtins/interpolation/success-with-off.yml +24 -0
  13. package/package.json +2 -2
  14. package/src/if-run/builtins/interpolation/README.md +1 -1
  15. package/.env +0 -5
  16. package/coverage/clover.xml +0 -2045
  17. package/coverage/coverage-final.json +0 -55
  18. package/coverage/lcov-report/base.css +0 -224
  19. package/coverage/lcov-report/block-navigation.js +0 -87
  20. package/coverage/lcov-report/builtins/coefficient/index.html +0 -116
  21. package/coverage/lcov-report/builtins/coefficient/index.ts.html +0 -298
  22. package/coverage/lcov-report/builtins/csv-lookup/index.html +0 -116
  23. package/coverage/lcov-report/builtins/csv-lookup/index.ts.html +0 -826
  24. package/coverage/lcov-report/builtins/divide/index.html +0 -116
  25. package/coverage/lcov-report/builtins/divide/index.ts.html +0 -358
  26. package/coverage/lcov-report/builtins/exponent/index.html +0 -116
  27. package/coverage/lcov-report/builtins/exponent/index.ts.html +0 -361
  28. package/coverage/lcov-report/builtins/export-csv-raw.ts.html +0 -553
  29. package/coverage/lcov-report/builtins/export-csv.ts.html +0 -436
  30. package/coverage/lcov-report/builtins/export-log.ts.html +0 -148
  31. package/coverage/lcov-report/builtins/export-yaml.ts.html +0 -193
  32. package/coverage/lcov-report/builtins/group-by.ts.html +0 -370
  33. package/coverage/lcov-report/builtins/index.html +0 -206
  34. package/coverage/lcov-report/builtins/index.ts.html +0 -130
  35. package/coverage/lcov-report/builtins/interpolation/index.html +0 -116
  36. package/coverage/lcov-report/builtins/interpolation/index.ts.html +0 -676
  37. package/coverage/lcov-report/builtins/interpolation/types.ts.html +0 -100
  38. package/coverage/lcov-report/builtins/mock-observations/helpers/common-generator.ts.html +0 -184
  39. package/coverage/lcov-report/builtins/mock-observations/helpers/index.html +0 -131
  40. package/coverage/lcov-report/builtins/mock-observations/helpers/rand-int-generator.ts.html +0 -289
  41. package/coverage/lcov-report/builtins/mock-observations/index.html +0 -116
  42. package/coverage/lcov-report/builtins/mock-observations/index.ts.html +0 -619
  43. package/coverage/lcov-report/builtins/multiply/index.html +0 -116
  44. package/coverage/lcov-report/builtins/multiply/index.ts.html +0 -343
  45. package/coverage/lcov-report/builtins/regex/index.html +0 -116
  46. package/coverage/lcov-report/builtins/regex/index.ts.html +0 -373
  47. package/coverage/lcov-report/builtins/sci/config.ts.html +0 -205
  48. package/coverage/lcov-report/builtins/sci/index.html +0 -116
  49. package/coverage/lcov-report/builtins/sci/index.ts.html +0 -325
  50. package/coverage/lcov-report/builtins/sci-embodied/index.html +0 -116
  51. package/coverage/lcov-report/builtins/sci-embodied/index.ts.html +0 -478
  52. package/coverage/lcov-report/builtins/shell/index.html +0 -116
  53. package/coverage/lcov-report/builtins/shell/index.ts.html +0 -280
  54. package/coverage/lcov-report/builtins/subtract/index.html +0 -116
  55. package/coverage/lcov-report/builtins/subtract/index.ts.html +0 -379
  56. package/coverage/lcov-report/builtins/sum/index.html +0 -116
  57. package/coverage/lcov-report/builtins/sum/index.ts.html +0 -334
  58. package/coverage/lcov-report/builtins/time-sync.ts.html +0 -1462
  59. package/coverage/lcov-report/common/config/index.html +0 -131
  60. package/coverage/lcov-report/common/config/index.ts.html +0 -88
  61. package/coverage/lcov-report/common/config/strings.ts.html +0 -121
  62. package/coverage/lcov-report/common/lib/index.html +0 -116
  63. package/coverage/lcov-report/common/lib/load.ts.html +0 -139
  64. package/coverage/lcov-report/common/util/debug-logger.ts.html +0 -511
  65. package/coverage/lcov-report/common/util/fs.ts.html +0 -289
  66. package/coverage/lcov-report/common/util/helpers.ts.html +0 -280
  67. package/coverage/lcov-report/common/util/index.html +0 -191
  68. package/coverage/lcov-report/common/util/logger.ts.html +0 -151
  69. package/coverage/lcov-report/common/util/validations.ts.html +0 -613
  70. package/coverage/lcov-report/common/util/yaml.ts.html +0 -193
  71. package/coverage/lcov-report/config/config.ts.html +0 -463
  72. package/coverage/lcov-report/config/index.html +0 -161
  73. package/coverage/lcov-report/config/index.ts.html +0 -94
  74. package/coverage/lcov-report/config/params.ts.html +0 -697
  75. package/coverage/lcov-report/config/strings.ts.html +0 -490
  76. package/coverage/lcov-report/favicon.png +0 -0
  77. package/coverage/lcov-report/if-check/config/config.ts.html +0 -184
  78. package/coverage/lcov-report/if-check/config/index.html +0 -146
  79. package/coverage/lcov-report/if-check/config/index.ts.html +0 -91
  80. package/coverage/lcov-report/if-check/config/strings.ts.html +0 -142
  81. package/coverage/lcov-report/if-check/util/args.ts.html +0 -304
  82. package/coverage/lcov-report/if-check/util/helpers.ts.html +0 -136
  83. package/coverage/lcov-report/if-check/util/index.html +0 -146
  84. package/coverage/lcov-report/if-check/util/npm.ts.html +0 -232
  85. package/coverage/lcov-report/if-csv/util/helpers.ts.html +0 -346
  86. package/coverage/lcov-report/if-csv/util/index.html +0 -116
  87. package/coverage/lcov-report/if-diff/config/config.ts.html +0 -184
  88. package/coverage/lcov-report/if-diff/config/index.html +0 -146
  89. package/coverage/lcov-report/if-diff/config/index.ts.html +0 -91
  90. package/coverage/lcov-report/if-diff/config/strings.ts.html +0 -100
  91. package/coverage/lcov-report/if-diff/lib/compare.ts.html +0 -286
  92. package/coverage/lcov-report/if-diff/lib/index.html +0 -131
  93. package/coverage/lcov-report/if-diff/lib/load.ts.html +0 -199
  94. package/coverage/lcov-report/if-diff/util/args.ts.html +0 -268
  95. package/coverage/lcov-report/if-diff/util/helpers.ts.html +0 -337
  96. package/coverage/lcov-report/if-diff/util/index.html +0 -131
  97. package/coverage/lcov-report/if-env/config/config.ts.html +0 -211
  98. package/coverage/lcov-report/if-env/config/index.html +0 -146
  99. package/coverage/lcov-report/if-env/config/index.ts.html +0 -91
  100. package/coverage/lcov-report/if-env/config/strings.ts.html +0 -109
  101. package/coverage/lcov-report/if-env/util/args.ts.html +0 -250
  102. package/coverage/lcov-report/if-env/util/index.html +0 -131
  103. package/coverage/lcov-report/if-env/util/npm.ts.html +0 -526
  104. package/coverage/lcov-report/if-merge/util/args.ts.html +0 -295
  105. package/coverage/lcov-report/if-merge/util/helpers.ts.html +0 -301
  106. package/coverage/lcov-report/if-merge/util/index.html +0 -131
  107. package/coverage/lcov-report/if-run/builtins/coefficient/index.html +0 -116
  108. package/coverage/lcov-report/if-run/builtins/coefficient/index.ts.html +0 -382
  109. package/coverage/lcov-report/if-run/builtins/copy-param/index.html +0 -116
  110. package/coverage/lcov-report/if-run/builtins/copy-param/index.ts.html +0 -415
  111. package/coverage/lcov-report/if-run/builtins/csv-lookup/index.html +0 -116
  112. package/coverage/lcov-report/if-run/builtins/csv-lookup/index.ts.html +0 -868
  113. package/coverage/lcov-report/if-run/builtins/divide/index.html +0 -116
  114. package/coverage/lcov-report/if-run/builtins/divide/index.ts.html +0 -469
  115. package/coverage/lcov-report/if-run/builtins/exponent/index.html +0 -116
  116. package/coverage/lcov-report/if-run/builtins/exponent/index.ts.html +0 -394
  117. package/coverage/lcov-report/if-run/builtins/export-csv-raw.ts.html +0 -553
  118. package/coverage/lcov-report/if-run/builtins/export-csv.ts.html +0 -436
  119. package/coverage/lcov-report/if-run/builtins/export-log.ts.html +0 -148
  120. package/coverage/lcov-report/if-run/builtins/export-yaml.ts.html +0 -193
  121. package/coverage/lcov-report/if-run/builtins/group-by.ts.html +0 -370
  122. package/coverage/lcov-report/if-run/builtins/index.html +0 -146
  123. package/coverage/lcov-report/if-run/builtins/index.ts.html +0 -133
  124. package/coverage/lcov-report/if-run/builtins/interpolation/index.html +0 -116
  125. package/coverage/lcov-report/if-run/builtins/interpolation/index.ts.html +0 -709
  126. package/coverage/lcov-report/if-run/builtins/mock-observations/helpers/common-generator.ts.html +0 -184
  127. package/coverage/lcov-report/if-run/builtins/mock-observations/helpers/index.html +0 -131
  128. package/coverage/lcov-report/if-run/builtins/mock-observations/helpers/rand-int-generator.ts.html +0 -289
  129. package/coverage/lcov-report/if-run/builtins/mock-observations/index.html +0 -116
  130. package/coverage/lcov-report/if-run/builtins/mock-observations/index.ts.html +0 -709
  131. package/coverage/lcov-report/if-run/builtins/multiply/index.html +0 -116
  132. package/coverage/lcov-report/if-run/builtins/multiply/index.ts.html +0 -406
  133. package/coverage/lcov-report/if-run/builtins/regex/index.html +0 -116
  134. package/coverage/lcov-report/if-run/builtins/regex/index.ts.html +0 -433
  135. package/coverage/lcov-report/if-run/builtins/sci/index.html +0 -116
  136. package/coverage/lcov-report/if-run/builtins/sci/index.ts.html +0 -502
  137. package/coverage/lcov-report/if-run/builtins/sci-embodied/index.html +0 -116
  138. package/coverage/lcov-report/if-run/builtins/sci-embodied/index.ts.html +0 -577
  139. package/coverage/lcov-report/if-run/builtins/shell/index.html +0 -116
  140. package/coverage/lcov-report/if-run/builtins/shell/index.ts.html +0 -343
  141. package/coverage/lcov-report/if-run/builtins/subtract/index.html +0 -116
  142. package/coverage/lcov-report/if-run/builtins/subtract/index.ts.html +0 -418
  143. package/coverage/lcov-report/if-run/builtins/sum/index.html +0 -116
  144. package/coverage/lcov-report/if-run/builtins/sum/index.ts.html +0 -400
  145. package/coverage/lcov-report/if-run/builtins/time-converter/config.ts.html +0 -205
  146. package/coverage/lcov-report/if-run/builtins/time-converter/index.html +0 -131
  147. package/coverage/lcov-report/if-run/builtins/time-converter/index.ts.html +0 -412
  148. package/coverage/lcov-report/if-run/builtins/time-sync/index.html +0 -116
  149. package/coverage/lcov-report/if-run/builtins/time-sync/index.ts.html +0 -1651
  150. package/coverage/lcov-report/if-run/builtins/time-sync.ts.html +0 -1462
  151. package/coverage/lcov-report/if-run/config/config.ts.html +0 -271
  152. package/coverage/lcov-report/if-run/config/index.html +0 -161
  153. package/coverage/lcov-report/if-run/config/index.ts.html +0 -94
  154. package/coverage/lcov-report/if-run/config/params.ts.html +0 -679
  155. package/coverage/lcov-report/if-run/config/strings.ts.html +0 -460
  156. package/coverage/lcov-report/if-run/lib/aggregate.ts.html +0 -580
  157. package/coverage/lcov-report/if-run/lib/compute.ts.html +0 -709
  158. package/coverage/lcov-report/if-run/lib/environment.ts.html +0 -373
  159. package/coverage/lcov-report/if-run/lib/exhaust.ts.html +0 -193
  160. package/coverage/lcov-report/if-run/lib/explain.ts.html +0 -217
  161. package/coverage/lcov-report/if-run/lib/index.html +0 -206
  162. package/coverage/lcov-report/if-run/lib/initialize.ts.html +0 -475
  163. package/coverage/lcov-report/if-run/lib/parameterize.ts.html +0 -322
  164. package/coverage/lcov-report/if-run/lib/regroup.ts.html +0 -325
  165. package/coverage/lcov-report/if-run/lib/time-sync.ts.html +0 -1510
  166. package/coverage/lcov-report/if-run/types/aggregation.ts.html +0 -94
  167. package/coverage/lcov-report/if-run/types/index.html +0 -146
  168. package/coverage/lcov-report/if-run/types/interface.ts.html +0 -112
  169. package/coverage/lcov-report/if-run/types/parameters.ts.html +0 -106
  170. package/coverage/lcov-report/if-run/util/aggregation-helper.ts.html +0 -280
  171. package/coverage/lcov-report/if-run/util/args.ts.html +0 -313
  172. package/coverage/lcov-report/if-run/util/helpers.ts.html +0 -304
  173. package/coverage/lcov-report/if-run/util/index.html +0 -191
  174. package/coverage/lcov-report/if-run/util/json.ts.html +0 -115
  175. package/coverage/lcov-report/if-run/util/log-memoize.ts.html +0 -145
  176. package/coverage/lcov-report/if-run/util/os-checker.ts.html +0 -421
  177. package/coverage/lcov-report/if-run/util/plugin-storage.ts.html +0 -202
  178. package/coverage/lcov-report/index.html +0 -521
  179. package/coverage/lcov-report/lib/aggregate.ts.html +0 -358
  180. package/coverage/lcov-report/lib/compare.ts.html +0 -286
  181. package/coverage/lcov-report/lib/compute.ts.html +0 -436
  182. package/coverage/lcov-report/lib/environment.ts.html +0 -376
  183. package/coverage/lcov-report/lib/exhaust.ts.html +0 -289
  184. package/coverage/lcov-report/lib/index.html +0 -221
  185. package/coverage/lcov-report/lib/initialize.ts.html +0 -430
  186. package/coverage/lcov-report/lib/load.ts.html +0 -268
  187. package/coverage/lcov-report/lib/parameterize.ts.html +0 -316
  188. package/coverage/lcov-report/prettify.css +0 -1
  189. package/coverage/lcov-report/prettify.js +0 -2
  190. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  191. package/coverage/lcov-report/sorter.js +0 -196
  192. package/coverage/lcov-report/types/aggregation.ts.html +0 -94
  193. package/coverage/lcov-report/types/index.html +0 -146
  194. package/coverage/lcov-report/types/interface.ts.html +0 -112
  195. package/coverage/lcov-report/types/parameters.ts.html +0 -106
  196. package/coverage/lcov-report/util/aggregation-helper.ts.html +0 -289
  197. package/coverage/lcov-report/util/args.ts.html +0 -649
  198. package/coverage/lcov-report/util/debug-logger.ts.html +0 -481
  199. package/coverage/lcov-report/util/errors.ts.html +0 -232
  200. package/coverage/lcov-report/util/fs.ts.html +0 -124
  201. package/coverage/lcov-report/util/helpers.ts.html +0 -895
  202. package/coverage/lcov-report/util/index.html +0 -296
  203. package/coverage/lcov-report/util/json.ts.html +0 -115
  204. package/coverage/lcov-report/util/log-memoize.ts.html +0 -145
  205. package/coverage/lcov-report/util/logger.ts.html +0 -151
  206. package/coverage/lcov-report/util/npm.ts.html +0 -499
  207. package/coverage/lcov-report/util/os-checker.ts.html +0 -421
  208. package/coverage/lcov-report/util/plugin-storage.ts.html +0 -202
  209. package/coverage/lcov-report/util/validations.ts.html +0 -544
  210. package/coverage/lcov-report/util/yaml.ts.html +0 -193
  211. package/coverage/lcov.info +0 -3392
  212. package/manifests/outputs/features/regroup/test.yml +0 -92
@@ -1,1651 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for if-run/builtins/time-sync/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">if-run/builtins/time-sync</a> index.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">98.77% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>161/163</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">91.66% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>44/48</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>26/26</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">98.75% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>158/160</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 high'></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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">4x</span>
589
- <span class="cline-any cline-neutral">&nbsp;</span>
590
- <span class="cline-any cline-yes">4x</span>
591
- <span class="cline-any cline-yes">4x</span>
592
- <span class="cline-any cline-yes">4x</span>
593
- <span class="cline-any cline-yes">4x</span>
594
- <span class="cline-any cline-neutral">&nbsp;</span>
595
- <span class="cline-any cline-neutral">&nbsp;</span>
596
- <span class="cline-any cline-neutral">&nbsp;</span>
597
- <span class="cline-any cline-neutral">&nbsp;</span>
598
- <span class="cline-any cline-neutral">&nbsp;</span>
599
- <span class="cline-any cline-neutral">&nbsp;</span>
600
- <span class="cline-any cline-neutral">&nbsp;</span>
601
- <span class="cline-any cline-neutral">&nbsp;</span>
602
- <span class="cline-any cline-neutral">&nbsp;</span>
603
- <span class="cline-any cline-neutral">&nbsp;</span>
604
- <span class="cline-any cline-neutral">&nbsp;</span>
605
- <span class="cline-any cline-neutral">&nbsp;</span>
606
- <span class="cline-any cline-neutral">&nbsp;</span>
607
- <span class="cline-any cline-neutral">&nbsp;</span>
608
- <span class="cline-any cline-yes">4x</span>
609
- <span class="cline-any cline-neutral">&nbsp;</span>
610
- <span class="cline-any cline-yes">4x</span>
611
- <span class="cline-any cline-yes">4x</span>
612
- <span class="cline-any cline-neutral">&nbsp;</span>
613
- <span class="cline-any cline-yes">4x</span>
614
- <span class="cline-any cline-neutral">&nbsp;</span>
615
- <span class="cline-any cline-neutral">&nbsp;</span>
616
- <span class="cline-any cline-neutral">&nbsp;</span>
617
- <span class="cline-any cline-neutral">&nbsp;</span>
618
- <span class="cline-any cline-neutral">&nbsp;</span>
619
- <span class="cline-any cline-neutral">&nbsp;</span>
620
- <span class="cline-any cline-yes">4x</span>
621
- <span class="cline-any cline-neutral">&nbsp;</span>
622
- <span class="cline-any cline-neutral">&nbsp;</span>
623
- <span class="cline-any cline-neutral">&nbsp;</span>
624
- <span class="cline-any cline-neutral">&nbsp;</span>
625
- <span class="cline-any cline-neutral">&nbsp;</span>
626
- <span class="cline-any cline-neutral">&nbsp;</span>
627
- <span class="cline-any cline-neutral">&nbsp;</span>
628
- <span class="cline-any cline-neutral">&nbsp;</span>
629
- <span class="cline-any cline-neutral">&nbsp;</span>
630
- <span class="cline-any cline-yes">4x</span>
631
- <span class="cline-any cline-neutral">&nbsp;</span>
632
- <span class="cline-any cline-neutral">&nbsp;</span>
633
- <span class="cline-any cline-neutral">&nbsp;</span>
634
- <span class="cline-any cline-neutral">&nbsp;</span>
635
- <span class="cline-any cline-neutral">&nbsp;</span>
636
- <span class="cline-any cline-neutral">&nbsp;</span>
637
- <span class="cline-any cline-neutral">&nbsp;</span>
638
- <span class="cline-any cline-neutral">&nbsp;</span>
639
- <span class="cline-any cline-neutral">&nbsp;</span>
640
- <span class="cline-any cline-neutral">&nbsp;</span>
641
- <span class="cline-any cline-neutral">&nbsp;</span>
642
- <span class="cline-any cline-neutral">&nbsp;</span>
643
- <span class="cline-any cline-neutral">&nbsp;</span>
644
- <span class="cline-any cline-neutral">&nbsp;</span>
645
- <span class="cline-any cline-neutral">&nbsp;</span>
646
- <span class="cline-any cline-neutral">&nbsp;</span>
647
- <span class="cline-any cline-yes">4x</span>
648
- <span class="cline-any cline-neutral">&nbsp;</span>
649
- <span class="cline-any cline-neutral">&nbsp;</span>
650
- <span class="cline-any cline-neutral">&nbsp;</span>
651
- <span class="cline-any cline-neutral">&nbsp;</span>
652
- <span class="cline-any cline-yes">23x</span>
653
- <span class="cline-any cline-neutral">&nbsp;</span>
654
- <span class="cline-any cline-neutral">&nbsp;</span>
655
- <span class="cline-any cline-neutral">&nbsp;</span>
656
- <span class="cline-any cline-neutral">&nbsp;</span>
657
- <span class="cline-any cline-neutral">&nbsp;</span>
658
- <span class="cline-any cline-neutral">&nbsp;</span>
659
- <span class="cline-any cline-neutral">&nbsp;</span>
660
- <span class="cline-any cline-neutral">&nbsp;</span>
661
- <span class="cline-any cline-neutral">&nbsp;</span>
662
- <span class="cline-any cline-neutral">&nbsp;</span>
663
- <span class="cline-any cline-neutral">&nbsp;</span>
664
- <span class="cline-any cline-neutral">&nbsp;</span>
665
- <span class="cline-any cline-neutral">&nbsp;</span>
666
- <span class="cline-any cline-neutral">&nbsp;</span>
667
- <span class="cline-any cline-neutral">&nbsp;</span>
668
- <span class="cline-any cline-neutral">&nbsp;</span>
669
- <span class="cline-any cline-neutral">&nbsp;</span>
670
- <span class="cline-any cline-neutral">&nbsp;</span>
671
- <span class="cline-any cline-neutral">&nbsp;</span>
672
- <span class="cline-any cline-neutral">&nbsp;</span>
673
- <span class="cline-any cline-neutral">&nbsp;</span>
674
- <span class="cline-any cline-neutral">&nbsp;</span>
675
- <span class="cline-any cline-yes">23x</span>
676
- <span class="cline-any cline-yes">22x</span>
677
- <span class="cline-any cline-yes">15x</span>
678
- <span class="cline-any cline-neutral">&nbsp;</span>
679
- <span class="cline-any cline-neutral">&nbsp;</span>
680
- <span class="cline-any cline-neutral">&nbsp;</span>
681
- <span class="cline-any cline-neutral">&nbsp;</span>
682
- <span class="cline-any cline-neutral">&nbsp;</span>
683
- <span class="cline-any cline-neutral">&nbsp;</span>
684
- <span class="cline-any cline-yes">15x</span>
685
- <span class="cline-any cline-yes">14x</span>
686
- <span class="cline-any cline-neutral">&nbsp;</span>
687
- <span class="cline-any cline-yes">12x</span>
688
- <span class="cline-any cline-neutral">&nbsp;</span>
689
- <span class="cline-any cline-yes">12x</span>
690
- <span class="cline-any cline-neutral">&nbsp;</span>
691
- <span class="cline-any cline-yes">34x</span>
692
- <span class="cline-any cline-yes">34x</span>
693
- <span class="cline-any cline-neutral">&nbsp;</span>
694
- <span class="cline-any cline-neutral">&nbsp;</span>
695
- <span class="cline-any cline-neutral">&nbsp;</span>
696
- <span class="cline-any cline-neutral">&nbsp;</span>
697
- <span class="cline-any cline-yes">32x</span>
698
- <span class="cline-any cline-neutral">&nbsp;</span>
699
- <span class="cline-any cline-neutral">&nbsp;</span>
700
- <span class="cline-any cline-yes">32x</span>
701
- <span class="cline-any cline-yes">22x</span>
702
- <span class="cline-any cline-yes">22x</span>
703
- <span class="cline-any cline-neutral">&nbsp;</span>
704
- <span class="cline-any cline-neutral">&nbsp;</span>
705
- <span class="cline-any cline-yes">22x</span>
706
- <span class="cline-any cline-neutral">&nbsp;</span>
707
- <span class="cline-any cline-neutral">&nbsp;</span>
708
- <span class="cline-any cline-neutral">&nbsp;</span>
709
- <span class="cline-any cline-neutral">&nbsp;</span>
710
- <span class="cline-any cline-yes">2x</span>
711
- <span class="cline-any cline-neutral">&nbsp;</span>
712
- <span class="cline-any cline-neutral">&nbsp;</span>
713
- <span class="cline-any cline-yes">20x</span>
714
- <span class="cline-any cline-neutral">&nbsp;</span>
715
- <span class="cline-any cline-neutral">&nbsp;</span>
716
- <span class="cline-any cline-neutral">&nbsp;</span>
717
- <span class="cline-any cline-yes">20x</span>
718
- <span class="cline-any cline-neutral">&nbsp;</span>
719
- <span class="cline-any cline-neutral">&nbsp;</span>
720
- <span class="cline-any cline-neutral">&nbsp;</span>
721
- <span class="cline-any cline-neutral">&nbsp;</span>
722
- <span class="cline-any cline-yes">20x</span>
723
- <span class="cline-any cline-yes">4x</span>
724
- <span class="cline-any cline-neutral">&nbsp;</span>
725
- <span class="cline-any cline-neutral">&nbsp;</span>
726
- <span class="cline-any cline-neutral">&nbsp;</span>
727
- <span class="cline-any cline-neutral">&nbsp;</span>
728
- <span class="cline-any cline-neutral">&nbsp;</span>
729
- <span class="cline-any cline-neutral">&nbsp;</span>
730
- <span class="cline-any cline-neutral">&nbsp;</span>
731
- <span class="cline-any cline-neutral">&nbsp;</span>
732
- <span class="cline-any cline-neutral">&nbsp;</span>
733
- <span class="cline-any cline-yes">30x</span>
734
- <span class="cline-any cline-yes">121x</span>
735
- <span class="cline-any cline-neutral">&nbsp;</span>
736
- <span class="cline-any cline-yes">121x</span>
737
- <span class="cline-any cline-neutral">&nbsp;</span>
738
- <span class="cline-any cline-neutral">&nbsp;</span>
739
- <span class="cline-any cline-yes">30x</span>
740
- <span class="cline-any cline-neutral">&nbsp;</span>
741
- <span class="cline-any cline-neutral">&nbsp;</span>
742
- <span class="cline-any cline-neutral">&nbsp;</span>
743
- <span class="cline-any cline-neutral">&nbsp;</span>
744
- <span class="cline-any cline-yes">8x</span>
745
- <span class="cline-any cline-yes">59x</span>
746
- <span class="cline-any cline-neutral">&nbsp;</span>
747
- <span class="cline-any cline-neutral">&nbsp;</span>
748
- <span class="cline-any cline-yes">8x</span>
749
- <span class="cline-any cline-yes">27x</span>
750
- <span class="cline-any cline-neutral">&nbsp;</span>
751
- <span class="cline-any cline-neutral">&nbsp;</span>
752
- <span class="cline-any cline-neutral">&nbsp;</span>
753
- <span class="cline-any cline-neutral">&nbsp;</span>
754
- <span class="cline-any cline-neutral">&nbsp;</span>
755
- <span class="cline-any cline-neutral">&nbsp;</span>
756
- <span class="cline-any cline-neutral">&nbsp;</span>
757
- <span class="cline-any cline-yes">23x</span>
758
- <span class="cline-any cline-yes">811x</span>
759
- <span class="cline-any cline-yes">1x</span>
760
- <span class="cline-any cline-neutral">&nbsp;</span>
761
- <span class="cline-any cline-neutral">&nbsp;</span>
762
- <span class="cline-any cline-yes">810x</span>
763
- <span class="cline-any cline-yes">3x</span>
764
- <span class="cline-any cline-neutral">&nbsp;</span>
765
- <span class="cline-any cline-neutral">&nbsp;</span>
766
- <span class="cline-any cline-yes">807x</span>
767
- <span class="cline-any cline-yes">806x</span>
768
- <span class="cline-any cline-neutral">&nbsp;</span>
769
- <span class="cline-any cline-neutral">&nbsp;</span>
770
- <span class="cline-any cline-yes">1x</span>
771
- <span class="cline-any cline-neutral">&nbsp;</span>
772
- <span class="cline-any cline-neutral">&nbsp;</span>
773
- <span class="cline-any cline-neutral">&nbsp;</span>
774
- <span class="cline-any cline-neutral">&nbsp;</span>
775
- <span class="cline-any cline-neutral">&nbsp;</span>
776
- <span class="cline-any cline-yes">23x</span>
777
- <span class="cline-any cline-yes">34x</span>
778
- <span class="cline-any cline-neutral">&nbsp;</span>
779
- <span class="cline-any cline-neutral">&nbsp;</span>
780
- <span class="cline-any cline-neutral">&nbsp;</span>
781
- <span class="cline-any cline-neutral">&nbsp;</span>
782
- <span class="cline-any cline-neutral">&nbsp;</span>
783
- <span class="cline-any cline-neutral">&nbsp;</span>
784
- <span class="cline-any cline-neutral">&nbsp;</span>
785
- <span class="cline-any cline-neutral">&nbsp;</span>
786
- <span class="cline-any cline-neutral">&nbsp;</span>
787
- <span class="cline-any cline-neutral">&nbsp;</span>
788
- <span class="cline-any cline-neutral">&nbsp;</span>
789
- <span class="cline-any cline-yes">34x</span>
790
- <span class="cline-any cline-neutral">&nbsp;</span>
791
- <span class="cline-any cline-neutral">&nbsp;</span>
792
- <span class="cline-any cline-neutral">&nbsp;</span>
793
- <span class="cline-any cline-neutral">&nbsp;</span>
794
- <span class="cline-any cline-neutral">&nbsp;</span>
795
- <span class="cline-any cline-yes">23x</span>
796
- <span class="cline-any cline-yes">22x</span>
797
- <span class="cline-any cline-yes">1x</span>
798
- <span class="cline-any cline-neutral">&nbsp;</span>
799
- <span class="cline-any cline-neutral">&nbsp;</span>
800
- <span class="cline-any cline-yes">21x</span>
801
- <span class="cline-any cline-neutral">&nbsp;</span>
802
- <span class="cline-any cline-neutral">&nbsp;</span>
803
- <span class="cline-any cline-neutral">&nbsp;</span>
804
- <span class="cline-any cline-neutral">&nbsp;</span>
805
- <span class="cline-any cline-neutral">&nbsp;</span>
806
- <span class="cline-any cline-neutral">&nbsp;</span>
807
- <span class="cline-any cline-yes">21x</span>
808
- <span class="cline-any cline-neutral">&nbsp;</span>
809
- <span class="cline-any cline-neutral">&nbsp;</span>
810
- <span class="cline-any cline-neutral">&nbsp;</span>
811
- <span class="cline-any cline-yes">21x</span>
812
- <span class="cline-any cline-neutral">&nbsp;</span>
813
- <span class="cline-any cline-neutral">&nbsp;</span>
814
- <span class="cline-any cline-neutral">&nbsp;</span>
815
- <span class="cline-any cline-neutral">&nbsp;</span>
816
- <span class="cline-any cline-neutral">&nbsp;</span>
817
- <span class="cline-any cline-yes">23x</span>
818
- <span class="cline-any cline-yes">30x</span>
819
- <span class="cline-any cline-neutral">&nbsp;</span>
820
- <span class="cline-any cline-neutral">&nbsp;</span>
821
- <span class="cline-any cline-neutral">&nbsp;</span>
822
- <span class="cline-any cline-neutral">&nbsp;</span>
823
- <span class="cline-any cline-yes">23x</span>
824
- <span class="cline-any cline-neutral">&nbsp;</span>
825
- <span class="cline-any cline-neutral">&nbsp;</span>
826
- <span class="cline-any cline-neutral">&nbsp;</span>
827
- <span class="cline-any cline-yes">121x</span>
828
- <span class="cline-any cline-neutral">&nbsp;</span>
829
- <span class="cline-any cline-yes">121x</span>
830
- <span class="cline-any cline-neutral">&nbsp;</span>
831
- <span class="cline-any cline-neutral">&nbsp;</span>
832
- <span class="cline-any cline-neutral">&nbsp;</span>
833
- <span class="cline-any cline-neutral">&nbsp;</span>
834
- <span class="cline-any cline-neutral">&nbsp;</span>
835
- <span class="cline-any cline-yes">23x</span>
836
- <span class="cline-any cline-yes">121x</span>
837
- <span class="cline-any cline-neutral">&nbsp;</span>
838
- <span class="cline-any cline-yes">121x</span>
839
- <span class="cline-any cline-yes">379x</span>
840
- <span class="cline-any cline-neutral">&nbsp;</span>
841
- <span class="cline-any cline-yes">379x</span>
842
- <span class="cline-any cline-yes">121x</span>
843
- <span class="cline-any cline-yes">121x</span>
844
- <span class="cline-any cline-neutral">&nbsp;</span>
845
- <span class="cline-any cline-yes">121x</span>
846
- <span class="cline-any cline-neutral">&nbsp;</span>
847
- <span class="cline-any cline-neutral">&nbsp;</span>
848
- <span class="cline-any cline-neutral">&nbsp;</span>
849
- <span class="cline-any cline-yes">258x</span>
850
- <span class="cline-any cline-yes">121x</span>
851
- <span class="cline-any cline-neutral">&nbsp;</span>
852
- <span class="cline-any cline-yes">121x</span>
853
- <span class="cline-any cline-neutral">&nbsp;</span>
854
- <span class="cline-any cline-neutral">&nbsp;</span>
855
- <span class="cline-any cline-yes">137x</span>
856
- <span class="cline-any cline-neutral">&nbsp;</span>
857
- <span class="cline-any cline-neutral">&nbsp;</span>
858
- <span class="cline-any cline-neutral">&nbsp;</span>
859
- <span class="cline-any cline-neutral">&nbsp;</span>
860
- <span class="cline-any cline-yes">137x</span>
861
- <span class="cline-any cline-neutral">&nbsp;</span>
862
- <span class="cline-any cline-neutral">&nbsp;</span>
863
- <span class="cline-any cline-neutral">&nbsp;</span>
864
- <span class="cline-any cline-neutral">&nbsp;</span>
865
- <span class="cline-any cline-neutral">&nbsp;</span>
866
- <span class="cline-any cline-neutral">&nbsp;</span>
867
- <span class="cline-any cline-yes">23x</span>
868
- <span class="cline-any cline-neutral">&nbsp;</span>
869
- <span class="cline-any cline-neutral">&nbsp;</span>
870
- <span class="cline-any cline-neutral">&nbsp;</span>
871
- <span class="cline-any cline-yes">106x</span>
872
- <span class="cline-any cline-neutral">&nbsp;</span>
873
- <span class="cline-any cline-yes">106x</span>
874
- <span class="cline-any cline-yes">326x</span>
875
- <span class="cline-any cline-yes">106x</span>
876
- <span class="cline-any cline-neutral">&nbsp;</span>
877
- <span class="cline-any cline-yes">106x</span>
878
- <span class="cline-any cline-neutral">&nbsp;</span>
879
- <span class="cline-any cline-neutral">&nbsp;</span>
880
- <span class="cline-any cline-neutral">&nbsp;</span>
881
- <span class="cline-any cline-yes">220x</span>
882
- <span class="cline-any cline-yes">106x</span>
883
- <span class="cline-any cline-neutral">&nbsp;</span>
884
- <span class="cline-any cline-yes">106x</span>
885
- <span class="cline-any cline-neutral">&nbsp;</span>
886
- <span class="cline-any cline-neutral">&nbsp;</span>
887
- <span class="cline-any cline-yes">114x</span>
888
- <span class="cline-any cline-neutral">&nbsp;</span>
889
- <span class="cline-any cline-neutral">&nbsp;</span>
890
- <span class="cline-any cline-neutral">&nbsp;</span>
891
- <span class="cline-any cline-neutral">&nbsp;</span>
892
- <span class="cline-any cline-neutral">&nbsp;</span>
893
- <span class="cline-any cline-yes">8x</span>
894
- <span class="cline-any cline-neutral">&nbsp;</span>
895
- <span class="cline-any cline-yes">8x</span>
896
- <span class="cline-any cline-neutral">&nbsp;</span>
897
- <span class="cline-any cline-neutral">&nbsp;</span>
898
- <span class="cline-any cline-yes">106x</span>
899
- <span class="cline-any cline-neutral">&nbsp;</span>
900
- <span class="cline-any cline-yes">106x</span>
901
- <span class="cline-any cline-yes">11x</span>
902
- <span class="cline-any cline-neutral">&nbsp;</span>
903
- <span class="cline-any cline-yes">11x</span>
904
- <span class="cline-any cline-neutral">&nbsp;</span>
905
- <span class="cline-any cline-neutral">&nbsp;</span>
906
- <span class="cline-any cline-yes">95x</span>
907
- <span class="cline-any cline-neutral">&nbsp;</span>
908
- <span class="cline-any cline-yes">95x</span>
909
- <span class="cline-any cline-neutral">&nbsp;</span>
910
- <span class="cline-any cline-neutral">&nbsp;</span>
911
- <span class="cline-any cline-neutral">&nbsp;</span>
912
- <span class="cline-any cline-neutral">&nbsp;</span>
913
- <span class="cline-any cline-neutral">&nbsp;</span>
914
- <span class="cline-any cline-neutral">&nbsp;</span>
915
- <span class="cline-any cline-yes">23x</span>
916
- <span class="cline-any cline-yes">14x</span>
917
- <span class="cline-any cline-yes">14x</span>
918
- <span class="cline-any cline-neutral">&nbsp;</span>
919
- <span class="cline-any cline-yes">14x</span>
920
- <span class="cline-any cline-yes">2x</span>
921
- <span class="cline-any cline-neutral">&nbsp;</span>
922
- <span class="cline-any cline-neutral">&nbsp;</span>
923
- <span class="cline-any cline-neutral">&nbsp;</span>
924
- <span class="cline-any cline-neutral">&nbsp;</span>
925
- <span class="cline-any cline-neutral">&nbsp;</span>
926
- <span class="cline-any cline-neutral">&nbsp;</span>
927
- <span class="cline-any cline-yes">23x</span>
928
- <span class="cline-any cline-neutral">&nbsp;</span>
929
- <span class="cline-any cline-neutral">&nbsp;</span>
930
- <span class="cline-any cline-neutral">&nbsp;</span>
931
- <span class="cline-any cline-yes">15x</span>
932
- <span class="cline-any cline-neutral">&nbsp;</span>
933
- <span class="cline-any cline-neutral">&nbsp;</span>
934
- <span class="cline-any cline-neutral">&nbsp;</span>
935
- <span class="cline-any cline-yes">14x</span>
936
- <span class="cline-any cline-neutral">&nbsp;</span>
937
- <span class="cline-any cline-yes">14x</span>
938
- <span class="cline-any cline-neutral">&nbsp;</span>
939
- <span class="cline-any cline-neutral">&nbsp;</span>
940
- <span class="cline-any cline-neutral">&nbsp;</span>
941
- <span class="cline-any cline-neutral">&nbsp;</span>
942
- <span class="cline-any cline-yes">14x</span>
943
- <span class="cline-any cline-neutral">&nbsp;</span>
944
- <span class="cline-any cline-neutral">&nbsp;</span>
945
- <span class="cline-any cline-neutral">&nbsp;</span>
946
- <span class="cline-any cline-neutral">&nbsp;</span>
947
- <span class="cline-any cline-neutral">&nbsp;</span>
948
- <span class="cline-any cline-neutral">&nbsp;</span>
949
- <span class="cline-any cline-neutral">&nbsp;</span>
950
- <span class="cline-any cline-neutral">&nbsp;</span>
951
- <span class="cline-any cline-neutral">&nbsp;</span>
952
- <span class="cline-any cline-yes">23x</span>
953
- <span class="cline-any cline-yes">67x</span>
954
- <span class="cline-any cline-yes">67x</span>
955
- <span class="cline-any cline-neutral">&nbsp;</span>
956
- <span class="cline-any cline-yes">67x</span>
957
- <span class="cline-any cline-yes">221x</span>
958
- <span class="cline-any cline-neutral">&nbsp;</span>
959
- <span class="cline-any cline-yes">221x</span>
960
- <span class="cline-any cline-yes">67x</span>
961
- <span class="cline-any cline-neutral">&nbsp;</span>
962
- <span class="cline-any cline-yes">67x</span>
963
- <span class="cline-any cline-neutral">&nbsp;</span>
964
- <span class="cline-any cline-neutral">&nbsp;</span>
965
- <span class="cline-any cline-yes">154x</span>
966
- <span class="cline-any cline-yes">67x</span>
967
- <span class="cline-any cline-neutral">&nbsp;</span>
968
- <span class="cline-any cline-neutral">&nbsp;</span>
969
- <span class="cline-any cline-yes">154x</span>
970
- <span class="cline-any cline-yes">33x</span>
971
- <span class="cline-any cline-neutral">&nbsp;</span>
972
- <span class="cline-any cline-neutral">&nbsp;</span>
973
- <span class="cline-any cline-yes">121x</span>
974
- <span class="cline-any cline-neutral">&nbsp;</span>
975
- <span class="cline-any cline-yes">121x</span>
976
- <span class="cline-any cline-yes">101x</span>
977
- <span class="cline-any cline-neutral">&nbsp;</span>
978
- <span class="cline-any cline-yes">101x</span>
979
- <span class="cline-any cline-neutral">&nbsp;</span>
980
- <span class="cline-any cline-neutral">&nbsp;</span>
981
- <span class="cline-any cline-yes">20x</span>
982
- <span class="cline-any cline-no">&nbsp;</span>
983
- <span class="cline-any cline-neutral">&nbsp;</span>
984
- <span class="cline-any cline-no">&nbsp;</span>
985
- <span class="cline-any cline-neutral">&nbsp;</span>
986
- <span class="cline-any cline-neutral">&nbsp;</span>
987
- <span class="cline-any cline-neutral">&nbsp;</span>
988
- <span class="cline-any cline-neutral">&nbsp;</span>
989
- <span class="cline-any cline-neutral">&nbsp;</span>
990
- <span class="cline-any cline-neutral">&nbsp;</span>
991
- <span class="cline-any cline-yes">20x</span>
992
- <span class="cline-any cline-neutral">&nbsp;</span>
993
- <span class="cline-any cline-neutral">&nbsp;</span>
994
- <span class="cline-any cline-neutral">&nbsp;</span>
995
- <span class="cline-any cline-yes">4x</span>
996
- <span class="cline-any cline-neutral">&nbsp;</span>
997
- <span class="cline-any cline-yes">4x</span>
998
- <span class="cline-any cline-neutral">&nbsp;</span>
999
- <span class="cline-any cline-neutral">&nbsp;</span>
1000
- <span class="cline-any cline-yes">16x</span>
1001
- <span class="cline-any cline-neutral">&nbsp;</span>
1002
- <span class="cline-any cline-neutral">&nbsp;</span>
1003
- <span class="cline-any cline-yes">67x</span>
1004
- <span class="cline-any cline-neutral">&nbsp;</span>
1005
- <span class="cline-any cline-neutral">&nbsp;</span>
1006
- <span class="cline-any cline-neutral">&nbsp;</span>
1007
- <span class="cline-any cline-neutral">&nbsp;</span>
1008
- <span class="cline-any cline-neutral">&nbsp;</span>
1009
- <span class="cline-any cline-yes">23x</span>
1010
- <span class="cline-any cline-yes">8x</span>
1011
- <span class="cline-any cline-yes">67x</span>
1012
- <span class="cline-any cline-yes">67x</span>
1013
- <span class="cline-any cline-yes">67x</span>
1014
- <span class="cline-any cline-neutral">&nbsp;</span>
1015
- <span class="cline-any cline-yes">67x</span>
1016
- <span class="cline-any cline-neutral">&nbsp;</span>
1017
- <span class="cline-any cline-neutral">&nbsp;</span>
1018
- <span class="cline-any cline-yes">67x</span>
1019
- <span class="cline-any cline-yes">27x</span>
1020
- <span class="cline-any cline-neutral">&nbsp;</span>
1021
- <span class="cline-any cline-neutral">&nbsp;</span>
1022
- <span class="cline-any cline-yes">67x</span>
1023
- <span class="cline-any cline-neutral">&nbsp;</span>
1024
- <span class="cline-any cline-neutral">&nbsp;</span>
1025
- <span class="cline-any cline-neutral">&nbsp;</span>
1026
- <span class="cline-any cline-neutral">&nbsp;</span>
1027
- <span class="cline-any cline-neutral">&nbsp;</span>
1028
- <span class="cline-any cline-yes">23x</span>
1029
- <span class="cline-any cline-neutral">&nbsp;</span>
1030
- <span class="cline-any cline-neutral">&nbsp;</span>
1031
- <span class="cline-any cline-neutral">&nbsp;</span>
1032
- <span class="cline-any cline-neutral">&nbsp;</span>
1033
- <span class="cline-any cline-yes">12x</span>
1034
- <span class="cline-any cline-yes">12x</span>
1035
- <span class="cline-any cline-neutral">&nbsp;</span>
1036
- <span class="cline-any cline-yes">12x</span>
1037
- <span class="cline-any cline-yes">1x</span>
1038
- <span class="cline-any cline-neutral">&nbsp;</span>
1039
- <span class="cline-any cline-neutral">&nbsp;</span>
1040
- <span class="cline-any cline-neutral">&nbsp;</span>
1041
- <span class="cline-any cline-neutral">&nbsp;</span>
1042
- <span class="cline-any cline-neutral">&nbsp;</span>
1043
- <span class="cline-any cline-neutral">&nbsp;</span>
1044
- <span class="cline-any cline-neutral">&nbsp;</span>
1045
- <span class="cline-any cline-neutral">&nbsp;</span>
1046
- <span class="cline-any cline-yes">12x</span>
1047
- <span class="cline-any cline-neutral">&nbsp;</span>
1048
- <span class="cline-any cline-yes">12x</span>
1049
- <span class="cline-any cline-yes">8x</span>
1050
- <span class="cline-any cline-yes">8x</span>
1051
- <span class="cline-any cline-neutral">&nbsp;</span>
1052
- <span class="cline-any cline-neutral">&nbsp;</span>
1053
- <span class="cline-any cline-yes">8x</span>
1054
- <span class="cline-any cline-neutral">&nbsp;</span>
1055
- <span class="cline-any cline-neutral">&nbsp;</span>
1056
- <span class="cline-any cline-neutral">&nbsp;</span>
1057
- <span class="cline-any cline-neutral">&nbsp;</span>
1058
- <span class="cline-any cline-neutral">&nbsp;</span>
1059
- <span class="cline-any cline-neutral">&nbsp;</span>
1060
- <span class="cline-any cline-neutral">&nbsp;</span>
1061
- <span class="cline-any cline-neutral">&nbsp;</span>
1062
- <span class="cline-any cline-yes">12x</span>
1063
- <span class="cline-any cline-neutral">&nbsp;</span>
1064
- <span class="cline-any cline-neutral">&nbsp;</span>
1065
- <span class="cline-any cline-yes">23x</span>
1066
- <span class="cline-any cline-neutral">&nbsp;</span>
1067
- <span class="cline-any cline-neutral">&nbsp;</span>
1068
- <span class="cline-any cline-neutral">&nbsp;</span>
1069
- <span class="cline-any cline-neutral">&nbsp;</span>
1070
- <span class="cline-any cline-yes">13x</span>
1071
- <span class="cline-any cline-yes">13x</span>
1072
- <span class="cline-any cline-neutral">&nbsp;</span>
1073
- <span class="cline-any cline-yes">13x</span>
1074
- <span class="cline-any cline-yes">106x</span>
1075
- <span class="cline-any cline-neutral">&nbsp;</span>
1076
- <span class="cline-any cline-neutral">&nbsp;</span>
1077
- <span class="cline-any cline-neutral">&nbsp;</span>
1078
- <span class="cline-any cline-neutral">&nbsp;</span>
1079
- <span class="cline-any cline-neutral">&nbsp;</span>
1080
- <span class="cline-any cline-neutral">&nbsp;</span>
1081
- <span class="cline-any cline-neutral">&nbsp;</span>
1082
- <span class="cline-any cline-neutral">&nbsp;</span>
1083
- <span class="cline-any cline-neutral">&nbsp;</span>
1084
- <span class="cline-any cline-neutral">&nbsp;</span>
1085
- <span class="cline-any cline-yes">13x</span>
1086
- <span class="cline-any cline-neutral">&nbsp;</span>
1087
- <span class="cline-any cline-neutral">&nbsp;</span>
1088
- <span class="cline-any cline-neutral">&nbsp;</span>
1089
- <span class="cline-any cline-neutral">&nbsp;</span>
1090
- <span class="cline-any cline-neutral">&nbsp;</span>
1091
- <span class="cline-any cline-yes">23x</span>
1092
- <span class="cline-any cline-neutral">&nbsp;</span>
1093
- <span class="cline-any cline-neutral">&nbsp;</span>
1094
- <span class="cline-any cline-neutral">&nbsp;</span>
1095
- <span class="cline-any cline-yes">30x</span>
1096
- <span class="cline-any cline-yes">229x</span>
1097
- <span class="cline-any cline-neutral">&nbsp;</span>
1098
- <span class="cline-any cline-yes">229x</span>
1099
- <span class="cline-any cline-neutral">&nbsp;</span>
1100
- <span class="cline-any cline-neutral">&nbsp;</span>
1101
- <span class="cline-any cline-neutral">&nbsp;</span>
1102
- <span class="cline-any cline-yes">197x</span>
1103
- <span class="cline-any cline-neutral">&nbsp;</span>
1104
- <span class="cline-any cline-neutral">&nbsp;</span>
1105
- <span class="cline-any cline-yes">229x</span>
1106
- <span class="cline-any cline-neutral">&nbsp;</span>
1107
- <span class="cline-any cline-neutral">&nbsp;</span>
1108
- <span class="cline-any cline-yes">23x</span>
1109
- <span class="cline-any cline-neutral">&nbsp;</span>
1110
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import {isDate} from 'node:util/types';
1111
- &nbsp;
1112
- import {Settings, DateTime, DateTimeMaybeValid, Interval} from 'luxon';
1113
- import {z} from 'zod';
1114
- import {ERRORS} from '@grnsft/if-core/utils';
1115
- import {
1116
- mapInputIfNeeded,
1117
- mapOutputIfNeeded,
1118
- } from '@grnsft/if-core/utils/helpers';
1119
- import {
1120
- ExecutePlugin,
1121
- PluginParams,
1122
- PaddingReceipt,
1123
- TimeNormalizerConfig,
1124
- TimeParams,
1125
- PluginParametersMetadata,
1126
- ParameterMetadata,
1127
- MappingParams,
1128
- } from '@grnsft/if-core/types';
1129
- &nbsp;
1130
- import {validate} from '../../../common/util/validations';
1131
- &nbsp;
1132
- import {STRINGS} from '../../config';
1133
- import {getAggregationMethod} from '../../lib/aggregate';
1134
- &nbsp;
1135
- Settings.defaultZone = 'utc';
1136
- &nbsp;
1137
- const {
1138
- ConfigError,
1139
- InvalidDateInInputError,
1140
- InvalidPaddingError,
1141
- InvalidInputError,
1142
- } = ERRORS;
1143
- &nbsp;
1144
- const {
1145
- INVALID_TIME_NORMALIZATION,
1146
- INVALID_OBSERVATION_OVERLAP,
1147
- AVOIDING_PADDING_BY_EDGES,
1148
- INVALID_DATE_TYPE,
1149
- START_LOWER_END,
1150
- TIMESTAMP_REQUIRED,
1151
- INVALID_DATETIME,
1152
- } = STRINGS;
1153
- &nbsp;
1154
- /**
1155
- * Time synchronization plugin converted into framework integrated tool.
1156
- * It can't be requested in `initialize.plugins` section anymore. Instead describe configuration in context.
1157
- * @example
1158
- * ```yaml
1159
- * name: time-sync
1160
- * description: sample in time sync lib
1161
- * tags: sample, time, sync
1162
- * time-sync:
1163
- * start-time: '2023-12-12T00:00:00.000Z'
1164
- * end-time: '2023-12-12T00:01:00.000Z'
1165
- * interval: 5
1166
- * allow-padding: true
1167
- * ```
1168
- */
1169
- export const TimeSync = (
1170
- config: TimeNormalizerConfig,
1171
- parametersMetadata: PluginParametersMetadata,
1172
- mapping: MappingParams
1173
- ): ExecutePlugin =&gt; {
1174
- const metadata = {
1175
- kind: 'execute',
1176
- inputs: {
1177
- ...({
1178
- timestamp: {
1179
- description: 'refers to the time of occurrence of the input',
1180
- unit: 'RFC3339',
1181
- 'aggregation-method': 'none',
1182
- },
1183
- duration: {
1184
- description: 'refers to the duration of the input',
1185
- unit: 'seconds',
1186
- 'aggregation-method': 'sum',
1187
- },
1188
- } as ParameterMetadata),
1189
- ...parametersMetadata?.inputs,
1190
- },
1191
- outputs: parametersMetadata?.outputs,
1192
- };
1193
- &nbsp;
1194
- /**
1195
- * Take input array and return time-synchronized input array.
1196
- */
1197
- const execute = (inputs: PluginParams[]): PluginParams[] =&gt; {
1198
- const validatedConfig = validateConfig();
1199
- const timeParams = {
1200
- startTime: DateTime.fromISO(validatedConfig['start-time']),
1201
- endTime: DateTime.fromISO(validatedConfig['end-time']),
1202
- interval: validatedConfig.interval,
1203
- allowPadding: validatedConfig['allow-padding'],
1204
- };
1205
- &nbsp;
1206
- const pad = checkForPadding(inputs, timeParams);
1207
- validatePadding(pad, timeParams);
1208
- &nbsp;
1209
- const paddedInputs = padInputs(inputs, pad, timeParams);
1210
- &nbsp;
1211
- const flattenInputs = paddedInputs.reduce(
1212
- (acc: PluginParams[], input, index) =&gt; {
1213
- const mappedInput = mapInputIfNeeded(input, mapping);
1214
- const safeInput = Object.assign(
1215
- {},
1216
- mappedInput,
1217
- validateInput(mappedInput, index)
1218
- );
1219
- const currentMoment = parseDate(safeInput.timestamp);
1220
- &nbsp;
1221
- /** Checks if not the first input, then check consistency with previous ones. */
1222
- if (index &gt; 0) {
1223
- const previousInput = paddedInputs[index - 1];
1224
- const previousInputTimestamp = parseDate(previousInput.timestamp);
1225
- &nbsp;
1226
- /** Checks for timestamps overlap. */
1227
- if (
1228
- parseDate(previousInput.timestamp).plus({
1229
- seconds: previousInput.duration,
1230
- }) &gt; currentMoment
1231
- ) {
1232
- throw new InvalidInputError(INVALID_OBSERVATION_OVERLAP);
1233
- }
1234
- &nbsp;
1235
- const compareableTime = previousInputTimestamp.plus({
1236
- seconds: previousInput.duration,
1237
- });
1238
- &nbsp;
1239
- const timelineGapSize = currentMoment
1240
- .diff(compareableTime)
1241
- .as('seconds');
1242
- &nbsp;
1243
- /** Checks if there is gap in timeline. */
1244
- if (timelineGapSize &gt; 1) {
1245
- acc.push(
1246
- ...getZeroishInputPerSecondBetweenRange(
1247
- compareableTime,
1248
- currentMoment,
1249
- input
1250
- )
1251
- );
1252
- }
1253
- }
1254
- /** Break down current observation. */
1255
- for (let i = 0; i &lt; input.duration; i++) {
1256
- const normalizedInput = breakDownInput(input, i);
1257
- &nbsp;
1258
- acc.push(normalizedInput);
1259
- }
1260
- &nbsp;
1261
- return trimInputsByGlobalTimeline(acc, timeParams);
1262
- },
1263
- [] as PluginParams[]
1264
- );
1265
- &nbsp;
1266
- const sortedInputs = flattenInputs.sort((a, b) =&gt;
1267
- parseDate(a.timestamp).diff(parseDate(b.timestamp)).as('seconds')
1268
- );
1269
- &nbsp;
1270
- const outputs = resampleInputs(sortedInputs, timeParams) as PluginParams[];
1271
- return outputs.map(output =&gt; mapOutputIfNeeded(output, mapping));
1272
- };
1273
- &nbsp;
1274
- /**
1275
- * Dates are passed to `time-sync` both in ISO 8601 format
1276
- * and as a Date object (from the deserialization of a YAML file).
1277
- * If the YAML parser fails to identify as a date, it passes as a string.
1278
- */
1279
- const parseDate = (date: Date | string) =&gt; {
1280
- if (!date) {
1281
- return DateTime.invalid('Invalid date');
1282
- }
1283
- &nbsp;
1284
- if (isDate(date)) {
1285
- return DateTime.fromJSDate(date);
1286
- }
1287
- &nbsp;
1288
- if (typeof date === 'string') {
1289
- return DateTime.fromISO(date);
1290
- }
1291
- &nbsp;
1292
- throw new InvalidDateInInputError(INVALID_DATE_TYPE(date));
1293
- };
1294
- &nbsp;
1295
- /**
1296
- * Validates input parameters.
1297
- */
1298
- const validateInput = (input: PluginParams, index: number) =&gt; {
1299
- const schema = z.object({
1300
- timestamp: z
1301
- .string({
1302
- required_error: TIMESTAMP_REQUIRED(index),
1303
- })
1304
- .datetime({
1305
- message: INVALID_DATETIME(index),
1306
- })
1307
- .or(z.date()),
1308
- duration: z.number(),
1309
- });
1310
- &nbsp;
1311
- return validate&lt;z.infer&lt;typeof schema&gt;&gt;(schema, input);
1312
- };
1313
- &nbsp;
1314
- /**
1315
- * Validates config parameters.
1316
- */
1317
- const validateConfig = () =&gt; {
1318
- if (config === undefined) {
1319
- throw new ConfigError(INVALID_TIME_NORMALIZATION);
1320
- }
1321
- &nbsp;
1322
- const schema = z
1323
- .object({
1324
- 'start-time': z.string().datetime(),
1325
- 'end-time': z.string().datetime(),
1326
- interval: z.number(),
1327
- 'allow-padding': z.boolean(),
1328
- })
1329
- .refine(data =&gt; data['start-time'] &lt; data['end-time'], {
1330
- message: START_LOWER_END,
1331
- });
1332
- &nbsp;
1333
- return validate&lt;z.infer&lt;typeof schema&gt;&gt;(schema, config);
1334
- };
1335
- &nbsp;
1336
- /**
1337
- * Calculates minimal factor.
1338
- */
1339
- const convertPerInterval = (value: number, duration: number) =&gt;
1340
- value / duration;
1341
- &nbsp;
1342
- /**
1343
- * Normalize time per given second.
1344
- */
1345
- const normalizeTimePerSecond = (
1346
- currentRoundMoment: Date | string,
1347
- i: number
1348
- ) =&gt; {
1349
- const thisMoment = parseDate(currentRoundMoment).startOf('second');
1350
- &nbsp;
1351
- return thisMoment.plus({seconds: i});
1352
- };
1353
- &nbsp;
1354
- /**
1355
- * Breaks down input per minimal time unit.
1356
- */
1357
- const breakDownInput = (input: PluginParams, i: number) =&gt; {
1358
- const inputKeys = Object.keys(input);
1359
- &nbsp;
1360
- return inputKeys.reduce((acc, key) =&gt; {
1361
- const method = getAggregationMethod(key);
1362
- &nbsp;
1363
- if (key === 'timestamp') {
1364
- const perSecond = normalizeTimePerSecond(input.timestamp, i);
1365
- acc[key] = perSecond.toUTC().toISO() ?? <span class="branch-1 cbranch-no" title="branch not covered" >'';</span>
1366
- &nbsp;
1367
- return acc;
1368
- }
1369
- &nbsp;
1370
- /** @todo use user defined resolution later */
1371
- if (key === 'duration') {
1372
- acc[key] = 1;
1373
- &nbsp;
1374
- return acc;
1375
- }
1376
- &nbsp;
1377
- acc[key] =
1378
- method === 'sum'
1379
- ? convertPerInterval(input[key], input['duration'])
1380
- : input[key];
1381
- &nbsp;
1382
- return acc;
1383
- }, {} as PluginParams);
1384
- };
1385
- &nbsp;
1386
- /**
1387
- * Populates object to fill the gaps in observational timeline using zeroish values.
1388
- */
1389
- const fillWithZeroishInput = (
1390
- input: PluginParams,
1391
- missingTimestamp: DateTimeMaybeValid
1392
- ) =&gt; {
1393
- const metrics = Object.keys(input);
1394
- &nbsp;
1395
- return metrics.reduce((acc, metric) =&gt; {
1396
- if (metric === 'timestamp') {
1397
- acc[metric] = missingTimestamp.startOf('second').toUTC().toISO() ?? <span class="branch-1 cbranch-no" title="branch not covered" >'';</span>
1398
- &nbsp;
1399
- return acc;
1400
- }
1401
- &nbsp;
1402
- /** @todo later will be changed to user defined interval */
1403
- if (metric === 'duration') {
1404
- acc[metric] = 1;
1405
- &nbsp;
1406
- return acc;
1407
- }
1408
- &nbsp;
1409
- if (
1410
- metric === 'time-reserved' ||
1411
- (mapping &amp;&amp;
1412
- mapping['time-reserved'] &amp;&amp;
1413
- metric === mapping['time-reserved'])
1414
- ) {
1415
- acc[metric] = acc['duration'];
1416
- &nbsp;
1417
- return acc;
1418
- }
1419
- &nbsp;
1420
- const method = getAggregationMethod(metric);
1421
- &nbsp;
1422
- if (method === 'avg' || method === 'sum') {
1423
- acc[metric] = 0;
1424
- &nbsp;
1425
- return acc;
1426
- }
1427
- &nbsp;
1428
- acc[metric] = input[metric];
1429
- &nbsp;
1430
- return acc;
1431
- }, {} as PluginParams);
1432
- };
1433
- &nbsp;
1434
- /**
1435
- * Checks if `error on padding` is enabled and padding is needed. If so, then throws error.
1436
- */
1437
- const validatePadding = (pad: PaddingReceipt, params: TimeParams): void =&gt; {
1438
- const {start, end} = pad;
1439
- const isPaddingNeeded = start || end;
1440
- &nbsp;
1441
- if (!params.allowPadding &amp;&amp; isPaddingNeeded) {
1442
- throw new InvalidPaddingError(AVOIDING_PADDING_BY_EDGES(start, end));
1443
- }
1444
- };
1445
- &nbsp;
1446
- /**
1447
- * Checks if padding is needed either at start of the timeline or the end and returns status.
1448
- */
1449
- const checkForPadding = (
1450
- inputs: PluginParams[],
1451
- params: TimeParams
1452
- ): PaddingReceipt =&gt; {
1453
- const startDiffInSeconds = parseDate(inputs[0].timestamp)
1454
- .diff(params.startTime)
1455
- .as('seconds');
1456
- &nbsp;
1457
- const lastInput = inputs[inputs.length - 1];
1458
- &nbsp;
1459
- const endDiffInSeconds = parseDate(lastInput.timestamp)
1460
- .plus({second: lastInput.duration})
1461
- .diff(params.endTime)
1462
- .as('seconds');
1463
- &nbsp;
1464
- return {
1465
- start: startDiffInSeconds &gt; 0,
1466
- end: endDiffInSeconds &lt; 0,
1467
- };
1468
- };
1469
- &nbsp;
1470
- /**
1471
- * Iterates over given inputs frame, meanwhile checking if aggregation method is `sum`, then calculates it.
1472
- * For methods is `avg` and `none` calculating average of the frame.
1473
- */
1474
- const resampleInputFrame = (inputsInTimeslot: PluginParams[]) =&gt;
1475
- inputsInTimeslot.reduce((acc, input, index, inputs) =&gt; {
1476
- const metrics = Object.keys(input);
1477
- &nbsp;
1478
- metrics.forEach(metric =&gt; {
1479
- let method = getAggregationMethod(metric);
1480
- &nbsp;
1481
- if (metric === 'timestamp') {
1482
- acc[metric] = inputs[0][metric];
1483
- &nbsp;
1484
- return;
1485
- }
1486
- &nbsp;
1487
- if (metric === 'duration') {
1488
- method = 'sum';
1489
- }
1490
- &nbsp;
1491
- if (method === 'none') {
1492
- return;
1493
- }
1494
- &nbsp;
1495
- acc[metric] = acc[metric] ?? 0;
1496
- &nbsp;
1497
- if (method === 'sum') {
1498
- acc[metric] += input[metric];
1499
- &nbsp;
1500
- return;
1501
- }
1502
- &nbsp;
1503
- <span class="missing-if-branch" title="if path not taken" >I</span>if (method === 'copy') {
1504
- <span class="cstat-no" title="statement not covered" > acc[metric] = input[metric];</span>
1505
- &nbsp;
1506
- <span class="cstat-no" title="statement not covered" > return;</span>
1507
- }
1508
- &nbsp;
1509
- /**
1510
- * If timeslot contains records more than one, then divide each metric by the timeslot length,
1511
- * so that their sum yields the timeslot average.
1512
- */
1513
- if (
1514
- inputsInTimeslot.length &gt; 1 &amp;&amp;
1515
- index === inputsInTimeslot.length - 1
1516
- ) {
1517
- acc[metric] /= inputsInTimeslot.length;
1518
- &nbsp;
1519
- return;
1520
- }
1521
- &nbsp;
1522
- acc[metric] += input[metric];
1523
- });
1524
- &nbsp;
1525
- return acc;
1526
- }, {} as PluginParams);
1527
- &nbsp;
1528
- /**
1529
- * Takes each array frame with interval length, then aggregating them together as from units.yaml file.
1530
- */
1531
- const resampleInputs = (inputs: PluginParams[], params: TimeParams) =&gt;
1532
- inputs.reduce((acc: PluginParams[], _input, index, inputs) =&gt; {
1533
- const frameStart = index * params.interval;
1534
- const frameEnd = (index + 1) * params.interval;
1535
- const inputsFrame = inputs.slice(frameStart, frameEnd);
1536
- &nbsp;
1537
- const resampledInput = resampleInputFrame(inputsFrame);
1538
- &nbsp;
1539
- /** Checks if resampled input is not empty, then includes in result. */
1540
- if (Object.keys(resampledInput).length &gt; 0) {
1541
- acc.push(resampledInput);
1542
- }
1543
- &nbsp;
1544
- return acc;
1545
- }, [] as PluginParams[]);
1546
- &nbsp;
1547
- /**
1548
- * Pads zeroish inputs from the beginning or at the end of the inputs if needed.
1549
- */
1550
- const padInputs = (
1551
- inputs: PluginParams[],
1552
- pad: PaddingReceipt,
1553
- params: TimeParams
1554
- ): PluginParams[] =&gt; {
1555
- const {start, end} = pad;
1556
- const paddedFromBeginning = [];
1557
- &nbsp;
1558
- if (start) {
1559
- paddedFromBeginning.push(
1560
- ...getZeroishInputPerSecondBetweenRange(
1561
- params.startTime,
1562
- parseDate(inputs[0].timestamp),
1563
- inputs[0]
1564
- )
1565
- );
1566
- }
1567
- &nbsp;
1568
- const paddedArray = paddedFromBeginning.concat(inputs);
1569
- &nbsp;
1570
- if (end) {
1571
- const lastInput = inputs[inputs.length - 1];
1572
- const lastInputEnd = parseDate(lastInput.timestamp).plus({
1573
- seconds: lastInput.duration,
1574
- });
1575
- paddedArray.push(
1576
- ...getZeroishInputPerSecondBetweenRange(
1577
- lastInputEnd,
1578
- params.endTime.plus({seconds: 1}),
1579
- lastInput
1580
- )
1581
- );
1582
- }
1583
- &nbsp;
1584
- return paddedArray;
1585
- };
1586
- &nbsp;
1587
- const getZeroishInputPerSecondBetweenRange = (
1588
- startDate: DateTimeMaybeValid,
1589
- endDate: DateTimeMaybeValid,
1590
- templateInput: PluginParams
1591
- ) =&gt; {
1592
- const array: PluginParams[] = [];
1593
- const dateRange = Interval.fromDateTimes(startDate, endDate);
1594
- &nbsp;
1595
- for (const interval of dateRange.splitBy({second: 1})) {
1596
- array.push(
1597
- fillWithZeroishInput(
1598
- templateInput,
1599
- // as far as I can tell, start will never be null
1600
- // because if we pass an invalid start/endDate to
1601
- // Interval, we get a zero length array as the range
1602
- interval.start || <span class="branch-1 cbranch-no" title="branch not covered" >DateTime.invalid('not expected - start is null')</span>
1603
- )
1604
- );
1605
- }
1606
- &nbsp;
1607
- return array;
1608
- };
1609
- &nbsp;
1610
- /*
1611
- * Checks if input's timestamp is included in global specified period then leaves it, otherwise.
1612
- */
1613
- const trimInputsByGlobalTimeline = (
1614
- inputs: PluginParams[],
1615
- params: TimeParams
1616
- ): PluginParams[] =&gt;
1617
- inputs.reduce((acc: PluginParams[], item) =&gt; {
1618
- const {timestamp} = item;
1619
- &nbsp;
1620
- if (
1621
- parseDate(timestamp) &gt;= params.startTime &amp;&amp;
1622
- parseDate(timestamp) &lt;= params.endTime
1623
- ) {
1624
- acc.push(item);
1625
- }
1626
- &nbsp;
1627
- return acc;
1628
- }, [] as PluginParams[]);
1629
- &nbsp;
1630
- return {metadata, execute};
1631
- };
1632
- &nbsp;</pre></td></tr></table></pre>
1633
-
1634
- <div class='push'></div><!-- for sticky footer -->
1635
- </div><!-- /wrapper -->
1636
- <div class='footer quiet pad2 space-top1 center small'>
1637
- Code coverage generated by
1638
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1639
- at 2024-08-27T09:00:43.746Z
1640
- </div>
1641
- <script src="../../../prettify.js"></script>
1642
- <script>
1643
- window.onload = function () {
1644
- prettyPrint();
1645
- };
1646
- </script>
1647
- <script src="../../../sorter.js"></script>
1648
- <script src="../../../block-navigation.js"></script>
1649
- </body>
1650
- </html>
1651
-