cdk-common 2.0.190 → 2.0.193

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/.jsii +3 -3
  2. package/lib/main.js +1 -1
  3. package/node_modules/@aws-cdk/assert/package.json +8 -8
  4. package/node_modules/@aws-cdk/cfnspec/build-tools/create-missing-libraries.js +2 -2
  5. package/node_modules/@aws-cdk/cfnspec/package.json +3 -3
  6. package/node_modules/@aws-cdk/cfnspec/tsconfig.tsbuildinfo +1 -1
  7. package/node_modules/@aws-cdk/cloudformation-diff/package.json +4 -4
  8. package/node_modules/@types/concat-stream/node_modules/@types/node/README.md +1 -1
  9. package/node_modules/@types/concat-stream/node_modules/@types/node/fs/promises.d.ts +1 -1
  10. package/node_modules/@types/concat-stream/node_modules/@types/node/fs.d.ts +3 -3
  11. package/node_modules/@types/concat-stream/node_modules/@types/node/package.json +2 -2
  12. package/node_modules/@types/form-data/node_modules/@types/node/README.md +1 -1
  13. package/node_modules/@types/form-data/node_modules/@types/node/fs/promises.d.ts +1 -1
  14. package/node_modules/@types/form-data/node_modules/@types/node/fs.d.ts +3 -3
  15. package/node_modules/@types/form-data/node_modules/@types/node/package.json +2 -2
  16. package/package.json +2 -2
  17. package/node_modules/@aws-cdk/cfnspec/coverage/base.css +0 -224
  18. package/node_modules/@aws-cdk/cfnspec/coverage/block-navigation.js +0 -87
  19. package/node_modules/@aws-cdk/cfnspec/coverage/build-tools/index.html +0 -161
  20. package/node_modules/@aws-cdk/cfnspec/coverage/build-tools/massage-spec.ts.html +0 -295
  21. package/node_modules/@aws-cdk/cfnspec/coverage/build-tools/patch-set.ts.html +0 -907
  22. package/node_modules/@aws-cdk/cfnspec/coverage/build-tools/scrutiny.ts.html +0 -349
  23. package/node_modules/@aws-cdk/cfnspec/coverage/build-tools/validate-cfn.ts.html +0 -1093
  24. package/node_modules/@aws-cdk/cfnspec/coverage/favicon.png +0 -0
  25. package/node_modules/@aws-cdk/cfnspec/coverage/index.html +0 -161
  26. package/node_modules/@aws-cdk/cfnspec/coverage/junit.xml +0 -35617
  27. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/base.css +0 -224
  28. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/block-navigation.js +0 -87
  29. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/build-tools/index.html +0 -161
  30. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/build-tools/massage-spec.ts.html +0 -295
  31. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/build-tools/patch-set.ts.html +0 -907
  32. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/build-tools/scrutiny.ts.html +0 -349
  33. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/build-tools/validate-cfn.ts.html +0 -1093
  34. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/favicon.png +0 -0
  35. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/index.html +0 -161
  36. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/canned-metrics/canned-metrics-schema.ts.html +0 -304
  37. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/canned-metrics/index.html +0 -116
  38. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/canned-metrics.ts.html +0 -445
  39. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/index.html +0 -131
  40. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/index.ts.html +0 -634
  41. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/schema/augmentation.ts.html +0 -376
  42. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/schema/base-types.ts.html +0 -172
  43. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/schema/index.html +0 -191
  44. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/schema/index.ts.html +0 -103
  45. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/schema/property.ts.html +0 -1003
  46. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/schema/resource-type.ts.html +0 -577
  47. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/schema/specification.ts.html +0 -253
  48. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/prettify.css +0 -1
  49. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/prettify.js +0 -2
  50. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  51. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/sorter.js +0 -196
  52. package/node_modules/@aws-cdk/cfnspec/coverage/lcov.info +0 -1112
  53. package/node_modules/@aws-cdk/cfnspec/coverage/lib/canned-metrics/canned-metrics-schema.ts.html +0 -304
  54. package/node_modules/@aws-cdk/cfnspec/coverage/lib/canned-metrics/index.html +0 -116
  55. package/node_modules/@aws-cdk/cfnspec/coverage/lib/canned-metrics.ts.html +0 -445
  56. package/node_modules/@aws-cdk/cfnspec/coverage/lib/index.html +0 -131
  57. package/node_modules/@aws-cdk/cfnspec/coverage/lib/index.ts.html +0 -634
  58. package/node_modules/@aws-cdk/cfnspec/coverage/lib/schema/augmentation.ts.html +0 -376
  59. package/node_modules/@aws-cdk/cfnspec/coverage/lib/schema/base-types.ts.html +0 -172
  60. package/node_modules/@aws-cdk/cfnspec/coverage/lib/schema/index.html +0 -191
  61. package/node_modules/@aws-cdk/cfnspec/coverage/lib/schema/index.ts.html +0 -103
  62. package/node_modules/@aws-cdk/cfnspec/coverage/lib/schema/property.ts.html +0 -1003
  63. package/node_modules/@aws-cdk/cfnspec/coverage/lib/schema/resource-type.ts.html +0 -577
  64. package/node_modules/@aws-cdk/cfnspec/coverage/lib/schema/specification.ts.html +0 -253
  65. package/node_modules/@aws-cdk/cfnspec/coverage/prettify.css +0 -1
  66. package/node_modules/@aws-cdk/cfnspec/coverage/prettify.js +0 -2
  67. package/node_modules/@aws-cdk/cfnspec/coverage/sort-arrow-sprite.png +0 -0
  68. package/node_modules/@aws-cdk/cfnspec/coverage/sorter.js +0 -196
@@ -1,1093 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for build-tools/validate-cfn.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">build-tools</a> validate-cfn.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">72.41% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>84/116</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">68.57% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>24/35</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">75.75% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>25/33</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">71.81% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>79/110</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input oninput="onInput()" type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line high'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a>
146
- <a name='L81'></a><a href='#L81'>81</a>
147
- <a name='L82'></a><a href='#L82'>82</a>
148
- <a name='L83'></a><a href='#L83'>83</a>
149
- <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a>
177
- <a name='L112'></a><a href='#L112'>112</a>
178
- <a name='L113'></a><a href='#L113'>113</a>
179
- <a name='L114'></a><a href='#L114'>114</a>
180
- <a name='L115'></a><a href='#L115'>115</a>
181
- <a name='L116'></a><a href='#L116'>116</a>
182
- <a name='L117'></a><a href='#L117'>117</a>
183
- <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a>
222
- <a name='L157'></a><a href='#L157'>157</a>
223
- <a name='L158'></a><a href='#L158'>158</a>
224
- <a name='L159'></a><a href='#L159'>159</a>
225
- <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a>
227
- <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a>
229
- <a name='L164'></a><a href='#L164'>164</a>
230
- <a name='L165'></a><a href='#L165'>165</a>
231
- <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a>
233
- <a name='L168'></a><a href='#L168'>168</a>
234
- <a name='L169'></a><a href='#L169'>169</a>
235
- <a name='L170'></a><a href='#L170'>170</a>
236
- <a name='L171'></a><a href='#L171'>171</a>
237
- <a name='L172'></a><a href='#L172'>172</a>
238
- <a name='L173'></a><a href='#L173'>173</a>
239
- <a name='L174'></a><a href='#L174'>174</a>
240
- <a name='L175'></a><a href='#L175'>175</a>
241
- <a name='L176'></a><a href='#L176'>176</a>
242
- <a name='L177'></a><a href='#L177'>177</a>
243
- <a name='L178'></a><a href='#L178'>178</a>
244
- <a name='L179'></a><a href='#L179'>179</a>
245
- <a name='L180'></a><a href='#L180'>180</a>
246
- <a name='L181'></a><a href='#L181'>181</a>
247
- <a name='L182'></a><a href='#L182'>182</a>
248
- <a name='L183'></a><a href='#L183'>183</a>
249
- <a name='L184'></a><a href='#L184'>184</a>
250
- <a name='L185'></a><a href='#L185'>185</a>
251
- <a name='L186'></a><a href='#L186'>186</a>
252
- <a name='L187'></a><a href='#L187'>187</a>
253
- <a name='L188'></a><a href='#L188'>188</a>
254
- <a name='L189'></a><a href='#L189'>189</a>
255
- <a name='L190'></a><a href='#L190'>190</a>
256
- <a name='L191'></a><a href='#L191'>191</a>
257
- <a name='L192'></a><a href='#L192'>192</a>
258
- <a name='L193'></a><a href='#L193'>193</a>
259
- <a name='L194'></a><a href='#L194'>194</a>
260
- <a name='L195'></a><a href='#L195'>195</a>
261
- <a name='L196'></a><a href='#L196'>196</a>
262
- <a name='L197'></a><a href='#L197'>197</a>
263
- <a name='L198'></a><a href='#L198'>198</a>
264
- <a name='L199'></a><a href='#L199'>199</a>
265
- <a name='L200'></a><a href='#L200'>200</a>
266
- <a name='L201'></a><a href='#L201'>201</a>
267
- <a name='L202'></a><a href='#L202'>202</a>
268
- <a name='L203'></a><a href='#L203'>203</a>
269
- <a name='L204'></a><a href='#L204'>204</a>
270
- <a name='L205'></a><a href='#L205'>205</a>
271
- <a name='L206'></a><a href='#L206'>206</a>
272
- <a name='L207'></a><a href='#L207'>207</a>
273
- <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a>
275
- <a name='L210'></a><a href='#L210'>210</a>
276
- <a name='L211'></a><a href='#L211'>211</a>
277
- <a name='L212'></a><a href='#L212'>212</a>
278
- <a name='L213'></a><a href='#L213'>213</a>
279
- <a name='L214'></a><a href='#L214'>214</a>
280
- <a name='L215'></a><a href='#L215'>215</a>
281
- <a name='L216'></a><a href='#L216'>216</a>
282
- <a name='L217'></a><a href='#L217'>217</a>
283
- <a name='L218'></a><a href='#L218'>218</a>
284
- <a name='L219'></a><a href='#L219'>219</a>
285
- <a name='L220'></a><a href='#L220'>220</a>
286
- <a name='L221'></a><a href='#L221'>221</a>
287
- <a name='L222'></a><a href='#L222'>222</a>
288
- <a name='L223'></a><a href='#L223'>223</a>
289
- <a name='L224'></a><a href='#L224'>224</a>
290
- <a name='L225'></a><a href='#L225'>225</a>
291
- <a name='L226'></a><a href='#L226'>226</a>
292
- <a name='L227'></a><a href='#L227'>227</a>
293
- <a name='L228'></a><a href='#L228'>228</a>
294
- <a name='L229'></a><a href='#L229'>229</a>
295
- <a name='L230'></a><a href='#L230'>230</a>
296
- <a name='L231'></a><a href='#L231'>231</a>
297
- <a name='L232'></a><a href='#L232'>232</a>
298
- <a name='L233'></a><a href='#L233'>233</a>
299
- <a name='L234'></a><a href='#L234'>234</a>
300
- <a name='L235'></a><a href='#L235'>235</a>
301
- <a name='L236'></a><a href='#L236'>236</a>
302
- <a name='L237'></a><a href='#L237'>237</a>
303
- <a name='L238'></a><a href='#L238'>238</a>
304
- <a name='L239'></a><a href='#L239'>239</a>
305
- <a name='L240'></a><a href='#L240'>240</a>
306
- <a name='L241'></a><a href='#L241'>241</a>
307
- <a name='L242'></a><a href='#L242'>242</a>
308
- <a name='L243'></a><a href='#L243'>243</a>
309
- <a name='L244'></a><a href='#L244'>244</a>
310
- <a name='L245'></a><a href='#L245'>245</a>
311
- <a name='L246'></a><a href='#L246'>246</a>
312
- <a name='L247'></a><a href='#L247'>247</a>
313
- <a name='L248'></a><a href='#L248'>248</a>
314
- <a name='L249'></a><a href='#L249'>249</a>
315
- <a name='L250'></a><a href='#L250'>250</a>
316
- <a name='L251'></a><a href='#L251'>251</a>
317
- <a name='L252'></a><a href='#L252'>252</a>
318
- <a name='L253'></a><a href='#L253'>253</a>
319
- <a name='L254'></a><a href='#L254'>254</a>
320
- <a name='L255'></a><a href='#L255'>255</a>
321
- <a name='L256'></a><a href='#L256'>256</a>
322
- <a name='L257'></a><a href='#L257'>257</a>
323
- <a name='L258'></a><a href='#L258'>258</a>
324
- <a name='L259'></a><a href='#L259'>259</a>
325
- <a name='L260'></a><a href='#L260'>260</a>
326
- <a name='L261'></a><a href='#L261'>261</a>
327
- <a name='L262'></a><a href='#L262'>262</a>
328
- <a name='L263'></a><a href='#L263'>263</a>
329
- <a name='L264'></a><a href='#L264'>264</a>
330
- <a name='L265'></a><a href='#L265'>265</a>
331
- <a name='L266'></a><a href='#L266'>266</a>
332
- <a name='L267'></a><a href='#L267'>267</a>
333
- <a name='L268'></a><a href='#L268'>268</a>
334
- <a name='L269'></a><a href='#L269'>269</a>
335
- <a name='L270'></a><a href='#L270'>270</a>
336
- <a name='L271'></a><a href='#L271'>271</a>
337
- <a name='L272'></a><a href='#L272'>272</a>
338
- <a name='L273'></a><a href='#L273'>273</a>
339
- <a name='L274'></a><a href='#L274'>274</a>
340
- <a name='L275'></a><a href='#L275'>275</a>
341
- <a name='L276'></a><a href='#L276'>276</a>
342
- <a name='L277'></a><a href='#L277'>277</a>
343
- <a name='L278'></a><a href='#L278'>278</a>
344
- <a name='L279'></a><a href='#L279'>279</a>
345
- <a name='L280'></a><a href='#L280'>280</a>
346
- <a name='L281'></a><a href='#L281'>281</a>
347
- <a name='L282'></a><a href='#L282'>282</a>
348
- <a name='L283'></a><a href='#L283'>283</a>
349
- <a name='L284'></a><a href='#L284'>284</a>
350
- <a name='L285'></a><a href='#L285'>285</a>
351
- <a name='L286'></a><a href='#L286'>286</a>
352
- <a name='L287'></a><a href='#L287'>287</a>
353
- <a name='L288'></a><a href='#L288'>288</a>
354
- <a name='L289'></a><a href='#L289'>289</a>
355
- <a name='L290'></a><a href='#L290'>290</a>
356
- <a name='L291'></a><a href='#L291'>291</a>
357
- <a name='L292'></a><a href='#L292'>292</a>
358
- <a name='L293'></a><a href='#L293'>293</a>
359
- <a name='L294'></a><a href='#L294'>294</a>
360
- <a name='L295'></a><a href='#L295'>295</a>
361
- <a name='L296'></a><a href='#L296'>296</a>
362
- <a name='L297'></a><a href='#L297'>297</a>
363
- <a name='L298'></a><a href='#L298'>298</a>
364
- <a name='L299'></a><a href='#L299'>299</a>
365
- <a name='L300'></a><a href='#L300'>300</a>
366
- <a name='L301'></a><a href='#L301'>301</a>
367
- <a name='L302'></a><a href='#L302'>302</a>
368
- <a name='L303'></a><a href='#L303'>303</a>
369
- <a name='L304'></a><a href='#L304'>304</a>
370
- <a name='L305'></a><a href='#L305'>305</a>
371
- <a name='L306'></a><a href='#L306'>306</a>
372
- <a name='L307'></a><a href='#L307'>307</a>
373
- <a name='L308'></a><a href='#L308'>308</a>
374
- <a name='L309'></a><a href='#L309'>309</a>
375
- <a name='L310'></a><a href='#L310'>310</a>
376
- <a name='L311'></a><a href='#L311'>311</a>
377
- <a name='L312'></a><a href='#L312'>312</a>
378
- <a name='L313'></a><a href='#L313'>313</a>
379
- <a name='L314'></a><a href='#L314'>314</a>
380
- <a name='L315'></a><a href='#L315'>315</a>
381
- <a name='L316'></a><a href='#L316'>316</a>
382
- <a name='L317'></a><a href='#L317'>317</a>
383
- <a name='L318'></a><a href='#L318'>318</a>
384
- <a name='L319'></a><a href='#L319'>319</a>
385
- <a name='L320'></a><a href='#L320'>320</a>
386
- <a name='L321'></a><a href='#L321'>321</a>
387
- <a name='L322'></a><a href='#L322'>322</a>
388
- <a name='L323'></a><a href='#L323'>323</a>
389
- <a name='L324'></a><a href='#L324'>324</a>
390
- <a name='L325'></a><a href='#L325'>325</a>
391
- <a name='L326'></a><a href='#L326'>326</a>
392
- <a name='L327'></a><a href='#L327'>327</a>
393
- <a name='L328'></a><a href='#L328'>328</a>
394
- <a name='L329'></a><a href='#L329'>329</a>
395
- <a name='L330'></a><a href='#L330'>330</a>
396
- <a name='L331'></a><a href='#L331'>331</a>
397
- <a name='L332'></a><a href='#L332'>332</a>
398
- <a name='L333'></a><a href='#L333'>333</a>
399
- <a name='L334'></a><a href='#L334'>334</a>
400
- <a name='L335'></a><a href='#L335'>335</a>
401
- <a name='L336'></a><a href='#L336'>336</a>
402
- <a name='L337'></a><a href='#L337'>337</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
403
- <span class="cline-any cline-neutral">&nbsp;</span>
404
- <span class="cline-any cline-neutral">&nbsp;</span>
405
- <span class="cline-any cline-neutral">&nbsp;</span>
406
- <span class="cline-any cline-neutral">&nbsp;</span>
407
- <span class="cline-any cline-neutral">&nbsp;</span>
408
- <span class="cline-any cline-neutral">&nbsp;</span>
409
- <span class="cline-any cline-neutral">&nbsp;</span>
410
- <span class="cline-any cline-neutral">&nbsp;</span>
411
- <span class="cline-any cline-neutral">&nbsp;</span>
412
- <span class="cline-any cline-neutral">&nbsp;</span>
413
- <span class="cline-any cline-neutral">&nbsp;</span>
414
- <span class="cline-any cline-neutral">&nbsp;</span>
415
- <span class="cline-any cline-neutral">&nbsp;</span>
416
- <span class="cline-any cline-neutral">&nbsp;</span>
417
- <span class="cline-any cline-neutral">&nbsp;</span>
418
- <span class="cline-any cline-neutral">&nbsp;</span>
419
- <span class="cline-any cline-neutral">&nbsp;</span>
420
- <span class="cline-any cline-neutral">&nbsp;</span>
421
- <span class="cline-any cline-neutral">&nbsp;</span>
422
- <span class="cline-any cline-neutral">&nbsp;</span>
423
- <span class="cline-any cline-neutral">&nbsp;</span>
424
- <span class="cline-any cline-neutral">&nbsp;</span>
425
- <span class="cline-any cline-neutral">&nbsp;</span>
426
- <span class="cline-any cline-neutral">&nbsp;</span>
427
- <span class="cline-any cline-neutral">&nbsp;</span>
428
- <span class="cline-any cline-neutral">&nbsp;</span>
429
- <span class="cline-any cline-neutral">&nbsp;</span>
430
- <span class="cline-any cline-neutral">&nbsp;</span>
431
- <span class="cline-any cline-neutral">&nbsp;</span>
432
- <span class="cline-any cline-neutral">&nbsp;</span>
433
- <span class="cline-any cline-neutral">&nbsp;</span>
434
- <span class="cline-any cline-neutral">&nbsp;</span>
435
- <span class="cline-any cline-neutral">&nbsp;</span>
436
- <span class="cline-any cline-neutral">&nbsp;</span>
437
- <span class="cline-any cline-neutral">&nbsp;</span>
438
- <span class="cline-any cline-neutral">&nbsp;</span>
439
- <span class="cline-any cline-neutral">&nbsp;</span>
440
- <span class="cline-any cline-neutral">&nbsp;</span>
441
- <span class="cline-any cline-neutral">&nbsp;</span>
442
- <span class="cline-any cline-neutral">&nbsp;</span>
443
- <span class="cline-any cline-neutral">&nbsp;</span>
444
- <span class="cline-any cline-neutral">&nbsp;</span>
445
- <span class="cline-any cline-neutral">&nbsp;</span>
446
- <span class="cline-any cline-neutral">&nbsp;</span>
447
- <span class="cline-any cline-yes">1x</span>
448
- <span class="cline-any cline-neutral">&nbsp;</span>
449
- <span class="cline-any cline-neutral">&nbsp;</span>
450
- <span class="cline-any cline-neutral">&nbsp;</span>
451
- <span class="cline-any cline-neutral">&nbsp;</span>
452
- <span class="cline-any cline-neutral">&nbsp;</span>
453
- <span class="cline-any cline-neutral">&nbsp;</span>
454
- <span class="cline-any cline-neutral">&nbsp;</span>
455
- <span class="cline-any cline-neutral">&nbsp;</span>
456
- <span class="cline-any cline-neutral">&nbsp;</span>
457
- <span class="cline-any cline-neutral">&nbsp;</span>
458
- <span class="cline-any cline-neutral">&nbsp;</span>
459
- <span class="cline-any cline-neutral">&nbsp;</span>
460
- <span class="cline-any cline-yes">1x</span>
461
- <span class="cline-any cline-neutral">&nbsp;</span>
462
- <span class="cline-any cline-yes">7x</span>
463
- <span class="cline-any cline-yes">7x</span>
464
- <span class="cline-any cline-yes">7x</span>
465
- <span class="cline-any cline-neutral">&nbsp;</span>
466
- <span class="cline-any cline-neutral">&nbsp;</span>
467
- <span class="cline-any cline-yes">7x</span>
468
- <span class="cline-any cline-neutral">&nbsp;</span>
469
- <span class="cline-any cline-neutral">&nbsp;</span>
470
- <span class="cline-any cline-neutral">&nbsp;</span>
471
- <span class="cline-any cline-yes">7x</span>
472
- <span class="cline-any cline-neutral">&nbsp;</span>
473
- <span class="cline-any cline-neutral">&nbsp;</span>
474
- <span class="cline-any cline-neutral">&nbsp;</span>
475
- <span class="cline-any cline-yes">7x</span>
476
- <span class="cline-any cline-yes">7x</span>
477
- <span class="cline-any cline-neutral">&nbsp;</span>
478
- <span class="cline-any cline-neutral">&nbsp;</span>
479
- <span class="cline-any cline-yes">7x</span>
480
- <span class="cline-any cline-yes">7x</span>
481
- <span class="cline-any cline-neutral">&nbsp;</span>
482
- <span class="cline-any cline-neutral">&nbsp;</span>
483
- <span class="cline-any cline-neutral">&nbsp;</span>
484
- <span class="cline-any cline-neutral">&nbsp;</span>
485
- <span class="cline-any cline-neutral">&nbsp;</span>
486
- <span class="cline-any cline-neutral">&nbsp;</span>
487
- <span class="cline-any cline-neutral">&nbsp;</span>
488
- <span class="cline-any cline-neutral">&nbsp;</span>
489
- <span class="cline-any cline-neutral">&nbsp;</span>
490
- <span class="cline-any cline-neutral">&nbsp;</span>
491
- <span class="cline-any cline-neutral">&nbsp;</span>
492
- <span class="cline-any cline-neutral">&nbsp;</span>
493
- <span class="cline-any cline-neutral">&nbsp;</span>
494
- <span class="cline-any cline-neutral">&nbsp;</span>
495
- <span class="cline-any cline-neutral">&nbsp;</span>
496
- <span class="cline-any cline-neutral">&nbsp;</span>
497
- <span class="cline-any cline-neutral">&nbsp;</span>
498
- <span class="cline-any cline-neutral">&nbsp;</span>
499
- <span class="cline-any cline-neutral">&nbsp;</span>
500
- <span class="cline-any cline-neutral">&nbsp;</span>
501
- <span class="cline-any cline-neutral">&nbsp;</span>
502
- <span class="cline-any cline-neutral">&nbsp;</span>
503
- <span class="cline-any cline-yes">7x</span>
504
- <span class="cline-any cline-no">&nbsp;</span>
505
- <span class="cline-any cline-neutral">&nbsp;</span>
506
- <span class="cline-any cline-neutral">&nbsp;</span>
507
- <span class="cline-any cline-yes">7x</span>
508
- <span class="cline-any cline-yes">7x</span>
509
- <span class="cline-any cline-yes">7x</span>
510
- <span class="cline-any cline-yes">7x</span>
511
- <span class="cline-any cline-neutral">&nbsp;</span>
512
- <span class="cline-any cline-neutral">&nbsp;</span>
513
- <span class="cline-any cline-no">&nbsp;</span>
514
- <span class="cline-any cline-neutral">&nbsp;</span>
515
- <span class="cline-any cline-neutral">&nbsp;</span>
516
- <span class="cline-any cline-neutral">&nbsp;</span>
517
- <span class="cline-any cline-neutral">&nbsp;</span>
518
- <span class="cline-any cline-yes">7x</span>
519
- <span class="cline-any cline-yes">7x</span>
520
- <span class="cline-any cline-neutral">&nbsp;</span>
521
- <span class="cline-any cline-neutral">&nbsp;</span>
522
- <span class="cline-any cline-yes">7x</span>
523
- <span class="cline-any cline-no">&nbsp;</span>
524
- <span class="cline-any cline-no">&nbsp;</span>
525
- <span class="cline-any cline-neutral">&nbsp;</span>
526
- <span class="cline-any cline-neutral">&nbsp;</span>
527
- <span class="cline-any cline-neutral">&nbsp;</span>
528
- <span class="cline-any cline-neutral">&nbsp;</span>
529
- <span class="cline-any cline-neutral">&nbsp;</span>
530
- <span class="cline-any cline-yes">14x</span>
531
- <span class="cline-any cline-yes">14x</span>
532
- <span class="cline-any cline-neutral">&nbsp;</span>
533
- <span class="cline-any cline-yes">14x</span>
534
- <span class="cline-any cline-no">&nbsp;</span>
535
- <span class="cline-any cline-no">&nbsp;</span>
536
- <span class="cline-any cline-neutral">&nbsp;</span>
537
- <span class="cline-any cline-neutral">&nbsp;</span>
538
- <span class="cline-any cline-neutral">&nbsp;</span>
539
- <span class="cline-any cline-neutral">&nbsp;</span>
540
- <span class="cline-any cline-neutral">&nbsp;</span>
541
- <span class="cline-any cline-neutral">&nbsp;</span>
542
- <span class="cline-any cline-neutral">&nbsp;</span>
543
- <span class="cline-any cline-neutral">&nbsp;</span>
544
- <span class="cline-any cline-neutral">&nbsp;</span>
545
- <span class="cline-any cline-neutral">&nbsp;</span>
546
- <span class="cline-any cline-neutral">&nbsp;</span>
547
- <span class="cline-any cline-neutral">&nbsp;</span>
548
- <span class="cline-any cline-neutral">&nbsp;</span>
549
- <span class="cline-any cline-neutral">&nbsp;</span>
550
- <span class="cline-any cline-yes">14x</span>
551
- <span class="cline-any cline-yes">14x</span>
552
- <span class="cline-any cline-neutral">&nbsp;</span>
553
- <span class="cline-any cline-yes">14x</span>
554
- <span class="cline-any cline-yes">2x</span>
555
- <span class="cline-any cline-neutral">&nbsp;</span>
556
- <span class="cline-any cline-neutral">&nbsp;</span>
557
- <span class="cline-any cline-neutral">&nbsp;</span>
558
- <span class="cline-any cline-neutral">&nbsp;</span>
559
- <span class="cline-any cline-neutral">&nbsp;</span>
560
- <span class="cline-any cline-yes">14x</span>
561
- <span class="cline-any cline-neutral">&nbsp;</span>
562
- <span class="cline-any cline-yes">14x</span>
563
- <span class="cline-any cline-yes">14x</span>
564
- <span class="cline-any cline-yes">14x</span>
565
- <span class="cline-any cline-neutral">&nbsp;</span>
566
- <span class="cline-any cline-yes">14x</span>
567
- <span class="cline-any cline-yes">4x</span>
568
- <span class="cline-any cline-yes">4x</span>
569
- <span class="cline-any cline-yes">2x</span>
570
- <span class="cline-any cline-yes">2x</span>
571
- <span class="cline-any cline-neutral">&nbsp;</span>
572
- <span class="cline-any cline-neutral">&nbsp;</span>
573
- <span class="cline-any cline-neutral">&nbsp;</span>
574
- <span class="cline-any cline-neutral">&nbsp;</span>
575
- <span class="cline-any cline-neutral">&nbsp;</span>
576
- <span class="cline-any cline-yes">2x</span>
577
- <span class="cline-any cline-yes">2x</span>
578
- <span class="cline-any cline-yes">1x</span>
579
- <span class="cline-any cline-neutral">&nbsp;</span>
580
- <span class="cline-any cline-neutral">&nbsp;</span>
581
- <span class="cline-any cline-yes">2x</span>
582
- <span class="cline-any cline-neutral">&nbsp;</span>
583
- <span class="cline-any cline-neutral">&nbsp;</span>
584
- <span class="cline-any cline-neutral">&nbsp;</span>
585
- <span class="cline-any cline-yes">14x</span>
586
- <span class="cline-any cline-yes">12x</span>
587
- <span class="cline-any cline-yes">2x</span>
588
- <span class="cline-any cline-neutral">&nbsp;</span>
589
- <span class="cline-any cline-neutral">&nbsp;</span>
590
- <span class="cline-any cline-neutral">&nbsp;</span>
591
- <span class="cline-any cline-yes">14x</span>
592
- <span class="cline-any cline-yes">14x</span>
593
- <span class="cline-any cline-no">&nbsp;</span>
594
- <span class="cline-any cline-neutral">&nbsp;</span>
595
- <span class="cline-any cline-neutral">&nbsp;</span>
596
- <span class="cline-any cline-neutral">&nbsp;</span>
597
- <span class="cline-any cline-neutral">&nbsp;</span>
598
- <span class="cline-any cline-yes">3x</span>
599
- <span class="cline-any cline-no">&nbsp;</span>
600
- <span class="cline-any cline-neutral">&nbsp;</span>
601
- <span class="cline-any cline-neutral">&nbsp;</span>
602
- <span class="cline-any cline-yes">3x</span>
603
- <span class="cline-any cline-yes">3x</span>
604
- <span class="cline-any cline-neutral">&nbsp;</span>
605
- <span class="cline-any cline-yes">3x</span>
606
- <span class="cline-any cline-yes">3x</span>
607
- <span class="cline-any cline-yes">1x</span>
608
- <span class="cline-any cline-neutral">&nbsp;</span>
609
- <span class="cline-any cline-neutral">&nbsp;</span>
610
- <span class="cline-any cline-neutral">&nbsp;</span>
611
- <span class="cline-any cline-neutral">&nbsp;</span>
612
- <span class="cline-any cline-yes">44x</span>
613
- <span class="cline-any cline-neutral">&nbsp;</span>
614
- <span class="cline-any cline-neutral">&nbsp;</span>
615
- <span class="cline-any cline-neutral">&nbsp;</span>
616
- <span class="cline-any cline-yes">39x</span>
617
- <span class="cline-any cline-yes">39x</span>
618
- <span class="cline-any cline-yes">39x</span>
619
- <span class="cline-any cline-yes">28x</span>
620
- <span class="cline-any cline-neutral">&nbsp;</span>
621
- <span class="cline-any cline-yes">39x</span>
622
- <span class="cline-any cline-neutral">&nbsp;</span>
623
- <span class="cline-any cline-no">&nbsp;</span>
624
- <span class="cline-any cline-no">&nbsp;</span>
625
- <span class="cline-any cline-neutral">&nbsp;</span>
626
- <span class="cline-any cline-neutral">&nbsp;</span>
627
- <span class="cline-any cline-neutral">&nbsp;</span>
628
- <span class="cline-any cline-neutral">&nbsp;</span>
629
- <span class="cline-any cline-yes">28x</span>
630
- <span class="cline-any cline-yes">28x</span>
631
- <span class="cline-any cline-neutral">&nbsp;</span>
632
- <span class="cline-any cline-neutral">&nbsp;</span>
633
- <span class="cline-any cline-neutral">&nbsp;</span>
634
- <span class="cline-any cline-neutral">&nbsp;</span>
635
- <span class="cline-any cline-yes">7x</span>
636
- <span class="cline-any cline-neutral">&nbsp;</span>
637
- <span class="cline-any cline-neutral">&nbsp;</span>
638
- <span class="cline-any cline-neutral">&nbsp;</span>
639
- <span class="cline-any cline-neutral">&nbsp;</span>
640
- <span class="cline-any cline-yes">28x</span>
641
- <span class="cline-any cline-no">&nbsp;</span>
642
- <span class="cline-any cline-neutral">&nbsp;</span>
643
- <span class="cline-any cline-neutral">&nbsp;</span>
644
- <span class="cline-any cline-neutral">&nbsp;</span>
645
- <span class="cline-any cline-yes">1x</span>
646
- <span class="cline-any cline-yes">1x</span>
647
- <span class="cline-any cline-neutral">&nbsp;</span>
648
- <span class="cline-any cline-neutral">&nbsp;</span>
649
- <span class="cline-any cline-yes">11x</span>
650
- <span class="cline-any cline-neutral">&nbsp;</span>
651
- <span class="cline-any cline-yes">11x</span>
652
- <span class="cline-any cline-no">&nbsp;</span>
653
- <span class="cline-any cline-neutral">&nbsp;</span>
654
- <span class="cline-any cline-neutral">&nbsp;</span>
655
- <span class="cline-any cline-neutral">&nbsp;</span>
656
- <span class="cline-any cline-neutral">&nbsp;</span>
657
- <span class="cline-any cline-neutral">&nbsp;</span>
658
- <span class="cline-any cline-neutral">&nbsp;</span>
659
- <span class="cline-any cline-neutral">&nbsp;</span>
660
- <span class="cline-any cline-neutral">&nbsp;</span>
661
- <span class="cline-any cline-neutral">&nbsp;</span>
662
- <span class="cline-any cline-neutral">&nbsp;</span>
663
- <span class="cline-any cline-neutral">&nbsp;</span>
664
- <span class="cline-any cline-neutral">&nbsp;</span>
665
- <span class="cline-any cline-neutral">&nbsp;</span>
666
- <span class="cline-any cline-neutral">&nbsp;</span>
667
- <span class="cline-any cline-yes">7x</span>
668
- <span class="cline-any cline-neutral">&nbsp;</span>
669
- <span class="cline-any cline-neutral">&nbsp;</span>
670
- <span class="cline-any cline-yes">114x</span>
671
- <span class="cline-any cline-yes">114x</span>
672
- <span class="cline-any cline-yes">114x</span>
673
- <span class="cline-any cline-neutral">&nbsp;</span>
674
- <span class="cline-any cline-yes">114x</span>
675
- <span class="cline-any cline-neutral">&nbsp;</span>
676
- <span class="cline-any cline-neutral">&nbsp;</span>
677
- <span class="cline-any cline-neutral">&nbsp;</span>
678
- <span class="cline-any cline-yes">153x</span>
679
- <span class="cline-any cline-no">&nbsp;</span>
680
- <span class="cline-any cline-neutral">&nbsp;</span>
681
- <span class="cline-any cline-yes">153x</span>
682
- <span class="cline-any cline-yes">153x</span>
683
- <span class="cline-any cline-yes">74x</span>
684
- <span class="cline-any cline-neutral">&nbsp;</span>
685
- <span class="cline-any cline-yes">79x</span>
686
- <span class="cline-any cline-neutral">&nbsp;</span>
687
- <span class="cline-any cline-neutral">&nbsp;</span>
688
- <span class="cline-any cline-neutral">&nbsp;</span>
689
- <span class="cline-any cline-neutral">&nbsp;</span>
690
- <span class="cline-any cline-yes">74x</span>
691
- <span class="cline-any cline-yes">74x</span>
692
- <span class="cline-any cline-neutral">&nbsp;</span>
693
- <span class="cline-any cline-yes">74x</span>
694
- <span class="cline-any cline-neutral">&nbsp;</span>
695
- <span class="cline-any cline-neutral">&nbsp;</span>
696
- <span class="cline-any cline-neutral">&nbsp;</span>
697
- <span class="cline-any cline-no">&nbsp;</span>
698
- <span class="cline-any cline-neutral">&nbsp;</span>
699
- <span class="cline-any cline-neutral">&nbsp;</span>
700
- <span class="cline-any cline-neutral">&nbsp;</span>
701
- <span class="cline-any cline-no">&nbsp;</span>
702
- <span class="cline-any cline-neutral">&nbsp;</span>
703
- <span class="cline-any cline-neutral">&nbsp;</span>
704
- <span class="cline-any cline-neutral">&nbsp;</span>
705
- <span class="cline-any cline-yes">1x</span>
706
- <span class="cline-any cline-no">&nbsp;</span>
707
- <span class="cline-any cline-no">&nbsp;</span>
708
- <span class="cline-any cline-no">&nbsp;</span>
709
- <span class="cline-any cline-neutral">&nbsp;</span>
710
- <span class="cline-any cline-neutral">&nbsp;</span>
711
- <span class="cline-any cline-no">&nbsp;</span>
712
- <span class="cline-any cline-neutral">&nbsp;</span>
713
- <span class="cline-any cline-no">&nbsp;</span>
714
- <span class="cline-any cline-neutral">&nbsp;</span>
715
- <span class="cline-any cline-neutral">&nbsp;</span>
716
- <span class="cline-any cline-no">&nbsp;</span>
717
- <span class="cline-any cline-neutral">&nbsp;</span>
718
- <span class="cline-any cline-no">&nbsp;</span>
719
- <span class="cline-any cline-neutral">&nbsp;</span>
720
- <span class="cline-any cline-neutral">&nbsp;</span>
721
- <span class="cline-any cline-neutral">&nbsp;</span>
722
- <span class="cline-any cline-no">&nbsp;</span>
723
- <span class="cline-any cline-no">&nbsp;</span>
724
- <span class="cline-any cline-no">&nbsp;</span>
725
- <span class="cline-any cline-no">&nbsp;</span>
726
- <span class="cline-any cline-no">&nbsp;</span>
727
- <span class="cline-any cline-neutral">&nbsp;</span>
728
- <span class="cline-any cline-no">&nbsp;</span>
729
- <span class="cline-any cline-neutral">&nbsp;</span>
730
- <span class="cline-any cline-neutral">&nbsp;</span>
731
- <span class="cline-any cline-neutral">&nbsp;</span>
732
- <span class="cline-any cline-yes">1x</span>
733
- <span class="cline-any cline-no">&nbsp;</span>
734
- <span class="cline-any cline-no">&nbsp;</span>
735
- <span class="cline-any cline-neutral">&nbsp;</span>
736
- <span class="cline-any cline-no">&nbsp;</span>
737
- <span class="cline-any cline-neutral">&nbsp;</span>
738
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/* eslint-disable no-console */
739
- /**
740
- * CloudFormation spec validator
741
- *
742
- * "Why not JSON Schema?", you might ask, and it's a fair question. The answer is:
743
- * because the error reporting from JSON schema is pretty bad, and I want the validation
744
- * errors reported from this check to be blindingly obvious, as non-spec-experts
745
- * are going to have to consume and understand them.
746
- *
747
- * I tried JSON Schema validation and its errors look like:
748
- *
749
- * ```
750
- * - instance.PropertyTypes["..."].Properties.Xyz does not match allOf schema &lt;#/definitions/Typed&gt; with 7 error[s]:
751
- * - instance.PropertyTypes["..."].Properties.Xyz requires property "PrimitiveType"
752
- * - instance.PropertyTypes["..."].Properties.Xyz requires property "Type"
753
- * - instance.PropertyTypes["..."].Properties.Xyz requires property "Type"
754
- * - instance.PropertyTypes["..."].Properties.Xyz requires property "ItemType"
755
- * - instance.PropertyTypes["..."].Properties.Xyz requires property "Type"
756
- * - instance.PropertyTypes["..."].Properties.Xyz requires property "PrimitiveItemType"
757
- * - instance.PropertyTypes["..."].Properties.Xyz is not exactly one from "Primitive","Complex Type","Collection of Primitives","Collection of Complex Types"
758
- * ```
759
- *
760
- * No bueno. In contrast, this script prints:
761
- *
762
- * ```
763
- * {
764
- * "ResourceTypes": {
765
- * "AWS::SageMaker::Device": {
766
- * "Properties": {
767
- * "Device": {
768
- *
769
- * !!! must have exactly one of 'Type', 'PrimitiveType', found: {"Type":"Device","PrimitiveType":"Json"} !!!
770
- *
771
- * "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-device.html#cfn-sagemaker-device-device",
772
- * "UpdateType": "Mutable",
773
- * "Required": false,
774
- * "PrimitiveType": "Json",
775
- * "Type": "Device"
776
- * }
777
- * }
778
- * }
779
- * }
780
- * }
781
- * ```
782
- */
783
- import * as fs from 'fs-extra';
784
- &nbsp;
785
- export interface CfnSpec {
786
- PropertyTypes: Record&lt;string, any&gt;;
787
- ResourceTypes: Record&lt;string, any&gt;;
788
- ResourceSpecificationVersion: string;
789
- }
790
- &nbsp;
791
- export interface ValidationError {
792
- readonly value: JsonValue&lt;any&gt;;
793
- readonly message: string;
794
- }
795
- &nbsp;
796
- export class CfnSpecValidator {
797
- public static validate(spec: CfnSpec) {
798
- const ret = new CfnSpecValidator(spec);
799
- ret.validateSpec();
800
- return ret.errors;
801
- }
802
- &nbsp;
803
- public readonly errors = new Array&lt;ValidationError&gt;();
804
- private readonly root: JsonValue&lt;CfnSpec&gt;;
805
- &nbsp;
806
- constructor(spec: CfnSpec) {
807
- this.root = JsonValue.of(spec);
808
- }
809
- &nbsp;
810
- public validateSpec() {
811
- this.assert(this.root.get('PropertyTypes'), isObject, (propTypes) =&gt; {
812
- this.validateMap(propTypes, (propType) =&gt; this.validatePropertyType(propType));
813
- });
814
- &nbsp;
815
- this.assert(this.root.get('ResourceTypes'), isObject, (resTypes) =&gt; {
816
- this.validateMap(resTypes, (propType) =&gt; this.validateResourceType(propType));
817
- });
818
- }
819
- &nbsp;
820
- /**
821
- * Property types are extremely weird
822
- *
823
- * Nominally, they define "records" that have a `Properties` field with the defined
824
- * properties.
825
- *
826
- * However, they are also commonly used as aliases for other types, meaning they have
827
- * the same type-indicating fields as individual property *fields* would have.
828
- *
829
- * Also also, it seems to be quite common to have them empty--have no fields at all.
830
- * This seems to be taken as an alias for an unstructured `Json` type. It's probably
831
- * just a mistake, but unfortunately a mistake that S3 is participating in, so if we
832
- * fail on that we won't be able to consume updates to S3's schema. Our codegen is
833
- * ready to deal with this and just renders it to an empty struct.
834
- */
835
- private validatePropertyType(propType: JsonValue&lt;Record&lt;string, any&gt;&gt;) {
836
- // If the only set of properties is "Documentation", we take this to be an alias
837
- // for an empty struct and allow it. I feel icky allowing this, but it seems to
838
- // be pragmatic for now.
839
- <span class="missing-if-branch" title="if path not taken" >I</span>if (Object.keys(propType.value).join(',') === 'Documentation') {
840
- <span class="cstat-no" title="statement not covered" > return;</span>
841
- }
842
- &nbsp;
843
- const properties = propType.get('Properties');
844
- if (properties.hasValue) {
845
- this.assert(properties, isObject, (props) =&gt; {
846
- this.validateProperties(props);
847
- });
848
- } else <span class="missing-if-branch" title="else path not taken" >E</span>{
849
- <span class="cstat-no" title="statement not covered" > this.validateType(propType, 'if a property type doesn\'t have "Properties", it ');</span>
850
- }
851
- }
852
- &nbsp;
853
- private validateResourceType(resType: JsonValue&lt;any&gt;) {
854
- this.assertOptional(resType.get('Properties'), isObject, (props) =&gt; {
855
- this.validateProperties(props);
856
- });
857
- &nbsp;
858
- this.assertOptional(resType.get('Attributes'), isObject, <span class="fstat-no" title="function not covered" >(a</span>ttrs) =&gt; {
859
- <span class="cstat-no" title="statement not covered" > this.validateMap(attrs, <span class="fstat-no" title="function not covered" >attr </span>=&gt; {</span>
860
- <span class="cstat-no" title="statement not covered" > this.validateType(attr);</span>
861
- });
862
- });
863
- }
864
- &nbsp;
865
- private validateProperties(properties: JsonValue&lt;Record&lt;string, any&gt;&gt;) {
866
- this.validateMap(properties, prop =&gt; {
867
- this.validateType(prop);
868
- &nbsp;
869
- this.assertOptional(prop.get('UpdateType'), <span class="fstat-no" title="function not covered" >(x</span>: any) =&gt; {
870
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!['Mutable', 'Immutable', 'Conditional'].includes(x)) {</span>
871
- <span class="cstat-no" title="statement not covered" > throw new Error(`invalid value for enum: '${x}'`);</span>
872
- }
873
- });
874
- });
875
- }
876
- &nbsp;
877
- /**
878
- * Validate the type
879
- *
880
- * There must be:
881
- * - Either Type or PrimitiveType
882
- * - Only if Type is List or Map, there will be either an ItemType or a PrimitiveItemType
883
- * - Non-primitive Types must correspond to a property type
884
- */
885
- private validateType(typedObject: JsonValue&lt;Record&lt;string, any&gt;&gt;, errorPrefix = '') {
886
- const type = typedObject.get('Type');
887
- const primitiveType = typedObject.get('PrimitiveType');
888
- &nbsp;
889
- if (type.hasValue === primitiveType.hasValue) {
890
- this.report(typedObject, `${errorPrefix}must have exactly one of 'Type', 'PrimitiveType', found: ${JSON.stringify({
891
- Type: type.valueOrUndefined,
892
- PrimitiveType: primitiveType.valueOrUndefined,
893
- })}`);
894
- }
895
- &nbsp;
896
- this.assertOptional(primitiveType, isValidPrimitive);
897
- &nbsp;
898
- let isCollectionType = false;
899
- const itemType = typedObject.get('ItemType');
900
- const primitiveItemType = typedObject.get('PrimitiveItemType');
901
- &nbsp;
902
- if (type.hasValue) {
903
- isCollectionType = COLLECTION_TYPES.includes(type.value);
904
- if (isCollectionType) {
905
- if (itemType.hasValue === primitiveItemType.hasValue) {
906
- this.report(typedObject, `must have exactly one of 'ItemType', 'PrimitiveItemType', found: ${JSON.stringify({
907
- ItemType: itemType.valueOrUndefined,
908
- PrimitiveItemType: primitiveItemType.valueOrUndefined,
909
- })}`);
910
- }
911
- &nbsp;
912
- this.assertOptional(primitiveItemType, isValidPrimitive);
913
- if (itemType.hasValue) {
914
- this.assertValidPropertyTypeReference(itemType);
915
- }
916
- } else {
917
- this.assertValidPropertyTypeReference(type);
918
- }
919
- }
920
- &nbsp;
921
- if (!isCollectionType) {
922
- if (itemType.hasValue || primitiveItemType.hasValue) {
923
- this.report(typedObject, 'only \'List\' or \'Map\' types can have \'ItemType\', \'PrimitiveItemType\'');
924
- }
925
- }
926
- &nbsp;
927
- const dupes = typedObject.get('DuplicatesAllowed');
928
- <span class="missing-if-branch" title="if path not taken" >I</span>if (dupes.hasValue &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >!isCollectionType)</span> {
929
- <span class="cstat-no" title="statement not covered" > this.report(dupes, 'occurs on non-collection type');</span>
930
- }
931
- }
932
- &nbsp;
933
- private assertValidPropertyTypeReference(typeName: JsonValue&lt;string&gt;) {
934
- <span class="missing-if-branch" title="if path not taken" >I</span>if (BUILTIN_COMPLEX_TYPES.includes(typeName.value)) {
935
- <span class="cstat-no" title="statement not covered" > return;</span>
936
- }
937
- &nbsp;
938
- const cfnName = typeName.path[1]; // AWS::Xyz::Resource[.Property]
939
- const namespace = cfnName.split('.')[0];
940
- &nbsp;
941
- const propTypeName = `${namespace}.${typeName.value}`;
942
- if (!this.root.get('PropertyTypes').get(propTypeName).hasValue) {
943
- this.report(typeName, `unknown property type name '${typeName.value}' (missing definition for '${propTypeName}')`);
944
- }
945
- }
946
- &nbsp;
947
- private assertOptional&lt;A, B extends A&gt;(x: JsonValue&lt;A&gt;, pred: (x: A) =&gt; asserts x is B, block?: (x: JsonValue&lt;B&gt;) =&gt; void): boolean {
948
- return x.hasValue ? this.assert(x, pred, block) : true;
949
- }
950
- &nbsp;
951
- private assert&lt;A, B extends A&gt;(x: JsonValue&lt;A&gt;, pred: (x: A) =&gt; asserts x is B, block?: (x: JsonValue&lt;B&gt;) =&gt; void): boolean {
952
- try {
953
- pred(x.value);
954
- if (block) {
955
- block(new JsonValue(x.value, x.path));
956
- }
957
- return true;
958
- } catch (e) {
959
- <span class="cstat-no" title="statement not covered" > this.report(x, e.message);</span>
960
- <span class="cstat-no" title="statement not covered" > return false;</span>
961
- }
962
- }
963
- &nbsp;
964
- private validateMap&lt;A&gt;(x: JsonValue&lt;Record&lt;string, A&gt;&gt;, block: (x: JsonValue&lt;A&gt;) =&gt; void) {
965
- for (const key in x.value) {
966
- block(x.get(key));
967
- }
968
- }
969
- &nbsp;
970
- private report(value: JsonValue&lt;any&gt;, message: string) {
971
- this.errors.push({ value, message });
972
- }
973
- }
974
- &nbsp;
975
- function isObject(x: any): asserts x is Record&lt;string, any&gt; {
976
- <span class="missing-if-branch" title="if path not taken" >I</span>if (x == null || typeof x !== 'object' || Array.isArray(x)) {
977
- <span class="cstat-no" title="statement not covered" > throw new Error(`expected object, found '${x}'`);</span>
978
- }
979
- }
980
- &nbsp;
981
- const COLLECTION_TYPES = ['List', 'Map'];
982
- const BUILTIN_COMPLEX_TYPES = ['Tag'];
983
- &nbsp;
984
- function isValidPrimitive(x: any): asserts x is string {
985
- const primitives = ['String', 'Long', 'Integer', 'Double', 'Boolean', 'Timestamp', 'Json'];
986
- &nbsp;
987
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!primitives.includes(x)) {
988
- <span class="cstat-no" title="statement not covered" > throw new Error(`must be one of ${primitives.join(', ')}, got: ${x}`);</span>
989
- }
990
- }
991
- &nbsp;
992
- interface JsonValue&lt;A&gt; {
993
- readonly path: string[];
994
- readonly pathValue: any;
995
- readonly hasValue: boolean;
996
- readonly value: A;
997
- readonly valueOrUndefined: A | undefined;
998
- get&lt;K extends keyof A&gt;(k: K): JsonValue&lt;A[K]&gt;;
999
- }
1000
- &nbsp;
1001
- class JsonValue&lt;A&gt; implements JsonValue&lt;A&gt; {
1002
- public static of&lt;B&gt;(x: B): JsonValue&lt;B&gt; {
1003
- return new JsonValue(x, []);
1004
- }
1005
- &nbsp;
1006
- public readonly hasValue: boolean = true;
1007
- public readonly valueOrUndefined: A | undefined = this.value;
1008
- public readonly pathValue: any = this.value;
1009
- &nbsp;
1010
- constructor(public readonly value: A, public readonly path: string[]) {
1011
- }
1012
- &nbsp;
1013
- public get&lt;K extends keyof A&gt;(k: K): JsonValue&lt;A[K]&gt; {
1014
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.value || typeof this.value !== 'object' || Array.isArray(this.value)) {
1015
- <span class="cstat-no" title="statement not covered" > return new ErrorValue(`expected object, found ${this.value}`, this.path, this.value);</span>
1016
- }
1017
- const ret = this.value[k];
1018
- if (ret === undefined) {
1019
- return new ErrorValue(`missing required key '${k}'`, this.path, this.value);
1020
- }
1021
- return new JsonValue(ret, [...this.path, `${k}`]);
1022
- }
1023
- }
1024
- &nbsp;
1025
- class ErrorValue&lt;A&gt; implements JsonValue&lt;A&gt; {
1026
- public readonly hasValue = false;
1027
- public readonly valueOrUndefined: A | undefined = undefined;
1028
- &nbsp;
1029
- constructor(private readonly error: string, public readonly path: string[], public readonly pathValue: any) {
1030
- }
1031
- &nbsp;
1032
- public <span class="fstat-no" title="function not covered" >get&lt;</span>K extends keyof A&gt;(_k: K): JsonValue&lt;A[K]&gt; {
1033
- <span class="cstat-no" title="statement not covered" > return this as any;</span>
1034
- }
1035
- &nbsp;
1036
- <span class="fstat-no" title="function not covered" > public get v</span>alue(): A {
1037
- <span class="cstat-no" title="statement not covered" > throw new Error(this.error);</span>
1038
- }
1039
- }
1040
- &nbsp;
1041
- export function <span class="fstat-no" title="function not covered" >formatErrorInContext(</span>error: ValidationError) {
1042
- let reportValue = <span class="cstat-no" title="statement not covered" >error.value.pathValue;</span>
1043
- <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >error.value.path.length;</span> i &gt; 0; i--) {</span>
1044
- <span class="cstat-no" title="statement not covered" > reportValue = { [error.value.path[i - 1]]: reportValue };</span>
1045
- }
1046
- &nbsp;
1047
- const formattedLines = <span class="cstat-no" title="statement not covered" >JSON.stringify(reportValue, undefined, 2).split('\n');</span>
1048
- &nbsp;
1049
- const indent = <span class="cstat-no" title="statement not covered" >2 * (error.value.path.length + 1);</span>
1050
- &nbsp;
1051
- // Insert the error message at line N with an appropriate indent
1052
- <span class="cstat-no" title="statement not covered" > formattedLines.splice(error.value.path.length + 1, 0, `\n!!!${' '.repeat(indent - 3)}${error.message} !!!\n`);</span>
1053
- &nbsp;
1054
- <span class="cstat-no" title="statement not covered" > return formattedLines.join('\n');</span>
1055
- }
1056
- &nbsp;
1057
- async function <span class="fstat-no" title="function not covered" >main(</span>args: string[]) {
1058
- const spec = <span class="cstat-no" title="statement not covered" >await fs.readJson(args[0]);</span>
1059
- const errors = <span class="cstat-no" title="statement not covered" >CfnSpecValidator.validate(spec);</span>
1060
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (errors.length !== 0) {</span>
1061
- <span class="cstat-no" title="statement not covered" > for (const error of errors) {</span>
1062
- <span class="cstat-no" title="statement not covered" > console.error(formatErrorInContext(error));</span>
1063
- }
1064
- <span class="cstat-no" title="statement not covered" > process.exitCode = 1;</span>
1065
- }
1066
- }
1067
- &nbsp;
1068
- <span class="missing-if-branch" title="if path not taken" >I</span>if (require.main === module) {
1069
- <span class="cstat-no" title="statement not covered" > main(process.argv.slice(2)).catch(<span class="fstat-no" title="function not covered" >e </span>=&gt; {</span>
1070
- <span class="cstat-no" title="statement not covered" > process.exitCode = 1;</span>
1071
- // eslint-disable-next-line no-console
1072
- <span class="cstat-no" title="statement not covered" > console.error(e.message);</span>
1073
- });
1074
- }</pre></td></tr></table></pre>
1075
-
1076
- <div class='push'></div><!-- for sticky footer -->
1077
- </div><!-- /wrapper -->
1078
- <div class='footer quiet pad2 space-top1 center small'>
1079
- Code coverage generated by
1080
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1081
- at Fri Jun 24 2022 21:27:03 GMT+0000 (Coordinated Universal Time)
1082
- </div>
1083
- <script src="../prettify.js"></script>
1084
- <script>
1085
- window.onload = function () {
1086
- prettyPrint();
1087
- };
1088
- </script>
1089
- <script src="../sorter.js"></script>
1090
- <script src="../block-navigation.js"></script>
1091
- </body>
1092
- </html>
1093
-