summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2009-05-25 09:27:13 -0400
committerNed Batchelder <ned@nedbatchelder.com>2009-05-25 09:27:13 -0400
commit98473577d7127d2ebb8f71c1a6016ca71b0fad2e (patch)
tree4bbb19c1e54755afc6c2efc085a5eab4697981f0
parent53ddcde9f0af2476a75f32765353543832a655f1 (diff)
downloadpython-coveragepy-git-98473577d7127d2ebb8f71c1a6016ca71b0fad2e.tar.gz
A sample HTML coverage report.
-rw-r--r--doc/sample_html/README.txt5
-rw-r--r--doc/sample_html/cogapp_cogapp.html1468
-rw-r--r--doc/sample_html/cogapp_makefiles.html178
-rw-r--r--doc/sample_html/cogapp_test_cogapp.html3970
-rw-r--r--doc/sample_html/cogapp_whiteutils.html176
-rw-r--r--doc/sample_html/index.html78
-rw-r--r--doc/sample_html/jquery-1.3.2.min.js19
-rw-r--r--doc/sample_html/style.css159
8 files changed, 6053 insertions, 0 deletions
diff --git a/doc/sample_html/README.txt b/doc/sample_html/README.txt
new file mode 100644
index 00000000..c1e49828
--- /dev/null
+++ b/doc/sample_html/README.txt
@@ -0,0 +1,5 @@
+This directory was made with::
+
+ cd C:\ned\cog\trunk
+ coverage -e -x cogapp\test_cogapp.py CogTestsInMemory
+ coverage -b -i -d htmlcov
diff --git a/doc/sample_html/cogapp_cogapp.html b/doc/sample_html/cogapp_cogapp.html
new file mode 100644
index 00000000..6930fb5e
--- /dev/null
+++ b/doc/sample_html/cogapp_cogapp.html
@@ -0,0 +1,1468 @@
+<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+<title>Coverage for cogapp\cogapp</title>
+<link rel='stylesheet' href='style.css' type='text/css'>
+<script src='jquery-1.3.2.min.js'></script>
+<script>
+function toggle_lines(btn, cls) {
+ var btn = $(btn);
+ if (btn.hasClass("hide")) {
+ $("#source ."+cls).removeClass("hide");
+ btn.removeClass("hide");
+ }
+ else {
+ $("#source ."+cls).addClass("hide");
+ btn.addClass("hide");
+ }
+}
+</script>
+</head>
+<body>
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage for <b>cogapp\cogapp</b> :
+ <span class='pc_cov'>57%</span>
+ </h1>
+ <h2 class='stats'>
+ 387 statements
+ <span class='run hide' onclick='toggle_lines(this, "run")'>219 run</span>
+ <span class='exc' onclick='toggle_lines(this, "exc")'>3 excluded</span>
+ <span class='mis' onclick='toggle_lines(this, "mis")'>168 missing</span>
+ </h2>
+ </div>
+</div>
+
+<div id='source'>
+<table cellspacing='0' cellpadding='0'>
+<tr>
+<td class='linenos' valign='top'>
+<p class='pln'>1</p>
+<p class='pln'>2</p>
+<p class='pln'>3</p>
+<p class='pln'>4</p>
+<p class='pln'>5</p>
+<p class='pln'>6</p>
+<p class='stm run hide'>7</p>
+<p class='stm run hide'>8</p>
+<p class='pln'>9</p>
+<p class='pln'>10</p>
+<p class='stm run hide'>11</p>
+<p class='stm run hide'>12</p>
+<p class='stm run hide'>13</p>
+<p class='stm mis'>14</p>
+<p class='stm mis'>15</p>
+<p class='stm mis'>16</p>
+<p class='pln'>17</p>
+<p class='stm run hide'>18</p>
+<p class='pln'>19</p>
+<p class='stm run hide'>20</p>
+<p class='pln'>21</p>
+<p class='stm run hide'>22</p>
+<p class='pln'>23</p>
+<p class='pln'>24</p>
+<p class='pln'>25</p>
+<p class='pln'>26</p>
+<p class='pln'>27</p>
+<p class='pln'>28</p>
+<p class='pln'>29</p>
+<p class='pln'>30</p>
+<p class='pln'>31</p>
+<p class='pln'>32</p>
+<p class='pln'>33</p>
+<p class='pln'>34</p>
+<p class='pln'>35</p>
+<p class='pln'>36</p>
+<p class='pln'>37</p>
+<p class='pln'>38</p>
+<p class='pln'>39</p>
+<p class='pln'>40</p>
+<p class='pln'>41</p>
+<p class='pln'>42</p>
+<p class='pln'>43</p>
+<p class='pln'>44</p>
+<p class='pln'>45</p>
+<p class='pln'>46</p>
+<p class='pln'>47</p>
+<p class='pln'>48</p>
+<p class='pln'>49</p>
+<p class='stm run hide'>50</p>
+<p class='pln'>51</p>
+<p class='stm run hide'>52</p>
+<p class='pln'>53</p>
+<p class='pln'>54</p>
+<p class='stm run hide'>55</p>
+<p class='stm run hide'>56</p>
+<p class='stm run hide'>57</p>
+<p class='pln'>58</p>
+<p class='stm mis'>59</p>
+<p class='pln'>60</p>
+<p class='stm run hide'>61</p>
+<p class='pln'>62</p>
+<p class='pln'>63</p>
+<p class='exc'>64</p>
+<p class='pln'>65</p>
+<p class='stm run hide'>66</p>
+<p class='pln'>67</p>
+<p class='pln'>68</p>
+<p class='exc'>69</p>
+<p class='pln'>70</p>
+<p class='stm run hide'>71</p>
+<p class='pln'>72</p>
+<p class='pln'>73</p>
+<p class='exc'>74</p>
+<p class='pln'>75</p>
+<p class='stm run hide'>76</p>
+<p class='pln'>77</p>
+<p class='pln'>78</p>
+<p class='stm run hide'>79</p>
+<p class='stm run hide'>80</p>
+<p class='stm run hide'>81</p>
+<p class='pln'>82</p>
+<p class='stm run hide'>83</p>
+<p class='pln'>84</p>
+<p class='pln'>85</p>
+<p class='stm run hide'>86</p>
+<p class='stm run hide'>87</p>
+<p class='stm run hide'>88</p>
+<p class='stm mis'>89</p>
+<p class='pln'>90</p>
+<p class='stm run hide'>91</p>
+<p class='pln'>92</p>
+<p class='pln'>93</p>
+<p class='stm run hide'>94</p>
+<p class='stm run hide'>95</p>
+<p class='stm run hide'>96</p>
+<p class='stm run hide'>97</p>
+<p class='pln'>98</p>
+<p class='stm run hide'>99</p>
+<p class='stm run hide'>100</p>
+<p class='pln'>101</p>
+<p class='stm run hide'>102</p>
+<p class='stm run hide'>103</p>
+<p class='pln'>104</p>
+<p class='stm run hide'>105</p>
+<p class='pln'>106</p>
+<p class='pln'>107</p>
+<p class='pln'>108</p>
+<p class='pln'>109</p>
+<p class='pln'>110</p>
+<p class='stm run hide'>111</p>
+<p class='stm run hide'>112</p>
+<p class='stm run hide'>113</p>
+<p class='stm run hide'>114</p>
+<p class='pln'>115</p>
+<p class='stm run hide'>116</p>
+<p class='pln'>117</p>
+<p class='stm run hide'>118</p>
+<p class='pln'>119</p>
+<p class='stm run hide'>120</p>
+<p class='pln'>121</p>
+<p class='stm run hide'>122</p>
+<p class='stm run hide'>123</p>
+<p class='stm run hide'>124</p>
+<p class='pln'>125</p>
+<p class='pln'>126</p>
+<p class='stm run hide'>127</p>
+<p class='stm run hide'>128</p>
+<p class='pln'>129</p>
+<p class='pln'>130</p>
+<p class='stm run hide'>131</p>
+<p class='stm run hide'>132</p>
+<p class='stm run hide'>133</p>
+<p class='stm run hide'>134</p>
+<p class='pln'>135</p>
+<p class='stm run hide'>136</p>
+<p class='stm run hide'>137</p>
+<p class='pln'>138</p>
+<p class='pln'>139</p>
+<p class='pln'>140</p>
+<p class='pln'>141</p>
+<p class='stm run hide'>142</p>
+<p class='stm run hide'>143</p>
+<p class='pln'>144</p>
+<p class='stm run hide'>145</p>
+<p class='pln'>146</p>
+<p class='stm run hide'>147</p>
+<p class='stm mis'>148</p>
+<p class='pln'>149</p>
+<p class='stm run hide'>150</p>
+<p class='pln'>151</p>
+<p class='pln'>152</p>
+<p class='stm run hide'>153</p>
+<p class='stm run hide'>154</p>
+<p class='stm run hide'>155</p>
+<p class='stm run hide'>156</p>
+<p class='stm run hide'>157</p>
+<p class='stm run hide'>158</p>
+<p class='stm run hide'>159</p>
+<p class='stm run hide'>160</p>
+<p class='stm run hide'>161</p>
+<p class='stm run hide'>162</p>
+<p class='pln'>163</p>
+<p class='stm run hide'>164</p>
+<p class='pln'>165</p>
+<p class='pln'>166</p>
+<p class='stm run hide'>167</p>
+<p class='stm run hide'>168</p>
+<p class='pln'>169</p>
+<p class='stm run hide'>170</p>
+<p class='pln'>171</p>
+<p class='pln'>172</p>
+<p class='pln'>173</p>
+<p class='pln'>174</p>
+<p class='pln'>175</p>
+<p class='stm mis'>176</p>
+<p class='pln'>177</p>
+<p class='pln'>178</p>
+<p class='stm run hide'>179</p>
+<p class='pln'>180</p>
+<p class='pln'>181</p>
+<p class='stm run hide'>182</p>
+<p class='stm run hide'>183</p>
+<p class='stm run hide'>184</p>
+<p class='pln'>185</p>
+<p class='stm run hide'>186</p>
+<p class='stm run hide'>187</p>
+<p class='stm run hide'>188</p>
+<p class='stm run hide'>189</p>
+<p class='stm run hide'>190</p>
+<p class='pln'>191</p>
+<p class='stm run hide'>192</p>
+<p class='stm run hide'>193</p>
+<p class='pln'>194</p>
+<p class='pln'>195</p>
+<p class='stm run hide'>196</p>
+<p class='pln'>197</p>
+<p class='pln'>198</p>
+<p class='stm run hide'>199</p>
+<p class='pln'>200</p>
+<p class='stm run hide'>201</p>
+<p class='stm run hide'>202</p>
+<p class='stm run hide'>203</p>
+<p class='stm run hide'>204</p>
+<p class='stm run hide'>205</p>
+<p class='stm run hide'>206</p>
+<p class='stm run hide'>207</p>
+<p class='stm run hide'>208</p>
+<p class='stm run hide'>209</p>
+<p class='stm run hide'>210</p>
+<p class='stm run hide'>211</p>
+<p class='stm run hide'>212</p>
+<p class='stm run hide'>213</p>
+<p class='stm run hide'>214</p>
+<p class='pln'>215</p>
+<p class='stm run hide'>216</p>
+<p class='pln'>217</p>
+<p class='pln'>218</p>
+<p class='stm mis'>219</p>
+<p class='pln'>220</p>
+<p class='stm run hide'>221</p>
+<p class='pln'>222</p>
+<p class='pln'>223</p>
+<p class='stm mis'>224</p>
+<p class='pln'>225</p>
+<p class='stm run hide'>226</p>
+<p class='pln'>227</p>
+<p class='pln'>228</p>
+<p class='stm mis'>229</p>
+<p class='stm mis'>230</p>
+<p class='pln'>231</p>
+<p class='stm run hide'>232</p>
+<p class='pln'>233</p>
+<p class='stm mis'>234</p>
+<p class='stm mis'>235</p>
+<p class='stm mis'>236</p>
+<p class='stm mis'>237</p>
+<p class='pln'>238</p>
+<p class='pln'>239</p>
+<p class='stm mis'>240</p>
+<p class='stm mis'>241</p>
+<p class='stm mis'>242</p>
+<p class='stm mis'>243</p>
+<p class='stm mis'>244</p>
+<p class='stm mis'>245</p>
+<p class='stm mis'>246</p>
+<p class='stm mis'>247</p>
+<p class='stm mis'>248</p>
+<p class='stm mis'>249</p>
+<p class='stm mis'>250</p>
+<p class='stm mis'>251</p>
+<p class='stm mis'>252</p>
+<p class='stm mis'>253</p>
+<p class='stm mis'>254</p>
+<p class='stm mis'>255</p>
+<p class='stm mis'>256</p>
+<p class='stm mis'>257</p>
+<p class='stm mis'>258</p>
+<p class='stm mis'>259</p>
+<p class='stm mis'>260</p>
+<p class='stm mis'>261</p>
+<p class='stm mis'>262</p>
+<p class='stm mis'>263</p>
+<p class='stm mis'>264</p>
+<p class='stm mis'>265</p>
+<p class='stm mis'>266</p>
+<p class='stm mis'>267</p>
+<p class='stm mis'>268</p>
+<p class='stm mis'>269</p>
+<p class='pln'>270</p>
+<p class='pln'>271</p>
+<p class='pln'>272</p>
+<p class='stm mis'>273</p>
+<p class='pln'>274</p>
+<p class='stm run hide'>275</p>
+<p class='pln'>276</p>
+<p class='pln'>277</p>
+<p class='stm mis'>278</p>
+<p class='stm mis'>279</p>
+<p class='pln'>280</p>
+<p class='stm mis'>281</p>
+<p class='stm mis'>282</p>
+<p class='pln'>283</p>
+<p class='pln'>284</p>
+<p class='stm run hide'>285</p>
+<p class='pln'>286</p>
+<p class='pln'>287</p>
+<p class='stm run hide'>288</p>
+<p class='stm run hide'>289</p>
+<p class='stm run hide'>290</p>
+<p class='stm run hide'>291</p>
+<p class='stm run hide'>292</p>
+<p class='stm run hide'>293</p>
+<p class='stm run hide'>294</p>
+<p class='pln'>295</p>
+<p class='stm run hide'>296</p>
+<p class='stm run hide'>297</p>
+<p class='pln'>298</p>
+<p class='stm run hide'>299</p>
+<p class='pln'>300</p>
+<p class='stm run hide'>301</p>
+<p class='stm mis'>302</p>
+<p class='pln'>303</p>
+<p class='stm run hide'>304</p>
+<p class='stm run hide'>305</p>
+<p class='pln'>306</p>
+<p class='stm run hide'>307</p>
+<p class='stm run hide'>308</p>
+<p class='pln'>309</p>
+<p class='pln'>310</p>
+<p class='stm run hide'>311</p>
+<p class='stm run hide'>312</p>
+<p class='pln'>313</p>
+<p class='stm run hide'>314</p>
+<p class='pln'>315</p>
+<p class='pln'>316</p>
+<p class='pln'>317</p>
+<p class='stm run hide'>318</p>
+<p class='stm run hide'>319</p>
+<p class='stm run hide'>320</p>
+<p class='pln'>321</p>
+<p class='stm run hide'>322</p>
+<p class='pln'>323</p>
+<p class='pln'>324</p>
+<p class='pln'>325</p>
+<p class='pln'>326</p>
+<p class='stm run hide'>327</p>
+<p class='stm run hide'>328</p>
+<p class='stm run hide'>329</p>
+<p class='pln'>330</p>
+<p class='stm run hide'>331</p>
+<p class='pln'>332</p>
+<p class='stm mis'>333</p>
+<p class='stm mis'>334</p>
+<p class='stm run hide'>335</p>
+<p class='pln'>336</p>
+<p class='stm mis'>337</p>
+<p class='stm mis'>338</p>
+<p class='pln'>339</p>
+<p class='stm run hide'>340</p>
+<p class='stm run hide'>341</p>
+<p class='pln'>342</p>
+<p class='stm run hide'>343</p>
+<p class='pln'>344</p>
+<p class='stm run hide'>345</p>
+<p class='stm run hide'>346</p>
+<p class='pln'>347</p>
+<p class='pln'>348</p>
+<p class='stm run hide'>349</p>
+<p class='stm run hide'>350</p>
+<p class='pln'>351</p>
+<p class='pln'>352</p>
+<p class='stm run hide'>353</p>
+<p class='pln'>354</p>
+<p class='pln'>355</p>
+<p class='stm run hide'>356</p>
+<p class='stm run hide'>357</p>
+<p class='pln'>358</p>
+<p class='stm run hide'>359</p>
+<p class='stm run hide'>360</p>
+<p class='stm mis'>361</p>
+<p class='pln'>362</p>
+<p class='stm run hide'>363</p>
+<p class='stm mis'>364</p>
+<p class='pln'>365</p>
+<p class='stm run hide'>366</p>
+<p class='stm run hide'>367</p>
+<p class='stm run hide'>368</p>
+<p class='stm run hide'>369</p>
+<p class='stm run hide'>370</p>
+<p class='stm run hide'>371</p>
+<p class='pln'>372</p>
+<p class='pln'>373</p>
+<p class='stm run hide'>374</p>
+<p class='stm run hide'>375</p>
+<p class='stm run hide'>376</p>
+<p class='stm run hide'>377</p>
+<p class='stm run hide'>378</p>
+<p class='pln'>379</p>
+<p class='pln'>380</p>
+<p class='pln'>381</p>
+<p class='stm run hide'>382</p>
+<p class='stm run hide'>383</p>
+<p class='stm run hide'>384</p>
+<p class='stm run hide'>385</p>
+<p class='stm run hide'>386</p>
+<p class='pln'>387</p>
+<p class='pln'>388</p>
+<p class='stm run hide'>389</p>
+<p class='stm run hide'>390</p>
+<p class='pln'>391</p>
+<p class='pln'>392</p>
+<p class='stm run hide'>393</p>
+<p class='pln'>394</p>
+<p class='pln'>395</p>
+<p class='stm run hide'>396</p>
+<p class='stm run hide'>397</p>
+<p class='stm mis'>398</p>
+<p class='pln'>399</p>
+<p class='stm run hide'>400</p>
+<p class='stm mis'>401</p>
+<p class='pln'>402</p>
+<p class='stm run hide'>403</p>
+<p class='stm run hide'>404</p>
+<p class='stm run hide'>405</p>
+<p class='stm run hide'>406</p>
+<p class='stm run hide'>407</p>
+<p class='stm mis'>408</p>
+<p class='pln'>409</p>
+<p class='pln'>410</p>
+<p class='pln'>411</p>
+<p class='stm run hide'>412</p>
+<p class='stm run hide'>413</p>
+<p class='stm run hide'>414</p>
+<p class='pln'>415</p>
+<p class='stm run hide'>416</p>
+<p class='pln'>417</p>
+<p class='pln'>418</p>
+<p class='pln'>419</p>
+<p class='stm run hide'>420</p>
+<p class='stm run hide'>421</p>
+<p class='stm run hide'>422</p>
+<p class='stm mis'>423</p>
+<p class='pln'>424</p>
+<p class='stm run hide'>425</p>
+<p class='stm mis'>426</p>
+<p class='pln'>427</p>
+<p class='stm run hide'>428</p>
+<p class='stm run hide'>429</p>
+<p class='stm run hide'>430</p>
+<p class='pln'>431</p>
+<p class='stm run hide'>432</p>
+<p class='pln'>433</p>
+<p class='stm mis'>434</p>
+<p class='pln'>435</p>
+<p class='pln'>436</p>
+<p class='pln'>437</p>
+<p class='pln'>438</p>
+<p class='stm run hide'>439</p>
+<p class='stm run hide'>440</p>
+<p class='stm run hide'>441</p>
+<p class='stm run hide'>442</p>
+<p class='stm run hide'>443</p>
+<p class='stm run hide'>444</p>
+<p class='stm run hide'>445</p>
+<p class='stm run hide'>446</p>
+<p class='pln'>447</p>
+<p class='stm run hide'>448</p>
+<p class='pln'>449</p>
+<p class='pln'>450</p>
+<p class='stm run hide'>451</p>
+<p class='stm run hide'>452</p>
+<p class='stm mis'>453</p>
+<p class='stm mis'>454</p>
+<p class='stm mis'>455</p>
+<p class='stm mis'>456</p>
+<p class='pln'>457</p>
+<p class='pln'>458</p>
+<p class='stm mis'>459</p>
+<p class='pln'>460</p>
+<p class='pln'>461</p>
+<p class='stm mis'>462</p>
+<p class='stm mis'>463</p>
+<p class='pln'>464</p>
+<p class='pln'>465</p>
+<p class='pln'>466</p>
+<p class='stm run hide'>467</p>
+<p class='stm mis'>468</p>
+<p class='pln'>469</p>
+<p class='stm run hide'>470</p>
+<p class='stm run hide'>471</p>
+<p class='stm run hide'>472</p>
+<p class='pln'>473</p>
+<p class='stm run hide'>474</p>
+<p class='stm mis'>475</p>
+<p class='pln'>476</p>
+<p class='stm run hide'>477</p>
+<p class='stm mis'>478</p>
+<p class='stm run hide'>479</p>
+<p class='stm mis'>480</p>
+<p class='pln'>481</p>
+<p class='pln'>482</p>
+<p class='pln'>483</p>
+<p class='stm run hide'>484</p>
+<p class='pln'>485</p>
+<p class='stm run hide'>486</p>
+<p class='pln'>487</p>
+<p class='pln'>488</p>
+<p class='pln'>489</p>
+<p class='stm run hide'>490</p>
+<p class='pln'>491</p>
+<p class='stm mis'>492</p>
+<p class='stm mis'>493</p>
+<p class='stm run hide'>494</p>
+<p class='pln'>495</p>
+<p class='stm run hide'>496</p>
+<p class='pln'>497</p>
+<p class='pln'>498</p>
+<p class='pln'>499</p>
+<p class='stm run hide'>500</p>
+<p class='stm run hide'>501</p>
+<p class='stm run hide'>502</p>
+<p class='stm run hide'>503</p>
+<p class='pln'>504</p>
+<p class='stm run hide'>505</p>
+<p class='pln'>506</p>
+<p class='pln'>507</p>
+<p class='stm mis'>508</p>
+<p class='pln'>509</p>
+<p class='stm mis'>510</p>
+<p class='pln'>511</p>
+<p class='stm mis'>512</p>
+<p class='stm mis'>513</p>
+<p class='stm mis'>514</p>
+<p class='stm mis'>515</p>
+<p class='pln'>516</p>
+<p class='pln'>517</p>
+<p class='stm mis'>518</p>
+<p class='stm mis'>519</p>
+<p class='stm mis'>520</p>
+<p class='stm mis'>521</p>
+<p class='pln'>522</p>
+<p class='stm run hide'>523</p>
+<p class='stm mis'>524</p>
+<p class='stm mis'>525</p>
+<p class='pln'>526</p>
+<p class='stm run hide'>527</p>
+<p class='stm mis'>528</p>
+<p class='stm mis'>529</p>
+<p class='stm mis'>530</p>
+<p class='pln'>531</p>
+<p class='stm run hide'>532</p>
+<p class='stm mis'>533</p>
+<p class='stm mis'>534</p>
+<p class='pln'>535</p>
+<p class='stm run hide'>536</p>
+<p class='pln'>537</p>
+<p class='pln'>538</p>
+<p class='pln'>539</p>
+<p class='stm mis'>540</p>
+<p class='pln'>541</p>
+<p class='stm mis'>542</p>
+<p class='stm mis'>543</p>
+<p class='pln'>544</p>
+<p class='pln'>545</p>
+<p class='stm mis'>546</p>
+<p class='pln'>547</p>
+<p class='pln'>548</p>
+<p class='pln'>549</p>
+<p class='stm mis'>550</p>
+<p class='stm mis'>551</p>
+<p class='stm mis'>552</p>
+<p class='pln'>553</p>
+<p class='pln'>554</p>
+<p class='stm mis'>555</p>
+<p class='stm mis'>556</p>
+<p class='stm mis'>557</p>
+<p class='pln'>558</p>
+<p class='pln'>559</p>
+<p class='stm mis'>560</p>
+<p class='stm mis'>561</p>
+<p class='pln'>562</p>
+<p class='stm mis'>563</p>
+<p class='stm mis'>564</p>
+<p class='stm mis'>565</p>
+<p class='stm mis'>566</p>
+<p class='stm mis'>567</p>
+<p class='stm mis'>568</p>
+<p class='stm mis'>569</p>
+<p class='stm mis'>570</p>
+<p class='stm mis'>571</p>
+<p class='pln'>572</p>
+<p class='pln'>573</p>
+<p class='pln'>574</p>
+<p class='pln'>575</p>
+<p class='pln'>576</p>
+<p class='stm mis'>577</p>
+<p class='stm mis'>578</p>
+<p class='pln'>579</p>
+<p class='stm mis'>580</p>
+<p class='pln'>581</p>
+<p class='stm mis'>582</p>
+<p class='pln'>583</p>
+<p class='stm run hide'>584</p>
+<p class='pln'>585</p>
+<p class='pln'>586</p>
+<p class='stm mis'>587</p>
+<p class='stm mis'>588</p>
+<p class='stm mis'>589</p>
+<p class='stm mis'>590</p>
+<p class='pln'>591</p>
+<p class='stm mis'>592</p>
+<p class='stm mis'>593</p>
+<p class='stm mis'>594</p>
+<p class='pln'>595</p>
+<p class='stm mis'>596</p>
+<p class='stm mis'>597</p>
+<p class='stm mis'>598</p>
+<p class='stm mis'>599</p>
+<p class='pln'>600</p>
+<p class='stm run hide'>601</p>
+<p class='pln'>602</p>
+<p class='pln'>603</p>
+<p class='stm mis'>604</p>
+<p class='stm mis'>605</p>
+<p class='pln'>606</p>
+<p class='stm mis'>607</p>
+<p class='stm mis'>608</p>
+<p class='pln'>609</p>
+<p class='stm mis'>610</p>
+<p class='stm mis'>611</p>
+<p class='stm mis'>612</p>
+<p class='stm mis'>613</p>
+<p class='pln'>614</p>
+<p class='stm mis'>615</p>
+<p class='pln'>616</p>
+<p class='stm mis'>617</p>
+<p class='pln'>618</p>
+<p class='stm run hide'>619</p>
+<p class='pln'>620</p>
+<p class='pln'>621</p>
+<p class='pln'>622</p>
+<p class='pln'>623</p>
+<p class='stm mis'>624</p>
+<p class='pln'>625</p>
+<p class='pln'>626</p>
+<p class='stm mis'>627</p>
+<p class='stm mis'>628</p>
+<p class='stm mis'>629</p>
+<p class='pln'>630</p>
+<p class='stm mis'>631</p>
+<p class='stm mis'>632</p>
+<p class='pln'>633</p>
+<p class='stm mis'>634</p>
+<p class='stm mis'>635</p>
+<p class='stm mis'>636</p>
+<p class='pln'>637</p>
+<p class='stm mis'>638</p>
+<p class='stm mis'>639</p>
+<p class='stm mis'>640</p>
+<p class='pln'>641</p>
+<p class='stm mis'>642</p>
+<p class='pln'>643</p>
+<p class='stm run hide'>644</p>
+<p class='pln'>645</p>
+<p class='pln'>646</p>
+<p class='pln'>647</p>
+<p class='stm mis'>648</p>
+<p class='stm mis'>649</p>
+<p class='stm mis'>650</p>
+<p class='stm mis'>651</p>
+<p class='stm mis'>652</p>
+<p class='stm mis'>653</p>
+<p class='stm mis'>654</p>
+<p class='stm mis'>655</p>
+<p class='stm mis'>656</p>
+<p class='stm mis'>657</p>
+<p class='stm mis'>658</p>
+<p class='stm mis'>659</p>
+<p class='stm mis'>660</p>
+<p class='stm mis'>661</p>
+<p class='stm mis'>662</p>
+<p class='stm mis'>663</p>
+<p class='pln'>664</p>
+<p class='pln'>665</p>
+<p class='pln'>666</p>
+<p class='pln'>667</p>
+<p class='pln'>668</p>
+<p class='pln'>669</p>
+<p class='pln'>670</p>
+<p class='pln'>671</p>
+<p class='pln'>672</p>
+<p class='pln'>673</p>
+<p class='pln'>674</p>
+<p class='pln'>675</p>
+<p class='pln'>676</p>
+<p class='pln'>677</p>
+<p class='pln'>678</p>
+<p class='pln'>679</p>
+<p class='pln'>680</p>
+<p class='pln'>681</p>
+<p class='pln'>682</p>
+<p class='pln'>683</p>
+<p class='pln'>684</p>
+<p class='pln'>685</p>
+<p class='pln'>686</p>
+<p class='pln'>687</p>
+<p class='pln'>688</p>
+<p class='pln'>689</p>
+<p class='pln'>690</p>
+<p class='pln'>691</p>
+<p class='pln'>692</p>
+<p class='pln'>693</p>
+<p class='pln'>694</p>
+<p class='pln'>695</p>
+<p class='pln'>696</p>
+<p class='pln'>697</p>
+<p class='pln'>698</p>
+<p class='pln'>699</p>
+<p class='pln'>700</p>
+<p class='pln'>701</p>
+<p class='pln'>702</p>
+<p class='pln'>703</p>
+<p class='pln'>704</p>
+<p class='pln'>705</p>
+<p class='pln'>706</p>
+<p class='pln'>707</p>
+<p class='pln'>708</p>
+<p class='pln'>709</p>
+
+</td>
+<td class='text' valign='top'>
+<p class='pln'>&quot;&quot;&quot; Cog code generation tool.</p>
+<p class='pln'>&nbsp; &nbsp; http://nedbatchelder.com/code/cog</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; Copyright 2004-2009, Ned Batchelder.</p>
+<p class='pln'>&quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>import copy, getopt, imp, os, re, shlex, string, sys, traceback</p>
+<p class='stm run hide'>from cStringIO import StringIO</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'># The recommended way to compute md5&#39;s changed in Python 2.5</p>
+<p class='stm run hide'>try:</p>
+<p class='stm run hide'>&nbsp; &nbsp; import hashlib</p>
+<p class='stm run hide'>&nbsp; &nbsp; hash_factory = hashlib.md5</p>
+<p class='stm mis'>except ImportError:</p>
+<p class='stm mis'>&nbsp; &nbsp; import md5</p>
+<p class='stm mis'>&nbsp; &nbsp; hash_factory = md5.new</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>__all__ = [&#39;Cog&#39;, &#39;CogUsageError&#39;]</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>__version__ = &#39;2.2&#39;&nbsp; &nbsp; &nbsp;&nbsp; # History at the end of the file.</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>usage = &quot;&quot;&quot;\</p>
+<p class='pln'>cog - generate code with inlined Python code.</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>cog [OPTIONS] [INFILE | @FILELIST] ...</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>INFILE is the name of an input file.</p>
+<p class='pln'>FILELIST is the name of a text file containing file names or</p>
+<p class='pln'>&nbsp; &nbsp; other @FILELISTs.</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>OPTIONS:</p>
+<p class='pln'>&nbsp; &nbsp; -c&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Checksum the output to protect it against accidental change.</p>
+<p class='pln'>&nbsp; &nbsp; -d&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Delete the generator code from the output file.</p>
+<p class='pln'>&nbsp; &nbsp; -D name=val Define a global string available to your generator code.</p>
+<p class='pln'>&nbsp; &nbsp; -e&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Warn if a file has no cog code in it.</p>
+<p class='pln'>&nbsp; &nbsp; -I PATH&nbsp; &nbsp;&nbsp; Add PATH to the list of directories for data files and modules.</p>
+<p class='pln'>&nbsp; &nbsp; -o OUTNAME&nbsp; Write the output to OUTNAME.</p>
+<p class='pln'>&nbsp; &nbsp; -r&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Replace the input file with the output.</p>
+<p class='pln'>&nbsp; &nbsp; -s STRING&nbsp;&nbsp; Suffix all generated output lines with STRING.</p>
+<p class='pln'>&nbsp; &nbsp; -U&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Write the output with Unix newlines (only LF line-endings).</p>
+<p class='pln'>&nbsp; &nbsp; -w CMD&nbsp; &nbsp; &nbsp; Use CMD if the output file needs to be made writable.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; A %s in the CMD will be filled with the filename.</p>
+<p class='pln'>&nbsp; &nbsp; -x&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Excise all the generated output without running the generators.</p>
+<p class='pln'>&nbsp; &nbsp; -z&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; The [[[end]]] marker can be omitted, and is assumed at eof.</p>
+<p class='pln'>&nbsp; &nbsp; -v&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Print the version of cog and exit.</p>
+<p class='pln'>&nbsp; &nbsp; -h&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Print this help.</p>
+<p class='pln'>&quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'># Other package modules</p>
+<p class='stm run hide'>from whiteutils import *</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>class CogError(Exception):</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot; Any exception raised by Cog.</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def __init__(self, msg, file=&#39;&#39;, line=0):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; if file:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Exception.__init__(self, &quot;%s(%d): %s&quot; % (file, line, msg))</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; else:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Exception.__init__(self, msg)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>class CogUsageError(CogError):</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot; An error in usage of command-line arguments in cog.</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='exc'>&nbsp; &nbsp; pass&nbsp; &nbsp; #pragma: no cover</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>class CogInternalError(CogError):</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot; An error in the coding of Cog. Should never happen.</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='exc'>&nbsp; &nbsp; pass&nbsp; &nbsp; #pragma: no cover</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>class CogGeneratedError(CogError):</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot; An error raised by a user&#39;s cog generator.</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='exc'>&nbsp; &nbsp; pass&nbsp; &nbsp; #pragma: no cover</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>class Redirectable:</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot; An object with its own stdout and stderr files.</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def __init__(self):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.stdout = sys.stdout</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.stderr = sys.stderr</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def setOutput(self, stdout=None, stderr=None):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot; Assign new files for standard out and/or standard error.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; if stdout:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.stdout = stdout</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; if stderr:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.stderr = stderr</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>class CogGenerator(Redirectable):</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot; A generator pulled from a source file.</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def __init__(self):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; Redirectable.__init__(self)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.markers = []</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.lines = []</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def parseMarker(self, l):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.markers.append(l)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def parseLine(self, l):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.lines.append(l.strip(&#39;\n&#39;))</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def getCode(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot; Extract the executable Python code from the generator.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # If the markers and lines all have the same prefix</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # (end-of-line comment chars, for example),</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # then remove it from all the lines.</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; prefIn = commonPrefix(self.markers + self.lines)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; if prefIn:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.markers = [ l.replace(prefIn, &#39;&#39;, 1) for l in self.markers ]</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.lines = [ l.replace(prefIn, &#39;&#39;, 1) for l in self.lines ]</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; return reindentBlock(self.lines, &#39;&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def evaluate(self, cog, globals, fname=&#39;cog generator&#39;):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # figure out the right whitespace prefix for the output</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; prefOut = whitePrefix(self.markers)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; intext = self.getCode()</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; if not intext:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return &#39;&#39;</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # In Python 2.2, the last line has to end in a newline.</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; intext = &quot;import cog\n&quot; + intext + &quot;\n&quot;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; code = compile(intext, str(fname), &#39;exec&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Make sure the &quot;cog&quot; module has our state.</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; cog.cogmodule.msg = self.msg</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; cog.cogmodule.out = self.out</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; cog.cogmodule.outl = self.outl</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; cog.cogmodule.error = self.error</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.outstring = &#39;&#39;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; eval(code, globals)</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # We need to make sure that the last line in the output</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # ends with a newline, or it will be joined to the</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # end-output line, ruining cog&#39;s idempotency.</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; if self.outstring and self.outstring[-1] != &#39;\n&#39;:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.outstring += &#39;\n&#39;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; return reindentBlock(self.outstring, prefOut)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def msg(self, s):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; print &gt;&gt;self.stdout, &quot;Message: &quot;+s</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def out(self, sOut=&#39;&#39;, dedent=False, trimblanklines=False):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot; The cog.out function.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; if trimblanklines and (&#39;\n&#39; in sOut):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lines = sOut.split(&#39;\n&#39;)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if lines[0].strip() == &#39;&#39;:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; del lines[0]</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if lines and lines[-1].strip() == &#39;&#39;:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; del lines[-1]</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sOut = &#39;\n&#39;.join(lines)+&#39;\n&#39;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; if dedent:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sOut = reindentBlock(sOut)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.outstring += sOut</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def outl(self, sOut=&#39;&#39;, **kw):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot; The cog.outl function.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.out(sOut, **kw)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.out(&#39;\n&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def error(self, msg=&#39;Error raised by cog generator.&#39;):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot; The cog.error function.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Instead of raising standard python errors, cog generators can use</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this function.&nbsp; It will display the error without a scary Python</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; traceback.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; raise CogGeneratedError(msg)</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>class NumberedFileReader:</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot; A decorator for files that counts the readline()&#39;s called.</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def __init__(self, f):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.f = f</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.n = 0</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def readline(self):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; l = self.f.readline()</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; if l:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.n += 1</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; return l</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def linenumber(self):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; return self.n</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>class CogOptions:</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot; Options for a run of cog.</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def __init__(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Defaults for argument values.</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.args = []</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.includePath = []</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.defines = {}</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.bShowVersion = False</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.sMakeWritableCmd = None</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.bReplace = False</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.bNoGenerate = False</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.sOutputName = None</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.bWarnEmpty = False</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.bHashOutput = False</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.bDeleteCode = False</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.bEofCanBeEnd = False</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.sSuffix = None</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.bNewlines = False</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def __cmp__(self, other):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot; Comparison operator for tests to use.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; return self.__dict__.__cmp__(other.__dict__)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def clone(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot; Make a clone of these options, for further refinement.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; return copy.deepcopy(self)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def addToIncludePath(self, dirs):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot; Add directories to the include path.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; dirs = dirs.split(os.pathsep)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.includePath.extend(dirs)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def parseArgs(self, argv):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Parse the command line arguments.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; try:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; opts, self.args = getopt.getopt(argv, &#39;cdD:eI:o:rs:Uvw:xz&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; except getopt.error, msg:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raise CogUsageError(msg)</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Handle the command line arguments.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; for o, a in opts:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if o == &#39;-c&#39;:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.bHashOutput = True</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; elif o == &#39;-d&#39;:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.bDeleteCode = True</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; elif o == &#39;-D&#39;:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if a.count(&#39;=&#39;) &lt; 1:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raise CogUsageError(&quot;-D takes a name=value argument&quot;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name, value = a.split(&#39;=&#39;, 1)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.defines[name] = value</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; elif o == &#39;-e&#39;:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.bWarnEmpty = True</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; elif o == &#39;-I&#39;:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.addToIncludePath(a)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; elif o == &#39;-o&#39;:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.sOutputName = a</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; elif o == &#39;-r&#39;:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.bReplace = True</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; elif o == &#39;-s&#39;:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.sSuffix = a</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; elif o == &#39;-U&#39;:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.bNewlines = True</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; elif o == &#39;-v&#39;:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.bShowVersion = True</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; elif o == &#39;-w&#39;:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.sMakeWritableCmd = a</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; elif o == &#39;-x&#39;:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.bNoGenerate = True</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; elif o == &#39;-z&#39;:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.bEofCanBeEnd = True</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Since getopt.getopt is given a list of possible flags,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # this is an internal error.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raise CogInternalError(&quot;Don&#39;t understand argument %s&quot; % o)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def validate(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot; Does nothing if everything is OK, raises CogError&#39;s if it&#39;s not.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; if self.bReplace and self.bDeleteCode:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raise CogUsageError(&quot;Can&#39;t use -d with -r (or you would delete all your source!)&quot;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; if self.bReplace and self.sOutputName:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raise CogUsageError(&quot;Can&#39;t use -o with -r (they are opposites)&quot;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>class Cog(Redirectable):</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot; The Cog engine.</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def __init__(self):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; Redirectable.__init__(self)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.sBeginSpec = &#39;[[[cog&#39;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.sEndSpec = &#39;]]]&#39;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.sEndOutput = &#39;[[[end]]]&#39;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.reEndOutput = re.compile(r&#39;\[\[\[end]]](?P&lt;hashsect&gt; *\(checksum: (?P&lt;hash&gt;[a-f0-9]+)\))&#39;)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.sEndFormat = &#39;[[[end]]] (checksum: %s)&#39;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.options = CogOptions()</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.sOutputMode = &#39;w&#39;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.installCogModule()</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def showWarning(self, msg):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; print &gt;&gt;self.stdout, &quot;Warning:&quot;, msg</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def isBeginSpecLine(self, s):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; return string.find(s, self.sBeginSpec) &gt;= 0</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def isEndSpecLine(self, s):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; return string.find(s, self.sEndSpec) &gt;= 0 and \</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; not self.isEndOutputLine(s)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def isEndOutputLine(self, s):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; return string.find(s, self.sEndOutput) &gt;= 0</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def installCogModule(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot; Magic mumbo-jumbo so that imported Python modules</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; can say &quot;import cog&quot; and get our state.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.cogmodule = imp.new_module(&#39;cog&#39;)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.cogmodule.path = []</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; sys.modules[&#39;cog&#39;] = self.cogmodule</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def processFile(self, fIn, fOut, fname=None, globals=None):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot; Process an input file object to an output file object.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fIn and fOut can be file objects, or file names.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; sFileIn = fname or &#39;&#39;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; sFileOut = fname or &#39;&#39;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; fInToClose = fOutToClose = None</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Convert filenames to files.</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; if isinstance(fIn, basestring):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Open the input file.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sFileIn = fIn</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fIn = fInToClose = open(fIn, &#39;r&#39;)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; if isinstance(fOut, basestring):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Open the output file.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sFileOut = fOut</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fOut = fOutToClose = open(fOut, self.sOutputMode)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; try:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fIn = NumberedFileReader(fIn)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bSawCog = False</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.cogmodule.inFile = sFileIn</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.cogmodule.outFile = sFileOut</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # The globals dict we&#39;ll use for this file.</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if globals is None:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; globals = {}</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # If there are any global defines, put them in the globals.</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; globals.update(self.options.defines)</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # loop over generator chunks</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; l = fIn.readline()</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; while l:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Find the next spec begin</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; while l and not self.isBeginSpecLine(l):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if self.isEndSpecLine(l):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raise CogError(&quot;Unexpected &#39;%s&#39;&quot; % self.sEndSpec,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; file=sFileIn, line=fIn.linenumber())</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if self.isEndOutputLine(l):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raise CogError(&quot;Unexpected &#39;%s&#39;&quot; % self.sEndOutput,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; file=sFileIn, line=fIn.linenumber())</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fOut.write(l)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; l = fIn.readline()</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if not l:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if not self.options.bDeleteCode:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fOut.write(l)</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # l is the begin spec</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gen = CogGenerator()</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gen.setOutput(stdout=self.stdout)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gen.parseMarker(l)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; firstLineNum = fIn.linenumber()</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.cogmodule.firstLineNum = firstLineNum</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # If the spec begin is also a spec end, then process the single</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # line of code inside.</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if self.isEndSpecLine(l):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; beg = string.find(l, self.sBeginSpec)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end = string.find(l, self.sEndSpec)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if beg &gt; end:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raise CogError(&quot;Cog code markers inverted&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; file=sFileIn, line=firstLineNum)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sCode = l[beg+len(self.sBeginSpec):end].strip()</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gen.parseLine(sCode)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Deal with an ordinary code block.</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; l = fIn.readline()</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Get all the lines in the spec</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; while l and not self.isEndSpecLine(l):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if self.isBeginSpecLine(l):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raise CogError(&quot;Unexpected &#39;%s&#39;&quot; % self.sBeginSpec,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; file=sFileIn, line=fIn.linenumber())</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if self.isEndOutputLine(l):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raise CogError(&quot;Unexpected &#39;%s&#39;&quot; % self.sEndOutput,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; file=sFileIn, line=fIn.linenumber())</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if not self.options.bDeleteCode:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fOut.write(l)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gen.parseLine(l)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; l = fIn.readline()</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if not l:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raise CogError(</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;Cog block begun but never ended.&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; file=sFileIn, line=firstLineNum)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if not self.options.bDeleteCode:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fOut.write(l)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gen.parseMarker(l)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; l = fIn.readline()</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Eat all the lines in the output section.&nbsp; While reading past</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # them, compute the md5 hash of the old output.</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hasher = hash_factory()</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; while l and not self.isEndOutputLine(l):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if self.isBeginSpecLine(l):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raise CogError(&quot;Unexpected &#39;%s&#39;&quot; % self.sBeginSpec,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; file=sFileIn, line=fIn.linenumber())</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if self.isEndSpecLine(l):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raise CogError(&quot;Unexpected &#39;%s&#39;&quot; % self.sEndSpec,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; file=sFileIn, line=fIn.linenumber())</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hasher.update(l)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; l = fIn.readline()</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; curHash = hasher.hexdigest()</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if not l and not self.options.bEofCanBeEnd:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # We reached end of file before we found the end output line.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raise CogError(&quot;Missing &#39;%s&#39; before end of file.&quot; % self.sEndOutput,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; file=sFileIn, line=fIn.linenumber())</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Write the output of the spec to be the new output if we&#39;re</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # supposed to generate code.</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hasher = hash_factory()</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if not self.options.bNoGenerate:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sFile = &quot;%s+%d&quot; % (sFileIn, firstLineNum)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sGen = gen.evaluate(cog=self, globals=globals, fname=sFile)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sGen = self.suffixLines(sGen)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hasher.update(sGen)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fOut.write(sGen)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newHash = hasher.hexdigest()</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bSawCog = True</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Write the ending output line</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hashMatch = self.reEndOutput.search(l)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if self.options.bHashOutput:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if hashMatch:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; oldHash = hashMatch.groupdict()[&#39;hash&#39;]</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if oldHash != curHash:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raise CogError(&quot;Output has been edited! Delete old checksum to unprotect.&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; file=sFileIn, line=fIn.linenumber())</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Create a new end line with the correct hash.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; endpieces = l.split(hashMatch.group(0), 1)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # There was no old hash, but we want a new hash.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; endpieces = l.split(self.sEndOutput, 1)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; l = (self.sEndFormat % newHash).join(endpieces)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # We don&#39;t want hashes output, so if there was one, get rid of</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # it.</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if hashMatch:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; l = l.replace(hashMatch.groupdict()[&#39;hashsect&#39;], &#39;&#39;, 1)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if not self.options.bDeleteCode:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fOut.write(l)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; l = fIn.readline()</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if not bSawCog and self.options.bWarnEmpty:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.showWarning(&quot;no cog code found in %s&quot; % sFileIn)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; finally:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if fInToClose:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fInToClose.close()</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if fOutToClose:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fOutToClose.close()</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; # A regex for non-empty lines, used by suffixLines.</p>
+<p class='stm run hide'>&nbsp; &nbsp; reNonEmptyLines = re.compile(&quot;^\s*\S+.*$&quot;, re.MULTILINE)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def suffixLines(self, text):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot; Add suffixes to the lines in text, if our options desire it.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; text is many lines, as a single string.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; if self.options.sSuffix:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Find all non-blank lines, and add the suffix to the end.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; repl = r&quot;\g&lt;0&gt;&quot; + self.options.sSuffix.replace(&#39;\\&#39;, &#39;\\\\&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; text = self.reNonEmptyLines.sub(repl, text)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; return text</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def processString(self, sInput, fname=None):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot; Process sInput as the text to cog.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Return the cogged output as a string.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; fOld = StringIO(sInput)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; fNew = StringIO()</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.processFile(fOld, fNew, fname=fname)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; return fNew.getvalue()</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def replaceFile(self, sOldPath, sNewText):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot; Replace file sOldPath with the contents sNewText</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; if not os.access(sOldPath, os.W_OK):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Need to ensure we can write.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if self.options.sMakeWritableCmd:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Use an external command to make the file writable.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cmd = self.options.sMakeWritableCmd.replace(&#39;%s&#39;, sOldPath)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.stdout.write(os.popen(cmd).read())</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if not os.access(sOldPath, os.W_OK):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raise CogError(&quot;Couldn&#39;t make %s writable&quot; % sOldPath)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Can&#39;t write!</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raise CogError(&quot;Can&#39;t overwrite %s&quot; % sOldPath)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; f = open(sOldPath, self.sOutputMode)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; f.write(sNewText)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; f.close()</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def saveIncludePath(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.savedInclude = self.options.includePath[:]</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.savedSysPath = sys.path[:]</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def restoreIncludePath(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.options.includePath = self.savedInclude</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cogmodule.path = self.options.includePath</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; sys.path = self.savedSysPath</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def addToIncludePath(self, includePath):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cogmodule.path.extend(includePath)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; sys.path.extend(includePath)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def processOneFile(self, sFile):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot; Process one filename through cog.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.saveIncludePath()</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; try:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.addToIncludePath(self.options.includePath)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Since we know where the input file came from,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # push its directory onto the include path.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.addToIncludePath([os.path.dirname(sFile)])</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Set the file output mode based on whether we want \n or native</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # line endings.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.sOutputMode = &#39;w&#39;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if self.options.bNewlines:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.sOutputMode = &#39;wb&#39;</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # How we process the file depends on where the output is going.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if self.options.sOutputName:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.processFile(sFile, self.options.sOutputName, sFile)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; elif self.options.bReplace:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # We want to replace the cog file with the output,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # but only if they differ.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print &gt;&gt;self.stdout, &quot;Cogging %s&quot; % sFile,</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bNeedNewline = True</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fOldFile = open(sFile)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sOldText = fOldFile.read()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fOldFile.close()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sNewText = self.processString(sOldText, fname=sFile)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if sOldText != sNewText:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print &gt;&gt;self.stdout, &quot;&nbsp; (changed)&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bNeedNewline = False</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.replaceFile(sFile, sNewText)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; finally:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # The try-finally block is so we can print a partial line</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # with the name of the file, and print (changed) on the</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # same line, but also make sure to break the line before</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # any traceback.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if bNeedNewline:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print &gt;&gt;self.stdout</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.processFile(sFile, self.stdout, sFile)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; finally:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.restoreIncludePath()</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def processFileList(self, sFileList):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot; Process the files in a file list.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; flist = open(sFileList)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; lines = flist.readlines()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; flist.close()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; for l in lines:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Use shlex to parse the line like a shell.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lex = shlex.shlex(l, posix=True)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lex.whitespace_split = True</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lex.commenters = &#39;#&#39;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # No escapes, so that backslash can be part of the path</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lex.escape = &#39;&#39;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; args = list(lex)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if args:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.processArguments(args)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def processArguments(self, args):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot; Process one command-line.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; saved_options = self.options</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.options = self.options.clone()</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.options.parseArgs(args[1:])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.options.validate()</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; if args[0][0] == &#39;@&#39;:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if self.options.sOutputName:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raise CogUsageError(&quot;Can&#39;t use -o with @file&quot;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.processFileList(args[0][1:])</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; else:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.processOneFile(args[0])</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.options = saved_options</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def callableMain(self, argv):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot; All of command-line cog, but in a callable form.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is used by main.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; argv is the equivalent of sys.argv.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; argv0 = argv.pop(0)</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Provide help if asked for anywhere in the command line.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; if &#39;-?&#39; in argv or &#39;-h&#39; in argv:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print &gt;&gt;self.stderr, usage,</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.options.parseArgs(argv)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.options.validate()</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; if self.options.bShowVersion:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print &gt;&gt;self.stdout, &quot;Cog version %s&quot; % __version__</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; if self.options.args:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for a in self.options.args:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.processArguments([a])</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; else:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raise CogUsageError(&quot;No files to process&quot;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def main(self, argv):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot; Handle the command-line execution for cog.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; try:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.callableMain(argv)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 0</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; except CogUsageError, err:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print &gt;&gt;self.stderr, err</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print &gt;&gt;self.stderr, &quot;(for help use -?)&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 2</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; except CogGeneratedError, err:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print &gt;&gt;self.stderr, &quot;Error: %s&quot; % err</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 3</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; except CogError, err:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print &gt;&gt;self.stderr, err</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 1</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; except:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; traceback.print_exc(None, self.stderr)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 1</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'># History:</p>
+<p class='pln'># 20040210: First public version.</p>
+<p class='pln'># 20040220: Text preceding the start and end marker are removed from Python lines.</p>
+<p class='pln'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; -v option on the command line shows the version.</p>
+<p class='pln'># 20040311: Make sure the last line of output is properly ended with a newline.</p>
+<p class='pln'># 20040605: Fixed some blank line handling in cog.</p>
+<p class='pln'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Fixed problems with assigning to xml elements in handyxml.</p>
+<p class='pln'># 20040621: Changed all line-ends to LF from CRLF.</p>
+<p class='pln'># 20041002: Refactor some option handling to simplify unittesting the options.</p>
+<p class='pln'># 20041118: cog.out and cog.outl have optional string arguments.</p>
+<p class='pln'># 20041119: File names weren&#39;t being properly passed around for warnings, etc.</p>
+<p class='pln'># 20041122: Added cog.firstLineNum: a property with the line number of the [[[cog line.</p>
+<p class='pln'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Added cog.inFile and cog.outFile: the names of the input and output file.</p>
+<p class='pln'># 20041218: Single-line cog generators, with start marker and end marker on</p>
+<p class='pln'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; the same line.</p>
+<p class='pln'># 20041230: Keep a single globals dict for all the code fragments in a single</p>
+<p class='pln'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; file so they can share state.</p>
+<p class='pln'># 20050206: Added the -x switch to remove all generated output.</p>
+<p class='pln'># 20050218: Now code can be on the marker lines as well.</p>
+<p class='pln'># 20050219: Added -c switch to checksum the output so that edits can be</p>
+<p class='pln'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; detected before they are obliterated.</p>
+<p class='pln'># 20050521: Added cog.error, contributed by Alexander Belchenko.</p>
+<p class='pln'># 20050720: Added code deletion and settable globals contributed by Blake Winton.</p>
+<p class='pln'># 20050724: Many tweaks to improve code coverage.</p>
+<p class='pln'># 20050726: Error messages are now printed with no traceback.</p>
+<p class='pln'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Code can no longer appear on the marker lines,</p>
+<p class='pln'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; except for single-line style.</p>
+<p class='pln'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; -z allows omission of the [[[end]]] marker, and it will be assumed</p>
+<p class='pln'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; at the end of the file.</p>
+<p class='pln'># 20050729: Refactor option parsing into a separate class, in preparation for</p>
+<p class='pln'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; future features.</p>
+<p class='pln'># 20050805: The cogmodule.path wasn&#39;t being properly maintained.</p>
+<p class='pln'># 20050808: Added the -D option to define a global value.</p>
+<p class='pln'># 20050810: The %s in the -w command is dealt with more robustly.</p>
+<p class='pln'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Added the -s option to suffix output lines with a marker.</p>
+<p class='pln'># 20050817: Now @files can have arguments on each line to change the cog&#39;s</p>
+<p class='pln'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; behavior for that line.</p>
+<p class='pln'># 20051006: Version 2.0</p>
+<p class='pln'># 20080521: -U options lets you create Unix newlines on Windows.&nbsp; Thanks,</p>
+<p class='pln'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Alexander Belchenko.</p>
+<p class='pln'># 20080522: It&#39;s now ok to have -d with output to stdout, and now we validate</p>
+<p class='pln'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; the args after each line of an @file.</p>
+<p class='pln'># 20090520: Use hashlib where it&#39;s available, to avoid a warning.</p>
+<p class='pln'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Use the builtin compile() instead of compiler, for Jython.</p>
+<p class='pln'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Explicitly close files we opened, Jython likes this.</p>
+
+</td>
+</tr>
+</table>
+</div>
+
+</body>
+</html>
diff --git a/doc/sample_html/cogapp_makefiles.html b/doc/sample_html/cogapp_makefiles.html
new file mode 100644
index 00000000..d1c7e56e
--- /dev/null
+++ b/doc/sample_html/cogapp_makefiles.html
@@ -0,0 +1,178 @@
+<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+<title>Coverage for cogapp\makefiles</title>
+<link rel='stylesheet' href='style.css' type='text/css'>
+<script src='jquery-1.3.2.min.js'></script>
+<script>
+function toggle_lines(btn, cls) {
+ var btn = $(btn);
+ if (btn.hasClass("hide")) {
+ $("#source ."+cls).removeClass("hide");
+ btn.removeClass("hide");
+ }
+ else {
+ $("#source ."+cls).addClass("hide");
+ btn.addClass("hide");
+ }
+}
+</script>
+</head>
+<body>
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage for <b>cogapp\makefiles</b> :
+ <span class='pc_cov'>21%</span>
+ </h1>
+ <h2 class='stats'>
+ 29 statements
+ <span class='run hide' onclick='toggle_lines(this, "run")'>6 run</span>
+ <span class='exc' onclick='toggle_lines(this, "exc")'>3 excluded</span>
+ <span class='mis' onclick='toggle_lines(this, "mis")'>23 missing</span>
+ </h2>
+ </div>
+</div>
+
+<div id='source'>
+<table cellspacing='0' cellpadding='0'>
+<tr>
+<td class='linenos' valign='top'>
+<p class='pln'>1</p>
+<p class='pln'>2</p>
+<p class='pln'>3</p>
+<p class='pln'>4</p>
+<p class='pln'>5</p>
+<p class='pln'>6</p>
+<p class='stm run hide'>7</p>
+<p class='stm run hide'>8</p>
+<p class='pln'>9</p>
+<p class='stm run hide'>10</p>
+<p class='stm run hide'>11</p>
+<p class='pln'>12</p>
+<p class='stm run hide'>13</p>
+<p class='pln'>14</p>
+<p class='pln'>15</p>
+<p class='stm mis'>16</p>
+<p class='stm mis'>17</p>
+<p class='stm mis'>18</p>
+<p class='stm mis'>19</p>
+<p class='stm mis'>20</p>
+<p class='stm mis'>21</p>
+<p class='stm mis'>22</p>
+<p class='stm mis'>23</p>
+<p class='stm mis'>24</p>
+<p class='stm mis'>25</p>
+<p class='stm mis'>26</p>
+<p class='stm mis'>27</p>
+<p class='pln'>28</p>
+<p class='stm mis'>29</p>
+<p class='stm mis'>30</p>
+<p class='stm mis'>31</p>
+<p class='pln'>32</p>
+<p class='stm run hide'>33</p>
+<p class='pln'>34</p>
+<p class='pln'>35</p>
+<p class='pln'>36</p>
+<p class='stm mis'>37</p>
+<p class='stm mis'>38</p>
+<p class='stm mis'>39</p>
+<p class='stm mis'>40</p>
+<p class='stm mis'>41</p>
+<p class='pln'>42</p>
+<p class='stm mis'>43</p>
+<p class='stm mis'>44</p>
+<p class='stm mis'>45</p>
+<p class='pln'>46</p>
+<p class='exc'>47</p>
+<p class='pln'>48</p>
+<p class='exc'>49</p>
+<p class='pln'>50</p>
+<p class='pln'>51</p>
+<p class='pln'>52</p>
+<p class='pln'>53</p>
+<p class='pln'>54</p>
+<p class='pln'>55</p>
+<p class='pln'>56</p>
+<p class='pln'>57</p>
+<p class='pln'>58</p>
+<p class='pln'>59</p>
+<p class='pln'>60</p>
+<p class='pln'>61</p>
+<p class='pln'>62</p>
+<p class='pln'>63</p>
+<p class='exc'>64</p>
+
+</td>
+<td class='text' valign='top'>
+<p class='pln'>&quot;&quot;&quot; Dictionary-to-filetree functions, to create test files for testing.</p>
+<p class='pln'>&nbsp; &nbsp; http://nedbatchelder.com/code/cog</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; Copyright 2004-2009, Ned Batchelder.</p>
+<p class='pln'>&quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>import path&nbsp; &nbsp;&nbsp; # Non-standard, from http://www.jorendorff.com/articles/python/path</p>
+<p class='stm run hide'>from whiteutils import reindentBlock</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>__version__ = &#39;1.0.20040126&#39;</p>
+<p class='stm run hide'>__all__ = [&#39;makeFiles&#39;, &#39;removeFiles&#39;]</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>def makeFiles(d, basedir=&#39;.&#39;, raw=False):</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot; Create files from the dictionary d, in the directory named by dirpath.</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; dirpath = path.path(basedir)</p>
+<p class='stm mis'>&nbsp; &nbsp; for name, contents in d.items():</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; child = dirpath / name</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; if isinstance(contents, basestring):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mode = &#39;w&#39;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if raw:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mode = &#39;wb&#39;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; f = open(child, mode)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if not raw:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; contents = reindentBlock(contents)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; f.write(contents)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; f.close()</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; else:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if not child.exists():</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; child.mkdir()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; makeFiles(contents, child, raw=raw)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>def removeFiles(d, basedir=&#39;.&#39;):</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot; Remove the files created by makeFiles.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; Directories are removed if they are empty.</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; dirpath = path.path(basedir)</p>
+<p class='stm mis'>&nbsp; &nbsp; for name, contents in d.items():</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; child = dirpath / name</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; if isinstance(contents, basestring):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; child.remove()</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; else:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; removeFiles(contents, child)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if not child.files() and not child.dirs():</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; child.rmdir()</p>
+<p class='pln'>&nbsp;</p>
+<p class='exc'>if __name__ == &#39;__main__&#39;:&nbsp; &nbsp; &nbsp; #pragma: no cover</p>
+<p class='pln'>&nbsp; &nbsp; # Try it a little.</p>
+<p class='exc'>&nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &#39;test_makefiles&#39;: {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;hey.txt&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is hey.txt.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; It&#39;s very simple.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;subdir&#39;: {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;fooey&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Fooey</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Kablooey</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Ew.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp; &nbsp; }</p>
+<p class='exc'>&nbsp; &nbsp; makeFiles(d)</p>
+
+</td>
+</tr>
+</table>
+</div>
+
+</body>
+</html>
diff --git a/doc/sample_html/cogapp_test_cogapp.html b/doc/sample_html/cogapp_test_cogapp.html
new file mode 100644
index 00000000..2f19e051
--- /dev/null
+++ b/doc/sample_html/cogapp_test_cogapp.html
@@ -0,0 +1,3970 @@
+<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+<title>Coverage for cogapp\test_cogapp</title>
+<link rel='stylesheet' href='style.css' type='text/css'>
+<script src='jquery-1.3.2.min.js'></script>
+<script>
+function toggle_lines(btn, cls) {
+ var btn = $(btn);
+ if (btn.hasClass("hide")) {
+ $("#source ."+cls).removeClass("hide");
+ btn.removeClass("hide");
+ }
+ else {
+ $("#source ."+cls).addClass("hide");
+ btn.addClass("hide");
+ }
+}
+</script>
+</head>
+<body>
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage for <b>cogapp\test_cogapp</b> :
+ <span class='pc_cov'>33%</span>
+ </h1>
+ <h2 class='stats'>
+ 587 statements
+ <span class='run hide' onclick='toggle_lines(this, "run")'>195 run</span>
+ <span class='exc' onclick='toggle_lines(this, "exc")'>17 excluded</span>
+ <span class='mis' onclick='toggle_lines(this, "mis")'>392 missing</span>
+ </h2>
+ </div>
+</div>
+
+<div id='source'>
+<table cellspacing='0' cellpadding='0'>
+<tr>
+<td class='linenos' valign='top'>
+<p class='pln'>1</p>
+<p class='pln'>2</p>
+<p class='pln'>3</p>
+<p class='pln'>4</p>
+<p class='pln'>5</p>
+<p class='pln'>6</p>
+<p class='stm run hide'>7</p>
+<p class='stm run hide'>8</p>
+<p class='stm run hide'>9</p>
+<p class='stm run hide'>10</p>
+<p class='stm run hide'>11</p>
+<p class='stm run hide'>12</p>
+<p class='stm run hide'>13</p>
+<p class='stm run hide'>14</p>
+<p class='pln'>15</p>
+<p class='stm run hide'>16</p>
+<p class='pln'>17</p>
+<p class='pln'>18</p>
+<p class='stm run hide'>19</p>
+<p class='pln'>20</p>
+<p class='pln'>21</p>
+<p class='pln'>22</p>
+<p class='stm run hide'>23</p>
+<p class='stm run hide'>24</p>
+<p class='stm run hide'>25</p>
+<p class='stm run hide'>26</p>
+<p class='stm run hide'>27</p>
+<p class='pln'>28</p>
+<p class='exc'>29</p>
+<p class='stm run hide'>30</p>
+<p class='pln'>31</p>
+<p class='stm run hide'>32</p>
+<p class='exc'>33</p>
+<p class='pln'>34</p>
+<p class='exc'>35</p>
+<p class='exc'>36</p>
+<p class='exc'>37</p>
+<p class='exc'>38</p>
+<p class='exc'>39</p>
+<p class='exc'>40</p>
+<p class='exc'>41</p>
+<p class='pln'>42</p>
+<p class='stm run hide'>43</p>
+<p class='pln'>44</p>
+<p class='pln'>45</p>
+<p class='pln'>46</p>
+<p class='stm run hide'>47</p>
+<p class='stm run hide'>48</p>
+<p class='pln'>49</p>
+<p class='pln'>50</p>
+<p class='pln'>51</p>
+<p class='pln'>52</p>
+<p class='pln'>53</p>
+<p class='pln'>54</p>
+<p class='pln'>55</p>
+<p class='stm run hide'>56</p>
+<p class='stm run hide'>57</p>
+<p class='pln'>58</p>
+<p class='stm run hide'>59</p>
+<p class='stm run hide'>60</p>
+<p class='pln'>61</p>
+<p class='pln'>62</p>
+<p class='pln'>63</p>
+<p class='pln'>64</p>
+<p class='pln'>65</p>
+<p class='pln'>66</p>
+<p class='pln'>67</p>
+<p class='pln'>68</p>
+<p class='pln'>69</p>
+<p class='pln'>70</p>
+<p class='pln'>71</p>
+<p class='stm run hide'>72</p>
+<p class='pln'>73</p>
+<p class='pln'>74</p>
+<p class='pln'>75</p>
+<p class='pln'>76</p>
+<p class='pln'>77</p>
+<p class='pln'>78</p>
+<p class='pln'>79</p>
+<p class='pln'>80</p>
+<p class='pln'>81</p>
+<p class='pln'>82</p>
+<p class='pln'>83</p>
+<p class='pln'>84</p>
+<p class='pln'>85</p>
+<p class='stm run hide'>86</p>
+<p class='pln'>87</p>
+<p class='stm run hide'>88</p>
+<p class='pln'>89</p>
+<p class='pln'>90</p>
+<p class='stm run hide'>91</p>
+<p class='pln'>92</p>
+<p class='pln'>93</p>
+<p class='pln'>94</p>
+<p class='pln'>95</p>
+<p class='pln'>96</p>
+<p class='pln'>97</p>
+<p class='pln'>98</p>
+<p class='stm run hide'>99</p>
+<p class='stm run hide'>100</p>
+<p class='pln'>101</p>
+<p class='stm run hide'>102</p>
+<p class='pln'>103</p>
+<p class='stm run hide'>104</p>
+<p class='pln'>105</p>
+<p class='pln'>106</p>
+<p class='pln'>107</p>
+<p class='pln'>108</p>
+<p class='pln'>109</p>
+<p class='pln'>110</p>
+<p class='pln'>111</p>
+<p class='pln'>112</p>
+<p class='pln'>113</p>
+<p class='pln'>114</p>
+<p class='pln'>115</p>
+<p class='pln'>116</p>
+<p class='pln'>117</p>
+<p class='pln'>118</p>
+<p class='pln'>119</p>
+<p class='pln'>120</p>
+<p class='pln'>121</p>
+<p class='pln'>122</p>
+<p class='stm run hide'>123</p>
+<p class='stm run hide'>124</p>
+<p class='pln'>125</p>
+<p class='stm run hide'>126</p>
+<p class='stm run hide'>127</p>
+<p class='pln'>128</p>
+<p class='pln'>129</p>
+<p class='pln'>130</p>
+<p class='pln'>131</p>
+<p class='pln'>132</p>
+<p class='pln'>133</p>
+<p class='pln'>134</p>
+<p class='pln'>135</p>
+<p class='pln'>136</p>
+<p class='pln'>137</p>
+<p class='pln'>138</p>
+<p class='pln'>139</p>
+<p class='pln'>140</p>
+<p class='stm run hide'>141</p>
+<p class='stm run hide'>142</p>
+<p class='pln'>143</p>
+<p class='stm run hide'>144</p>
+<p class='stm run hide'>145</p>
+<p class='pln'>146</p>
+<p class='pln'>147</p>
+<p class='pln'>148</p>
+<p class='pln'>149</p>
+<p class='pln'>150</p>
+<p class='pln'>151</p>
+<p class='pln'>152</p>
+<p class='pln'>153</p>
+<p class='pln'>154</p>
+<p class='pln'>155</p>
+<p class='pln'>156</p>
+<p class='pln'>157</p>
+<p class='pln'>158</p>
+<p class='pln'>159</p>
+<p class='stm run hide'>160</p>
+<p class='stm run hide'>161</p>
+<p class='pln'>162</p>
+<p class='stm run hide'>163</p>
+<p class='pln'>164</p>
+<p class='pln'>165</p>
+<p class='stm run hide'>166</p>
+<p class='pln'>167</p>
+<p class='pln'>168</p>
+<p class='pln'>169</p>
+<p class='pln'>170</p>
+<p class='pln'>171</p>
+<p class='pln'>172</p>
+<p class='pln'>173</p>
+<p class='pln'>174</p>
+<p class='pln'>175</p>
+<p class='pln'>176</p>
+<p class='pln'>177</p>
+<p class='stm run hide'>178</p>
+<p class='stm run hide'>179</p>
+<p class='pln'>180</p>
+<p class='stm run hide'>181</p>
+<p class='stm run hide'>182</p>
+<p class='pln'>183</p>
+<p class='pln'>184</p>
+<p class='pln'>185</p>
+<p class='pln'>186</p>
+<p class='pln'>187</p>
+<p class='pln'>188</p>
+<p class='pln'>189</p>
+<p class='pln'>190</p>
+<p class='pln'>191</p>
+<p class='pln'>192</p>
+<p class='pln'>193</p>
+<p class='pln'>194</p>
+<p class='pln'>195</p>
+<p class='stm run hide'>196</p>
+<p class='stm run hide'>197</p>
+<p class='pln'>198</p>
+<p class='stm run hide'>199</p>
+<p class='stm run hide'>200</p>
+<p class='pln'>201</p>
+<p class='pln'>202</p>
+<p class='pln'>203</p>
+<p class='pln'>204</p>
+<p class='pln'>205</p>
+<p class='pln'>206</p>
+<p class='pln'>207</p>
+<p class='pln'>208</p>
+<p class='pln'>209</p>
+<p class='pln'>210</p>
+<p class='pln'>211</p>
+<p class='stm run hide'>212</p>
+<p class='stm run hide'>213</p>
+<p class='pln'>214</p>
+<p class='stm run hide'>215</p>
+<p class='stm run hide'>216</p>
+<p class='pln'>217</p>
+<p class='pln'>218</p>
+<p class='pln'>219</p>
+<p class='pln'>220</p>
+<p class='pln'>221</p>
+<p class='pln'>222</p>
+<p class='pln'>223</p>
+<p class='pln'>224</p>
+<p class='pln'>225</p>
+<p class='pln'>226</p>
+<p class='pln'>227</p>
+<p class='pln'>228</p>
+<p class='stm run hide'>229</p>
+<p class='stm run hide'>230</p>
+<p class='pln'>231</p>
+<p class='stm run hide'>232</p>
+<p class='stm run hide'>233</p>
+<p class='pln'>234</p>
+<p class='pln'>235</p>
+<p class='pln'>236</p>
+<p class='pln'>237</p>
+<p class='pln'>238</p>
+<p class='pln'>239</p>
+<p class='pln'>240</p>
+<p class='pln'>241</p>
+<p class='pln'>242</p>
+<p class='pln'>243</p>
+<p class='pln'>244</p>
+<p class='pln'>245</p>
+<p class='pln'>246</p>
+<p class='stm run hide'>247</p>
+<p class='stm run hide'>248</p>
+<p class='pln'>249</p>
+<p class='stm run hide'>250</p>
+<p class='pln'>251</p>
+<p class='pln'>252</p>
+<p class='stm run hide'>253</p>
+<p class='pln'>254</p>
+<p class='pln'>255</p>
+<p class='pln'>256</p>
+<p class='pln'>257</p>
+<p class='pln'>258</p>
+<p class='pln'>259</p>
+<p class='pln'>260</p>
+<p class='pln'>261</p>
+<p class='pln'>262</p>
+<p class='pln'>263</p>
+<p class='pln'>264</p>
+<p class='stm run hide'>265</p>
+<p class='stm run hide'>266</p>
+<p class='pln'>267</p>
+<p class='stm run hide'>268</p>
+<p class='pln'>269</p>
+<p class='stm run hide'>270</p>
+<p class='pln'>271</p>
+<p class='pln'>272</p>
+<p class='pln'>273</p>
+<p class='pln'>274</p>
+<p class='pln'>275</p>
+<p class='pln'>276</p>
+<p class='pln'>277</p>
+<p class='pln'>278</p>
+<p class='stm run hide'>279</p>
+<p class='stm run hide'>280</p>
+<p class='pln'>281</p>
+<p class='stm run hide'>282</p>
+<p class='pln'>283</p>
+<p class='pln'>284</p>
+<p class='pln'>285</p>
+<p class='stm run hide'>286</p>
+<p class='pln'>287</p>
+<p class='pln'>288</p>
+<p class='pln'>289</p>
+<p class='pln'>290</p>
+<p class='pln'>291</p>
+<p class='pln'>292</p>
+<p class='pln'>293</p>
+<p class='pln'>294</p>
+<p class='pln'>295</p>
+<p class='pln'>296</p>
+<p class='pln'>297</p>
+<p class='pln'>298</p>
+<p class='stm run hide'>299</p>
+<p class='stm run hide'>300</p>
+<p class='pln'>301</p>
+<p class='stm run hide'>302</p>
+<p class='pln'>303</p>
+<p class='pln'>304</p>
+<p class='pln'>305</p>
+<p class='stm run hide'>306</p>
+<p class='pln'>307</p>
+<p class='pln'>308</p>
+<p class='pln'>309</p>
+<p class='pln'>310</p>
+<p class='pln'>311</p>
+<p class='pln'>312</p>
+<p class='pln'>313</p>
+<p class='pln'>314</p>
+<p class='pln'>315</p>
+<p class='pln'>316</p>
+<p class='pln'>317</p>
+<p class='pln'>318</p>
+<p class='pln'>319</p>
+<p class='pln'>320</p>
+<p class='pln'>321</p>
+<p class='pln'>322</p>
+<p class='pln'>323</p>
+<p class='stm run hide'>324</p>
+<p class='stm run hide'>325</p>
+<p class='pln'>326</p>
+<p class='stm run hide'>327</p>
+<p class='stm run hide'>328</p>
+<p class='pln'>329</p>
+<p class='pln'>330</p>
+<p class='pln'>331</p>
+<p class='pln'>332</p>
+<p class='pln'>333</p>
+<p class='pln'>334</p>
+<p class='pln'>335</p>
+<p class='pln'>336</p>
+<p class='pln'>337</p>
+<p class='pln'>338</p>
+<p class='pln'>339</p>
+<p class='pln'>340</p>
+<p class='pln'>341</p>
+<p class='pln'>342</p>
+<p class='stm run hide'>343</p>
+<p class='stm run hide'>344</p>
+<p class='pln'>345</p>
+<p class='stm run hide'>346</p>
+<p class='stm run hide'>347</p>
+<p class='pln'>348</p>
+<p class='pln'>349</p>
+<p class='pln'>350</p>
+<p class='pln'>351</p>
+<p class='pln'>352</p>
+<p class='pln'>353</p>
+<p class='pln'>354</p>
+<p class='stm run hide'>355</p>
+<p class='pln'>356</p>
+<p class='pln'>357</p>
+<p class='pln'>358</p>
+<p class='pln'>359</p>
+<p class='pln'>360</p>
+<p class='pln'>361</p>
+<p class='pln'>362</p>
+<p class='stm run hide'>363</p>
+<p class='stm run hide'>364</p>
+<p class='pln'>365</p>
+<p class='stm run hide'>366</p>
+<p class='stm run hide'>367</p>
+<p class='pln'>368</p>
+<p class='pln'>369</p>
+<p class='pln'>370</p>
+<p class='pln'>371</p>
+<p class='pln'>372</p>
+<p class='pln'>373</p>
+<p class='stm run hide'>374</p>
+<p class='pln'>375</p>
+<p class='pln'>376</p>
+<p class='pln'>377</p>
+<p class='pln'>378</p>
+<p class='stm run hide'>379</p>
+<p class='stm run hide'>380</p>
+<p class='pln'>381</p>
+<p class='pln'>382</p>
+<p class='pln'>383</p>
+<p class='pln'>384</p>
+<p class='pln'>385</p>
+<p class='pln'>386</p>
+<p class='pln'>387</p>
+<p class='pln'>388</p>
+<p class='pln'>389</p>
+<p class='stm run hide'>390</p>
+<p class='pln'>391</p>
+<p class='pln'>392</p>
+<p class='pln'>393</p>
+<p class='pln'>394</p>
+<p class='pln'>395</p>
+<p class='pln'>396</p>
+<p class='pln'>397</p>
+<p class='pln'>398</p>
+<p class='pln'>399</p>
+<p class='pln'>400</p>
+<p class='stm run hide'>401</p>
+<p class='stm run hide'>402</p>
+<p class='pln'>403</p>
+<p class='stm run hide'>404</p>
+<p class='pln'>405</p>
+<p class='pln'>406</p>
+<p class='pln'>407</p>
+<p class='stm run hide'>408</p>
+<p class='stm mis'>409</p>
+<p class='stm mis'>410</p>
+<p class='stm mis'>411</p>
+<p class='stm mis'>412</p>
+<p class='stm mis'>413</p>
+<p class='stm mis'>414</p>
+<p class='stm mis'>415</p>
+<p class='pln'>416</p>
+<p class='stm run hide'>417</p>
+<p class='stm mis'>418</p>
+<p class='stm mis'>419</p>
+<p class='stm mis'>420</p>
+<p class='stm mis'>421</p>
+<p class='stm mis'>422</p>
+<p class='stm mis'>423</p>
+<p class='stm mis'>424</p>
+<p class='stm mis'>425</p>
+<p class='stm mis'>426</p>
+<p class='pln'>427</p>
+<p class='stm run hide'>428</p>
+<p class='pln'>429</p>
+<p class='stm mis'>430</p>
+<p class='stm mis'>431</p>
+<p class='stm mis'>432</p>
+<p class='stm mis'>433</p>
+<p class='stm mis'>434</p>
+<p class='pln'>435</p>
+<p class='stm run hide'>436</p>
+<p class='pln'>437</p>
+<p class='pln'>438</p>
+<p class='pln'>439</p>
+<p class='pln'>440</p>
+<p class='stm run hide'>441</p>
+<p class='stm mis'>442</p>
+<p class='stm mis'>443</p>
+<p class='pln'>444</p>
+<p class='pln'>445</p>
+<p class='pln'>446</p>
+<p class='stm run hide'>447</p>
+<p class='stm mis'>448</p>
+<p class='pln'>449</p>
+<p class='pln'>450</p>
+<p class='pln'>451</p>
+<p class='pln'>452</p>
+<p class='stm mis'>453</p>
+<p class='pln'>454</p>
+<p class='stm run hide'>455</p>
+<p class='stm mis'>456</p>
+<p class='pln'>457</p>
+<p class='pln'>458</p>
+<p class='pln'>459</p>
+<p class='pln'>460</p>
+<p class='pln'>461</p>
+<p class='stm mis'>462</p>
+<p class='pln'>463</p>
+<p class='stm mis'>464</p>
+<p class='pln'>465</p>
+<p class='pln'>466</p>
+<p class='pln'>467</p>
+<p class='pln'>468</p>
+<p class='pln'>469</p>
+<p class='pln'>470</p>
+<p class='pln'>471</p>
+<p class='pln'>472</p>
+<p class='stm mis'>473</p>
+<p class='pln'>474</p>
+<p class='stm run hide'>475</p>
+<p class='stm mis'>476</p>
+<p class='pln'>477</p>
+<p class='pln'>478</p>
+<p class='stm mis'>479</p>
+<p class='pln'>480</p>
+<p class='stm mis'>481</p>
+<p class='pln'>482</p>
+<p class='pln'>483</p>
+<p class='pln'>484</p>
+<p class='pln'>485</p>
+<p class='pln'>486</p>
+<p class='pln'>487</p>
+<p class='stm mis'>488</p>
+<p class='pln'>489</p>
+<p class='stm run hide'>490</p>
+<p class='stm mis'>491</p>
+<p class='pln'>492</p>
+<p class='pln'>493</p>
+<p class='stm mis'>494</p>
+<p class='pln'>495</p>
+<p class='stm mis'>496</p>
+<p class='pln'>497</p>
+<p class='pln'>498</p>
+<p class='pln'>499</p>
+<p class='pln'>500</p>
+<p class='pln'>501</p>
+<p class='pln'>502</p>
+<p class='stm mis'>503</p>
+<p class='pln'>504</p>
+<p class='stm run hide'>505</p>
+<p class='stm mis'>506</p>
+<p class='pln'>507</p>
+<p class='pln'>508</p>
+<p class='pln'>509</p>
+<p class='pln'>510</p>
+<p class='stm mis'>511</p>
+<p class='pln'>512</p>
+<p class='stm mis'>513</p>
+<p class='pln'>514</p>
+<p class='pln'>515</p>
+<p class='pln'>516</p>
+<p class='pln'>517</p>
+<p class='pln'>518</p>
+<p class='pln'>519</p>
+<p class='pln'>520</p>
+<p class='pln'>521</p>
+<p class='stm mis'>522</p>
+<p class='pln'>523</p>
+<p class='stm run hide'>524</p>
+<p class='stm mis'>525</p>
+<p class='pln'>526</p>
+<p class='pln'>527</p>
+<p class='pln'>528</p>
+<p class='pln'>529</p>
+<p class='pln'>530</p>
+<p class='pln'>531</p>
+<p class='stm mis'>532</p>
+<p class='pln'>533</p>
+<p class='stm mis'>534</p>
+<p class='pln'>535</p>
+<p class='pln'>536</p>
+<p class='pln'>537</p>
+<p class='pln'>538</p>
+<p class='pln'>539</p>
+<p class='pln'>540</p>
+<p class='pln'>541</p>
+<p class='pln'>542</p>
+<p class='pln'>543</p>
+<p class='pln'>544</p>
+<p class='stm mis'>545</p>
+<p class='pln'>546</p>
+<p class='stm run hide'>547</p>
+<p class='stm mis'>548</p>
+<p class='pln'>549</p>
+<p class='pln'>550</p>
+<p class='pln'>551</p>
+<p class='pln'>552</p>
+<p class='pln'>553</p>
+<p class='pln'>554</p>
+<p class='stm mis'>555</p>
+<p class='pln'>556</p>
+<p class='stm mis'>557</p>
+<p class='pln'>558</p>
+<p class='pln'>559</p>
+<p class='pln'>560</p>
+<p class='pln'>561</p>
+<p class='pln'>562</p>
+<p class='pln'>563</p>
+<p class='pln'>564</p>
+<p class='pln'>565</p>
+<p class='pln'>566</p>
+<p class='pln'>567</p>
+<p class='stm mis'>568</p>
+<p class='pln'>569</p>
+<p class='stm run hide'>570</p>
+<p class='pln'>571</p>
+<p class='pln'>572</p>
+<p class='pln'>573</p>
+<p class='stm run hide'>574</p>
+<p class='stm mis'>575</p>
+<p class='pln'>576</p>
+<p class='pln'>577</p>
+<p class='pln'>578</p>
+<p class='pln'>579</p>
+<p class='stm mis'>580</p>
+<p class='stm mis'>581</p>
+<p class='pln'>582</p>
+<p class='pln'>583</p>
+<p class='pln'>584</p>
+<p class='stm run hide'>585</p>
+<p class='stm mis'>586</p>
+<p class='pln'>587</p>
+<p class='pln'>588</p>
+<p class='pln'>589</p>
+<p class='pln'>590</p>
+<p class='stm mis'>591</p>
+<p class='stm mis'>592</p>
+<p class='pln'>593</p>
+<p class='pln'>594</p>
+<p class='pln'>595</p>
+<p class='stm run hide'>596</p>
+<p class='stm mis'>597</p>
+<p class='pln'>598</p>
+<p class='pln'>599</p>
+<p class='pln'>600</p>
+<p class='pln'>601</p>
+<p class='pln'>602</p>
+<p class='pln'>603</p>
+<p class='pln'>604</p>
+<p class='pln'>605</p>
+<p class='pln'>606</p>
+<p class='pln'>607</p>
+<p class='pln'>608</p>
+<p class='pln'>609</p>
+<p class='pln'>610</p>
+<p class='stm mis'>611</p>
+<p class='stm mis'>612</p>
+<p class='pln'>613</p>
+<p class='stm run hide'>614</p>
+<p class='pln'>615</p>
+<p class='pln'>616</p>
+<p class='pln'>617</p>
+<p class='pln'>618</p>
+<p class='stm run hide'>619</p>
+<p class='pln'>620</p>
+<p class='pln'>621</p>
+<p class='pln'>622</p>
+<p class='stm mis'>623</p>
+<p class='stm mis'>624</p>
+<p class='stm mis'>625</p>
+<p class='pln'>626</p>
+<p class='stm run hide'>627</p>
+<p class='stm mis'>628</p>
+<p class='stm mis'>629</p>
+<p class='stm mis'>630</p>
+<p class='pln'>631</p>
+<p class='stm run hide'>632</p>
+<p class='stm mis'>633</p>
+<p class='stm mis'>634</p>
+<p class='stm mis'>635</p>
+<p class='stm mis'>636</p>
+<p class='stm mis'>637</p>
+<p class='pln'>638</p>
+<p class='stm run hide'>639</p>
+<p class='pln'>640</p>
+<p class='stm mis'>641</p>
+<p class='stm mis'>642</p>
+<p class='stm mis'>643</p>
+<p class='stm mis'>644</p>
+<p class='stm mis'>645</p>
+<p class='pln'>646</p>
+<p class='stm run hide'>647</p>
+<p class='pln'>648</p>
+<p class='stm mis'>649</p>
+<p class='stm mis'>650</p>
+<p class='stm mis'>651</p>
+<p class='stm mis'>652</p>
+<p class='stm mis'>653</p>
+<p class='pln'>654</p>
+<p class='stm run hide'>655</p>
+<p class='pln'>656</p>
+<p class='stm mis'>657</p>
+<p class='stm mis'>658</p>
+<p class='stm mis'>659</p>
+<p class='stm mis'>660</p>
+<p class='stm mis'>661</p>
+<p class='pln'>662</p>
+<p class='stm run hide'>663</p>
+<p class='pln'>664</p>
+<p class='stm mis'>665</p>
+<p class='stm mis'>666</p>
+<p class='stm mis'>667</p>
+<p class='stm mis'>668</p>
+<p class='stm mis'>669</p>
+<p class='pln'>670</p>
+<p class='stm run hide'>671</p>
+<p class='pln'>672</p>
+<p class='pln'>673</p>
+<p class='stm mis'>674</p>
+<p class='stm mis'>675</p>
+<p class='stm mis'>676</p>
+<p class='stm mis'>677</p>
+<p class='stm mis'>678</p>
+<p class='stm mis'>679</p>
+<p class='pln'>680</p>
+<p class='stm run hide'>681</p>
+<p class='pln'>682</p>
+<p class='stm run hide'>683</p>
+<p class='pln'>684</p>
+<p class='pln'>685</p>
+<p class='pln'>686</p>
+<p class='stm mis'>687</p>
+<p class='stm mis'>688</p>
+<p class='stm mis'>689</p>
+<p class='pln'>690</p>
+<p class='stm run hide'>691</p>
+<p class='pln'>692</p>
+<p class='stm mis'>693</p>
+<p class='stm mis'>694</p>
+<p class='stm mis'>695</p>
+<p class='stm mis'>696</p>
+<p class='stm mis'>697</p>
+<p class='pln'>698</p>
+<p class='stm run hide'>699</p>
+<p class='stm mis'>700</p>
+<p class='pln'>701</p>
+<p class='stm mis'>702</p>
+<p class='pln'>703</p>
+<p class='stm run hide'>704</p>
+<p class='stm mis'>705</p>
+<p class='pln'>706</p>
+<p class='stm run hide'>707</p>
+<p class='stm mis'>708</p>
+<p class='stm mis'>709</p>
+<p class='stm mis'>710</p>
+<p class='stm mis'>711</p>
+<p class='pln'>712</p>
+<p class='stm mis'>713</p>
+<p class='stm mis'>714</p>
+<p class='pln'>715</p>
+<p class='pln'>716</p>
+<p class='stm run hide'>717</p>
+<p class='pln'>718</p>
+<p class='stm run hide'>719</p>
+<p class='pln'>720</p>
+<p class='stm mis'>721</p>
+<p class='stm mis'>722</p>
+<p class='stm mis'>723</p>
+<p class='stm mis'>724</p>
+<p class='stm mis'>725</p>
+<p class='pln'>726</p>
+<p class='stm run hide'>727</p>
+<p class='stm mis'>728</p>
+<p class='pln'>729</p>
+<p class='pln'>730</p>
+<p class='pln'>731</p>
+<p class='pln'>732</p>
+<p class='pln'>733</p>
+<p class='stm mis'>734</p>
+<p class='stm mis'>735</p>
+<p class='pln'>736</p>
+<p class='stm run hide'>737</p>
+<p class='stm mis'>738</p>
+<p class='stm mis'>739</p>
+<p class='stm mis'>740</p>
+<p class='pln'>741</p>
+<p class='stm run hide'>742</p>
+<p class='stm mis'>743</p>
+<p class='stm mis'>744</p>
+<p class='stm mis'>745</p>
+<p class='stm mis'>746</p>
+<p class='pln'>747</p>
+<p class='stm run hide'>748</p>
+<p class='pln'>749</p>
+<p class='stm mis'>750</p>
+<p class='stm mis'>751</p>
+<p class='stm mis'>752</p>
+<p class='stm mis'>753</p>
+<p class='pln'>754</p>
+<p class='stm run hide'>755</p>
+<p class='stm mis'>756</p>
+<p class='pln'>757</p>
+<p class='pln'>758</p>
+<p class='pln'>759</p>
+<p class='pln'>760</p>
+<p class='pln'>761</p>
+<p class='stm mis'>762</p>
+<p class='stm mis'>763</p>
+<p class='pln'>764</p>
+<p class='stm run hide'>765</p>
+<p class='stm mis'>766</p>
+<p class='pln'>767</p>
+<p class='pln'>768</p>
+<p class='pln'>769</p>
+<p class='pln'>770</p>
+<p class='pln'>771</p>
+<p class='pln'>772</p>
+<p class='pln'>773</p>
+<p class='pln'>774</p>
+<p class='pln'>775</p>
+<p class='pln'>776</p>
+<p class='pln'>777</p>
+<p class='pln'>778</p>
+<p class='pln'>779</p>
+<p class='pln'>780</p>
+<p class='pln'>781</p>
+<p class='pln'>782</p>
+<p class='pln'>783</p>
+<p class='pln'>784</p>
+<p class='pln'>785</p>
+<p class='pln'>786</p>
+<p class='pln'>787</p>
+<p class='pln'>788</p>
+<p class='stm mis'>789</p>
+<p class='stm mis'>790</p>
+<p class='pln'>791</p>
+<p class='pln'>792</p>
+<p class='stm mis'>793</p>
+<p class='stm mis'>794</p>
+<p class='stm mis'>795</p>
+<p class='pln'>796</p>
+<p class='stm run hide'>797</p>
+<p class='stm mis'>798</p>
+<p class='stm mis'>799</p>
+<p class='pln'>800</p>
+<p class='pln'>801</p>
+<p class='stm run hide'>802</p>
+<p class='pln'>803</p>
+<p class='stm run hide'>804</p>
+<p class='stm mis'>805</p>
+<p class='pln'>806</p>
+<p class='pln'>807</p>
+<p class='pln'>808</p>
+<p class='pln'>809</p>
+<p class='pln'>810</p>
+<p class='pln'>811</p>
+<p class='pln'>812</p>
+<p class='pln'>813</p>
+<p class='pln'>814</p>
+<p class='pln'>815</p>
+<p class='pln'>816</p>
+<p class='pln'>817</p>
+<p class='pln'>818</p>
+<p class='pln'>819</p>
+<p class='pln'>820</p>
+<p class='pln'>821</p>
+<p class='pln'>822</p>
+<p class='pln'>823</p>
+<p class='pln'>824</p>
+<p class='pln'>825</p>
+<p class='pln'>826</p>
+<p class='pln'>827</p>
+<p class='pln'>828</p>
+<p class='pln'>829</p>
+<p class='stm mis'>830</p>
+<p class='stm mis'>831</p>
+<p class='stm mis'>832</p>
+<p class='stm mis'>833</p>
+<p class='stm mis'>834</p>
+<p class='pln'>835</p>
+<p class='stm run hide'>836</p>
+<p class='pln'>837</p>
+<p class='stm mis'>838</p>
+<p class='pln'>839</p>
+<p class='pln'>840</p>
+<p class='pln'>841</p>
+<p class='pln'>842</p>
+<p class='pln'>843</p>
+<p class='pln'>844</p>
+<p class='pln'>845</p>
+<p class='pln'>846</p>
+<p class='pln'>847</p>
+<p class='pln'>848</p>
+<p class='pln'>849</p>
+<p class='pln'>850</p>
+<p class='pln'>851</p>
+<p class='pln'>852</p>
+<p class='pln'>853</p>
+<p class='pln'>854</p>
+<p class='pln'>855</p>
+<p class='pln'>856</p>
+<p class='pln'>857</p>
+<p class='pln'>858</p>
+<p class='pln'>859</p>
+<p class='pln'>860</p>
+<p class='pln'>861</p>
+<p class='pln'>862</p>
+<p class='stm mis'>863</p>
+<p class='stm mis'>864</p>
+<p class='stm mis'>865</p>
+<p class='pln'>866</p>
+<p class='stm run hide'>867</p>
+<p class='stm mis'>868</p>
+<p class='pln'>869</p>
+<p class='pln'>870</p>
+<p class='pln'>871</p>
+<p class='pln'>872</p>
+<p class='pln'>873</p>
+<p class='pln'>874</p>
+<p class='pln'>875</p>
+<p class='pln'>876</p>
+<p class='pln'>877</p>
+<p class='pln'>878</p>
+<p class='pln'>879</p>
+<p class='pln'>880</p>
+<p class='pln'>881</p>
+<p class='pln'>882</p>
+<p class='pln'>883</p>
+<p class='pln'>884</p>
+<p class='pln'>885</p>
+<p class='pln'>886</p>
+<p class='pln'>887</p>
+<p class='pln'>888</p>
+<p class='pln'>889</p>
+<p class='pln'>890</p>
+<p class='pln'>891</p>
+<p class='pln'>892</p>
+<p class='pln'>893</p>
+<p class='pln'>894</p>
+<p class='pln'>895</p>
+<p class='pln'>896</p>
+<p class='pln'>897</p>
+<p class='pln'>898</p>
+<p class='pln'>899</p>
+<p class='pln'>900</p>
+<p class='pln'>901</p>
+<p class='pln'>902</p>
+<p class='pln'>903</p>
+<p class='pln'>904</p>
+<p class='pln'>905</p>
+<p class='pln'>906</p>
+<p class='stm mis'>907</p>
+<p class='stm mis'>908</p>
+<p class='stm mis'>909</p>
+<p class='stm mis'>910</p>
+<p class='stm mis'>911</p>
+<p class='stm mis'>912</p>
+<p class='pln'>913</p>
+<p class='stm run hide'>914</p>
+<p class='stm mis'>915</p>
+<p class='pln'>916</p>
+<p class='pln'>917</p>
+<p class='pln'>918</p>
+<p class='pln'>919</p>
+<p class='pln'>920</p>
+<p class='pln'>921</p>
+<p class='pln'>922</p>
+<p class='pln'>923</p>
+<p class='pln'>924</p>
+<p class='pln'>925</p>
+<p class='pln'>926</p>
+<p class='pln'>927</p>
+<p class='pln'>928</p>
+<p class='pln'>929</p>
+<p class='pln'>930</p>
+<p class='pln'>931</p>
+<p class='pln'>932</p>
+<p class='pln'>933</p>
+<p class='pln'>934</p>
+<p class='pln'>935</p>
+<p class='pln'>936</p>
+<p class='pln'>937</p>
+<p class='pln'>938</p>
+<p class='pln'>939</p>
+<p class='pln'>940</p>
+<p class='pln'>941</p>
+<p class='pln'>942</p>
+<p class='pln'>943</p>
+<p class='pln'>944</p>
+<p class='pln'>945</p>
+<p class='pln'>946</p>
+<p class='pln'>947</p>
+<p class='pln'>948</p>
+<p class='pln'>949</p>
+<p class='pln'>950</p>
+<p class='pln'>951</p>
+<p class='pln'>952</p>
+<p class='pln'>953</p>
+<p class='pln'>954</p>
+<p class='pln'>955</p>
+<p class='pln'>956</p>
+<p class='pln'>957</p>
+<p class='stm mis'>958</p>
+<p class='stm mis'>959</p>
+<p class='stm mis'>960</p>
+<p class='stm mis'>961</p>
+<p class='stm mis'>962</p>
+<p class='stm mis'>963</p>
+<p class='pln'>964</p>
+<p class='stm run hide'>965</p>
+<p class='stm mis'>966</p>
+<p class='pln'>967</p>
+<p class='pln'>968</p>
+<p class='pln'>969</p>
+<p class='pln'>970</p>
+<p class='pln'>971</p>
+<p class='pln'>972</p>
+<p class='pln'>973</p>
+<p class='pln'>974</p>
+<p class='pln'>975</p>
+<p class='pln'>976</p>
+<p class='pln'>977</p>
+<p class='pln'>978</p>
+<p class='pln'>979</p>
+<p class='pln'>980</p>
+<p class='pln'>981</p>
+<p class='pln'>982</p>
+<p class='pln'>983</p>
+<p class='pln'>984</p>
+<p class='pln'>985</p>
+<p class='pln'>986</p>
+<p class='pln'>987</p>
+<p class='pln'>988</p>
+<p class='pln'>989</p>
+<p class='pln'>990</p>
+<p class='pln'>991</p>
+<p class='pln'>992</p>
+<p class='pln'>993</p>
+<p class='pln'>994</p>
+<p class='pln'>995</p>
+<p class='pln'>996</p>
+<p class='pln'>997</p>
+<p class='pln'>998</p>
+<p class='pln'>999</p>
+<p class='pln'>1000</p>
+<p class='pln'>1001</p>
+<p class='stm mis'>1002</p>
+<p class='stm mis'>1003</p>
+<p class='stm mis'>1004</p>
+<p class='stm mis'>1005</p>
+<p class='pln'>1006</p>
+<p class='stm run hide'>1007</p>
+<p class='stm mis'>1008</p>
+<p class='pln'>1009</p>
+<p class='pln'>1010</p>
+<p class='pln'>1011</p>
+<p class='pln'>1012</p>
+<p class='pln'>1013</p>
+<p class='pln'>1014</p>
+<p class='pln'>1015</p>
+<p class='pln'>1016</p>
+<p class='pln'>1017</p>
+<p class='pln'>1018</p>
+<p class='pln'>1019</p>
+<p class='pln'>1020</p>
+<p class='pln'>1021</p>
+<p class='pln'>1022</p>
+<p class='pln'>1023</p>
+<p class='stm mis'>1024</p>
+<p class='stm mis'>1025</p>
+<p class='pln'>1026</p>
+<p class='stm run hide'>1027</p>
+<p class='stm mis'>1028</p>
+<p class='pln'>1029</p>
+<p class='pln'>1030</p>
+<p class='pln'>1031</p>
+<p class='pln'>1032</p>
+<p class='pln'>1033</p>
+<p class='pln'>1034</p>
+<p class='pln'>1035</p>
+<p class='pln'>1036</p>
+<p class='pln'>1037</p>
+<p class='pln'>1038</p>
+<p class='pln'>1039</p>
+<p class='pln'>1040</p>
+<p class='pln'>1041</p>
+<p class='pln'>1042</p>
+<p class='pln'>1043</p>
+<p class='pln'>1044</p>
+<p class='pln'>1045</p>
+<p class='pln'>1046</p>
+<p class='pln'>1047</p>
+<p class='pln'>1048</p>
+<p class='pln'>1049</p>
+<p class='pln'>1050</p>
+<p class='pln'>1051</p>
+<p class='pln'>1052</p>
+<p class='pln'>1053</p>
+<p class='pln'>1054</p>
+<p class='pln'>1055</p>
+<p class='pln'>1056</p>
+<p class='pln'>1057</p>
+<p class='pln'>1058</p>
+<p class='pln'>1059</p>
+<p class='pln'>1060</p>
+<p class='pln'>1061</p>
+<p class='pln'>1062</p>
+<p class='pln'>1063</p>
+<p class='pln'>1064</p>
+<p class='pln'>1065</p>
+<p class='stm mis'>1066</p>
+<p class='stm mis'>1067</p>
+<p class='stm mis'>1068</p>
+<p class='stm mis'>1069</p>
+<p class='stm mis'>1070</p>
+<p class='pln'>1071</p>
+<p class='pln'>1072</p>
+<p class='stm run hide'>1073</p>
+<p class='pln'>1074</p>
+<p class='pln'>1075</p>
+<p class='stm run hide'>1076</p>
+<p class='pln'>1077</p>
+<p class='pln'>1078</p>
+<p class='pln'>1079</p>
+<p class='pln'>1080</p>
+<p class='pln'>1081</p>
+<p class='pln'>1082</p>
+<p class='pln'>1083</p>
+<p class='pln'>1084</p>
+<p class='stm run hide'>1085</p>
+<p class='pln'>1086</p>
+<p class='pln'>1087</p>
+<p class='pln'>1088</p>
+<p class='pln'>1089</p>
+<p class='pln'>1090</p>
+<p class='pln'>1091</p>
+<p class='pln'>1092</p>
+<p class='pln'>1093</p>
+<p class='stm run hide'>1094</p>
+<p class='stm mis'>1095</p>
+<p class='stm mis'>1096</p>
+<p class='stm mis'>1097</p>
+<p class='pln'>1098</p>
+<p class='stm run hide'>1099</p>
+<p class='stm mis'>1100</p>
+<p class='stm mis'>1101</p>
+<p class='stm mis'>1102</p>
+<p class='pln'>1103</p>
+<p class='stm run hide'>1104</p>
+<p class='stm mis'>1105</p>
+<p class='stm mis'>1106</p>
+<p class='stm mis'>1107</p>
+<p class='pln'>1108</p>
+<p class='stm run hide'>1109</p>
+<p class='stm mis'>1110</p>
+<p class='stm mis'>1111</p>
+<p class='stm mis'>1112</p>
+<p class='pln'>1113</p>
+<p class='pln'>1114</p>
+<p class='stm run hide'>1115</p>
+<p class='pln'>1116</p>
+<p class='pln'>1117</p>
+<p class='pln'>1118</p>
+<p class='pln'>1119</p>
+<p class='pln'>1120</p>
+<p class='stm run hide'>1121</p>
+<p class='stm mis'>1122</p>
+<p class='stm mis'>1123</p>
+<p class='pln'>1124</p>
+<p class='stm run hide'>1125</p>
+<p class='stm mis'>1126</p>
+<p class='pln'>1127</p>
+<p class='pln'>1128</p>
+<p class='pln'>1129</p>
+<p class='pln'>1130</p>
+<p class='stm mis'>1131</p>
+<p class='stm mis'>1132</p>
+<p class='stm mis'>1133</p>
+<p class='pln'>1134</p>
+<p class='pln'>1135</p>
+<p class='stm run hide'>1136</p>
+<p class='stm run hide'>1137</p>
+<p class='pln'>1138</p>
+<p class='pln'>1139</p>
+<p class='pln'>1140</p>
+<p class='pln'>1141</p>
+<p class='pln'>1142</p>
+<p class='pln'>1143</p>
+<p class='pln'>1144</p>
+<p class='pln'>1145</p>
+<p class='pln'>1146</p>
+<p class='pln'>1147</p>
+<p class='pln'>1148</p>
+<p class='pln'>1149</p>
+<p class='pln'>1150</p>
+<p class='pln'>1151</p>
+<p class='pln'>1152</p>
+<p class='pln'>1153</p>
+<p class='pln'>1154</p>
+<p class='pln'>1155</p>
+<p class='pln'>1156</p>
+<p class='pln'>1157</p>
+<p class='pln'>1158</p>
+<p class='pln'>1159</p>
+<p class='pln'>1160</p>
+<p class='pln'>1161</p>
+<p class='pln'>1162</p>
+<p class='pln'>1163</p>
+<p class='pln'>1164</p>
+<p class='pln'>1165</p>
+<p class='pln'>1166</p>
+<p class='pln'>1167</p>
+<p class='pln'>1168</p>
+<p class='pln'>1169</p>
+<p class='pln'>1170</p>
+<p class='pln'>1171</p>
+<p class='pln'>1172</p>
+<p class='pln'>1173</p>
+<p class='pln'>1174</p>
+<p class='pln'>1175</p>
+<p class='pln'>1176</p>
+<p class='pln'>1177</p>
+<p class='pln'>1178</p>
+<p class='pln'>1179</p>
+<p class='pln'>1180</p>
+<p class='pln'>1181</p>
+<p class='pln'>1182</p>
+<p class='stm run hide'>1183</p>
+<p class='pln'>1184</p>
+<p class='stm mis'>1185</p>
+<p class='stm mis'>1186</p>
+<p class='pln'>1187</p>
+<p class='stm run hide'>1188</p>
+<p class='pln'>1189</p>
+<p class='stm mis'>1190</p>
+<p class='stm mis'>1191</p>
+<p class='stm mis'>1192</p>
+<p class='pln'>1193</p>
+<p class='stm run hide'>1194</p>
+<p class='pln'>1195</p>
+<p class='stm mis'>1196</p>
+<p class='stm mis'>1197</p>
+<p class='stm mis'>1198</p>
+<p class='pln'>1199</p>
+<p class='stm run hide'>1200</p>
+<p class='pln'>1201</p>
+<p class='stm mis'>1202</p>
+<p class='stm mis'>1203</p>
+<p class='stm mis'>1204</p>
+<p class='pln'>1205</p>
+<p class='stm run hide'>1206</p>
+<p class='pln'>1207</p>
+<p class='stm mis'>1208</p>
+<p class='stm mis'>1209</p>
+<p class='stm mis'>1210</p>
+<p class='pln'>1211</p>
+<p class='stm run hide'>1212</p>
+<p class='stm mis'>1213</p>
+<p class='pln'>1214</p>
+<p class='pln'>1215</p>
+<p class='pln'>1216</p>
+<p class='pln'>1217</p>
+<p class='pln'>1218</p>
+<p class='pln'>1219</p>
+<p class='pln'>1220</p>
+<p class='pln'>1221</p>
+<p class='pln'>1222</p>
+<p class='pln'>1223</p>
+<p class='stm mis'>1224</p>
+<p class='pln'>1225</p>
+<p class='stm mis'>1226</p>
+<p class='stm mis'>1227</p>
+<p class='stm mis'>1228</p>
+<p class='pln'>1229</p>
+<p class='stm mis'>1230</p>
+<p class='stm mis'>1231</p>
+<p class='stm mis'>1232</p>
+<p class='pln'>1233</p>
+<p class='stm mis'>1234</p>
+<p class='stm mis'>1235</p>
+<p class='stm mis'>1236</p>
+<p class='pln'>1237</p>
+<p class='stm mis'>1238</p>
+<p class='stm mis'>1239</p>
+<p class='stm mis'>1240</p>
+<p class='pln'>1241</p>
+<p class='stm mis'>1242</p>
+<p class='stm mis'>1243</p>
+<p class='stm mis'>1244</p>
+<p class='pln'>1245</p>
+<p class='stm mis'>1246</p>
+<p class='stm mis'>1247</p>
+<p class='stm mis'>1248</p>
+<p class='pln'>1249</p>
+<p class='stm mis'>1250</p>
+<p class='stm mis'>1251</p>
+<p class='stm mis'>1252</p>
+<p class='pln'>1253</p>
+<p class='stm run hide'>1254</p>
+<p class='pln'>1255</p>
+<p class='pln'>1256</p>
+<p class='stm mis'>1257</p>
+<p class='pln'>1258</p>
+<p class='pln'>1259</p>
+<p class='pln'>1260</p>
+<p class='pln'>1261</p>
+<p class='pln'>1262</p>
+<p class='pln'>1263</p>
+<p class='pln'>1264</p>
+<p class='pln'>1265</p>
+<p class='pln'>1266</p>
+<p class='pln'>1267</p>
+<p class='pln'>1268</p>
+<p class='pln'>1269</p>
+<p class='pln'>1270</p>
+<p class='pln'>1271</p>
+<p class='pln'>1272</p>
+<p class='pln'>1273</p>
+<p class='pln'>1274</p>
+<p class='pln'>1275</p>
+<p class='pln'>1276</p>
+<p class='pln'>1277</p>
+<p class='pln'>1278</p>
+<p class='pln'>1279</p>
+<p class='pln'>1280</p>
+<p class='stm mis'>1281</p>
+<p class='pln'>1282</p>
+<p class='pln'>1283</p>
+<p class='stm mis'>1284</p>
+<p class='stm mis'>1285</p>
+<p class='pln'>1286</p>
+<p class='pln'>1287</p>
+<p class='stm run hide'>1288</p>
+<p class='pln'>1289</p>
+<p class='stm run hide'>1290</p>
+<p class='pln'>1291</p>
+<p class='stm mis'>1292</p>
+<p class='pln'>1293</p>
+<p class='pln'>1294</p>
+<p class='pln'>1295</p>
+<p class='pln'>1296</p>
+<p class='pln'>1297</p>
+<p class='pln'>1298</p>
+<p class='pln'>1299</p>
+<p class='pln'>1300</p>
+<p class='pln'>1301</p>
+<p class='pln'>1302</p>
+<p class='pln'>1303</p>
+<p class='pln'>1304</p>
+<p class='pln'>1305</p>
+<p class='pln'>1306</p>
+<p class='stm mis'>1307</p>
+<p class='stm mis'>1308</p>
+<p class='stm mis'>1309</p>
+<p class='stm mis'>1310</p>
+<p class='stm mis'>1311</p>
+<p class='stm mis'>1312</p>
+<p class='stm mis'>1313</p>
+<p class='stm mis'>1314</p>
+<p class='stm mis'>1315</p>
+<p class='stm mis'>1316</p>
+<p class='stm mis'>1317</p>
+<p class='stm mis'>1318</p>
+<p class='pln'>1319</p>
+<p class='stm run hide'>1320</p>
+<p class='stm mis'>1321</p>
+<p class='pln'>1322</p>
+<p class='pln'>1323</p>
+<p class='pln'>1324</p>
+<p class='pln'>1325</p>
+<p class='pln'>1326</p>
+<p class='pln'>1327</p>
+<p class='pln'>1328</p>
+<p class='pln'>1329</p>
+<p class='pln'>1330</p>
+<p class='pln'>1331</p>
+<p class='pln'>1332</p>
+<p class='pln'>1333</p>
+<p class='pln'>1334</p>
+<p class='pln'>1335</p>
+<p class='pln'>1336</p>
+<p class='pln'>1337</p>
+<p class='pln'>1338</p>
+<p class='pln'>1339</p>
+<p class='pln'>1340</p>
+<p class='pln'>1341</p>
+<p class='pln'>1342</p>
+<p class='pln'>1343</p>
+<p class='pln'>1344</p>
+<p class='pln'>1345</p>
+<p class='pln'>1346</p>
+<p class='stm mis'>1347</p>
+<p class='stm mis'>1348</p>
+<p class='stm mis'>1349</p>
+<p class='stm mis'>1350</p>
+<p class='stm mis'>1351</p>
+<p class='stm mis'>1352</p>
+<p class='pln'>1353</p>
+<p class='stm run hide'>1354</p>
+<p class='pln'>1355</p>
+<p class='stm mis'>1356</p>
+<p class='pln'>1357</p>
+<p class='pln'>1358</p>
+<p class='pln'>1359</p>
+<p class='pln'>1360</p>
+<p class='pln'>1361</p>
+<p class='pln'>1362</p>
+<p class='pln'>1363</p>
+<p class='pln'>1364</p>
+<p class='pln'>1365</p>
+<p class='pln'>1366</p>
+<p class='pln'>1367</p>
+<p class='pln'>1368</p>
+<p class='pln'>1369</p>
+<p class='pln'>1370</p>
+<p class='pln'>1371</p>
+<p class='pln'>1372</p>
+<p class='pln'>1373</p>
+<p class='pln'>1374</p>
+<p class='pln'>1375</p>
+<p class='pln'>1376</p>
+<p class='pln'>1377</p>
+<p class='pln'>1378</p>
+<p class='pln'>1379</p>
+<p class='pln'>1380</p>
+<p class='pln'>1381</p>
+<p class='pln'>1382</p>
+<p class='pln'>1383</p>
+<p class='pln'>1384</p>
+<p class='pln'>1385</p>
+<p class='pln'>1386</p>
+<p class='pln'>1387</p>
+<p class='pln'>1388</p>
+<p class='pln'>1389</p>
+<p class='pln'>1390</p>
+<p class='pln'>1391</p>
+<p class='pln'>1392</p>
+<p class='pln'>1393</p>
+<p class='pln'>1394</p>
+<p class='pln'>1395</p>
+<p class='pln'>1396</p>
+<p class='pln'>1397</p>
+<p class='pln'>1398</p>
+<p class='pln'>1399</p>
+<p class='pln'>1400</p>
+<p class='stm mis'>1401</p>
+<p class='stm mis'>1402</p>
+<p class='stm mis'>1403</p>
+<p class='stm mis'>1404</p>
+<p class='stm mis'>1405</p>
+<p class='stm mis'>1406</p>
+<p class='pln'>1407</p>
+<p class='stm run hide'>1408</p>
+<p class='stm mis'>1409</p>
+<p class='pln'>1410</p>
+<p class='pln'>1411</p>
+<p class='pln'>1412</p>
+<p class='pln'>1413</p>
+<p class='pln'>1414</p>
+<p class='pln'>1415</p>
+<p class='pln'>1416</p>
+<p class='pln'>1417</p>
+<p class='pln'>1418</p>
+<p class='pln'>1419</p>
+<p class='pln'>1420</p>
+<p class='pln'>1421</p>
+<p class='pln'>1422</p>
+<p class='pln'>1423</p>
+<p class='pln'>1424</p>
+<p class='pln'>1425</p>
+<p class='pln'>1426</p>
+<p class='pln'>1427</p>
+<p class='pln'>1428</p>
+<p class='pln'>1429</p>
+<p class='pln'>1430</p>
+<p class='pln'>1431</p>
+<p class='pln'>1432</p>
+<p class='pln'>1433</p>
+<p class='pln'>1434</p>
+<p class='pln'>1435</p>
+<p class='pln'>1436</p>
+<p class='stm mis'>1437</p>
+<p class='pln'>1438</p>
+<p class='stm mis'>1439</p>
+<p class='stm mis'>1440</p>
+<p class='stm mis'>1441</p>
+<p class='pln'>1442</p>
+<p class='stm mis'>1443</p>
+<p class='stm mis'>1444</p>
+<p class='stm mis'>1445</p>
+<p class='pln'>1446</p>
+<p class='stm mis'>1447</p>
+<p class='stm mis'>1448</p>
+<p class='pln'>1449</p>
+<p class='stm run hide'>1450</p>
+<p class='stm mis'>1451</p>
+<p class='pln'>1452</p>
+<p class='pln'>1453</p>
+<p class='pln'>1454</p>
+<p class='pln'>1455</p>
+<p class='pln'>1456</p>
+<p class='stm mis'>1457</p>
+<p class='stm mis'>1458</p>
+<p class='stm mis'>1459</p>
+<p class='stm mis'>1460</p>
+<p class='pln'>1461</p>
+<p class='stm run hide'>1462</p>
+<p class='pln'>1463</p>
+<p class='pln'>1464</p>
+<p class='stm mis'>1465</p>
+<p class='pln'>1466</p>
+<p class='pln'>1467</p>
+<p class='pln'>1468</p>
+<p class='pln'>1469</p>
+<p class='pln'>1470</p>
+<p class='pln'>1471</p>
+<p class='pln'>1472</p>
+<p class='pln'>1473</p>
+<p class='pln'>1474</p>
+<p class='pln'>1475</p>
+<p class='pln'>1476</p>
+<p class='pln'>1477</p>
+<p class='pln'>1478</p>
+<p class='stm mis'>1479</p>
+<p class='stm mis'>1480</p>
+<p class='stm mis'>1481</p>
+<p class='stm mis'>1482</p>
+<p class='stm mis'>1483</p>
+<p class='stm mis'>1484</p>
+<p class='stm mis'>1485</p>
+<p class='pln'>1486</p>
+<p class='stm run hide'>1487</p>
+<p class='stm mis'>1488</p>
+<p class='pln'>1489</p>
+<p class='pln'>1490</p>
+<p class='pln'>1491</p>
+<p class='pln'>1492</p>
+<p class='pln'>1493</p>
+<p class='pln'>1494</p>
+<p class='pln'>1495</p>
+<p class='pln'>1496</p>
+<p class='pln'>1497</p>
+<p class='pln'>1498</p>
+<p class='pln'>1499</p>
+<p class='pln'>1500</p>
+<p class='pln'>1501</p>
+<p class='pln'>1502</p>
+<p class='pln'>1503</p>
+<p class='pln'>1504</p>
+<p class='pln'>1505</p>
+<p class='pln'>1506</p>
+<p class='stm mis'>1507</p>
+<p class='stm mis'>1508</p>
+<p class='stm mis'>1509</p>
+<p class='stm mis'>1510</p>
+<p class='stm mis'>1511</p>
+<p class='stm mis'>1512</p>
+<p class='stm mis'>1513</p>
+<p class='stm mis'>1514</p>
+<p class='stm mis'>1515</p>
+<p class='stm mis'>1516</p>
+<p class='stm mis'>1517</p>
+<p class='stm mis'>1518</p>
+<p class='stm mis'>1519</p>
+<p class='stm mis'>1520</p>
+<p class='stm mis'>1521</p>
+<p class='stm mis'>1522</p>
+<p class='stm mis'>1523</p>
+<p class='stm mis'>1524</p>
+<p class='pln'>1525</p>
+<p class='stm run hide'>1526</p>
+<p class='stm mis'>1527</p>
+<p class='pln'>1528</p>
+<p class='pln'>1529</p>
+<p class='pln'>1530</p>
+<p class='pln'>1531</p>
+<p class='pln'>1532</p>
+<p class='pln'>1533</p>
+<p class='stm mis'>1534</p>
+<p class='stm mis'>1535</p>
+<p class='stm mis'>1536</p>
+<p class='stm mis'>1537</p>
+<p class='stm mis'>1538</p>
+<p class='stm mis'>1539</p>
+<p class='stm mis'>1540</p>
+<p class='stm mis'>1541</p>
+<p class='pln'>1542</p>
+<p class='stm run hide'>1543</p>
+<p class='stm mis'>1544</p>
+<p class='pln'>1545</p>
+<p class='pln'>1546</p>
+<p class='pln'>1547</p>
+<p class='pln'>1548</p>
+<p class='pln'>1549</p>
+<p class='pln'>1550</p>
+<p class='pln'>1551</p>
+<p class='pln'>1552</p>
+<p class='pln'>1553</p>
+<p class='pln'>1554</p>
+<p class='pln'>1555</p>
+<p class='pln'>1556</p>
+<p class='pln'>1557</p>
+<p class='pln'>1558</p>
+<p class='pln'>1559</p>
+<p class='pln'>1560</p>
+<p class='pln'>1561</p>
+<p class='pln'>1562</p>
+<p class='pln'>1563</p>
+<p class='stm mis'>1564</p>
+<p class='stm mis'>1565</p>
+<p class='stm mis'>1566</p>
+<p class='pln'>1567</p>
+<p class='stm run hide'>1568</p>
+<p class='stm mis'>1569</p>
+<p class='pln'>1570</p>
+<p class='pln'>1571</p>
+<p class='pln'>1572</p>
+<p class='pln'>1573</p>
+<p class='pln'>1574</p>
+<p class='pln'>1575</p>
+<p class='pln'>1576</p>
+<p class='pln'>1577</p>
+<p class='pln'>1578</p>
+<p class='pln'>1579</p>
+<p class='pln'>1580</p>
+<p class='pln'>1581</p>
+<p class='pln'>1582</p>
+<p class='pln'>1583</p>
+<p class='stm mis'>1584</p>
+<p class='stm mis'>1585</p>
+<p class='stm mis'>1586</p>
+<p class='pln'>1587</p>
+<p class='stm run hide'>1588</p>
+<p class='stm mis'>1589</p>
+<p class='pln'>1590</p>
+<p class='pln'>1591</p>
+<p class='pln'>1592</p>
+<p class='pln'>1593</p>
+<p class='pln'>1594</p>
+<p class='pln'>1595</p>
+<p class='pln'>1596</p>
+<p class='pln'>1597</p>
+<p class='pln'>1598</p>
+<p class='pln'>1599</p>
+<p class='pln'>1600</p>
+<p class='pln'>1601</p>
+<p class='stm mis'>1602</p>
+<p class='stm mis'>1603</p>
+<p class='stm mis'>1604</p>
+<p class='pln'>1605</p>
+<p class='stm run hide'>1606</p>
+<p class='pln'>1607</p>
+<p class='stm run hide'>1608</p>
+<p class='pln'>1609</p>
+<p class='pln'>1610</p>
+<p class='pln'>1611</p>
+<p class='pln'>1612</p>
+<p class='pln'>1613</p>
+<p class='pln'>1614</p>
+<p class='pln'>1615</p>
+<p class='pln'>1616</p>
+<p class='pln'>1617</p>
+<p class='pln'>1618</p>
+<p class='pln'>1619</p>
+<p class='pln'>1620</p>
+<p class='pln'>1621</p>
+<p class='pln'>1622</p>
+<p class='pln'>1623</p>
+<p class='pln'>1624</p>
+<p class='pln'>1625</p>
+<p class='pln'>1626</p>
+<p class='pln'>1627</p>
+<p class='pln'>1628</p>
+<p class='exc'>1629</p>
+<p class='pln'>1630</p>
+<p class='exc'>1631</p>
+<p class='exc'>1632</p>
+<p class='exc'>1633</p>
+<p class='pln'>1634</p>
+<p class='exc'>1635</p>
+<p class='exc'>1636</p>
+<p class='pln'>1637</p>
+<p class='stm run hide'>1638</p>
+<p class='stm mis'>1639</p>
+<p class='stm mis'>1640</p>
+<p class='stm mis'>1641</p>
+<p class='stm mis'>1642</p>
+<p class='stm mis'>1643</p>
+<p class='pln'>1644</p>
+<p class='stm run hide'>1645</p>
+<p class='stm mis'>1646</p>
+<p class='stm mis'>1647</p>
+<p class='pln'>1648</p>
+<p class='stm run hide'>1649</p>
+<p class='stm mis'>1650</p>
+<p class='pln'>1651</p>
+<p class='pln'>1652</p>
+<p class='stm mis'>1653</p>
+<p class='pln'>1654</p>
+<p class='stm run hide'>1655</p>
+<p class='stm mis'>1656</p>
+<p class='stm mis'>1657</p>
+<p class='stm mis'>1658</p>
+<p class='pln'>1659</p>
+<p class='stm run hide'>1660</p>
+<p class='stm mis'>1661</p>
+<p class='stm mis'>1662</p>
+<p class='stm mis'>1663</p>
+<p class='pln'>1664</p>
+<p class='stm run hide'>1665</p>
+<p class='stm mis'>1666</p>
+<p class='pln'>1667</p>
+<p class='pln'>1668</p>
+<p class='stm mis'>1669</p>
+<p class='pln'>1670</p>
+<p class='stm run hide'>1671</p>
+<p class='pln'>1672</p>
+<p class='stm run hide'>1673</p>
+<p class='stm mis'>1674</p>
+<p class='pln'>1675</p>
+<p class='pln'>1676</p>
+<p class='pln'>1677</p>
+<p class='pln'>1678</p>
+<p class='pln'>1679</p>
+<p class='pln'>1680</p>
+<p class='pln'>1681</p>
+<p class='pln'>1682</p>
+<p class='pln'>1683</p>
+<p class='pln'>1684</p>
+<p class='pln'>1685</p>
+<p class='pln'>1686</p>
+<p class='pln'>1687</p>
+<p class='pln'>1688</p>
+<p class='pln'>1689</p>
+<p class='pln'>1690</p>
+<p class='pln'>1691</p>
+<p class='pln'>1692</p>
+<p class='pln'>1693</p>
+<p class='stm mis'>1694</p>
+<p class='stm mis'>1695</p>
+<p class='stm mis'>1696</p>
+<p class='pln'>1697</p>
+<p class='stm run hide'>1698</p>
+<p class='stm mis'>1699</p>
+<p class='pln'>1700</p>
+<p class='pln'>1701</p>
+<p class='pln'>1702</p>
+<p class='pln'>1703</p>
+<p class='pln'>1704</p>
+<p class='pln'>1705</p>
+<p class='pln'>1706</p>
+<p class='pln'>1707</p>
+<p class='pln'>1708</p>
+<p class='pln'>1709</p>
+<p class='pln'>1710</p>
+<p class='pln'>1711</p>
+<p class='pln'>1712</p>
+<p class='pln'>1713</p>
+<p class='pln'>1714</p>
+<p class='pln'>1715</p>
+<p class='pln'>1716</p>
+<p class='pln'>1717</p>
+<p class='pln'>1718</p>
+<p class='pln'>1719</p>
+<p class='pln'>1720</p>
+<p class='pln'>1721</p>
+<p class='pln'>1722</p>
+<p class='stm mis'>1723</p>
+<p class='stm mis'>1724</p>
+<p class='stm mis'>1725</p>
+<p class='pln'>1726</p>
+<p class='stm run hide'>1727</p>
+<p class='stm mis'>1728</p>
+<p class='pln'>1729</p>
+<p class='pln'>1730</p>
+<p class='pln'>1731</p>
+<p class='pln'>1732</p>
+<p class='pln'>1733</p>
+<p class='pln'>1734</p>
+<p class='pln'>1735</p>
+<p class='pln'>1736</p>
+<p class='pln'>1737</p>
+<p class='pln'>1738</p>
+<p class='pln'>1739</p>
+<p class='pln'>1740</p>
+<p class='pln'>1741</p>
+<p class='pln'>1742</p>
+<p class='pln'>1743</p>
+<p class='pln'>1744</p>
+<p class='pln'>1745</p>
+<p class='pln'>1746</p>
+<p class='pln'>1747</p>
+<p class='pln'>1748</p>
+<p class='pln'>1749</p>
+<p class='pln'>1750</p>
+<p class='pln'>1751</p>
+<p class='stm mis'>1752</p>
+<p class='stm mis'>1753</p>
+<p class='stm mis'>1754</p>
+<p class='pln'>1755</p>
+<p class='stm run hide'>1756</p>
+<p class='stm mis'>1757</p>
+<p class='pln'>1758</p>
+<p class='pln'>1759</p>
+<p class='pln'>1760</p>
+<p class='pln'>1761</p>
+<p class='pln'>1762</p>
+<p class='pln'>1763</p>
+<p class='pln'>1764</p>
+<p class='pln'>1765</p>
+<p class='pln'>1766</p>
+<p class='pln'>1767</p>
+<p class='pln'>1768</p>
+<p class='pln'>1769</p>
+<p class='pln'>1770</p>
+<p class='pln'>1771</p>
+<p class='pln'>1772</p>
+<p class='pln'>1773</p>
+<p class='pln'>1774</p>
+<p class='pln'>1775</p>
+<p class='pln'>1776</p>
+<p class='pln'>1777</p>
+<p class='pln'>1778</p>
+<p class='pln'>1779</p>
+<p class='pln'>1780</p>
+<p class='pln'>1781</p>
+<p class='pln'>1782</p>
+<p class='pln'>1783</p>
+<p class='pln'>1784</p>
+<p class='pln'>1785</p>
+<p class='pln'>1786</p>
+<p class='pln'>1787</p>
+<p class='pln'>1788</p>
+<p class='pln'>1789</p>
+<p class='pln'>1790</p>
+<p class='pln'>1791</p>
+<p class='pln'>1792</p>
+<p class='pln'>1793</p>
+<p class='pln'>1794</p>
+<p class='pln'>1795</p>
+<p class='pln'>1796</p>
+<p class='pln'>1797</p>
+<p class='pln'>1798</p>
+<p class='pln'>1799</p>
+<p class='pln'>1800</p>
+<p class='pln'>1801</p>
+<p class='pln'>1802</p>
+<p class='pln'>1803</p>
+<p class='pln'>1804</p>
+<p class='pln'>1805</p>
+<p class='pln'>1806</p>
+<p class='pln'>1807</p>
+<p class='pln'>1808</p>
+<p class='pln'>1809</p>
+<p class='pln'>1810</p>
+<p class='pln'>1811</p>
+<p class='pln'>1812</p>
+<p class='pln'>1813</p>
+<p class='pln'>1814</p>
+<p class='pln'>1815</p>
+<p class='pln'>1816</p>
+<p class='pln'>1817</p>
+<p class='pln'>1818</p>
+<p class='pln'>1819</p>
+<p class='pln'>1820</p>
+<p class='pln'>1821</p>
+<p class='pln'>1822</p>
+<p class='pln'>1823</p>
+<p class='pln'>1824</p>
+<p class='pln'>1825</p>
+<p class='pln'>1826</p>
+<p class='pln'>1827</p>
+<p class='pln'>1828</p>
+<p class='pln'>1829</p>
+<p class='stm mis'>1830</p>
+<p class='stm mis'>1831</p>
+<p class='pln'>1832</p>
+<p class='pln'>1833</p>
+<p class='stm mis'>1834</p>
+<p class='pln'>1835</p>
+<p class='pln'>1836</p>
+<p class='stm mis'>1837</p>
+<p class='pln'>1838</p>
+<p class='pln'>1839</p>
+<p class='stm mis'>1840</p>
+<p class='pln'>1841</p>
+<p class='pln'>1842</p>
+<p class='stm mis'>1843</p>
+<p class='pln'>1844</p>
+<p class='pln'>1845</p>
+<p class='stm mis'>1846</p>
+<p class='pln'>1847</p>
+<p class='pln'>1848</p>
+<p class='pln'>1849</p>
+<p class='stm run hide'>1850</p>
+<p class='pln'>1851</p>
+<p class='pln'>1852</p>
+<p class='stm run hide'>1853</p>
+<p class='pln'>1854</p>
+<p class='stm mis'>1855</p>
+<p class='pln'>1856</p>
+<p class='pln'>1857</p>
+<p class='pln'>1858</p>
+<p class='pln'>1859</p>
+<p class='pln'>1860</p>
+<p class='pln'>1861</p>
+<p class='pln'>1862</p>
+<p class='pln'>1863</p>
+<p class='pln'>1864</p>
+<p class='pln'>1865</p>
+<p class='pln'>1866</p>
+<p class='pln'>1867</p>
+<p class='pln'>1868</p>
+<p class='pln'>1869</p>
+<p class='pln'>1870</p>
+<p class='pln'>1871</p>
+<p class='pln'>1872</p>
+<p class='pln'>1873</p>
+<p class='pln'>1874</p>
+<p class='pln'>1875</p>
+<p class='pln'>1876</p>
+<p class='stm mis'>1877</p>
+<p class='stm mis'>1878</p>
+<p class='stm mis'>1879</p>
+<p class='pln'>1880</p>
+<p class='stm run hide'>1881</p>
+<p class='stm mis'>1882</p>
+<p class='pln'>1883</p>
+<p class='pln'>1884</p>
+<p class='pln'>1885</p>
+<p class='pln'>1886</p>
+<p class='pln'>1887</p>
+<p class='stm mis'>1888</p>
+<p class='stm mis'>1889</p>
+<p class='pln'>1890</p>
+<p class='stm run hide'>1891</p>
+<p class='pln'>1892</p>
+<p class='pln'>1893</p>
+<p class='stm mis'>1894</p>
+<p class='pln'>1895</p>
+<p class='pln'>1896</p>
+<p class='pln'>1897</p>
+<p class='pln'>1898</p>
+<p class='pln'>1899</p>
+<p class='pln'>1900</p>
+<p class='pln'>1901</p>
+<p class='pln'>1902</p>
+<p class='pln'>1903</p>
+<p class='pln'>1904</p>
+<p class='pln'>1905</p>
+<p class='pln'>1906</p>
+<p class='pln'>1907</p>
+<p class='pln'>1908</p>
+<p class='pln'>1909</p>
+<p class='pln'>1910</p>
+<p class='pln'>1911</p>
+<p class='stm mis'>1912</p>
+<p class='stm mis'>1913</p>
+<p class='stm mis'>1914</p>
+<p class='stm mis'>1915</p>
+<p class='stm mis'>1916</p>
+<p class='stm mis'>1917</p>
+<p class='pln'>1918</p>
+<p class='stm run hide'>1919</p>
+<p class='pln'>1920</p>
+<p class='stm run hide'>1921</p>
+<p class='pln'>1922</p>
+<p class='stm mis'>1923</p>
+<p class='pln'>1924</p>
+<p class='pln'>1925</p>
+<p class='pln'>1926</p>
+<p class='pln'>1927</p>
+<p class='pln'>1928</p>
+<p class='pln'>1929</p>
+<p class='pln'>1930</p>
+<p class='pln'>1931</p>
+<p class='stm mis'>1932</p>
+<p class='stm mis'>1933</p>
+<p class='stm mis'>1934</p>
+<p class='stm mis'>1935</p>
+<p class='pln'>1936</p>
+<p class='stm run hide'>1937</p>
+<p class='pln'>1938</p>
+<p class='stm mis'>1939</p>
+<p class='pln'>1940</p>
+<p class='pln'>1941</p>
+<p class='pln'>1942</p>
+<p class='pln'>1943</p>
+<p class='pln'>1944</p>
+<p class='pln'>1945</p>
+<p class='pln'>1946</p>
+<p class='pln'>1947</p>
+<p class='stm mis'>1948</p>
+<p class='stm mis'>1949</p>
+<p class='stm mis'>1950</p>
+<p class='stm mis'>1951</p>
+<p class='stm mis'>1952</p>
+<p class='stm mis'>1953</p>
+<p class='pln'>1954</p>
+<p class='pln'>1955</p>
+<p class='exc'>1956</p>
+<p class='exc'>1957</p>
+<p class='pln'>1958</p>
+<p class='pln'>1959</p>
+<p class='pln'>1960</p>
+
+</td>
+<td class='text' valign='top'>
+<p class='pln'>&quot;&quot;&quot; Test cogapp.</p>
+<p class='pln'>&nbsp; &nbsp; http://nedbatchelder.com/code/cog</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; Copyright 2004-2009, Ned Batchelder.</p>
+<p class='pln'>&quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>import unittest</p>
+<p class='stm run hide'>import os, random, re, StringIO, stat, sys, tempfile</p>
+<p class='stm run hide'>import path&nbsp; &nbsp;&nbsp; # Non-standard, from http://www.jorendorff.com/articles/python/path</p>
+<p class='stm run hide'>from cogapp import Cog, CogOptions, CogGenerator</p>
+<p class='stm run hide'>from cogapp import CogError, CogUsageError, CogGeneratedError</p>
+<p class='stm run hide'>from cogapp import usage, __version__</p>
+<p class='stm run hide'>from whiteutils import reindentBlock</p>
+<p class='stm run hide'>from makefiles import *</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>class TestCase(unittest.TestCase):</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot; Base class for all Cog test cases.&nbsp; Adds utility methods I like.</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def assertRaisesMsg(self, excClass, msg, callableObj, *args, **kwargs):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot; Just like unittest.TestCase.assertRaises,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; but checks that the message is right too.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; try:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; callableObj(*args, **kwargs)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; except excClass, exc:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; excMsg = str(exc)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if not msg:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # No message provided: it passes.</p>
+<p class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp; #pragma: no cover</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; elif excMsg == msg:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Message provided, and we got the right message: it passes.</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return</p>
+<p class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else:&nbsp;&nbsp; #pragma: no cover</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Message provided, and it didn&#39;t match: fail!</p>
+<p class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raise self.failureException(&quot;Right exception, wrong message: got &#39;%s&#39; expected &#39;%s&#39;&quot; % (excMsg, msg))</p>
+<p class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; else:&nbsp;&nbsp; #pragma: no cover</p>
+<p class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if hasattr(excClass,&#39;__name__&#39;):</p>
+<p class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; excName = excClass.__name__</p>
+<p class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else:</p>
+<p class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; excName = str(excClass)</p>
+<p class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raise self.failureException(&quot;Expected to raise %s, didn&#39;t get an exception at all&quot; % excName)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>class CogTestsInMemory(TestCase):</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot; Test cases for cogapp.Cog()</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testNoCog(self):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; strings = [</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;&#39;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39; &#39;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39; \t \t \tx&#39;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;hello&#39;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;the cat\nin the\nhat.&#39;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;Horton\n\tHears A\n\t\tWho&#39;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; for s in strings:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(Cog().processString(s), s)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testSimple(self):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Some text.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is line one\\n&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is line two&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gobbledegook.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; epilogue.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; outfile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Some text.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is line one\\n&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is line two&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line one</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line two</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; epilogue.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(Cog().processString(infile), outfile)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testEmptyCog(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # The cog clause can be totally empty.&nbsp; Not sure why you&#39;d want it,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # but it works.</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hello</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; goodbye</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = reindentBlock(infile)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(Cog().processString(infile), infile)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testMultipleCogs(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # One file can have many cog chunks, even abutting each other.</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;chunk1&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; chunk1</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;chunk2&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; chunk2</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; between chunks</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;chunk3&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; chunk3</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = reindentBlock(infile)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(Cog().processString(infile), infile)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testTrimBlankLines(self):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;This is line one\\n&quot;, trimblanklines=True)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&#39;&#39;&#39;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line two</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;&#39;&#39;, dedent=True, trimblanklines=True)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is line three&quot;, trimblanklines=True)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line one</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line two</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line three</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = reindentBlock(infile)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(Cog().processString(infile), infile)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testTrimEmptyBlankLines(self):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;This is line one\\n&quot;, trimblanklines=True)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&#39;&#39;&#39;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line two</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;&#39;&#39;, dedent=True, trimblanklines=True)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&#39;&#39;, dedent=True, trimblanklines=True)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is line three&quot;, trimblanklines=True)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line one</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line two</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line three</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = reindentBlock(infile)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(Cog().processString(infile), infile)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def test22EndOfLine(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # In Python 2.2, this cog file was not parsing because the</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # last line is indented but didn&#39;t end with a newline.</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for i in range(3):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;%d\\n&quot; % i)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = reindentBlock(infile)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(Cog().processString(infile), infile)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testIndentedCode(self):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; first line</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for i in range(3):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;xx%d\\n&quot; % i)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx0</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx1</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx2</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; last line</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = reindentBlock(infile)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(Cog().processString(infile), infile)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testPrefixedCode(self):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --import cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --for i in range(3):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&nbsp; &nbsp; cog.out(&quot;xx%d\\n&quot; % i)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx0</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx1</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx2</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = reindentBlock(infile)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(Cog().processString(infile), infile)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testPrefixedIndentedCode(self):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; prologue</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&nbsp;&nbsp; import cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&nbsp;&nbsp; for i in range(3):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&nbsp; &nbsp; &nbsp;&nbsp; cog.out(&quot;xy%d\\n&quot; % i)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xy0</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xy1</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xy2</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = reindentBlock(infile)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(Cog().processString(infile), infile)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testBogusPrefixMatch(self):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; prologue</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # This comment should not be clobbered by removing the pound sign.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for i in range(3):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;xy%d\\n&quot; % i)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xy0</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xy1</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xy2</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = reindentBlock(infile)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(Cog().processString(infile), infile)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testNoFinalNewline(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # If the cog&#39;ed output has no final newline,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # it shouldn&#39;t eat up the cog terminator.</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; prologue</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for i in range(3):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;%d&quot; % i)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 012</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; epilogue</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = reindentBlock(infile)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(Cog().processString(infile), infile)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testNoOutputAtAll(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # If there is absolutely no cog output, that&#39;s ok.</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; prologue</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i = 1</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; epilogue</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = reindentBlock(infile)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(Cog().processString(infile), infile)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testPurelyBlankLine(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # If there is a blank line in the cog code with no whitespace</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # prefix, that should be OK.</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; prologue</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import sys</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;Hello&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;There&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; HelloThere</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; epilogue</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = reindentBlock(infile.replace(&#39;$&#39;, &#39;&#39;))</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(Cog().processString(infile), infile)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testEmptyOutl(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Alexander Belchenko suggested the string argument to outl should</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # be optional.&nbsp; Does it work?</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; prologue</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;x&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl()</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;y&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(trimblanklines=True)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;z&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; y</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; z</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; epilogue</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = reindentBlock(infile)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(Cog().processString(infile), infile)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testFirstLineNum(self):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fooey</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;started at line number %d&quot; % cog.firstLineNum)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; started at line number 2</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;and again at line %d&quot; % cog.firstLineNum)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; and again at line 8</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = reindentBlock(infile)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(Cog().processString(infile), infile)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testCompactOneLineCode(self):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; first line</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hey: [[[cog cog.outl(&quot;hello %d&quot; % (3*3*3*3)) ]]] looky!</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get rid of this!</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; last line</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; outfile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; first line</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hey: [[[cog cog.outl(&quot;hello %d&quot; % (3*3*3*3)) ]]] looky!</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hello 81</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; last line</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = reindentBlock(infile)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(Cog().processString(infile), reindentBlock(outfile))</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testInsideOutCompact(self):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; first line</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hey?: ]]] what is this? [[[cog strange!</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get rid of this!</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; last line</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertRaisesMsg(CogError,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &quot;infile.txt(2): Cog code markers inverted&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Cog().processString,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; reindentBlock(infile), &quot;infile.txt&quot;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testSharingGlobals(self):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; first line</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hey: [[[cog s=&quot;hey there&quot; ]]] looky!</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; more literal junk.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog cog.outl(s) ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; last line</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; outfile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; first line</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hey: [[[cog s=&quot;hey there&quot; ]]] looky!</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; more literal junk.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog cog.outl(s) ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hey there</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; last line</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; infile = reindentBlock(infile)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(Cog().processString(infile), reindentBlock(outfile))</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>class CogOptionsTests(TestCase):</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot; Test the CogOptions class.</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testEquality(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; o = CogOptions()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; p = CogOptions()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(o, p)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; o.parseArgs([&#39;-r&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertNotEqual(o, p)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; p.parseArgs([&#39;-r&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(o, p)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testCloning(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; o = CogOptions()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; o.parseArgs([&#39;-I&#39;, &#39;fooey&#39;, &#39;-I&#39;, &#39;booey&#39;, &#39;-s&#39;, &#39; /*x*/&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; p = o.clone()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(o, p)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; p.parseArgs([&#39;-I&#39;, &#39;huey&#39;, &#39;-D&#39;, &#39;foo=quux&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertNotEqual(o, p)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; q = CogOptions()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; q.parseArgs([&#39;-I&#39;, &#39;fooey&#39;, &#39;-I&#39;, &#39;booey&#39;, &#39;-s&#39;, &#39; /*x*/&#39;, &#39;-I&#39;, &#39;huey&#39;, &#39;-D&#39;, &#39;foo=quux&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(p, q)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testCombiningFlags(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Single-character flags can be combined.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; o = CogOptions()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; o.parseArgs([&#39;-e&#39;, &#39;-r&#39;, &#39;-z&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; p = CogOptions()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; p.parseArgs([&#39;-erz&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(o, p)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>class FileStructureTests(TestCase):</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot; Test cases to check that we&#39;re properly strict about the structure</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; of files.</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def isBad(self, infile, msg=None):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; infile = reindentBlock(infile)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertRaisesMsg(CogError,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; msg,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Cog().processString, (infile), &#39;infile.txt&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testBeginNoEnd(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Fooey</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&#39;hello&#39;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.isBad(infile, &quot;infile.txt(2): Cog block begun but never ended.&quot;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testNoEoo(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Fooey</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&#39;hello&#39;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.isBad(infile, &quot;infile.txt(4): Missing &#39;[[[end]]]&#39; before end of file.&quot;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; infile2 = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Fooey</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&#39;hello&#39;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&#39;goodbye&#39;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.isBad(infile2, &quot;infile.txt(5): Unexpected &#39;[[[cog&#39;&quot;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testStartWithEnd(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.isBad(infile, &quot;infile.txt(1): Unexpected &#39;]]]&#39;&quot;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; infile2 = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&#39;hello&#39;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.isBad(infile2, &quot;infile.txt(5): Unexpected &#39;]]]&#39;&quot;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testStartWithEoo(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.isBad(infile, &quot;infile.txt(1): Unexpected &#39;[[[end]]]&#39;&quot;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; infile2 = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&#39;hello&#39;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.isBad(infile2, &quot;infile.txt(5): Unexpected &#39;[[[end]]]&#39;&quot;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testNoEnd(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.isBad(infile, &quot;infile.txt(3): Unexpected &#39;[[[end]]]&#39;&quot;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; infile2 = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&#39;hello&#39;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.isBad(infile2, &quot;infile.txt(7): Unexpected &#39;[[[end]]]&#39;&quot;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testTwoBegins(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.isBad(infile, &quot;infile.txt(2): Unexpected &#39;[[[cog&#39;&quot;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; infile2 = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.isBad(infile2, &quot;infile.txt(6): Unexpected &#39;[[[cog&#39;&quot;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testTwoEnds(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.isBad(infile, &quot;infile.txt(4): Unexpected &#39;]]]&#39;&quot;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; infile2 = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.isBad(infile2, &quot;infile.txt(8): Unexpected &#39;]]]&#39;&quot;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>class CogErrorTests(TestCase):</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot; Test cases for cog.error().</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testErrorMsg(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog cog.error(&quot;This ain&#39;t right!&quot;)]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; infile = reindentBlock(infile)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertRaisesMsg(CogGeneratedError,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;This ain&#39;t right!&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Cog().processString, (infile))</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testErrorNoMsg(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog cog.error()]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; infile = reindentBlock(infile)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertRaisesMsg(CogGeneratedError,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;Error raised by cog generator.&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Cog().processString, (infile))</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testNoErrorIfErrorNotCalled(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --import cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --for i in range(3):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&nbsp; &nbsp; if i &gt; 10:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&nbsp; &nbsp; &nbsp; &nbsp; cog.error(&quot;Something is amiss!&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&nbsp; &nbsp; cog.out(&quot;xx%d\\n&quot; % i)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx0</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx1</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx2</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; infile = reindentBlock(infile)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(Cog().processString(infile), infile)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>class CogGeneratorGetCodeTests(TestCase):</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot; Unit tests against CogGenerator to see if its getCode() method works</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; properly.</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def setUp(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot; All tests get a generator to use, and short same-length names for</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; the functions we&#39;re going to use.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.gen = CogGenerator()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.m = self.gen.parseMarker</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.l = self.gen.parseLine</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testEmpty(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.m(&#39;// [[[cog&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.m(&#39;// ]]]&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(self.gen.getCode(), &#39;&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testSimple(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.m(&#39;// [[[cog&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.l(&#39;&nbsp; print &quot;hello&quot;&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.l(&#39;&nbsp; print &quot;bye&quot;&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.m(&#39;// ]]]&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(self.gen.getCode(), &#39;print &quot;hello&quot;\nprint &quot;bye&quot;&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testCompressed1(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # For a while, I supported compressed code blocks, but no longer.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.m(&#39;// [[[cog: print &quot;&quot;&quot;&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.l(&#39;// hello&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.l(&#39;// bye&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.m(&#39;// &quot;&quot;&quot;)]]]&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(self.gen.getCode(), &#39;hello\nbye&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testCompressed2(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # For a while, I supported compressed code blocks, but no longer.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.m(&#39;// [[[cog: print &quot;&quot;&quot;&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.l(&#39;hello&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.l(&#39;bye&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.m(&#39;// &quot;&quot;&quot;)]]]&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(self.gen.getCode(), &#39;hello\nbye&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testCompressed3(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # For a while, I supported compressed code blocks, but no longer.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.m(&#39;// [[[cog&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.l(&#39;print &quot;&quot;&quot;hello&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.l(&#39;bye&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.m(&#39;// &quot;&quot;&quot;)]]]&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(self.gen.getCode(), &#39;print &quot;&quot;&quot;hello\nbye&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testCompressed4(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # For a while, I supported compressed code blocks, but no longer.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.m(&#39;// [[[cog: print &quot;&quot;&quot;&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.l(&#39;hello&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.l(&#39;bye&quot;&quot;&quot;)&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.m(&#39;// ]]]&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(self.gen.getCode(), &#39;hello\nbye&quot;&quot;&quot;)&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testNoCommonPrefixForMarkers(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # It&#39;s important to be able to use #if 0 to hide lines from a</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # C++ compiler.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.m(&#39;#if 0 //[[[cog&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.l(&#39;\timport cog, sys&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.l(&#39;&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.l(&#39;\tprint sys.argv&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.m(&#39;#endif //]]]&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(self.gen.getCode(), &#39;import cog, sys\n\nprint sys.argv&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>class TestCaseWithTempDir(TestCase):</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def newCog(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot; Initialize the cog members for another run.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Create a cog engine, and catch its output.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog = Cog()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.output = StringIO.StringIO()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.setOutput(stdout=self.output, stderr=self.output)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def setUp(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Create a temporary directory.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.tempdir = path.path(tempfile.gettempdir()) / (&#39;testcog_tempdir_&#39; + str(random.random())[2:])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.tempdir.mkdir()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.olddir = os.getcwd()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; os.chdir(self.tempdir)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.newCog()</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def tearDown(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; os.chdir(self.olddir)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Get rid of the temporary directory.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.tempdir.rmtree()</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def assertFilesSame(self, sFName1, sFName2):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual((self.tempdir / sFName1).text(), (self.tempdir / sFName2).text())</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def assertFileContent(self, sFName, sContent):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; sAbsName = self.tempdir / sFName</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; f = open(sAbsName, &#39;rb&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; try:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sFileContent = f.read()</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; finally:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; f.close()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(sFileContent, sContent)</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>class ArgumentHandlingTests(TestCaseWithTempDir):</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testArgumentFailure(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Return value 2 means usage problem.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; assert(self.cog.main([&#39;argv0&#39;, &#39;-j&#39;]) == 2)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; output = self.output.getvalue()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; assert(output.find(&quot;option -j not recognized&quot;) &gt;= 0)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertRaises(CogUsageError, self.cog.callableMain, ([&#39;argv0&#39;]))</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertRaises(CogUsageError, self.cog.callableMain, ([&#39;argv0&#39;, &#39;-j&#39;]))</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testNoDashOAndAtFile(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cogfiles.txt&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Please run cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertRaises(CogUsageError, self.cog.callableMain, ([&#39;argv0&#39;, &#39;-o&#39;, &#39;foo&#39;, &#39;@cogfiles.txt&#39;]))</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testDashV(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; assert(self.cog.main([&#39;argv0&#39;, &#39;-v&#39;]) == 0)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; output = self.output.getvalue()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(&#39;Cog version %s\n&#39; % __version__, output)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def producesHelp(self, args):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.newCog()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; argv = [&#39;argv0&#39;] + args.split()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; assert(self.cog.main(argv) == 0)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEquals(usage, self.output.getvalue())</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testDashH(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # -h or -? anywhere on the command line should just print help.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.producesHelp(&quot;-h&quot;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.producesHelp(&quot;-?&quot;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.producesHelp(&quot;fooey.txt -h&quot;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.producesHelp(&quot;-o -r @fooey.txt -? @booey.txt&quot;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testDashOAndDashR(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cogfile.txt&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Please run cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertRaises(CogUsageError, self.cog.callableMain, ([&#39;argv0&#39;, &#39;-o&#39;, &#39;foo&#39;, &#39;-r&#39;, &#39;cogfile.txt&#39;]))</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testDashZ(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;test.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fnames = [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in fnames:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;test.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fnames = [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in fnames:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoSomething();</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoAnotherThing();</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoLastThing();</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertRaisesMsg(</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CogError, &quot;test.cog(6): Missing &#39;[[[end]]]&#39; before end of file.&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain, ([&#39;argv0&#39;, &#39;-r&#39;, &#39;test.cog&#39;]))</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.newCog()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;-z&#39;, &#39;test.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;test.cog&#39;, &#39;test.out&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testBadDashD(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertRaises(CogUsageError, self.cog.callableMain, ([&#39;argv0&#39;, &#39;-Dfooey&#39;, &#39;cog.txt&#39;]))</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertRaises(CogUsageError, self.cog.callableMain, ([&#39;argv0&#39;, &#39;-D&#39;, &#39;fooey&#39;, &#39;cog.txt&#39;]))</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>class TestFileHandling(TestCaseWithTempDir):</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testSimple(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;test.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fnames = [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in fnames:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;test.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fnames = [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in fnames:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoSomething();</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoAnotherThing();</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoLastThing();</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;test.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;test.cog&#39;, &#39;test.out&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; output = self.output.getvalue()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; assert(output.find(&quot;(changed)&quot;) &gt;= 0)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testOutputFile(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # -o sets the output file.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;test.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fnames = [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in fnames:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;test.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fnames = [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in fnames:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoSomething();</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoAnotherThing();</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoLastThing();</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-o&#39;, &#39;test.cogged&#39;, &#39;test.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;test.cogged&#39;, &#39;test.out&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testAtFile(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;one.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello world&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;one.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello world&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hello world</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;two.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;goodbye cruel world&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;two.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;goodbye cruel world&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; goodbye cruel world</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cogfiles.txt&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Please run cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; one.cog</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; two.cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;@cogfiles.txt&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;one.cog&#39;, &#39;one.out&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;two.cog&#39;, &#39;two.out&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; output = self.output.getvalue()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; assert(output.find(&quot;(changed)&quot;) &gt;= 0)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testNestedAtFile(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;one.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello world&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;one.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello world&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hello world</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;two.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;goodbye cruel world&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;two.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;goodbye cruel world&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; goodbye cruel world</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cogfiles.txt&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Please run cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; one.cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @cogfiles2.txt</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cogfiles2.txt&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # This one too, please.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; two.cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;@cogfiles.txt&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;one.cog&#39;, &#39;one.out&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;two.cog&#39;, &#39;two.out&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; output = self.output.getvalue()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; assert(output.find(&quot;(changed)&quot;) &gt;= 0)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testAtFileWithArgs(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;both.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;one: %s&quot; % globals().has_key(&#39;one&#39;))</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;two: %s&quot; % globals().has_key(&#39;two&#39;))</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;one.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;one: %s&quot; % globals().has_key(&#39;one&#39;))</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;two: %s&quot; % globals().has_key(&#39;two&#39;))</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; one: True // ONE</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; two: False // ONE</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;two.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;one: %s&quot; % globals().has_key(&#39;one&#39;))</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;two: %s&quot; % globals().has_key(&#39;two&#39;))</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; one: False // TWO</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; two: True // TWO</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cogfiles.txt&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Please run cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; both.cog -o both.one -s &#39; // ONE&#39; -D one=x</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; both.cog -o both.two -s &#39; // TWO&#39; -D two=x</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;@cogfiles.txt&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;both.one&#39;, &#39;one.out&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;both.two&#39;, &#39;two.out&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testAtFileWithBadArgCombo(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;both.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;one: %s&quot; % globals().has_key(&#39;one&#39;))</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;two: %s&quot; % globals().has_key(&#39;two&#39;))</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cogfiles.txt&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Please run cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; both.cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; both.cog -d # This is bad: -r and -d</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertRaises(CogUsageError, self.cog.callableMain, ([&#39;argv0&#39;, &#39;-r&#39;, &#39;@cogfiles.txt&#39;]))</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testAtFileWithTrickyFilenames(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;one 1.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(&quot;hello world&quot;) ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;one.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(&quot;hello world&quot;) ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hello world //xxx</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;subdir&#39;: {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;subback.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(&quot;down deep with backslashes&quot;) ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;subfwd.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(&quot;down deep with slashes&quot;) ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;subback.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(&quot;down deep with backslashes&quot;) ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; down deep with backslashes //yyy</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;subfwd.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(&quot;down deep with slashes&quot;) ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; down deep with slashes //zzz</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cogfiles.txt&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Please run cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;one 1.cog&#39; -s &#39; //xxx&#39;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; subdir\subback.cog -s &#39; //yyy&#39;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; subdir/subfwd.cog -s &#39; //zzz&#39;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-z&#39;, &#39;-r&#39;, &#39;@cogfiles.txt&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;one 1.cog&#39;, &#39;one.out&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;subdir/subback.cog&#39;, &#39;subback.out&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;subdir/subfwd.cog&#39;, &#39;subfwd.out&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>class CogTestLineEndings(TestCaseWithTempDir):</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot;Tests for -U option (force LF line-endings in output).&quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; lines_in = [&#39;Some text.&#39;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;//[[[cog&#39;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cog.outl(&quot;Cog text&quot;)&#39;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;//]]]&#39;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;gobbledegook.&#39;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;//[[[end]]]&#39;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;epilogue.&#39;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;&#39;]</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; lines_out = [&#39;Some text.&#39;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &#39;//[[[cog&#39;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &#39;cog.outl(&quot;Cog text&quot;)&#39;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &#39;//]]]&#39;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &#39;Cog text&#39;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &#39;//[[[end]]]&#39;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &#39;epilogue.&#39;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &#39;&#39;]</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testOutputNativeEol(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles({&#39;infile&#39;: &#39;\n&#39;.join(self.lines_in)})</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-o&#39;, &#39;outfile&#39;, &#39;infile&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFileContent(&#39;outfile&#39;, os.linesep.join(self.lines_out))</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testOutputLfEol(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles({&#39;infile&#39;: &#39;\n&#39;.join(self.lines_in)})</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-U&#39;, &#39;-o&#39;, &#39;outfile&#39;, &#39;infile&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFileContent(&#39;outfile&#39;, &#39;\n&#39;.join(self.lines_out))</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testReplaceNativeEol(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles({&#39;test.cog&#39;: &#39;\n&#39;.join(self.lines_in)})</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;test.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFileContent(&#39;test.cog&#39;, os.linesep.join(self.lines_out))</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testReplaceLfEol(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles({&#39;test.cog&#39;: &#39;\n&#39;.join(self.lines_in)})</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-U&#39;, &#39;-r&#39;, &#39;test.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFileContent(&#39;test.cog&#39;, &#39;\n&#39;.join(self.lines_out))</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>class TestCaseWithImports(TestCaseWithTempDir):</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot; When running tests which import modules, the sys.modules list</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; leaks from one test to the next.&nbsp; This test case class scrubs</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; the list after each run to keep the tests isolated from each other.</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def setUp(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; TestCaseWithTempDir.setUp(self)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.sysmodulekeys = list(sys.modules)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def tearDown(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; modstoscrub = [</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; modname</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for modname in sys.modules</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if modname not in self.sysmodulekeys</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; for modname in modstoscrub:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; del sys.modules[modname]</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; TestCaseWithTempDir.tearDown(self)</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>class CogIncludeTests(TestCaseWithImports):</p>
+<p class='stm run hide'>&nbsp; &nbsp; dincludes = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &#39;test.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import mymodule</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &#39;test.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import mymodule</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Hello from mymodule</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &#39;test2.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import mymodule</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Hello from mymodule in inc2</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &#39;include&#39;: {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;mymodule.py&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;Hello from mymodule&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &#39;inc2&#39;: {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;mymodule.py&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;Hello from mymodule in inc2&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &#39;inc3&#39;: {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;someothermodule.py&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is some other module.&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testNeedIncludePath(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Try it without the -I, to see that an ImportError happens.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(self.dincludes)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertRaises(ImportError, self.cog.callableMain, ([&#39;argv0&#39;, &#39;-r&#39;, &#39;test.cog&#39;]))</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testIncludePath(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Test that -I adds include directories properly.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(self.dincludes)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;-I&#39;, &#39;include&#39;, &#39;test.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;test.cog&#39;, &#39;test.out&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testTwoIncludePaths(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Test that two -I&#39;s add include directories properly.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(self.dincludes)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;-I&#39;, &#39;include&#39;, &#39;-I&#39;, &#39;inc2&#39;, &#39;test.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;test.cog&#39;, &#39;test.out&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testTwoIncludePaths2(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Test that two -I&#39;s add include directories properly.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(self.dincludes)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;-I&#39;, &#39;inc2&#39;, &#39;-I&#39;, &#39;include&#39;, &#39;test.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;test.cog&#39;, &#39;test2.out&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testUselessIncludePath(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Test that the search will continue past the first directory.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(self.dincludes)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;-I&#39;, &#39;inc3&#39;, &#39;-I&#39;, &#39;include&#39;, &#39;test.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;test.cog&#39;, &#39;test.out&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testSysPathIsUnchanged(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;bad.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.error(&quot;Oh no!&quot;) ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;good.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(&quot;Oh yes!&quot;) ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Is it unchanged just by creating a cog engine?</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; oldsyspath = sys.path[:]</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.newCog()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(oldsyspath, sys.path)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Is it unchanged for a successful run?</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.newCog()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;good.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(oldsyspath, sys.path)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Is it unchanged for a successful run with includes?</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.newCog()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;-I&#39;, &#39;xyzzy&#39;, &#39;good.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(oldsyspath, sys.path)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Is it unchanged for a successful run with two includes?</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.newCog()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;-I&#39;, &#39;xyzzy&#39;, &#39;-I&#39;, &#39;quux&#39;, &#39;good.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(oldsyspath, sys.path)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Is it unchanged for a failed run?</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.newCog()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertRaises(CogError, self.cog.callableMain, ([&#39;argv0&#39;, &#39;-r&#39;, &#39;bad.cog&#39;]))</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(oldsyspath, sys.path)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Is it unchanged for a failed run with includes?</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.newCog()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertRaises(CogError, self.cog.callableMain, ([&#39;argv0&#39;, &#39;-r&#39;, &#39;-I&#39;, &#39;xyzzy&#39;, &#39;bad.cog&#39;]))</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(oldsyspath, sys.path)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Is it unchanged for a failed run with two includes?</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.newCog()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertRaises(CogError, self.cog.callableMain, ([&#39;argv0&#39;, &#39;-r&#39;, &#39;-I&#39;, &#39;xyzzy&#39;, &#39;-I&#39;, &#39;quux&#39;, &#39;bad.cog&#39;]))</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(oldsyspath, sys.path)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testSubDirectories(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Test that relative paths on the command line work, with includes.</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;code&#39;: {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;test.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import mysubmodule</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;test.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import mysubmodule</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Hello from mysubmodule</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;mysubmodule.py&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;Hello from mysubmodule&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # We should be able to invoke cog without the -I switch, and it will</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # auto-include the current directory</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;code/test.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;code/test.cog&#39;, &#39;code/test.out&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>class CogTestsInFiles(TestCaseWithTempDir):</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testWarnIfNoCogCode(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Test that the -e switch warns if there is no Cog code.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;with.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello world&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hello world</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;without.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; There&#39;s no cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; code in this file.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-e&#39;, &#39;with.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; output = self.output.getvalue()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; assert(output.find(&quot;Warning&quot;) &lt; 0)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.newCog()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-e&#39;, &#39;without.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; output = self.output.getvalue()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; assert(output.find(&quot;Warning: no cog code found in without.cog&quot;) &gt;= 0)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.newCog()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;without.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; output = self.output.getvalue()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; assert(output.find(&quot;Warning&quot;) &lt; 0)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testFileNameProps(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cog1.txt&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is %s in, %s out&quot; % (cog.inFile, cog.outFile))</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this is cog1.txt in, cog1.txt out</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cog1.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is %s in, %s out&quot; % (cog.inFile, cog.outFile))</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is cog1.txt in, cog1.txt out</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cog1out.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is %s in, %s out&quot; % (cog.inFile, cog.outFile))</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is cog1.txt in, cog1out.txt out</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;cog1.txt&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;cog1.txt&#39;, &#39;cog1.out&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.newCog()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-o&#39;, &#39;cog1out.txt&#39;, &#39;cog1.txt&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;cog1out.txt&#39;, &#39;cog1out.out&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testGlobalsDontCrossFiles(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Make sure that global values don&#39;t get shared between files.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;one.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog s = &quot;This was set in one.cog&quot; ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(s) ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;one.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog s = &quot;This was set in one.cog&quot; ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(s) ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This was set in one.cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;two.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(s)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; except NameError:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;s isn&#39;t set!&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;two.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(s)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; except NameError:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;s isn&#39;t set!&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s isn&#39;t set!</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cogfiles.txt&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Please run cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; one.cog</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; two.cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;@cogfiles.txt&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;one.cog&#39;, &#39;one.out&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;two.cog&#39;, &#39;two.out&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; output = self.output.getvalue()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; assert(output.find(&quot;(changed)&quot;) &gt;= 0)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testRemoveGeneratedOutput(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cog1.txt&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was generated.&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was generated.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was not.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cog1.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was generated.&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was not.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cog1.out2&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was generated.&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was generated.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was not.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Remove generated output.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;-x&#39;, &#39;cog1.txt&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;cog1.txt&#39;, &#39;cog1.out&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.newCog()</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Regenerate the generated output.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;cog1.txt&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;cog1.txt&#39;, &#39;cog1.out2&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.newCog()</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Remove the generated output again.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;-x&#39;, &#39;cog1.txt&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;cog1.txt&#39;, &#39;cog1.out&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testMsgCall(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; infile = &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.msg(&quot;Hello there!&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; infile = reindentBlock(infile)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(self.cog.processString(infile), infile)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; output = self.output.getvalue()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(output, &quot;Message: Hello there!\n&quot;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testErrorMessageHasNoTraceback(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Test that a Cog error is printed to stderr with no traceback.</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cog1.txt&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Xhis line was newly</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; generated by cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; stderr = StringIO.StringIO()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.setOutput(stderr=stderr)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.main([&#39;argv0&#39;, &#39;-c&#39;, &#39;-r&#39;, &quot;cog1.txt&quot;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; output = self.output.getvalue()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(self.output.getvalue(), &quot;Cogging cog1.txt\n&quot;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(stderr.getvalue(), &quot;cog1.txt(9): Output has been edited! Delete old checksum to unprotect.\n&quot;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testDashD(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;test.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[cog cog.outl(&quot;Defined fooey as &quot; + fooey) ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;test.kablooey&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[cog cog.outl(&quot;Defined fooey as &quot; + fooey) ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Defined fooey as kablooey</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;test.einstein&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[cog cog.outl(&quot;Defined fooey as &quot; + fooey) ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Defined fooey as e=mc2</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;-D&#39;, &#39;fooey=kablooey&#39;, &#39;test.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;test.cog&#39;, &#39;test.kablooey&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;-Dfooey=kablooey&#39;, &#39;test.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;test.cog&#39;, &#39;test.kablooey&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;-Dfooey=e=mc2&#39;, &#39;test.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;test.cog&#39;, &#39;test.einstein&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;-Dbar=quux&#39;, &#39;-Dfooey=kablooey&#39;, &#39;test.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;test.cog&#39;, &#39;test.kablooey&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;-Dfooey=kablooey&#39;, &#39;-Dbar=quux&#39;, &#39;test.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;test.cog&#39;, &#39;test.kablooey&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;-Dfooey=gooey&#39;, &#39;-Dfooey=kablooey&#39;, &#39;test.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;test.cog&#39;, &#39;test.kablooey&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testOutputToStdout(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;test.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[cog cog.outl(&#39;Hey there!&#39;) ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; stderr = StringIO.StringIO()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.setOutput(stderr=stderr)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;test.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; output = self.output.getvalue()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; outerr = stderr.getvalue()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(output, &quot;--[[[cog cog.outl(&#39;Hey there!&#39;) ]]]\nHey there!\n--[[[end]]]\n&quot;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(outerr, &quot;&quot;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testSuffixOutputLines(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;test.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Hey there.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[cog cog.outl(&#39;a\\nb\\n&nbsp;&nbsp; \\nc&#39;) ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Good bye.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;test.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Hey there.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[cog cog.outl(&#39;a\\nb\\n&nbsp;&nbsp; \\nc&#39;) ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a (foo)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b (foo)</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c (foo)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Good bye.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;-s&#39;, &#39; (foo)&#39;, &#39;test.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;test.cog&#39;, &#39;test.out&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testEmptySuffix(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;test.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[cog cog.outl(&#39;a\\nb\\nc&#39;) ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;test.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[cog cog.outl(&#39;a\\nb\\nc&#39;) ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;-s&#39;, &#39;&#39;, &#39;test.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;test.cog&#39;, &#39;test.out&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testHellishSuffix(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;test.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[cog cog.outl(&#39;a\\n\\nb&#39;) ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;test.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[cog cog.outl(&#39;a\\n\\nb&#39;) ]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a /\\n*+([)]&gt;&lt;</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b /\\n*+([)]&gt;&lt;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-z&#39;, &#39;-r&#39;, &#39;-s&#39;, r&#39; /\n*+([)]&gt;&lt;&#39;, &#39;test.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;test.cog&#39;, &#39;test.out&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>class WritabilityTests(TestCaseWithTempDir):</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &#39;test.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &#39;test.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoSomething();</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoAnotherThing();</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoLastThing();</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='exc'>&nbsp; &nbsp; if os.name == &#39;nt&#39;:&nbsp; &nbsp;&nbsp; # pragma: no cover</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # for Windows</p>
+<p class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; cmd_w_args = &#39;attrib -R %s&#39;</p>
+<p class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; cmd_w_asterisk = &#39;attrib -R *&#39;</p>
+<p class='exc'>&nbsp; &nbsp; else:&nbsp;&nbsp; # pragma: no cover</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # for unix-like</p>
+<p class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; cmd_w_args = &#39;chmod +w %s&#39;</p>
+<p class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; cmd_w_asterisk = &#39;chmod +w *&#39;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def setUp(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; TestCaseWithTempDir.setUp(self)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(self.d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.testcog = self.tempdir / &#39;test.cog&#39;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.testcog.chmod(stat.S_IREAD)&nbsp;&nbsp; # Make the file readonly.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; assert not os.access(self.testcog, os.W_OK)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def tearDown(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.testcog.chmod(stat.S_IWRITE)&nbsp;&nbsp; # Make the file writable again.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; TestCaseWithTempDir.tearDown(self)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testReadonlyNoCommand(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertRaisesMsg(</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CogError, &quot;Can&#39;t overwrite test.cog&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain, ([&#39;argv0&#39;, &#39;-r&#39;, &#39;test.cog&#39;]))</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; assert not os.access(self.testcog, os.W_OK)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testReadonlyWithCommand(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;-w&#39;, self.cmd_w_args, &#39;test.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;test.cog&#39;, &#39;test.out&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; assert os.access(self.testcog, os.W_OK)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testReadonlyWithCommandWithNoSlot(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;-w&#39;, self.cmd_w_asterisk, &#39;test.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;test.cog&#39;, &#39;test.out&#39;)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; assert os.access(self.testcog, os.W_OK)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testReadonlyWithIneffectualCommand(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertRaisesMsg(</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CogError, &quot;Couldn&#39;t make test.cog writable&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain, ([&#39;argv0&#39;, &#39;-r&#39;, &#39;-w&#39;, &#39;echo %s&#39;, &#39;test.cog&#39;]))</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; assert not os.access(self.testcog, os.W_OK)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>class ChecksumTests(TestCaseWithTempDir):</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testCreateChecksumOutput(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cog1.txt&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was generated.&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was generated.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was not.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cog1.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was generated.&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was generated.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: 8adb13fb59b996a1c7f0065ea9f3d893)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was not.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;-c&#39;, &#39;cog1.txt&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;cog1.txt&#39;, &#39;cog1.out&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testCheckChecksumOutput(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cog1.txt&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was generated.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: 8adb13fb59b996a1c7f0065ea9f3d893)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cog1.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was newly</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; generated by cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;-c&#39;, &#39;cog1.txt&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;cog1.txt&#39;, &#39;cog1.out&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testRemoveChecksumOutput(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cog1.txt&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was generated.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: 8adb13fb59b996a1c7f0065ea9f3d893) fooey</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cog1.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was newly</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; generated by cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] fooey</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-r&#39;, &#39;cog1.txt&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;cog1.txt&#39;, &#39;cog1.out&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testTamperedChecksumOutput(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cog1.txt&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Xhis line was newly</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; generated by cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cog2.txt&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was newly</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; generated by cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah!</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cog3.txt&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was newly</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; generated by cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cog4.txt&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was newly</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; generated by cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah..</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cog5.txt&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was newly</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; generated by cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; extra</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;cog6.txt&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertRaisesMsg(CogError,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;cog1.txt(9): Output has been edited! Delete old checksum to unprotect.&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain, ([&#39;argv0&#39;, &#39;-c&#39;, &quot;cog1.txt&quot;]))</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertRaisesMsg(CogError,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;cog2.txt(9): Output has been edited! Delete old checksum to unprotect.&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain, ([&#39;argv0&#39;, &#39;-c&#39;, &quot;cog2.txt&quot;]))</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertRaisesMsg(CogError,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;cog3.txt(10): Output has been edited! Delete old checksum to unprotect.&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain, ([&#39;argv0&#39;, &#39;-c&#39;, &quot;cog3.txt&quot;]))</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertRaisesMsg(CogError,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;cog4.txt(9): Output has been edited! Delete old checksum to unprotect.&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain, ([&#39;argv0&#39;, &#39;-c&#39;, &quot;cog4.txt&quot;]))</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertRaisesMsg(CogError,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;cog5.txt(10): Output has been edited! Delete old checksum to unprotect.&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain, ([&#39;argv0&#39;, &#39;-c&#39;, &quot;cog5.txt&quot;]))</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertRaisesMsg(CogError,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;cog6.txt(6): Output has been edited! Delete old checksum to unprotect.&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain, ([&#39;argv0&#39;, &#39;-c&#39;, &quot;cog6.txt&quot;]))</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>class BlakeTests(TestCaseWithTempDir):</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; # Blake Winton&#39;s contributions.</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testDeleteCode(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # -o sets the output file.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;test.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fnames = [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in fnames:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Some Sample Code Here</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]Data Data</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; And Some More</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;test.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoSomething();</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoAnotherThing();</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoLastThing();</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; And Some More</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.callableMain([&#39;argv0&#39;, &#39;-d&#39;, &#39;-o&#39;, &#39;test.cogged&#39;, &#39;test.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;test.cogged&#39;, &#39;test.out&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testDeleteCodeWithDashRFails(self):</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;test.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertRaises(CogUsageError, self.cog.callableMain, ([&#39;argv0&#39;, &#39;-r&#39;, &#39;-d&#39;, &#39;test.cog&#39;]))</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testSettingGlobals(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Blake Winton contributed a way to set the globals that will be used in</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # processFile().</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;test.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in fnames:</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Some Sample Code Here</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]&quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;test.out&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoBlake();</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoWinton();</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoContribution();</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; globals = {}</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; globals[&#39;fnames&#39;] = [&#39;DoBlake&#39;, &#39;DoWinton&#39;, &#39;DoContribution&#39;]</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.options.bDeleteCode = True</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.processFile(&#39;test.cog&#39;, &#39;test.cogged&#39;, globals=globals)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertFilesSame(&#39;test.cogged&#39;, &#39;test.out&#39;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>class ErrorCallTests(TestCaseWithTempDir):</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testErrorCallHasNoTraceback(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Test that cog.error() doesn&#39;t show a traceback.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;error.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.error(&quot;Something Bad!&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.main([&#39;argv0&#39;, &#39;-r&#39;, &#39;error.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; output = self.output.getvalue()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assertEqual(output, &quot;Cogging error.cog\nError: Something Bad!\n&quot;)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; def testRealErrorHasTraceback(self):</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; # Test that a genuine error does show a traceback.</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; d = {</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;error.cog&#39;: &quot;&quot;&quot;\</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raise RuntimeError(&quot;Hey!&quot;)</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; makeFiles(d)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.cog.main([&#39;argv0&#39;, &#39;-r&#39;, &#39;error.cog&#39;])</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; output = self.output.getvalue()</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; msg = &#39;Actual output:\n&#39; + output</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assert_(output.startswith(&quot;Cogging error.cog\nTraceback (most recent&quot;), msg)</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; self.assert_(output.find(&quot;RuntimeError: Hey!&quot;) &gt; 0, msg)</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp;</p>
+<p class='exc'>if __name__ == &#39;__main__&#39;:&nbsp; &nbsp; &nbsp; #pragma: no cover</p>
+<p class='exc'>&nbsp; &nbsp; unittest.main()</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'># Things not yet tested:</p>
+<p class='pln'># - A bad -w command (currently fails silently).</p>
+
+</td>
+</tr>
+</table>
+</div>
+
+</body>
+</html>
diff --git a/doc/sample_html/cogapp_whiteutils.html b/doc/sample_html/cogapp_whiteutils.html
new file mode 100644
index 00000000..e5f84356
--- /dev/null
+++ b/doc/sample_html/cogapp_whiteutils.html
@@ -0,0 +1,176 @@
+<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+<title>Coverage for cogapp\whiteutils</title>
+<link rel='stylesheet' href='style.css' type='text/css'>
+<script src='jquery-1.3.2.min.js'></script>
+<script>
+function toggle_lines(btn, cls) {
+ var btn = $(btn);
+ if (btn.hasClass("hide")) {
+ $("#source ."+cls).removeClass("hide");
+ btn.removeClass("hide");
+ }
+ else {
+ $("#source ."+cls).addClass("hide");
+ btn.addClass("hide");
+ }
+}
+</script>
+</head>
+<body>
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage for <b>cogapp\whiteutils</b> :
+ <span class='pc_cov'>92%</span>
+ </h1>
+ <h2 class='stats'>
+ 37 statements
+ <span class='run hide' onclick='toggle_lines(this, "run")'>34 run</span>
+ <span class='exc' onclick='toggle_lines(this, "exc")'>0 excluded</span>
+ <span class='mis' onclick='toggle_lines(this, "mis")'>3 missing</span>
+ </h2>
+ </div>
+</div>
+
+<div id='source'>
+<table cellspacing='0' cellpadding='0'>
+<tr>
+<td class='linenos' valign='top'>
+<p class='pln'>1</p>
+<p class='pln'>2</p>
+<p class='pln'>3</p>
+<p class='pln'>4</p>
+<p class='pln'>5</p>
+<p class='pln'>6</p>
+<p class='stm run hide'>7</p>
+<p class='pln'>8</p>
+<p class='stm run hide'>9</p>
+<p class='pln'>10</p>
+<p class='pln'>11</p>
+<p class='pln'>12</p>
+<p class='pln'>13</p>
+<p class='stm run hide'>14</p>
+<p class='pln'>15</p>
+<p class='stm run hide'>16</p>
+<p class='pln'>17</p>
+<p class='pln'>18</p>
+<p class='pln'>19</p>
+<p class='stm run hide'>20</p>
+<p class='pln'>21</p>
+<p class='pln'>22</p>
+<p class='pln'>23</p>
+<p class='stm run hide'>24</p>
+<p class='stm run hide'>25</p>
+<p class='stm run hide'>26</p>
+<p class='stm mis'>27</p>
+<p class='stm mis'>28</p>
+<p class='stm run hide'>29</p>
+<p class='pln'>30</p>
+<p class='stm run hide'>31</p>
+<p class='pln'>32</p>
+<p class='pln'>33</p>
+<p class='pln'>34</p>
+<p class='pln'>35</p>
+<p class='stm run hide'>36</p>
+<p class='stm run hide'>37</p>
+<p class='stm run hide'>38</p>
+<p class='stm run hide'>39</p>
+<p class='stm run hide'>40</p>
+<p class='stm run hide'>41</p>
+<p class='stm run hide'>42</p>
+<p class='stm run hide'>43</p>
+<p class='stm run hide'>44</p>
+<p class='stm run hide'>45</p>
+<p class='stm run hide'>46</p>
+<p class='pln'>47</p>
+<p class='stm run hide'>48</p>
+<p class='pln'>49</p>
+<p class='pln'>50</p>
+<p class='stm run hide'>51</p>
+<p class='stm mis'>52</p>
+<p class='stm run hide'>53</p>
+<p class='stm run hide'>54</p>
+<p class='stm run hide'>55</p>
+<p class='stm run hide'>56</p>
+<p class='stm run hide'>57</p>
+<p class='stm run hide'>58</p>
+<p class='stm run hide'>59</p>
+<p class='stm run hide'>60</p>
+<p class='stm run hide'>61</p>
+<p class='stm run hide'>62</p>
+<p class='stm run hide'>63</p>
+
+</td>
+<td class='text' valign='top'>
+<p class='pln'>&quot;&quot;&quot; Indentation utilities for Cog.</p>
+<p class='pln'>&nbsp; &nbsp; http://nedbatchelder.com/code/cog</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; Copyright 2004-2009, Ned Batchelder.</p>
+<p class='pln'>&quot;&quot;&quot;</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>import re</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>def whitePrefix(strings):</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot; Determine the whitespace prefix common to all non-blank lines</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; in the argument list.</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='pln'>&nbsp; &nbsp; # Remove all blank lines from the list</p>
+<p class='stm run hide'>&nbsp; &nbsp; strings = [s for s in strings if s.strip() != &#39;&#39;]</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>&nbsp; &nbsp; if not strings: return &#39;&#39;</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; # Find initial whitespace chunk in the first line.</p>
+<p class='pln'>&nbsp; &nbsp; # This is the best prefix we can hope for.</p>
+<p class='stm run hide'>&nbsp; &nbsp; prefix = re.match(r&#39;\s*&#39;, strings[0]).group(0)</p>
+<p class='pln'>&nbsp;</p>
+<p class='pln'>&nbsp; &nbsp; # Loop over the other strings, keeping only as much of</p>
+<p class='pln'>&nbsp; &nbsp; # the prefix as matches each string.</p>
+<p class='stm run hide'>&nbsp; &nbsp; for s in strings:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; for i in range(len(prefix)):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if prefix[i] != s[i]:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; prefix = prefix[:i]</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break</p>
+<p class='stm run hide'>&nbsp; &nbsp; return prefix</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>def reindentBlock(lines, newIndent=&#39;&#39;):</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot; Take a block of text as a string or list of lines.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; Remove any common whitespace indentation.</p>
+<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; Re-indent using newIndent, and return it as a single string.</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm run hide'>&nbsp; &nbsp; if isinstance(lines, basestring):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; lines = lines.split(&#39;\n&#39;)</p>
+<p class='stm run hide'>&nbsp; &nbsp; oldIndent = whitePrefix(lines)</p>
+<p class='stm run hide'>&nbsp; &nbsp; outLines = []</p>
+<p class='stm run hide'>&nbsp; &nbsp; for l in lines:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; if oldIndent:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; l = l.replace(oldIndent, &#39;&#39;, 1)</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; if l and newIndent:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; l = newIndent + l</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; outLines.append(l)</p>
+<p class='stm run hide'>&nbsp; &nbsp; return &#39;\n&#39;.join(outLines)</p>
+<p class='pln'>&nbsp;</p>
+<p class='stm run hide'>def commonPrefix(strings):</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot; Find the longest string that is a prefix of all the strings.</p>
+<p class='pln'>&nbsp; &nbsp; &quot;&quot;&quot;</p>
+<p class='stm run hide'>&nbsp; &nbsp; if not strings:</p>
+<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; return &#39;&#39;</p>
+<p class='stm run hide'>&nbsp; &nbsp; prefix = strings[0]</p>
+<p class='stm run hide'>&nbsp; &nbsp; for s in strings:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; if len(s) &lt; len(prefix):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; prefix = prefix[:len(s)]</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; if not prefix:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return &#39;&#39;</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; for i in range(len(prefix)):</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if prefix[i] != s[i]:</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; prefix = prefix[:i]</p>
+<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break</p>
+<p class='stm run hide'>&nbsp; &nbsp; return prefix</p>
+
+</td>
+</tr>
+</table>
+</div>
+
+</body>
+</html>
diff --git a/doc/sample_html/index.html b/doc/sample_html/index.html
new file mode 100644
index 00000000..f49a9c7c
--- /dev/null
+++ b/doc/sample_html/index.html
@@ -0,0 +1,78 @@
+<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+<title>Coverage report</title>
+<link rel='stylesheet' href='style.css' type='text/css'>
+</head>
+<body>
+
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage report:
+ <span class='pc_cov'>44%</span>
+ </h1>
+ </div>
+</div>
+
+<div id='index'>
+<table class='index'>
+<tr>
+ <th class='name'>Module</th>
+ <th>statements</th>
+ <th>run</th>
+ <th>excluded</th>
+ <th>coverage</th>
+</tr>
+
+<tr>
+ <td class='name'><a href='cogapp_cogapp.html'>cogapp\cogapp</a></td>
+ <td>387</td>
+ <td>219</td>
+ <td>3</td>
+ <td>57%</td>
+</tr>
+
+<tr>
+ <td class='name'><a href='cogapp_makefiles.html'>cogapp\makefiles</a></td>
+ <td>29</td>
+ <td>6</td>
+ <td>3</td>
+ <td>21%</td>
+</tr>
+
+<tr>
+ <td class='name'><a href='cogapp_test_cogapp.html'>cogapp\test_cogapp</a></td>
+ <td>587</td>
+ <td>195</td>
+ <td>17</td>
+ <td>33%</td>
+</tr>
+
+<tr>
+ <td class='name'><a href='cogapp_whiteutils.html'>cogapp\whiteutils</a></td>
+ <td>37</td>
+ <td>34</td>
+ <td>0</td>
+ <td>92%</td>
+</tr>
+
+<tr class='total'>
+<td class='name'>Total</td>
+<td>1040</td>
+<td>454</td>
+<td>23</td>
+<td>44%</td>
+</tr>
+</table>
+</div>
+
+<div id='footer'>
+ <div class='content'>
+ <p>
+ <a class='nav' href='http://bitbucket.org/ned/coveragepy/'>coverage v3.0c1</a>
+ </p>
+ </div>
+</div>
+
+</body>
+</html>
diff --git a/doc/sample_html/jquery-1.3.2.min.js b/doc/sample_html/jquery-1.3.2.min.js
new file mode 100644
index 00000000..b1ae21d8
--- /dev/null
+++ b/doc/sample_html/jquery-1.3.2.min.js
@@ -0,0 +1,19 @@
+/*
+ * jQuery JavaScript Library v1.3.2
+ * http://jquery.com/
+ *
+ * Copyright (c) 2009 John Resig
+ * Dual licensed under the MIT and GPL licenses.
+ * http://docs.jquery.com/License
+ *
+ * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
+ * Revision: 6246
+ */
+(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
+/*
+ * Sizzle CSS Selector Engine - v0.9.3
+ * Copyright 2009, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ * More information: http://sizzlejs.com/
+ */
+(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); \ No newline at end of file
diff --git a/doc/sample_html/style.css b/doc/sample_html/style.css
new file mode 100644
index 00000000..d9d324c4
--- /dev/null
+++ b/doc/sample_html/style.css
@@ -0,0 +1,159 @@
+/* CSS styles for Coverage. */
+/* Page-wide styles */
+html, body, h1, h2, h3, p, td, th {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ font-weight: inherit;
+ font-style: inherit;
+ font-size: 100%;
+ font-family: inherit;
+ vertical-align: baseline;
+ }
+
+/* Set baseline grid to 16 pt. */
+body {
+ font-family: georgia, serif;
+ font-size: 1em;
+ }
+
+html>body {
+ font-size: 16px;
+ }
+
+/* Set base font size to 12/16 */
+p {
+ font-size: .75em; /* 12/16 */
+ line-height: 1.3333em; /* 16/12 */
+ }
+
+table {
+ border-collapse: collapse;
+ }
+
+a.nav {
+ text-decoration: none;
+ color: inherit;
+ }
+a.nav:hover {
+ text-decoration: underline;
+ color: inherit;
+ }
+
+/* Page structure */
+#header {
+ background: #f8f8f8;
+ width: 100%;
+ border-bottom: 1px solid #eee;
+ }
+
+#source {
+ padding: 1em;
+ font-family: "courier new", monospace;
+ }
+
+#footer {
+ font-size: 85%;
+ font-family: verdana, sans-serif;
+ color: #666666;
+ font-style: italic;
+ }
+
+#index {
+ margin: 1em 0 0 3em;
+ }
+
+/* Header styles */
+.content {
+ padding: 1em 3em;
+ }
+
+h1 {
+ font-size: 1.25em;
+}
+
+h2.stats {
+ margin-top: .5em;
+ font-size: 1em;
+}
+.stats span {
+ border: 1px solid;
+ padding: .1em .25em;
+ margin: 0 .1em;
+ cursor: pointer;
+ border-color: #999 #ccc #ccc #999;
+}
+.stats span.hide {
+ border-color: #ccc #999 #999 #ccc;
+}
+
+/* Source file styles */
+.linenos p {
+ text-align: right;
+ margin: 0;
+ padding: 0 .5em;
+ color: #999999;
+ font-family: verdana, sans-serif;
+ font-size: .625em; /* 10/16 */
+ line-height: 1.6em; /* 16/10 */
+ }
+td.text {
+ width: 100%;
+ }
+.text p {
+ margin: 0;
+ padding: 0 0 0 .5em;
+ border-left: 2px solid #ffffff;
+ white-space: nowrap;
+ }
+
+.text p.mis {
+ background: #ffdddd;
+ border-left: 2px solid #ff0000;
+ }
+.text p.run {
+ background: #ddffdd;
+ border-left: 2px solid #00ff00;
+ }
+.text p.exc {
+ background: #eeeeee;
+ border-left: 2px solid #808080;
+ }
+.text p.hide {
+ background: inherit;
+ }
+
+/* index styles */
+#index td, #index th {
+ text-align: right;
+ width: 6em;
+ padding: .25em 0;
+ border-bottom: 1px solid #eee;
+ }
+#index th {
+ font-style: italic;
+ color: #333;
+ border-bottom: 1px solid #ccc;
+ }
+#index td.name, #index th.name {
+ text-align: left;
+ width: auto;
+ height: 1.5em;
+ }
+#index td.name a {
+ text-decoration: none;
+ color: #000;
+ }
+#index td.name a:hover {
+ text-decoration: underline;
+ color: #000;
+ }
+#index tr.total {
+ font-weight: bold;
+ }
+#index tr.total td {
+ padding: .25em 0;
+ border-top: 1px solid #ccc;
+ border-bottom: none;
+ }