@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.
- package/.oxlintrc.json +4 -3
- package/CHANGELOG.md +20 -0
- package/README.md +1 -1
- package/dist/output/renderer.js +3 -3
- package/dist/output/renderer.js.map +1 -1
- package/dist/sdk/analyze.js +1 -0
- package/dist/sdk/analyze.js.map +1 -1
- package/dist/sdk/prompt-sections.d.ts +2 -0
- package/dist/sdk/prompt-sections.d.ts.map +1 -1
- package/dist/sdk/prompt-sections.js +8 -2
- package/dist/sdk/prompt-sections.js.map +1 -1
- package/dist/sdk/prompt.d.ts.map +1 -1
- package/dist/sdk/prompt.js +8 -6
- package/dist/sdk/prompt.js.map +1 -1
- package/dist/sdk/verify.d.ts.map +1 -1
- package/dist/sdk/verify.js +5 -1
- package/dist/sdk/verify.js.map +1 -1
- package/package.json +16 -8
- package/src/builtin-skills/code-review/SKILL.md +1 -1
- package/src/builtin-skills/security-review/SKILL.md +1 -1
- package/test-results.junit.xml +2330 -2297
- package/.cursor/mcp.json +0 -7
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -87
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +0 -446
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -210
- package/coverage/lcov-report/src/action/checks/index.html +0 -116
- package/coverage/lcov-report/src/action/checks/manager.ts.html +0 -499
- package/coverage/lcov-report/src/action/error-reporting.ts.html +0 -181
- package/coverage/lcov-report/src/action/fix-evaluation/github.ts.html +0 -508
- package/coverage/lcov-report/src/action/fix-evaluation/index.html +0 -161
- package/coverage/lcov-report/src/action/fix-evaluation/index.ts.html +0 -1243
- package/coverage/lcov-report/src/action/fix-evaluation/judge.ts.html +0 -817
- package/coverage/lcov-report/src/action/fix-evaluation/types.ts.html +0 -274
- package/coverage/lcov-report/src/action/index.html +0 -161
- package/coverage/lcov-report/src/action/inputs.ts.html +0 -529
- package/coverage/lcov-report/src/action/pi-ncc-compat.ts.html +0 -292
- package/coverage/lcov-report/src/action/review/coordination.ts.html +0 -208
- package/coverage/lcov-report/src/action/review/index.html +0 -131
- package/coverage/lcov-report/src/action/review/poster.ts.html +0 -1051
- package/coverage/lcov-report/src/action/review-state.ts.html +0 -280
- package/coverage/lcov-report/src/action/triggers/executor.ts.html +0 -856
- package/coverage/lcov-report/src/action/triggers/index.html +0 -116
- package/coverage/lcov-report/src/action/workflow/base.ts.html +0 -1135
- package/coverage/lcov-report/src/action/workflow/index.html +0 -146
- package/coverage/lcov-report/src/action/workflow/pr-workflow.ts.html +0 -2713
- package/coverage/lcov-report/src/action/workflow/schedule.ts.html +0 -1027
- package/coverage/lcov-report/src/cli/args.ts.html +0 -1657
- package/coverage/lcov-report/src/cli/commands/add.ts.html +0 -1567
- package/coverage/lcov-report/src/cli/commands/build.ts.html +0 -1618
- package/coverage/lcov-report/src/cli/commands/index.html +0 -191
- package/coverage/lcov-report/src/cli/commands/init.ts.html +0 -1357
- package/coverage/lcov-report/src/cli/commands/runs.ts.html +0 -2560
- package/coverage/lcov-report/src/cli/commands/setup-app/browser.ts.html +0 -214
- package/coverage/lcov-report/src/cli/commands/setup-app/credentials.ts.html +0 -220
- package/coverage/lcov-report/src/cli/commands/setup-app/index.html +0 -161
- package/coverage/lcov-report/src/cli/commands/setup-app/manifest.ts.html +0 -235
- package/coverage/lcov-report/src/cli/commands/setup-app/server.ts.html +0 -601
- package/coverage/lcov-report/src/cli/commands/setup-app.ts.html +0 -571
- package/coverage/lcov-report/src/cli/commands/sync.ts.html +0 -475
- package/coverage/lcov-report/src/cli/context.ts.html +0 -532
- package/coverage/lcov-report/src/cli/diff-apply.ts.html +0 -334
- package/coverage/lcov-report/src/cli/files.ts.html +0 -904
- package/coverage/lcov-report/src/cli/fix.ts.html +0 -1060
- package/coverage/lcov-report/src/cli/git.ts.html +0 -1201
- package/coverage/lcov-report/src/cli/help.ts.html +0 -1696
- package/coverage/lcov-report/src/cli/index.html +0 -281
- package/coverage/lcov-report/src/cli/input.ts.html +0 -397
- package/coverage/lcov-report/src/cli/log-cleanup.ts.html +0 -337
- package/coverage/lcov-report/src/cli/main.ts.html +0 -5107
- package/coverage/lcov-report/src/cli/output/box.ts.html +0 -790
- package/coverage/lcov-report/src/cli/output/formatters.ts.html +0 -1099
- package/coverage/lcov-report/src/cli/output/icons.ts.html +0 -142
- package/coverage/lcov-report/src/cli/output/index.html +0 -281
- package/coverage/lcov-report/src/cli/output/index.ts.html +0 -295
- package/coverage/lcov-report/src/cli/output/ink-runner.tsx.html +0 -1597
- package/coverage/lcov-report/src/cli/output/jsonl-schema-gen.ts.html +0 -355
- package/coverage/lcov-report/src/cli/output/jsonl.ts.html +0 -2137
- package/coverage/lcov-report/src/cli/output/live-status.tsx.html +0 -916
- package/coverage/lcov-report/src/cli/output/reporter.ts.html +0 -1630
- package/coverage/lcov-report/src/cli/output/tasks.ts.html +0 -3193
- package/coverage/lcov-report/src/cli/output/tty.ts.html +0 -310
- package/coverage/lcov-report/src/cli/output/verbosity.ts.html +0 -181
- package/coverage/lcov-report/src/cli/signals.ts.html +0 -199
- package/coverage/lcov-report/src/cli/terminal.ts.html +0 -1060
- package/coverage/lcov-report/src/config/index.html +0 -161
- package/coverage/lcov-report/src/config/index.ts.html +0 -94
- package/coverage/lcov-report/src/config/loader.ts.html +0 -1753
- package/coverage/lcov-report/src/config/schema.ts.html +0 -910
- package/coverage/lcov-report/src/config/writer.ts.html +0 -538
- package/coverage/lcov-report/src/diff/apply.ts.html +0 -241
- package/coverage/lcov-report/src/diff/classify.ts.html +0 -361
- package/coverage/lcov-report/src/diff/coalesce.ts.html +0 -1123
- package/coverage/lcov-report/src/diff/context.ts.html +0 -952
- package/coverage/lcov-report/src/diff/index.html +0 -191
- package/coverage/lcov-report/src/diff/index.ts.html +0 -100
- package/coverage/lcov-report/src/diff/parser.ts.html +0 -532
- package/coverage/lcov-report/src/evals/harness.ts.html +0 -700
- package/coverage/lcov-report/src/evals/index.html +0 -221
- package/coverage/lcov-report/src/evals/index.ts.html +0 -955
- package/coverage/lcov-report/src/evals/names.ts.html +0 -121
- package/coverage/lcov-report/src/evals/runner.ts.html +0 -664
- package/coverage/lcov-report/src/evals/scaffold.ts.html +0 -970
- package/coverage/lcov-report/src/evals/types.ts.html +0 -661
- package/coverage/lcov-report/src/evals/usage.ts.html +0 -178
- package/coverage/lcov-report/src/evals/verify.ts.html +0 -1054
- package/coverage/lcov-report/src/event/context.ts.html +0 -490
- package/coverage/lcov-report/src/event/index.html +0 -116
- package/coverage/lcov-report/src/index.html +0 -116
- package/coverage/lcov-report/src/output/dedup.ts.html +0 -2950
- package/coverage/lcov-report/src/output/github-checks.ts.html +0 -1579
- package/coverage/lcov-report/src/output/index.html +0 -161
- package/coverage/lcov-report/src/output/renderer.ts.html +0 -988
- package/coverage/lcov-report/src/output/stale.ts.html +0 -640
- package/coverage/lcov-report/src/sdk/analyze.ts.html +0 -3010
- package/coverage/lcov-report/src/sdk/auth.ts.html +0 -217
- package/coverage/lcov-report/src/sdk/circuit-breaker.ts.html +0 -304
- package/coverage/lcov-report/src/sdk/errors.ts.html +0 -658
- package/coverage/lcov-report/src/sdk/extract.ts.html +0 -1810
- package/coverage/lcov-report/src/sdk/fix-quality.ts.html +0 -841
- package/coverage/lcov-report/src/sdk/haiku.ts.html +0 -1456
- package/coverage/lcov-report/src/sdk/index.html +0 -416
- package/coverage/lcov-report/src/sdk/json-output.ts.html +0 -508
- package/coverage/lcov-report/src/sdk/model-pricing.json.html +0 -499
- package/coverage/lcov-report/src/sdk/otel.ts.html +0 -433
- package/coverage/lcov-report/src/sdk/post-process.ts.html +0 -412
- package/coverage/lcov-report/src/sdk/prepare.ts.html +0 -400
- package/coverage/lcov-report/src/sdk/pricing.ts.html +0 -778
- package/coverage/lcov-report/src/sdk/prompt-sections.ts.html +0 -595
- package/coverage/lcov-report/src/sdk/prompt.ts.html +0 -451
- package/coverage/lcov-report/src/sdk/report-files.ts.html +0 -166
- package/coverage/lcov-report/src/sdk/retry.ts.html +0 -202
- package/coverage/lcov-report/src/sdk/runner.ts.html +0 -400
- package/coverage/lcov-report/src/sdk/runtimes/claude.ts.html +0 -1693
- package/coverage/lcov-report/src/sdk/runtimes/index.html +0 -176
- package/coverage/lcov-report/src/sdk/runtimes/index.ts.html +0 -244
- package/coverage/lcov-report/src/sdk/runtimes/model-selectors.ts.html +0 -328
- package/coverage/lcov-report/src/sdk/runtimes/pi.ts.html +0 -2104
- package/coverage/lcov-report/src/sdk/runtimes/types.ts.html +0 -508
- package/coverage/lcov-report/src/sdk/types.ts.html +0 -730
- package/coverage/lcov-report/src/sdk/usage.ts.html +0 -502
- package/coverage/lcov-report/src/sdk/verify.ts.html +0 -1027
- package/coverage/lcov-report/src/sentry.ts.html +0 -994
- package/coverage/lcov-report/src/skill-builder/agentic.ts.html +0 -1063
- package/coverage/lcov-report/src/skill-builder/authoring-provider.ts.html +0 -334
- package/coverage/lcov-report/src/skill-builder/definition.ts.html +0 -748
- package/coverage/lcov-report/src/skill-builder/index.html +0 -236
- package/coverage/lcov-report/src/skill-builder/outline-contract.ts.html +0 -400
- package/coverage/lcov-report/src/skill-builder/outline-state.ts.html +0 -382
- package/coverage/lcov-report/src/skill-builder/outline.ts.html +0 -1402
- package/coverage/lcov-report/src/skill-builder/skill-contract.ts.html +0 -382
- package/coverage/lcov-report/src/skill-builder/skill-prompts.ts.html +0 -1180
- package/coverage/lcov-report/src/skill-builder/skill.ts.html +0 -2398
- package/coverage/lcov-report/src/skills/index.html +0 -131
- package/coverage/lcov-report/src/skills/loader.ts.html +0 -1693
- package/coverage/lcov-report/src/skills/remote.ts.html +0 -1909
- package/coverage/lcov-report/src/triggers/index.html +0 -116
- package/coverage/lcov-report/src/triggers/matcher.ts.html +0 -841
- package/coverage/lcov-report/src/types/index.html +0 -116
- package/coverage/lcov-report/src/types/index.ts.html +0 -1240
- package/coverage/lcov-report/src/utils/async.ts.html +0 -331
- package/coverage/lcov-report/src/utils/exec.ts.html +0 -496
- package/coverage/lcov-report/src/utils/index.html +0 -176
- package/coverage/lcov-report/src/utils/index.ts.html +0 -313
- package/coverage/lcov-report/src/utils/path.ts.html +0 -202
- package/coverage/lcov-report/src/utils/version.ts.html +0 -136
- 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"> </span>
|
|
1103
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1104
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1105
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1106
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1107
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1108
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1109
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1110
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1111
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1112
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1113
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1114
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1115
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1116
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1117
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1118
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1119
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1120
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1121
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1122
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1123
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1124
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1125
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1126
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1127
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1128
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1129
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1130
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1131
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1132
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1133
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1134
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1135
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1136
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1137
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1138
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1139
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1140
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1141
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1142
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1143
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1144
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1145
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1146
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1147
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1148
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1149
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1150
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1151
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1152
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1153
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1154
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1155
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1159
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1160
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1161
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1162
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1163
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1164
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1165
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1166
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1167
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1168
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1169
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1170
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1171
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1172
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1176
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1180
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1181
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1182
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1186
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1187
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1188
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1192
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1193
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1194
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1195
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1196
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1197
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1198
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1199
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1200
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1201
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1202
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1203
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1204
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1205
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1206
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1207
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1208
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1209
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1210
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1211
|
-
<span class="cline-any cline-yes">33x</span>
|
|
1212
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1213
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1214
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1215
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1216
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1217
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1218
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1219
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1220
|
-
<span class="cline-any cline-no"> </span>
|
|
1221
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1222
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1223
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1224
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1225
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1226
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1227
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1228
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1229
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1233
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1234
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1235
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1236
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1237
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1238
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1243
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1244
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1245
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1246
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1247
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1248
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1249
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1250
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1251
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1252
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1253
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1254
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1255
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1256
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1257
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1258
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1259
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1260
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1261
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1262
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1263
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1264
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1265
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1266
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1267
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1268
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1269
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1270
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1271
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1272
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1273
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1274
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1275
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1276
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1277
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1278
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1279
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1280
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1281
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1282
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1283
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1284
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1285
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1286
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1287
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1288
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1289
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1290
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1291
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1292
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1293
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1294
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1295
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1296
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1297
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1298
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1299
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1300
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1301
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1302
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1303
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1304
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1305
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1306
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1307
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1308
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1309
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1310
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1311
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1312
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1313
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1314
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1315
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1316
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1317
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1318
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1319
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1320
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1321
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1322
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1323
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1324
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1325
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1326
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1327
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1328
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1329
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1330
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1331
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1332
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1333
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1334
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1335
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1336
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1337
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1338
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1339
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1340
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1341
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1342
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1343
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1344
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1345
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1346
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1347
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1348
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1349
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1350
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1351
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1352
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1353
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1354
|
-
<span class="cline-any cline-yes">14x</span>
|
|
1355
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1356
|
-
<span class="cline-any cline-yes">14x</span>
|
|
1357
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1358
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1362
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1367
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1368
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1372
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1373
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1374
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1375
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1376
|
-
<span class="cline-any cline-yes">14x</span>
|
|
1377
|
-
<span class="cline-any cline-neutral"> </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"> </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"> </span>
|
|
1387
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1388
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1389
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1390
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1391
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1392
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1393
|
-
<span class="cline-any cline-yes">11x</span>
|
|
1394
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1395
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1396
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1397
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1398
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1399
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1400
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1401
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1402
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1403
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1404
|
-
<span class="cline-any cline-neutral"> </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"> </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"> </span>
|
|
1411
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1412
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1413
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1414
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1415
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1416
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1417
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1418
|
-
<span class="cline-any cline-yes">10x</span>
|
|
1419
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1420
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1421
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1422
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1423
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1424
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1425
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1426
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1427
|
-
<span class="cline-any cline-yes">10x</span>
|
|
1428
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1429
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1430
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1431
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1432
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1433
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1434
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1435
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1436
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1437
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1438
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1442
|
-
<span class="cline-any cline-no"> </span>
|
|
1443
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1444
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1445
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1446
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1447
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1448
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1449
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1454
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1459
|
-
<span class="cline-any cline-yes">10x</span>
|
|
1460
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1461
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1462
|
-
<span class="cline-any cline-no"> </span>
|
|
1463
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1464
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1465
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1466
|
-
<span class="cline-any cline-no"> </span>
|
|
1467
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1468
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1469
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1470
|
-
<span class="cline-any cline-no"> </span>
|
|
1471
|
-
<span class="cline-any cline-no"> </span>
|
|
1472
|
-
<span class="cline-any cline-no"> </span>
|
|
1473
|
-
<span class="cline-any cline-no"> </span>
|
|
1474
|
-
<span class="cline-any cline-no"> </span>
|
|
1475
|
-
<span class="cline-any cline-no"> </span>
|
|
1476
|
-
<span class="cline-any cline-no"> </span>
|
|
1477
|
-
<span class="cline-any cline-no"> </span>
|
|
1478
|
-
<span class="cline-any cline-no"> </span>
|
|
1479
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1480
|
-
<span class="cline-any cline-no"> </span>
|
|
1481
|
-
<span class="cline-any cline-no"> </span>
|
|
1482
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1483
|
-
<span class="cline-any cline-no"> </span>
|
|
1484
|
-
<span class="cline-any cline-no"> </span>
|
|
1485
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1486
|
-
<span class="cline-any cline-no"> </span>
|
|
1487
|
-
<span class="cline-any cline-no"> </span>
|
|
1488
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1489
|
-
<span class="cline-any cline-no"> </span>
|
|
1490
|
-
<span class="cline-any cline-no"> </span>
|
|
1491
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1492
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1493
|
-
<span class="cline-any cline-no"> </span>
|
|
1494
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1495
|
-
<span class="cline-any cline-no"> </span>
|
|
1496
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1497
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1498
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1499
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1500
|
-
<span class="cline-any cline-no"> </span>
|
|
1501
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1502
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1503
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1504
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1505
|
-
<span class="cline-any cline-no"> </span>
|
|
1506
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1507
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1508
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1509
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1510
|
-
<span class="cline-any cline-no"> </span>
|
|
1511
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1512
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1513
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1514
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1515
|
-
<span class="cline-any cline-no"> </span>
|
|
1516
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1517
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1518
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1519
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1520
|
-
<span class="cline-any cline-no"> </span>
|
|
1521
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1522
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1523
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1524
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1525
|
-
<span class="cline-any cline-no"> </span>
|
|
1526
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1527
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1528
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1529
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1530
|
-
<span class="cline-any cline-no"> </span>
|
|
1531
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1532
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1533
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1534
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1535
|
-
<span class="cline-any cline-yes">10x</span>
|
|
1536
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1537
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1538
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1539
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1540
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1541
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1542
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1543
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1544
|
-
<span class="cline-any cline-neutral"> </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"> </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"> </span>
|
|
1553
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1554
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1555
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1556
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1557
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1558
|
-
<span class="cline-any cline-yes">10x</span>
|
|
1559
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1560
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1561
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1562
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1563
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1564
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1565
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1566
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1567
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1568
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1569
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1570
|
-
<span class="cline-any cline-yes">14x</span>
|
|
1571
|
-
<span class="cline-any cline-no"> </span>
|
|
1572
|
-
<span class="cline-any cline-no"> </span>
|
|
1573
|
-
<span class="cline-any cline-no"> </span>
|
|
1574
|
-
<span class="cline-any cline-no"> </span>
|
|
1575
|
-
<span class="cline-any cline-no"> </span>
|
|
1576
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1577
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1578
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1582
|
-
<span class="cline-any cline-neutral"> </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"> </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"> </span>
|
|
1589
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1590
|
-
<span class="cline-any cline-yes">10x</span>
|
|
1591
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1592
|
-
<span class="cline-any cline-yes">10x</span>
|
|
1593
|
-
<span class="cline-any cline-no"> </span>
|
|
1594
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1595
|
-
<span class="cline-any cline-yes">10x</span>
|
|
1596
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1597
|
-
<span class="cline-any cline-yes">10x</span>
|
|
1598
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1599
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1600
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1601
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1602
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1603
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1607
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1608
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1609
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1610
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1620
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1621
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1622
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1623
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1624
|
-
<span class="cline-any cline-yes">10x</span>
|
|
1625
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1629
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1630
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1631
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1632
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1633
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1634
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1635
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1636
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1637
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1638
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1642
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1643
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1644
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1645
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1646
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1647
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1648
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1649
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1650
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1651
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1652
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1653
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1654
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1655
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1656
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1657
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1658
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1662
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1663
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1664
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1665
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1666
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1667
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1668
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1669
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1670
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1671
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1672
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1673
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1674
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1681
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1682
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1683
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1684
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1685
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1686
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1687
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1688
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1689
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1690
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1691
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1692
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1693
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1697
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1698
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1699
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1700
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1701
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1702
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1703
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1704
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1705
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1706
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1707
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1708
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1709
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1710
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1711
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1712
|
-
<span class="cline-any cline-no"> </span>
|
|
1713
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1714
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1718
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1719
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1720
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1721
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1722
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1723
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1724
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1725
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1726
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1727
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1731
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1732
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1733
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1734
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1735
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1736
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1737
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1738
|
-
<span class="cline-any cline-yes">14x</span>
|
|
1739
|
-
<span class="cline-any cline-no"> </span>
|
|
1740
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1744
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1745
|
-
<span class="cline-any cline-no"> </span>
|
|
1746
|
-
<span class="cline-any cline-neutral"> </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"> </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"> </span>
|
|
1753
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1754
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1755
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1756
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1760
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1761
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1762
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1763
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1764
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1765
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1766
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1767
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1768
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1769
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1770
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1771
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1772
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1773
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1774
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1778
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1779
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1783
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1784
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1785
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1786
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1787
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1788
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1789
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1790
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1791
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1792
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1793
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1794
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1795
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1796
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1797
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1798
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1799
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1803
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1804
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1805
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1806
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1807
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1808
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1809
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1810
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1811
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1812
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1813
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1814
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1815
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1816
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1817
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1818
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1819
|
-
<span class="cline-any cline-yes">18x</span>
|
|
1820
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1821
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1822
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1823
|
-
<span class="cline-any cline-yes">94x</span>
|
|
1824
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1825
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1826
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1827
|
-
<span class="cline-any cline-yes">94x</span>
|
|
1828
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1829
|
-
<span class="cline-any cline-yes">94x</span>
|
|
1830
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1836
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1837
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1838
|
-
<span class="cline-any cline-neutral"> </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"> </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"> </span>
|
|
1851
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1855
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1860
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1861
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1862
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1863
|
-
<span class="cline-any cline-yes">8x</span>
|
|
1864
|
-
<span class="cline-any cline-no"> </span>
|
|
1865
|
-
<span class="cline-any cline-no"> </span>
|
|
1866
|
-
<span class="cline-any cline-no"> </span>
|
|
1867
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1868
|
-
<span class="cline-any cline-no"> </span>
|
|
1869
|
-
<span class="cline-any cline-no"> </span>
|
|
1870
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1871
|
-
<span class="cline-any cline-no"> </span>
|
|
1872
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1873
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1874
|
-
<span class="cline-any cline-yes">8x</span>
|
|
1875
|
-
<span class="cline-any cline-no"> </span>
|
|
1876
|
-
<span class="cline-any cline-no"> </span>
|
|
1877
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1878
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1879
|
-
<span class="cline-any cline-no"> </span>
|
|
1880
|
-
<span class="cline-any cline-no"> </span>
|
|
1881
|
-
<span class="cline-any cline-no"> </span>
|
|
1882
|
-
<span class="cline-any cline-no"> </span>
|
|
1883
|
-
<span class="cline-any cline-no"> </span>
|
|
1884
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1885
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1886
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1887
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1888
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1894
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1895
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1902
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1903
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1904
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1909
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1910
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1911
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1917
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1918
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1919
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1920
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1921
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1926
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1932
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1933
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1934
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1935
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1941
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1942
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1943
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1944
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1945
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1946
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1947
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1948
|
-
<span class="cline-any cline-no"> </span>
|
|
1949
|
-
<span class="cline-any cline-no"> </span>
|
|
1950
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1951
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1952
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1953
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1954
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1955
|
-
<span class="cline-any cline-no"> </span>
|
|
1956
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1957
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1958
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1959
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1960
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1961
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1962
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1963
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1964
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1965
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1970
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1971
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1972
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1973
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1974
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1975
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1976
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1980
|
-
<span class="cline-any cline-no"> </span>
|
|
1981
|
-
<span class="cline-any cline-no"> </span>
|
|
1982
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1983
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1988
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1989
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1990
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1991
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1992
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1993
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
1999
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2000
|
-
<span class="cline-any cline-yes">1x</span>
|
|
2001
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2002
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2003
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2004
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2005
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2006
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2007
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2008
|
-
<span class="cline-any cline-yes">6x</span>
|
|
2009
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
2015
|
-
<span class="cline-any cline-yes">6x</span>
|
|
2016
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2017
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2018
|
-
<span class="cline-any cline-yes">2x</span>
|
|
2019
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2020
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2021
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2022
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2023
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2024
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2025
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2026
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2027
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2028
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2029
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2030
|
-
<span class="cline-any cline-yes">4x</span>
|
|
2031
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2032
|
-
<span class="cline-any cline-yes">6x</span>
|
|
2033
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2034
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2035
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2036
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2037
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2038
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2039
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2040
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2041
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2042
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2043
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2044
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2045
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2046
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2047
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2048
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2049
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2050
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2051
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2052
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2053
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
2058
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2059
|
-
<span class="cline-any cline-yes">4x</span>
|
|
2060
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2061
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2062
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2063
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2064
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2065
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2066
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2067
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2068
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2069
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2070
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2071
|
-
<span class="cline-any cline-yes">4x</span>
|
|
2072
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2073
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2074
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2075
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2076
|
-
<span class="cline-any cline-yes">4x</span>
|
|
2077
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2078
|
-
<span class="cline-any cline-yes">4x</span>
|
|
2079
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2080
|
-
<span class="cline-any cline-yes">4x</span>
|
|
2081
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2082
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2083
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2084
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
2090
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2091
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2092
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2093
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2094
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2095
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2096
|
-
<span class="cline-any cline-no"> </span>
|
|
2097
|
-
<span class="cline-any cline-no"> </span>
|
|
2098
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2099
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2100
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2101
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2102
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2103
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2104
|
-
<span class="cline-any cline-yes">4x</span>
|
|
2105
|
-
<span class="cline-any cline-no"> </span>
|
|
2106
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2107
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
2112
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2113
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2114
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2115
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2116
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2117
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
2121
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2122
|
-
<span class="cline-any cline-no"> </span>
|
|
2123
|
-
<span class="cline-any cline-no"> </span>
|
|
2124
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2125
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2126
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2127
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2128
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2129
|
-
<span class="cline-any cline-yes">4x</span>
|
|
2130
|
-
<span class="cline-any cline-no"> </span>
|
|
2131
|
-
<span class="cline-any cline-no"> </span>
|
|
2132
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2133
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2134
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2135
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2136
|
-
<span class="cline-any cline-yes">4x</span>
|
|
2137
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2138
|
-
<span class="cline-any cline-neutral"> </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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2188
|
-
function allAnalysisFailuresHaveCode(
|
|
2189
|
-
hunkFailures: HunkFailure[],
|
|
2190
|
-
code: ErrorCode,
|
|
2191
|
-
): boolean {
|
|
2192
|
-
const analysisFailures = hunkFailures.filter((failure) => failure.type === 'analysis');
|
|
2193
|
-
return (
|
|
2194
|
-
analysisFailures.length > 0
|
|
2195
|
-
&& analysisFailures.every((failure) => failure.code === code)
|
|
2196
|
-
);
|
|
2197
|
-
}
|
|
2198
|
-
|
|
2199
|
-
function firstAnalysisFailureMessage(hunkFailures: HunkFailure[], code: ErrorCode): string | undefined {
|
|
2200
|
-
return hunkFailures.find((failure) => failure.type === 'analysis' && failure.code === code)?.message;
|
|
2201
|
-
}
|
|
2202
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2270
|
-
function findingSummary(finding: Finding): string {
|
|
2271
|
-
return `${findingLocation(finding)}: ${finding.title}`;
|
|
2272
|
-
}
|
|
2273
|
-
|
|
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" >` -> ${findingSummary(event.replacement)}` : '</span>';
|
|
2277
|
-
return `${event.stage}:${event.action} ${findingSummary(event.finding)}${replacement}${reason}`;
|
|
2278
|
-
}
|
|
2279
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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: () => Promise<SkillDefinition>;
|
|
2331
|
-
/** The event context with files to analyze */
|
|
2332
|
-
context: EventContext;
|
|
2333
|
-
/** Options passed to the runner */
|
|
2334
|
-
runnerOptions?: SkillRunnerOptions;
|
|
2335
|
-
}
|
|
2336
|
-
|
|
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) => void;
|
|
2348
|
-
/** Hook fired after each chunk finishes; used by the CLI to stream JSONL to disk. */
|
|
2349
|
-
onChunkComplete?: (skillName: string, chunk: ChunkAnalysisResult) => void;
|
|
2350
|
-
}
|
|
2351
|
-
|
|
2352
|
-
/**
|
|
2353
|
-
* Callbacks for reporting skill execution progress to the UI.
|
|
2354
|
-
*/
|
|
2355
|
-
export interface SkillProgressCallbacks {
|
|
2356
|
-
onSkillStart: (skill: SkillState) => void;
|
|
2357
|
-
onSkillUpdate: (name: string, updates: Partial<SkillState>) => void;
|
|
2358
|
-
onFileUpdate: (skillName: string, filename: string, updates: Partial<FileState>) => 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) => void;
|
|
2361
|
-
onChunkComplete?: (skillName: string, chunk: ChunkAnalysisResult) => void;
|
|
2362
|
-
onSkillComplete: (name: string, report: SkillReport) => void;
|
|
2363
|
-
onSkillSkipped: (name: string) => void;
|
|
2364
|
-
onSkillError: (name: string, error: string) => void;
|
|
2365
|
-
/** Called when a prompt exceeds the large prompt threshold */
|
|
2366
|
-
onLargePrompt?: (skillName: string, filename: string, lineRange: string, chars: number, estimatedTokens: number) => 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) => void;
|
|
2369
|
-
/** Called with extraction result details (debug mode) */
|
|
2370
|
-
onExtractionResult?: (skillName: string, filename: string, lineRange: string, findingsCount: number, method: 'regex' | 'llm' | 'none') => void;
|
|
2371
|
-
/** Called when findings are dropped, revised, merged, or stripped after analysis */
|
|
2372
|
-
onFindingProcessing?: (skillName: string, event: FindingProcessingEvent) => void;
|
|
2373
|
-
/** Called when hunk analysis fails (SDK error, API error, abort) */
|
|
2374
|
-
onHunkFailed?: (skillName: string, filename: string, lineRange: string, error: string) => 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) => 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) => void;
|
|
2379
|
-
}
|
|
2380
|
-
|
|
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<SkillTaskResult> {
|
|
2390
|
-
const { name, displayName = name, triggerName, failOn, minConfidence, resolveSkill, context, runnerOptions = {} } = options;
|
|
2391
|
-
|
|
2392
|
-
return Sentry.startSpan(
|
|
2393
|
-
{ op: 'skill.run', name: `run ${displayName}` },
|
|
2394
|
-
async (span) => {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2424
|
-
// Prepare files (parse patches into hunks)
|
|
2425
|
-
const { files: preparedFiles, skippedFiles } = prepareFiles(context, {
|
|
2426
|
-
contextLines: runnerOptions.contextLines,
|
|
2427
|
-
});
|
|
2428
|
-
|
|
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 > 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
|
-
|
|
2453
|
-
// Initialize file states
|
|
2454
|
-
const fileStates: FileState[] = preparedFiles.map((file) => ({
|
|
2455
|
-
filename: file.filename,
|
|
2456
|
-
status: 'pending',
|
|
2457
|
-
currentHunk: 0,
|
|
2458
|
-
totalHunks: file.hunks.length,
|
|
2459
|
-
findings: [],
|
|
2460
|
-
}));
|
|
2461
|
-
|
|
2462
|
-
// Notify skill start
|
|
2463
|
-
callbacks.onSkillStart({
|
|
2464
|
-
name,
|
|
2465
|
-
displayName,
|
|
2466
|
-
status: 'running',
|
|
2467
|
-
startTime,
|
|
2468
|
-
files: fileStates,
|
|
2469
|
-
findings: [],
|
|
2470
|
-
});
|
|
2471
|
-
|
|
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>) => <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
|
-
|
|
2485
|
-
// Process files with concurrency
|
|
2486
|
-
const processFile = async (prepared: PreparedFile, index: number): Promise<FileProcessResult> => {
|
|
2487
|
-
const filename = prepared.filename;
|
|
2488
|
-
const fileStartTime = Date.now();
|
|
2489
|
-
|
|
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
|
-
|
|
2495
|
-
const fileCallbacks: FileAnalysisCallbacks = {
|
|
2496
|
-
skillStartTime: startTime,
|
|
2497
|
-
onHunkStart: <span class="fstat-no" title="function not covered" >(h</span>unkNum, totalHunks, lineRange) => {
|
|
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) => {
|
|
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) => {</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) => {</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) => {</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) => {</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) => {</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) => {</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) => {</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
|
-
|
|
2571
|
-
const result = await analyzeFile(
|
|
2572
|
-
skill,
|
|
2573
|
-
prepared,
|
|
2574
|
-
context.repoPath,
|
|
2575
|
-
runnerOptions,
|
|
2576
|
-
fileCallbacks,
|
|
2577
|
-
prContext
|
|
2578
|
-
);
|
|
2579
|
-
|
|
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 && result.usage.outputTokens === 0);
|
|
2584
|
-
const fileStatus = (aborted && noWork) ? 'skipped' : 'done';
|
|
2585
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 => {
|
|
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
|
-
|
|
2614
|
-
// Process files with sliding-window concurrency pool
|
|
2615
|
-
const batchDelayMs = runnerOptions.batchDelayMs ?? 0;
|
|
2616
|
-
const shouldAbort = () => 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) => {
|
|
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 >= effectiveConcurrency && <span class="branch-1 cbranch-no" title="branch not covered" >batchDelayMs > 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) => <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
|
-
|
|
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
|
-
|
|
2646
|
-
// Build report
|
|
2647
|
-
const duration = Date.now() - startTime;
|
|
2648
|
-
const allFindings = allResults.flatMap((r) => r.findings);
|
|
2649
|
-
const allUsage = allResults.map((r) => r.usage).filter((u): u is UsageStats => u !== undefined);
|
|
2650
|
-
const allAuxEntries = allResults.flatMap((r) => r.auxiliaryUsage ?? []);
|
|
2651
|
-
const totalFailedHunks = allResults.reduce((sum, r) => sum + r.failedHunks, 0);
|
|
2652
|
-
const totalFailedExtractions = allResults.reduce((sum, r) => sum + r.failedExtractions, 0);
|
|
2653
|
-
const allHunkFailures: HunkFailure[] = allResults.flatMap((r) => r.hunkFailures);
|
|
2654
|
-
const totalHunks = preparedFiles.reduce((sum, f) => 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
|
-
|
|
2662
|
-
const circuitReason = runnerOptions.circuitBreaker?.reason;
|
|
2663
|
-
if (
|
|
2664
|
-
totalHunks > 0
|
|
2665
|
-
&& allFindings.length === 0
|
|
2666
|
-
&& totalAttemptFailures > 0
|
|
2667
|
-
&& (
|
|
2668
|
-
circuitReason
|
|
2669
|
-
|| (
|
|
2670
|
-
totalAttemptFailures === totalHunks
|
|
2671
|
-
&& !(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) => {
|
|
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 > 0) errorReport.failedExtractions = totalFailedExtractions;
|
|
2712
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (skippedFiles.length > 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
|
-
|
|
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) => {
|
|
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
|
-
|
|
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) => {
|
|
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 > 0) {
|
|
2775
|
-
<span class="cstat-no" title="statement not covered" > report.skippedFiles = skippedFiles;</span>
|
|
2776
|
-
}
|
|
2777
|
-
if (totalFailedHunks > 0) {
|
|
2778
|
-
report.failedHunks = totalFailedHunks;
|
|
2779
|
-
}
|
|
2780
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (totalFailedExtractions > 0) {
|
|
2781
|
-
<span class="cstat-no" title="statement not covered" > report.failedExtractions = totalFailedExtractions;</span>
|
|
2782
|
-
}
|
|
2783
|
-
if (allHunkFailures.length > 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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) => t.name === name)?.displayName ?? <span class="branch-1 cbranch-no" title="branch not covered" >name;</span>
|
|
2856
|
-
}
|
|
2857
|
-
|
|
2858
|
-
/** Track per-skill skipped file counts for collapsed summary in non-TTY mode. */
|
|
2859
|
-
const skippedCounts = new Map<string, number>();
|
|
2860
|
-
|
|
2861
|
-
// Skipped skills also fire onSkillComplete (for the JSONL writer).
|
|
2862
|
-
// Suppress the duplicate "completed" line for those names.
|
|
2863
|
-
const skippedSkills = new Set<string>();
|
|
2864
|
-
|
|
2865
|
-
return {
|
|
2866
|
-
onSkillStart: (skill) => {
|
|
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: () => { /* no-op for default callbacks */ },
|
|
2874
|
-
onFileUpdate: (_skillName, filename, updates) => {
|
|
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 > 0 ? ` ${n} ${pluralize(n, 'finding')}` : '';
|
|
2885
|
-
logPlain(` ${displayNameFor(_skillName)} > ${filename} done ${duration}${cost}${suffix}`);
|
|
2886
|
-
},
|
|
2887
|
-
onHunkStart: (skillName, filename, hunkNum, totalHunks, lineRange) => {
|
|
2888
|
-
if (verbosity === Verbosity.Quiet || mode.isTTY) return;
|
|
2889
|
-
logPlain(` ${displayNameFor(skillName)} > ${filename} [${hunkNum}/${totalHunks}] ${lineRange}`);
|
|
2890
|
-
},
|
|
2891
|
-
onSkillComplete: (name, report) => {
|
|
2892
|
-
if (verbosity === Verbosity.Quiet) return;
|
|
2893
|
-
if (skippedSkills.has(name)) return;
|
|
2894
|
-
const displayName = displayNameFor(name);
|
|
2895
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2914
|
-
// Debug: log finding details
|
|
2915
|
-
<span class="cstat-no" title="statement not covered" > if (verbosity >= Verbosity.Debug && report.findings.length > 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
|
-
|
|
2930
|
-
// Show per-finding lines at Verbose+ verbosity in log mode
|
|
2931
|
-
// (the final report already shows findings with full detail)
|
|
2932
|
-
if (verbosity >= Verbosity.Verbose) {
|
|
2933
|
-
for (const finding of report.findings) {
|
|
2934
|
-
logPlain(` ${formatSeverityPlain(finding.severity)} ${findingLocation(finding)}: ${finding.title}`);
|
|
2935
|
-
if (verbosity >= Verbosity.Debug && finding.suggestedFix) {
|
|
2936
|
-
logPlain(` fix: ${finding.suggestedFix.description}`);
|
|
2937
|
-
}
|
|
2938
|
-
}
|
|
2939
|
-
}
|
|
2940
|
-
|
|
2941
|
-
const skipped = skippedCounts.get(name) ?? 0;
|
|
2942
|
-
if (skipped > 0) {
|
|
2943
|
-
logPlain(` ${skipped} ${pluralize(skipped, 'file')} skipped`);
|
|
2944
|
-
}
|
|
2945
|
-
}
|
|
2946
|
-
},
|
|
2947
|
-
onSkillSkipped: (name) => {
|
|
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) => {
|
|
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 > 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) => {
|
|
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 >= 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) => {</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 >= 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) => {</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 >= Verbosity.Debug
|
|
2995
|
-
? (_skillName, event) => {
|
|
2996
|
-
debugLog(mode, formatFindingProcessingEvent(event));
|
|
2997
|
-
}
|
|
2998
|
-
: undefined,
|
|
2999
|
-
// Verbose mode: show per-hunk analysis failures (spec: event #16 hunk_failed)
|
|
3000
|
-
onHunkFailed: verbosity >= Verbosity.Verbose
|
|
3001
|
-
? (_skillName, filename, lineRange, error) => {
|
|
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 >= Verbosity.Verbose
|
|
3012
|
-
? (_skillName, filename, lineRange, error, preview) => {
|
|
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 >= Verbosity.Debug && 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 >= Verbosity.Debug && 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 >= Verbosity.Verbose
|
|
3029
|
-
? (_skillName, filename, lineRange, attempt, maxRetries, error, delayMs) => {
|
|
3030
|
-
const location = `${filename}:${lineRange}`;
|
|
3031
|
-
const retryInfo = `attempt ${attempt}/${maxRetries}`;
|
|
3032
|
-
const delay = delayMs > 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
|
-
|
|
3043
|
-
function composeAbortControllers(...controllers: (AbortController | undefined)[]): AbortController {
|
|
3044
|
-
const composed = new AbortController();
|
|
3045
|
-
|
|
3046
|
-
for (const ctrl of controllers) {
|
|
3047
|
-
if (ctrl?.signal.aborted) {
|
|
3048
|
-
composed.abort();
|
|
3049
|
-
return composed;
|
|
3050
|
-
}
|
|
3051
|
-
ctrl?.signal.addEventListener('abort', () => composed.abort(), { once: true });
|
|
3052
|
-
}
|
|
3053
|
-
|
|
3054
|
-
return composed;
|
|
3055
|
-
}
|
|
3056
|
-
|
|
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 && !circuitBreaker && <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
|
-
|
|
3068
|
-
return tasks.map((task) => ({
|
|
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
|
-
|
|
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<SkillTaskResult[]> {
|
|
3090
|
-
const results = await runPool(tasks, tasks.length,
|
|
3091
|
-
(task) => runSkillTask(task, Number.MAX_SAFE_INTEGER, callbacks, semaphore),
|
|
3092
|
-
{ shouldAbort: () => tasks[0]?.runnerOptions?.abortController?.signal.aborted ?? <span class="branch-1 cbranch-no" title="branch not covered" >false }</span>
|
|
3093
|
-
);
|
|
3094
|
-
|
|
3095
|
-
return results;
|
|
3096
|
-
}
|
|
3097
|
-
|
|
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<SkillTaskResult[]> {
|
|
3107
|
-
const { mode, verbosity, concurrency, failFastController, onSkillComplete, onChunkComplete } = options;
|
|
3108
|
-
|
|
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
|
-
|
|
3114
|
-
const effectiveCallbacks = callbacks ?? createDefaultCallbacks(tasks, mode, verbosity);
|
|
3115
|
-
|
|
3116
|
-
const wrappedCallbacks: SkillProgressCallbacks = {
|
|
3117
|
-
...effectiveCallbacks,
|
|
3118
|
-
...(onSkillComplete || failFastController
|
|
3119
|
-
? {
|
|
3120
|
-
onSkillComplete: (name: string, report: SkillReport) => {
|
|
3121
|
-
effectiveCallbacks.onSkillComplete(name, report);
|
|
3122
|
-
try { onSkillComplete?.(report); } catch { /* streaming hook must not break the run */ }
|
|
3123
|
-
if (failFastController && report.findings.length > 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) => {
|
|
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
|
-
|
|
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 && <span class="branch-1 cbranch-no" title="branch not covered" >tasks.length > 0 && <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
|
-
|
|
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
|
-
|
|
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 && !abortSignal.aborted && !mode.isTTY && verbosity !== Verbosity.Quiet) {
|
|
3156
|
-
<span class="cstat-no" title="statement not covered" > abortSignal.addEventListener('abort', <span class="fstat-no" title="function not covered" >() => {</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 && !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
|
-
|
|
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 && !mode.isTTY && verbosity !== Verbosity.Quiet) {
|
|
3166
|
-
<span class="cstat-no" title="statement not covered" > failFastController.signal.addEventListener('abort', <span class="fstat-no" title="function not covered" >() => {</span></span>
|
|
3167
|
-
<span class="cstat-no" title="statement not covered" > logPlain('Stopping \u2014 finding detected (--fail-fast)');</span>
|
|
3168
|
-
}, { once: true });
|
|
3169
|
-
}
|
|
3170
|
-
|
|
3171
|
-
// Launch all skills in parallel; the semaphore is the sole concurrency gate.
|
|
3172
|
-
return runComposedSkillTasks(composedTasks, wrappedCallbacks, semaphore);
|
|
3173
|
-
}
|
|
3174
|
-
</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
|
-
|