@contractkit/plugin-openapi 0.8.13 → 0.8.15
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/.turbo/turbo-build$colon$ci.log +5 -5
- package/.turbo/turbo-test$colon$ci.log +7 -7
- package/CHANGELOG.md +15 -0
- package/dist/codegen-openapi.d.ts +21 -0
- package/dist/codegen-openapi.d.ts.map +1 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/codegen-openapi.ts +33 -1
- package/tests/codegen-openapi.test.ts +17 -1
- package/coverage/base.css +0 -224
- package/coverage/block-navigation.js +0 -87
- package/coverage/clover.xml +0 -403
- package/coverage/coverage-final.json +0 -3
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +0 -131
- package/coverage/prettify.css +0 -1
- package/coverage/prettify.js +0 -2
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +0 -210
- package/coverage/src/codegen-openapi.ts.html +0 -2308
- package/coverage/src/index.html +0 -116
- package/coverage/tests/helpers.ts.html +0 -616
- package/coverage/tests/index.html +0 -116
|
@@ -1,2308 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
<!doctype html>
|
|
3
|
-
<html lang="en">
|
|
4
|
-
|
|
5
|
-
<head>
|
|
6
|
-
<title>Code coverage report for src/codegen-openapi.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</a> codegen-openapi.ts</h1>
|
|
23
|
-
<div class='clearfix'>
|
|
24
|
-
|
|
25
|
-
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">79.5% </span>
|
|
27
|
-
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>322/405</span>
|
|
29
|
-
</div>
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">75.26% </span>
|
|
34
|
-
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>216/287</span>
|
|
36
|
-
</div>
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">86.11% </span>
|
|
41
|
-
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>31/36</span>
|
|
43
|
-
</div>
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">81.5% </span>
|
|
48
|
-
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>282/346</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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
808
|
-
<span class="cline-any cline-neutral"> </span>
|
|
809
|
-
<span class="cline-any cline-neutral"> </span>
|
|
810
|
-
<span class="cline-any cline-neutral"> </span>
|
|
811
|
-
<span class="cline-any cline-neutral"> </span>
|
|
812
|
-
<span class="cline-any cline-neutral"> </span>
|
|
813
|
-
<span class="cline-any cline-neutral"> </span>
|
|
814
|
-
<span class="cline-any cline-neutral"> </span>
|
|
815
|
-
<span class="cline-any cline-neutral"> </span>
|
|
816
|
-
<span class="cline-any cline-neutral"> </span>
|
|
817
|
-
<span class="cline-any cline-neutral"> </span>
|
|
818
|
-
<span class="cline-any cline-neutral"> </span>
|
|
819
|
-
<span class="cline-any cline-neutral"> </span>
|
|
820
|
-
<span class="cline-any cline-neutral"> </span>
|
|
821
|
-
<span class="cline-any cline-neutral"> </span>
|
|
822
|
-
<span class="cline-any cline-neutral"> </span>
|
|
823
|
-
<span class="cline-any cline-neutral"> </span>
|
|
824
|
-
<span class="cline-any cline-neutral"> </span>
|
|
825
|
-
<span class="cline-any cline-neutral"> </span>
|
|
826
|
-
<span class="cline-any cline-neutral"> </span>
|
|
827
|
-
<span class="cline-any cline-neutral"> </span>
|
|
828
|
-
<span class="cline-any cline-neutral"> </span>
|
|
829
|
-
<span class="cline-any cline-neutral"> </span>
|
|
830
|
-
<span class="cline-any cline-neutral"> </span>
|
|
831
|
-
<span class="cline-any cline-neutral"> </span>
|
|
832
|
-
<span class="cline-any cline-neutral"> </span>
|
|
833
|
-
<span class="cline-any cline-neutral"> </span>
|
|
834
|
-
<span class="cline-any cline-neutral"> </span>
|
|
835
|
-
<span class="cline-any cline-neutral"> </span>
|
|
836
|
-
<span class="cline-any cline-neutral"> </span>
|
|
837
|
-
<span class="cline-any cline-neutral"> </span>
|
|
838
|
-
<span class="cline-any cline-neutral"> </span>
|
|
839
|
-
<span class="cline-any cline-neutral"> </span>
|
|
840
|
-
<span class="cline-any cline-neutral"> </span>
|
|
841
|
-
<span class="cline-any cline-neutral"> </span>
|
|
842
|
-
<span class="cline-any cline-neutral"> </span>
|
|
843
|
-
<span class="cline-any cline-neutral"> </span>
|
|
844
|
-
<span class="cline-any cline-neutral"> </span>
|
|
845
|
-
<span class="cline-any cline-neutral"> </span>
|
|
846
|
-
<span class="cline-any cline-neutral"> </span>
|
|
847
|
-
<span class="cline-any cline-neutral"> </span>
|
|
848
|
-
<span class="cline-any cline-neutral"> </span>
|
|
849
|
-
<span class="cline-any cline-neutral"> </span>
|
|
850
|
-
<span class="cline-any cline-neutral"> </span>
|
|
851
|
-
<span class="cline-any cline-neutral"> </span>
|
|
852
|
-
<span class="cline-any cline-neutral"> </span>
|
|
853
|
-
<span class="cline-any cline-neutral"> </span>
|
|
854
|
-
<span class="cline-any cline-yes">43x</span>
|
|
855
|
-
<span class="cline-any cline-neutral"> </span>
|
|
856
|
-
<span class="cline-any cline-yes">17x</span>
|
|
857
|
-
<span class="cline-any cline-yes">17x</span>
|
|
858
|
-
<span class="cline-any cline-neutral"> </span>
|
|
859
|
-
<span class="cline-any cline-yes">1x</span>
|
|
860
|
-
<span class="cline-any cline-yes">1x</span>
|
|
861
|
-
<span class="cline-any cline-neutral"> </span>
|
|
862
|
-
<span class="cline-any cline-no"> </span>
|
|
863
|
-
<span class="cline-any cline-no"> </span>
|
|
864
|
-
<span class="cline-any cline-neutral"> </span>
|
|
865
|
-
<span class="cline-any cline-no"> </span>
|
|
866
|
-
<span class="cline-any cline-no"> </span>
|
|
867
|
-
<span class="cline-any cline-neutral"> </span>
|
|
868
|
-
<span class="cline-any cline-neutral"> </span>
|
|
869
|
-
<span class="cline-any cline-neutral"> </span>
|
|
870
|
-
<span class="cline-any cline-yes">2x</span>
|
|
871
|
-
<span class="cline-any cline-yes">1x</span>
|
|
872
|
-
<span class="cline-any cline-neutral"> </span>
|
|
873
|
-
<span class="cline-any cline-no"> </span>
|
|
874
|
-
<span class="cline-any cline-no"> </span>
|
|
875
|
-
<span class="cline-any cline-neutral"> </span>
|
|
876
|
-
<span class="cline-any cline-yes">2x</span>
|
|
877
|
-
<span class="cline-any cline-yes">1x</span>
|
|
878
|
-
<span class="cline-any cline-neutral"> </span>
|
|
879
|
-
<span class="cline-any cline-neutral"> </span>
|
|
880
|
-
<span class="cline-any cline-neutral"> </span>
|
|
881
|
-
<span class="cline-any cline-neutral"> </span>
|
|
882
|
-
<span class="cline-any cline-yes">87x</span>
|
|
883
|
-
<span class="cline-any cline-yes">8x</span>
|
|
884
|
-
<span class="cline-any cline-no"> </span>
|
|
885
|
-
<span class="cline-any cline-no"> </span>
|
|
886
|
-
<span class="cline-any cline-neutral"> </span>
|
|
887
|
-
<span class="cline-any cline-yes">8x</span>
|
|
888
|
-
<span class="cline-any cline-yes">11x</span>
|
|
889
|
-
<span class="cline-any cline-yes">8x</span>
|
|
890
|
-
<span class="cline-any cline-neutral"> </span>
|
|
891
|
-
<span class="cline-any cline-no"> </span>
|
|
892
|
-
<span class="cline-any cline-neutral"> </span>
|
|
893
|
-
<span class="cline-any cline-neutral"> </span>
|
|
894
|
-
<span class="cline-any cline-neutral"> </span>
|
|
895
|
-
<span class="cline-any cline-neutral"> </span>
|
|
896
|
-
<span class="cline-any cline-yes">27x</span>
|
|
897
|
-
<span class="cline-any cline-yes">27x</span>
|
|
898
|
-
<span class="cline-any cline-yes">28x</span>
|
|
899
|
-
<span class="cline-any cline-yes">30x</span>
|
|
900
|
-
<span class="cline-any cline-yes">36x</span>
|
|
901
|
-
<span class="cline-any cline-yes">29x</span>
|
|
902
|
-
<span class="cline-any cline-yes">2x</span>
|
|
903
|
-
<span class="cline-any cline-neutral"> </span>
|
|
904
|
-
<span class="cline-any cline-yes">29x</span>
|
|
905
|
-
<span class="cline-any cline-yes">23x</span>
|
|
906
|
-
<span class="cline-any cline-yes">23x</span>
|
|
907
|
-
<span class="cline-any cline-yes">6x</span>
|
|
908
|
-
<span class="cline-any cline-neutral"> </span>
|
|
909
|
-
<span class="cline-any cline-neutral"> </span>
|
|
910
|
-
<span class="cline-any cline-yes">29x</span>
|
|
911
|
-
<span class="cline-any cline-yes">29x</span>
|
|
912
|
-
<span class="cline-any cline-yes">29x</span>
|
|
913
|
-
<span class="cline-any cline-neutral"> </span>
|
|
914
|
-
<span class="cline-any cline-neutral"> </span>
|
|
915
|
-
<span class="cline-any cline-neutral"> </span>
|
|
916
|
-
<span class="cline-any cline-yes">27x</span>
|
|
917
|
-
<span class="cline-any cline-neutral"> </span>
|
|
918
|
-
<span class="cline-any cline-neutral"> </span>
|
|
919
|
-
<span class="cline-any cline-neutral"> </span>
|
|
920
|
-
<span class="cline-any cline-neutral"> </span>
|
|
921
|
-
<span class="cline-any cline-yes">27x</span>
|
|
922
|
-
<span class="cline-any cline-yes">27x</span>
|
|
923
|
-
<span class="cline-any cline-yes">27x</span>
|
|
924
|
-
<span class="cline-any cline-yes">15x</span>
|
|
925
|
-
<span class="cline-any cline-yes">15x</span>
|
|
926
|
-
<span class="cline-any cline-yes">15x</span>
|
|
927
|
-
<span class="cline-any cline-yes">6x</span>
|
|
928
|
-
<span class="cline-any cline-yes">6x</span>
|
|
929
|
-
<span class="cline-any cline-yes">7x</span>
|
|
930
|
-
<span class="cline-any cline-yes">6x</span>
|
|
931
|
-
<span class="cline-any cline-yes">6x</span>
|
|
932
|
-
<span class="cline-any cline-yes">3x</span>
|
|
933
|
-
<span class="cline-any cline-yes">3x</span>
|
|
934
|
-
<span class="cline-any cline-yes">3x</span>
|
|
935
|
-
<span class="cline-any cline-neutral"> </span>
|
|
936
|
-
<span class="cline-any cline-neutral"> </span>
|
|
937
|
-
<span class="cline-any cline-neutral"> </span>
|
|
938
|
-
<span class="cline-any cline-yes">27x</span>
|
|
939
|
-
<span class="cline-any cline-neutral"> </span>
|
|
940
|
-
<span class="cline-any cline-neutral"> </span>
|
|
941
|
-
<span class="cline-any cline-neutral"> </span>
|
|
942
|
-
<span class="cline-any cline-neutral"> </span>
|
|
943
|
-
<span class="cline-any cline-neutral"> </span>
|
|
944
|
-
<span class="cline-any cline-neutral"> </span>
|
|
945
|
-
<span class="cline-any cline-neutral"> </span>
|
|
946
|
-
<span class="cline-any cline-neutral"> </span>
|
|
947
|
-
<span class="cline-any cline-neutral"> </span>
|
|
948
|
-
<span class="cline-any cline-neutral"> </span>
|
|
949
|
-
<span class="cline-any cline-neutral"> </span>
|
|
950
|
-
<span class="cline-any cline-neutral"> </span>
|
|
951
|
-
<span class="cline-any cline-neutral"> </span>
|
|
952
|
-
<span class="cline-any cline-yes">45x</span>
|
|
953
|
-
<span class="cline-any cline-yes">45x</span>
|
|
954
|
-
<span class="cline-any cline-neutral"> </span>
|
|
955
|
-
<span class="cline-any cline-yes">45x</span>
|
|
956
|
-
<span class="cline-any cline-neutral"> </span>
|
|
957
|
-
<span class="cline-any cline-neutral"> </span>
|
|
958
|
-
<span class="cline-any cline-neutral"> </span>
|
|
959
|
-
<span class="cline-any cline-neutral"> </span>
|
|
960
|
-
<span class="cline-any cline-neutral"> </span>
|
|
961
|
-
<span class="cline-any cline-neutral"> </span>
|
|
962
|
-
<span class="cline-any cline-neutral"> </span>
|
|
963
|
-
<span class="cline-any cline-neutral"> </span>
|
|
964
|
-
<span class="cline-any cline-yes">45x</span>
|
|
965
|
-
<span class="cline-any cline-yes">1x</span>
|
|
966
|
-
<span class="cline-any cline-neutral"> </span>
|
|
967
|
-
<span class="cline-any cline-neutral"> </span>
|
|
968
|
-
<span class="cline-any cline-yes">45x</span>
|
|
969
|
-
<span class="cline-any cline-yes">1x</span>
|
|
970
|
-
<span class="cline-any cline-neutral"> </span>
|
|
971
|
-
<span class="cline-any cline-neutral"> </span>
|
|
972
|
-
<span class="cline-any cline-neutral"> </span>
|
|
973
|
-
<span class="cline-any cline-yes">45x</span>
|
|
974
|
-
<span class="cline-any cline-yes">45x</span>
|
|
975
|
-
<span class="cline-any cline-neutral"> </span>
|
|
976
|
-
<span class="cline-any cline-yes">45x</span>
|
|
977
|
-
<span class="cline-any cline-yes">18x</span>
|
|
978
|
-
<span class="cline-any cline-yes">24x</span>
|
|
979
|
-
<span class="cline-any cline-neutral"> </span>
|
|
980
|
-
<span class="cline-any cline-neutral"> </span>
|
|
981
|
-
<span class="cline-any cline-yes">45x</span>
|
|
982
|
-
<span class="cline-any cline-yes">18x</span>
|
|
983
|
-
<span class="cline-any cline-yes">24x</span>
|
|
984
|
-
<span class="cline-any cline-neutral"> </span>
|
|
985
|
-
<span class="cline-any cline-neutral"> </span>
|
|
986
|
-
<span class="cline-any cline-neutral"> </span>
|
|
987
|
-
<span class="cline-any cline-neutral"> </span>
|
|
988
|
-
<span class="cline-any cline-yes">45x</span>
|
|
989
|
-
<span class="cline-any cline-neutral"> </span>
|
|
990
|
-
<span class="cline-any cline-yes">45x</span>
|
|
991
|
-
<span class="cline-any cline-yes">28x</span>
|
|
992
|
-
<span class="cline-any cline-yes">30x</span>
|
|
993
|
-
<span class="cline-any cline-neutral"> </span>
|
|
994
|
-
<span class="cline-any cline-yes">30x</span>
|
|
995
|
-
<span class="cline-any cline-yes">36x</span>
|
|
996
|
-
<span class="cline-any cline-yes">36x</span>
|
|
997
|
-
<span class="cline-any cline-neutral"> </span>
|
|
998
|
-
<span class="cline-any cline-neutral"> </span>
|
|
999
|
-
<span class="cline-any cline-yes">29x</span>
|
|
1000
|
-
<span class="cline-any cline-yes">29x</span>
|
|
1001
|
-
<span class="cline-any cline-yes">29x</span>
|
|
1002
|
-
<span class="cline-any cline-yes">29x</span>
|
|
1003
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1004
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1005
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1006
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1007
|
-
<span class="cline-any cline-yes">45x</span>
|
|
1008
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1009
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1010
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1011
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1012
|
-
<span class="cline-any cline-yes">45x</span>
|
|
1013
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1014
|
-
<span class="cline-any cline-yes">27x</span>
|
|
1015
|
-
<span class="cline-any cline-yes">27x</span>
|
|
1016
|
-
<span class="cline-any cline-yes">27x</span>
|
|
1017
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1018
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1019
|
-
<span class="cline-any cline-yes">27x</span>
|
|
1020
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1021
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1022
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1023
|
-
<span class="cline-any cline-yes">45x</span>
|
|
1024
|
-
<span class="cline-any cline-yes">45x</span>
|
|
1025
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1026
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1027
|
-
<span class="cline-any cline-yes">45x</span>
|
|
1028
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1029
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1030
|
-
<span class="cline-any cline-yes">45x</span>
|
|
1031
|
-
<span class="cline-any cline-yes">17x</span>
|
|
1032
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1033
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1034
|
-
<span class="cline-any cline-yes">45x</span>
|
|
1035
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1036
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1037
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1038
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1039
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1040
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1041
|
-
<span class="cline-any cline-yes">30x</span>
|
|
1042
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1043
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1044
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1045
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1046
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1047
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1048
|
-
<span class="cline-any cline-yes">24x</span>
|
|
1049
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1050
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1051
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1052
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1053
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1054
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1055
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1056
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1057
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1058
|
-
<span class="cline-any cline-yes">30x</span>
|
|
1059
|
-
<span class="cline-any cline-yes">30x</span>
|
|
1060
|
-
<span class="cline-any cline-yes">30x</span>
|
|
1061
|
-
<span class="cline-any cline-yes">29x</span>
|
|
1062
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1063
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1064
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1065
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1066
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1067
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1068
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1069
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1070
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1071
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1072
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1073
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1074
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1075
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1076
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1077
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1078
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1079
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1080
|
-
<span class="cline-any cline-yes">19x</span>
|
|
1081
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1082
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1083
|
-
<span class="cline-any cline-yes">19x</span>
|
|
1084
|
-
<span class="cline-any cline-no"> </span>
|
|
1085
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1086
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1087
|
-
<span class="cline-any cline-yes">19x</span>
|
|
1088
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1089
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1090
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1091
|
-
<span class="cline-any cline-yes">32x</span>
|
|
1092
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1093
|
-
<span class="cline-any cline-yes">32x</span>
|
|
1094
|
-
<span class="cline-any cline-no"> </span>
|
|
1095
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1096
|
-
<span class="cline-any cline-yes">32x</span>
|
|
1097
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1098
|
-
<span class="cline-any cline-yes">31x</span>
|
|
1099
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1100
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1101
|
-
<span class="cline-any cline-yes">32x</span>
|
|
1102
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1103
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1104
|
-
<span class="cline-any cline-yes">32x</span>
|
|
1105
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1106
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1107
|
-
<span class="cline-any cline-yes">32x</span>
|
|
1108
|
-
<span class="cline-any cline-no"> </span>
|
|
1109
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1110
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1111
|
-
<span class="cline-any cline-yes">32x</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-yes">68x</span>
|
|
1116
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1117
|
-
<span class="cline-any cline-yes">43x</span>
|
|
1118
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1119
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1120
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1121
|
-
<span class="cline-any cline-no"> </span>
|
|
1122
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1123
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1124
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1125
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1126
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1127
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1128
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1129
|
-
<span class="cline-any cline-no"> </span>
|
|
1130
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1131
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1132
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1133
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1134
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1135
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1136
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1137
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1138
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1139
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1140
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1141
|
-
<span class="cline-any cline-yes">1x</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-yes">1x</span>
|
|
1146
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1147
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1148
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1149
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1150
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1151
|
-
<span class="cline-any cline-no"> </span>
|
|
1152
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1153
|
-
<span class="cline-any cline-yes">16x</span>
|
|
1154
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1155
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1156
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1157
|
-
<span class="cline-any cline-no"> </span>
|
|
1158
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1159
|
-
<span class="cline-any cline-neutral"> </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-yes">2x</span>
|
|
1164
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1165
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1166
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1167
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1168
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1169
|
-
<span class="cline-any cline-no"> </span>
|
|
1170
|
-
<span class="cline-any cline-no"> </span>
|
|
1171
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1172
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1173
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1174
|
-
<span class="cline-any cline-yes">43x</span>
|
|
1175
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1176
|
-
<span class="cline-any cline-yes">43x</span>
|
|
1177
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1178
|
-
<span class="cline-any cline-yes">19x</span>
|
|
1179
|
-
<span class="cline-any cline-yes">19x</span>
|
|
1180
|
-
<span class="cline-any cline-yes">19x</span>
|
|
1181
|
-
<span class="cline-any cline-yes">19x</span>
|
|
1182
|
-
<span class="cline-any cline-no"> </span>
|
|
1183
|
-
<span class="cline-any cline-no"> </span>
|
|
1184
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1185
|
-
<span class="cline-any cline-yes">19x</span>
|
|
1186
|
-
<span class="cline-any cline-yes">19x</span>
|
|
1187
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1188
|
-
<span class="cline-any cline-no"> </span>
|
|
1189
|
-
<span class="cline-any cline-no"> </span>
|
|
1190
|
-
<span class="cline-any cline-no"> </span>
|
|
1191
|
-
<span class="cline-any cline-no"> </span>
|
|
1192
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1193
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1194
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1195
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1196
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1197
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1198
|
-
<span class="cline-any cline-no"> </span>
|
|
1199
|
-
<span class="cline-any cline-no"> </span>
|
|
1200
|
-
<span class="cline-any cline-no"> </span>
|
|
1201
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1202
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1203
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1204
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1205
|
-
<span class="cline-any cline-no"> </span>
|
|
1206
|
-
<span class="cline-any cline-no"> </span>
|
|
1207
|
-
<span class="cline-any cline-no"> </span>
|
|
1208
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1209
|
-
<span class="cline-any cline-no"> </span>
|
|
1210
|
-
<span class="cline-any cline-no"> </span>
|
|
1211
|
-
<span class="cline-any cline-no"> </span>
|
|
1212
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1213
|
-
<span class="cline-any cline-no"> </span>
|
|
1214
|
-
<span class="cline-any cline-no"> </span>
|
|
1215
|
-
<span class="cline-any cline-no"> </span>
|
|
1216
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1217
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1218
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1219
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1220
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1221
|
-
<span class="cline-any cline-no"> </span>
|
|
1222
|
-
<span class="cline-any cline-no"> </span>
|
|
1223
|
-
<span class="cline-any cline-no"> </span>
|
|
1224
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1225
|
-
<span class="cline-any cline-yes">17x</span>
|
|
1226
|
-
<span class="cline-any cline-yes">17x</span>
|
|
1227
|
-
<span class="cline-any cline-yes">17x</span>
|
|
1228
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1229
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1230
|
-
<span class="cline-any cline-no"> </span>
|
|
1231
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1232
|
-
<span class="cline-any cline-no"> </span>
|
|
1233
|
-
<span class="cline-any cline-no"> </span>
|
|
1234
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1235
|
-
<span class="cline-any cline-no"> </span>
|
|
1236
|
-
<span class="cline-any cline-no"> </span>
|
|
1237
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1238
|
-
<span class="cline-any cline-no"> </span>
|
|
1239
|
-
<span class="cline-any cline-no"> </span>
|
|
1240
|
-
<span class="cline-any cline-no"> </span>
|
|
1241
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1242
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1243
|
-
<span class="cline-any cline-no"> </span>
|
|
1244
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1245
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1246
|
-
<span class="cline-any cline-yes">43x</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-yes">2x</span>
|
|
1251
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1252
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1253
|
-
<span class="cline-any cline-yes">2x</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-yes">1x</span>
|
|
1258
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1259
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1260
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1261
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1262
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1263
|
-
<span class="cline-any cline-yes">2x</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-yes">1x</span>
|
|
1268
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1269
|
-
<span class="cline-any cline-yes">1x</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-no"> </span>
|
|
1275
|
-
<span class="cline-any cline-no"> </span>
|
|
1276
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1277
|
-
<span class="cline-any cline-no"> </span>
|
|
1278
|
-
<span class="cline-any cline-no"> </span>
|
|
1279
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1280
|
-
<span class="cline-any cline-no"> </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-yes">29x</span>
|
|
1287
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1288
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1289
|
-
<span class="cline-any cline-yes">29x</span>
|
|
1290
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1291
|
-
<span class="cline-any cline-yes">28x</span>
|
|
1292
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1293
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1294
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1295
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1296
|
-
<span class="cline-any cline-yes">29x</span>
|
|
1297
|
-
<span class="cline-any cline-yes">1x</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-yes">29x</span>
|
|
1302
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1303
|
-
<span class="cline-any cline-yes">29x</span>
|
|
1304
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1305
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1306
|
-
<span class="cline-any cline-yes">29x</span>
|
|
1307
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1308
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1309
|
-
<span class="cline-any cline-yes">29x</span>
|
|
1310
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1311
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1312
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1313
|
-
<span class="cline-any cline-yes">29x</span>
|
|
1314
|
-
<span class="cline-any cline-yes">8x</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-yes">29x</span>
|
|
1319
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1320
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1321
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1322
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1323
|
-
<span class="cline-any cline-yes">2x</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-yes">29x</span>
|
|
1330
|
-
<span class="cline-any cline-yes">29x</span>
|
|
1331
|
-
<span class="cline-any cline-no"> </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-yes">29x</span>
|
|
1336
|
-
<span class="cline-any cline-yes">29x</span>
|
|
1337
|
-
<span class="cline-any cline-yes">23x</span>
|
|
1338
|
-
<span class="cline-any cline-yes">23x</span>
|
|
1339
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1340
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1341
|
-
<span class="cline-any cline-yes">23x</span>
|
|
1342
|
-
<span class="cline-any cline-yes">9x</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-yes">23x</span>
|
|
1349
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1350
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1351
|
-
<span class="cline-any cline-yes">6x</span>
|
|
1352
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1353
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1354
|
-
<span class="cline-any cline-yes">6x</span>
|
|
1355
|
-
<span class="cline-any cline-yes">6x</span>
|
|
1356
|
-
<span class="cline-any cline-yes">6x</span>
|
|
1357
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1358
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1359
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1360
|
-
<span class="cline-any cline-yes">23x</span>
|
|
1361
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1362
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1363
|
-
<span class="cline-any cline-yes">29x</span>
|
|
1364
|
-
<span class="cline-any cline-yes">20x</span>
|
|
1365
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1366
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1367
|
-
<span class="cline-any cline-yes">29x</span>
|
|
1368
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1369
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1370
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1371
|
-
<span class="cline-any cline-yes">8x</span>
|
|
1372
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1373
|
-
<span class="cline-any cline-no"> </span>
|
|
1374
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1375
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1376
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1377
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1378
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1379
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1380
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1381
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1382
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1383
|
-
<span class="cline-any cline-yes">8x</span>
|
|
1384
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1385
|
-
<span class="cline-any cline-yes">11x</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-neutral"> </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-neutral"> </span>
|
|
1394
|
-
<span class="cline-any cline-no"> </span>
|
|
1395
|
-
<span class="cline-any cline-no"> </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-no"> </span>
|
|
1405
|
-
<span class="cline-any cline-no"> </span>
|
|
1406
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1407
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1408
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1409
|
-
<span class="cline-any cline-neutral"> </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-no"> </span>
|
|
1416
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1417
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1418
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1419
|
-
<span class="cline-any cline-yes">23x</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-neutral"> </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-yes">23x</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-neutral"> </span>
|
|
1440
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1441
|
-
<span class="cline-any cline-yes">794x</span>
|
|
1442
|
-
<span class="cline-any cline-yes">793x</span>
|
|
1443
|
-
<span class="cline-any cline-yes">767x</span>
|
|
1444
|
-
<span class="cline-any cline-yes">759x</span>
|
|
1445
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1446
|
-
<span class="cline-any cline-yes">759x</span>
|
|
1447
|
-
<span class="cline-any cline-yes">312x</span>
|
|
1448
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1449
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1450
|
-
<span class="cline-any cline-yes">447x</span>
|
|
1451
|
-
<span class="cline-any cline-yes">37x</span>
|
|
1452
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1453
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1454
|
-
<span class="cline-any cline-yes">49x</span>
|
|
1455
|
-
<span class="cline-any cline-yes">35x</span>
|
|
1456
|
-
<span class="cline-any cline-yes">22x</span>
|
|
1457
|
-
<span class="cline-any cline-yes">22x</span>
|
|
1458
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1459
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1460
|
-
<span class="cline-any cline-yes">14x</span>
|
|
1461
|
-
<span class="cline-any cline-yes">14x</span>
|
|
1462
|
-
<span class="cline-any cline-yes">14x</span>
|
|
1463
|
-
<span class="cline-any cline-yes">23x</span>
|
|
1464
|
-
<span class="cline-any cline-yes">23x</span>
|
|
1465
|
-
<span class="cline-any cline-yes">23x</span>
|
|
1466
|
-
<span class="cline-any cline-yes">23x</span>
|
|
1467
|
-
<span class="cline-any cline-yes">23x</span>
|
|
1468
|
-
<span class="cline-any cline-yes">23x</span>
|
|
1469
|
-
<span class="cline-any cline-yes">23x</span>
|
|
1470
|
-
<span class="cline-any cline-yes">39x</span>
|
|
1471
|
-
<span class="cline-any cline-yes">39x</span>
|
|
1472
|
-
<span class="cline-any cline-yes">39x</span>
|
|
1473
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1474
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1475
|
-
<span class="cline-any cline-no"> </span>
|
|
1476
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1477
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1478
|
-
<span class="cline-any cline-no"> </span>
|
|
1479
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1480
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1481
|
-
<span class="cline-any cline-yes">14x</span>
|
|
1482
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1483
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1484
|
-
<span class="cline-any cline-yes">410x</span>
|
|
1485
|
-
<span class="cline-any cline-yes">410x</span>
|
|
1486
|
-
<span class="cline-any cline-yes">410x</span>
|
|
1487
|
-
<span class="cline-any cline-yes">410x</span>
|
|
1488
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1489
|
-
<span class="cline-any cline-yes">388x</span>
|
|
1490
|
-
<span class="cline-any cline-yes">388x</span>
|
|
1491
|
-
<span class="cline-any cline-yes">388x</span>
|
|
1492
|
-
<span class="cline-any cline-yes">673x</span>
|
|
1493
|
-
<span class="cline-any cline-yes">362x</span>
|
|
1494
|
-
<span class="cline-any cline-yes">362x</span>
|
|
1495
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1496
|
-
<span class="cline-any cline-yes">311x</span>
|
|
1497
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1498
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1499
|
-
<span class="cline-any cline-yes">388x</span>
|
|
1500
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1501
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1502
|
-
<span class="cline-any cline-no"> </span>
|
|
1503
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1504
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1505
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1506
|
-
<span class="cline-any cline-yes">375x</span>
|
|
1507
|
-
<span class="cline-any cline-yes">14x</span>
|
|
1508
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1509
|
-
<span class="cline-any cline-yes">361x</span>
|
|
1510
|
-
<span class="cline-any cline-yes">361x</span>
|
|
1511
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1512
|
-
<span class="cline-any cline-no"> </span>
|
|
1513
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1514
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1515
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1516
|
-
<span class="cline-any cline-yes">735x</span>
|
|
1517
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1518
|
-
<span class="cline-any cline-yes">49x</span>
|
|
1519
|
-
<span class="cline-any cline-yes">35x</span>
|
|
1520
|
-
<span class="cline-any cline-yes">23x</span>
|
|
1521
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1522
|
-
<span class="cline-any cline-yes">14x</span>
|
|
1523
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1524
|
-
<span class="cline-any cline-yes">698x</span>
|
|
1525
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1526
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1527
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1528
|
-
<span class="cline-any cline-yes">1492x</span>
|
|
1529
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1530
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1531
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1532
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1533
|
-
<span class="cline-any cline-yes">382x</span>
|
|
1534
|
-
<span class="cline-any cline-yes">381x</span>
|
|
1535
|
-
<span class="cline-any cline-yes">235x</span>
|
|
1536
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1537
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1538
|
-
<span class="cline-any cline-yes">146x</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-yes">735x</span>
|
|
1544
|
-
<span class="cline-any cline-yes">677x</span>
|
|
1545
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1546
|
-
<span class="cline-any cline-yes">58x</span>
|
|
1547
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1548
|
-
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import type {
|
|
1549
|
-
ContractRootNode,
|
|
1550
|
-
OpRootNode,
|
|
1551
|
-
ContractTypeNode,
|
|
1552
|
-
FieldNode,
|
|
1553
|
-
ModelNode,
|
|
1554
|
-
OpRouteNode,
|
|
1555
|
-
OpOperationNode,
|
|
1556
|
-
ParamSource,
|
|
1557
|
-
} from '@contractkit/core';
|
|
1558
|
-
import { resolveModifiers, resolveSecurity, SECURITY_NONE } from '@contractkit/core';
|
|
1559
|
-
|
|
1560
|
-
export interface OpenApiServerEntry {
|
|
1561
|
-
url: string;
|
|
1562
|
-
description?: string;
|
|
1563
|
-
}
|
|
1564
|
-
|
|
1565
|
-
export interface OpenApiSecurityScheme {
|
|
1566
|
-
type: string;
|
|
1567
|
-
scheme?: string;
|
|
1568
|
-
bearerFormat?: string;
|
|
1569
|
-
name?: string;
|
|
1570
|
-
in?: string;
|
|
1571
|
-
}
|
|
1572
|
-
|
|
1573
|
-
export interface OpenApiConfig {
|
|
1574
|
-
baseDir?: string;
|
|
1575
|
-
output?: string;
|
|
1576
|
-
info?: {
|
|
1577
|
-
title?: string;
|
|
1578
|
-
version?: string;
|
|
1579
|
-
description?: string;
|
|
1580
|
-
};
|
|
1581
|
-
servers?: OpenApiServerEntry[];
|
|
1582
|
-
/** Global OpenAPI security requirements (e.g. [{ bearerAuth: [] }]). Distinct from scheme definitions. */
|
|
1583
|
-
security?: Record<string, string[]>[];
|
|
1584
|
-
/**
|
|
1585
|
-
* Whether to document operations marked `internal`. Defaults to `false` — internal ops
|
|
1586
|
-
* are omitted from the spec so external consumers don't see them. Set to `true` for an
|
|
1587
|
-
* internal-use spec.
|
|
1588
|
-
*/
|
|
1589
|
-
includeInternal?: boolean;
|
|
1590
|
-
}
|
|
1591
|
-
|
|
1592
|
-
// ─── Type reachability ────────────────────────────────────────────────────
|
|
1593
|
-
|
|
1594
|
-
function collectRefsFromType(type: ContractTypeNode, out: Set<string>): void {
|
|
1595
|
-
switch (type.kind) {
|
|
1596
|
-
case 'ref':
|
|
1597
|
-
out.add(type.name);
|
|
1598
|
-
break;
|
|
1599
|
-
case 'array':
|
|
1600
|
-
collectRefsFromType(type.item, out);
|
|
1601
|
-
break;
|
|
1602
|
-
<span class="branch-2 cbranch-no" title="branch not covered" > case 'tuple':</span>
|
|
1603
|
-
<span class="cstat-no" title="statement not covered" > for (const item of type.items) <span class="cstat-no" title="statement not covered" >collectRefsFromType(item, out);</span></span>
|
|
1604
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1605
|
-
<span class="branch-3 cbranch-no" title="branch not covered" > case 'record':</span>
|
|
1606
|
-
<span class="cstat-no" title="statement not covered" > collectRefsFromType(type.value, out);</span>
|
|
1607
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1608
|
-
<span class="branch-4 cbranch-no" title="branch not covered" > case 'union':</span>
|
|
1609
|
-
case 'discriminatedUnion':
|
|
1610
|
-
case 'intersection':
|
|
1611
|
-
for (const member of type.members) collectRefsFromType(member, out);
|
|
1612
|
-
break;
|
|
1613
|
-
<span class="branch-7 cbranch-no" title="branch not covered" > case 'lazy':</span>
|
|
1614
|
-
<span class="cstat-no" title="statement not covered" > collectRefsFromType(type.inner, out);</span>
|
|
1615
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1616
|
-
case 'inlineObject':
|
|
1617
|
-
for (const field of type.fields) collectRefsFromType(field.type, out);
|
|
1618
|
-
break;
|
|
1619
|
-
}
|
|
1620
|
-
}
|
|
1621
|
-
|
|
1622
|
-
function collectParamSourceRefs(source: ParamSource | undefined, out: Set<string>): void {
|
|
1623
|
-
if (!source) return;
|
|
1624
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (source.kind === 'ref') {
|
|
1625
|
-
<span class="cstat-no" title="statement not covered" > out.add(source.name);</span>
|
|
1626
|
-
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
1627
|
-
}
|
|
1628
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (source.kind === 'params') {
|
|
1629
|
-
for (const p of source.nodes) collectRefsFromType(p.type, out);
|
|
1630
|
-
return;
|
|
1631
|
-
}
|
|
1632
|
-
<span class="cstat-no" title="statement not covered" > collectRefsFromType(source.node, out);</span>
|
|
1633
|
-
}
|
|
1634
|
-
|
|
1635
|
-
/** Collect all type names directly referenced by public operations (seed set). */
|
|
1636
|
-
function collectPublicTypeRefs(opRoots: OpRootNode[], includeInternal = false): Set<string> {
|
|
1637
|
-
const refs = new Set<string>();
|
|
1638
|
-
for (const opRoot of opRoots) {
|
|
1639
|
-
for (const route of opRoot.routes) {
|
|
1640
|
-
for (const op of route.operations) {
|
|
1641
|
-
if (!includeInternal && resolveModifiers(route, op).includes('internal')) continue;
|
|
1642
|
-
if (op.request) {
|
|
1643
|
-
for (const body of op.request.bodies) collectRefsFromType(body.bodyType, refs);
|
|
1644
|
-
}
|
|
1645
|
-
for (const resp of op.responses) {
|
|
1646
|
-
if (resp.bodyType) collectRefsFromType(resp.bodyType, refs);
|
|
1647
|
-
if (resp.headers) {
|
|
1648
|
-
for (const h of resp.headers) collectRefsFromType(h.type, refs);
|
|
1649
|
-
}
|
|
1650
|
-
}
|
|
1651
|
-
collectParamSourceRefs(route.params, refs);
|
|
1652
|
-
collectParamSourceRefs(op.query, refs);
|
|
1653
|
-
collectParamSourceRefs(op.headers, refs);
|
|
1654
|
-
}
|
|
1655
|
-
}
|
|
1656
|
-
}
|
|
1657
|
-
return refs;
|
|
1658
|
-
}
|
|
1659
|
-
|
|
1660
|
-
/** BFS-expand seed type names through the contract model graph. */
|
|
1661
|
-
function computeReachableSchemas(seeds: Set<string>, modelMap: Map<string, ModelNode>): Set<string> {
|
|
1662
|
-
const reachable = new Set<string>(seeds);
|
|
1663
|
-
const frontier = [...seeds];
|
|
1664
|
-
while (frontier.length > 0) {
|
|
1665
|
-
const name = frontier.pop()!;
|
|
1666
|
-
const model = modelMap.get(name);
|
|
1667
|
-
if (!model) continue;
|
|
1668
|
-
const refs = new Set<string>();
|
|
1669
|
-
if (model.type) collectRefsFromType(model.type, refs);
|
|
1670
|
-
for (const field of model.fields) collectRefsFromType(field.type, refs);
|
|
1671
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (model.bases) for (const b of model.bases) <span class="cstat-no" title="statement not covered" >refs.add(b);</span>
|
|
1672
|
-
for (const ref of refs) {
|
|
1673
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (!reachable.has(ref)) {
|
|
1674
|
-
reachable.add(ref);
|
|
1675
|
-
frontier.push(ref);
|
|
1676
|
-
}
|
|
1677
|
-
}
|
|
1678
|
-
}
|
|
1679
|
-
return reachable;
|
|
1680
|
-
}
|
|
1681
|
-
|
|
1682
|
-
// ─── Public entry point ────────────────────────────────────────────────────
|
|
1683
|
-
|
|
1684
|
-
export interface OpenApiCodegenContext {
|
|
1685
|
-
contractRoots: ContractRootNode[];
|
|
1686
|
-
opRoots: OpRootNode[];
|
|
1687
|
-
config: OpenApiConfig;
|
|
1688
|
-
/** Named OpenAPI security scheme definitions to include in components.securitySchemes */
|
|
1689
|
-
securitySchemes?: Record<string, OpenApiSecurityScheme>;
|
|
1690
|
-
}
|
|
1691
|
-
|
|
1692
|
-
export function generateOpenApi(ctx: OpenApiCodegenContext): string {
|
|
1693
|
-
const { contractRoots, opRoots, config, securitySchemes } = ctx;
|
|
1694
|
-
const includeInternal = config.includeInternal ?? false;
|
|
1695
|
-
|
|
1696
|
-
const doc: Record<string, unknown> = {
|
|
1697
|
-
openapi: '3.1.0',
|
|
1698
|
-
info: {
|
|
1699
|
-
title: config.info?.title ?? 'API',
|
|
1700
|
-
version: config.info?.version ?? '0.0.1',
|
|
1701
|
-
...(config.info?.description ? { description: config.info.description } : {}),
|
|
1702
|
-
},
|
|
1703
|
-
};
|
|
1704
|
-
|
|
1705
|
-
if (config.servers && config.servers.length > 0) {
|
|
1706
|
-
doc.servers = config.servers;
|
|
1707
|
-
}
|
|
1708
|
-
|
|
1709
|
-
if (config.security && config.security.length > 0) {
|
|
1710
|
-
doc.security = config.security;
|
|
1711
|
-
}
|
|
1712
|
-
|
|
1713
|
-
// Build component schemas from all contract models
|
|
1714
|
-
const allSchemas: Record<string, unknown> = {};
|
|
1715
|
-
const modelMap = new Map<string, ModelNode>();
|
|
1716
|
-
|
|
1717
|
-
for (const contractRoot of contractRoots) {
|
|
1718
|
-
for (const model of contractRoot.models) {
|
|
1719
|
-
modelMap.set(model.name, model);
|
|
1720
|
-
}
|
|
1721
|
-
}
|
|
1722
|
-
for (const contractRoot of contractRoots) {
|
|
1723
|
-
for (const model of contractRoot.models) {
|
|
1724
|
-
allSchemas[model.name] = modelToSchema(model, modelMap);
|
|
1725
|
-
}
|
|
1726
|
-
}
|
|
1727
|
-
|
|
1728
|
-
// Build paths from all operation files
|
|
1729
|
-
const paths: Record<string, Record<string, unknown>> = {};
|
|
1730
|
-
|
|
1731
|
-
for (const opRoot of opRoots) {
|
|
1732
|
-
for (const route of opRoot.routes) {
|
|
1733
|
-
const oaPath = convertPath(route.path);
|
|
1734
|
-
|
|
1735
|
-
for (const op of route.operations) {
|
|
1736
|
-
const mods = resolveModifiers(route, op);
|
|
1737
|
-
if (!includeInternal && mods.includes('internal')) continue;
|
|
1738
|
-
// Lazily initialize the path object so all-internal routes
|
|
1739
|
-
// leave no empty entry in the output
|
|
1740
|
-
if (!paths[oaPath]) paths[oaPath] = {};
|
|
1741
|
-
const operation = buildOperation(route, op);
|
|
1742
|
-
if (mods.includes('deprecated')) (operation as Record<string, unknown>).deprecated = true;
|
|
1743
|
-
paths[oaPath][op.method] = operation;
|
|
1744
|
-
}
|
|
1745
|
-
}
|
|
1746
|
-
}
|
|
1747
|
-
|
|
1748
|
-
doc.paths = paths;
|
|
1749
|
-
|
|
1750
|
-
// Filter schemas to only include types reachable from public operations.
|
|
1751
|
-
// When there are no op files, all schemas are included (no filtering).
|
|
1752
|
-
const schemas: Record<string, unknown> =
|
|
1753
|
-
opRoots.length > 0
|
|
1754
|
-
? (() => {
|
|
1755
|
-
const reachable = computeReachableSchemas(collectPublicTypeRefs(opRoots, includeInternal), modelMap);
|
|
1756
|
-
const filtered: Record<string, unknown> = {};
|
|
1757
|
-
for (const [name, schema] of Object.entries(allSchemas)) {
|
|
1758
|
-
if (reachable.has(name)) filtered[name] = schema;
|
|
1759
|
-
}
|
|
1760
|
-
return filtered;
|
|
1761
|
-
})()
|
|
1762
|
-
: allSchemas;
|
|
1763
|
-
|
|
1764
|
-
const components: Record<string, unknown> = {};
|
|
1765
|
-
if (Object.keys(schemas).length > 0) {
|
|
1766
|
-
components.schemas = schemas;
|
|
1767
|
-
}
|
|
1768
|
-
if (securitySchemes && Object.keys(securitySchemes).length > 0) {
|
|
1769
|
-
components.securitySchemes = securitySchemes;
|
|
1770
|
-
}
|
|
1771
|
-
if (Object.keys(components).length > 0) {
|
|
1772
|
-
doc.components = components;
|
|
1773
|
-
}
|
|
1774
|
-
|
|
1775
|
-
return toYaml(doc);
|
|
1776
|
-
}
|
|
1777
|
-
|
|
1778
|
-
// ─── Path conversion ──────────────────────────────────────────────────────
|
|
1779
|
-
|
|
1780
|
-
/** Path is already in OpenAPI `{param}` style — return as-is. */
|
|
1781
|
-
function convertPath(path: string): string {
|
|
1782
|
-
return path;
|
|
1783
|
-
}
|
|
1784
|
-
|
|
1785
|
-
// ─── Schema conversion ───────────────────────────────────────────────────
|
|
1786
|
-
|
|
1787
|
-
function modelToSchema(model: ModelNode, modelMap?: Map<string, ModelNode>): Record<string, unknown> {
|
|
1788
|
-
// Type alias (no fields)
|
|
1789
|
-
if (model.type) {
|
|
1790
|
-
const schema = typeToSchema(model.type, modelMap);
|
|
1791
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (model.description) <span class="cstat-no" title="statement not covered" >schema.description = model.description;</span>
|
|
1792
|
-
return schema;
|
|
1793
|
-
}
|
|
1794
|
-
|
|
1795
|
-
const properties: Record<string, unknown> = {};
|
|
1796
|
-
const required: string[] = [];
|
|
1797
|
-
|
|
1798
|
-
for (const field of model.fields) {
|
|
1799
|
-
const prop = fieldToSchema(field, modelMap);
|
|
1800
|
-
properties[field.name] = prop;
|
|
1801
|
-
if (!field.optional) {
|
|
1802
|
-
required.push(field.name);
|
|
1803
|
-
}
|
|
1804
|
-
}
|
|
1805
|
-
|
|
1806
|
-
const schema: Record<string, unknown> = {
|
|
1807
|
-
type: 'object',
|
|
1808
|
-
properties,
|
|
1809
|
-
};
|
|
1810
|
-
|
|
1811
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (required.length > 0) {
|
|
1812
|
-
schema.required = required;
|
|
1813
|
-
}
|
|
1814
|
-
|
|
1815
|
-
if (model.bases && model.bases.length > 0) {
|
|
1816
|
-
return {
|
|
1817
|
-
allOf: [...model.bases.map(b => ({ $ref: `#/components/schemas/${b}` })), schema],
|
|
1818
|
-
};
|
|
1819
|
-
}
|
|
1820
|
-
|
|
1821
|
-
if (model.description) {
|
|
1822
|
-
schema.description = model.description;
|
|
1823
|
-
}
|
|
1824
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (model.deprecated) {
|
|
1825
|
-
<span class="cstat-no" title="statement not covered" > schema.deprecated = true;</span>
|
|
1826
|
-
}
|
|
1827
|
-
|
|
1828
|
-
return schema;
|
|
1829
|
-
}
|
|
1830
|
-
|
|
1831
|
-
function fieldToSchema(field: FieldNode, modelMap?: Map<string, ModelNode>): Record<string, unknown> {
|
|
1832
|
-
let schema = typeToSchema(field.type, modelMap);
|
|
1833
|
-
|
|
1834
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (field.nullable) {
|
|
1835
|
-
<span class="cstat-no" title="statement not covered" > schema = wrapNullable(schema);</span>
|
|
1836
|
-
}
|
|
1837
|
-
if (field.visibility === 'readonly') {
|
|
1838
|
-
schema.readOnly = true;
|
|
1839
|
-
} else if (field.visibility === 'writeonly') {
|
|
1840
|
-
schema.writeOnly = true;
|
|
1841
|
-
}
|
|
1842
|
-
if (field.default !== undefined) {
|
|
1843
|
-
schema.default = field.default;
|
|
1844
|
-
}
|
|
1845
|
-
if (field.description) {
|
|
1846
|
-
schema.description = field.description;
|
|
1847
|
-
}
|
|
1848
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (field.deprecated) {
|
|
1849
|
-
<span class="cstat-no" title="statement not covered" > schema.deprecated = true;</span>
|
|
1850
|
-
}
|
|
1851
|
-
|
|
1852
|
-
return schema;
|
|
1853
|
-
}
|
|
1854
|
-
|
|
1855
|
-
function typeToSchema(type: ContractTypeNode, modelMap?: Map<string, ModelNode>): Record<string, unknown> {
|
|
1856
|
-
switch (type.kind) {
|
|
1857
|
-
case 'scalar':
|
|
1858
|
-
return scalarToSchema(type);
|
|
1859
|
-
case 'array':
|
|
1860
|
-
return arrayToSchema(type, modelMap);
|
|
1861
|
-
<span class="branch-2 cbranch-no" title="branch not covered" > case 'tuple':</span>
|
|
1862
|
-
<span class="cstat-no" title="statement not covered" > return { type: 'array', prefixItems: type.items.map(<span class="fstat-no" title="function not covered" >i => <span class="cstat-no" title="statement not covered" >t</span>ypeToSchema(i, modelMap)) }</span>;</span>
|
|
1863
|
-
case 'record':
|
|
1864
|
-
return { type: 'object', additionalProperties: typeToSchema(type.value, modelMap) };
|
|
1865
|
-
case 'enum':
|
|
1866
|
-
return { type: 'string', enum: type.values };
|
|
1867
|
-
case 'literal':
|
|
1868
|
-
return { const: type.value };
|
|
1869
|
-
<span class="branch-6 cbranch-no" title="branch not covered" > case 'union':</span>
|
|
1870
|
-
<span class="cstat-no" title="statement not covered" > return { oneOf: type.members.map(<span class="fstat-no" title="function not covered" >m => <span class="cstat-no" title="statement not covered" >t</span>ypeToSchema(m, modelMap)) }</span>;</span>
|
|
1871
|
-
case 'discriminatedUnion': {
|
|
1872
|
-
const oneOf = type.members.map(m => typeToSchema(m, modelMap));
|
|
1873
|
-
const mapping: Record<string, string> = {};
|
|
1874
|
-
for (const member of type.members) {
|
|
1875
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (member.kind !== 'ref') <span class="cstat-no" title="statement not covered" >continue;</span>
|
|
1876
|
-
const literalValues = resolveDiscriminatorLiterals(member.name, type.discriminator, modelMap);
|
|
1877
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (literalValues.length === 0) <span class="cstat-no" title="statement not covered" >continue;</span>
|
|
1878
|
-
for (const v of literalValues) {
|
|
1879
|
-
mapping[v] = `#/components/schemas/${member.name}`;
|
|
1880
|
-
}
|
|
1881
|
-
}
|
|
1882
|
-
const result: Record<string, unknown> = {
|
|
1883
|
-
oneOf,
|
|
1884
|
-
discriminator: { propertyName: type.discriminator },
|
|
1885
|
-
};
|
|
1886
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (Object.keys(mapping).length > 0) {
|
|
1887
|
-
(result.discriminator as Record<string, unknown>).mapping = mapping;
|
|
1888
|
-
}
|
|
1889
|
-
return result;
|
|
1890
|
-
}
|
|
1891
|
-
<span class="branch-8 cbranch-no" title="branch not covered" > case 'intersection':</span>
|
|
1892
|
-
<span class="cstat-no" title="statement not covered" > return { allOf: type.members.map(<span class="fstat-no" title="function not covered" >m => <span class="cstat-no" title="statement not covered" >t</span>ypeToSchema(m, modelMap)) }</span>;</span>
|
|
1893
|
-
case 'ref':
|
|
1894
|
-
return { $ref: `#/components/schemas/${type.name}` };
|
|
1895
|
-
case 'inlineObject':
|
|
1896
|
-
return inlineObjectToSchema(type.fields, modelMap);
|
|
1897
|
-
<span class="branch-11 cbranch-no" title="branch not covered" > case 'lazy':</span>
|
|
1898
|
-
<span class="cstat-no" title="statement not covered" > return typeToSchema(type.inner, modelMap);</span>
|
|
1899
|
-
}
|
|
1900
|
-
}
|
|
1901
|
-
|
|
1902
|
-
/** Resolve literal values of a model's discriminator field. Returns [] if not resolvable. */
|
|
1903
|
-
function resolveDiscriminatorLiterals(modelName: string, discriminator: string, modelMap?: Map<string, ModelNode>): string[] {
|
|
1904
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (!modelMap) <span class="cstat-no" title="statement not covered" >return [];</span>
|
|
1905
|
-
const model = modelMap.get(modelName);
|
|
1906
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (!model) <span class="cstat-no" title="statement not covered" >return [];</span>
|
|
1907
|
-
const field = model.fields.find(f => f.name === discriminator);
|
|
1908
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (!field) <span class="cstat-no" title="statement not covered" >return [];</span>
|
|
1909
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (field.type.kind === 'literal') return [String(field.type.value)];
|
|
1910
|
-
<span class="cstat-no" title="statement not covered" > if (field.type.kind === 'enum') <span class="cstat-no" title="statement not covered" >return field.type.values;</span></span>
|
|
1911
|
-
<span class="cstat-no" title="statement not covered" > return [];</span>
|
|
1912
|
-
}
|
|
1913
|
-
|
|
1914
|
-
function scalarToSchema(type: import('@contractkit/core').ScalarTypeNode): Record<string, unknown> {
|
|
1915
|
-
const s: Record<string, unknown> = {};
|
|
1916
|
-
|
|
1917
|
-
switch (type.name) {
|
|
1918
|
-
case 'string':
|
|
1919
|
-
s.type = 'string';
|
|
1920
|
-
if (type.min !== undefined) s.minLength = Number(type.min);
|
|
1921
|
-
if (type.max !== undefined) s.maxLength = Number(type.max);
|
|
1922
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (type.len !== undefined) {
|
|
1923
|
-
<span class="cstat-no" title="statement not covered" > s.minLength = type.len;</span>
|
|
1924
|
-
<span class="cstat-no" title="statement not covered" > s.maxLength = type.len;</span>
|
|
1925
|
-
}
|
|
1926
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (type.regex) <span class="cstat-no" title="statement not covered" >s.pattern = type.regex;</span>
|
|
1927
|
-
break;
|
|
1928
|
-
<span class="branch-1 cbranch-no" title="branch not covered" > case 'number':</span>
|
|
1929
|
-
<span class="cstat-no" title="statement not covered" > s.type = 'number';</span>
|
|
1930
|
-
<span class="cstat-no" title="statement not covered" > if (type.min !== undefined) <span class="cstat-no" title="statement not covered" >s.minimum = Number(type.min);</span></span>
|
|
1931
|
-
<span class="cstat-no" title="statement not covered" > if (type.max !== undefined) <span class="cstat-no" title="statement not covered" >s.maximum = Number(type.max);</span></span>
|
|
1932
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1933
|
-
case 'int':
|
|
1934
|
-
s.type = 'integer';
|
|
1935
|
-
if (type.min !== undefined) s.minimum = Number(type.min);
|
|
1936
|
-
if (type.max !== undefined) s.maximum = Number(type.max);
|
|
1937
|
-
break;
|
|
1938
|
-
<span class="branch-3 cbranch-no" title="branch not covered" > case 'bigint':</span>
|
|
1939
|
-
<span class="cstat-no" title="statement not covered" > s.type = 'integer';</span>
|
|
1940
|
-
<span class="cstat-no" title="statement not covered" > s.format = 'int64';</span>
|
|
1941
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1942
|
-
case 'boolean':
|
|
1943
|
-
s.type = 'boolean';
|
|
1944
|
-
break;
|
|
1945
|
-
<span class="branch-5 cbranch-no" title="branch not covered" > case 'date':</span>
|
|
1946
|
-
<span class="cstat-no" title="statement not covered" > s.type = 'string';</span>
|
|
1947
|
-
<span class="cstat-no" title="statement not covered" > s.format = 'date';</span>
|
|
1948
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1949
|
-
<span class="branch-6 cbranch-no" title="branch not covered" > case 'datetime':</span>
|
|
1950
|
-
<span class="cstat-no" title="statement not covered" > s.type = 'string';</span>
|
|
1951
|
-
<span class="cstat-no" title="statement not covered" > s.format = 'date-time';</span>
|
|
1952
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1953
|
-
<span class="branch-7 cbranch-no" title="branch not covered" > case 'duration':</span>
|
|
1954
|
-
<span class="cstat-no" title="statement not covered" > s.type = 'string';</span>
|
|
1955
|
-
<span class="cstat-no" title="statement not covered" > s.format = 'duration';</span>
|
|
1956
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1957
|
-
case 'email':
|
|
1958
|
-
s.type = 'string';
|
|
1959
|
-
s.format = 'email';
|
|
1960
|
-
break;
|
|
1961
|
-
<span class="branch-9 cbranch-no" title="branch not covered" > case 'url':</span>
|
|
1962
|
-
<span class="cstat-no" title="statement not covered" > s.type = 'string';</span>
|
|
1963
|
-
<span class="cstat-no" title="statement not covered" > s.format = 'uri';</span>
|
|
1964
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1965
|
-
case 'uuid':
|
|
1966
|
-
s.type = 'string';
|
|
1967
|
-
s.format = 'uuid';
|
|
1968
|
-
break;
|
|
1969
|
-
<span class="branch-11 cbranch-no" title="branch not covered" > case 'unknown':</span>
|
|
1970
|
-
// No type constraint
|
|
1971
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1972
|
-
<span class="branch-12 cbranch-no" title="branch not covered" > case 'null':</span>
|
|
1973
|
-
<span class="cstat-no" title="statement not covered" > s.type = 'null';</span>
|
|
1974
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1975
|
-
<span class="branch-13 cbranch-no" title="branch not covered" > case 'object':</span>
|
|
1976
|
-
<span class="cstat-no" title="statement not covered" > s.type = 'object';</span>
|
|
1977
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1978
|
-
<span class="branch-14 cbranch-no" title="branch not covered" > case 'binary':</span>
|
|
1979
|
-
<span class="cstat-no" title="statement not covered" > s.type = 'string';</span>
|
|
1980
|
-
<span class="cstat-no" title="statement not covered" > s.format = 'binary';</span>
|
|
1981
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1982
|
-
<span class="branch-15 cbranch-no" title="branch not covered" > case 'json':</span>
|
|
1983
|
-
// Any JSON value — no type constraint
|
|
1984
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1985
|
-
}
|
|
1986
|
-
|
|
1987
|
-
return s;
|
|
1988
|
-
}
|
|
1989
|
-
|
|
1990
|
-
function arrayToSchema(type: import('@contractkit/core').ArrayTypeNode, modelMap?: Map<string, ModelNode>): Record<string, unknown> {
|
|
1991
|
-
const s: Record<string, unknown> = { type: 'array', items: typeToSchema(type.item, modelMap) };
|
|
1992
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (type.min !== undefined) <span class="cstat-no" title="statement not covered" >s.minItems = type.min;</span>
|
|
1993
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (type.max !== undefined) <span class="cstat-no" title="statement not covered" >s.maxItems = type.max;</span>
|
|
1994
|
-
return s;
|
|
1995
|
-
}
|
|
1996
|
-
|
|
1997
|
-
function inlineObjectToSchema(fields: FieldNode[], modelMap?: Map<string, ModelNode>): Record<string, unknown> {
|
|
1998
|
-
const properties: Record<string, unknown> = {};
|
|
1999
|
-
const required: string[] = [];
|
|
2000
|
-
|
|
2001
|
-
for (const field of fields) {
|
|
2002
|
-
properties[field.name] = fieldToSchema(field, modelMap);
|
|
2003
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (!field.optional) {
|
|
2004
|
-
required.push(field.name);
|
|
2005
|
-
}
|
|
2006
|
-
}
|
|
2007
|
-
|
|
2008
|
-
const schema: Record<string, unknown> = { type: 'object', properties };
|
|
2009
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (required.length > 0) schema.required = required;
|
|
2010
|
-
return schema;
|
|
2011
|
-
}
|
|
2012
|
-
|
|
2013
|
-
function <span class="fstat-no" title="function not covered" >wrapNullable(s</span>chema: Record<string, unknown>): Record<string, unknown> {
|
|
2014
|
-
// OpenAPI 3.1 uses JSON Schema nullable via oneOf or type array
|
|
2015
|
-
<span class="cstat-no" title="statement not covered" > if (schema.$ref) {</span>
|
|
2016
|
-
<span class="cstat-no" title="statement not covered" > return { oneOf: [schema, { type: 'null' }] };</span>
|
|
2017
|
-
}
|
|
2018
|
-
<span class="cstat-no" title="statement not covered" > if (typeof schema.type === 'string') {</span>
|
|
2019
|
-
<span class="cstat-no" title="statement not covered" > schema.type = [schema.type, 'null'];</span>
|
|
2020
|
-
}
|
|
2021
|
-
<span class="cstat-no" title="statement not covered" > return schema;</span>
|
|
2022
|
-
}
|
|
2023
|
-
|
|
2024
|
-
// ─── Operation building ─────────────────────────────────────────────────
|
|
2025
|
-
|
|
2026
|
-
function buildOperation(route: OpRouteNode, op: OpOperationNode): Record<string, unknown> {
|
|
2027
|
-
const operation: Record<string, unknown> = {};
|
|
2028
|
-
|
|
2029
|
-
// operationId from service binding or SDK name
|
|
2030
|
-
if (op.sdk) {
|
|
2031
|
-
operation.operationId = op.sdk;
|
|
2032
|
-
} else if (op.service) {
|
|
2033
|
-
const methodPart = op.service.split('.').pop();
|
|
2034
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (methodPart) operation.operationId = methodPart;
|
|
2035
|
-
}
|
|
2036
|
-
|
|
2037
|
-
if (op.description) {
|
|
2038
|
-
operation.description = op.description;
|
|
2039
|
-
}
|
|
2040
|
-
|
|
2041
|
-
// Parameters: path params + query + headers
|
|
2042
|
-
const parameters: Record<string, unknown>[] = [];
|
|
2043
|
-
|
|
2044
|
-
if (route.params) {
|
|
2045
|
-
parameters.push(...paramSourceToParams(route.params, 'path'));
|
|
2046
|
-
}
|
|
2047
|
-
if (op.query) {
|
|
2048
|
-
parameters.push(...paramSourceToParams(op.query, 'query'));
|
|
2049
|
-
}
|
|
2050
|
-
if (op.headers) {
|
|
2051
|
-
parameters.push(...paramSourceToParams(op.headers, 'header'));
|
|
2052
|
-
}
|
|
2053
|
-
|
|
2054
|
-
if (parameters.length > 0) {
|
|
2055
|
-
operation.parameters = parameters;
|
|
2056
|
-
}
|
|
2057
|
-
|
|
2058
|
-
// Request body
|
|
2059
|
-
if (op.request && op.request.bodies.length > 0) {
|
|
2060
|
-
const content: Record<string, { schema: ReturnType<typeof typeToSchema> }> = {};
|
|
2061
|
-
for (const body of op.request.bodies) {
|
|
2062
|
-
content[body.contentType] = { schema: typeToSchema(body.bodyType) };
|
|
2063
|
-
}
|
|
2064
|
-
operation.requestBody = { required: true, content };
|
|
2065
|
-
}
|
|
2066
|
-
|
|
2067
|
-
// Effective security (operation-level wins; falls back to route-level)
|
|
2068
|
-
// security: none → empty array (explicit public endpoint, overrides global default)
|
|
2069
|
-
// security: { fields } → omit operation-level entry (rely on global security from config)
|
|
2070
|
-
const effectiveSecurity = resolveSecurity(route, op);
|
|
2071
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (effectiveSecurity === SECURITY_NONE) {
|
|
2072
|
-
<span class="cstat-no" title="statement not covered" > operation.security = [];</span>
|
|
2073
|
-
}
|
|
2074
|
-
|
|
2075
|
-
// Responses
|
|
2076
|
-
const responses: Record<string, unknown> = {};
|
|
2077
|
-
for (const resp of op.responses) {
|
|
2078
|
-
const statusKey = String(resp.statusCode);
|
|
2079
|
-
const responseObject: Record<string, unknown> = {
|
|
2080
|
-
description: statusDescription(resp.statusCode),
|
|
2081
|
-
};
|
|
2082
|
-
if (resp.bodyType && resp.contentType) {
|
|
2083
|
-
responseObject.content = {
|
|
2084
|
-
[resp.contentType]: {
|
|
2085
|
-
schema: typeToSchema(resp.bodyType),
|
|
2086
|
-
},
|
|
2087
|
-
};
|
|
2088
|
-
}
|
|
2089
|
-
if (resp.headers && resp.headers.length > 0) {
|
|
2090
|
-
const headers: Record<string, unknown> = {};
|
|
2091
|
-
for (const h of resp.headers) {
|
|
2092
|
-
const headerObject: Record<string, unknown> = {
|
|
2093
|
-
schema: typeToSchema(h.type),
|
|
2094
|
-
};
|
|
2095
|
-
if (!h.optional) headerObject.required = true;
|
|
2096
|
-
if (h.description) headerObject.description = h.description;
|
|
2097
|
-
headers[h.name] = headerObject;
|
|
2098
|
-
}
|
|
2099
|
-
responseObject.headers = headers;
|
|
2100
|
-
}
|
|
2101
|
-
responses[statusKey] = responseObject;
|
|
2102
|
-
}
|
|
2103
|
-
|
|
2104
|
-
if (Object.keys(responses).length > 0) {
|
|
2105
|
-
operation.responses = responses;
|
|
2106
|
-
}
|
|
2107
|
-
|
|
2108
|
-
return operation;
|
|
2109
|
-
}
|
|
2110
|
-
|
|
2111
|
-
function paramSourceToParams(source: ParamSource, location: 'path' | 'query' | 'header'): Record<string, unknown>[] {
|
|
2112
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (source.kind === 'ref') {
|
|
2113
|
-
// Type reference name used as param source — emit a single $ref
|
|
2114
|
-
<span class="cstat-no" title="statement not covered" > return [</span>
|
|
2115
|
-
{
|
|
2116
|
-
name: source.name,
|
|
2117
|
-
in: location,
|
|
2118
|
-
required: location === 'path',
|
|
2119
|
-
schema: { $ref: `#/components/schemas/${source.name}` },
|
|
2120
|
-
},
|
|
2121
|
-
];
|
|
2122
|
-
}
|
|
2123
|
-
|
|
2124
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (source.kind === 'params') {
|
|
2125
|
-
// Inline param declarations
|
|
2126
|
-
return source.nodes.map(p => ({
|
|
2127
|
-
name: p.name,
|
|
2128
|
-
in: location,
|
|
2129
|
-
required: location === 'path',
|
|
2130
|
-
schema: typeToSchema(p.type),
|
|
2131
|
-
}));
|
|
2132
|
-
}
|
|
2133
|
-
|
|
2134
|
-
// ContractTypeNode (inline object or other type) — if it's an inlineObject, expand fields
|
|
2135
|
-
<span class="cstat-no" title="statement not covered" > if (source.node.kind === 'inlineObject') {</span>
|
|
2136
|
-
<span class="cstat-no" title="statement not covered" > return source.node.fields.map(<span class="fstat-no" title="function not covered" >f => (<span class="cstat-no" title="statement not covered" >{</span></span></span>
|
|
2137
|
-
name: f.name,
|
|
2138
|
-
in: location,
|
|
2139
|
-
required: location === 'path' ? true : !f.optional,
|
|
2140
|
-
schema: typeToSchema(f.type),
|
|
2141
|
-
}));
|
|
2142
|
-
}
|
|
2143
|
-
|
|
2144
|
-
// For a ref type used as param source
|
|
2145
|
-
<span class="cstat-no" title="statement not covered" > if (source.node.kind === 'ref') {</span>
|
|
2146
|
-
<span class="cstat-no" title="statement not covered" > return [</span>
|
|
2147
|
-
{
|
|
2148
|
-
name: source.node.name,
|
|
2149
|
-
in: location,
|
|
2150
|
-
required: location === 'path',
|
|
2151
|
-
schema: { $ref: `#/components/schemas/${source.node.name}` },
|
|
2152
|
-
},
|
|
2153
|
-
];
|
|
2154
|
-
}
|
|
2155
|
-
|
|
2156
|
-
<span class="cstat-no" title="statement not covered" > return [];</span>
|
|
2157
|
-
}
|
|
2158
|
-
|
|
2159
|
-
function statusDescription(code: number): string {
|
|
2160
|
-
const descriptions: Record<number, string> = {
|
|
2161
|
-
200: 'Successful response',
|
|
2162
|
-
201: 'Created',
|
|
2163
|
-
204: 'No content',
|
|
2164
|
-
400: 'Bad request',
|
|
2165
|
-
401: 'Unauthorized',
|
|
2166
|
-
403: 'Forbidden',
|
|
2167
|
-
404: 'Not found',
|
|
2168
|
-
409: 'Conflict',
|
|
2169
|
-
422: 'Unprocessable entity',
|
|
2170
|
-
500: 'Internal server error',
|
|
2171
|
-
};
|
|
2172
|
-
return descriptions[code] ?? <span class="branch-1 cbranch-no" title="branch not covered" >`Response ${code}`;</span>
|
|
2173
|
-
}
|
|
2174
|
-
|
|
2175
|
-
// ─── YAML serializer ──────────────────────────────────────────────────────
|
|
2176
|
-
|
|
2177
|
-
/**
|
|
2178
|
-
* Minimal YAML serializer sufficient for OpenAPI documents.
|
|
2179
|
-
* Avoids external dependency while producing clean, readable output.
|
|
2180
|
-
*/
|
|
2181
|
-
export function toYaml(value: unknown, indent = 0): string {
|
|
2182
|
-
if (value === null || value === undefined) return 'null';
|
|
2183
|
-
if (typeof value === 'boolean') return value ? 'true' : 'false';
|
|
2184
|
-
if (typeof value === 'number') return String(value);
|
|
2185
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (typeof value === 'bigint') <span class="cstat-no" title="statement not covered" >return String(value);</span>
|
|
2186
|
-
|
|
2187
|
-
if (typeof value === 'string') {
|
|
2188
|
-
return yamlString(value);
|
|
2189
|
-
}
|
|
2190
|
-
|
|
2191
|
-
if (Array.isArray(value)) {
|
|
2192
|
-
if (value.length === 0) return '[]';
|
|
2193
|
-
|
|
2194
|
-
// Check if all items are simple scalars (for inline arrays like enum values, required lists)
|
|
2195
|
-
if (value.every(v => typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean')) {
|
|
2196
|
-
const items = value.map(v => (typeof v === 'string' ? yamlString(v) : <span class="branch-1 cbranch-no" title="branch not covered" >String(v)));</span>
|
|
2197
|
-
const inline = `[${items.join(', ')}]`;
|
|
2198
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (inline.length < 80) return inline;
|
|
2199
|
-
}
|
|
2200
|
-
|
|
2201
|
-
const lines: string[] = [];
|
|
2202
|
-
const pad = ' '.repeat(indent);
|
|
2203
|
-
for (const item of value) {
|
|
2204
|
-
if (isPlainObject(item)) {
|
|
2205
|
-
const entries = Object.entries(item as Record<string, unknown>);
|
|
2206
|
-
if (entries.length > 0) {
|
|
2207
|
-
const [firstKey, firstVal] = entries[0]!;
|
|
2208
|
-
const firstValStr = isComplex(firstVal) ? <span class="branch-0 cbranch-no" title="branch not covered" >`\n${toYamlValue(firstVal, indent + 2)}` </span>: ` ${toYaml(firstVal, indent + 2)}`;
|
|
2209
|
-
lines.push(`${pad}- ${yamlKey(firstKey)}:${firstValStr}`);
|
|
2210
|
-
for (let i = 1; i < entries.length; i++) {
|
|
2211
|
-
const [k, v] = entries[i]!;
|
|
2212
|
-
const valStr = isComplex(v) ? `\n${toYamlValue(v, indent + 2)}` : ` ${toYaml(v, indent + 2)}`;
|
|
2213
|
-
lines.push(`${pad} ${yamlKey(k)}:${valStr}`);
|
|
2214
|
-
}
|
|
2215
|
-
} else <span class="missing-if-branch" title="else path not taken" >E</span>{
|
|
2216
|
-
<span class="cstat-no" title="statement not covered" > lines.push(`${pad}- {}`);</span>
|
|
2217
|
-
}
|
|
2218
|
-
} else <span class="missing-if-branch" title="else path not taken" >E</span>{
|
|
2219
|
-
<span class="cstat-no" title="statement not covered" > lines.push(`${pad}- ${toYaml(item, indent + 1)}`);</span>
|
|
2220
|
-
}
|
|
2221
|
-
}
|
|
2222
|
-
return lines.join('\n');
|
|
2223
|
-
}
|
|
2224
|
-
|
|
2225
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (isPlainObject(value)) {
|
|
2226
|
-
const obj = value as Record<string, unknown>;
|
|
2227
|
-
const entries = Object.entries(obj);
|
|
2228
|
-
if (entries.length === 0) return '{}';
|
|
2229
|
-
|
|
2230
|
-
const pad = ' '.repeat(indent);
|
|
2231
|
-
const lines: string[] = [];
|
|
2232
|
-
for (const [key, val] of entries) {
|
|
2233
|
-
if (isComplex(val)) {
|
|
2234
|
-
lines.push(`${pad}${yamlKey(key)}:`);
|
|
2235
|
-
lines.push(toYamlValue(val, indent + 1));
|
|
2236
|
-
} else {
|
|
2237
|
-
lines.push(`${pad}${yamlKey(key)}: ${toYaml(val, indent + 1)}`);
|
|
2238
|
-
}
|
|
2239
|
-
}
|
|
2240
|
-
return lines.join('\n');
|
|
2241
|
-
}
|
|
2242
|
-
|
|
2243
|
-
<span class="cstat-no" title="statement not covered" > return String(value);</span>
|
|
2244
|
-
}
|
|
2245
|
-
|
|
2246
|
-
function toYamlValue(value: unknown, indent: number): string {
|
|
2247
|
-
if (Array.isArray(value)) {
|
|
2248
|
-
return toYaml(value, indent);
|
|
2249
|
-
}
|
|
2250
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (isPlainObject(value)) {
|
|
2251
|
-
return toYaml(value, indent);
|
|
2252
|
-
}
|
|
2253
|
-
<span class="cstat-no" title="statement not covered" > return ' '.repeat(indent) + toYaml(value, indent);</span>
|
|
2254
|
-
}
|
|
2255
|
-
|
|
2256
|
-
function isComplex(value: unknown): boolean {
|
|
2257
|
-
if (Array.isArray(value)) {
|
|
2258
|
-
// Simple scalar arrays can be inlined
|
|
2259
|
-
if (value.every(v => typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean')) {
|
|
2260
|
-
const items = value.map(v => (typeof v === 'string' ? yamlString(v) : <span class="branch-1 cbranch-no" title="branch not covered" >String(v)));</span>
|
|
2261
|
-
return `[${items.join(', ')}]`.length >= 80;
|
|
2262
|
-
}
|
|
2263
|
-
return true;
|
|
2264
|
-
}
|
|
2265
|
-
return isPlainObject(value);
|
|
2266
|
-
}
|
|
2267
|
-
|
|
2268
|
-
function isPlainObject(value: unknown): boolean {
|
|
2269
|
-
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
2270
|
-
}
|
|
2271
|
-
|
|
2272
|
-
function yamlString(s: string): string {
|
|
2273
|
-
// Use plain style if safe, otherwise single-quoted
|
|
2274
|
-
if (s === '') return "''";
|
|
2275
|
-
if (/^[\w./-]+$/.test(s) && !/^(true|false|null|yes|no|on|off)$/i.test(s) && !/^\d/.test(s)) {
|
|
2276
|
-
return s;
|
|
2277
|
-
}
|
|
2278
|
-
// Single-quote, escaping internal single quotes by doubling
|
|
2279
|
-
return `'${s.replace(/'/g, "''")}'`;
|
|
2280
|
-
}
|
|
2281
|
-
|
|
2282
|
-
function yamlKey(key: string): string {
|
|
2283
|
-
// Keys with special chars need quoting
|
|
2284
|
-
if (/^[\w-]+$/.test(key) && !/^(true|false|null|yes|no|on|off)$/i.test(key)) {
|
|
2285
|
-
return key;
|
|
2286
|
-
}
|
|
2287
|
-
return `'${key.replace(/'/g, "''")}'`;
|
|
2288
|
-
}
|
|
2289
|
-
</pre></td></tr></table></pre>
|
|
2290
|
-
|
|
2291
|
-
<div class='push'></div><!-- for sticky footer -->
|
|
2292
|
-
</div><!-- /wrapper -->
|
|
2293
|
-
<div class='footer quiet pad2 space-top1 center small'>
|
|
2294
|
-
Code coverage generated by
|
|
2295
|
-
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
2296
|
-
at 2026-06-16T15:55:41.295Z
|
|
2297
|
-
</div>
|
|
2298
|
-
<script src="../prettify.js"></script>
|
|
2299
|
-
<script>
|
|
2300
|
-
window.onload = function () {
|
|
2301
|
-
prettyPrint();
|
|
2302
|
-
};
|
|
2303
|
-
</script>
|
|
2304
|
-
<script src="../sorter.js"></script>
|
|
2305
|
-
<script src="../block-navigation.js"></script>
|
|
2306
|
-
</body>
|
|
2307
|
-
</html>
|
|
2308
|
-
|