@sentry/warden 0.31.0 → 0.32.0

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 (171) hide show
  1. package/.oxlintrc.json +4 -3
  2. package/CHANGELOG.md +20 -0
  3. package/README.md +1 -1
  4. package/dist/output/renderer.js +3 -3
  5. package/dist/output/renderer.js.map +1 -1
  6. package/dist/sdk/analyze.js +1 -0
  7. package/dist/sdk/analyze.js.map +1 -1
  8. package/dist/sdk/prompt-sections.d.ts +2 -0
  9. package/dist/sdk/prompt-sections.d.ts.map +1 -1
  10. package/dist/sdk/prompt-sections.js +8 -2
  11. package/dist/sdk/prompt-sections.js.map +1 -1
  12. package/dist/sdk/prompt.d.ts.map +1 -1
  13. package/dist/sdk/prompt.js +8 -6
  14. package/dist/sdk/prompt.js.map +1 -1
  15. package/dist/sdk/verify.d.ts.map +1 -1
  16. package/dist/sdk/verify.js +5 -1
  17. package/dist/sdk/verify.js.map +1 -1
  18. package/package.json +16 -8
  19. package/src/builtin-skills/code-review/SKILL.md +1 -1
  20. package/src/builtin-skills/security-review/SKILL.md +1 -1
  21. package/test-results.junit.xml +2330 -2297
  22. package/.cursor/mcp.json +0 -7
  23. package/coverage/lcov-report/base.css +0 -224
  24. package/coverage/lcov-report/block-navigation.js +0 -87
  25. package/coverage/lcov-report/favicon.png +0 -0
  26. package/coverage/lcov-report/index.html +0 -446
  27. package/coverage/lcov-report/prettify.css +0 -1
  28. package/coverage/lcov-report/prettify.js +0 -2
  29. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  30. package/coverage/lcov-report/sorter.js +0 -210
  31. package/coverage/lcov-report/src/action/checks/index.html +0 -116
  32. package/coverage/lcov-report/src/action/checks/manager.ts.html +0 -499
  33. package/coverage/lcov-report/src/action/error-reporting.ts.html +0 -181
  34. package/coverage/lcov-report/src/action/fix-evaluation/github.ts.html +0 -508
  35. package/coverage/lcov-report/src/action/fix-evaluation/index.html +0 -161
  36. package/coverage/lcov-report/src/action/fix-evaluation/index.ts.html +0 -1243
  37. package/coverage/lcov-report/src/action/fix-evaluation/judge.ts.html +0 -817
  38. package/coverage/lcov-report/src/action/fix-evaluation/types.ts.html +0 -274
  39. package/coverage/lcov-report/src/action/index.html +0 -161
  40. package/coverage/lcov-report/src/action/inputs.ts.html +0 -529
  41. package/coverage/lcov-report/src/action/pi-ncc-compat.ts.html +0 -292
  42. package/coverage/lcov-report/src/action/review/coordination.ts.html +0 -208
  43. package/coverage/lcov-report/src/action/review/index.html +0 -131
  44. package/coverage/lcov-report/src/action/review/poster.ts.html +0 -1051
  45. package/coverage/lcov-report/src/action/review-state.ts.html +0 -280
  46. package/coverage/lcov-report/src/action/triggers/executor.ts.html +0 -856
  47. package/coverage/lcov-report/src/action/triggers/index.html +0 -116
  48. package/coverage/lcov-report/src/action/workflow/base.ts.html +0 -1135
  49. package/coverage/lcov-report/src/action/workflow/index.html +0 -146
  50. package/coverage/lcov-report/src/action/workflow/pr-workflow.ts.html +0 -2713
  51. package/coverage/lcov-report/src/action/workflow/schedule.ts.html +0 -1027
  52. package/coverage/lcov-report/src/cli/args.ts.html +0 -1657
  53. package/coverage/lcov-report/src/cli/commands/add.ts.html +0 -1567
  54. package/coverage/lcov-report/src/cli/commands/build.ts.html +0 -1618
  55. package/coverage/lcov-report/src/cli/commands/index.html +0 -191
  56. package/coverage/lcov-report/src/cli/commands/init.ts.html +0 -1357
  57. package/coverage/lcov-report/src/cli/commands/runs.ts.html +0 -2560
  58. package/coverage/lcov-report/src/cli/commands/setup-app/browser.ts.html +0 -214
  59. package/coverage/lcov-report/src/cli/commands/setup-app/credentials.ts.html +0 -220
  60. package/coverage/lcov-report/src/cli/commands/setup-app/index.html +0 -161
  61. package/coverage/lcov-report/src/cli/commands/setup-app/manifest.ts.html +0 -235
  62. package/coverage/lcov-report/src/cli/commands/setup-app/server.ts.html +0 -601
  63. package/coverage/lcov-report/src/cli/commands/setup-app.ts.html +0 -571
  64. package/coverage/lcov-report/src/cli/commands/sync.ts.html +0 -475
  65. package/coverage/lcov-report/src/cli/context.ts.html +0 -532
  66. package/coverage/lcov-report/src/cli/diff-apply.ts.html +0 -334
  67. package/coverage/lcov-report/src/cli/files.ts.html +0 -904
  68. package/coverage/lcov-report/src/cli/fix.ts.html +0 -1060
  69. package/coverage/lcov-report/src/cli/git.ts.html +0 -1201
  70. package/coverage/lcov-report/src/cli/help.ts.html +0 -1696
  71. package/coverage/lcov-report/src/cli/index.html +0 -281
  72. package/coverage/lcov-report/src/cli/input.ts.html +0 -397
  73. package/coverage/lcov-report/src/cli/log-cleanup.ts.html +0 -337
  74. package/coverage/lcov-report/src/cli/main.ts.html +0 -5107
  75. package/coverage/lcov-report/src/cli/output/box.ts.html +0 -790
  76. package/coverage/lcov-report/src/cli/output/formatters.ts.html +0 -1099
  77. package/coverage/lcov-report/src/cli/output/icons.ts.html +0 -142
  78. package/coverage/lcov-report/src/cli/output/index.html +0 -281
  79. package/coverage/lcov-report/src/cli/output/index.ts.html +0 -295
  80. package/coverage/lcov-report/src/cli/output/ink-runner.tsx.html +0 -1597
  81. package/coverage/lcov-report/src/cli/output/jsonl-schema-gen.ts.html +0 -355
  82. package/coverage/lcov-report/src/cli/output/jsonl.ts.html +0 -2137
  83. package/coverage/lcov-report/src/cli/output/live-status.tsx.html +0 -916
  84. package/coverage/lcov-report/src/cli/output/reporter.ts.html +0 -1630
  85. package/coverage/lcov-report/src/cli/output/tasks.ts.html +0 -3193
  86. package/coverage/lcov-report/src/cli/output/tty.ts.html +0 -310
  87. package/coverage/lcov-report/src/cli/output/verbosity.ts.html +0 -181
  88. package/coverage/lcov-report/src/cli/signals.ts.html +0 -199
  89. package/coverage/lcov-report/src/cli/terminal.ts.html +0 -1060
  90. package/coverage/lcov-report/src/config/index.html +0 -161
  91. package/coverage/lcov-report/src/config/index.ts.html +0 -94
  92. package/coverage/lcov-report/src/config/loader.ts.html +0 -1753
  93. package/coverage/lcov-report/src/config/schema.ts.html +0 -910
  94. package/coverage/lcov-report/src/config/writer.ts.html +0 -538
  95. package/coverage/lcov-report/src/diff/apply.ts.html +0 -241
  96. package/coverage/lcov-report/src/diff/classify.ts.html +0 -361
  97. package/coverage/lcov-report/src/diff/coalesce.ts.html +0 -1123
  98. package/coverage/lcov-report/src/diff/context.ts.html +0 -952
  99. package/coverage/lcov-report/src/diff/index.html +0 -191
  100. package/coverage/lcov-report/src/diff/index.ts.html +0 -100
  101. package/coverage/lcov-report/src/diff/parser.ts.html +0 -532
  102. package/coverage/lcov-report/src/evals/harness.ts.html +0 -700
  103. package/coverage/lcov-report/src/evals/index.html +0 -221
  104. package/coverage/lcov-report/src/evals/index.ts.html +0 -955
  105. package/coverage/lcov-report/src/evals/names.ts.html +0 -121
  106. package/coverage/lcov-report/src/evals/runner.ts.html +0 -664
  107. package/coverage/lcov-report/src/evals/scaffold.ts.html +0 -970
  108. package/coverage/lcov-report/src/evals/types.ts.html +0 -661
  109. package/coverage/lcov-report/src/evals/usage.ts.html +0 -178
  110. package/coverage/lcov-report/src/evals/verify.ts.html +0 -1054
  111. package/coverage/lcov-report/src/event/context.ts.html +0 -490
  112. package/coverage/lcov-report/src/event/index.html +0 -116
  113. package/coverage/lcov-report/src/index.html +0 -116
  114. package/coverage/lcov-report/src/output/dedup.ts.html +0 -2950
  115. package/coverage/lcov-report/src/output/github-checks.ts.html +0 -1579
  116. package/coverage/lcov-report/src/output/index.html +0 -161
  117. package/coverage/lcov-report/src/output/renderer.ts.html +0 -988
  118. package/coverage/lcov-report/src/output/stale.ts.html +0 -640
  119. package/coverage/lcov-report/src/sdk/analyze.ts.html +0 -3010
  120. package/coverage/lcov-report/src/sdk/auth.ts.html +0 -217
  121. package/coverage/lcov-report/src/sdk/circuit-breaker.ts.html +0 -304
  122. package/coverage/lcov-report/src/sdk/errors.ts.html +0 -658
  123. package/coverage/lcov-report/src/sdk/extract.ts.html +0 -1810
  124. package/coverage/lcov-report/src/sdk/fix-quality.ts.html +0 -841
  125. package/coverage/lcov-report/src/sdk/haiku.ts.html +0 -1456
  126. package/coverage/lcov-report/src/sdk/index.html +0 -416
  127. package/coverage/lcov-report/src/sdk/json-output.ts.html +0 -508
  128. package/coverage/lcov-report/src/sdk/model-pricing.json.html +0 -499
  129. package/coverage/lcov-report/src/sdk/otel.ts.html +0 -433
  130. package/coverage/lcov-report/src/sdk/post-process.ts.html +0 -412
  131. package/coverage/lcov-report/src/sdk/prepare.ts.html +0 -400
  132. package/coverage/lcov-report/src/sdk/pricing.ts.html +0 -778
  133. package/coverage/lcov-report/src/sdk/prompt-sections.ts.html +0 -595
  134. package/coverage/lcov-report/src/sdk/prompt.ts.html +0 -451
  135. package/coverage/lcov-report/src/sdk/report-files.ts.html +0 -166
  136. package/coverage/lcov-report/src/sdk/retry.ts.html +0 -202
  137. package/coverage/lcov-report/src/sdk/runner.ts.html +0 -400
  138. package/coverage/lcov-report/src/sdk/runtimes/claude.ts.html +0 -1693
  139. package/coverage/lcov-report/src/sdk/runtimes/index.html +0 -176
  140. package/coverage/lcov-report/src/sdk/runtimes/index.ts.html +0 -244
  141. package/coverage/lcov-report/src/sdk/runtimes/model-selectors.ts.html +0 -328
  142. package/coverage/lcov-report/src/sdk/runtimes/pi.ts.html +0 -2104
  143. package/coverage/lcov-report/src/sdk/runtimes/types.ts.html +0 -508
  144. package/coverage/lcov-report/src/sdk/types.ts.html +0 -730
  145. package/coverage/lcov-report/src/sdk/usage.ts.html +0 -502
  146. package/coverage/lcov-report/src/sdk/verify.ts.html +0 -1027
  147. package/coverage/lcov-report/src/sentry.ts.html +0 -994
  148. package/coverage/lcov-report/src/skill-builder/agentic.ts.html +0 -1063
  149. package/coverage/lcov-report/src/skill-builder/authoring-provider.ts.html +0 -334
  150. package/coverage/lcov-report/src/skill-builder/definition.ts.html +0 -748
  151. package/coverage/lcov-report/src/skill-builder/index.html +0 -236
  152. package/coverage/lcov-report/src/skill-builder/outline-contract.ts.html +0 -400
  153. package/coverage/lcov-report/src/skill-builder/outline-state.ts.html +0 -382
  154. package/coverage/lcov-report/src/skill-builder/outline.ts.html +0 -1402
  155. package/coverage/lcov-report/src/skill-builder/skill-contract.ts.html +0 -382
  156. package/coverage/lcov-report/src/skill-builder/skill-prompts.ts.html +0 -1180
  157. package/coverage/lcov-report/src/skill-builder/skill.ts.html +0 -2398
  158. package/coverage/lcov-report/src/skills/index.html +0 -131
  159. package/coverage/lcov-report/src/skills/loader.ts.html +0 -1693
  160. package/coverage/lcov-report/src/skills/remote.ts.html +0 -1909
  161. package/coverage/lcov-report/src/triggers/index.html +0 -116
  162. package/coverage/lcov-report/src/triggers/matcher.ts.html +0 -841
  163. package/coverage/lcov-report/src/types/index.html +0 -116
  164. package/coverage/lcov-report/src/types/index.ts.html +0 -1240
  165. package/coverage/lcov-report/src/utils/async.ts.html +0 -331
  166. package/coverage/lcov-report/src/utils/exec.ts.html +0 -496
  167. package/coverage/lcov-report/src/utils/index.html +0 -176
  168. package/coverage/lcov-report/src/utils/index.ts.html +0 -313
  169. package/coverage/lcov-report/src/utils/path.ts.html +0 -202
  170. package/coverage/lcov-report/src/utils/version.ts.html +0 -136
  171. package/coverage/lcov.info +0 -19134
@@ -1,3193 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for src/cli/output/tasks.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">src/cli/output</a> tasks.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">75.14% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>257/342</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">63.81% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>194/304</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">73.91% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>51/69</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">75.57% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>229/303</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 type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line medium'></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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</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-neutral">&nbsp;</span>
1109
- <span class="cline-any cline-neutral">&nbsp;</span>
1110
- <span class="cline-any cline-neutral">&nbsp;</span>
1111
- <span class="cline-any cline-neutral">&nbsp;</span>
1112
- <span class="cline-any cline-neutral">&nbsp;</span>
1113
- <span class="cline-any cline-neutral">&nbsp;</span>
1114
- <span class="cline-any cline-neutral">&nbsp;</span>
1115
- <span class="cline-any cline-neutral">&nbsp;</span>
1116
- <span class="cline-any cline-neutral">&nbsp;</span>
1117
- <span class="cline-any cline-neutral">&nbsp;</span>
1118
- <span class="cline-any cline-neutral">&nbsp;</span>
1119
- <span class="cline-any cline-neutral">&nbsp;</span>
1120
- <span class="cline-any cline-neutral">&nbsp;</span>
1121
- <span class="cline-any cline-neutral">&nbsp;</span>
1122
- <span class="cline-any cline-neutral">&nbsp;</span>
1123
- <span class="cline-any cline-neutral">&nbsp;</span>
1124
- <span class="cline-any cline-neutral">&nbsp;</span>
1125
- <span class="cline-any cline-neutral">&nbsp;</span>
1126
- <span class="cline-any cline-neutral">&nbsp;</span>
1127
- <span class="cline-any cline-neutral">&nbsp;</span>
1128
- <span class="cline-any cline-neutral">&nbsp;</span>
1129
- <span class="cline-any cline-neutral">&nbsp;</span>
1130
- <span class="cline-any cline-neutral">&nbsp;</span>
1131
- <span class="cline-any cline-neutral">&nbsp;</span>
1132
- <span class="cline-any cline-neutral">&nbsp;</span>
1133
- <span class="cline-any cline-neutral">&nbsp;</span>
1134
- <span class="cline-any cline-neutral">&nbsp;</span>
1135
- <span class="cline-any cline-neutral">&nbsp;</span>
1136
- <span class="cline-any cline-neutral">&nbsp;</span>
1137
- <span class="cline-any cline-neutral">&nbsp;</span>
1138
- <span class="cline-any cline-neutral">&nbsp;</span>
1139
- <span class="cline-any cline-neutral">&nbsp;</span>
1140
- <span class="cline-any cline-neutral">&nbsp;</span>
1141
- <span class="cline-any cline-neutral">&nbsp;</span>
1142
- <span class="cline-any cline-neutral">&nbsp;</span>
1143
- <span class="cline-any cline-neutral">&nbsp;</span>
1144
- <span class="cline-any cline-neutral">&nbsp;</span>
1145
- <span class="cline-any cline-neutral">&nbsp;</span>
1146
- <span class="cline-any cline-neutral">&nbsp;</span>
1147
- <span class="cline-any cline-neutral">&nbsp;</span>
1148
- <span class="cline-any cline-neutral">&nbsp;</span>
1149
- <span class="cline-any cline-neutral">&nbsp;</span>
1150
- <span class="cline-any cline-neutral">&nbsp;</span>
1151
- <span class="cline-any cline-neutral">&nbsp;</span>
1152
- <span class="cline-any cline-neutral">&nbsp;</span>
1153
- <span class="cline-any cline-neutral">&nbsp;</span>
1154
- <span class="cline-any cline-neutral">&nbsp;</span>
1155
- <span class="cline-any cline-neutral">&nbsp;</span>
1156
- <span class="cline-any cline-yes">11x</span>
1157
- <span class="cline-any cline-yes">10x</span>
1158
- <span class="cline-any cline-neutral">&nbsp;</span>
1159
- <span class="cline-any cline-yes">7x</span>
1160
- <span class="cline-any cline-neutral">&nbsp;</span>
1161
- <span class="cline-any cline-neutral">&nbsp;</span>
1162
- <span class="cline-any cline-neutral">&nbsp;</span>
1163
- <span class="cline-any cline-neutral">&nbsp;</span>
1164
- <span class="cline-any cline-yes">1x</span>
1165
- <span class="cline-any cline-neutral">&nbsp;</span>
1166
- <span class="cline-any cline-neutral">&nbsp;</span>
1167
- <span class="cline-any cline-neutral">&nbsp;</span>
1168
- <span class="cline-any cline-neutral">&nbsp;</span>
1169
- <span class="cline-any cline-neutral">&nbsp;</span>
1170
- <span class="cline-any cline-neutral">&nbsp;</span>
1171
- <span class="cline-any cline-neutral">&nbsp;</span>
1172
- <span class="cline-any cline-neutral">&nbsp;</span>
1173
- <span class="cline-any cline-yes">5x</span>
1174
- <span class="cline-any cline-yes">5x</span>
1175
- <span class="cline-any cline-no">&nbsp;</span>
1176
- <span class="cline-any cline-neutral">&nbsp;</span>
1177
- <span class="cline-any cline-yes">5x</span>
1178
- <span class="cline-any cline-yes">2x</span>
1179
- <span class="cline-any cline-neutral">&nbsp;</span>
1180
- <span class="cline-any cline-neutral">&nbsp;</span>
1181
- <span class="cline-any cline-neutral">&nbsp;</span>
1182
- <span class="cline-any cline-neutral">&nbsp;</span>
1183
- <span class="cline-any cline-yes">3x</span>
1184
- <span class="cline-any cline-yes">1x</span>
1185
- <span class="cline-any cline-neutral">&nbsp;</span>
1186
- <span class="cline-any cline-neutral">&nbsp;</span>
1187
- <span class="cline-any cline-neutral">&nbsp;</span>
1188
- <span class="cline-any cline-neutral">&nbsp;</span>
1189
- <span class="cline-any cline-yes">2x</span>
1190
- <span class="cline-any cline-yes">1x</span>
1191
- <span class="cline-any cline-neutral">&nbsp;</span>
1192
- <span class="cline-any cline-neutral">&nbsp;</span>
1193
- <span class="cline-any cline-neutral">&nbsp;</span>
1194
- <span class="cline-any cline-neutral">&nbsp;</span>
1195
- <span class="cline-any cline-yes">1x</span>
1196
- <span class="cline-any cline-neutral">&nbsp;</span>
1197
- <span class="cline-any cline-neutral">&nbsp;</span>
1198
- <span class="cline-any cline-neutral">&nbsp;</span>
1199
- <span class="cline-any cline-neutral">&nbsp;</span>
1200
- <span class="cline-any cline-neutral">&nbsp;</span>
1201
- <span class="cline-any cline-neutral">&nbsp;</span>
1202
- <span class="cline-any cline-neutral">&nbsp;</span>
1203
- <span class="cline-any cline-neutral">&nbsp;</span>
1204
- <span class="cline-any cline-neutral">&nbsp;</span>
1205
- <span class="cline-any cline-neutral">&nbsp;</span>
1206
- <span class="cline-any cline-neutral">&nbsp;</span>
1207
- <span class="cline-any cline-neutral">&nbsp;</span>
1208
- <span class="cline-any cline-neutral">&nbsp;</span>
1209
- <span class="cline-any cline-neutral">&nbsp;</span>
1210
- <span class="cline-any cline-neutral">&nbsp;</span>
1211
- <span class="cline-any cline-yes">33x</span>
1212
- <span class="cline-any cline-neutral">&nbsp;</span>
1213
- <span class="cline-any cline-neutral">&nbsp;</span>
1214
- <span class="cline-any cline-neutral">&nbsp;</span>
1215
- <span class="cline-any cline-neutral">&nbsp;</span>
1216
- <span class="cline-any cline-neutral">&nbsp;</span>
1217
- <span class="cline-any cline-neutral">&nbsp;</span>
1218
- <span class="cline-any cline-neutral">&nbsp;</span>
1219
- <span class="cline-any cline-yes">1x</span>
1220
- <span class="cline-any cline-no">&nbsp;</span>
1221
- <span class="cline-any cline-neutral">&nbsp;</span>
1222
- <span class="cline-any cline-yes">1x</span>
1223
- <span class="cline-any cline-neutral">&nbsp;</span>
1224
- <span class="cline-any cline-neutral">&nbsp;</span>
1225
- <span class="cline-any cline-neutral">&nbsp;</span>
1226
- <span class="cline-any cline-neutral">&nbsp;</span>
1227
- <span class="cline-any cline-neutral">&nbsp;</span>
1228
- <span class="cline-any cline-neutral">&nbsp;</span>
1229
- <span class="cline-any cline-neutral">&nbsp;</span>
1230
- <span class="cline-any cline-yes">5x</span>
1231
- <span class="cline-any cline-yes">5x</span>
1232
- <span class="cline-any cline-neutral">&nbsp;</span>
1233
- <span class="cline-any cline-neutral">&nbsp;</span>
1234
- <span class="cline-any cline-neutral">&nbsp;</span>
1235
- <span class="cline-any cline-yes">1x</span>
1236
- <span class="cline-any cline-neutral">&nbsp;</span>
1237
- <span class="cline-any cline-neutral">&nbsp;</span>
1238
- <span class="cline-any cline-neutral">&nbsp;</span>
1239
- <span class="cline-any cline-yes">1x</span>
1240
- <span class="cline-any cline-yes">1x</span>
1241
- <span class="cline-any cline-yes">1x</span>
1242
- <span class="cline-any cline-neutral">&nbsp;</span>
1243
- <span class="cline-any cline-neutral">&nbsp;</span>
1244
- <span class="cline-any cline-neutral">&nbsp;</span>
1245
- <span class="cline-any cline-neutral">&nbsp;</span>
1246
- <span class="cline-any cline-neutral">&nbsp;</span>
1247
- <span class="cline-any cline-neutral">&nbsp;</span>
1248
- <span class="cline-any cline-neutral">&nbsp;</span>
1249
- <span class="cline-any cline-neutral">&nbsp;</span>
1250
- <span class="cline-any cline-neutral">&nbsp;</span>
1251
- <span class="cline-any cline-neutral">&nbsp;</span>
1252
- <span class="cline-any cline-neutral">&nbsp;</span>
1253
- <span class="cline-any cline-neutral">&nbsp;</span>
1254
- <span class="cline-any cline-neutral">&nbsp;</span>
1255
- <span class="cline-any cline-neutral">&nbsp;</span>
1256
- <span class="cline-any cline-neutral">&nbsp;</span>
1257
- <span class="cline-any cline-neutral">&nbsp;</span>
1258
- <span class="cline-any cline-neutral">&nbsp;</span>
1259
- <span class="cline-any cline-neutral">&nbsp;</span>
1260
- <span class="cline-any cline-neutral">&nbsp;</span>
1261
- <span class="cline-any cline-neutral">&nbsp;</span>
1262
- <span class="cline-any cline-neutral">&nbsp;</span>
1263
- <span class="cline-any cline-neutral">&nbsp;</span>
1264
- <span class="cline-any cline-neutral">&nbsp;</span>
1265
- <span class="cline-any cline-neutral">&nbsp;</span>
1266
- <span class="cline-any cline-neutral">&nbsp;</span>
1267
- <span class="cline-any cline-neutral">&nbsp;</span>
1268
- <span class="cline-any cline-neutral">&nbsp;</span>
1269
- <span class="cline-any cline-neutral">&nbsp;</span>
1270
- <span class="cline-any cline-neutral">&nbsp;</span>
1271
- <span class="cline-any cline-neutral">&nbsp;</span>
1272
- <span class="cline-any cline-neutral">&nbsp;</span>
1273
- <span class="cline-any cline-neutral">&nbsp;</span>
1274
- <span class="cline-any cline-neutral">&nbsp;</span>
1275
- <span class="cline-any cline-neutral">&nbsp;</span>
1276
- <span class="cline-any cline-neutral">&nbsp;</span>
1277
- <span class="cline-any cline-neutral">&nbsp;</span>
1278
- <span class="cline-any cline-neutral">&nbsp;</span>
1279
- <span class="cline-any cline-neutral">&nbsp;</span>
1280
- <span class="cline-any cline-neutral">&nbsp;</span>
1281
- <span class="cline-any cline-neutral">&nbsp;</span>
1282
- <span class="cline-any cline-neutral">&nbsp;</span>
1283
- <span class="cline-any cline-neutral">&nbsp;</span>
1284
- <span class="cline-any cline-neutral">&nbsp;</span>
1285
- <span class="cline-any cline-neutral">&nbsp;</span>
1286
- <span class="cline-any cline-neutral">&nbsp;</span>
1287
- <span class="cline-any cline-neutral">&nbsp;</span>
1288
- <span class="cline-any cline-neutral">&nbsp;</span>
1289
- <span class="cline-any cline-neutral">&nbsp;</span>
1290
- <span class="cline-any cline-neutral">&nbsp;</span>
1291
- <span class="cline-any cline-neutral">&nbsp;</span>
1292
- <span class="cline-any cline-neutral">&nbsp;</span>
1293
- <span class="cline-any cline-neutral">&nbsp;</span>
1294
- <span class="cline-any cline-neutral">&nbsp;</span>
1295
- <span class="cline-any cline-neutral">&nbsp;</span>
1296
- <span class="cline-any cline-neutral">&nbsp;</span>
1297
- <span class="cline-any cline-neutral">&nbsp;</span>
1298
- <span class="cline-any cline-neutral">&nbsp;</span>
1299
- <span class="cline-any cline-neutral">&nbsp;</span>
1300
- <span class="cline-any cline-neutral">&nbsp;</span>
1301
- <span class="cline-any cline-neutral">&nbsp;</span>
1302
- <span class="cline-any cline-neutral">&nbsp;</span>
1303
- <span class="cline-any cline-neutral">&nbsp;</span>
1304
- <span class="cline-any cline-neutral">&nbsp;</span>
1305
- <span class="cline-any cline-neutral">&nbsp;</span>
1306
- <span class="cline-any cline-neutral">&nbsp;</span>
1307
- <span class="cline-any cline-neutral">&nbsp;</span>
1308
- <span class="cline-any cline-neutral">&nbsp;</span>
1309
- <span class="cline-any cline-neutral">&nbsp;</span>
1310
- <span class="cline-any cline-neutral">&nbsp;</span>
1311
- <span class="cline-any cline-neutral">&nbsp;</span>
1312
- <span class="cline-any cline-neutral">&nbsp;</span>
1313
- <span class="cline-any cline-neutral">&nbsp;</span>
1314
- <span class="cline-any cline-neutral">&nbsp;</span>
1315
- <span class="cline-any cline-neutral">&nbsp;</span>
1316
- <span class="cline-any cline-neutral">&nbsp;</span>
1317
- <span class="cline-any cline-neutral">&nbsp;</span>
1318
- <span class="cline-any cline-neutral">&nbsp;</span>
1319
- <span class="cline-any cline-neutral">&nbsp;</span>
1320
- <span class="cline-any cline-neutral">&nbsp;</span>
1321
- <span class="cline-any cline-neutral">&nbsp;</span>
1322
- <span class="cline-any cline-neutral">&nbsp;</span>
1323
- <span class="cline-any cline-neutral">&nbsp;</span>
1324
- <span class="cline-any cline-neutral">&nbsp;</span>
1325
- <span class="cline-any cline-neutral">&nbsp;</span>
1326
- <span class="cline-any cline-neutral">&nbsp;</span>
1327
- <span class="cline-any cline-neutral">&nbsp;</span>
1328
- <span class="cline-any cline-neutral">&nbsp;</span>
1329
- <span class="cline-any cline-neutral">&nbsp;</span>
1330
- <span class="cline-any cline-neutral">&nbsp;</span>
1331
- <span class="cline-any cline-neutral">&nbsp;</span>
1332
- <span class="cline-any cline-neutral">&nbsp;</span>
1333
- <span class="cline-any cline-neutral">&nbsp;</span>
1334
- <span class="cline-any cline-neutral">&nbsp;</span>
1335
- <span class="cline-any cline-neutral">&nbsp;</span>
1336
- <span class="cline-any cline-neutral">&nbsp;</span>
1337
- <span class="cline-any cline-neutral">&nbsp;</span>
1338
- <span class="cline-any cline-neutral">&nbsp;</span>
1339
- <span class="cline-any cline-neutral">&nbsp;</span>
1340
- <span class="cline-any cline-neutral">&nbsp;</span>
1341
- <span class="cline-any cline-neutral">&nbsp;</span>
1342
- <span class="cline-any cline-neutral">&nbsp;</span>
1343
- <span class="cline-any cline-neutral">&nbsp;</span>
1344
- <span class="cline-any cline-neutral">&nbsp;</span>
1345
- <span class="cline-any cline-neutral">&nbsp;</span>
1346
- <span class="cline-any cline-neutral">&nbsp;</span>
1347
- <span class="cline-any cline-neutral">&nbsp;</span>
1348
- <span class="cline-any cline-neutral">&nbsp;</span>
1349
- <span class="cline-any cline-neutral">&nbsp;</span>
1350
- <span class="cline-any cline-neutral">&nbsp;</span>
1351
- <span class="cline-any cline-neutral">&nbsp;</span>
1352
- <span class="cline-any cline-neutral">&nbsp;</span>
1353
- <span class="cline-any cline-neutral">&nbsp;</span>
1354
- <span class="cline-any cline-yes">14x</span>
1355
- <span class="cline-any cline-neutral">&nbsp;</span>
1356
- <span class="cline-any cline-yes">14x</span>
1357
- <span class="cline-any cline-neutral">&nbsp;</span>
1358
- <span class="cline-any cline-neutral">&nbsp;</span>
1359
- <span class="cline-any cline-yes">14x</span>
1360
- <span class="cline-any cline-yes">14x</span>
1361
- <span class="cline-any cline-no">&nbsp;</span>
1362
- <span class="cline-any cline-neutral">&nbsp;</span>
1363
- <span class="cline-any cline-yes">14x</span>
1364
- <span class="cline-any cline-yes">14x</span>
1365
- <span class="cline-any cline-yes">14x</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-neutral">&nbsp;</span>
1369
- <span class="cline-any cline-yes">14x</span>
1370
- <span class="cline-any cline-yes">14x</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-yes">14x</span>
1377
- <span class="cline-any cline-neutral">&nbsp;</span>
1378
- <span class="cline-any cline-yes">14x</span>
1379
- <span class="cline-any cline-yes">14x</span>
1380
- <span class="cline-any cline-yes">11x</span>
1381
- <span class="cline-any cline-yes">11x</span>
1382
- <span class="cline-any cline-neutral">&nbsp;</span>
1383
- <span class="cline-any cline-yes">3x</span>
1384
- <span class="cline-any cline-yes">2x</span>
1385
- <span class="cline-any cline-yes">3x</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-yes">11x</span>
1390
- <span class="cline-any cline-neutral">&nbsp;</span>
1391
- <span class="cline-any cline-neutral">&nbsp;</span>
1392
- <span class="cline-any cline-neutral">&nbsp;</span>
1393
- <span class="cline-any cline-yes">11x</span>
1394
- <span class="cline-any cline-neutral">&nbsp;</span>
1395
- <span class="cline-any cline-yes">1x</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-yes">1x</span>
1406
- <span class="cline-any cline-yes">1x</span>
1407
- <span class="cline-any cline-neutral">&nbsp;</span>
1408
- <span class="cline-any cline-yes">1x</span>
1409
- <span class="cline-any cline-yes">1x</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-yes">10x</span>
1419
- <span class="cline-any cline-neutral">&nbsp;</span>
1420
- <span class="cline-any cline-neutral">&nbsp;</span>
1421
- <span class="cline-any cline-neutral">&nbsp;</span>
1422
- <span class="cline-any cline-neutral">&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-yes">10x</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-yes">10x</span>
1440
- <span class="cline-any cline-yes">14x</span>
1441
- <span class="cline-any cline-neutral">&nbsp;</span>
1442
- <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
1449
- <span class="cline-any cline-neutral">&nbsp;</span>
1450
- <span class="cline-any cline-yes">14x</span>
1451
- <span class="cline-any cline-yes">10x</span>
1452
- <span class="cline-any cline-yes">10x</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-yes">10x</span>
1456
- <span class="cline-any cline-yes">10x</span>
1457
- <span class="cline-any cline-yes">10x</span>
1458
- <span class="cline-any cline-neutral">&nbsp;</span>
1459
- <span class="cline-any cline-yes">10x</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-no">&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-no">&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-no">&nbsp;</span>
1471
- <span class="cline-any cline-no">&nbsp;</span>
1472
- <span class="cline-any cline-no">&nbsp;</span>
1473
- <span class="cline-any cline-no">&nbsp;</span>
1474
- <span class="cline-any cline-no">&nbsp;</span>
1475
- <span class="cline-any cline-no">&nbsp;</span>
1476
- <span class="cline-any cline-no">&nbsp;</span>
1477
- <span class="cline-any cline-no">&nbsp;</span>
1478
- <span class="cline-any cline-no">&nbsp;</span>
1479
- <span class="cline-any cline-neutral">&nbsp;</span>
1480
- <span class="cline-any cline-no">&nbsp;</span>
1481
- <span class="cline-any cline-no">&nbsp;</span>
1482
- <span class="cline-any cline-neutral">&nbsp;</span>
1483
- <span class="cline-any cline-no">&nbsp;</span>
1484
- <span class="cline-any cline-no">&nbsp;</span>
1485
- <span class="cline-any cline-neutral">&nbsp;</span>
1486
- <span class="cline-any cline-no">&nbsp;</span>
1487
- <span class="cline-any cline-no">&nbsp;</span>
1488
- <span class="cline-any cline-neutral">&nbsp;</span>
1489
- <span class="cline-any cline-no">&nbsp;</span>
1490
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1496
- <span class="cline-any cline-neutral">&nbsp;</span>
1497
- <span class="cline-any cline-neutral">&nbsp;</span>
1498
- <span class="cline-any cline-neutral">&nbsp;</span>
1499
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1504
- <span class="cline-any cline-neutral">&nbsp;</span>
1505
- <span class="cline-any cline-no">&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-no">&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-neutral">&nbsp;</span>
1514
- <span class="cline-any cline-neutral">&nbsp;</span>
1515
- <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
1519
- <span class="cline-any cline-neutral">&nbsp;</span>
1520
- <span class="cline-any cline-no">&nbsp;</span>
1521
- <span class="cline-any cline-neutral">&nbsp;</span>
1522
- <span class="cline-any cline-neutral">&nbsp;</span>
1523
- <span class="cline-any cline-neutral">&nbsp;</span>
1524
- <span class="cline-any cline-neutral">&nbsp;</span>
1525
- <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
1529
- <span class="cline-any cline-neutral">&nbsp;</span>
1530
- <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
1535
- <span class="cline-any cline-yes">10x</span>
1536
- <span class="cline-any cline-neutral">&nbsp;</span>
1537
- <span class="cline-any cline-neutral">&nbsp;</span>
1538
- <span class="cline-any cline-neutral">&nbsp;</span>
1539
- <span class="cline-any cline-neutral">&nbsp;</span>
1540
- <span class="cline-any cline-neutral">&nbsp;</span>
1541
- <span class="cline-any cline-neutral">&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-yes">10x</span>
1546
- <span class="cline-any cline-yes">10x</span>
1547
- <span class="cline-any cline-yes">10x</span>
1548
- <span class="cline-any cline-yes">10x</span>
1549
- <span class="cline-any cline-neutral">&nbsp;</span>
1550
- <span class="cline-any cline-yes">10x</span>
1551
- <span class="cline-any cline-yes">10x</span>
1552
- <span class="cline-any cline-neutral">&nbsp;</span>
1553
- <span class="cline-any cline-neutral">&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-yes">10x</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-yes">14x</span>
1571
- <span class="cline-any cline-no">&nbsp;</span>
1572
- <span class="cline-any cline-no">&nbsp;</span>
1573
- <span class="cline-any cline-no">&nbsp;</span>
1574
- <span class="cline-any cline-no">&nbsp;</span>
1575
- <span class="cline-any cline-no">&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-yes">14x</span>
1580
- <span class="cline-any cline-yes">20x</span>
1581
- <span class="cline-any cline-neutral">&nbsp;</span>
1582
- <span class="cline-any cline-neutral">&nbsp;</span>
1583
- <span class="cline-any cline-yes">14x</span>
1584
- <span class="cline-any cline-yes">14x</span>
1585
- <span class="cline-any cline-neutral">&nbsp;</span>
1586
- <span class="cline-any cline-yes">10x</span>
1587
- <span class="cline-any cline-yes">10x</span>
1588
- <span class="cline-any cline-neutral">&nbsp;</span>
1589
- <span class="cline-any cline-neutral">&nbsp;</span>
1590
- <span class="cline-any cline-yes">10x</span>
1591
- <span class="cline-any cline-neutral">&nbsp;</span>
1592
- <span class="cline-any cline-yes">10x</span>
1593
- <span class="cline-any cline-no">&nbsp;</span>
1594
- <span class="cline-any cline-neutral">&nbsp;</span>
1595
- <span class="cline-any cline-yes">10x</span>
1596
- <span class="cline-any cline-neutral">&nbsp;</span>
1597
- <span class="cline-any cline-yes">10x</span>
1598
- <span class="cline-any cline-neutral">&nbsp;</span>
1599
- <span class="cline-any cline-neutral">&nbsp;</span>
1600
- <span class="cline-any cline-neutral">&nbsp;</span>
1601
- <span class="cline-any cline-neutral">&nbsp;</span>
1602
- <span class="cline-any cline-neutral">&nbsp;</span>
1603
- <span class="cline-any cline-neutral">&nbsp;</span>
1604
- <span class="cline-any cline-yes">10x</span>
1605
- <span class="cline-any cline-yes">10x</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-yes">10x</span>
1612
- <span class="cline-any cline-yes">10x</span>
1613
- <span class="cline-any cline-yes">10x</span>
1614
- <span class="cline-any cline-yes">10x</span>
1615
- <span class="cline-any cline-yes">10x</span>
1616
- <span class="cline-any cline-yes">10x</span>
1617
- <span class="cline-any cline-yes">10x</span>
1618
- <span class="cline-any cline-yes">10x</span>
1619
- <span class="cline-any cline-neutral">&nbsp;</span>
1620
- <span class="cline-any cline-neutral">&nbsp;</span>
1621
- <span class="cline-any cline-neutral">&nbsp;</span>
1622
- <span class="cline-any cline-neutral">&nbsp;</span>
1623
- <span class="cline-any cline-neutral">&nbsp;</span>
1624
- <span class="cline-any cline-yes">10x</span>
1625
- <span class="cline-any cline-neutral">&nbsp;</span>
1626
- <span class="cline-any cline-yes">10x</span>
1627
- <span class="cline-any cline-yes">14x</span>
1628
- <span class="cline-any cline-neutral">&nbsp;</span>
1629
- <span class="cline-any cline-neutral">&nbsp;</span>
1630
- <span class="cline-any cline-neutral">&nbsp;</span>
1631
- <span class="cline-any cline-neutral">&nbsp;</span>
1632
- <span class="cline-any cline-neutral">&nbsp;</span>
1633
- <span class="cline-any cline-neutral">&nbsp;</span>
1634
- <span class="cline-any cline-neutral">&nbsp;</span>
1635
- <span class="cline-any cline-neutral">&nbsp;</span>
1636
- <span class="cline-any cline-neutral">&nbsp;</span>
1637
- <span class="cline-any cline-neutral">&nbsp;</span>
1638
- <span class="cline-any cline-neutral">&nbsp;</span>
1639
- <span class="cline-any cline-yes">5x</span>
1640
- <span class="cline-any cline-yes">5x</span>
1641
- <span class="cline-any cline-neutral">&nbsp;</span>
1642
- <span class="cline-any cline-neutral">&nbsp;</span>
1643
- <span class="cline-any cline-neutral">&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-yes">5x</span>
1647
- <span class="cline-any cline-neutral">&nbsp;</span>
1648
- <span class="cline-any cline-neutral">&nbsp;</span>
1649
- <span class="cline-any cline-neutral">&nbsp;</span>
1650
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1654
- <span class="cline-any cline-neutral">&nbsp;</span>
1655
- <span class="cline-any cline-neutral">&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-yes">5x</span>
1660
- <span class="cline-any cline-yes">5x</span>
1661
- <span class="cline-any cline-neutral">&nbsp;</span>
1662
- <span class="cline-any cline-neutral">&nbsp;</span>
1663
- <span class="cline-any cline-neutral">&nbsp;</span>
1664
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1668
- <span class="cline-any cline-neutral">&nbsp;</span>
1669
- <span class="cline-any cline-neutral">&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-yes">5x</span>
1676
- <span class="cline-any cline-yes">5x</span>
1677
- <span class="cline-any cline-yes">5x</span>
1678
- <span class="cline-any cline-yes">5x</span>
1679
- <span class="cline-any cline-yes">5x</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-yes">5x</span>
1685
- <span class="cline-any cline-neutral">&nbsp;</span>
1686
- <span class="cline-any cline-neutral">&nbsp;</span>
1687
- <span class="cline-any cline-neutral">&nbsp;</span>
1688
- <span class="cline-any cline-neutral">&nbsp;</span>
1689
- <span class="cline-any cline-neutral">&nbsp;</span>
1690
- <span class="cline-any cline-neutral">&nbsp;</span>
1691
- <span class="cline-any cline-yes">5x</span>
1692
- <span class="cline-any cline-neutral">&nbsp;</span>
1693
- <span class="cline-any cline-neutral">&nbsp;</span>
1694
- <span class="cline-any cline-yes">5x</span>
1695
- <span class="cline-any cline-yes">5x</span>
1696
- <span class="cline-any cline-neutral">&nbsp;</span>
1697
- <span class="cline-any cline-neutral">&nbsp;</span>
1698
- <span class="cline-any cline-yes">5x</span>
1699
- <span class="cline-any cline-neutral">&nbsp;</span>
1700
- <span class="cline-any cline-neutral">&nbsp;</span>
1701
- <span class="cline-any cline-neutral">&nbsp;</span>
1702
- <span class="cline-any cline-neutral">&nbsp;</span>
1703
- <span class="cline-any cline-neutral">&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-no">&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-yes">5x</span>
1716
- <span class="cline-any cline-yes">5x</span>
1717
- <span class="cline-any cline-neutral">&nbsp;</span>
1718
- <span class="cline-any cline-yes">5x</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-neutral">&nbsp;</span>
1728
- <span class="cline-any cline-yes">5x</span>
1729
- <span class="cline-any cline-yes">5x</span>
1730
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1734
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1738
- <span class="cline-any cline-yes">14x</span>
1739
- <span class="cline-any cline-no">&nbsp;</span>
1740
- <span class="cline-any cline-neutral">&nbsp;</span>
1741
- <span class="cline-any cline-yes">5x</span>
1742
- <span class="cline-any cline-yes">1x</span>
1743
- <span class="cline-any cline-neutral">&nbsp;</span>
1744
- <span class="cline-any cline-yes">5x</span>
1745
- <span class="cline-any cline-no">&nbsp;</span>
1746
- <span class="cline-any cline-neutral">&nbsp;</span>
1747
- <span class="cline-any cline-yes">5x</span>
1748
- <span class="cline-any cline-yes">1x</span>
1749
- <span class="cline-any cline-neutral">&nbsp;</span>
1750
- <span class="cline-any cline-yes">5x</span>
1751
- <span class="cline-any cline-yes">5x</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-yes">5x</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-yes">5x</span>
1758
- <span class="cline-any cline-yes">5x</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-neutral">&nbsp;</span>
1762
- <span class="cline-any cline-neutral">&nbsp;</span>
1763
- <span class="cline-any cline-neutral">&nbsp;</span>
1764
- <span class="cline-any cline-yes">5x</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-yes">5x</span>
1772
- <span class="cline-any cline-neutral">&nbsp;</span>
1773
- <span class="cline-any cline-yes">5x</span>
1774
- <span class="cline-any cline-neutral">&nbsp;</span>
1775
- <span class="cline-any cline-yes">3x</span>
1776
- <span class="cline-any cline-yes">3x</span>
1777
- <span class="cline-any cline-neutral">&nbsp;</span>
1778
- <span class="cline-any cline-neutral">&nbsp;</span>
1779
- <span class="cline-any cline-neutral">&nbsp;</span>
1780
- <span class="cline-any cline-yes">3x</span>
1781
- <span class="cline-any cline-yes">3x</span>
1782
- <span class="cline-any cline-neutral">&nbsp;</span>
1783
- <span class="cline-any cline-neutral">&nbsp;</span>
1784
- <span class="cline-any cline-neutral">&nbsp;</span>
1785
- <span class="cline-any cline-neutral">&nbsp;</span>
1786
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1790
- <span class="cline-any cline-yes">3x</span>
1791
- <span class="cline-any cline-neutral">&nbsp;</span>
1792
- <span class="cline-any cline-neutral">&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-yes">3x</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-neutral">&nbsp;</span>
1799
- <span class="cline-any cline-neutral">&nbsp;</span>
1800
- <span class="cline-any cline-yes">3x</span>
1801
- <span class="cline-any cline-yes">3x</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-neutral">&nbsp;</span>
1808
- <span class="cline-any cline-neutral">&nbsp;</span>
1809
- <span class="cline-any cline-neutral">&nbsp;</span>
1810
- <span class="cline-any cline-neutral">&nbsp;</span>
1811
- <span class="cline-any cline-neutral">&nbsp;</span>
1812
- <span class="cline-any cline-neutral">&nbsp;</span>
1813
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1819
- <span class="cline-any cline-yes">18x</span>
1820
- <span class="cline-any cline-neutral">&nbsp;</span>
1821
- <span class="cline-any cline-neutral">&nbsp;</span>
1822
- <span class="cline-any cline-neutral">&nbsp;</span>
1823
- <span class="cline-any cline-yes">94x</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-neutral">&nbsp;</span>
1827
- <span class="cline-any cline-yes">94x</span>
1828
- <span class="cline-any cline-neutral">&nbsp;</span>
1829
- <span class="cline-any cline-yes">94x</span>
1830
- <span class="cline-any cline-neutral">&nbsp;</span>
1831
- <span class="cline-any cline-yes">6x</span>
1832
- <span class="cline-any cline-yes">3x</span>
1833
- <span class="cline-any cline-yes">2x</span>
1834
- <span class="cline-any cline-yes">2x</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-neutral">&nbsp;</span>
1839
- <span class="cline-any cline-yes">17x</span>
1840
- <span class="cline-any cline-yes">8x</span>
1841
- <span class="cline-any cline-yes">8x</span>
1842
- <span class="cline-any cline-neutral">&nbsp;</span>
1843
- <span class="cline-any cline-yes">9x</span>
1844
- <span class="cline-any cline-yes">3x</span>
1845
- <span class="cline-any cline-yes">2x</span>
1846
- <span class="cline-any cline-yes">17x</span>
1847
- <span class="cline-any cline-yes">17x</span>
1848
- <span class="cline-any cline-yes">17x</span>
1849
- <span class="cline-any cline-yes">17x</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-yes">4x</span>
1853
- <span class="cline-any cline-yes">2x</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-yes">12x</span>
1857
- <span class="cline-any cline-yes">9x</span>
1858
- <span class="cline-any cline-yes">8x</span>
1859
- <span class="cline-any cline-neutral">&nbsp;</span>
1860
- <span class="cline-any cline-neutral">&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-yes">8x</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-no">&nbsp;</span>
1867
- <span class="cline-any cline-neutral">&nbsp;</span>
1868
- <span class="cline-any cline-no">&nbsp;</span>
1869
- <span class="cline-any cline-no">&nbsp;</span>
1870
- <span class="cline-any cline-neutral">&nbsp;</span>
1871
- <span class="cline-any cline-no">&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-yes">8x</span>
1875
- <span class="cline-any cline-no">&nbsp;</span>
1876
- <span class="cline-any cline-no">&nbsp;</span>
1877
- <span class="cline-any cline-neutral">&nbsp;</span>
1878
- <span class="cline-any cline-neutral">&nbsp;</span>
1879
- <span class="cline-any cline-no">&nbsp;</span>
1880
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1884
- <span class="cline-any cline-neutral">&nbsp;</span>
1885
- <span class="cline-any cline-neutral">&nbsp;</span>
1886
- <span class="cline-any cline-neutral">&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-yes">8x</span>
1890
- <span class="cline-any cline-yes">8x</span>
1891
- <span class="cline-any cline-yes">8x</span>
1892
- <span class="cline-any cline-yes">8x</span>
1893
- <span class="cline-any cline-neutral">&nbsp;</span>
1894
- <span class="cline-any cline-neutral">&nbsp;</span>
1895
- <span class="cline-any cline-neutral">&nbsp;</span>
1896
- <span class="cline-any cline-yes">8x</span>
1897
- <span class="cline-any cline-yes">3x</span>
1898
- <span class="cline-any cline-yes">4x</span>
1899
- <span class="cline-any cline-yes">4x</span>
1900
- <span class="cline-any cline-yes">1x</span>
1901
- <span class="cline-any cline-neutral">&nbsp;</span>
1902
- <span class="cline-any cline-neutral">&nbsp;</span>
1903
- <span class="cline-any cline-neutral">&nbsp;</span>
1904
- <span class="cline-any cline-neutral">&nbsp;</span>
1905
- <span class="cline-any cline-yes">8x</span>
1906
- <span class="cline-any cline-yes">8x</span>
1907
- <span class="cline-any cline-yes">1x</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-neutral">&nbsp;</span>
1911
- <span class="cline-any cline-neutral">&nbsp;</span>
1912
- <span class="cline-any cline-yes">2x</span>
1913
- <span class="cline-any cline-yes">2x</span>
1914
- <span class="cline-any cline-yes">2x</span>
1915
- <span class="cline-any cline-yes">2x</span>
1916
- <span class="cline-any cline-no">&nbsp;</span>
1917
- <span class="cline-any cline-neutral">&nbsp;</span>
1918
- <span class="cline-any cline-yes">2x</span>
1919
- <span class="cline-any cline-neutral">&nbsp;</span>
1920
- <span class="cline-any cline-neutral">&nbsp;</span>
1921
- <span class="cline-any cline-neutral">&nbsp;</span>
1922
- <span class="cline-any cline-yes">2x</span>
1923
- <span class="cline-any cline-yes">2x</span>
1924
- <span class="cline-any cline-yes">2x</span>
1925
- <span class="cline-any cline-no">&nbsp;</span>
1926
- <span class="cline-any cline-neutral">&nbsp;</span>
1927
- <span class="cline-any cline-yes">2x</span>
1928
- <span class="cline-any cline-yes">2x</span>
1929
- <span class="cline-any cline-yes">2x</span>
1930
- <span class="cline-any cline-yes">1x</span>
1931
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1936
- <span class="cline-any cline-yes">1x</span>
1937
- <span class="cline-any cline-yes">1x</span>
1938
- <span class="cline-any cline-yes">1x</span>
1939
- <span class="cline-any cline-yes">1x</span>
1940
- <span class="cline-any cline-no">&nbsp;</span>
1941
- <span class="cline-any cline-neutral">&nbsp;</span>
1942
- <span class="cline-any cline-yes">1x</span>
1943
- <span class="cline-any cline-neutral">&nbsp;</span>
1944
- <span class="cline-any cline-neutral">&nbsp;</span>
1945
- <span class="cline-any cline-neutral">&nbsp;</span>
1946
- <span class="cline-any cline-neutral">&nbsp;</span>
1947
- <span class="cline-any cline-neutral">&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-neutral">&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-no">&nbsp;</span>
1956
- <span class="cline-any cline-neutral">&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-yes">1x</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-neutral">&nbsp;</span>
1965
- <span class="cline-any cline-neutral">&nbsp;</span>
1966
- <span class="cline-any cline-yes">2x</span>
1967
- <span class="cline-any cline-yes">2x</span>
1968
- <span class="cline-any cline-yes">1x</span>
1969
- <span class="cline-any cline-neutral">&nbsp;</span>
1970
- <span class="cline-any cline-yes">1x</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-neutral">&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-yes">3x</span>
1978
- <span class="cline-any cline-yes">3x</span>
1979
- <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
1983
- <span class="cline-any cline-neutral">&nbsp;</span>
1984
- <span class="cline-any cline-yes">3x</span>
1985
- <span class="cline-any cline-yes">3x</span>
1986
- <span class="cline-any cline-yes">1x</span>
1987
- <span class="cline-any cline-neutral">&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-neutral">&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-yes">1x</span>
1995
- <span class="cline-any cline-yes">1x</span>
1996
- <span class="cline-any cline-yes">1x</span>
1997
- <span class="cline-any cline-yes">1x</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-yes">1x</span>
2001
- <span class="cline-any cline-neutral">&nbsp;</span>
2002
- <span class="cline-any cline-neutral">&nbsp;</span>
2003
- <span class="cline-any cline-neutral">&nbsp;</span>
2004
- <span class="cline-any cline-neutral">&nbsp;</span>
2005
- <span class="cline-any cline-neutral">&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-yes">6x</span>
2009
- <span class="cline-any cline-neutral">&nbsp;</span>
2010
- <span class="cline-any cline-yes">6x</span>
2011
- <span class="cline-any cline-yes">10x</span>
2012
- <span class="cline-any cline-yes">4x</span>
2013
- <span class="cline-any cline-yes">4x</span>
2014
- <span class="cline-any cline-neutral">&nbsp;</span>
2015
- <span class="cline-any cline-yes">6x</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-yes">2x</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-neutral">&nbsp;</span>
2022
- <span class="cline-any cline-neutral">&nbsp;</span>
2023
- <span class="cline-any cline-neutral">&nbsp;</span>
2024
- <span class="cline-any cline-neutral">&nbsp;</span>
2025
- <span class="cline-any cline-neutral">&nbsp;</span>
2026
- <span class="cline-any cline-neutral">&nbsp;</span>
2027
- <span class="cline-any cline-neutral">&nbsp;</span>
2028
- <span class="cline-any cline-neutral">&nbsp;</span>
2029
- <span class="cline-any cline-neutral">&nbsp;</span>
2030
- <span class="cline-any cline-yes">4x</span>
2031
- <span class="cline-any cline-neutral">&nbsp;</span>
2032
- <span class="cline-any cline-yes">6x</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-yes">4x</span>
2055
- <span class="cline-any cline-yes">2x</span>
2056
- <span class="cline-any cline-yes">6x</span>
2057
- <span class="cline-any cline-neutral">&nbsp;</span>
2058
- <span class="cline-any cline-neutral">&nbsp;</span>
2059
- <span class="cline-any cline-yes">4x</span>
2060
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
2069
- <span class="cline-any cline-neutral">&nbsp;</span>
2070
- <span class="cline-any cline-neutral">&nbsp;</span>
2071
- <span class="cline-any cline-yes">4x</span>
2072
- <span class="cline-any cline-neutral">&nbsp;</span>
2073
- <span class="cline-any cline-neutral">&nbsp;</span>
2074
- <span class="cline-any cline-neutral">&nbsp;</span>
2075
- <span class="cline-any cline-neutral">&nbsp;</span>
2076
- <span class="cline-any cline-yes">4x</span>
2077
- <span class="cline-any cline-neutral">&nbsp;</span>
2078
- <span class="cline-any cline-yes">4x</span>
2079
- <span class="cline-any cline-neutral">&nbsp;</span>
2080
- <span class="cline-any cline-yes">4x</span>
2081
- <span class="cline-any cline-neutral">&nbsp;</span>
2082
- <span class="cline-any cline-neutral">&nbsp;</span>
2083
- <span class="cline-any cline-neutral">&nbsp;</span>
2084
- <span class="cline-any cline-neutral">&nbsp;</span>
2085
- <span class="cline-any cline-yes">2x</span>
2086
- <span class="cline-any cline-yes">2x</span>
2087
- <span class="cline-any cline-yes">2x</span>
2088
- <span class="cline-any cline-yes">1x</span>
2089
- <span class="cline-any cline-neutral">&nbsp;</span>
2090
- <span class="cline-any cline-neutral">&nbsp;</span>
2091
- <span class="cline-any cline-neutral">&nbsp;</span>
2092
- <span class="cline-any cline-neutral">&nbsp;</span>
2093
- <span class="cline-any cline-neutral">&nbsp;</span>
2094
- <span class="cline-any cline-neutral">&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-no">&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-neutral">&nbsp;</span>
2101
- <span class="cline-any cline-neutral">&nbsp;</span>
2102
- <span class="cline-any cline-neutral">&nbsp;</span>
2103
- <span class="cline-any cline-neutral">&nbsp;</span>
2104
- <span class="cline-any cline-yes">4x</span>
2105
- <span class="cline-any cline-no">&nbsp;</span>
2106
- <span class="cline-any cline-neutral">&nbsp;</span>
2107
- <span class="cline-any cline-neutral">&nbsp;</span>
2108
- <span class="cline-any cline-yes">4x</span>
2109
- <span class="cline-any cline-yes">4x</span>
2110
- <span class="cline-any cline-yes">4x</span>
2111
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
2115
- <span class="cline-any cline-neutral">&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-yes">4x</span>
2119
- <span class="cline-any cline-yes">4x</span>
2120
- <span class="cline-any cline-no">&nbsp;</span>
2121
- <span class="cline-any cline-neutral">&nbsp;</span>
2122
- <span class="cline-any cline-no">&nbsp;</span>
2123
- <span class="cline-any cline-no">&nbsp;</span>
2124
- <span class="cline-any cline-neutral">&nbsp;</span>
2125
- <span class="cline-any cline-neutral">&nbsp;</span>
2126
- <span class="cline-any cline-neutral">&nbsp;</span>
2127
- <span class="cline-any cline-neutral">&nbsp;</span>
2128
- <span class="cline-any cline-neutral">&nbsp;</span>
2129
- <span class="cline-any cline-yes">4x</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-neutral">&nbsp;</span>
2133
- <span class="cline-any cline-neutral">&nbsp;</span>
2134
- <span class="cline-any cline-neutral">&nbsp;</span>
2135
- <span class="cline-any cline-neutral">&nbsp;</span>
2136
- <span class="cline-any cline-yes">4x</span>
2137
- <span class="cline-any cline-neutral">&nbsp;</span>
2138
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
2139
- * Task execution for skills.
2140
- * Callback-based state updates for CLI and Ink rendering.
2141
- *
2142
- * Reporter spec: specs/reporters.md
2143
- */
2144
- &nbsp;
2145
- import type { SkillReport, SeverityThreshold, ConfidenceThreshold, Finding, UsageStats, EventContext, HunkFailure, AuxiliaryUsageMap, ErrorCode } from '../../types/index.js';
2146
- import type { SkillDefinition } from '../../config/schema.js';
2147
- import { Sentry, emitSkillMetrics, logger } from '../../sentry.js';
2148
- import { SkillRunnerError, WardenAuthenticationError, classifyError } from '../../sdk/errors.js';
2149
- import {
2150
- prepareFiles,
2151
- analyzeFile,
2152
- aggregateUsage,
2153
- aggregateAuxiliaryUsage,
2154
- postProcessFindings,
2155
- generateSummary,
2156
- type AuxiliaryUsageEntry,
2157
- type SkillRunnerOptions,
2158
- type FileAnalysisCallbacks,
2159
- type PreparedFile,
2160
- type PRPromptContext,
2161
- type ChunkAnalysisResult,
2162
- type FindingProcessingEvent,
2163
- } from '../../sdk/runner.js';
2164
- import { ProviderFailureCircuitBreaker } from '../../sdk/circuit-breaker.js';
2165
- import { buildFileReports } from '../../sdk/report-files.js';
2166
- import chalk from 'chalk';
2167
- import figures from 'figures';
2168
- import { Verbosity } from './verbosity.js';
2169
- import type { OutputMode } from './tty.js';
2170
- import { ICON_CHECK, ICON_SKIPPED } from './icons.js';
2171
- import { timestamp } from './tty.js';
2172
- import { formatDuration, formatCost, formatLocation, formatSeverityPlain, formatFindingCountsPlain, countBySeverity, pluralize } from './formatters.js';
2173
- import { runPool, Semaphore } from '../../utils/index.js';
2174
- &nbsp;
2175
- /**
2176
- * Result from processing a single file within a skill task.
2177
- */
2178
- interface FileProcessResult {
2179
- findings: Finding[];
2180
- usage?: UsageStats;
2181
- durationMs: number;
2182
- failedHunks: number;
2183
- failedExtractions: number;
2184
- hunkFailures: HunkFailure[];
2185
- auxiliaryUsage?: AuxiliaryUsageEntry[];
2186
- }
2187
- &nbsp;
2188
- function allAnalysisFailuresHaveCode(
2189
- hunkFailures: HunkFailure[],
2190
- code: ErrorCode,
2191
- ): boolean {
2192
- const analysisFailures = hunkFailures.filter((failure) =&gt; failure.type === 'analysis');
2193
- return (
2194
- analysisFailures.length &gt; 0
2195
- &amp;&amp; analysisFailures.every((failure) =&gt; failure.code === code)
2196
- );
2197
- }
2198
- &nbsp;
2199
- function firstAnalysisFailureMessage(hunkFailures: HunkFailure[], code: ErrorCode): string | undefined {
2200
- return hunkFailures.find((failure) =&gt; failure.type === 'analysis' &amp;&amp; failure.code === code)?.message;
2201
- }
2202
- &nbsp;
2203
- function summarizeRunFailure(args: {
2204
- totalHunks: number;
2205
- hunkFailures: HunkFailure[];
2206
- circuitReason?: { code: ErrorCode; message: string };
2207
- runtime?: SkillRunnerOptions['runtime'];
2208
- }): { code: ErrorCode; message: string } {
2209
- const { totalHunks, hunkFailures, circuitReason, runtime } = args;
2210
- <span class="missing-if-branch" title="if path not taken" >I</span>if (circuitReason) {
2211
- <span class="cstat-no" title="statement not covered" > return circuitReason;</span>
2212
- }
2213
- if (allAnalysisFailuresHaveCode(hunkFailures, 'auth_failed')) {
2214
- return {
2215
- code: 'auth_failed',
2216
- message: 'Authentication failed. Warden stopped early.',
2217
- };
2218
- }
2219
- if (allAnalysisFailuresHaveCode(hunkFailures, 'invalid_model_selector')) {
2220
- return {
2221
- code: 'invalid_model_selector',
2222
- message: firstAnalysisFailureMessage(hunkFailures, 'invalid_model_selector') ?? <span class="branch-1 cbranch-no" title="branch not covered" >'Invalid Pi model selector.',</span>
2223
- };
2224
- }
2225
- if (allAnalysisFailuresHaveCode(hunkFailures, 'provider_unavailable')) {
2226
- return {
2227
- code: 'provider_unavailable',
2228
- message: `Provider unavailable: all ${totalHunks} chunk${totalHunks === 1 ? '' : <span class="branch-1 cbranch-no" title="branch not covered" >'s'}</span> failed to analyze. Warden stopped early.`,
2229
- };
2230
- }
2231
- return {
2232
- code: 'all_hunks_failed',
2233
- message:
2234
- `All ${totalHunks} chunk${totalHunks === 1 ? '' : <span class="branch-1 cbranch-no" title="branch not covered" >'s'}</span> failed to analyze. ` +
2235
- `This usually indicates an authentication problem. ` +
2236
- ((runtime ?? 'pi') === 'claude'
2237
- ? <span class="branch-0 cbranch-no" title="branch not covered" >`Verify WARDEN_ANTHROPIC_API_KEY is set correctly, or run 'claude login' when using the Claude runtime without an API key.`</span>
2238
- : `Verify WARDEN_MODEL and the WARDEN-prefixed provider API key for that model are set correctly.`),
2239
- };
2240
- }
2241
- &nbsp;
2242
- /**
2243
- * Write a log-mode message to stderr with timestamp prefix.
2244
- * Used for non-TTY / plain output.
2245
- */
2246
- function logPlain(message: string): void {
2247
- console.error(`[${timestamp()}] warden: ${message}`);
2248
- }
2249
- &nbsp;
2250
- /**
2251
- * Write a debug-level message to stderr.
2252
- * Uses chalk.dim formatting in TTY mode, timestamped "DEBUG:" prefix otherwise.
2253
- */
2254
- function debugLog(mode: OutputMode, message: string): void {
2255
- <span class="missing-if-branch" title="if path not taken" >I</span>if (mode.isTTY) {
2256
- <span class="cstat-no" title="statement not covered" > console.error(chalk.dim(`[debug] ${message}`));</span>
2257
- } else {
2258
- logPlain(`DEBUG: ${message}`);
2259
- }
2260
- }
2261
- &nbsp;
2262
- /**
2263
- * Format a finding's location as a compact string, falling back to 'unknown'.
2264
- */
2265
- function findingLocation(finding: Finding): string {
2266
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!finding.location) <span class="cstat-no" title="statement not covered" >return 'unknown';</span>
2267
- return formatLocation(finding.location.path, finding.location.startLine, finding.location.endLine);
2268
- }
2269
- &nbsp;
2270
- function findingSummary(finding: Finding): string {
2271
- return `${findingLocation(finding)}: ${finding.title}`;
2272
- }
2273
- &nbsp;
2274
- function formatFindingProcessingEvent(event: FindingProcessingEvent): string {
2275
- const reason = event.reason ? ` (${event.reason})` : <span class="branch-1 cbranch-no" title="branch not covered" >'';</span>
2276
- const replacement = event.replacement ? <span class="branch-0 cbranch-no" title="branch not covered" >` -&gt; ${findingSummary(event.replacement)}` : '</span>';
2277
- return `${event.stage}:${event.action} ${findingSummary(event.finding)}${replacement}${reason}`;
2278
- }
2279
- &nbsp;
2280
- /**
2281
- * State of a file being processed by a skill.
2282
- */
2283
- export interface FileState {
2284
- filename: string;
2285
- status: 'pending' | 'running' | 'done' | 'skipped';
2286
- currentHunk: number;
2287
- totalHunks: number;
2288
- findings: Finding[];
2289
- usage?: UsageStats;
2290
- durationMs?: number;
2291
- }
2292
- &nbsp;
2293
- /**
2294
- * State of a skill being executed.
2295
- */
2296
- export interface SkillState {
2297
- name: string;
2298
- displayName: string;
2299
- status: 'pending' | 'running' | 'done' | 'skipped' | 'error';
2300
- startTime?: number;
2301
- durationMs?: number;
2302
- files: FileState[];
2303
- findings: Finding[];
2304
- usage?: UsageStats;
2305
- auxiliaryUsage?: AuxiliaryUsageMap;
2306
- error?: string;
2307
- }
2308
- &nbsp;
2309
- /**
2310
- * Result from running a skill task.
2311
- */
2312
- export interface SkillTaskResult {
2313
- name: string;
2314
- report?: SkillReport;
2315
- failOn?: SeverityThreshold;
2316
- minConfidence?: ConfidenceThreshold;
2317
- error?: unknown;
2318
- }
2319
- &nbsp;
2320
- /**
2321
- * Options for creating a skill task.
2322
- */
2323
- export interface SkillTaskOptions {
2324
- name: string;
2325
- displayName?: string;
2326
- triggerName?: string;
2327
- failOn?: SeverityThreshold;
2328
- minConfidence?: ConfidenceThreshold;
2329
- /** Resolve the skill definition (may be async for loading) */
2330
- resolveSkill: () =&gt; Promise&lt;SkillDefinition&gt;;
2331
- /** The event context with files to analyze */
2332
- context: EventContext;
2333
- /** Options passed to the runner */
2334
- runnerOptions?: SkillRunnerOptions;
2335
- }
2336
- &nbsp;
2337
- /**
2338
- * Options for running skill tasks.
2339
- */
2340
- export interface RunTasksOptions {
2341
- mode: OutputMode;
2342
- verbosity: Verbosity;
2343
- concurrency: number;
2344
- /** Controller that fires when fail-fast detects a finding. Created by caller. */
2345
- failFastController?: AbortController;
2346
- /** Hook fired after each skill finishes; used by the CLI to stream JSONL to disk. */
2347
- onSkillComplete?: (report: SkillReport) =&gt; void;
2348
- /** Hook fired after each chunk finishes; used by the CLI to stream JSONL to disk. */
2349
- onChunkComplete?: (skillName: string, chunk: ChunkAnalysisResult) =&gt; void;
2350
- }
2351
- &nbsp;
2352
- /**
2353
- * Callbacks for reporting skill execution progress to the UI.
2354
- */
2355
- export interface SkillProgressCallbacks {
2356
- onSkillStart: (skill: SkillState) =&gt; void;
2357
- onSkillUpdate: (name: string, updates: Partial&lt;SkillState&gt;) =&gt; void;
2358
- onFileUpdate: (skillName: string, filename: string, updates: Partial&lt;FileState&gt;) =&gt; void;
2359
- /** Called when a hunk analysis starts (one SDK invocation per hunk) */
2360
- onHunkStart?: (skillName: string, filename: string, hunkNum: number, totalHunks: number, lineRange: string) =&gt; void;
2361
- onChunkComplete?: (skillName: string, chunk: ChunkAnalysisResult) =&gt; void;
2362
- onSkillComplete: (name: string, report: SkillReport) =&gt; void;
2363
- onSkillSkipped: (name: string) =&gt; void;
2364
- onSkillError: (name: string, error: string) =&gt; void;
2365
- /** Called when a prompt exceeds the large prompt threshold */
2366
- onLargePrompt?: (skillName: string, filename: string, lineRange: string, chars: number, estimatedTokens: number) =&gt; void;
2367
- /** Called with prompt size info in debug mode */
2368
- onPromptSize?: (skillName: string, filename: string, lineRange: string, systemChars: number, userChars: number, totalChars: number, estimatedTokens: number) =&gt; void;
2369
- /** Called with extraction result details (debug mode) */
2370
- onExtractionResult?: (skillName: string, filename: string, lineRange: string, findingsCount: number, method: 'regex' | 'llm' | 'none') =&gt; void;
2371
- /** Called when findings are dropped, revised, merged, or stripped after analysis */
2372
- onFindingProcessing?: (skillName: string, event: FindingProcessingEvent) =&gt; void;
2373
- /** Called when hunk analysis fails (SDK error, API error, abort) */
2374
- onHunkFailed?: (skillName: string, filename: string, lineRange: string, error: string) =&gt; void;
2375
- /** Called when findings extraction fails (both regex and LLM fallback failed) */
2376
- onExtractionFailure?: (skillName: string, filename: string, lineRange: string, error: string, preview: string) =&gt; void;
2377
- /** Called when a retry attempt is made */
2378
- onRetry?: (skillName: string, filename: string, lineRange: string, attempt: number, maxRetries: number, error: string, delayMs: number) =&gt; void;
2379
- }
2380
- &nbsp;
2381
- /**
2382
- * Run a single skill task.
2383
- */
2384
- export async function runSkillTask(
2385
- options: SkillTaskOptions,
2386
- fileConcurrency: number,
2387
- callbacks: SkillProgressCallbacks,
2388
- semaphore?: Semaphore
2389
- ): Promise&lt;SkillTaskResult&gt; {
2390
- const { name, displayName = name, triggerName, failOn, minConfidence, resolveSkill, context, runnerOptions = {} } = options;
2391
- &nbsp;
2392
- return Sentry.startSpan(
2393
- { op: 'skill.run', name: `run ${displayName}` },
2394
- async (span) =&gt; {
2395
- span.setAttribute('gen_ai.agent.name', displayName);
2396
- <span class="missing-if-branch" title="if path not taken" >I</span>if (triggerName) {
2397
- <span class="cstat-no" title="statement not covered" > span.setAttribute('warden.trigger.name', triggerName);</span>
2398
- }
2399
- const files = context.pullRequest?.files ?? [];
2400
- span.setAttribute('warden.file.count', files.length);
2401
- logger.info(logger.fmt`Skill execution started: ${displayName}`, {
2402
- 'warden.file.count': files.length,
2403
- });
2404
- &nbsp;
2405
- const startTime = Date.now();
2406
- const runtime = runnerOptions.runtime ?? 'pi';
2407
- // Mirror of the inner-scope `skill` so the outer catch can use
2408
- // report.skill when resolveSkill succeeded but a later step threw.
2409
- // Stays undefined only if resolveSkill itself failed.
2410
- let resolvedSkillName: string | undefined;
2411
- &nbsp;
2412
- try {
2413
- let skill: SkillDefinition;
2414
- try {
2415
- skill = await resolveSkill();
2416
- resolvedSkillName = skill.name;
2417
- span.setAttribute('gen_ai.agent.name', skill.name);
2418
- } catch (err) {
2419
- if (err instanceof WardenAuthenticationError) throw err;
2420
- const message = err instanceof Error ? err.message : <span class="branch-1 cbranch-no" title="branch not covered" >String(err);</span>
2421
- throw new SkillRunnerError(message, { cause: err, code: 'skill_resolution_failed' });
2422
- }
2423
- &nbsp;
2424
- // Prepare files (parse patches into hunks)
2425
- const { files: preparedFiles, skippedFiles } = prepareFiles(context, {
2426
- contextLines: runnerOptions.contextLines,
2427
- });
2428
- &nbsp;
2429
- if (preparedFiles.length === 0) {
2430
- // No files to analyze - skip
2431
- const skippedReport: SkillReport = {
2432
- skill: skill.name,
2433
- summary: 'No code changes to analyze',
2434
- findings: [],
2435
- usage: { inputTokens: 0, outputTokens: 0, costUSD: 0 },
2436
- durationMs: Date.now() - startTime,
2437
- model: runnerOptions?.model,
2438
- runtime,
2439
- skippedFiles: skippedFiles.length &gt; 0 ? <span class="branch-0 cbranch-no" title="branch not covered" >skippedFiles : u</span>ndefined,
2440
- };
2441
- span.setAttribute('warden.finding.count', 0);
2442
- callbacks.onSkillSkipped(name);
2443
- // Also fire onSkillComplete so the incremental JSONL writer records the skipped skill.
2444
- callbacks.onSkillComplete(name, skippedReport);
2445
- return {
2446
- name,
2447
- report: skippedReport,
2448
- failOn,
2449
- minConfidence,
2450
- };
2451
- }
2452
- &nbsp;
2453
- // Initialize file states
2454
- const fileStates: FileState[] = preparedFiles.map((file) =&gt; ({
2455
- filename: file.filename,
2456
- status: 'pending',
2457
- currentHunk: 0,
2458
- totalHunks: file.hunks.length,
2459
- findings: [],
2460
- }));
2461
- &nbsp;
2462
- // Notify skill start
2463
- callbacks.onSkillStart({
2464
- name,
2465
- displayName,
2466
- status: 'running',
2467
- startTime,
2468
- files: fileStates,
2469
- findings: [],
2470
- });
2471
- &nbsp;
2472
- // Build PR context for inclusion in prompts (if available)
2473
- // For non-PR contexts (CLI file/diff mode), skip the "Other Files" list to avoid
2474
- // bloating every hunk prompt with thousands of filenames.
2475
- const isPullRequest = context.pullRequest ? context.pullRequest.number !== 0 : <span class="branch-1 cbranch-no" title="branch not covered" >false;</span>
2476
- const prContext: PRPromptContext | undefined = context.pullRequest
2477
- ? {
2478
- changedFiles: isPullRequest ? context.pullRequest.files.map(<span class="fstat-no" title="function not covered" >(f</span>) =&gt; <span class="cstat-no" title="statement not covered" >f.filename)</span> : <span class="branch-1 cbranch-no" title="branch not covered" >[],</span>
2479
- title: context.pullRequest.title,
2480
- body: context.pullRequest.body,
2481
- maxContextFiles: runnerOptions.maxContextFiles,
2482
- }
2483
- : <span class="branch-1 cbranch-no" title="branch not covered" >undefined;</span>
2484
- &nbsp;
2485
- // Process files with concurrency
2486
- const processFile = async (prepared: PreparedFile, index: number): Promise&lt;FileProcessResult&gt; =&gt; {
2487
- const filename = prepared.filename;
2488
- const fileStartTime = Date.now();
2489
- &nbsp;
2490
- // Update file state to running (local + callback)
2491
- const localState = fileStates[index];
2492
- <span class="missing-if-branch" title="else path not taken" >E</span>if (localState) localState.status = 'running';
2493
- callbacks.onFileUpdate(name, filename, { status: 'running' });
2494
- &nbsp;
2495
- const fileCallbacks: FileAnalysisCallbacks = {
2496
- skillStartTime: startTime,
2497
- onHunkStart: <span class="fstat-no" title="function not covered" >(h</span>unkNum, totalHunks, lineRange) =&gt; {
2498
- <span class="cstat-no" title="statement not covered" > callbacks.onFileUpdate(name, filename, {</span>
2499
- currentHunk: hunkNum,
2500
- totalHunks,
2501
- });
2502
- <span class="cstat-no" title="statement not covered" > callbacks.onHunkStart?.(name, filename, hunkNum, totalHunks, lineRange);</span>
2503
- },
2504
- onHunkComplete: <span class="fstat-no" title="function not covered" >(_</span>hunkNum, findings, usage) =&gt; {
2505
- // Accumulate findings and usage for this file
2506
- const current = <span class="cstat-no" title="statement not covered" >fileStates[index];</span>
2507
- <span class="cstat-no" title="statement not covered" > if (current) {</span>
2508
- <span class="cstat-no" title="statement not covered" > current.findings.push(...findings);</span>
2509
- <span class="cstat-no" title="statement not covered" > if (current.usage) {</span>
2510
- <span class="cstat-no" title="statement not covered" > current.usage.inputTokens += usage.inputTokens;</span>
2511
- <span class="cstat-no" title="statement not covered" > current.usage.outputTokens += usage.outputTokens;</span>
2512
- <span class="cstat-no" title="statement not covered" > current.usage.costUSD += usage.costUSD;</span>
2513
- <span class="cstat-no" title="statement not covered" > if (usage.cacheReadInputTokens) {</span>
2514
- <span class="cstat-no" title="statement not covered" > current.usage.cacheReadInputTokens = (current.usage.cacheReadInputTokens ?? 0) + usage.cacheReadInputTokens;</span>
2515
- }
2516
- <span class="cstat-no" title="statement not covered" > if (usage.cacheCreationInputTokens) {</span>
2517
- <span class="cstat-no" title="statement not covered" > current.usage.cacheCreationInputTokens = (current.usage.cacheCreationInputTokens ?? 0) + usage.cacheCreationInputTokens;</span>
2518
- }
2519
- <span class="cstat-no" title="statement not covered" > if (usage.cacheCreation5mInputTokens) {</span>
2520
- <span class="cstat-no" title="statement not covered" > current.usage.cacheCreation5mInputTokens = (current.usage.cacheCreation5mInputTokens ?? 0) + usage.cacheCreation5mInputTokens;</span>
2521
- }
2522
- <span class="cstat-no" title="statement not covered" > if (usage.cacheCreation1hInputTokens) {</span>
2523
- <span class="cstat-no" title="statement not covered" > current.usage.cacheCreation1hInputTokens = (current.usage.cacheCreation1hInputTokens ?? 0) + usage.cacheCreation1hInputTokens;</span>
2524
- }
2525
- <span class="cstat-no" title="statement not covered" > if (usage.webSearchRequests) {</span>
2526
- <span class="cstat-no" title="statement not covered" > current.usage.webSearchRequests = (current.usage.webSearchRequests ?? 0) + usage.webSearchRequests;</span>
2527
- }
2528
- } else {
2529
- <span class="cstat-no" title="statement not covered" > current.usage = { ...usage };</span>
2530
- }
2531
- <span class="cstat-no" title="statement not covered" > callbacks.onFileUpdate(name, filename, { usage: current.usage });</span>
2532
- }
2533
- },
2534
- onLargePrompt: callbacks.onLargePrompt
2535
- ? <span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >(l</span>ineRange, chars, estimatedTokens) =&gt; {</span>
2536
- <span class="cstat-no" title="statement not covered" > callbacks.onLargePrompt?.(name, filename, lineRange, chars, estimatedTokens);</span>
2537
- }
2538
- : undefined,
2539
- onPromptSize: callbacks.onPromptSize
2540
- ? <span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >(l</span>ineRange, systemChars, userChars, totalChars, estimatedTokens) =&gt; {</span>
2541
- <span class="cstat-no" title="statement not covered" > callbacks.onPromptSize?.(name, filename, lineRange, systemChars, userChars, totalChars, estimatedTokens);</span>
2542
- }
2543
- : undefined,
2544
- onExtractionResult: callbacks.onExtractionResult
2545
- ? <span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >(l</span>ineRange, findingsCount, method) =&gt; {</span>
2546
- <span class="cstat-no" title="statement not covered" > callbacks.onExtractionResult?.(name, filename, lineRange, findingsCount, method);</span>
2547
- }
2548
- : undefined,
2549
- onChunkComplete: callbacks.onChunkComplete
2550
- ? <span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >(c</span>hunk) =&gt; {</span>
2551
- <span class="cstat-no" title="statement not covered" > callbacks.onChunkComplete?.(skill.name, chunk);</span>
2552
- }
2553
- : undefined,
2554
- onHunkFailed: callbacks.onHunkFailed
2555
- ? <span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >(l</span>ineRange, error) =&gt; {</span>
2556
- <span class="cstat-no" title="statement not covered" > callbacks.onHunkFailed?.(name, filename, lineRange, error);</span>
2557
- }
2558
- : undefined,
2559
- onExtractionFailure: callbacks.onExtractionFailure
2560
- ? <span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >(l</span>ineRange, error, preview) =&gt; {</span>
2561
- <span class="cstat-no" title="statement not covered" > callbacks.onExtractionFailure?.(name, filename, lineRange, error, preview);</span>
2562
- }
2563
- : undefined,
2564
- onRetry: callbacks.onRetry
2565
- ? <span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >(l</span>ineRange, attempt, maxRetries, error, delayMs) =&gt; {</span>
2566
- <span class="cstat-no" title="statement not covered" > callbacks.onRetry?.(name, filename, lineRange, attempt, maxRetries, error, delayMs);</span>
2567
- }
2568
- : undefined,
2569
- };
2570
- &nbsp;
2571
- const result = await analyzeFile(
2572
- skill,
2573
- prepared,
2574
- context.repoPath,
2575
- runnerOptions,
2576
- fileCallbacks,
2577
- prContext
2578
- );
2579
- &nbsp;
2580
- // Detect if this file was aborted before any real work happened
2581
- const fileDurationMs = Date.now() - fileStartTime;
2582
- const aborted = runnerOptions.abortController?.signal.aborted ?? false;
2583
- const noWork = !result.usage || (result.usage.inputTokens === 0 &amp;&amp; result.usage.outputTokens === 0);
2584
- const fileStatus = (aborted &amp;&amp; noWork) ? 'skipped' : 'done';
2585
- &nbsp;
2586
- <span class="missing-if-branch" title="else path not taken" >E</span>if (localState) localState.status = fileStatus;
2587
- callbacks.onFileUpdate(name, filename, {
2588
- status: fileStatus,
2589
- findings: result.findings,
2590
- usage: result.usage,
2591
- durationMs: fileDurationMs,
2592
- });
2593
- &nbsp;
2594
- return {
2595
- findings: result.findings,
2596
- usage: result.usage,
2597
- durationMs: fileDurationMs,
2598
- failedHunks: result.failedHunks,
2599
- failedExtractions: result.failedExtractions,
2600
- hunkFailures: result.hunkFailures,
2601
- auxiliaryUsage: result.auxiliaryUsage,
2602
- };
2603
- };
2604
- &nbsp;
2605
- // Return an empty result for files skipped due to abort
2606
- const processSkippedFile = <span class="fstat-no" title="function not covered" >(i</span>ndex: number): FileProcessResult =&gt; {
2607
- const localState = <span class="cstat-no" title="statement not covered" >fileStates[index];</span>
2608
- <span class="cstat-no" title="statement not covered" > if (localState) <span class="cstat-no" title="statement not covered" >localState.status = 'skipped';</span></span>
2609
- const filename = <span class="cstat-no" title="statement not covered" >preparedFiles[index]?.filename ?? 'unknown';</span>
2610
- <span class="cstat-no" title="statement not covered" > callbacks.onFileUpdate(name, filename, { status: 'skipped' });</span>
2611
- <span class="cstat-no" title="statement not covered" > return { findings: [], durationMs: 0, failedHunks: 0, failedExtractions: 0, hunkFailures: [] };</span>
2612
- };
2613
- &nbsp;
2614
- // Process files with sliding-window concurrency pool
2615
- const batchDelayMs = runnerOptions.batchDelayMs ?? 0;
2616
- const shouldAbort = () =&gt; runnerOptions.abortController?.signal.aborted ?? false;
2617
- // The effective concurrency for batch delay: when a semaphore gates work,
2618
- // use its permit count (the actual concurrency limit) rather than fileConcurrency.
2619
- const effectiveConcurrency = semaphore ? semaphore.initialPermits : fileConcurrency;
2620
- const allResults = await runPool(preparedFiles, fileConcurrency,
2621
- async (file, index) =&gt; {
2622
- if (semaphore) await semaphore.acquire();
2623
- try {
2624
- // Check abort after acquiring the semaphore -- the file may have
2625
- // been queued behind others and a SIGINT could have arrived while waiting.
2626
- <span class="missing-if-branch" title="if path not taken" >I</span>if (shouldAbort()) <span class="cstat-no" title="statement not covered" >return processSkippedFile(index);</span>
2627
- // Rate-limit: delay items beyond the first concurrent wave
2628
- <span class="missing-if-branch" title="if path not taken" >I</span>if (index &gt;= effectiveConcurrency &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >batchDelayMs &gt; 0) {</span>
2629
- <span class="cstat-no" title="statement not covered" > await new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve) =&gt; <span class="cstat-no" title="statement not covered" >setTimeout(resolve, batchDelayMs))</span>;</span>
2630
- }
2631
- return await processFile(file, index);
2632
- } finally {
2633
- if (semaphore) semaphore.release();
2634
- }
2635
- },
2636
- { shouldAbort }
2637
- );
2638
- &nbsp;
2639
- // Mark never-dispatched files as skipped
2640
- for (const fileState of fileStates) {
2641
- <span class="missing-if-branch" title="if path not taken" >I</span>if (fileState.status === 'pending') {
2642
- <span class="cstat-no" title="statement not covered" > callbacks.onFileUpdate(name, fileState.filename, { status: 'skipped' });</span>
2643
- }
2644
- }
2645
- &nbsp;
2646
- // Build report
2647
- const duration = Date.now() - startTime;
2648
- const allFindings = allResults.flatMap((r) =&gt; r.findings);
2649
- const allUsage = allResults.map((r) =&gt; r.usage).filter((u): u is UsageStats =&gt; u !== undefined);
2650
- const allAuxEntries = allResults.flatMap((r) =&gt; r.auxiliaryUsage ?? []);
2651
- const totalFailedHunks = allResults.reduce((sum, r) =&gt; sum + r.failedHunks, 0);
2652
- const totalFailedExtractions = allResults.reduce((sum, r) =&gt; sum + r.failedExtractions, 0);
2653
- const allHunkFailures: HunkFailure[] = allResults.flatMap((r) =&gt; r.hunkFailures);
2654
- const totalHunks = preparedFiles.reduce((sum, f) =&gt; sum + f.hunks.length, 0);
2655
- // Each hunk contributes to at most one of failedHunks / failedExtractions
2656
- // (mutually exclusive in analyzeFile), so summing them gives the total
2657
- // failed-hunk count. Counting only analysis failures would miss the
2658
- // scenario where every hunk's SDK call succeeded but every extraction
2659
- // failed — a silent zero-findings run otherwise.
2660
- const totalAttemptFailures = totalFailedHunks + totalFailedExtractions;
2661
- &nbsp;
2662
- const circuitReason = runnerOptions.circuitBreaker?.reason;
2663
- if (
2664
- totalHunks &gt; 0
2665
- &amp;&amp; allFindings.length === 0
2666
- &amp;&amp; totalAttemptFailures &gt; 0
2667
- &amp;&amp; (
2668
- circuitReason
2669
- || (
2670
- totalAttemptFailures === totalHunks
2671
- &amp;&amp; !(runnerOptions.abortController?.signal.aborted ?? false)
2672
- )
2673
- )
2674
- ) {
2675
- const auxUsage = aggregateAuxiliaryUsage(allAuxEntries);
2676
- const error = summarizeRunFailure({
2677
- totalHunks,
2678
- hunkFailures: allHunkFailures,
2679
- circuitReason,
2680
- runtime: runnerOptions.runtime,
2681
- });
2682
- const errorReport: SkillReport = {
2683
- skill: skill.name,
2684
- summary: `${skill.name}: failed (${error.code})`,
2685
- findings: [],
2686
- usage: aggregateUsage(allUsage),
2687
- durationMs: duration,
2688
- model: runnerOptions?.model,
2689
- runtime,
2690
- // Preserve per-file metadata (timing, partial usage, attempted
2691
- // filenames) on failure runs too — `warden runs` and JSONL
2692
- // consumers iterate this array to count attempted files. Without
2693
- // it, a failed run shows totalFiles: 0.
2694
- files: preparedFiles.map((file, i) =&gt; {
2695
- const r = allResults[i];
2696
- return {
2697
- filename: file.filename,
2698
- findings: r?.findings.length ?? <span class="branch-1 cbranch-no" title="branch not covered" >0,</span>
2699
- durationMs: r?.durationMs,
2700
- usage: r?.usage,
2701
- };
2702
- }),
2703
- failedHunks: totalFailedHunks,
2704
- hunkFailures: allHunkFailures,
2705
- error: {
2706
- code: error.code,
2707
- message: error.message,
2708
- timestamp: new Date().toISOString(),
2709
- },
2710
- };
2711
- if (totalFailedExtractions &gt; 0) errorReport.failedExtractions = totalFailedExtractions;
2712
- <span class="missing-if-branch" title="if path not taken" >I</span>if (skippedFiles.length &gt; 0) <span class="cstat-no" title="statement not covered" >errorReport.skippedFiles = skippedFiles;</span>
2713
- <span class="missing-if-branch" title="if path not taken" >I</span>if (auxUsage) <span class="cstat-no" title="statement not covered" >errorReport.auxiliaryUsage = auxUsage;</span>
2714
- span.setAttribute('warden.finding.count', 0);
2715
- callbacks.onSkillError(name, error.message);
2716
- // Mirror the success path: emit a final completion event with the
2717
- // (errored) report so terminal renderers print the per-skill
2718
- // summary line. Without this, console mode shows the error string
2719
- // alone with no breakdown of timing, cost, or attempted files.
2720
- callbacks.onSkillUpdate(name, {
2721
- status: 'error',
2722
- durationMs: duration,
2723
- findings: [],
2724
- usage: errorReport.usage,
2725
- auxiliaryUsage: errorReport.auxiliaryUsage,
2726
- });
2727
- callbacks.onSkillComplete(name, errorReport);
2728
- // Carry a typed error alongside the report so consumers that re-throw
2729
- // (action executor, Sentry.captureException) preserve the ErrorCode.
2730
- const runnerError = new SkillRunnerError(error.message, { code: error.code });
2731
- return { name, report: errorReport, error: runnerError, failOn, minConfidence };
2732
- }
2733
- &nbsp;
2734
- const processed = await postProcessFindings(allFindings, {
2735
- skill,
2736
- repoPath: context.repoPath,
2737
- apiKey: runnerOptions.apiKey,
2738
- runtime: runnerOptions.runtime,
2739
- auxiliaryModel: runnerOptions.auxiliaryModel,
2740
- synthesisModel: runnerOptions.synthesisModel,
2741
- auxiliaryMaxRetries: runnerOptions.auxiliaryMaxRetries,
2742
- verifyFindings: runnerOptions.verifyFindings,
2743
- maxTurns: runnerOptions.maxTurns,
2744
- abortController: runnerOptions.abortController,
2745
- pathToClaudeCodeExecutable: runnerOptions.pathToClaudeCodeExecutable,
2746
- prContext,
2747
- onFindingProcessing: <span class="fstat-no" title="function not covered" >(e</span>vent) =&gt; {
2748
- <span class="cstat-no" title="statement not covered" > callbacks.onFindingProcessing?.(name, event);</span>
2749
- },
2750
- });
2751
- const finalFindings = processed.findings;
2752
- allAuxEntries.push(...processed.auxiliaryUsage);
2753
- &nbsp;
2754
- const report: SkillReport = {
2755
- skill: skill.name,
2756
- summary: generateSummary(skill.name, finalFindings),
2757
- findings: finalFindings,
2758
- usage: aggregateUsage(allUsage),
2759
- durationMs: duration,
2760
- model: runnerOptions?.model,
2761
- runtime,
2762
- files: buildFileReports(
2763
- preparedFiles.map((file, i) =&gt; {
2764
- const r = allResults[i];
2765
- return {
2766
- filename: file.filename,
2767
- durationMs: r?.durationMs,
2768
- usage: r?.usage,
2769
- };
2770
- }),
2771
- finalFindings,
2772
- ),
2773
- };
2774
- <span class="missing-if-branch" title="if path not taken" >I</span>if (skippedFiles.length &gt; 0) {
2775
- <span class="cstat-no" title="statement not covered" > report.skippedFiles = skippedFiles;</span>
2776
- }
2777
- if (totalFailedHunks &gt; 0) {
2778
- report.failedHunks = totalFailedHunks;
2779
- }
2780
- <span class="missing-if-branch" title="if path not taken" >I</span>if (totalFailedExtractions &gt; 0) {
2781
- <span class="cstat-no" title="statement not covered" > report.failedExtractions = totalFailedExtractions;</span>
2782
- }
2783
- if (allHunkFailures.length &gt; 0) {
2784
- report.hunkFailures = allHunkFailures;
2785
- }
2786
- const auxUsage = aggregateAuxiliaryUsage(allAuxEntries);
2787
- <span class="missing-if-branch" title="if path not taken" >I</span>if (auxUsage) {
2788
- <span class="cstat-no" title="statement not covered" > report.auxiliaryUsage = auxUsage;</span>
2789
- }
2790
- span.setAttribute('warden.finding.count', report.findings.length);
2791
- &nbsp;
2792
- // Emit metrics and log completion
2793
- emitSkillMetrics(report);
2794
- logger.info(logger.fmt`Skill execution complete: ${displayName}`, {
2795
- 'warden.finding.count': report.findings.length,
2796
- 'duration_ms': report.durationMs,
2797
- });
2798
- &nbsp;
2799
- // Notify skill complete
2800
- callbacks.onSkillUpdate(name, {
2801
- status: 'done',
2802
- durationMs: duration,
2803
- findings: finalFindings,
2804
- usage: report.usage,
2805
- auxiliaryUsage: report.auxiliaryUsage,
2806
- });
2807
- callbacks.onSkillComplete(name, report);
2808
- &nbsp;
2809
- return { name, report, failOn, minConfidence };
2810
- } catch (err) {
2811
- const { code, message } = classifyError(err);
2812
- callbacks.onSkillError(name, message);
2813
- // Use the resolved skill name when available so JSONL output matches
2814
- // the success path's identifier. Falls back to the trigger name only
2815
- // when resolveSkill itself threw.
2816
- const skillName = resolvedSkillName ?? name;
2817
- const errorReport: SkillReport = {
2818
- skill: skillName,
2819
- summary: `${skillName}: failed (${code})`,
2820
- findings: [],
2821
- durationMs: Date.now() - startTime,
2822
- model: runnerOptions?.model,
2823
- runtime,
2824
- error: { code, message, timestamp: new Date().toISOString() },
2825
- };
2826
- span.setAttribute('warden.finding.count', 0);
2827
- // Mirror the success / all-hunks-fail paths: emit a final completion
2828
- // event so non-TTY (log-mode) renderers print a per-skill summary
2829
- // line for the failure. Without this, log mode shows only the
2830
- // bare error string with no timing or duration.
2831
- callbacks.onSkillUpdate(name, {
2832
- status: 'error',
2833
- durationMs: errorReport.durationMs,
2834
- findings: [],
2835
- });
2836
- callbacks.onSkillComplete(name, errorReport);
2837
- return { name, report: errorReport, error: err, failOn, minConfidence };
2838
- }
2839
- },
2840
- );
2841
- }
2842
- &nbsp;
2843
- /**
2844
- * Create default progress callbacks for console output.
2845
- * In TTY mode: colored icons, chalk formatting.
2846
- * In non-TTY/log mode: timestamped lines with finding details.
2847
- */
2848
- export function createDefaultCallbacks(
2849
- tasks: SkillTaskOptions[],
2850
- mode: OutputMode,
2851
- verbosity: Verbosity
2852
- ): SkillProgressCallbacks {
2853
- /** Resolve the display name for a skill, falling back to the raw name. */
2854
- function displayNameFor(name: string): string {
2855
- return tasks.find((t) =&gt; t.name === name)?.displayName ?? <span class="branch-1 cbranch-no" title="branch not covered" >name;</span>
2856
- }
2857
- &nbsp;
2858
- /** Track per-skill skipped file counts for collapsed summary in non-TTY mode. */
2859
- const skippedCounts = new Map&lt;string, number&gt;();
2860
- &nbsp;
2861
- // Skipped skills also fire onSkillComplete (for the JSONL writer).
2862
- // Suppress the duplicate "completed" line for those names.
2863
- const skippedSkills = new Set&lt;string&gt;();
2864
- &nbsp;
2865
- return {
2866
- onSkillStart: (skill) =&gt; {
2867
- if (verbosity === Verbosity.Quiet) return;
2868
- if (!mode.isTTY) {
2869
- const fileCount = skill.files.length;
2870
- logPlain(`Running ${displayNameFor(skill.name)} (${fileCount} ${pluralize(fileCount, 'file')})...`);
2871
- }
2872
- },
2873
- onSkillUpdate: () =&gt; { /* no-op for default callbacks */ },
2874
- onFileUpdate: (_skillName, filename, updates) =&gt; {
2875
- if (updates.status === 'skipped') {
2876
- skippedCounts.set(_skillName, (skippedCounts.get(_skillName) ?? 0) + 1);
2877
- return;
2878
- }
2879
- if (verbosity === Verbosity.Quiet || mode.isTTY) return;
2880
- if (updates.status !== 'done') return;
2881
- const duration = updates.durationMs !== undefined ? formatDuration(updates.durationMs) : <span class="branch-1 cbranch-no" title="branch not covered" >'?';</span>
2882
- const cost = updates.usage ? ` ${formatCost(updates.usage.costUSD)}` : '';
2883
- const n = updates.findings?.length ?? <span class="branch-1 cbranch-no" title="branch not covered" >0;</span>
2884
- const suffix = n &gt; 0 ? ` ${n} ${pluralize(n, 'finding')}` : '';
2885
- logPlain(` ${displayNameFor(_skillName)} &gt; ${filename} done ${duration}${cost}${suffix}`);
2886
- },
2887
- onHunkStart: (skillName, filename, hunkNum, totalHunks, lineRange) =&gt; {
2888
- if (verbosity === Verbosity.Quiet || mode.isTTY) return;
2889
- logPlain(` ${displayNameFor(skillName)} &gt; ${filename} [${hunkNum}/${totalHunks}] ${lineRange}`);
2890
- },
2891
- onSkillComplete: (name, report) =&gt; {
2892
- if (verbosity === Verbosity.Quiet) return;
2893
- if (skippedSkills.has(name)) return;
2894
- const displayName = displayNameFor(name);
2895
- &nbsp;
2896
- // Errored runs render as failures, not as misleading "completed -
2897
- // 0 findings" lines with a green checkmark. onSkillError already
2898
- // printed the error message; this line carries timing only.
2899
- <span class="missing-if-branch" title="if path not taken" >I</span>if (report.error) {
2900
- <span class="cstat-no" title="statement not covered" > if (mode.isTTY) {</span>
2901
- const duration = <span class="cstat-no" title="statement not covered" >report.durationMs !== undefined ? ` ${chalk.dim(`[${formatDuration(report.durationMs)}]`)}` : '';</span>
2902
- <span class="cstat-no" title="statement not covered" > console.error(`${chalk.red('✗')} ${displayName}${duration} ${chalk.red(`(${report.error.code})`)}`);</span>
2903
- } else {
2904
- const duration = <span class="cstat-no" title="statement not covered" >report.durationMs !== undefined ? formatDuration(report.durationMs) : '?';</span>
2905
- <span class="cstat-no" title="statement not covered" > logPlain(`${displayName} failed in ${duration} (${report.error.code})`);</span>
2906
- }
2907
- <span class="cstat-no" title="statement not covered" > return;</span>
2908
- }
2909
- &nbsp;
2910
- <span class="missing-if-branch" title="if path not taken" >I</span>if (mode.isTTY) {
2911
- const duration = <span class="cstat-no" title="statement not covered" >report.durationMs !== undefined ? ` ${chalk.dim(`[${formatDuration(report.durationMs)}]`)}` : '';</span>
2912
- <span class="cstat-no" title="statement not covered" > console.error(`${chalk.green(ICON_CHECK)} ${displayName}${duration}`);</span>
2913
- &nbsp;
2914
- // Debug: log finding details
2915
- <span class="cstat-no" title="statement not covered" > if (verbosity &gt;= Verbosity.Debug &amp;&amp; report.findings.length &gt; 0) {</span>
2916
- <span class="cstat-no" title="statement not covered" > for (const finding of report.findings) {</span>
2917
- <span class="cstat-no" title="statement not covered" > debugLog(mode, `${formatSeverityPlain(finding.severity)} ${findingLocation(finding)}: ${finding.title}`);</span>
2918
- <span class="cstat-no" title="statement not covered" > if (finding.suggestedFix) {</span>
2919
- <span class="cstat-no" title="statement not covered" > debugLog(mode, ` fix: ${finding.suggestedFix.description}`);</span>
2920
- }
2921
- }
2922
- }
2923
- } else {
2924
- // Log mode: timestamped completion with duration and finding summary
2925
- const duration = report.durationMs !== undefined ? formatDuration(report.durationMs) : <span class="branch-1 cbranch-no" title="branch not covered" >'?';</span>
2926
- const counts = countBySeverity(report.findings);
2927
- const summary = formatFindingCountsPlain(counts);
2928
- logPlain(`${displayName} completed in ${duration} - ${summary}`);
2929
- &nbsp;
2930
- // Show per-finding lines at Verbose+ verbosity in log mode
2931
- // (the final report already shows findings with full detail)
2932
- if (verbosity &gt;= Verbosity.Verbose) {
2933
- for (const finding of report.findings) {
2934
- logPlain(` ${formatSeverityPlain(finding.severity)} ${findingLocation(finding)}: ${finding.title}`);
2935
- if (verbosity &gt;= Verbosity.Debug &amp;&amp; finding.suggestedFix) {
2936
- logPlain(` fix: ${finding.suggestedFix.description}`);
2937
- }
2938
- }
2939
- }
2940
- &nbsp;
2941
- const skipped = skippedCounts.get(name) ?? 0;
2942
- if (skipped &gt; 0) {
2943
- logPlain(` ${skipped} ${pluralize(skipped, 'file')} skipped`);
2944
- }
2945
- }
2946
- },
2947
- onSkillSkipped: (name) =&gt; {
2948
- skippedSkills.add(name);
2949
- <span class="missing-if-branch" title="if path not taken" >I</span>if (verbosity === Verbosity.Quiet) <span class="cstat-no" title="statement not covered" >return;</span>
2950
- const displayName = displayNameFor(name);
2951
- <span class="missing-if-branch" title="if path not taken" >I</span>if (mode.isTTY) {
2952
- <span class="cstat-no" title="statement not covered" > console.error(`${chalk.yellow(ICON_SKIPPED)} ${displayName} ${chalk.dim('[skipped]')}`);</span>
2953
- } else {
2954
- logPlain(`${displayName} skipped`);
2955
- }
2956
- },
2957
- onSkillError: (name, error) =&gt; {
2958
- <span class="missing-if-branch" title="if path not taken" >I</span>if (verbosity === Verbosity.Quiet) <span class="cstat-no" title="statement not covered" >return;</span>
2959
- const displayName = displayNameFor(name);
2960
- <span class="missing-if-branch" title="if path not taken" >I</span>if (mode.isTTY) {
2961
- <span class="cstat-no" title="statement not covered" > console.error(`${chalk.red('\u2717')} ${displayName} - ${chalk.red(error)}`);</span>
2962
- } else {
2963
- logPlain(`ERROR: ${displayName} - ${error}`);
2964
- const skipped = skippedCounts.get(name) ?? 0;
2965
- if (skipped &gt; 0) {
2966
- logPlain(` ${skipped} ${pluralize(skipped, 'file')} skipped`);
2967
- }
2968
- }
2969
- },
2970
- // Warn about large prompts (always shown unless quiet)
2971
- onLargePrompt: (_skillName, filename, lineRange, chars, estimatedTokens) =&gt; {
2972
- <span class="missing-if-branch" title="if path not taken" >I</span>if (verbosity === Verbosity.Quiet) <span class="cstat-no" title="statement not covered" >return;</span>
2973
- const location = `${filename}:${lineRange}`;
2974
- const size = `${Math.round(chars / 1000)}k chars (~${Math.round(estimatedTokens / 1000)}k tokens)`;
2975
- <span class="missing-if-branch" title="if path not taken" >I</span>if (mode.isTTY) {
2976
- <span class="cstat-no" title="statement not covered" > console.error(`${chalk.yellow(figures.warning)} Large prompt for ${location}: ${size}`);</span>
2977
- } else {
2978
- logPlain(`WARN: Large prompt for ${location}: ${size}`);
2979
- }
2980
- },
2981
- // Debug mode: show prompt sizes
2982
- onPromptSize: verbosity &gt;= Verbosity.Debug
2983
- ? <span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >(_</span>skillName, filename, lineRange, systemChars, userChars, totalChars, estimatedTokens) =&gt; {</span>
2984
- const location = <span class="cstat-no" title="statement not covered" >`${filename}:${lineRange}`;</span>
2985
- <span class="cstat-no" title="statement not covered" > debugLog(mode, `Prompt for ${location}: system=${systemChars}, user=${userChars}, total=${totalChars} chars (~${estimatedTokens} tokens)`);</span>
2986
- }
2987
- : undefined,
2988
- // Debug mode: show extraction results
2989
- onExtractionResult: verbosity &gt;= Verbosity.Debug
2990
- ? <span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >(_</span>skillName, filename, lineRange, findingsCount, method) =&gt; {</span>
2991
- <span class="cstat-no" title="statement not covered" > debugLog(mode, `Extracted ${findingsCount} ${pluralize(findingsCount, 'finding')} from ${filename}:${lineRange} via ${method}`);</span>
2992
- }
2993
- : undefined,
2994
- onFindingProcessing: verbosity &gt;= Verbosity.Debug
2995
- ? (_skillName, event) =&gt; {
2996
- debugLog(mode, formatFindingProcessingEvent(event));
2997
- }
2998
- : undefined,
2999
- // Verbose mode: show per-hunk analysis failures (spec: event #16 hunk_failed)
3000
- onHunkFailed: verbosity &gt;= Verbosity.Verbose
3001
- ? (_skillName, filename, lineRange, error) =&gt; {
3002
- const location = `${filename}:${lineRange}`;
3003
- if (mode.isTTY) {
3004
- console.error(`${chalk.yellow(figures.warning)} Chunk failed: ${location} ${chalk.dim(`\u2014 ${error}`)}`);
3005
- } else {
3006
- logPlain(`WARN: Chunk failed: ${location} \u2014 ${error}`);
3007
- }
3008
- }
3009
- : undefined,
3010
- // Verbose mode: show per-hunk extraction failures (spec: event #17 extraction_failure)
3011
- onExtractionFailure: verbosity &gt;= Verbosity.Verbose
3012
- ? (_skillName, filename, lineRange, error, preview) =&gt; {
3013
- const location = `${filename}:${lineRange}`;
3014
- <span class="missing-if-branch" title="if path not taken" >I</span>if (mode.isTTY) {
3015
- <span class="cstat-no" title="statement not covered" > console.error(`${chalk.yellow(figures.warning)} Extraction failed: ${location} ${chalk.dim(`\u2014 ${error}`)}`);</span>
3016
- <span class="cstat-no" title="statement not covered" > if (verbosity &gt;= Verbosity.Debug &amp;&amp; preview) {</span>
3017
- <span class="cstat-no" title="statement not covered" > debugLog(mode, ` Output preview: ${preview.slice(0, 200)}`);</span>
3018
- }
3019
- } else {
3020
- logPlain(`WARN: Extraction failed: ${location} \u2014 ${error}`);
3021
- if (verbosity &gt;= Verbosity.Debug &amp;&amp; preview) {
3022
- logPlain(`DEBUG: Output preview: ${preview.slice(0, 200)}`);
3023
- }
3024
- }
3025
- }
3026
- : undefined,
3027
- // Verbose mode: show retry attempts (spec: event #18 retry)
3028
- onRetry: verbosity &gt;= Verbosity.Verbose
3029
- ? (_skillName, filename, lineRange, attempt, maxRetries, error, delayMs) =&gt; {
3030
- const location = `${filename}:${lineRange}`;
3031
- const retryInfo = `attempt ${attempt}/${maxRetries}`;
3032
- const delay = delayMs &gt; 0 ? `, retrying in ${Math.round(delayMs / 1000)}s` : <span class="branch-1 cbranch-no" title="branch not covered" >'';</span>
3033
- <span class="missing-if-branch" title="if path not taken" >I</span>if (mode.isTTY) {
3034
- <span class="cstat-no" title="statement not covered" > debugLog(mode, `Retry ${location} (${retryInfo}${delay}): ${error}`);</span>
3035
- } else {
3036
- logPlain(`WARN: Retry ${location} (${retryInfo}${delay}): ${error}`);
3037
- }
3038
- }
3039
- : undefined,
3040
- };
3041
- }
3042
- &nbsp;
3043
- function composeAbortControllers(...controllers: (AbortController | undefined)[]): AbortController {
3044
- const composed = new AbortController();
3045
- &nbsp;
3046
- for (const ctrl of controllers) {
3047
- if (ctrl?.signal.aborted) {
3048
- composed.abort();
3049
- return composed;
3050
- }
3051
- ctrl?.signal.addEventListener('abort', () =&gt; composed.abort(), { once: true });
3052
- }
3053
- &nbsp;
3054
- return composed;
3055
- }
3056
- &nbsp;
3057
- /**
3058
- * Share abort/circuit state across task runner options.
3059
- */
3060
- export function composeTasksWithFailFast(
3061
- tasks: SkillTaskOptions[],
3062
- failFastController?: AbortController,
3063
- circuitBreaker?: ProviderFailureCircuitBreaker,
3064
- circuitAbortController?: AbortController,
3065
- ): SkillTaskOptions[] {
3066
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!failFastController &amp;&amp; !circuitBreaker &amp;&amp; <span class="branch-2 cbranch-no" title="branch not covered" >!circuitAbortController) <span class="cstat-no" title="statement not covered" >r</span>eturn tasks;</span>
3067
- &nbsp;
3068
- return tasks.map((task) =&gt; ({
3069
- ...task,
3070
- runnerOptions: {
3071
- ...task.runnerOptions,
3072
- abortController: composeAbortControllers(
3073
- task.runnerOptions?.abortController,
3074
- failFastController,
3075
- circuitAbortController,
3076
- ),
3077
- circuitBreaker: task.runnerOptions?.circuitBreaker ?? circuitBreaker,
3078
- },
3079
- }));
3080
- }
3081
- &nbsp;
3082
- /**
3083
- * Launch all skill tasks in parallel using a shared semaphore for concurrency.
3084
- */
3085
- export async function runComposedSkillTasks(
3086
- tasks: SkillTaskOptions[],
3087
- callbacks: SkillProgressCallbacks,
3088
- semaphore: Semaphore
3089
- ): Promise&lt;SkillTaskResult[]&gt; {
3090
- const results = await runPool(tasks, tasks.length,
3091
- (task) =&gt; runSkillTask(task, Number.MAX_SAFE_INTEGER, callbacks, semaphore),
3092
- { shouldAbort: () =&gt; tasks[0]?.runnerOptions?.abortController?.signal.aborted ?? <span class="branch-1 cbranch-no" title="branch not covered" >false }</span>
3093
- );
3094
- &nbsp;
3095
- return results;
3096
- }
3097
- &nbsp;
3098
- /**
3099
- * Run multiple skill tasks with optional concurrency.
3100
- * Uses callbacks to report progress for Ink rendering.
3101
- */
3102
- export async function runSkillTasks(
3103
- tasks: SkillTaskOptions[],
3104
- options: RunTasksOptions,
3105
- callbacks?: SkillProgressCallbacks
3106
- ): Promise&lt;SkillTaskResult[]&gt; {
3107
- const { mode, verbosity, concurrency, failFastController, onSkillComplete, onChunkComplete } = options;
3108
- &nbsp;
3109
- // Global semaphore gates file-level work across all skills.
3110
- // All skills launch immediately so the UI shows them as "running",
3111
- // but only `concurrency` files will be analysed at any time.
3112
- const semaphore = new Semaphore(concurrency);
3113
- &nbsp;
3114
- const effectiveCallbacks = callbacks ?? createDefaultCallbacks(tasks, mode, verbosity);
3115
- &nbsp;
3116
- const wrappedCallbacks: SkillProgressCallbacks = {
3117
- ...effectiveCallbacks,
3118
- ...(onSkillComplete || failFastController
3119
- ? {
3120
- onSkillComplete: (name: string, report: SkillReport) =&gt; {
3121
- effectiveCallbacks.onSkillComplete(name, report);
3122
- try { onSkillComplete?.(report); } catch { /* streaming hook must not break the run */ }
3123
- if (failFastController &amp;&amp; report.findings.length &gt; 0) {
3124
- failFastController.abort();
3125
- }
3126
- },
3127
- }
3128
- : {}),
3129
- ...(onChunkComplete
3130
- ? <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
3131
- onChunkComplete: <span class="fstat-no" title="function not covered" >(n</span>ame: string, chunk: ChunkAnalysisResult) =&gt; {
3132
- <span class="cstat-no" title="statement not covered" > effectiveCallbacks.onChunkComplete?.(name, chunk);</span>
3133
- <span class="cstat-no" title="statement not covered" > try { <span class="cstat-no" title="statement not covered" >onChunkComplete(name, chunk); }</span> catch { /* streaming hook must not break the run */ }</span>
3134
- },
3135
- }
3136
- : {}),
3137
- };
3138
- &nbsp;
3139
- // Output SKILLS header (TTY only - in log mode, "Running..." lines are sufficient)
3140
- <span class="missing-if-branch" title="if path not taken" >I</span>if (verbosity !== Verbosity.Quiet &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >tasks.length &gt; 0 &amp;&amp; <span class="branch-2 cbranch-no" title="branch not covered" >m</span>ode.isTTY) {</span>
3141
- <span class="cstat-no" title="statement not covered" > console.error(chalk.bold('SKILLS'));</span>
3142
- }
3143
- &nbsp;
3144
- const circuitAbortController = new AbortController();
3145
- const circuitBreaker = new ProviderFailureCircuitBreaker({ abortController: circuitAbortController });
3146
- const composedTasks = composeTasksWithFailFast(
3147
- tasks,
3148
- failFastController,
3149
- circuitBreaker,
3150
- circuitAbortController,
3151
- );
3152
- &nbsp;
3153
- // Listen for abort signal to show interrupt message (non-TTY only; Ink handles TTY)
3154
- const abortSignal = composedTasks[0]?.runnerOptions?.abortController?.signal;
3155
- <span class="missing-if-branch" title="if path not taken" >I</span>if (abortSignal &amp;&amp; !abortSignal.aborted &amp;&amp; !mode.isTTY &amp;&amp; verbosity !== Verbosity.Quiet) {
3156
- <span class="cstat-no" title="statement not covered" > abortSignal.addEventListener('abort', <span class="fstat-no" title="function not covered" >() =&gt; {</span></span>
3157
- // Only show interrupt message for user SIGINT, not fail-fast
3158
- <span class="cstat-no" title="statement not covered" > if (!failFastController?.signal.aborted &amp;&amp; !circuitAbortController.signal.aborted) {</span>
3159
- <span class="cstat-no" title="statement not covered" > logPlain('Interrupted, finishing up... (press Ctrl+C again to force exit)');</span>
3160
- }
3161
- }, { once: true });
3162
- }
3163
- &nbsp;
3164
- // Show fail-fast message when triggered (non-TTY only)
3165
- <span class="missing-if-branch" title="if path not taken" >I</span>if (failFastController &amp;&amp; !mode.isTTY &amp;&amp; verbosity !== Verbosity.Quiet) {
3166
- <span class="cstat-no" title="statement not covered" > failFastController.signal.addEventListener('abort', <span class="fstat-no" title="function not covered" >() =&gt; {</span></span>
3167
- <span class="cstat-no" title="statement not covered" > logPlain('Stopping \u2014 finding detected (--fail-fast)');</span>
3168
- }, { once: true });
3169
- }
3170
- &nbsp;
3171
- // Launch all skills in parallel; the semaphore is the sole concurrency gate.
3172
- return runComposedSkillTasks(composedTasks, wrappedCallbacks, semaphore);
3173
- }
3174
- &nbsp;</pre></td></tr></table></pre>
3175
-
3176
- <div class='push'></div><!-- for sticky footer -->
3177
- </div><!-- /wrapper -->
3178
- <div class='footer quiet pad2 space-top1 center small'>
3179
- Code coverage generated by
3180
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
3181
- at 2026-05-17T04:35:52.381Z
3182
- </div>
3183
- <script src="../../../prettify.js"></script>
3184
- <script>
3185
- window.onload = function () {
3186
- prettyPrint();
3187
- };
3188
- </script>
3189
- <script src="../../../sorter.js"></script>
3190
- <script src="../../../block-navigation.js"></script>
3191
- </body>
3192
- </html>
3193
-