Skip to main content
Glama

OpenTK Model Context Protocol Server

by r-huijts
index.ts.html179 kB
<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/index.ts</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../prettify.css" /> <link rel="stylesheet" href="../base.css" /> <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <style type='text/css'> .coverage-summary .sorter { background-image: url(../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1><a href="../index.html">All files</a> / <a href="index.html">src</a> index.ts</h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Statements</span> <span class='fraction'>0/257</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Branches</span> <span class='fraction'>0/145</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Functions</span> <span class='fraction'>0/28</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Lines</span> <span class='fraction'>0/252</span> </div> </div> <p class="quiet"> 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. </p> <template id="filterTemplate"> <div class="quiet"> Filter: <input type="search" id="fileSearch"> </div> </template> </div> <div class='status-line low'></div> <pre><table class="coverage"> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <a name='L2'></a><a href='#L2'>2</a> <a name='L3'></a><a href='#L3'>3</a> <a name='L4'></a><a href='#L4'>4</a> <a name='L5'></a><a href='#L5'>5</a> <a name='L6'></a><a href='#L6'>6</a> <a name='L7'></a><a href='#L7'>7</a> <a name='L8'></a><a href='#L8'>8</a> <a name='L9'></a><a href='#L9'>9</a> <a name='L10'></a><a href='#L10'>10</a> <a name='L11'></a><a href='#L11'>11</a> <a name='L12'></a><a href='#L12'>12</a> <a name='L13'></a><a href='#L13'>13</a> <a name='L14'></a><a href='#L14'>14</a> <a name='L15'></a><a href='#L15'>15</a> <a name='L16'></a><a href='#L16'>16</a> <a name='L17'></a><a href='#L17'>17</a> <a name='L18'></a><a href='#L18'>18</a> <a name='L19'></a><a href='#L19'>19</a> <a name='L20'></a><a href='#L20'>20</a> <a name='L21'></a><a href='#L21'>21</a> <a name='L22'></a><a href='#L22'>22</a> <a name='L23'></a><a href='#L23'>23</a> <a name='L24'></a><a href='#L24'>24</a> <a name='L25'></a><a href='#L25'>25</a> <a name='L26'></a><a href='#L26'>26</a> <a name='L27'></a><a href='#L27'>27</a> <a name='L28'></a><a href='#L28'>28</a> <a name='L29'></a><a href='#L29'>29</a> <a name='L30'></a><a href='#L30'>30</a> <a name='L31'></a><a href='#L31'>31</a> <a name='L32'></a><a href='#L32'>32</a> <a name='L33'></a><a href='#L33'>33</a> <a name='L34'></a><a href='#L34'>34</a> <a name='L35'></a><a href='#L35'>35</a> <a name='L36'></a><a href='#L36'>36</a> <a name='L37'></a><a href='#L37'>37</a> <a name='L38'></a><a href='#L38'>38</a> <a name='L39'></a><a href='#L39'>39</a> <a name='L40'></a><a href='#L40'>40</a> <a name='L41'></a><a href='#L41'>41</a> <a name='L42'></a><a href='#L42'>42</a> <a name='L43'></a><a href='#L43'>43</a> <a name='L44'></a><a href='#L44'>44</a> <a name='L45'></a><a href='#L45'>45</a> <a name='L46'></a><a href='#L46'>46</a> <a name='L47'></a><a href='#L47'>47</a> <a name='L48'></a><a href='#L48'>48</a> <a name='L49'></a><a href='#L49'>49</a> <a name='L50'></a><a href='#L50'>50</a> <a name='L51'></a><a href='#L51'>51</a> <a name='L52'></a><a href='#L52'>52</a> <a name='L53'></a><a href='#L53'>53</a> <a name='L54'></a><a href='#L54'>54</a> <a name='L55'></a><a href='#L55'>55</a> <a name='L56'></a><a href='#L56'>56</a> <a name='L57'></a><a href='#L57'>57</a> <a name='L58'></a><a href='#L58'>58</a> <a name='L59'></a><a href='#L59'>59</a> <a name='L60'></a><a href='#L60'>60</a> <a name='L61'></a><a href='#L61'>61</a> <a name='L62'></a><a href='#L62'>62</a> <a name='L63'></a><a href='#L63'>63</a> <a name='L64'></a><a href='#L64'>64</a> <a name='L65'></a><a href='#L65'>65</a> <a name='L66'></a><a href='#L66'>66</a> <a name='L67'></a><a href='#L67'>67</a> <a name='L68'></a><a href='#L68'>68</a> <a name='L69'></a><a href='#L69'>69</a> <a name='L70'></a><a href='#L70'>70</a> <a name='L71'></a><a href='#L71'>71</a> <a name='L72'></a><a href='#L72'>72</a> <a name='L73'></a><a href='#L73'>73</a> <a name='L74'></a><a href='#L74'>74</a> <a name='L75'></a><a href='#L75'>75</a> <a name='L76'></a><a href='#L76'>76</a> <a name='L77'></a><a href='#L77'>77</a> <a name='L78'></a><a href='#L78'>78</a> <a name='L79'></a><a href='#L79'>79</a> <a name='L80'></a><a href='#L80'>80</a> <a name='L81'></a><a href='#L81'>81</a> <a name='L82'></a><a href='#L82'>82</a> <a name='L83'></a><a href='#L83'>83</a> <a name='L84'></a><a href='#L84'>84</a> <a name='L85'></a><a href='#L85'>85</a> <a name='L86'></a><a href='#L86'>86</a> <a name='L87'></a><a href='#L87'>87</a> <a name='L88'></a><a href='#L88'>88</a> <a name='L89'></a><a href='#L89'>89</a> <a name='L90'></a><a href='#L90'>90</a> <a name='L91'></a><a href='#L91'>91</a> <a name='L92'></a><a href='#L92'>92</a> <a name='L93'></a><a href='#L93'>93</a> <a name='L94'></a><a href='#L94'>94</a> <a name='L95'></a><a href='#L95'>95</a> <a name='L96'></a><a href='#L96'>96</a> <a name='L97'></a><a href='#L97'>97</a> <a name='L98'></a><a href='#L98'>98</a> <a name='L99'></a><a href='#L99'>99</a> <a name='L100'></a><a href='#L100'>100</a> <a name='L101'></a><a href='#L101'>101</a> <a name='L102'></a><a href='#L102'>102</a> <a name='L103'></a><a href='#L103'>103</a> <a name='L104'></a><a href='#L104'>104</a> <a name='L105'></a><a href='#L105'>105</a> <a name='L106'></a><a href='#L106'>106</a> <a name='L107'></a><a href='#L107'>107</a> <a name='L108'></a><a href='#L108'>108</a> <a name='L109'></a><a href='#L109'>109</a> <a name='L110'></a><a href='#L110'>110</a> <a name='L111'></a><a href='#L111'>111</a> <a name='L112'></a><a href='#L112'>112</a> <a name='L113'></a><a href='#L113'>113</a> <a name='L114'></a><a href='#L114'>114</a> <a name='L115'></a><a href='#L115'>115</a> <a name='L116'></a><a href='#L116'>116</a> <a name='L117'></a><a href='#L117'>117</a> <a name='L118'></a><a href='#L118'>118</a> <a name='L119'></a><a href='#L119'>119</a> <a name='L120'></a><a href='#L120'>120</a> <a name='L121'></a><a href='#L121'>121</a> <a name='L122'></a><a href='#L122'>122</a> <a name='L123'></a><a href='#L123'>123</a> <a name='L124'></a><a href='#L124'>124</a> <a name='L125'></a><a href='#L125'>125</a> <a name='L126'></a><a href='#L126'>126</a> <a name='L127'></a><a href='#L127'>127</a> <a name='L128'></a><a href='#L128'>128</a> <a name='L129'></a><a href='#L129'>129</a> <a name='L130'></a><a href='#L130'>130</a> <a name='L131'></a><a href='#L131'>131</a> <a name='L132'></a><a href='#L132'>132</a> <a name='L133'></a><a href='#L133'>133</a> <a name='L134'></a><a href='#L134'>134</a> <a name='L135'></a><a href='#L135'>135</a> <a name='L136'></a><a href='#L136'>136</a> <a name='L137'></a><a href='#L137'>137</a> <a name='L138'></a><a href='#L138'>138</a> <a name='L139'></a><a href='#L139'>139</a> <a name='L140'></a><a href='#L140'>140</a> <a name='L141'></a><a href='#L141'>141</a> <a name='L142'></a><a href='#L142'>142</a> <a name='L143'></a><a href='#L143'>143</a> <a name='L144'></a><a href='#L144'>144</a> <a name='L145'></a><a href='#L145'>145</a> <a name='L146'></a><a href='#L146'>146</a> <a name='L147'></a><a href='#L147'>147</a> <a name='L148'></a><a href='#L148'>148</a> <a name='L149'></a><a href='#L149'>149</a> <a name='L150'></a><a href='#L150'>150</a> <a name='L151'></a><a href='#L151'>151</a> <a name='L152'></a><a href='#L152'>152</a> <a name='L153'></a><a href='#L153'>153</a> <a name='L154'></a><a href='#L154'>154</a> <a name='L155'></a><a href='#L155'>155</a> <a name='L156'></a><a href='#L156'>156</a> <a name='L157'></a><a href='#L157'>157</a> <a name='L158'></a><a href='#L158'>158</a> <a name='L159'></a><a href='#L159'>159</a> <a name='L160'></a><a href='#L160'>160</a> <a name='L161'></a><a href='#L161'>161</a> <a name='L162'></a><a href='#L162'>162</a> <a name='L163'></a><a href='#L163'>163</a> <a name='L164'></a><a href='#L164'>164</a> <a name='L165'></a><a href='#L165'>165</a> <a name='L166'></a><a href='#L166'>166</a> <a name='L167'></a><a href='#L167'>167</a> <a name='L168'></a><a href='#L168'>168</a> <a name='L169'></a><a href='#L169'>169</a> <a name='L170'></a><a href='#L170'>170</a> <a name='L171'></a><a href='#L171'>171</a> <a name='L172'></a><a href='#L172'>172</a> <a name='L173'></a><a href='#L173'>173</a> <a name='L174'></a><a href='#L174'>174</a> <a name='L175'></a><a href='#L175'>175</a> <a name='L176'></a><a href='#L176'>176</a> <a name='L177'></a><a href='#L177'>177</a> <a name='L178'></a><a href='#L178'>178</a> <a name='L179'></a><a href='#L179'>179</a> <a name='L180'></a><a href='#L180'>180</a> <a name='L181'></a><a href='#L181'>181</a> <a name='L182'></a><a href='#L182'>182</a> <a name='L183'></a><a href='#L183'>183</a> <a name='L184'></a><a href='#L184'>184</a> <a name='L185'></a><a href='#L185'>185</a> <a name='L186'></a><a href='#L186'>186</a> <a name='L187'></a><a href='#L187'>187</a> <a name='L188'></a><a href='#L188'>188</a> <a name='L189'></a><a href='#L189'>189</a> <a name='L190'></a><a href='#L190'>190</a> <a name='L191'></a><a href='#L191'>191</a> <a name='L192'></a><a href='#L192'>192</a> <a name='L193'></a><a href='#L193'>193</a> <a name='L194'></a><a href='#L194'>194</a> <a name='L195'></a><a href='#L195'>195</a> <a name='L196'></a><a href='#L196'>196</a> <a name='L197'></a><a href='#L197'>197</a> <a name='L198'></a><a href='#L198'>198</a> <a name='L199'></a><a href='#L199'>199</a> <a name='L200'></a><a href='#L200'>200</a> <a name='L201'></a><a href='#L201'>201</a> <a name='L202'></a><a href='#L202'>202</a> <a name='L203'></a><a href='#L203'>203</a> <a name='L204'></a><a href='#L204'>204</a> <a name='L205'></a><a href='#L205'>205</a> <a name='L206'></a><a href='#L206'>206</a> <a name='L207'></a><a href='#L207'>207</a> <a name='L208'></a><a href='#L208'>208</a> <a name='L209'></a><a href='#L209'>209</a> <a name='L210'></a><a href='#L210'>210</a> <a name='L211'></a><a href='#L211'>211</a> <a name='L212'></a><a href='#L212'>212</a> <a name='L213'></a><a href='#L213'>213</a> <a name='L214'></a><a href='#L214'>214</a> <a name='L215'></a><a href='#L215'>215</a> <a name='L216'></a><a href='#L216'>216</a> <a name='L217'></a><a href='#L217'>217</a> <a name='L218'></a><a href='#L218'>218</a> <a name='L219'></a><a href='#L219'>219</a> <a name='L220'></a><a href='#L220'>220</a> <a name='L221'></a><a href='#L221'>221</a> <a name='L222'></a><a href='#L222'>222</a> <a name='L223'></a><a href='#L223'>223</a> <a name='L224'></a><a href='#L224'>224</a> <a name='L225'></a><a href='#L225'>225</a> <a name='L226'></a><a href='#L226'>226</a> <a name='L227'></a><a href='#L227'>227</a> <a name='L228'></a><a href='#L228'>228</a> <a name='L229'></a><a href='#L229'>229</a> <a name='L230'></a><a href='#L230'>230</a> <a name='L231'></a><a href='#L231'>231</a> <a name='L232'></a><a href='#L232'>232</a> <a name='L233'></a><a href='#L233'>233</a> <a name='L234'></a><a href='#L234'>234</a> <a name='L235'></a><a href='#L235'>235</a> <a name='L236'></a><a href='#L236'>236</a> <a name='L237'></a><a href='#L237'>237</a> <a name='L238'></a><a href='#L238'>238</a> <a name='L239'></a><a href='#L239'>239</a> <a name='L240'></a><a href='#L240'>240</a> <a name='L241'></a><a href='#L241'>241</a> <a name='L242'></a><a href='#L242'>242</a> <a name='L243'></a><a href='#L243'>243</a> <a name='L244'></a><a href='#L244'>244</a> <a name='L245'></a><a href='#L245'>245</a> <a name='L246'></a><a href='#L246'>246</a> <a name='L247'></a><a href='#L247'>247</a> <a name='L248'></a><a href='#L248'>248</a> <a name='L249'></a><a href='#L249'>249</a> <a name='L250'></a><a href='#L250'>250</a> <a name='L251'></a><a href='#L251'>251</a> <a name='L252'></a><a href='#L252'>252</a> <a name='L253'></a><a href='#L253'>253</a> <a name='L254'></a><a href='#L254'>254</a> <a name='L255'></a><a href='#L255'>255</a> <a name='L256'></a><a href='#L256'>256</a> <a name='L257'></a><a href='#L257'>257</a> <a name='L258'></a><a href='#L258'>258</a> <a name='L259'></a><a href='#L259'>259</a> <a name='L260'></a><a href='#L260'>260</a> <a name='L261'></a><a href='#L261'>261</a> <a name='L262'></a><a href='#L262'>262</a> <a name='L263'></a><a href='#L263'>263</a> <a name='L264'></a><a href='#L264'>264</a> <a name='L265'></a><a href='#L265'>265</a> <a name='L266'></a><a href='#L266'>266</a> <a name='L267'></a><a href='#L267'>267</a> <a name='L268'></a><a href='#L268'>268</a> <a name='L269'></a><a href='#L269'>269</a> <a name='L270'></a><a href='#L270'>270</a> <a name='L271'></a><a href='#L271'>271</a> <a name='L272'></a><a href='#L272'>272</a> <a name='L273'></a><a href='#L273'>273</a> <a name='L274'></a><a href='#L274'>274</a> <a name='L275'></a><a href='#L275'>275</a> <a name='L276'></a><a href='#L276'>276</a> <a name='L277'></a><a href='#L277'>277</a> <a name='L278'></a><a href='#L278'>278</a> <a name='L279'></a><a href='#L279'>279</a> <a name='L280'></a><a href='#L280'>280</a> <a name='L281'></a><a href='#L281'>281</a> <a name='L282'></a><a href='#L282'>282</a> <a name='L283'></a><a href='#L283'>283</a> <a name='L284'></a><a href='#L284'>284</a> <a name='L285'></a><a href='#L285'>285</a> <a name='L286'></a><a href='#L286'>286</a> <a name='L287'></a><a href='#L287'>287</a> <a name='L288'></a><a href='#L288'>288</a> <a name='L289'></a><a href='#L289'>289</a> <a name='L290'></a><a href='#L290'>290</a> <a name='L291'></a><a href='#L291'>291</a> <a name='L292'></a><a href='#L292'>292</a> <a name='L293'></a><a href='#L293'>293</a> <a name='L294'></a><a href='#L294'>294</a> <a name='L295'></a><a href='#L295'>295</a> <a name='L296'></a><a href='#L296'>296</a> <a name='L297'></a><a href='#L297'>297</a> <a name='L298'></a><a href='#L298'>298</a> <a name='L299'></a><a href='#L299'>299</a> <a name='L300'></a><a href='#L300'>300</a> <a name='L301'></a><a href='#L301'>301</a> <a name='L302'></a><a href='#L302'>302</a> <a name='L303'></a><a href='#L303'>303</a> <a name='L304'></a><a href='#L304'>304</a> <a name='L305'></a><a href='#L305'>305</a> <a name='L306'></a><a href='#L306'>306</a> <a name='L307'></a><a href='#L307'>307</a> <a name='L308'></a><a href='#L308'>308</a> <a name='L309'></a><a href='#L309'>309</a> <a name='L310'></a><a href='#L310'>310</a> <a name='L311'></a><a href='#L311'>311</a> <a name='L312'></a><a href='#L312'>312</a> <a name='L313'></a><a href='#L313'>313</a> <a name='L314'></a><a href='#L314'>314</a> <a name='L315'></a><a href='#L315'>315</a> <a name='L316'></a><a href='#L316'>316</a> <a name='L317'></a><a href='#L317'>317</a> <a name='L318'></a><a href='#L318'>318</a> <a name='L319'></a><a href='#L319'>319</a> <a name='L320'></a><a href='#L320'>320</a> <a name='L321'></a><a href='#L321'>321</a> <a name='L322'></a><a href='#L322'>322</a> <a name='L323'></a><a href='#L323'>323</a> <a name='L324'></a><a href='#L324'>324</a> <a name='L325'></a><a href='#L325'>325</a> <a name='L326'></a><a href='#L326'>326</a> <a name='L327'></a><a href='#L327'>327</a> <a name='L328'></a><a href='#L328'>328</a> <a name='L329'></a><a href='#L329'>329</a> <a name='L330'></a><a href='#L330'>330</a> <a name='L331'></a><a href='#L331'>331</a> <a name='L332'></a><a href='#L332'>332</a> <a name='L333'></a><a href='#L333'>333</a> <a name='L334'></a><a href='#L334'>334</a> <a name='L335'></a><a href='#L335'>335</a> <a name='L336'></a><a href='#L336'>336</a> <a name='L337'></a><a href='#L337'>337</a> <a name='L338'></a><a href='#L338'>338</a> <a name='L339'></a><a href='#L339'>339</a> <a name='L340'></a><a href='#L340'>340</a> <a name='L341'></a><a href='#L341'>341</a> <a name='L342'></a><a href='#L342'>342</a> <a name='L343'></a><a href='#L343'>343</a> <a name='L344'></a><a href='#L344'>344</a> <a name='L345'></a><a href='#L345'>345</a> <a name='L346'></a><a href='#L346'>346</a> <a name='L347'></a><a href='#L347'>347</a> <a name='L348'></a><a href='#L348'>348</a> <a name='L349'></a><a href='#L349'>349</a> <a name='L350'></a><a href='#L350'>350</a> <a name='L351'></a><a href='#L351'>351</a> <a name='L352'></a><a href='#L352'>352</a> <a name='L353'></a><a href='#L353'>353</a> <a name='L354'></a><a href='#L354'>354</a> <a name='L355'></a><a href='#L355'>355</a> <a name='L356'></a><a href='#L356'>356</a> <a name='L357'></a><a href='#L357'>357</a> <a name='L358'></a><a href='#L358'>358</a> <a name='L359'></a><a href='#L359'>359</a> <a name='L360'></a><a href='#L360'>360</a> <a name='L361'></a><a href='#L361'>361</a> <a name='L362'></a><a href='#L362'>362</a> <a name='L363'></a><a href='#L363'>363</a> <a name='L364'></a><a href='#L364'>364</a> <a name='L365'></a><a href='#L365'>365</a> <a name='L366'></a><a href='#L366'>366</a> <a name='L367'></a><a href='#L367'>367</a> <a name='L368'></a><a href='#L368'>368</a> <a name='L369'></a><a href='#L369'>369</a> <a name='L370'></a><a href='#L370'>370</a> <a name='L371'></a><a href='#L371'>371</a> <a name='L372'></a><a href='#L372'>372</a> <a name='L373'></a><a href='#L373'>373</a> <a name='L374'></a><a href='#L374'>374</a> <a name='L375'></a><a href='#L375'>375</a> <a name='L376'></a><a href='#L376'>376</a> <a name='L377'></a><a href='#L377'>377</a> <a name='L378'></a><a href='#L378'>378</a> <a name='L379'></a><a href='#L379'>379</a> <a name='L380'></a><a href='#L380'>380</a> <a name='L381'></a><a href='#L381'>381</a> <a name='L382'></a><a href='#L382'>382</a> <a name='L383'></a><a href='#L383'>383</a> <a name='L384'></a><a href='#L384'>384</a> <a name='L385'></a><a href='#L385'>385</a> <a name='L386'></a><a href='#L386'>386</a> <a name='L387'></a><a href='#L387'>387</a> <a name='L388'></a><a href='#L388'>388</a> <a name='L389'></a><a href='#L389'>389</a> <a name='L390'></a><a href='#L390'>390</a> <a name='L391'></a><a href='#L391'>391</a> <a name='L392'></a><a href='#L392'>392</a> <a name='L393'></a><a href='#L393'>393</a> <a name='L394'></a><a href='#L394'>394</a> <a name='L395'></a><a href='#L395'>395</a> <a name='L396'></a><a href='#L396'>396</a> <a name='L397'></a><a href='#L397'>397</a> <a name='L398'></a><a href='#L398'>398</a> <a name='L399'></a><a href='#L399'>399</a> <a name='L400'></a><a href='#L400'>400</a> <a name='L401'></a><a href='#L401'>401</a> <a name='L402'></a><a href='#L402'>402</a> <a name='L403'></a><a href='#L403'>403</a> <a name='L404'></a><a href='#L404'>404</a> <a name='L405'></a><a href='#L405'>405</a> <a name='L406'></a><a href='#L406'>406</a> <a name='L407'></a><a href='#L407'>407</a> <a name='L408'></a><a href='#L408'>408</a> <a name='L409'></a><a href='#L409'>409</a> <a name='L410'></a><a href='#L410'>410</a> <a name='L411'></a><a href='#L411'>411</a> <a name='L412'></a><a href='#L412'>412</a> <a name='L413'></a><a href='#L413'>413</a> <a name='L414'></a><a href='#L414'>414</a> <a name='L415'></a><a href='#L415'>415</a> <a name='L416'></a><a href='#L416'>416</a> <a name='L417'></a><a href='#L417'>417</a> <a name='L418'></a><a href='#L418'>418</a> <a name='L419'></a><a href='#L419'>419</a> <a name='L420'></a><a href='#L420'>420</a> <a name='L421'></a><a href='#L421'>421</a> <a name='L422'></a><a href='#L422'>422</a> <a name='L423'></a><a href='#L423'>423</a> <a name='L424'></a><a href='#L424'>424</a> <a name='L425'></a><a href='#L425'>425</a> <a name='L426'></a><a href='#L426'>426</a> <a name='L427'></a><a href='#L427'>427</a> <a name='L428'></a><a href='#L428'>428</a> <a name='L429'></a><a href='#L429'>429</a> <a name='L430'></a><a href='#L430'>430</a> <a name='L431'></a><a href='#L431'>431</a> <a name='L432'></a><a href='#L432'>432</a> <a name='L433'></a><a href='#L433'>433</a> <a name='L434'></a><a href='#L434'>434</a> <a name='L435'></a><a href='#L435'>435</a> <a name='L436'></a><a href='#L436'>436</a> <a name='L437'></a><a href='#L437'>437</a> <a name='L438'></a><a href='#L438'>438</a> <a name='L439'></a><a href='#L439'>439</a> <a name='L440'></a><a href='#L440'>440</a> <a name='L441'></a><a href='#L441'>441</a> <a name='L442'></a><a href='#L442'>442</a> <a name='L443'></a><a href='#L443'>443</a> <a name='L444'></a><a href='#L444'>444</a> <a name='L445'></a><a href='#L445'>445</a> <a name='L446'></a><a href='#L446'>446</a> <a name='L447'></a><a href='#L447'>447</a> <a name='L448'></a><a href='#L448'>448</a> <a name='L449'></a><a href='#L449'>449</a> <a name='L450'></a><a href='#L450'>450</a> <a name='L451'></a><a href='#L451'>451</a> <a name='L452'></a><a href='#L452'>452</a> <a name='L453'></a><a href='#L453'>453</a> <a name='L454'></a><a href='#L454'>454</a> <a name='L455'></a><a href='#L455'>455</a> <a name='L456'></a><a href='#L456'>456</a> <a name='L457'></a><a href='#L457'>457</a> <a name='L458'></a><a href='#L458'>458</a> <a name='L459'></a><a href='#L459'>459</a> <a name='L460'></a><a href='#L460'>460</a> <a name='L461'></a><a href='#L461'>461</a> <a name='L462'></a><a href='#L462'>462</a> <a name='L463'></a><a href='#L463'>463</a> <a name='L464'></a><a href='#L464'>464</a> <a name='L465'></a><a href='#L465'>465</a> <a name='L466'></a><a href='#L466'>466</a> <a name='L467'></a><a href='#L467'>467</a> <a name='L468'></a><a href='#L468'>468</a> <a name='L469'></a><a href='#L469'>469</a> <a name='L470'></a><a href='#L470'>470</a> <a name='L471'></a><a href='#L471'>471</a> <a name='L472'></a><a href='#L472'>472</a> <a name='L473'></a><a href='#L473'>473</a> <a name='L474'></a><a href='#L474'>474</a> <a name='L475'></a><a href='#L475'>475</a> <a name='L476'></a><a href='#L476'>476</a> <a name='L477'></a><a href='#L477'>477</a> <a name='L478'></a><a href='#L478'>478</a> <a name='L479'></a><a href='#L479'>479</a> <a name='L480'></a><a href='#L480'>480</a> <a name='L481'></a><a href='#L481'>481</a> <a name='L482'></a><a href='#L482'>482</a> <a name='L483'></a><a href='#L483'>483</a> <a name='L484'></a><a href='#L484'>484</a> <a name='L485'></a><a href='#L485'>485</a> <a name='L486'></a><a href='#L486'>486</a> <a name='L487'></a><a href='#L487'>487</a> <a name='L488'></a><a href='#L488'>488</a> <a name='L489'></a><a href='#L489'>489</a> <a name='L490'></a><a href='#L490'>490</a> <a name='L491'></a><a href='#L491'>491</a> <a name='L492'></a><a href='#L492'>492</a> <a name='L493'></a><a href='#L493'>493</a> <a name='L494'></a><a href='#L494'>494</a> <a name='L495'></a><a href='#L495'>495</a> <a name='L496'></a><a href='#L496'>496</a> <a name='L497'></a><a href='#L497'>497</a> <a name='L498'></a><a href='#L498'>498</a> <a name='L499'></a><a href='#L499'>499</a> <a name='L500'></a><a href='#L500'>500</a> <a name='L501'></a><a href='#L501'>501</a> <a name='L502'></a><a href='#L502'>502</a> <a name='L503'></a><a href='#L503'>503</a> <a name='L504'></a><a href='#L504'>504</a> <a name='L505'></a><a href='#L505'>505</a> <a name='L506'></a><a href='#L506'>506</a> <a name='L507'></a><a href='#L507'>507</a> <a name='L508'></a><a href='#L508'>508</a> <a name='L509'></a><a href='#L509'>509</a> <a name='L510'></a><a href='#L510'>510</a> <a name='L511'></a><a href='#L511'>511</a> <a name='L512'></a><a href='#L512'>512</a> <a name='L513'></a><a href='#L513'>513</a> <a name='L514'></a><a href='#L514'>514</a> <a name='L515'></a><a href='#L515'>515</a> <a name='L516'></a><a href='#L516'>516</a> <a name='L517'></a><a href='#L517'>517</a> <a name='L518'></a><a href='#L518'>518</a> <a name='L519'></a><a href='#L519'>519</a> <a name='L520'></a><a href='#L520'>520</a> <a name='L521'></a><a href='#L521'>521</a> <a name='L522'></a><a href='#L522'>522</a> <a name='L523'></a><a href='#L523'>523</a> <a name='L524'></a><a href='#L524'>524</a> <a name='L525'></a><a href='#L525'>525</a> <a name='L526'></a><a href='#L526'>526</a> <a name='L527'></a><a href='#L527'>527</a> <a name='L528'></a><a href='#L528'>528</a> <a name='L529'></a><a href='#L529'>529</a> <a name='L530'></a><a href='#L530'>530</a> <a name='L531'></a><a href='#L531'>531</a> <a name='L532'></a><a href='#L532'>532</a> <a name='L533'></a><a href='#L533'>533</a> <a name='L534'></a><a href='#L534'>534</a> <a name='L535'></a><a href='#L535'>535</a> <a name='L536'></a><a href='#L536'>536</a> <a name='L537'></a><a href='#L537'>537</a> <a name='L538'></a><a href='#L538'>538</a> <a name='L539'></a><a href='#L539'>539</a> <a name='L540'></a><a href='#L540'>540</a> <a name='L541'></a><a href='#L541'>541</a> <a name='L542'></a><a href='#L542'>542</a> <a name='L543'></a><a href='#L543'>543</a> <a name='L544'></a><a href='#L544'>544</a> <a name='L545'></a><a href='#L545'>545</a> <a name='L546'></a><a href='#L546'>546</a> <a name='L547'></a><a href='#L547'>547</a> <a name='L548'></a><a href='#L548'>548</a> <a name='L549'></a><a href='#L549'>549</a> <a name='L550'></a><a href='#L550'>550</a> <a name='L551'></a><a href='#L551'>551</a> <a name='L552'></a><a href='#L552'>552</a> <a name='L553'></a><a href='#L553'>553</a> <a name='L554'></a><a href='#L554'>554</a> <a name='L555'></a><a href='#L555'>555</a> <a name='L556'></a><a href='#L556'>556</a> <a name='L557'></a><a href='#L557'>557</a> <a name='L558'></a><a href='#L558'>558</a> <a name='L559'></a><a href='#L559'>559</a> <a name='L560'></a><a href='#L560'>560</a> <a name='L561'></a><a href='#L561'>561</a> <a name='L562'></a><a href='#L562'>562</a> <a name='L563'></a><a href='#L563'>563</a> <a name='L564'></a><a href='#L564'>564</a> <a name='L565'></a><a href='#L565'>565</a> <a name='L566'></a><a href='#L566'>566</a> <a name='L567'></a><a href='#L567'>567</a> <a name='L568'></a><a href='#L568'>568</a> <a name='L569'></a><a href='#L569'>569</a> <a name='L570'></a><a href='#L570'>570</a> <a name='L571'></a><a href='#L571'>571</a> <a name='L572'></a><a href='#L572'>572</a> <a name='L573'></a><a href='#L573'>573</a> <a name='L574'></a><a href='#L574'>574</a> <a name='L575'></a><a href='#L575'>575</a> <a name='L576'></a><a href='#L576'>576</a> <a name='L577'></a><a href='#L577'>577</a> <a name='L578'></a><a href='#L578'>578</a> <a name='L579'></a><a href='#L579'>579</a> <a name='L580'></a><a href='#L580'>580</a> <a name='L581'></a><a href='#L581'>581</a> <a name='L582'></a><a href='#L582'>582</a> <a name='L583'></a><a href='#L583'>583</a> <a name='L584'></a><a href='#L584'>584</a> <a name='L585'></a><a href='#L585'>585</a> <a name='L586'></a><a href='#L586'>586</a> <a name='L587'></a><a href='#L587'>587</a> <a name='L588'></a><a href='#L588'>588</a> <a name='L589'></a><a href='#L589'>589</a> <a name='L590'></a><a href='#L590'>590</a> <a name='L591'></a><a href='#L591'>591</a> <a name='L592'></a><a href='#L592'>592</a> <a name='L593'></a><a href='#L593'>593</a> <a name='L594'></a><a href='#L594'>594</a> <a name='L595'></a><a href='#L595'>595</a> <a name='L596'></a><a href='#L596'>596</a> <a name='L597'></a><a href='#L597'>597</a> <a name='L598'></a><a href='#L598'>598</a> <a name='L599'></a><a href='#L599'>599</a> <a name='L600'></a><a href='#L600'>600</a> <a name='L601'></a><a href='#L601'>601</a> <a name='L602'></a><a href='#L602'>602</a> <a name='L603'></a><a href='#L603'>603</a> <a name='L604'></a><a href='#L604'>604</a> <a name='L605'></a><a href='#L605'>605</a> <a name='L606'></a><a href='#L606'>606</a> <a name='L607'></a><a href='#L607'>607</a> <a name='L608'></a><a href='#L608'>608</a> <a name='L609'></a><a href='#L609'>609</a> <a name='L610'></a><a href='#L610'>610</a> <a name='L611'></a><a href='#L611'>611</a> <a name='L612'></a><a href='#L612'>612</a> <a name='L613'></a><a href='#L613'>613</a> <a name='L614'></a><a href='#L614'>614</a> <a name='L615'></a><a href='#L615'>615</a> <a name='L616'></a><a href='#L616'>616</a> <a name='L617'></a><a href='#L617'>617</a> <a name='L618'></a><a href='#L618'>618</a> <a name='L619'></a><a href='#L619'>619</a> <a name='L620'></a><a href='#L620'>620</a> <a name='L621'></a><a href='#L621'>621</a> <a name='L622'></a><a href='#L622'>622</a> <a name='L623'></a><a href='#L623'>623</a> <a name='L624'></a><a href='#L624'>624</a> <a name='L625'></a><a href='#L625'>625</a> <a name='L626'></a><a href='#L626'>626</a> <a name='L627'></a><a href='#L627'>627</a> <a name='L628'></a><a href='#L628'>628</a> <a name='L629'></a><a href='#L629'>629</a> <a name='L630'></a><a href='#L630'>630</a> <a name='L631'></a><a href='#L631'>631</a> <a name='L632'></a><a href='#L632'>632</a> <a name='L633'></a><a href='#L633'>633</a> <a name='L634'></a><a href='#L634'>634</a> <a name='L635'></a><a href='#L635'>635</a> <a name='L636'></a><a href='#L636'>636</a> <a name='L637'></a><a href='#L637'>637</a> <a name='L638'></a><a href='#L638'>638</a> <a name='L639'></a><a href='#L639'>639</a> <a name='L640'></a><a href='#L640'>640</a> <a name='L641'></a><a href='#L641'>641</a> <a name='L642'></a><a href='#L642'>642</a> <a name='L643'></a><a href='#L643'>643</a> <a name='L644'></a><a href='#L644'>644</a> <a name='L645'></a><a href='#L645'>645</a> <a name='L646'></a><a href='#L646'>646</a> <a name='L647'></a><a href='#L647'>647</a> <a name='L648'></a><a href='#L648'>648</a> <a name='L649'></a><a href='#L649'>649</a> <a name='L650'></a><a href='#L650'>650</a> <a name='L651'></a><a href='#L651'>651</a> <a name='L652'></a><a href='#L652'>652</a> <a name='L653'></a><a href='#L653'>653</a> <a name='L654'></a><a href='#L654'>654</a> <a name='L655'></a><a href='#L655'>655</a> <a name='L656'></a><a href='#L656'>656</a> <a name='L657'></a><a href='#L657'>657</a> <a name='L658'></a><a href='#L658'>658</a> <a name='L659'></a><a href='#L659'>659</a> <a name='L660'></a><a href='#L660'>660</a> <a name='L661'></a><a href='#L661'>661</a> <a name='L662'></a><a href='#L662'>662</a> <a name='L663'></a><a href='#L663'>663</a> <a name='L664'></a><a href='#L664'>664</a> <a name='L665'></a><a href='#L665'>665</a> <a name='L666'></a><a href='#L666'>666</a> <a name='L667'></a><a href='#L667'>667</a> <a name='L668'></a><a href='#L668'>668</a> <a name='L669'></a><a href='#L669'>669</a> <a name='L670'></a><a href='#L670'>670</a> <a name='L671'></a><a href='#L671'>671</a> <a name='L672'></a><a href='#L672'>672</a> <a name='L673'></a><a href='#L673'>673</a> <a name='L674'></a><a href='#L674'>674</a> <a name='L675'></a><a href='#L675'>675</a> <a name='L676'></a><a href='#L676'>676</a> <a name='L677'></a><a href='#L677'>677</a> <a name='L678'></a><a href='#L678'>678</a> <a name='L679'></a><a href='#L679'>679</a> <a name='L680'></a><a href='#L680'>680</a> <a name='L681'></a><a href='#L681'>681</a> <a name='L682'></a><a href='#L682'>682</a> <a name='L683'></a><a href='#L683'>683</a> <a name='L684'></a><a href='#L684'>684</a> <a name='L685'></a><a href='#L685'>685</a> <a name='L686'></a><a href='#L686'>686</a> <a name='L687'></a><a href='#L687'>687</a> <a name='L688'></a><a href='#L688'>688</a> <a name='L689'></a><a href='#L689'>689</a> <a name='L690'></a><a href='#L690'>690</a> <a name='L691'></a><a href='#L691'>691</a> <a name='L692'></a><a href='#L692'>692</a> <a name='L693'></a><a href='#L693'>693</a> <a name='L694'></a><a href='#L694'>694</a> <a name='L695'></a><a href='#L695'>695</a> <a name='L696'></a><a href='#L696'>696</a> <a name='L697'></a><a href='#L697'>697</a> <a name='L698'></a><a href='#L698'>698</a> <a name='L699'></a><a href='#L699'>699</a> <a name='L700'></a><a href='#L700'>700</a> <a name='L701'></a><a href='#L701'>701</a> <a name='L702'></a><a href='#L702'>702</a> <a name='L703'></a><a href='#L703'>703</a> <a name='L704'></a><a href='#L704'>704</a> <a name='L705'></a><a href='#L705'>705</a> <a name='L706'></a><a href='#L706'>706</a> <a name='L707'></a><a href='#L707'>707</a> <a name='L708'></a><a href='#L708'>708</a> <a name='L709'></a><a href='#L709'>709</a> <a name='L710'></a><a href='#L710'>710</a> <a name='L711'></a><a href='#L711'>711</a> <a name='L712'></a><a href='#L712'>712</a> <a name='L713'></a><a href='#L713'>713</a> <a name='L714'></a><a href='#L714'>714</a> <a name='L715'></a><a href='#L715'>715</a> <a name='L716'></a><a href='#L716'>716</a> <a name='L717'></a><a href='#L717'>717</a> <a name='L718'></a><a href='#L718'>718</a> <a name='L719'></a><a href='#L719'>719</a> <a name='L720'></a><a href='#L720'>720</a> <a name='L721'></a><a href='#L721'>721</a> <a name='L722'></a><a href='#L722'>722</a> <a name='L723'></a><a href='#L723'>723</a> <a name='L724'></a><a href='#L724'>724</a> <a name='L725'></a><a href='#L725'>725</a> <a name='L726'></a><a href='#L726'>726</a> <a name='L727'></a><a href='#L727'>727</a> <a name='L728'></a><a href='#L728'>728</a> <a name='L729'></a><a href='#L729'>729</a> <a name='L730'></a><a href='#L730'>730</a> <a name='L731'></a><a href='#L731'>731</a> <a name='L732'></a><a href='#L732'>732</a> <a name='L733'></a><a href='#L733'>733</a> <a name='L734'></a><a href='#L734'>734</a> <a name='L735'></a><a href='#L735'>735</a> <a name='L736'></a><a href='#L736'>736</a> <a name='L737'></a><a href='#L737'>737</a> <a name='L738'></a><a href='#L738'>738</a> <a name='L739'></a><a href='#L739'>739</a> <a name='L740'></a><a href='#L740'>740</a> <a name='L741'></a><a href='#L741'>741</a> <a name='L742'></a><a href='#L742'>742</a> <a name='L743'></a><a href='#L743'>743</a> <a name='L744'></a><a href='#L744'>744</a> <a name='L745'></a><a href='#L745'>745</a> <a name='L746'></a><a href='#L746'>746</a> <a name='L747'></a><a href='#L747'>747</a> <a name='L748'></a><a href='#L748'>748</a> <a name='L749'></a><a href='#L749'>749</a> <a name='L750'></a><a href='#L750'>750</a> <a name='L751'></a><a href='#L751'>751</a> <a name='L752'></a><a href='#L752'>752</a> <a name='L753'></a><a href='#L753'>753</a> <a name='L754'></a><a href='#L754'>754</a> <a name='L755'></a><a href='#L755'>755</a> <a name='L756'></a><a href='#L756'>756</a> <a name='L757'></a><a href='#L757'>757</a> <a name='L758'></a><a href='#L758'>758</a> <a name='L759'></a><a href='#L759'>759</a> <a name='L760'></a><a href='#L760'>760</a> <a name='L761'></a><a href='#L761'>761</a> <a name='L762'></a><a href='#L762'>762</a> <a name='L763'></a><a href='#L763'>763</a> <a name='L764'></a><a href='#L764'>764</a> <a name='L765'></a><a href='#L765'>765</a> <a name='L766'></a><a href='#L766'>766</a> <a name='L767'></a><a href='#L767'>767</a> <a name='L768'></a><a href='#L768'>768</a> <a name='L769'></a><a href='#L769'>769</a> <a name='L770'></a><a href='#L770'>770</a> <a name='L771'></a><a href='#L771'>771</a> <a name='L772'></a><a href='#L772'>772</a> <a name='L773'></a><a href='#L773'>773</a> <a name='L774'></a><a href='#L774'>774</a> <a name='L775'></a><a href='#L775'>775</a> <a name='L776'></a><a href='#L776'>776</a> <a name='L777'></a><a href='#L777'>777</a> <a name='L778'></a><a href='#L778'>778</a> <a name='L779'></a><a href='#L779'>779</a> <a name='L780'></a><a href='#L780'>780</a> <a name='L781'></a><a href='#L781'>781</a> <a name='L782'></a><a href='#L782'>782</a> <a name='L783'></a><a href='#L783'>783</a> <a name='L784'></a><a href='#L784'>784</a> <a name='L785'></a><a href='#L785'>785</a> <a name='L786'></a><a href='#L786'>786</a> <a name='L787'></a><a href='#L787'>787</a> <a name='L788'></a><a href='#L788'>788</a> <a name='L789'></a><a href='#L789'>789</a> <a name='L790'></a><a href='#L790'>790</a> <a name='L791'></a><a href='#L791'>791</a> <a name='L792'></a><a href='#L792'>792</a> <a name='L793'></a><a href='#L793'>793</a> <a name='L794'></a><a href='#L794'>794</a> <a name='L795'></a><a href='#L795'>795</a> <a name='L796'></a><a href='#L796'>796</a> <a name='L797'></a><a href='#L797'>797</a> <a name='L798'></a><a href='#L798'>798</a> <a name='L799'></a><a href='#L799'>799</a> <a name='L800'></a><a href='#L800'>800</a> <a name='L801'></a><a href='#L801'>801</a> <a name='L802'></a><a href='#L802'>802</a> <a name='L803'></a><a href='#L803'>803</a> <a name='L804'></a><a href='#L804'>804</a> <a name='L805'></a><a href='#L805'>805</a> <a name='L806'></a><a href='#L806'>806</a> <a name='L807'></a><a href='#L807'>807</a> <a name='L808'></a><a href='#L808'>808</a> <a name='L809'></a><a href='#L809'>809</a> <a name='L810'></a><a href='#L810'>810</a> <a name='L811'></a><a href='#L811'>811</a> <a name='L812'></a><a href='#L812'>812</a> <a name='L813'></a><a href='#L813'>813</a> <a name='L814'></a><a href='#L814'>814</a> <a name='L815'></a><a href='#L815'>815</a> <a name='L816'></a><a href='#L816'>816</a> <a name='L817'></a><a href='#L817'>817</a> <a name='L818'></a><a href='#L818'>818</a> <a name='L819'></a><a href='#L819'>819</a> <a name='L820'></a><a href='#L820'>820</a> <a name='L821'></a><a href='#L821'>821</a> <a name='L822'></a><a href='#L822'>822</a> <a name='L823'></a><a href='#L823'>823</a> <a name='L824'></a><a href='#L824'>824</a> <a name='L825'></a><a href='#L825'>825</a> <a name='L826'></a><a href='#L826'>826</a> <a name='L827'></a><a href='#L827'>827</a> <a name='L828'></a><a href='#L828'>828</a> <a name='L829'></a><a href='#L829'>829</a> <a name='L830'></a><a href='#L830'>830</a> <a name='L831'></a><a href='#L831'>831</a> <a name='L832'></a><a href='#L832'>832</a> <a name='L833'></a><a href='#L833'>833</a> <a name='L834'></a><a href='#L834'>834</a> <a name='L835'></a><a href='#L835'>835</a> <a name='L836'></a><a href='#L836'>836</a> <a name='L837'></a><a href='#L837'>837</a> <a name='L838'></a><a href='#L838'>838</a> <a name='L839'></a><a href='#L839'>839</a> <a name='L840'></a><a href='#L840'>840</a> <a name='L841'></a><a href='#L841'>841</a> <a name='L842'></a><a href='#L842'>842</a> <a name='L843'></a><a href='#L843'>843</a> <a name='L844'></a><a href='#L844'>844</a> <a name='L845'></a><a href='#L845'>845</a> <a name='L846'></a><a href='#L846'>846</a> <a name='L847'></a><a href='#L847'>847</a> <a name='L848'></a><a href='#L848'>848</a> <a name='L849'></a><a href='#L849'>849</a> <a name='L850'></a><a href='#L850'>850</a> <a name='L851'></a><a href='#L851'>851</a> <a name='L852'></a><a href='#L852'>852</a> <a name='L853'></a><a href='#L853'>853</a> <a name='L854'></a><a href='#L854'>854</a> <a name='L855'></a><a href='#L855'>855</a> <a name='L856'></a><a href='#L856'>856</a> <a name='L857'></a><a href='#L857'>857</a> <a name='L858'></a><a href='#L858'>858</a> <a name='L859'></a><a href='#L859'>859</a> <a name='L860'></a><a href='#L860'>860</a> <a name='L861'></a><a href='#L861'>861</a> <a name='L862'></a><a href='#L862'>862</a> <a name='L863'></a><a href='#L863'>863</a> <a name='L864'></a><a href='#L864'>864</a> <a name='L865'></a><a href='#L865'>865</a> <a name='L866'></a><a href='#L866'>866</a> <a name='L867'></a><a href='#L867'>867</a> <a name='L868'></a><a href='#L868'>868</a> <a name='L869'></a><a href='#L869'>869</a> <a name='L870'></a><a href='#L870'>870</a> <a name='L871'></a><a href='#L871'>871</a> <a name='L872'></a><a href='#L872'>872</a> <a name='L873'></a><a href='#L873'>873</a> <a name='L874'></a><a href='#L874'>874</a> <a name='L875'></a><a href='#L875'>875</a> <a name='L876'></a><a href='#L876'>876</a> <a name='L877'></a><a href='#L877'>877</a> <a name='L878'></a><a href='#L878'>878</a> <a name='L879'></a><a href='#L879'>879</a> <a name='L880'></a><a href='#L880'>880</a> <a name='L881'></a><a href='#L881'>881</a> <a name='L882'></a><a href='#L882'>882</a> <a name='L883'></a><a href='#L883'>883</a> <a name='L884'></a><a href='#L884'>884</a> <a name='L885'></a><a href='#L885'>885</a> <a name='L886'></a><a href='#L886'>886</a> <a name='L887'></a><a href='#L887'>887</a> <a name='L888'></a><a href='#L888'>888</a> <a name='L889'></a><a href='#L889'>889</a> <a name='L890'></a><a href='#L890'>890</a> <a name='L891'></a><a href='#L891'>891</a> <a name='L892'></a><a href='#L892'>892</a> <a name='L893'></a><a href='#L893'>893</a> <a name='L894'></a><a href='#L894'>894</a> <a name='L895'></a><a href='#L895'>895</a> <a name='L896'></a><a href='#L896'>896</a> <a name='L897'></a><a href='#L897'>897</a> <a name='L898'></a><a href='#L898'>898</a> <a name='L899'></a><a href='#L899'>899</a> <a name='L900'></a><a href='#L900'>900</a> <a name='L901'></a><a href='#L901'>901</a> <a name='L902'></a><a href='#L902'>902</a> <a name='L903'></a><a href='#L903'>903</a> <a name='L904'></a><a href='#L904'>904</a> <a name='L905'></a><a href='#L905'>905</a> <a name='L906'></a><a href='#L906'>906</a> <a name='L907'></a><a href='#L907'>907</a> <a name='L908'></a><a href='#L908'>908</a> <a name='L909'></a><a href='#L909'>909</a> <a name='L910'></a><a href='#L910'>910</a> <a name='L911'></a><a href='#L911'>911</a> <a name='L912'></a><a href='#L912'>912</a> <a name='L913'></a><a href='#L913'>913</a> <a name='L914'></a><a href='#L914'>914</a> <a name='L915'></a><a href='#L915'>915</a> <a name='L916'></a><a href='#L916'>916</a> <a name='L917'></a><a href='#L917'>917</a> <a name='L918'></a><a href='#L918'>918</a> <a name='L919'></a><a href='#L919'>919</a> <a name='L920'></a><a href='#L920'>920</a> <a name='L921'></a><a href='#L921'>921</a> <a name='L922'></a><a href='#L922'>922</a> <a name='L923'></a><a href='#L923'>923</a> <a name='L924'></a><a href='#L924'>924</a> <a name='L925'></a><a href='#L925'>925</a> <a name='L926'></a><a href='#L926'>926</a> <a name='L927'></a><a href='#L927'>927</a> <a name='L928'></a><a href='#L928'>928</a> <a name='L929'></a><a href='#L929'>929</a> <a name='L930'></a><a href='#L930'>930</a> <a name='L931'></a><a href='#L931'>931</a> <a name='L932'></a><a href='#L932'>932</a> <a name='L933'></a><a href='#L933'>933</a> <a name='L934'></a><a href='#L934'>934</a> <a name='L935'></a><a href='#L935'>935</a> <a name='L936'></a><a href='#L936'>936</a> <a name='L937'></a><a href='#L937'>937</a> <a name='L938'></a><a href='#L938'>938</a> <a name='L939'></a><a href='#L939'>939</a> <a name='L940'></a><a href='#L940'>940</a> <a name='L941'></a><a href='#L941'>941</a> <a name='L942'></a><a href='#L942'>942</a> <a name='L943'></a><a href='#L943'>943</a> <a name='L944'></a><a href='#L944'>944</a> <a name='L945'></a><a href='#L945'>945</a> <a name='L946'></a><a href='#L946'>946</a> <a name='L947'></a><a href='#L947'>947</a> <a name='L948'></a><a href='#L948'>948</a> <a name='L949'></a><a href='#L949'>949</a> <a name='L950'></a><a href='#L950'>950</a> <a name='L951'></a><a href='#L951'>951</a> <a name='L952'></a><a href='#L952'>952</a> <a name='L953'></a><a href='#L953'>953</a> <a name='L954'></a><a href='#L954'>954</a> <a name='L955'></a><a href='#L955'>955</a> <a name='L956'></a><a href='#L956'>956</a> <a name='L957'></a><a href='#L957'>957</a> <a name='L958'></a><a href='#L958'>958</a> <a name='L959'></a><a href='#L959'>959</a> <a name='L960'></a><a href='#L960'>960</a> <a name='L961'></a><a href='#L961'>961</a> <a name='L962'></a><a href='#L962'>962</a> <a name='L963'></a><a href='#L963'>963</a> <a name='L964'></a><a href='#L964'>964</a> <a name='L965'></a><a href='#L965'>965</a> <a name='L966'></a><a href='#L966'>966</a> <a name='L967'></a><a href='#L967'>967</a> <a name='L968'></a><a href='#L968'>968</a> <a name='L969'></a><a href='#L969'>969</a> <a name='L970'></a><a href='#L970'>970</a> <a name='L971'></a><a href='#L971'>971</a> <a name='L972'></a><a href='#L972'>972</a> <a name='L973'></a><a href='#L973'>973</a> <a name='L974'></a><a href='#L974'>974</a> <a name='L975'></a><a href='#L975'>975</a> <a name='L976'></a><a href='#L976'>976</a> <a name='L977'></a><a href='#L977'>977</a> <a name='L978'></a><a href='#L978'>978</a> <a name='L979'></a><a href='#L979'>979</a> <a name='L980'></a><a href='#L980'>980</a> <a name='L981'></a><a href='#L981'>981</a> <a name='L982'></a><a href='#L982'>982</a> <a name='L983'></a><a href='#L983'>983</a> <a name='L984'></a><a href='#L984'>984</a> <a name='L985'></a><a href='#L985'>985</a> <a name='L986'></a><a href='#L986'>986</a> <a name='L987'></a><a href='#L987'>987</a> <a name='L988'></a><a href='#L988'>988</a> <a name='L989'></a><a href='#L989'>989</a> <a name='L990'></a><a href='#L990'>990</a> <a name='L991'></a><a href='#L991'>991</a> <a name='L992'></a><a href='#L992'>992</a> <a name='L993'></a><a href='#L993'>993</a> <a name='L994'></a><a href='#L994'>994</a> <a name='L995'></a><a href='#L995'>995</a> <a name='L996'></a><a href='#L996'>996</a> <a name='L997'></a><a href='#L997'>997</a> <a name='L998'></a><a href='#L998'>998</a> <a name='L999'></a><a href='#L999'>999</a> <a name='L1000'></a><a href='#L1000'>1000</a> <a name='L1001'></a><a href='#L1001'>1001</a> <a name='L1002'></a><a href='#L1002'>1002</a> <a name='L1003'></a><a href='#L1003'>1003</a> <a name='L1004'></a><a href='#L1004'>1004</a> <a name='L1005'></a><a href='#L1005'>1005</a> <a name='L1006'></a><a href='#L1006'>1006</a> <a name='L1007'></a><a href='#L1007'>1007</a> <a name='L1008'></a><a href='#L1008'>1008</a> <a name='L1009'></a><a href='#L1009'>1009</a> <a name='L1010'></a><a href='#L1010'>1010</a> <a name='L1011'></a><a href='#L1011'>1011</a> <a name='L1012'></a><a href='#L1012'>1012</a> <a name='L1013'></a><a href='#L1013'>1013</a> <a name='L1014'></a><a href='#L1014'>1014</a> <a name='L1015'></a><a href='#L1015'>1015</a> <a name='L1016'></a><a href='#L1016'>1016</a> <a name='L1017'></a><a href='#L1017'>1017</a> <a name='L1018'></a><a href='#L1018'>1018</a> <a name='L1019'></a><a href='#L1019'>1019</a> <a name='L1020'></a><a href='#L1020'>1020</a> <a name='L1021'></a><a href='#L1021'>1021</a> <a name='L1022'></a><a href='#L1022'>1022</a> <a name='L1023'></a><a href='#L1023'>1023</a> <a name='L1024'></a><a href='#L1024'>1024</a> <a name='L1025'></a><a href='#L1025'>1025</a> <a name='L1026'></a><a href='#L1026'>1026</a> <a name='L1027'></a><a href='#L1027'>1027</a> <a name='L1028'></a><a href='#L1028'>1028</a> <a name='L1029'></a><a href='#L1029'>1029</a> <a name='L1030'></a><a href='#L1030'>1030</a> <a name='L1031'></a><a href='#L1031'>1031</a> <a name='L1032'></a><a href='#L1032'>1032</a> <a name='L1033'></a><a href='#L1033'>1033</a> <a name='L1034'></a><a href='#L1034'>1034</a> <a name='L1035'></a><a href='#L1035'>1035</a> <a name='L1036'></a><a href='#L1036'>1036</a> <a name='L1037'></a><a href='#L1037'>1037</a> <a name='L1038'></a><a href='#L1038'>1038</a> <a name='L1039'></a><a href='#L1039'>1039</a> <a name='L1040'></a><a href='#L1040'>1040</a> <a name='L1041'></a><a href='#L1041'>1041</a> <a name='L1042'></a><a href='#L1042'>1042</a> <a name='L1043'></a><a href='#L1043'>1043</a> <a name='L1044'></a><a href='#L1044'>1044</a> <a name='L1045'></a><a href='#L1045'>1045</a> <a name='L1046'></a><a href='#L1046'>1046</a> <a name='L1047'></a><a href='#L1047'>1047</a> <a name='L1048'></a><a href='#L1048'>1048</a> <a name='L1049'></a><a href='#L1049'>1049</a> <a name='L1050'></a><a href='#L1050'>1050</a> <a name='L1051'></a><a href='#L1051'>1051</a> <a name='L1052'></a><a href='#L1052'>1052</a> <a name='L1053'></a><a href='#L1053'>1053</a> <a name='L1054'></a><a href='#L1054'>1054</a> <a name='L1055'></a><a href='#L1055'>1055</a> <a name='L1056'></a><a href='#L1056'>1056</a> <a name='L1057'></a><a href='#L1057'>1057</a> <a name='L1058'></a><a href='#L1058'>1058</a> <a name='L1059'></a><a href='#L1059'>1059</a> <a name='L1060'></a><a href='#L1060'>1060</a> <a name='L1061'></a><a href='#L1061'>1061</a> <a name='L1062'></a><a href='#L1062'>1062</a> <a name='L1063'></a><a href='#L1063'>1063</a> <a name='L1064'></a><a href='#L1064'>1064</a> <a name='L1065'></a><a href='#L1065'>1065</a> <a name='L1066'></a><a href='#L1066'>1066</a> <a name='L1067'></a><a href='#L1067'>1067</a> <a name='L1068'></a><a href='#L1068'>1068</a> <a name='L1069'></a><a href='#L1069'>1069</a> <a name='L1070'></a><a href='#L1070'>1070</a> <a name='L1071'></a><a href='#L1071'>1071</a> <a name='L1072'></a><a href='#L1072'>1072</a> <a name='L1073'></a><a href='#L1073'>1073</a> <a name='L1074'></a><a href='#L1074'>1074</a> <a name='L1075'></a><a href='#L1075'>1075</a> <a name='L1076'></a><a href='#L1076'>1076</a> <a name='L1077'></a><a href='#L1077'>1077</a> <a name='L1078'></a><a href='#L1078'>1078</a> <a name='L1079'></a><a href='#L1079'>1079</a> <a name='L1080'></a><a href='#L1080'>1080</a> <a name='L1081'></a><a href='#L1081'>1081</a> <a name='L1082'></a><a href='#L1082'>1082</a> <a name='L1083'></a><a href='#L1083'>1083</a> <a name='L1084'></a><a href='#L1084'>1084</a> <a name='L1085'></a><a href='#L1085'>1085</a> <a name='L1086'></a><a href='#L1086'>1086</a> <a name='L1087'></a><a href='#L1087'>1087</a> <a name='L1088'></a><a href='#L1088'>1088</a> <a name='L1089'></a><a href='#L1089'>1089</a> <a name='L1090'></a><a href='#L1090'>1090</a> <a name='L1091'></a><a href='#L1091'>1091</a> <a name='L1092'></a><a href='#L1092'>1092</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">#!/usr/bin/env node &nbsp; import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { z } from "zod"; import { apiService } from "./services/api.js"; import { extractDocumentLink } from "./utils/html-parser.js"; import { BASE_URL } from './config.js'; import { extractDocumentDetailsFromHtml, extractCommitteesFromHtml, extractCommitteeDetailsFromHtml, extractActivitiesFromHtml, extractVotingResultsFromHtml } from './utils/html-parser.js'; import { extractTextFromPdf, extractTextFromDocx, summarizeText, findPersonOccurrences, findParagraphStart, findParagraphEnd } from './utils/document-extractor.js'; import { Buffer } from "buffer"; &nbsp; const mcp = <span class="cstat-no" title="statement not covered" >new McpServer({</span> name: "opentk", version: "1.0.10", description: "Human‑friendly MCP toolkit for all tkconv endpoints", }); &nbsp; /** 1. Overview */ <span class="cstat-no" title="statement not covered" >mcp.tool(</span> "get_overview", "Provides a comprehensive overview of recent parliamentary activities, including the most recent documents and MPs celebrating birthdays today. This is the ideal starting point for any parliamentary data exploration. The response contains structured data with two main sections: 'recentDocuments' (listing the latest parliamentary documents with their IDs, titles, types, dates, and URLs) and 'birthdays' (listing MPs celebrating birthdays today). The results are paginated with 10 documents per page, and you can navigate through pages using the 'page' parameter. The tool can be used iteratively to retrieve subsequent pages of results - first call with page=1, then check the pagination.hasMoreDocuments field in the response, and if true, call again with page=2, and so on. This allows you to 'scroll' through all available documents when needed. The response includes pagination information showing the current page, whether more documents are available, and the total number of documents retrieved. Use this tool first when a user asks for general information about recent parliamentary activities or needs a starting point for research. After getting this overview, you can use other tools like 'get_document_details' to retrieve more information about specific documents, 'search_tk' to find documents on specific topics, or 'get_photo' to retrieve photos of MPs mentioned in the birthdays section.", { page: z.number().optional().describe("Page number for paginated results (default: 1). Each page contains 10 documents.") }, <span class="fstat-no" title="function not covered" > async </span>({ page = <span class="branch-0 cbranch-no" title="branch not covered" >1 </span>}) =&gt; { <span class="cstat-no" title="statement not covered" > try {</span> // Validate page number const validatedPage = <span class="cstat-no" title="statement not covered" >Math.max(1, page);</span> &nbsp; // Get overview data with pagination const overview = <span class="cstat-no" title="statement not covered" >await apiService.getOverview(validatedPage);</span> &nbsp; <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify(overview, null, 2) }] }; } catch (error: any) { <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: `Error fetching overview: ${error.message || 'Unknown error'}` }] }; } } ); &nbsp; /** 4. Birthdays today */ <span class="cstat-no" title="statement not covered" >mcp.tool(</span> "birthdays_today", "Lists all Members of Parliament celebrating their birthday today, including their names, political parties, and birth dates. The response is a JSON array where each entry contains the MP's ID, name, party affiliation, and other details. Use this tool when a user specifically asks about birthdays, wants to know which MPs are celebrating today, or needs to create 'on this day' content. This tool takes no parameters as it always returns today's birthdays. For a more general overview that includes birthdays along with other parliamentary information, use the 'get_overview' tool instead. If you need to display an MP's photo alongside their birthday information, you can use the 'get_photo' tool with the MP's ID from this response.", {}, <span class="fstat-no" title="function not covered" > async </span>() =&gt; { <span class="cstat-no" title="statement not covered" > try {</span> const data = <span class="cstat-no" title="statement not covered" >await apiService.fetchJson(`/jarig-vandaag`);</span> <span class="cstat-no" title="statement not covered" > return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };</span> } catch (error: any) { <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: `Error fetching birthdays: ${error.message || 'Unknown error'}` }] }; } } ); &nbsp; /** 5. All MPs directory */ <span class="cstat-no" title="statement not covered" >mcp.tool(</span> "list_persons", "Provides a complete directory of current Members of Parliament with their IDs, names, titles, party affiliations, and faction memberships. The response is a JSON array where each entry contains an MP's full details. Use this tool when a user needs comprehensive information about all MPs, wants to analyze the composition of parliament by party, or needs to find specific MPs by name or party. This tool is particularly useful for creating reports about parliamentary representation or for finding the IDs of MPs that can be used with other tools like 'get_photo'. This tool takes no parameters as it returns all current MPs. For a more targeted approach when looking for specific MPs, consider using the 'search_tk' tool with the MP's name.", {}, <span class="fstat-no" title="function not covered" > async </span>() =&gt; { <span class="cstat-no" title="statement not covered" > try {</span> // Use the tkconv API to get the MP list const persons = <span class="cstat-no" title="statement not covered" >await apiService.getPersons();</span> &nbsp; <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (persons.length === 0) {</span> <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: "No MPs found or there was an error retrieving the MP list. Please try again later." }] }; } &nbsp; <span class="cstat-no" title="statement not covered" > return { content: [{ type: "text", text: JSON.stringify(persons, null, 2) }] };</span> } catch (error: any) { <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: `Error fetching MP list: ${error.message || 'Unknown error'}` }] }; } } ); &nbsp; /** 6. Keyword search */ <span class="cstat-no" title="statement not covered" >mcp.tool(</span> "search_tk", "Performs a comprehensive search across all parliamentary data including documents, activities, and cases. Returns results matching the provided keyword or phrase. Use this for general searches when you need information on any topic discussed in parliament, regardless of document type or context. Search syntax: Searching for 'Joe Biden' finds documents containing both 'Joe' and 'Biden' anywhere in the text. Searching for \"Joe Biden\" (with quotes) finds only documents where these words appear next to each other. Searching for 'Hubert NOT Bruls' finds documents containing 'Hubert' but not 'Bruls'. The capital letters in 'NOT' are important. You can also use 'OR' and 'NEAR()' operators.", { query: z.string().describe("Search keyword or phrase - can be any term, name, policy area, or exact quote you want to find in parliamentary records. Use quotes for exact phrases, 'NOT' to exclude terms, 'OR' for alternatives, and 'NEAR()' for proximity searches."), page: z.number().optional().describe("Page number for paginated results (default: 1)"), limit: z.number().optional().describe("Maximum number of results to return per page (default: 20, max: 100)"), format: z.enum(["full", "summary"]).optional().describe("Format of the results: 'full' for complete data or 'summary' for a condensed version (default: 'summary')") }, <span class="fstat-no" title="function not covered" > async </span>({ query, page = <span class="branch-0 cbranch-no" title="branch not covered" >1,</span> limit = <span class="branch-0 cbranch-no" title="branch not covered" >20,</span> format = <span class="branch-0 cbranch-no" title="branch not covered" >"summary" </span>}) =&gt; { <span class="cstat-no" title="statement not covered" > try {</span> // Validate and cap the limit const validatedLimit = <span class="cstat-no" title="statement not covered" >Math.min(Math.max(1, limit), 100);</span> const validatedPage = <span class="cstat-no" title="statement not covered" >Math.max(1, page);</span> &nbsp; const data = <span class="cstat-no" title="statement not covered" >await apiService.search&lt;{ results: any[], error?: string }&gt;(query);</span> &nbsp; // Check if there's an error message in the response <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (data.error) {</span> <span class="cstat-no" title="statement not covered" > return {</span> content: [ { type: "text", text: data.error }, { type: "text", text: JSON.stringify(data.results, null, 2) } ] }; } &nbsp; // If no results were found <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!data.results || data.results.length === 0) {</span> <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: `No results found for query: ${query}. Try using different keywords or simplifying your search.` }] }; } &nbsp; // Sort results by date (most recent first) const sortedResults = <span class="cstat-no" title="statement not covered" >[...data.results].sort(<span class="fstat-no" title="function not covered" >(a</span>, b) =&gt; {</span> // Parse dates from the 'datum' field (format: YYYY-MM-DDT00:00:00) const dateA = <span class="cstat-no" title="statement not covered" >new Date(a.datum);</span> const dateB = <span class="cstat-no" title="statement not covered" >new Date(b.datum);</span> <span class="cstat-no" title="statement not covered" > return dateB.getTime() - dateA.getTime(); </span>// Descending order (newest first) }); &nbsp; // Calculate pagination const totalResults = <span class="cstat-no" title="statement not covered" >sortedResults.length;</span> const totalPages = <span class="cstat-no" title="statement not covered" >Math.ceil(totalResults / validatedLimit);</span> const startIndex = <span class="cstat-no" title="statement not covered" >(validatedPage - 1) * validatedLimit;</span> const endIndex = <span class="cstat-no" title="statement not covered" >Math.min(startIndex + validatedLimit, totalResults);</span> const paginatedResults = <span class="cstat-no" title="statement not covered" >sortedResults.slice(startIndex, endIndex);</span> &nbsp; // Create pagination info const paginationInfo = <span class="cstat-no" title="statement not covered" >{</span> query, totalResults, page: validatedPage, limit: validatedLimit, totalPages, hasNextPage: validatedPage &lt; totalPages, hasPreviousPage: validatedPage &gt; 1 }; &nbsp; // Format the results based on the requested format let formattedResults; <span class="cstat-no" title="statement not covered" > if (format === "summary") {</span> // Create a summary version with only essential fields <span class="cstat-no" title="statement not covered" > formattedResults = paginatedResults.map(<span class="fstat-no" title="function not covered" >item </span>=&gt; (<span class="cstat-no" title="statement not covered" >{</span></span> id: item.id, title: item.title, category: item.category, datum: item.datum, url: item.url })); } else { // Use the full data <span class="cstat-no" title="statement not covered" > formattedResults = paginatedResults;</span> } &nbsp; // Return the paginated results with pagination info <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify({ pagination: paginationInfo, results: formattedResults }, null, 2) }] }; } catch (error: any) { <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: `Error searching: ${error.message || 'Unknown error'}` }] }; } } ); &nbsp; /** 7. Search filtered by type */ <span class="cstat-no" title="statement not covered" >mcp.tool(</span> "search_tk_filtered", "Performs a targeted search within a specific category of parliamentary data. Unlike the general search, this tool allows you to limit results to only documents, activities, or cases. Use this when you need more focused search results within a particular content type. Search syntax: Searching for 'Joe Biden' finds documents containing both 'Joe' and 'Biden' anywhere in the text. Searching for \"Joe Biden\" (with quotes) finds only documents where these words appear next to each other. Searching for 'Hubert NOT Bruls' finds documents containing 'Hubert' but not 'Bruls'. The capital letters in 'NOT' are important. You can also use 'OR' and 'NEAR()' operators.", { query: z.string().describe("Search term - any keyword, name, policy area, or quote you want to find in parliamentary records. Use quotes for exact phrases, 'NOT' to exclude terms, 'OR' for alternatives, and 'NEAR()' for proximity searches."), type: z .enum(["Document", "Activiteit", "Zaak"]) .describe("Category filter: 'Document' for official papers, reports and letters; 'Activiteit' for debates and committee meetings; 'Zaak' for legislative cases and motions"), page: z.number().optional().describe("Page number for paginated results (default: 1)"), limit: z.number().optional().describe("Maximum number of results to return per page (default: 20, max: 100)"), format: z.enum(["full", "summary"]).optional().describe("Format of the results: 'full' for complete data or 'summary' for a condensed version (default: 'summary')") }, <span class="fstat-no" title="function not covered" > async </span>({ query, type, page = <span class="branch-0 cbranch-no" title="branch not covered" >1,</span> limit = <span class="branch-0 cbranch-no" title="branch not covered" >20,</span> format = <span class="branch-0 cbranch-no" title="branch not covered" >"summary" </span>}) =&gt; { <span class="cstat-no" title="statement not covered" > try {</span> // Validate and cap the limit const validatedLimit = <span class="cstat-no" title="statement not covered" >Math.min(Math.max(1, limit), 100);</span> const validatedPage = <span class="cstat-no" title="statement not covered" >Math.max(1, page);</span> &nbsp; const data = <span class="cstat-no" title="statement not covered" >await apiService.search&lt;{ results: any[], error?: string }&gt;(query);</span> &nbsp; // Check if there's an error message in the response <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (data.error) {</span> <span class="cstat-no" title="statement not covered" > return {</span> content: [ { type: "text", text: data.error }, { type: "text", text: "[]" } ] }; } &nbsp; // Filter the results by category const filtered = <span class="cstat-no" title="statement not covered" >data.results ? data.results.filter(<span class="fstat-no" title="function not covered" >(r</span>: any) =&gt; <span class="cstat-no" title="statement not covered" >r.category === type)</span> : [];</span> &nbsp; // If no results were found after filtering <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (filtered.length === 0) {</span> <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: `No results found for query: ${query} with filter: ${type}. Try using different keywords or a different filter.` }] }; } &nbsp; // Sort filtered results by date (most recent first) const sortedResults = <span class="cstat-no" title="statement not covered" >[...filtered].sort(<span class="fstat-no" title="function not covered" >(a</span>, b) =&gt; {</span> // Parse dates from the 'datum' field (format: YYYY-MM-DDT00:00:00) const dateA = <span class="cstat-no" title="statement not covered" >new Date(a.datum);</span> const dateB = <span class="cstat-no" title="statement not covered" >new Date(b.datum);</span> <span class="cstat-no" title="statement not covered" > return dateB.getTime() - dateA.getTime(); </span>// Descending order (newest first) }); &nbsp; // Calculate pagination const totalResults = <span class="cstat-no" title="statement not covered" >sortedResults.length;</span> const totalPages = <span class="cstat-no" title="statement not covered" >Math.ceil(totalResults / validatedLimit);</span> const startIndex = <span class="cstat-no" title="statement not covered" >(validatedPage - 1) * validatedLimit;</span> const endIndex = <span class="cstat-no" title="statement not covered" >Math.min(startIndex + validatedLimit, totalResults);</span> const paginatedResults = <span class="cstat-no" title="statement not covered" >sortedResults.slice(startIndex, endIndex);</span> &nbsp; // Create pagination info const paginationInfo = <span class="cstat-no" title="statement not covered" >{</span> query, type, totalResults, page: validatedPage, limit: validatedLimit, totalPages, hasNextPage: validatedPage &lt; totalPages, hasPreviousPage: validatedPage &gt; 1 }; &nbsp; // Format the results based on the requested format let formattedResults; <span class="cstat-no" title="statement not covered" > if (format === "summary") {</span> // Create a summary version with only essential fields <span class="cstat-no" title="statement not covered" > formattedResults = paginatedResults.map(<span class="fstat-no" title="function not covered" >item </span>=&gt; (<span class="cstat-no" title="statement not covered" >{</span></span> id: item.id, title: item.title, category: item.category, datum: item.datum, url: item.url })); } else { // Use the full data <span class="cstat-no" title="statement not covered" > formattedResults = paginatedResults;</span> } &nbsp; // Return the paginated results with pagination info <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify({ pagination: paginationInfo, results: formattedResults }, null, 2) }] }; } catch (error: any) { <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: `Error searching with filter: ${error.message || 'Unknown error'}` }] }; } } ); &nbsp; /** . MP portrait */ <span class="cstat-no" title="statement not covered" >mcp.tool(</span> "get_photo", "Retrieves the official portrait photograph of a Member of Parliament. Returns the image as a binary resource that can be displayed or saved. Use this when you need to include a visual representation of an MP in reports, presentations, or profiles.", { personId: z.string().describe("MP's numeric ID - the unique identifier for the Member of Parliament whose photo you want to retrieve") }, <span class="fstat-no" title="function not covered" > async </span>({ personId }) =&gt; { <span class="cstat-no" title="statement not covered" > try {</span> const { data } = <span class="cstat-no" title="statement not covered" >await apiService.fetchBinary(`/personphoto/${encodeURIComponent(personId)}`);</span> const base64 = <span class="cstat-no" title="statement not covered" >Buffer.from(data).toString("base64");</span> <span class="cstat-no" title="statement not covered" > return {</span> content: [ { type: "resource", resource: { uri: `photo://${personId}`, blob: base64, mimeType: "image/jpeg" } } ] }; } catch (error: any) { <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: `Error fetching MP photo: ${error.message || 'Unknown error'}` }] }; } } ); &nbsp; /** Document details with structured data */ <span class="cstat-no" title="statement not covered" >mcp.tool(</span> "get_document_details", "Retrieves metadata about a parliamentary document in a structured JSON format, without downloading the actual document content. Returns information including title, type, document number, dates, version number, and clickable links to both the PDF version and the official Tweede Kamer webpage. This tool is ideal for getting quick information about a document and obtaining the relevant links for further access. To actually download the document content, use the 'download_document' tool instead.", { nummer: z.string().describe("Document number (e.g., '2024D39058') - the unique identifier for the parliamentary document you want information about") }, <span class="fstat-no" title="function not covered" > async </span>({ nummer }) =&gt; { <span class="cstat-no" title="statement not covered" > try {</span> const html = <span class="cstat-no" title="statement not covered" >await apiService.fetchHtml(`/document.html?nummer=${encodeURIComponent(nummer)}`);</span> <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!html) {</span> <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify({ error: `No content found for document ${nummer}` }) }] }; } &nbsp; const details = <span class="cstat-no" title="statement not covered" >extractDocumentDetailsFromHtml(html, BASE_URL);</span> <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!details) {</span> <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify({ error: `Failed to parse details for document ${nummer}` }) }] }; } &nbsp; <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify(details, null, 2) }] }; } catch (error: any) { <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify({ error: `Error fetching document details: ${error.message || 'Unknown error'}` }) }] }; } } ); &nbsp; /** Generate clickable document links */ <span class="cstat-no" title="statement not covered" >mcp.tool(</span> "get_document_links", "Converts document URLs into clickable links. This tool takes either a direct PDF link or a Tweede Kamer webpage link and returns them as properly formatted clickable links. Use this after get_document_details to make the URLs clickable.", { pdfUrl: z.string().optional().describe("Direct link to the PDF document"), tkUrl: z.string().optional().describe("Link to the document page on Tweede Kamer website") }, <span class="fstat-no" title="function not covered" > async </span>({ pdfUrl, tkUrl }) =&gt; { const links: string[] = <span class="cstat-no" title="statement not covered" >[];</span> &nbsp; <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (pdfUrl) {</span> <span class="cstat-no" title="statement not covered" > links.push(`[Download PDF](${pdfUrl})`);</span> } &nbsp; <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (tkUrl) {</span> // Remove any HTML entities from the URL const cleanTkUrl = <span class="cstat-no" title="statement not covered" >tkUrl.replace(/&amp;amp;/g, '&amp;');</span> <span class="cstat-no" title="statement not covered" > links.push(`[View on Tweede Kamer website](${cleanTkUrl})`);</span> } &nbsp; <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (links.length === 0) {</span> <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: "No valid links provided" }] }; } &nbsp; <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: links.join("\n") }] }; } ); &nbsp; /** Get committees */ <span class="cstat-no" title="statement not covered" >mcp.tool(</span> "get_committees", "Retrieves a list of all parliamentary committees with their IDs, names, and URLs. The response is a JSON array where each entry represents a committee with its unique identifier and name. Use this tool when a user asks about parliamentary committees, wants to know which committees exist, or needs to find committees related to specific policy areas. Committees are specialized groups of MPs that focus on specific domains like defense, healthcare, or finance. After getting the list of committees, you can use the 'get_committee_details' tool with a specific committee ID to retrieve more detailed information about that committee, including its members and recent activities. This tool takes no parameters as it returns all active committees.", {}, <span class="fstat-no" title="function not covered" > async </span>() =&gt; { <span class="cstat-no" title="statement not covered" > try {</span> const html = <span class="cstat-no" title="statement not covered" >await apiService.fetchHtml("/commissies.html");</span> const committees = <span class="cstat-no" title="statement not covered" >extractCommitteesFromHtml(html, BASE_URL);</span> &nbsp; <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (committees.length === 0) {</span> <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: "No committees found or there was an error retrieving the committee list. Please try again later." }] }; } &nbsp; <span class="cstat-no" title="statement not covered" > return { content: [{ type: "text", text: JSON.stringify(committees, null, 2) }] };</span> } catch (error: any) { <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: `Error fetching committees: ${error.message || 'Unknown error'}` }] }; } } ); &nbsp; /** Get committee details */ <span class="cstat-no" title="statement not covered" >mcp.tool(</span> "get_committee_details", "Retrieves detailed information about a specific parliamentary committee, including its members, recent activities, and description. This provides deeper insight into the committee's composition, leadership roles, and recent work. Use this when you need comprehensive information about a particular committee's structure and activities.", { committeeId: z.string().describe("Committee ID - the unique identifier for the parliamentary committee you want information about") }, <span class="fstat-no" title="function not covered" > async </span>({ committeeId }) =&gt; { <span class="cstat-no" title="statement not covered" > try {</span> const html = <span class="cstat-no" title="statement not covered" >await apiService.fetchHtml(`/commissie.html?id=${encodeURIComponent(committeeId)}`);</span> const committeeDetails = <span class="cstat-no" title="statement not covered" >extractCommitteeDetailsFromHtml(html, BASE_URL, committeeId);</span> &nbsp; <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!committeeDetails) {</span> // If we couldn't extract details from the HTML, return a simplified response with just the name and ID const titleRegex = <span class="cstat-no" title="statement not covered" >/&lt;title&gt;([^&lt;]+)&lt;\/title&gt;/i;</span> const titleMatch = <span class="cstat-no" title="statement not covered" >html.match(titleRegex);</span> const name = <span class="cstat-no" title="statement not covered" >titleMatch?.[1]?.trim() || "Unknown Committee";</span> &nbsp; <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify({ id: committeeId, name: name, url: `${BASE_URL}/commissie.html?id=${encodeURIComponent(committeeId)}`, note: "This committee uses dynamic content rendering. Only basic information is available." }, null, 2) }] }; } &nbsp; <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify(committeeDetails, null, 2) }] }; } catch (error: any) { <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify({ error: `Error fetching committee details: ${error.message || 'Unknown error'}` }) }] }; } } ); &nbsp; /** Get upcoming activities */ <span class="cstat-no" title="statement not covered" >mcp.tool(</span> "get_upcoming_activities", "Retrieves a list of upcoming parliamentary activities including debates, committee meetings, and other events. The response contains a structured JSON object with both a chronological list of activities and activities grouped by date. Each activity includes details like date, time, location, committee, type, and a URL for more information. Use this tool when a user asks about the parliamentary agenda, wants to know what events are coming up, or needs information about specific types of parliamentary activities. The results are sorted by date with the most imminent activities first. You can limit the number of results using the optional 'limit' parameter. This tool is particularly useful for helping users plan which parliamentary sessions to follow or for providing an overview of the upcoming parliamentary schedule.", { limit: z.number().optional().describe("Maximum number of activities to return (default: 20, max: 100)") }, <span class="fstat-no" title="function not covered" > async </span>({ limit = <span class="branch-0 cbranch-no" title="branch not covered" >20 </span>}) =&gt; { <span class="cstat-no" title="statement not covered" > try {</span> // Validate and cap the limit const validatedLimit = <span class="cstat-no" title="statement not covered" >Math.min(Math.max(1, limit), 100);</span> &nbsp; const html = <span class="cstat-no" title="statement not covered" >await apiService.fetchHtml("/activiteiten.html");</span> const activities = <span class="cstat-no" title="statement not covered" >extractActivitiesFromHtml(html, BASE_URL);</span> &nbsp; <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (activities.length === 0) {</span> // If we couldn't extract activities from the HTML, return a simplified response // This could happen if the page structure changes or uses dynamic content <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify({ error: "No upcoming activities found or there was an error retrieving the activities list.", note: "The activities page may use dynamic content rendering. Please try again later or check the website directly.", url: `${BASE_URL}/activiteiten.html` }, null, 2) }] }; } &nbsp; // Sort activities by date (most recent first) and limit the results const sortedActivities = <span class="cstat-no" title="statement not covered" >[...activities].sort(<span class="fstat-no" title="function not covered" >(a</span>, b) =&gt; {</span> const dateA = <span class="cstat-no" title="statement not covered" >new Date(a.date + (a.time ? ` ${a.time}` : ''));</span> const dateB = <span class="cstat-no" title="statement not covered" >new Date(b.date + (b.time ? ` ${b.time}` : ''));</span> <span class="cstat-no" title="statement not covered" > return dateA.getTime() - dateB.getTime(); </span>// Ascending order (upcoming first) }).slice(0, validatedLimit); &nbsp; // Group activities by date for better organization const groupedActivities: Record&lt;string, any[]&gt; = <span class="cstat-no" title="statement not covered" >{};</span> <span class="cstat-no" title="statement not covered" > sortedActivities.forEach(<span class="fstat-no" title="function not covered" >activity </span>=&gt; {</span> const date = <span class="cstat-no" title="statement not covered" >activity.date || 'unknown';</span> <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!groupedActivities[date]) {</span> <span class="cstat-no" title="statement not covered" > groupedActivities[date] = [];</span> } <span class="cstat-no" title="statement not covered" > groupedActivities[date].push(activity);</span> }); &nbsp; <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify({ total: activities.length, limit: validatedLimit, groupedByDate: groupedActivities, activities: sortedActivities }, null, 2) }] }; } catch (error: any) { <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify({ error: `Error fetching upcoming activities: ${error.message || 'Unknown error'}`, url: `${BASE_URL}/activiteiten.html` }, null, 2) }] }; } } ); &nbsp; /** Get voting results */ <span class="cstat-no" title="statement not covered" >mcp.tool(</span> "get_voting_results", "Retrieves recent voting results on parliamentary motions and bills. The response contains a structured JSON object with voting results sorted by date (newest first). Each result includes detailed information such as the title of the motion/bill, the date of the vote, the submitter, whether it was accepted or rejected, the vote counts (for/against), and which political parties voted for or against. Use this tool when a user asks about recent parliamentary votes, wants to know how parties voted on specific issues, or needs to analyze voting patterns. You can control the number of results with the 'limit' parameter and choose between 'full' or 'summary' format. The 'summary' format provides a more structured representation with renamed fields, while both formats include complete party voting information. This tool is particularly valuable for tracking political alignments, understanding coalition dynamics, and analyzing how different parties position themselves on important issues.", { limit: z.number().optional().describe("Maximum number of voting results to return (default: 20, max: 100)"), format: z.enum(["full", "summary"]).optional().describe("Format of the results: 'full' for complete data or 'summary' for a more structured version with renamed fields (default: 'full'). Both formats include party information.") }, <span class="fstat-no" title="function not covered" > async </span>({ limit = <span class="branch-0 cbranch-no" title="branch not covered" >20,</span> format = <span class="branch-0 cbranch-no" title="branch not covered" >"full" </span>}) =&gt; { <span class="cstat-no" title="statement not covered" > try {</span> // Validate and cap the limit const validatedLimit = <span class="cstat-no" title="statement not covered" >Math.min(Math.max(1, limit), 100);</span> &nbsp; const html = <span class="cstat-no" title="statement not covered" >await apiService.fetchHtml("/stemmingen.html");</span> const votingResults = <span class="cstat-no" title="statement not covered" >extractVotingResultsFromHtml(html, BASE_URL);</span> &nbsp; <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (votingResults.length === 0) {</span> <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify({ error: "No voting results found or there was an error retrieving the voting results list. Please try again later.", url: `${BASE_URL}/stemmingen.html` }, null, 2) }] }; } &nbsp; // Sort voting results by date (most recent first) and limit the results const sortedResults = <span class="cstat-no" title="statement not covered" >[...votingResults].sort(<span class="fstat-no" title="function not covered" >(a</span>, b) =&gt; {</span> const dateA = <span class="cstat-no" title="statement not covered" >new Date(a.date);</span> const dateB = <span class="cstat-no" title="statement not covered" >new Date(b.date);</span> <span class="cstat-no" title="statement not covered" > return dateB.getTime() - dateA.getTime(); </span>// Descending order (newest first) }).slice(0, validatedLimit); &nbsp; // Format the results based on the requested format let formattedResults; <span class="cstat-no" title="statement not covered" > if (format === "summary") {</span> // Create a summary version with only essential fields <span class="cstat-no" title="statement not covered" > formattedResults = sortedResults.map(<span class="fstat-no" title="function not covered" >item </span>=&gt; (<span class="cstat-no" title="statement not covered" >{</span></span> id: item.id, title: item.title, date: item.date, result: item.result, submitter: item.submitter, votes: item.votes ? { voorAantal: item.votes.voorAantal, tegenAantal: item.votes.tegenAantal, voorPartijen: item.votes.voor, tegenPartijen: item.votes.tegen } : undefined, url: item.url })); } else { // Use the full data <span class="cstat-no" title="statement not covered" > formattedResults = sortedResults;</span> } &nbsp; <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify({ total: votingResults.length, limit: validatedLimit, format, results: formattedResults }, null, 2) }] }; } catch (error: any) { <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify({ error: `Error fetching voting results: ${error.message || 'Unknown error'}`, url: `${BASE_URL}/stemmingen.html` }, null, 2) }] }; } } ); &nbsp; /** Search documents by category */ <span class="cstat-no" title="statement not covered" >mcp.tool(</span> "search_by_category", "Performs a search specifically for documents of a certain category, such as questions, motions, or letters. The response contains a structured JSON object with paginated results and metadata. Use this tool when a user wants to find documents of a specific type that match certain keywords or when they need more targeted search results than the general search provides. The 'category' parameter lets you filter by document type: 'vragen' for parliamentary questions, 'moties' for motions, or 'alles' for all document types. The search syntax supports advanced queries: 'Joe Biden' finds documents with both terms anywhere, '\"Joe Biden\"' (with quotes) finds exact phrases, 'Hubert NOT Bruls' finds documents with 'Hubert' but not 'Bruls' (capital NOT is required), and you can use 'OR' for alternatives. Results are sorted by date with the most recent documents first. This tool is particularly useful for finding specific types of parliamentary documents on a given topic.", { query: z.string().describe("Search term - any keyword, name, policy area, or quote you want to find in parliamentary records"), category: z.enum(["vragen", "moties", "alles"]).describe("Document category: 'vragen' for questions, 'moties' for motions, 'alles' for all document types"), page: z.number().optional().describe("Page number for paginated results (default: 1)"), limit: z.number().optional().describe("Maximum number of results to return per page (default: 20, max: 100)") }, <span class="fstat-no" title="function not covered" > async </span>({ query, category, page = <span class="branch-0 cbranch-no" title="branch not covered" >1,</span> limit = <span class="branch-0 cbranch-no" title="branch not covered" >20 </span>}) =&gt; { <span class="cstat-no" title="statement not covered" > try {</span> // Validate and cap the limit const validatedLimit = <span class="cstat-no" title="statement not covered" >Math.min(Math.max(1, limit), 100);</span> const validatedPage = <span class="cstat-no" title="statement not covered" >Math.max(1, page);</span> &nbsp; const data = <span class="cstat-no" title="statement not covered" >await apiService.search&lt;{ results: any[], error?: string }&gt;(query, { soorten: category });</span> &nbsp; // Check if there's an error message in the response <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (data.error) {</span> <span class="cstat-no" title="statement not covered" > return {</span> content: [ { type: "text", text: data.error }, { type: "text", text: JSON.stringify(data.results || [], null, 2) } ] }; } &nbsp; // If no results were found <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!data.results || data.results.length === 0) {</span> <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: `No results found for query: ${query} with category: ${category}. Try using different keywords or a different category.` }] }; } &nbsp; // Sort results by date (most recent first) const sortedResults = <span class="cstat-no" title="statement not covered" >[...data.results].sort(<span class="fstat-no" title="function not covered" >(a</span>, b) =&gt; {</span> // Parse dates from the 'datum' field (format: YYYY-MM-DDT00:00:00) const dateA = <span class="cstat-no" title="statement not covered" >new Date(a.datum);</span> const dateB = <span class="cstat-no" title="statement not covered" >new Date(b.datum);</span> <span class="cstat-no" title="statement not covered" > return dateB.getTime() - dateA.getTime(); </span>// Descending order (newest first) }); &nbsp; // Calculate pagination const totalResults = <span class="cstat-no" title="statement not covered" >sortedResults.length;</span> const totalPages = <span class="cstat-no" title="statement not covered" >Math.ceil(totalResults / validatedLimit);</span> const startIndex = <span class="cstat-no" title="statement not covered" >(validatedPage - 1) * validatedLimit;</span> const endIndex = <span class="cstat-no" title="statement not covered" >Math.min(startIndex + validatedLimit, totalResults);</span> const paginatedResults = <span class="cstat-no" title="statement not covered" >sortedResults.slice(startIndex, endIndex);</span> &nbsp; // Create pagination info const paginationInfo = <span class="cstat-no" title="statement not covered" >{</span> query, category, totalResults, page: validatedPage, limit: validatedLimit, totalPages, hasNextPage: validatedPage &lt; totalPages, hasPreviousPage: validatedPage &gt; 1 }; &nbsp; // Create a summary version with only essential fields const formattedResults = <span class="cstat-no" title="statement not covered" >paginatedResults.map(<span class="fstat-no" title="function not covered" >item </span>=&gt; (<span class="cstat-no" title="statement not covered" >{</span></span> id: item.id, title: item.title, category: item.category, datum: item.datum, url: item.url })); &nbsp; // Return the paginated results with pagination info <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify({ pagination: paginationInfo, results: formattedResults }, null, 2) }] }; } catch (error: any) { <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: `Error searching by category: ${error.message || 'Unknown error'}` }] }; } } ); &nbsp; /** Get document content */ <span class="cstat-no" title="statement not covered" >mcp.tool(</span> "get_document_content", "Retrieves the content of a parliamentary document (PDF or DOCX). Supports three modes of operation depending on parameters provided.\n\nTHREE USAGE SCENARIOS:\n\n1. TARGETED RETRIEVAL (with offset - from find_person_in_document):\n - Provide: docId + offset (+ optional maxLength, default 3000)\n - Returns: Text CENTERED around the offset position\n - Extracts: ~1,500 chars before + ~1,500 chars after the offset\n - Finds natural paragraph boundaries for clean extraction\n - Use case: Reading specific sections where a person speaks or is mentioned\n - Example: get_document_content({docId: '2025D18220', offset: 5234})\n\n2. CONTROLLED SEQUENTIAL READING (with maxLength, no offset):\n - Provide: docId + maxLength (no offset)\n - Returns: First maxLength characters from document start\n - Includes nextOffset for pagination to continue reading\n - Use case: Reading full document in manageable chunks\n - Example: get_document_content({docId: '2025D18220', maxLength: 5000})\n - Then: get_document_content({docId: '2025D18220', offset: &lt;nextOffset&gt;, maxLength: 5000})\n\n3. FULL DOCUMENT RETRIEVAL (no offset, no maxLength):\n - Provide: docId only\n - Returns: Complete document text (may be 100KB+)\n - Use case: Comprehensive document analysis when context window allows\n - WARNING: May use significant context window space\n - Example: get_document_content({docId: '2025D18220'})\n\nRECOMMENDED WORKFLOW FOR FINDING SPECIFIC CONTENT:\n1. Use find_person_in_document to locate where a person appears\n → Returns characterOffset values (e.g., 5234, 12890, 23456)\n2. Use get_document_content with the characterOffset (Scenario 1)\n → Returns 3,000-char excerpt centered on that location\n3. Review the excerpt and pagination info\n4. If more context needed, use nextOffset to continue reading\n → get_document_content({docId: '...', offset: &lt;nextOffset&gt;})\n\nParameters:\n- docId: Document ID to retrieve (required)\n- offset (optional): Character position to center extraction around\n * Use values from find_person_in_document for targeted retrieval\n * Use nextOffset from previous response for pagination\n- maxLength (optional): Maximum characters to return\n * Default: 3000 when offset is provided\n * No default when offset is not provided (returns full document)\n * Recommended: 3000-5000 for efficient context usage\n\nResponse format:\n- text: Extracted document content\n- textLength: Length of returned text\n- offset: Starting position in full document\n- nextOffset: Position to continue reading (null if at end)\n- prevOffset: Position to read backwards (null if at start)\n- hasMoreBefore: Boolean indicating more content exists before\n- hasMoreAfter: Boolean indicating more content exists after\n- note: Instructions for retrieving more content\n\nExample workflows:\n\nA) Targeted retrieval (find specific person):\n find_person_in_document({docId: '2025D18220', personName: 'Wilders'})\n → Returns: [{characterOffset: 5234}, {characterOffset: 12890}]\n \n get_document_content({docId: '2025D18220', offset: 5234})\n → Returns: 3KB centered at position 5234\n \n get_document_content({docId: '2025D18220', offset: 12890})\n → Returns: 3KB centered at position 12890\n\nB) Sequential reading in chunks:\n get_document_content({docId: '2025D18220', maxLength: 5000})\n → Returns: First 5KB + nextOffset: 5123\n \n get_document_content({docId: '2025D18220', offset: 5123, maxLength: 5000})\n → Returns: Next 5KB + nextOffset: 10246\n\nC) Full document analysis:\n get_document_content({docId: '2025D18220'})\n → Returns: Complete document (may be 100KB+)", { docId: z.string().describe("Document ID (e.g., '2024D39058') - the unique identifier for the parliamentary document you want to download and extract text from"), offset: z.number().optional().describe("Optional starting position for text extraction. Use this to retrieve content from a specific position in the document. When provided with maxLength, extracts text centered around this position."), maxLength: z.number().optional().describe("Maximum number of characters to return. Default: 3000 when offset is provided, no limit when offset is not provided. Set to a higher value if you need more context, but be mindful of context window limits.") }, <span class="fstat-no" title="function not covered" > async </span>({ docId, offset, maxLength }) =&gt; { <span class="cstat-no" title="statement not covered" > try {</span> // First try to get the document page to extract the link const html = <span class="cstat-no" title="statement not covered" >await apiService.fetchHtml(`/document.html?nummer=${encodeURIComponent(docId)}`);</span> &nbsp; // Check if the document exists <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (html.includes('Found nothing in document.html!!')) {</span> <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify({ error: `Document not found: ${docId}`, suggestion: "The document ID may be incorrect or the document doesn't exist in the tkconv database. Try a different document ID or use the search tool to find relevant documents.", searchUrl: `${BASE_URL}/search.html` }, null, 2) }] }; } &nbsp; // Get document details for metadata const details = <span class="cstat-no" title="statement not covered" >extractDocumentDetailsFromHtml(html, BASE_URL);</span> &nbsp; // Extract the document link const documentLink = <span class="cstat-no" title="statement not covered" >extractDocumentLink(html);</span> &nbsp; <span class="cstat-no" title="statement not covered" > if (documentLink === 'NOT_FOUND') {</span> <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify({ error: `Document not found: ${docId}`, suggestion: "The document ID may be incorrect or the document doesn't exist in the tkconv database. Try a different document ID or use the search tool to find relevant documents.", searchUrl: `${BASE_URL}/search.html` }, null, 2) }] }; } else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="if path not taken" >I</span>if (!documentLink) {</span> <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify({ error: `Could not find document link for document ${docId}`, suggestion: "The document exists but no download link was found. Try using get_document_details to verify the document ID is correct.", documentUrl: `${BASE_URL}/document.html?nummer=${encodeURIComponent(docId)}` }, null, 2) }] }; } &nbsp; // Download the document const { data, contentType } = <span class="cstat-no" title="statement not covered" >await apiService.fetchBinary(`/${documentLink}`);</span> &nbsp; // Extract text based on document type let extractedText = <span class="cstat-no" title="statement not covered" >'';</span> let documentType = <span class="cstat-no" title="statement not covered" >'';</span> &nbsp; <span class="cstat-no" title="statement not covered" > if (contentType.includes('pdf')) {</span> // Handle PDF documents using pdf-parse library <span class="cstat-no" title="statement not covered" > extractedText = await extractTextFromPdf(data);</span> <span class="cstat-no" title="statement not covered" > documentType = 'PDF';</span> } else <span class="cstat-no" title="statement not covered" >if (contentType.includes('wordprocessingml.document') || contentType.includes('msword') || documentLink.endsWith('.docx') || documentLink.endsWith('.doc')) {</span> // Handle Word documents (DOCX/DOC) using mammoth library <span class="cstat-no" title="statement not covered" > extractedText = await extractTextFromDocx(data);</span> <span class="cstat-no" title="statement not covered" > documentType = 'Word';</span> } else { // Unsupported document type <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify({ error: `Unsupported document type (content type: ${contentType})`, suggestion: "This tool currently only supports PDF and Word (DOCX) documents.", documentLink: details?.directLinkPdf || null }, null, 2) }] }; } &nbsp; // Implement smart chunking logic based on parameters let chunk: string; let actualStart: number; let actualEnd: number; let hasMoreBefore: boolean; let hasMoreAfter: boolean; let nextOffset: number | null; let prevOffset: number | null; &nbsp; <span class="cstat-no" title="statement not covered" > if (offset !== undefined) {</span> // SCENARIO 1: Targeted retrieval with offset const maxLen = <span class="cstat-no" title="statement not covered" >maxLength || 3000;</span> const halfLength = <span class="cstat-no" title="statement not covered" >Math.floor(maxLen / 2);</span> // Calculate extraction window centered around offset const startPos = <span class="cstat-no" title="statement not covered" >Math.max(0, offset - halfLength);</span> const endPos = <span class="cstat-no" title="statement not covered" >Math.min(extractedText.length, offset + halfLength);</span> // Find natural paragraph boundaries <span class="cstat-no" title="statement not covered" > actualStart = findParagraphStart(extractedText, startPos);</span> <span class="cstat-no" title="statement not covered" > actualEnd = findParagraphEnd(extractedText, endPos);</span> // Extract the chunk <span class="cstat-no" title="statement not covered" > chunk = extractedText.substring(actualStart, actualEnd);</span> // Calculate pagination info <span class="cstat-no" title="statement not covered" > hasMoreBefore = actualStart &gt; 0;</span> <span class="cstat-no" title="statement not covered" > hasMoreAfter = actualEnd &lt; extractedText.length;</span> <span class="cstat-no" title="statement not covered" > nextOffset = hasMoreAfter ? actualEnd : null;</span> <span class="cstat-no" title="statement not covered" > prevOffset = hasMoreBefore ? Math.max(0, actualStart - maxLen) : null;</span> } else <span class="cstat-no" title="statement not covered" >if (maxLength !== undefined) {</span> // SCENARIO 2: Controlled reading from start const maxLen = <span class="cstat-no" title="statement not covered" >maxLength;</span> const endPos = <span class="cstat-no" title="statement not covered" >Math.min(extractedText.length, maxLen);</span> const endBoundary = <span class="cstat-no" title="statement not covered" >findParagraphEnd(extractedText, endPos);</span> <span class="cstat-no" title="statement not covered" > chunk = extractedText.substring(0, endBoundary);</span> <span class="cstat-no" title="statement not covered" > actualStart = 0;</span> <span class="cstat-no" title="statement not covered" > actualEnd = endBoundary;</span> <span class="cstat-no" title="statement not covered" > hasMoreBefore = false;</span> <span class="cstat-no" title="statement not covered" > hasMoreAfter = endBoundary &lt; extractedText.length;</span> <span class="cstat-no" title="statement not covered" > nextOffset = hasMoreAfter ? endBoundary : null;</span> <span class="cstat-no" title="statement not covered" > prevOffset = null;</span> } else { // SCENARIO 3: Full document retrieval (original behavior) <span class="cstat-no" title="statement not covered" > chunk = extractedText;</span> <span class="cstat-no" title="statement not covered" > actualStart = 0;</span> <span class="cstat-no" title="statement not covered" > actualEnd = extractedText.length;</span> <span class="cstat-no" title="statement not covered" > hasMoreBefore = false;</span> <span class="cstat-no" title="statement not covered" > hasMoreAfter = false;</span> <span class="cstat-no" title="statement not covered" > nextOffset = null;</span> <span class="cstat-no" title="statement not covered" > prevOffset = null;</span> } &nbsp; // Return the document content along with metadata and pagination info <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify({ docId, title: details?.title || "Unknown title", type: details?.type || "Unknown type", date: details?.datum || "Unknown date", documentFormat: documentType, // Text content text: chunk, textLength: chunk.length, // Pagination info offset: actualStart, nextOffset: nextOffset, prevOffset: prevOffset, hasMoreBefore: hasMoreBefore, hasMoreAfter: hasMoreAfter, // Usage instructions note: hasMoreAfter ? `This is a ${chunk.length}-character excerpt. To read more, call get_document_content({docId: '${docId}', offset: ${actualEnd}, maxLength: ${maxLength || 3000}})` : "This is the complete section.", documentLink: details?.directLinkPdf || null }, null, 2) }] }; } catch (error: any) { <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify({ error: `Error extracting document content: ${error.message || 'Unknown error'}`, suggestion: "Try using get_document_details to verify the document exists and is accessible.", documentLink: `${BASE_URL}/document.html?nummer=${encodeURIComponent(docId)}` }, null, 2) }] }; } } ); &nbsp; /** Find person occurrences in document */ <span class="cstat-no" title="statement not covered" >mcp.tool(</span> "find_person_in_document", "Searches for all occurrences of a person's name within a parliamentary document and returns their precise locations. This tool is essential for efficiently navigating large documents when you need to find where a specific person speaks, is mentioned, or is referenced. Instead of loading an entire bulky document into the context window, use this tool first to identify the exact sections where the person appears.\n\nThe tool uses fuzzy matching, so you don't need the person's full name:\n- Searching for \"Wilders\" will find \"Geert Wilders\", \"de heer Wilders\", \"Minister Wilders\", etc.\n- Searching for \"Rutte\" will find \"Mark Rutte\", \"Premier Rutte\", \"Minister-president Rutte\", etc.\n- Searching for \"Van der\" will find \"Van der Staaij\", \"Van der Plas\", etc.\n\nThe response includes:\n- Total number of occurrences found\n- For each occurrence:\n - Line range (e.g., lines 45-47) showing where in the document the name appears\n - Character offset in the full document text\n - A brief snippet (preview) of the surrounding text to verify it's the right context\n \nUse this tool in a two-step workflow:\n1. First, call `find_person_in_document` to locate where the person appears in the document\n2. Then, call `get_document_content` with the character offset from step 1 to retrieve only the relevant sections\n\nIMPORTANT: After finding occurrences, use get_document_content with the characterOffset. \nThe get_document_content tool now returns small chunks (3,000 characters by default) \nto avoid overwhelming the context window. You may need to make multiple calls to read \ndifferent sections or use a larger maxLength if needed.\n\nThis approach dramatically reduces context window usage by avoiding the need to load entire documents when searching for specific speakers or mentions. It's particularly valuable for debate transcripts, committee meetings, and other lengthy parliamentary documents where multiple people speak.\n\nExample workflow:\n- Call: find_person_in_document({docId: \"2025D18220\", personName: \"Wilders\"})\n- Get response: Found 8 occurrences at lines 45-47, 123-125, 230-232, etc.\n- Review snippets to identify which sections are relevant\n- Call: get_document_content({docId: \"2025D18220\", offset: 5234}) to read the specific section starting at character position 5234\n\nWhen to use this tool:\n- When a user asks \"What did [person] say in this document?\"\n- When searching for a specific speaker's contributions to a debate\n- When analyzing how often someone is mentioned in parliamentary proceedings\n- Before retrieving document content, to avoid loading unnecessary text", { docId: z.string().describe("Document ID (e.g., '2024D39058') - the unique identifier for the parliamentary document you want to search in"), personName: z.string().describe("Name or part of a name to search for - can be a first name, last name, or full name. The tool uses fuzzy matching, so partial names work well (e.g., 'Wilders' will find 'Geert Wilders', 'de heer Wilders', etc.)") }, <span class="fstat-no" title="function not covered" > async </span>({ docId, personName }) =&gt; { <span class="cstat-no" title="statement not covered" > try {</span> // First try to get the document page to extract the link const html = <span class="cstat-no" title="statement not covered" >await apiService.fetchHtml(`/document.html?nummer=${encodeURIComponent(docId)}`);</span> &nbsp; // Check if the document exists <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (html.includes('Found nothing in document.html!!')) {</span> <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify({ error: `Document not found: ${docId}`, suggestion: "The document ID may be incorrect or the document doesn't exist in the tkconv database. Try a different document ID or use the search tool to find relevant documents.", searchUrl: `${BASE_URL}/search.html` }, null, 2) }] }; } &nbsp; // Get document details for metadata const details = <span class="cstat-no" title="statement not covered" >extractDocumentDetailsFromHtml(html, BASE_URL);</span> &nbsp; // Extract the document link const documentLink = <span class="cstat-no" title="statement not covered" >extractDocumentLink(html);</span> &nbsp; <span class="cstat-no" title="statement not covered" > if (documentLink === 'NOT_FOUND') {</span> <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify({ error: `Document not found: ${docId}`, suggestion: "The document ID may be incorrect or the document doesn't exist in the tkconv database. Try a different document ID or use the search tool to find relevant documents.", searchUrl: `${BASE_URL}/search.html` }, null, 2) }] }; } else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="if path not taken" >I</span>if (!documentLink) {</span> <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify({ error: `Could not find document link for document ${docId}`, suggestion: "The document exists but no download link was found. Try using get_document_details to verify the document ID is correct.", documentUrl: `${BASE_URL}/document.html?nummer=${encodeURIComponent(docId)}` }, null, 2) }] }; } &nbsp; // Download the document const { data, contentType } = <span class="cstat-no" title="statement not covered" >await apiService.fetchBinary(`/${documentLink}`);</span> &nbsp; // Extract text based on document type let extractedText = <span class="cstat-no" title="statement not covered" >'';</span> let documentType = <span class="cstat-no" title="statement not covered" >'';</span> &nbsp; <span class="cstat-no" title="statement not covered" > if (contentType.includes('pdf')) {</span> // Handle PDF documents using pdf-parse library <span class="cstat-no" title="statement not covered" > extractedText = await extractTextFromPdf(data);</span> <span class="cstat-no" title="statement not covered" > documentType = 'PDF';</span> } else <span class="cstat-no" title="statement not covered" >if (contentType.includes('wordprocessingml.document') || contentType.includes('msword') || documentLink.endsWith('.docx') || documentLink.endsWith('.doc')) {</span> // Handle Word documents (DOCX/DOC) using mammoth library <span class="cstat-no" title="statement not covered" > extractedText = await extractTextFromDocx(data);</span> <span class="cstat-no" title="statement not covered" > documentType = 'Word';</span> } else { // Unsupported document type <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify({ error: `Unsupported document type (content type: ${contentType})`, suggestion: "This tool currently only supports PDF and Word (DOCX) documents.", documentLink: details?.directLinkPdf || null }, null, 2) }] }; } &nbsp; // Find person occurrences in the extracted text const occurrences = <span class="cstat-no" title="statement not covered" >findPersonOccurrences(extractedText, personName);</span> &nbsp; // Return the results with metadata and usage suggestions <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify({ docId, title: details?.title || "Unknown title", type: details?.type || "Unknown type", date: details?.datum || "Unknown date", documentFormat: documentType, searchTerm: personName, totalOccurrences: occurrences.length, occurrences: occurrences, usageInstructions: { nextStep: "Use get_document_content with specific character offsets to retrieve relevant sections", example: `get_document_content({docId: '${docId}', offset: ${occurrences.length &gt; 0 ? occurrences[0]?.characterOffset ?? 0 : 0}})`, note: "Each occurrence includes a characterOffset that you can use with get_document_content to read that specific section" }, documentLink: details?.directLinkPdf || null }, null, 2) }] }; } catch (error: any) { <span class="cstat-no" title="statement not covered" > return {</span> content: [{ type: "text", text: JSON.stringify({ error: `Error searching for person in document: ${error.message || 'Unknown error'}`, suggestion: "Try using get_document_details to verify the document exists and is accessible.", documentLink: `${BASE_URL}/document.html?nummer=${encodeURIComponent(docId)}` }, null, 2) }] }; } } ); &nbsp; // ——————————————————————————————————————————————— // Boot up the MCP server async function <span class="fstat-no" title="function not covered" >main(</span>) { <span class="cstat-no" title="statement not covered" > console.error("Starting OpenTK MCP server (v1.0.11)…");</span> <span class="cstat-no" title="statement not covered" > await mcp.connect(new StdioServerTransport());</span> } <span class="cstat-no" title="statement not covered" >main().catch(<span class="fstat-no" title="function not covered" >(e</span>) =&gt; {</span> <span class="cstat-no" title="statement not covered" > console.error("Fatal:", e);</span> <span class="cstat-no" title="statement not covered" > process.exit(1);</span> }); &nbsp;</pre></td></tr></table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> at 2025-10-24T20:38:43.138Z </div> <script src="../prettify.js"></script> <script> window.onload = function () { prettyPrint(); }; </script> <script src="../sorter.js"></script> <script src="../block-navigation.js"></script> </body> </html>

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/r-huijts/opentk-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server