youtube-dl/test_coverage/youtube_dl_InfoExtractors.html
2013-01-02 22:47:06 +01:00

7647 lines
1.2 MiB

<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=emulateIE7' />
<title>Coverage for youtube_dl.InfoExtractors: 44%</title>
<link rel='stylesheet' href='style.css' type='text/css'>
<script type='text/javascript' src='jquery-1.4.3.min.js'></script>
<script type='text/javascript' src='jquery.hotkeys.js'></script>
<script type='text/javascript' src='jquery.isonscreen.js'></script>
<script type='text/javascript' src='coverage_html.js'></script>
<script type='text/javascript' charset='utf-8'>
jQuery(document).ready(coverage.pyfile_ready);
</script>
</head>
<body id='pyfile'>
<div id='header'>
<div class='content'>
<h1>Coverage for <b>youtube_dl.InfoExtractors</b> :
<span class='pc_cov'>44%</span>
</h1>
<img id='keyboard_icon' src='keybd_closed.png'>
<h2 class='stats'>
2275 statements &nbsp;
<span class='run hide_run shortkey_r button_toggle_run'>1002 run</span>
<span class='mis shortkey_m button_toggle_mis'>1273 missing</span>
<span class='exc shortkey_x button_toggle_exc'>0 excluded</span>
</h2>
</div>
</div>
<div class='help_panel'>
<img id='panel_icon' src='keybd_open.png'>
<p class='legend'>Hot-keys on this page</p>
<div>
<p class='keyhelp'>
<span class='key'>r</span>
<span class='key'>m</span>
<span class='key'>x</span>
<span class='key'>p</span> &nbsp; toggle line displays
</p>
<p class='keyhelp'>
<span class='key'>j</span>
<span class='key'>k</span> &nbsp; next/prev highlighted chunk
</p>
<p class='keyhelp'>
<span class='key'>0</span> &nbsp; (zero) top of page
</p>
<p class='keyhelp'>
<span class='key'>1</span> &nbsp; (one) first highlighted chunk
</p>
</div>
</div>
<div id='source'>
<table cellspacing='0' cellpadding='0'>
<tr>
<td class='linenos' valign='top'>
<p id='n1' class='pln'><a href='#n1'>1</a></p>
<p id='n2' class='pln'><a href='#n2'>2</a></p>
<p id='n3' class='pln'><a href='#n3'>3</a></p>
<p id='n4' class='stm run hide_run'><a href='#n4'>4</a></p>
<p id='n5' class='pln'><a href='#n5'>5</a></p>
<p id='n6' class='stm run hide_run'><a href='#n6'>6</a></p>
<p id='n7' class='stm run hide_run'><a href='#n7'>7</a></p>
<p id='n8' class='stm run hide_run'><a href='#n8'>8</a></p>
<p id='n9' class='stm run hide_run'><a href='#n9'>9</a></p>
<p id='n10' class='stm run hide_run'><a href='#n10'>10</a></p>
<p id='n11' class='stm run hide_run'><a href='#n11'>11</a></p>
<p id='n12' class='stm run hide_run'><a href='#n12'>12</a></p>
<p id='n13' class='stm run hide_run'><a href='#n13'>13</a></p>
<p id='n14' class='stm run hide_run'><a href='#n14'>14</a></p>
<p id='n15' class='stm run hide_run'><a href='#n15'>15</a></p>
<p id='n16' class='stm run hide_run'><a href='#n16'>16</a></p>
<p id='n17' class='pln'><a href='#n17'>17</a></p>
<p id='n18' class='stm run hide_run'><a href='#n18'>18</a></p>
<p id='n19' class='pln'><a href='#n19'>19</a></p>
<p id='n20' class='pln'><a href='#n20'>20</a></p>
<p id='n21' class='stm run hide_run'><a href='#n21'>21</a></p>
<p id='n22' class='pln'><a href='#n22'>22</a></p>
<p id='n23' class='pln'><a href='#n23'>23</a></p>
<p id='n24' class='pln'><a href='#n24'>24</a></p>
<p id='n25' class='pln'><a href='#n25'>25</a></p>
<p id='n26' class='pln'><a href='#n26'>26</a></p>
<p id='n27' class='pln'><a href='#n27'>27</a></p>
<p id='n28' class='pln'><a href='#n28'>28</a></p>
<p id='n29' class='pln'><a href='#n29'>29</a></p>
<p id='n30' class='pln'><a href='#n30'>30</a></p>
<p id='n31' class='pln'><a href='#n31'>31</a></p>
<p id='n32' class='pln'><a href='#n32'>32</a></p>
<p id='n33' class='pln'><a href='#n33'>33</a></p>
<p id='n34' class='pln'><a href='#n34'>34</a></p>
<p id='n35' class='pln'><a href='#n35'>35</a></p>
<p id='n36' class='pln'><a href='#n36'>36</a></p>
<p id='n37' class='pln'><a href='#n37'>37</a></p>
<p id='n38' class='pln'><a href='#n38'>38</a></p>
<p id='n39' class='pln'><a href='#n39'>39</a></p>
<p id='n40' class='pln'><a href='#n40'>40</a></p>
<p id='n41' class='pln'><a href='#n41'>41</a></p>
<p id='n42' class='pln'><a href='#n42'>42</a></p>
<p id='n43' class='pln'><a href='#n43'>43</a></p>
<p id='n44' class='pln'><a href='#n44'>44</a></p>
<p id='n45' class='pln'><a href='#n45'>45</a></p>
<p id='n46' class='pln'><a href='#n46'>46</a></p>
<p id='n47' class='pln'><a href='#n47'>47</a></p>
<p id='n48' class='pln'><a href='#n48'>48</a></p>
<p id='n49' class='pln'><a href='#n49'>49</a></p>
<p id='n50' class='pln'><a href='#n50'>50</a></p>
<p id='n51' class='pln'><a href='#n51'>51</a></p>
<p id='n52' class='pln'><a href='#n52'>52</a></p>
<p id='n53' class='pln'><a href='#n53'>53</a></p>
<p id='n54' class='pln'><a href='#n54'>54</a></p>
<p id='n55' class='pln'><a href='#n55'>55</a></p>
<p id='n56' class='pln'><a href='#n56'>56</a></p>
<p id='n57' class='pln'><a href='#n57'>57</a></p>
<p id='n58' class='pln'><a href='#n58'>58</a></p>
<p id='n59' class='pln'><a href='#n59'>59</a></p>
<p id='n60' class='pln'><a href='#n60'>60</a></p>
<p id='n61' class='pln'><a href='#n61'>61</a></p>
<p id='n62' class='pln'><a href='#n62'>62</a></p>
<p id='n63' class='pln'><a href='#n63'>63</a></p>
<p id='n64' class='pln'><a href='#n64'>64</a></p>
<p id='n65' class='stm run hide_run'><a href='#n65'>65</a></p>
<p id='n66' class='stm run hide_run'><a href='#n66'>66</a></p>
<p id='n67' class='stm run hide_run'><a href='#n67'>67</a></p>
<p id='n68' class='pln'><a href='#n68'>68</a></p>
<p id='n69' class='stm run hide_run'><a href='#n69'>69</a></p>
<p id='n70' class='pln'><a href='#n70'>70</a></p>
<p id='n71' class='stm run hide_run'><a href='#n71'>71</a></p>
<p id='n72' class='stm run hide_run'><a href='#n72'>72</a></p>
<p id='n73' class='pln'><a href='#n73'>73</a></p>
<p id='n74' class='stm run hide_run'><a href='#n74'>74</a></p>
<p id='n75' class='pln'><a href='#n75'>75</a></p>
<p id='n76' class='stm run hide_run'><a href='#n76'>76</a></p>
<p id='n77' class='pln'><a href='#n77'>77</a></p>
<p id='n78' class='stm run hide_run'><a href='#n78'>78</a></p>
<p id='n79' class='pln'><a href='#n79'>79</a></p>
<p id='n80' class='stm run hide_run'><a href='#n80'>80</a></p>
<p id='n81' class='pln'><a href='#n81'>81</a></p>
<p id='n82' class='stm run hide_run'><a href='#n82'>82</a></p>
<p id='n83' class='pln'><a href='#n83'>83</a></p>
<p id='n84' class='stm run hide_run'><a href='#n84'>84</a></p>
<p id='n85' class='stm run hide_run'><a href='#n85'>85</a></p>
<p id='n86' class='stm run hide_run'><a href='#n86'>86</a></p>
<p id='n87' class='pln'><a href='#n87'>87</a></p>
<p id='n88' class='stm run hide_run'><a href='#n88'>88</a></p>
<p id='n89' class='pln'><a href='#n89'>89</a></p>
<p id='n90' class='stm run hide_run'><a href='#n90'>90</a></p>
<p id='n91' class='stm run hide_run'><a href='#n91'>91</a></p>
<p id='n92' class='pln'><a href='#n92'>92</a></p>
<p id='n93' class='stm run hide_run'><a href='#n93'>93</a></p>
<p id='n94' class='pln'><a href='#n94'>94</a></p>
<p id='n95' class='stm run hide_run'><a href='#n95'>95</a></p>
<p id='n96' class='pln'><a href='#n96'>96</a></p>
<p id='n97' class='stm run hide_run'><a href='#n97'>97</a></p>
<p id='n98' class='pln'><a href='#n98'>98</a></p>
<p id='n99' class='stm run hide_run'><a href='#n99'>99</a></p>
<p id='n100' class='pln'><a href='#n100'>100</a></p>
<p id='n101' class='stm run hide_run'><a href='#n101'>101</a></p>
<p id='n102' class='pln'><a href='#n102'>102</a></p>
<p id='n103' class='stm mis'><a href='#n103'>103</a></p>
<p id='n104' class='pln'><a href='#n104'>104</a></p>
<p id='n105' class='stm run hide_run'><a href='#n105'>105</a></p>
<p id='n106' class='pln'><a href='#n106'>106</a></p>
<p id='n107' class='stm run hide_run'><a href='#n107'>107</a></p>
<p id='n108' class='pln'><a href='#n108'>108</a></p>
<p id='n109' class='stm run hide_run'><a href='#n109'>109</a></p>
<p id='n110' class='stm run hide_run'><a href='#n110'>110</a></p>
<p id='n111' class='stm run hide_run'><a href='#n111'>111</a></p>
<p id='n112' class='stm run hide_run'><a href='#n112'>112</a></p>
<p id='n113' class='stm run hide_run'><a href='#n113'>113</a></p>
<p id='n114' class='stm run hide_run'><a href='#n114'>114</a></p>
<p id='n115' class='stm run hide_run'><a href='#n115'>115</a></p>
<p id='n116' class='stm run hide_run'><a href='#n116'>116</a></p>
<p id='n117' class='stm mis'><a href='#n117'>117</a></p>
<p id='n118' class='stm mis'><a href='#n118'>118</a></p>
<p id='n119' class='stm mis'><a href='#n119'>119</a></p>
<p id='n120' class='stm mis'><a href='#n120'>120</a></p>
<p id='n121' class='pln'><a href='#n121'>121</a></p>
<p id='n122' class='pln'><a href='#n122'>122</a></p>
<p id='n123' class='stm run hide_run'><a href='#n123'>123</a></p>
<p id='n124' class='pln'><a href='#n124'>124</a></p>
<p id='n125' class='pln'><a href='#n125'>125</a></p>
<p id='n126' class='stm run hide_run'><a href='#n126'>126</a></p>
<p id='n127' class='pln'><a href='#n127'>127</a></p>
<p id='n128' class='pln'><a href='#n128'>128</a></p>
<p id='n129' class='pln'><a href='#n129'>129</a></p>
<p id='n130' class='pln'><a href='#n130'>130</a></p>
<p id='n131' class='pln'><a href='#n131'>131</a></p>
<p id='n132' class='pln'><a href='#n132'>132</a></p>
<p id='n133' class='pln'><a href='#n133'>133</a></p>
<p id='n134' class='pln'><a href='#n134'>134</a></p>
<p id='n135' class='pln'><a href='#n135'>135</a></p>
<p id='n136' class='pln'><a href='#n136'>136</a></p>
<p id='n137' class='pln'><a href='#n137'>137</a></p>
<p id='n138' class='pln'><a href='#n138'>138</a></p>
<p id='n139' class='pln'><a href='#n139'>139</a></p>
<p id='n140' class='pln'><a href='#n140'>140</a></p>
<p id='n141' class='pln'><a href='#n141'>141</a></p>
<p id='n142' class='pln'><a href='#n142'>142</a></p>
<p id='n143' class='pln'><a href='#n143'>143</a></p>
<p id='n144' class='pln'><a href='#n144'>144</a></p>
<p id='n145' class='pln'><a href='#n145'>145</a></p>
<p id='n146' class='stm run hide_run'><a href='#n146'>146</a></p>
<p id='n147' class='stm run hide_run'><a href='#n147'>147</a></p>
<p id='n148' class='stm run hide_run'><a href='#n148'>148</a></p>
<p id='n149' class='stm run hide_run'><a href='#n149'>149</a></p>
<p id='n150' class='stm run hide_run'><a href='#n150'>150</a></p>
<p id='n151' class='pln'><a href='#n151'>151</a></p>
<p id='n152' class='stm run hide_run'><a href='#n152'>152</a></p>
<p id='n153' class='stm run hide_run'><a href='#n153'>153</a></p>
<p id='n154' class='stm run hide_run'><a href='#n154'>154</a></p>
<p id='n155' class='pln'><a href='#n155'>155</a></p>
<p id='n156' class='pln'><a href='#n156'>156</a></p>
<p id='n157' class='pln'><a href='#n157'>157</a></p>
<p id='n158' class='pln'><a href='#n158'>158</a></p>
<p id='n159' class='pln'><a href='#n159'>159</a></p>
<p id='n160' class='pln'><a href='#n160'>160</a></p>
<p id='n161' class='pln'><a href='#n161'>161</a></p>
<p id='n162' class='pln'><a href='#n162'>162</a></p>
<p id='n163' class='pln'><a href='#n163'>163</a></p>
<p id='n164' class='pln'><a href='#n164'>164</a></p>
<p id='n165' class='pln'><a href='#n165'>165</a></p>
<p id='n166' class='stm run hide_run'><a href='#n166'>166</a></p>
<p id='n167' class='pln'><a href='#n167'>167</a></p>
<p id='n168' class='pln'><a href='#n168'>168</a></p>
<p id='n169' class='pln'><a href='#n169'>169</a></p>
<p id='n170' class='pln'><a href='#n170'>170</a></p>
<p id='n171' class='pln'><a href='#n171'>171</a></p>
<p id='n172' class='pln'><a href='#n172'>172</a></p>
<p id='n173' class='pln'><a href='#n173'>173</a></p>
<p id='n174' class='pln'><a href='#n174'>174</a></p>
<p id='n175' class='pln'><a href='#n175'>175</a></p>
<p id='n176' class='pln'><a href='#n176'>176</a></p>
<p id='n177' class='pln'><a href='#n177'>177</a></p>
<p id='n178' class='pln'><a href='#n178'>178</a></p>
<p id='n179' class='pln'><a href='#n179'>179</a></p>
<p id='n180' class='pln'><a href='#n180'>180</a></p>
<p id='n181' class='pln'><a href='#n181'>181</a></p>
<p id='n182' class='stm run hide_run'><a href='#n182'>182</a></p>
<p id='n183' class='pln'><a href='#n183'>183</a></p>
<p id='n184' class='stm run hide_run'><a href='#n184'>184</a></p>
<p id='n185' class='pln'><a href='#n185'>185</a></p>
<p id='n186' class='stm run hide_run'><a href='#n186'>186</a></p>
<p id='n187' class='pln'><a href='#n187'>187</a></p>
<p id='n188' class='stm run hide_run'><a href='#n188'>188</a></p>
<p id='n189' class='pln'><a href='#n189'>189</a></p>
<p id='n190' class='stm run hide_run'><a href='#n190'>190</a></p>
<p id='n191' class='pln'><a href='#n191'>191</a></p>
<p id='n192' class='stm run hide_run'><a href='#n192'>192</a></p>
<p id='n193' class='pln'><a href='#n193'>193</a></p>
<p id='n194' class='stm mis'><a href='#n194'>194</a></p>
<p id='n195' class='pln'><a href='#n195'>195</a></p>
<p id='n196' class='stm run hide_run'><a href='#n196'>196</a></p>
<p id='n197' class='pln'><a href='#n197'>197</a></p>
<p id='n198' class='stm mis'><a href='#n198'>198</a></p>
<p id='n199' class='pln'><a href='#n199'>199</a></p>
<p id='n200' class='stm run hide_run'><a href='#n200'>200</a></p>
<p id='n201' class='pln'><a href='#n201'>201</a></p>
<p id='n202' class='stm run hide_run'><a href='#n202'>202</a></p>
<p id='n203' class='pln'><a href='#n203'>203</a></p>
<p id='n204' class='stm run hide_run'><a href='#n204'>204</a></p>
<p id='n205' class='pln'><a href='#n205'>205</a></p>
<p id='n206' class='stm run hide_run'><a href='#n206'>206</a></p>
<p id='n207' class='pln'><a href='#n207'>207</a></p>
<p id='n208' class='stm run hide_run'><a href='#n208'>208</a></p>
<p id='n209' class='pln'><a href='#n209'>209</a></p>
<p id='n210' class='stm run hide_run'><a href='#n210'>210</a></p>
<p id='n211' class='pln'><a href='#n211'>211</a></p>
<p id='n212' class='stm run hide_run'><a href='#n212'>212</a></p>
<p id='n213' class='pln'><a href='#n213'>213</a></p>
<p id='n214' class='stm run hide_run'><a href='#n214'>214</a></p>
<p id='n215' class='pln'><a href='#n215'>215</a></p>
<p id='n216' class='stm run hide_run'><a href='#n216'>216</a></p>
<p id='n217' class='pln'><a href='#n217'>217</a></p>
<p id='n218' class='stm mis'><a href='#n218'>218</a></p>
<p id='n219' class='pln'><a href='#n219'>219</a></p>
<p id='n220' class='stm run hide_run'><a href='#n220'>220</a></p>
<p id='n221' class='pln'><a href='#n221'>221</a></p>
<p id='n222' class='stm mis'><a href='#n222'>222</a></p>
<p id='n223' class='pln'><a href='#n223'>223</a></p>
<p id='n224' class='stm run hide_run'><a href='#n224'>224</a></p>
<p id='n225' class='stm run hide_run'><a href='#n225'>225</a></p>
<p id='n226' class='stm run hide_run'><a href='#n226'>226</a></p>
<p id='n227' class='pln'><a href='#n227'>227</a></p>
<p id='n228' class='stm run hide_run'><a href='#n228'>228</a></p>
<p id='n229' class='stm run hide_run'><a href='#n229'>229</a></p>
<p id='n230' class='stm run hide_run'><a href='#n230'>230</a></p>
<p id='n231' class='stm run hide_run'><a href='#n231'>231</a></p>
<p id='n232' class='stm run hide_run'><a href='#n232'>232</a></p>
<p id='n233' class='stm run hide_run'><a href='#n233'>233</a></p>
<p id='n234' class='stm run hide_run'><a href='#n234'>234</a></p>
<p id='n235' class='stm run hide_run'><a href='#n235'>235</a></p>
<p id='n236' class='stm run hide_run'><a href='#n236'>236</a></p>
<p id='n237' class='stm run hide_run'><a href='#n237'>237</a></p>
<p id='n238' class='stm run hide_run'><a href='#n238'>238</a></p>
<p id='n239' class='stm run hide_run'><a href='#n239'>239</a></p>
<p id='n240' class='pln'><a href='#n240'>240</a></p>
<p id='n241' class='stm run hide_run'><a href='#n241'>241</a></p>
<p id='n242' class='stm run hide_run'><a href='#n242'>242</a></p>
<p id='n243' class='stm run hide_run'><a href='#n243'>243</a></p>
<p id='n244' class='stm run hide_run'><a href='#n244'>244</a></p>
<p id='n245' class='stm run hide_run'><a href='#n245'>245</a></p>
<p id='n246' class='stm mis'><a href='#n246'>246</a></p>
<p id='n247' class='stm mis'><a href='#n247'>247</a></p>
<p id='n248' class='stm run hide_run'><a href='#n248'>248</a></p>
<p id='n249' class='stm run hide_run'><a href='#n249'>249</a></p>
<p id='n250' class='stm run hide_run'><a href='#n250'>250</a></p>
<p id='n251' class='stm mis'><a href='#n251'>251</a></p>
<p id='n252' class='stm run hide_run'><a href='#n252'>252</a></p>
<p id='n253' class='stm run hide_run'><a href='#n253'>253</a></p>
<p id='n254' class='stm run hide_run'><a href='#n254'>254</a></p>
<p id='n255' class='stm run hide_run'><a href='#n255'>255</a></p>
<p id='n256' class='pln'><a href='#n256'>256</a></p>
<p id='n257' class='stm mis'><a href='#n257'>257</a></p>
<p id='n258' class='stm run hide_run'><a href='#n258'>258</a></p>
<p id='n259' class='stm mis'><a href='#n259'>259</a></p>
<p id='n260' class='stm run hide_run'><a href='#n260'>260</a></p>
<p id='n261' class='stm run hide_run'><a href='#n261'>261</a></p>
<p id='n262' class='stm run hide_run'><a href='#n262'>262</a></p>
<p id='n263' class='stm mis'><a href='#n263'>263</a></p>
<p id='n264' class='stm mis'><a href='#n264'>264</a></p>
<p id='n265' class='stm run hide_run'><a href='#n265'>265</a></p>
<p id='n266' class='stm mis'><a href='#n266'>266</a></p>
<p id='n267' class='stm run hide_run'><a href='#n267'>267</a></p>
<p id='n268' class='pln'><a href='#n268'>268</a></p>
<p id='n269' class='stm run hide_run'><a href='#n269'>269</a></p>
<p id='n270' class='stm mis'><a href='#n270'>270</a></p>
<p id='n271' class='stm mis'><a href='#n271'>271</a></p>
<p id='n272' class='stm mis'><a href='#n272'>272</a></p>
<p id='n273' class='pln'><a href='#n273'>273</a></p>
<p id='n274' class='stm run hide_run'><a href='#n274'>274</a></p>
<p id='n275' class='stm run hide_run'><a href='#n275'>275</a></p>
<p id='n276' class='stm mis'><a href='#n276'>276</a></p>
<p id='n277' class='pln'><a href='#n277'>277</a></p>
<p id='n278' class='stm run hide_run'><a href='#n278'>278</a></p>
<p id='n279' class='stm run hide_run'><a href='#n279'>279</a></p>
<p id='n280' class='stm run hide_run'><a href='#n280'>280</a></p>
<p id='n281' class='pln'><a href='#n281'>281</a></p>
<p id='n282' class='pln'><a href='#n282'>282</a></p>
<p id='n283' class='stm run hide_run'><a href='#n283'>283</a></p>
<p id='n284' class='stm mis'><a href='#n284'>284</a></p>
<p id='n285' class='stm mis'><a href='#n285'>285</a></p>
<p id='n286' class='stm run hide_run'><a href='#n286'>286</a></p>
<p id='n287' class='stm mis'><a href='#n287'>287</a></p>
<p id='n288' class='stm mis'><a href='#n288'>288</a></p>
<p id='n289' class='stm mis'><a href='#n289'>289</a></p>
<p id='n290' class='stm mis'><a href='#n290'>290</a></p>
<p id='n291' class='stm mis'><a href='#n291'>291</a></p>
<p id='n292' class='pln'><a href='#n292'>292</a></p>
<p id='n293' class='stm mis'><a href='#n293'>293</a></p>
<p id='n294' class='stm mis'><a href='#n294'>294</a></p>
<p id='n295' class='stm mis'><a href='#n295'>295</a></p>
<p id='n296' class='stm mis'><a href='#n296'>296</a></p>
<p id='n297' class='pln'><a href='#n297'>297</a></p>
<p id='n298' class='pln'><a href='#n298'>298</a></p>
<p id='n299' class='stm run hide_run'><a href='#n299'>299</a></p>
<p id='n300' class='stm run hide_run'><a href='#n300'>300</a></p>
<p id='n301' class='stm run hide_run'><a href='#n301'>301</a></p>
<p id='n302' class='stm run hide_run'><a href='#n302'>302</a></p>
<p id='n303' class='stm mis'><a href='#n303'>303</a></p>
<p id='n304' class='stm mis'><a href='#n304'>304</a></p>
<p id='n305' class='stm mis'><a href='#n305'>305</a></p>
<p id='n306' class='pln'><a href='#n306'>306</a></p>
<p id='n307' class='pln'><a href='#n307'>307</a></p>
<p id='n308' class='stm run hide_run'><a href='#n308'>308</a></p>
<p id='n309' class='stm run hide_run'><a href='#n309'>309</a></p>
<p id='n310' class='pln'><a href='#n310'>310</a></p>
<p id='n311' class='pln'><a href='#n311'>311</a></p>
<p id='n312' class='stm mis'><a href='#n312'>312</a></p>
<p id='n313' class='pln'><a href='#n313'>313</a></p>
<p id='n314' class='pln'><a href='#n314'>314</a></p>
<p id='n315' class='pln'><a href='#n315'>315</a></p>
<p id='n316' class='pln'><a href='#n316'>316</a></p>
<p id='n317' class='pln'><a href='#n317'>317</a></p>
<p id='n318' class='pln'><a href='#n318'>318</a></p>
<p id='n319' class='stm mis'><a href='#n319'>319</a></p>
<p id='n320' class='stm mis'><a href='#n320'>320</a></p>
<p id='n321' class='stm mis'><a href='#n321'>321</a></p>
<p id='n322' class='stm mis'><a href='#n322'>322</a></p>
<p id='n323' class='stm mis'><a href='#n323'>323</a></p>
<p id='n324' class='stm mis'><a href='#n324'>324</a></p>
<p id='n325' class='stm mis'><a href='#n325'>325</a></p>
<p id='n326' class='stm mis'><a href='#n326'>326</a></p>
<p id='n327' class='stm mis'><a href='#n327'>327</a></p>
<p id='n328' class='stm mis'><a href='#n328'>328</a></p>
<p id='n329' class='pln'><a href='#n329'>329</a></p>
<p id='n330' class='pln'><a href='#n330'>330</a></p>
<p id='n331' class='stm mis'><a href='#n331'>331</a></p>
<p id='n332' class='pln'><a href='#n332'>332</a></p>
<p id='n333' class='pln'><a href='#n333'>333</a></p>
<p id='n334' class='pln'><a href='#n334'>334</a></p>
<p id='n335' class='stm mis'><a href='#n335'>335</a></p>
<p id='n336' class='stm mis'><a href='#n336'>336</a></p>
<p id='n337' class='stm mis'><a href='#n337'>337</a></p>
<p id='n338' class='stm mis'><a href='#n338'>338</a></p>
<p id='n339' class='stm mis'><a href='#n339'>339</a></p>
<p id='n340' class='stm mis'><a href='#n340'>340</a></p>
<p id='n341' class='stm mis'><a href='#n341'>341</a></p>
<p id='n342' class='pln'><a href='#n342'>342</a></p>
<p id='n343' class='stm run hide_run'><a href='#n343'>343</a></p>
<p id='n344' class='stm run hide_run'><a href='#n344'>344</a></p>
<p id='n345' class='stm run hide_run'><a href='#n345'>345</a></p>
<p id='n346' class='stm mis'><a href='#n346'>346</a></p>
<p id='n347' class='stm mis'><a href='#n347'>347</a></p>
<p id='n348' class='stm run hide_run'><a href='#n348'>348</a></p>
<p id='n349' class='stm run hide_run'><a href='#n349'>349</a></p>
<p id='n350' class='pln'><a href='#n350'>350</a></p>
<p id='n351' class='stm run hide_run'><a href='#n351'>351</a></p>
<p id='n352' class='pln'><a href='#n352'>352</a></p>
<p id='n353' class='stm run hide_run'><a href='#n353'>353</a></p>
<p id='n354' class='stm run hide_run'><a href='#n354'>354</a></p>
<p id='n355' class='stm mis'><a href='#n355'>355</a></p>
<p id='n356' class='stm run hide_run'><a href='#n356'>356</a></p>
<p id='n357' class='pln'><a href='#n357'>357</a></p>
<p id='n358' class='pln'><a href='#n358'>358</a></p>
<p id='n359' class='stm run hide_run'><a href='#n359'>359</a></p>
<p id='n360' class='stm run hide_run'><a href='#n360'>360</a></p>
<p id='n361' class='stm run hide_run'><a href='#n361'>361</a></p>
<p id='n362' class='stm run hide_run'><a href='#n362'>362</a></p>
<p id='n363' class='stm run hide_run'><a href='#n363'>363</a></p>
<p id='n364' class='stm mis'><a href='#n364'>364</a></p>
<p id='n365' class='stm mis'><a href='#n365'>365</a></p>
<p id='n366' class='stm mis'><a href='#n366'>366</a></p>
<p id='n367' class='pln'><a href='#n367'>367</a></p>
<p id='n368' class='stm run hide_run'><a href='#n368'>368</a></p>
<p id='n369' class='pln'><a href='#n369'>369</a></p>
<p id='n370' class='pln'><a href='#n370'>370</a></p>
<p id='n371' class='stm run hide_run'><a href='#n371'>371</a></p>
<p id='n372' class='stm run hide_run'><a href='#n372'>372</a></p>
<p id='n373' class='stm mis'><a href='#n373'>373</a></p>
<p id='n374' class='pln'><a href='#n374'>374</a></p>
<p id='n375' class='stm run hide_run'><a href='#n375'>375</a></p>
<p id='n376' class='pln'><a href='#n376'>376</a></p>
<p id='n377' class='pln'><a href='#n377'>377</a></p>
<p id='n378' class='stm run hide_run'><a href='#n378'>378</a></p>
<p id='n379' class='stm run hide_run'><a href='#n379'>379</a></p>
<p id='n380' class='stm run hide_run'><a href='#n380'>380</a></p>
<p id='n381' class='pln'><a href='#n381'>381</a></p>
<p id='n382' class='stm run hide_run'><a href='#n382'>382</a></p>
<p id='n383' class='stm run hide_run'><a href='#n383'>383</a></p>
<p id='n384' class='stm run hide_run'><a href='#n384'>384</a></p>
<p id='n385' class='stm run hide_run'><a href='#n385'>385</a></p>
<p id='n386' class='stm run hide_run'><a href='#n386'>386</a></p>
<p id='n387' class='stm run hide_run'><a href='#n387'>387</a></p>
<p id='n388' class='stm run hide_run'><a href='#n388'>388</a></p>
<p id='n389' class='stm mis'><a href='#n389'>389</a></p>
<p id='n390' class='stm mis'><a href='#n390'>390</a></p>
<p id='n391' class='stm mis'><a href='#n391'>391</a></p>
<p id='n392' class='stm run hide_run'><a href='#n392'>392</a></p>
<p id='n393' class='stm mis'><a href='#n393'>393</a></p>
<p id='n394' class='stm mis'><a href='#n394'>394</a></p>
<p id='n395' class='pln'><a href='#n395'>395</a></p>
<p id='n396' class='stm mis'><a href='#n396'>396</a></p>
<p id='n397' class='stm mis'><a href='#n397'>397</a></p>
<p id='n398' class='pln'><a href='#n398'>398</a></p>
<p id='n399' class='pln'><a href='#n399'>399</a></p>
<p id='n400' class='stm run hide_run'><a href='#n400'>400</a></p>
<p id='n401' class='stm mis'><a href='#n401'>401</a></p>
<p id='n402' class='stm mis'><a href='#n402'>402</a></p>
<p id='n403' class='pln'><a href='#n403'>403</a></p>
<p id='n404' class='pln'><a href='#n404'>404</a></p>
<p id='n405' class='stm run hide_run'><a href='#n405'>405</a></p>
<p id='n406' class='pln'><a href='#n406'>406</a></p>
<p id='n407' class='pln'><a href='#n407'>407</a></p>
<p id='n408' class='stm run hide_run'><a href='#n408'>408</a></p>
<p id='n409' class='stm mis'><a href='#n409'>409</a></p>
<p id='n410' class='stm mis'><a href='#n410'>410</a></p>
<p id='n411' class='stm run hide_run'><a href='#n411'>411</a></p>
<p id='n412' class='pln'><a href='#n412'>412</a></p>
<p id='n413' class='pln'><a href='#n413'>413</a></p>
<p id='n414' class='stm run hide_run'><a href='#n414'>414</a></p>
<p id='n415' class='stm run hide_run'><a href='#n415'>415</a></p>
<p id='n416' class='stm run hide_run'><a href='#n416'>416</a></p>
<p id='n417' class='stm run hide_run'><a href='#n417'>417</a></p>
<p id='n418' class='pln'><a href='#n418'>418</a></p>
<p id='n419' class='stm mis'><a href='#n419'>419</a></p>
<p id='n420' class='pln'><a href='#n420'>420</a></p>
<p id='n421' class='pln'><a href='#n421'>421</a></p>
<p id='n422' class='stm run hide_run'><a href='#n422'>422</a></p>
<p id='n423' class='stm mis'><a href='#n423'>423</a></p>
<p id='n424' class='stm mis'><a href='#n424'>424</a></p>
<p id='n425' class='stm run hide_run'><a href='#n425'>425</a></p>
<p id='n426' class='pln'><a href='#n426'>426</a></p>
<p id='n427' class='pln'><a href='#n427'>427</a></p>
<p id='n428' class='stm run hide_run'><a href='#n428'>428</a></p>
<p id='n429' class='stm mis'><a href='#n429'>429</a></p>
<p id='n430' class='stm mis'><a href='#n430'>430</a></p>
<p id='n431' class='pln'><a href='#n431'>431</a></p>
<p id='n432' class='stm run hide_run'><a href='#n432'>432</a></p>
<p id='n433' class='pln'><a href='#n433'>433</a></p>
<p id='n434' class='pln'><a href='#n434'>434</a></p>
<p id='n435' class='stm run hide_run'><a href='#n435'>435</a></p>
<p id='n436' class='stm run hide_run'><a href='#n436'>436</a></p>
<p id='n437' class='stm run hide_run'><a href='#n437'>437</a></p>
<p id='n438' class='stm run hide_run'><a href='#n438'>438</a></p>
<p id='n439' class='stm run hide_run'><a href='#n439'>439</a></p>
<p id='n440' class='stm run hide_run'><a href='#n440'>440</a></p>
<p id='n441' class='stm run hide_run'><a href='#n441'>441</a></p>
<p id='n442' class='stm run hide_run'><a href='#n442'>442</a></p>
<p id='n443' class='stm run hide_run'><a href='#n443'>443</a></p>
<p id='n444' class='stm run hide_run'><a href='#n444'>444</a></p>
<p id='n445' class='pln'><a href='#n445'>445</a></p>
<p id='n446' class='pln'><a href='#n446'>446</a></p>
<p id='n447' class='stm run hide_run'><a href='#n447'>447</a></p>
<p id='n448' class='stm run hide_run'><a href='#n448'>448</a></p>
<p id='n449' class='stm run hide_run'><a href='#n449'>449</a></p>
<p id='n450' class='pln'><a href='#n450'>450</a></p>
<p id='n451' class='stm mis'><a href='#n451'>451</a></p>
<p id='n452' class='pln'><a href='#n452'>452</a></p>
<p id='n453' class='pln'><a href='#n453'>453</a></p>
<p id='n454' class='stm run hide_run'><a href='#n454'>454</a></p>
<p id='n455' class='stm run hide_run'><a href='#n455'>455</a></p>
<p id='n456' class='stm run hide_run'><a href='#n456'>456</a></p>
<p id='n457' class='stm run hide_run'><a href='#n457'>457</a></p>
<p id='n458' class='stm mis'><a href='#n458'>458</a></p>
<p id='n459' class='pln'><a href='#n459'>459</a></p>
<p id='n460' class='stm run hide_run'><a href='#n460'>460</a></p>
<p id='n461' class='stm mis'><a href='#n461'>461</a></p>
<p id='n462' class='stm mis'><a href='#n462'>462</a></p>
<p id='n463' class='pln'><a href='#n463'>463</a></p>
<p id='n464' class='stm run hide_run'><a href='#n464'>464</a></p>
<p id='n465' class='pln'><a href='#n465'>465</a></p>
<p id='n466' class='pln'><a href='#n466'>466</a></p>
<p id='n467' class='stm run hide_run'><a href='#n467'>467</a></p>
<p id='n468' class='pln'><a href='#n468'>468</a></p>
<p id='n469' class='pln'><a href='#n469'>469</a></p>
<p id='n470' class='stm run hide_run'><a href='#n470'>470</a></p>
<p id='n471' class='pln'><a href='#n471'>471</a></p>
<p id='n472' class='stm run hide_run'><a href='#n472'>472</a></p>
<p id='n473' class='stm mis'><a href='#n473'>473</a></p>
<p id='n474' class='stm mis'><a href='#n474'>474</a></p>
<p id='n475' class='stm run hide_run'><a href='#n475'>475</a></p>
<p id='n476' class='stm run hide_run'><a href='#n476'>476</a></p>
<p id='n477' class='stm run hide_run'><a href='#n477'>477</a></p>
<p id='n478' class='stm run hide_run'><a href='#n478'>478</a></p>
<p id='n479' class='stm run hide_run'><a href='#n479'>479</a></p>
<p id='n480' class='pln'><a href='#n480'>480</a></p>
<p id='n481' class='stm run hide_run'><a href='#n481'>481</a></p>
<p id='n482' class='stm run hide_run'><a href='#n482'>482</a></p>
<p id='n483' class='stm run hide_run'><a href='#n483'>483</a></p>
<p id='n484' class='stm mis'><a href='#n484'>484</a></p>
<p id='n485' class='pln'><a href='#n485'>485</a></p>
<p id='n486' class='stm run hide_run'><a href='#n486'>486</a></p>
<p id='n487' class='stm run hide_run'><a href='#n487'>487</a></p>
<p id='n488' class='stm run hide_run'><a href='#n488'>488</a></p>
<p id='n489' class='stm mis'><a href='#n489'>489</a></p>
<p id='n490' class='stm mis'><a href='#n490'>490</a></p>
<p id='n491' class='stm run hide_run'><a href='#n491'>491</a></p>
<p id='n492' class='stm mis'><a href='#n492'>492</a></p>
<p id='n493' class='stm mis'><a href='#n493'>493</a></p>
<p id='n494' class='stm run hide_run'><a href='#n494'>494</a></p>
<p id='n495' class='stm run hide_run'><a href='#n495'>495</a></p>
<p id='n496' class='stm mis'><a href='#n496'>496</a></p>
<p id='n497' class='stm mis'><a href='#n497'>497</a></p>
<p id='n498' class='stm mis'><a href='#n498'>498</a></p>
<p id='n499' class='stm mis'><a href='#n499'>499</a></p>
<p id='n500' class='pln'><a href='#n500'>500</a></p>
<p id='n501' class='pln'><a href='#n501'>501</a></p>
<p id='n502' class='pln'><a href='#n502'>502</a></p>
<p id='n503' class='stm mis'><a href='#n503'>503</a></p>
<p id='n504' class='stm mis'><a href='#n504'>504</a></p>
<p id='n505' class='stm mis'><a href='#n505'>505</a></p>
<p id='n506' class='stm mis'><a href='#n506'>506</a></p>
<p id='n507' class='stm mis'><a href='#n507'>507</a></p>
<p id='n508' class='stm mis'><a href='#n508'>508</a></p>
<p id='n509' class='stm mis'><a href='#n509'>509</a></p>
<p id='n510' class='stm mis'><a href='#n510'>510</a></p>
<p id='n511' class='stm mis'><a href='#n511'>511</a></p>
<p id='n512' class='pln'><a href='#n512'>512</a></p>
<p id='n513' class='stm mis'><a href='#n513'>513</a></p>
<p id='n514' class='stm mis'><a href='#n514'>514</a></p>
<p id='n515' class='pln'><a href='#n515'>515</a></p>
<p id='n516' class='stm run hide_run'><a href='#n516'>516</a></p>
<p id='n517' class='stm run hide_run'><a href='#n517'>517</a></p>
<p id='n518' class='pln'><a href='#n518'>518</a></p>
<p id='n519' class='stm run hide_run'><a href='#n519'>519</a></p>
<p id='n520' class='pln'><a href='#n520'>520</a></p>
<p id='n521' class='stm run hide_run'><a href='#n521'>521</a></p>
<p id='n522' class='pln'><a href='#n522'>522</a></p>
<p id='n523' class='pln'><a href='#n523'>523</a></p>
<p id='n524' class='stm run hide_run'><a href='#n524'>524</a></p>
<p id='n525' class='pln'><a href='#n525'>525</a></p>
<p id='n526' class='pln'><a href='#n526'>526</a></p>
<p id='n527' class='pln'><a href='#n527'>527</a></p>
<p id='n528' class='pln'><a href='#n528'>528</a></p>
<p id='n529' class='pln'><a href='#n529'>529</a></p>
<p id='n530' class='pln'><a href='#n530'>530</a></p>
<p id='n531' class='pln'><a href='#n531'>531</a></p>
<p id='n532' class='pln'><a href='#n532'>532</a></p>
<p id='n533' class='pln'><a href='#n533'>533</a></p>
<p id='n534' class='pln'><a href='#n534'>534</a></p>
<p id='n535' class='pln'><a href='#n535'>535</a></p>
<p id='n536' class='pln'><a href='#n536'>536</a></p>
<p id='n537' class='pln'><a href='#n537'>537</a></p>
<p id='n538' class='pln'><a href='#n538'>538</a></p>
<p id='n539' class='stm run hide_run'><a href='#n539'>539</a></p>
<p id='n540' class='pln'><a href='#n540'>540</a></p>
<p id='n541' class='pln'><a href='#n541'>541</a></p>
<p id='n542' class='stm run hide_run'><a href='#n542'>542</a></p>
<p id='n543' class='pln'><a href='#n543'>543</a></p>
<p id='n544' class='pln'><a href='#n544'>544</a></p>
<p id='n545' class='stm run hide_run'><a href='#n545'>545</a></p>
<p id='n546' class='stm run hide_run'><a href='#n546'>546</a></p>
<p id='n547' class='stm run hide_run'><a href='#n547'>547</a></p>
<p id='n548' class='stm run hide_run'><a href='#n548'>548</a></p>
<p id='n549' class='pln'><a href='#n549'>549</a></p>
<p id='n550' class='stm run hide_run'><a href='#n550'>550</a></p>
<p id='n551' class='stm run hide_run'><a href='#n551'>551</a></p>
<p id='n552' class='pln'><a href='#n552'>552</a></p>
<p id='n553' class='stm run hide_run'><a href='#n553'>553</a></p>
<p id='n554' class='pln'><a href='#n554'>554</a></p>
<p id='n555' class='stm run hide_run'><a href='#n555'>555</a></p>
<p id='n556' class='pln'><a href='#n556'>556</a></p>
<p id='n557' class='stm run hide_run'><a href='#n557'>557</a></p>
<p id='n558' class='pln'><a href='#n558'>558</a></p>
<p id='n559' class='stm run hide_run'><a href='#n559'>559</a></p>
<p id='n560' class='pln'><a href='#n560'>560</a></p>
<p id='n561' class='stm run hide_run'><a href='#n561'>561</a></p>
<p id='n562' class='pln'><a href='#n562'>562</a></p>
<p id='n563' class='stm mis'><a href='#n563'>563</a></p>
<p id='n564' class='pln'><a href='#n564'>564</a></p>
<p id='n565' class='stm run hide_run'><a href='#n565'>565</a></p>
<p id='n566' class='pln'><a href='#n566'>566</a></p>
<p id='n567' class='stm mis'><a href='#n567'>567</a></p>
<p id='n568' class='pln'><a href='#n568'>568</a></p>
<p id='n569' class='stm run hide_run'><a href='#n569'>569</a></p>
<p id='n570' class='pln'><a href='#n570'>570</a></p>
<p id='n571' class='stm run hide_run'><a href='#n571'>571</a></p>
<p id='n572' class='stm run hide_run'><a href='#n572'>572</a></p>
<p id='n573' class='stm run hide_run'><a href='#n573'>573</a></p>
<p id='n574' class='stm run hide_run'><a href='#n574'>574</a></p>
<p id='n575' class='stm mis'><a href='#n575'>575</a></p>
<p id='n576' class='stm mis'><a href='#n576'>576</a></p>
<p id='n577' class='stm mis'><a href='#n577'>577</a></p>
<p id='n578' class='pln'><a href='#n578'>578</a></p>
<p id='n579' class='pln'><a href='#n579'>579</a></p>
<p id='n580' class='stm run hide_run'><a href='#n580'>580</a></p>
<p id='n581' class='pln'><a href='#n581'>581</a></p>
<p id='n582' class='pln'><a href='#n582'>582</a></p>
<p id='n583' class='pln'><a href='#n583'>583</a></p>
<p id='n584' class='stm run hide_run'><a href='#n584'>584</a></p>
<p id='n585' class='stm run hide_run'><a href='#n585'>585</a></p>
<p id='n586' class='stm run hide_run'><a href='#n586'>586</a></p>
<p id='n587' class='stm run hide_run'><a href='#n587'>587</a></p>
<p id='n588' class='stm mis'><a href='#n588'>588</a></p>
<p id='n589' class='stm mis'><a href='#n589'>589</a></p>
<p id='n590' class='stm mis'><a href='#n590'>590</a></p>
<p id='n591' class='pln'><a href='#n591'>591</a></p>
<p id='n592' class='stm run hide_run'><a href='#n592'>592</a></p>
<p id='n593' class='pln'><a href='#n593'>593</a></p>
<p id='n594' class='stm run hide_run'><a href='#n594'>594</a></p>
<p id='n595' class='stm run hide_run'><a href='#n595'>595</a></p>
<p id='n596' class='stm mis'><a href='#n596'>596</a></p>
<p id='n597' class='stm mis'><a href='#n597'>597</a></p>
<p id='n598' class='pln'><a href='#n598'>598</a></p>
<p id='n599' class='stm run hide_run'><a href='#n599'>599</a></p>
<p id='n600' class='pln'><a href='#n600'>600</a></p>
<p id='n601' class='pln'><a href='#n601'>601</a></p>
<p id='n602' class='stm run hide_run'><a href='#n602'>602</a></p>
<p id='n603' class='stm run hide_run'><a href='#n603'>603</a></p>
<p id='n604' class='stm run hide_run'><a href='#n604'>604</a></p>
<p id='n605' class='stm run hide_run'><a href='#n605'>605</a></p>
<p id='n606' class='pln'><a href='#n606'>606</a></p>
<p id='n607' class='pln'><a href='#n607'>607</a></p>
<p id='n608' class='stm mis'><a href='#n608'>608</a></p>
<p id='n609' class='stm mis'><a href='#n609'>609</a></p>
<p id='n610' class='stm mis'><a href='#n610'>610</a></p>
<p id='n611' class='stm mis'><a href='#n611'>611</a></p>
<p id='n612' class='stm mis'><a href='#n612'>612</a></p>
<p id='n613' class='stm mis'><a href='#n613'>613</a></p>
<p id='n614' class='stm mis'><a href='#n614'>614</a></p>
<p id='n615' class='pln'><a href='#n615'>615</a></p>
<p id='n616' class='pln'><a href='#n616'>616</a></p>
<p id='n617' class='stm mis'><a href='#n617'>617</a></p>
<p id='n618' class='stm mis'><a href='#n618'>618</a></p>
<p id='n619' class='stm mis'><a href='#n619'>619</a></p>
<p id='n620' class='stm mis'><a href='#n620'>620</a></p>
<p id='n621' class='stm mis'><a href='#n621'>621</a></p>
<p id='n622' class='pln'><a href='#n622'>622</a></p>
<p id='n623' class='pln'><a href='#n623'>623</a></p>
<p id='n624' class='stm mis'><a href='#n624'>624</a></p>
<p id='n625' class='stm mis'><a href='#n625'>625</a></p>
<p id='n626' class='stm mis'><a href='#n626'>626</a></p>
<p id='n627' class='pln'><a href='#n627'>627</a></p>
<p id='n628' class='stm mis'><a href='#n628'>628</a></p>
<p id='n629' class='stm mis'><a href='#n629'>629</a></p>
<p id='n630' class='pln'><a href='#n630'>630</a></p>
<p id='n631' class='stm mis'><a href='#n631'>631</a></p>
<p id='n632' class='stm mis'><a href='#n632'>632</a></p>
<p id='n633' class='stm mis'><a href='#n633'>633</a></p>
<p id='n634' class='stm mis'><a href='#n634'>634</a></p>
<p id='n635' class='stm mis'><a href='#n635'>635</a></p>
<p id='n636' class='stm mis'><a href='#n636'>636</a></p>
<p id='n637' class='stm mis'><a href='#n637'>637</a></p>
<p id='n638' class='stm mis'><a href='#n638'>638</a></p>
<p id='n639' class='stm mis'><a href='#n639'>639</a></p>
<p id='n640' class='stm mis'><a href='#n640'>640</a></p>
<p id='n641' class='stm mis'><a href='#n641'>641</a></p>
<p id='n642' class='stm mis'><a href='#n642'>642</a></p>
<p id='n643' class='stm mis'><a href='#n643'>643</a></p>
<p id='n644' class='stm mis'><a href='#n644'>644</a></p>
<p id='n645' class='stm mis'><a href='#n645'>645</a></p>
<p id='n646' class='pln'><a href='#n646'>646</a></p>
<p id='n647' class='stm mis'><a href='#n647'>647</a></p>
<p id='n648' class='stm mis'><a href='#n648'>648</a></p>
<p id='n649' class='stm mis'><a href='#n649'>649</a></p>
<p id='n650' class='stm mis'><a href='#n650'>650</a></p>
<p id='n651' class='stm mis'><a href='#n651'>651</a></p>
<p id='n652' class='pln'><a href='#n652'>652</a></p>
<p id='n653' class='stm mis'><a href='#n653'>653</a></p>
<p id='n654' class='stm mis'><a href='#n654'>654</a></p>
<p id='n655' class='stm mis'><a href='#n655'>655</a></p>
<p id='n656' class='stm mis'><a href='#n656'>656</a></p>
<p id='n657' class='stm mis'><a href='#n657'>657</a></p>
<p id='n658' class='pln'><a href='#n658'>658</a></p>
<p id='n659' class='stm mis'><a href='#n659'>659</a></p>
<p id='n660' class='pln'><a href='#n660'>660</a></p>
<p id='n661' class='pln'><a href='#n661'>661</a></p>
<p id='n662' class='pln'><a href='#n662'>662</a></p>
<p id='n663' class='pln'><a href='#n663'>663</a></p>
<p id='n664' class='pln'><a href='#n664'>664</a></p>
<p id='n665' class='pln'><a href='#n665'>665</a></p>
<p id='n666' class='pln'><a href='#n666'>666</a></p>
<p id='n667' class='pln'><a href='#n667'>667</a></p>
<p id='n668' class='pln'><a href='#n668'>668</a></p>
<p id='n669' class='stm run hide_run'><a href='#n669'>669</a></p>
<p id='n670' class='pln'><a href='#n670'>670</a></p>
<p id='n671' class='pln'><a href='#n671'>671</a></p>
<p id='n672' class='stm run hide_run'><a href='#n672'>672</a></p>
<p id='n673' class='stm run hide_run'><a href='#n673'>673</a></p>
<p id='n674' class='pln'><a href='#n674'>674</a></p>
<p id='n675' class='stm run hide_run'><a href='#n675'>675</a></p>
<p id='n676' class='stm run hide_run'><a href='#n676'>676</a></p>
<p id='n677' class='pln'><a href='#n677'>677</a></p>
<p id='n678' class='stm run hide_run'><a href='#n678'>678</a></p>
<p id='n679' class='pln'><a href='#n679'>679</a></p>
<p id='n680' class='stm run hide_run'><a href='#n680'>680</a></p>
<p id='n681' class='pln'><a href='#n681'>681</a></p>
<p id='n682' class='stm run hide_run'><a href='#n682'>682</a></p>
<p id='n683' class='pln'><a href='#n683'>683</a></p>
<p id='n684' class='stm run hide_run'><a href='#n684'>684</a></p>
<p id='n685' class='stm run hide_run'><a href='#n685'>685</a></p>
<p id='n686' class='stm mis'><a href='#n686'>686</a></p>
<p id='n687' class='stm mis'><a href='#n687'>687</a></p>
<p id='n688' class='pln'><a href='#n688'>688</a></p>
<p id='n689' class='stm run hide_run'><a href='#n689'>689</a></p>
<p id='n690' class='pln'><a href='#n690'>690</a></p>
<p id='n691' class='stm run hide_run'><a href='#n691'>691</a></p>
<p id='n692' class='pln'><a href='#n692'>692</a></p>
<p id='n693' class='pln'><a href='#n693'>693</a></p>
<p id='n694' class='stm run hide_run'><a href='#n694'>694</a></p>
<p id='n695' class='stm run hide_run'><a href='#n695'>695</a></p>
<p id='n696' class='stm run hide_run'><a href='#n696'>696</a></p>
<p id='n697' class='pln'><a href='#n697'>697</a></p>
<p id='n698' class='pln'><a href='#n698'>698</a></p>
<p id='n699' class='stm run hide_run'><a href='#n699'>699</a></p>
<p id='n700' class='stm run hide_run'><a href='#n700'>700</a></p>
<p id='n701' class='stm run hide_run'><a href='#n701'>701</a></p>
<p id='n702' class='stm mis'><a href='#n702'>702</a></p>
<p id='n703' class='stm mis'><a href='#n703'>703</a></p>
<p id='n704' class='stm run hide_run'><a href='#n704'>704</a></p>
<p id='n705' class='pln'><a href='#n705'>705</a></p>
<p id='n706' class='stm run hide_run'><a href='#n706'>706</a></p>
<p id='n707' class='stm run hide_run'><a href='#n707'>707</a></p>
<p id='n708' class='stm run hide_run'><a href='#n708'>708</a></p>
<p id='n709' class='stm run hide_run'><a href='#n709'>709</a></p>
<p id='n710' class='stm run hide_run'><a href='#n710'>710</a></p>
<p id='n711' class='pln'><a href='#n711'>711</a></p>
<p id='n712' class='stm mis'><a href='#n712'>712</a></p>
<p id='n713' class='stm mis'><a href='#n713'>713</a></p>
<p id='n714' class='pln'><a href='#n714'>714</a></p>
<p id='n715' class='stm run hide_run'><a href='#n715'>715</a></p>
<p id='n716' class='stm run hide_run'><a href='#n716'>716</a></p>
<p id='n717' class='stm mis'><a href='#n717'>717</a></p>
<p id='n718' class='stm mis'><a href='#n718'>718</a></p>
<p id='n719' class='pln'><a href='#n719'>719</a></p>
<p id='n720' class='stm run hide_run'><a href='#n720'>720</a></p>
<p id='n721' class='pln'><a href='#n721'>721</a></p>
<p id='n722' class='pln'><a href='#n722'>722</a></p>
<p id='n723' class='pln'><a href='#n723'>723</a></p>
<p id='n724' class='stm run hide_run'><a href='#n724'>724</a></p>
<p id='n725' class='stm run hide_run'><a href='#n725'>725</a></p>
<p id='n726' class='stm mis'><a href='#n726'>726</a></p>
<p id='n727' class='stm mis'><a href='#n727'>727</a></p>
<p id='n728' class='stm run hide_run'><a href='#n728'>728</a></p>
<p id='n729' class='pln'><a href='#n729'>729</a></p>
<p id='n730' class='stm run hide_run'><a href='#n730'>730</a></p>
<p id='n731' class='stm run hide_run'><a href='#n731'>731</a></p>
<p id='n732' class='stm run hide_run'><a href='#n732'>732</a></p>
<p id='n733' class='pln'><a href='#n733'>733</a></p>
<p id='n734' class='stm mis'><a href='#n734'>734</a></p>
<p id='n735' class='stm mis'><a href='#n735'>735</a></p>
<p id='n736' class='stm mis'><a href='#n736'>736</a></p>
<p id='n737' class='pln'><a href='#n737'>737</a></p>
<p id='n738' class='stm mis'><a href='#n738'>738</a></p>
<p id='n739' class='pln'><a href='#n739'>739</a></p>
<p id='n740' class='stm run hide_run'><a href='#n740'>740</a></p>
<p id='n741' class='pln'><a href='#n741'>741</a></p>
<p id='n742' class='stm run hide_run'><a href='#n742'>742</a></p>
<p id='n743' class='stm run hide_run'><a href='#n743'>743</a></p>
<p id='n744' class='stm run hide_run'><a href='#n744'>744</a></p>
<p id='n745' class='stm mis'><a href='#n745'>745</a></p>
<p id='n746' class='pln'><a href='#n746'>746</a></p>
<p id='n747' class='stm run hide_run'><a href='#n747'>747</a></p>
<p id='n748' class='pln'><a href='#n748'>748</a></p>
<p id='n749' class='pln'><a href='#n749'>749</a></p>
<p id='n750' class='pln'><a href='#n750'>750</a></p>
<p id='n751' class='pln'><a href='#n751'>751</a></p>
<p id='n752' class='pln'><a href='#n752'>752</a></p>
<p id='n753' class='pln'><a href='#n753'>753</a></p>
<p id='n754' class='pln'><a href='#n754'>754</a></p>
<p id='n755' class='pln'><a href='#n755'>755</a></p>
<p id='n756' class='pln'><a href='#n756'>756</a></p>
<p id='n757' class='stm run hide_run'><a href='#n757'>757</a></p>
<p id='n758' class='pln'><a href='#n758'>758</a></p>
<p id='n759' class='pln'><a href='#n759'>759</a></p>
<p id='n760' class='stm run hide_run'><a href='#n760'>760</a></p>
<p id='n761' class='stm run hide_run'><a href='#n761'>761</a></p>
<p id='n762' class='pln'><a href='#n762'>762</a></p>
<p id='n763' class='stm run hide_run'><a href='#n763'>763</a></p>
<p id='n764' class='stm mis'><a href='#n764'>764</a></p>
<p id='n765' class='pln'><a href='#n765'>765</a></p>
<p id='n766' class='stm run hide_run'><a href='#n766'>766</a></p>
<p id='n767' class='pln'><a href='#n767'>767</a></p>
<p id='n768' class='stm mis'><a href='#n768'>768</a></p>
<p id='n769' class='pln'><a href='#n769'>769</a></p>
<p id='n770' class='stm run hide_run'><a href='#n770'>770</a></p>
<p id='n771' class='pln'><a href='#n771'>771</a></p>
<p id='n772' class='stm mis'><a href='#n772'>772</a></p>
<p id='n773' class='pln'><a href='#n773'>773</a></p>
<p id='n774' class='stm run hide_run'><a href='#n774'>774</a></p>
<p id='n775' class='pln'><a href='#n775'>775</a></p>
<p id='n776' class='stm mis'><a href='#n776'>776</a></p>
<p id='n777' class='stm mis'><a href='#n777'>777</a></p>
<p id='n778' class='stm mis'><a href='#n778'>778</a></p>
<p id='n779' class='stm mis'><a href='#n779'>779</a></p>
<p id='n780' class='pln'><a href='#n780'>780</a></p>
<p id='n781' class='stm mis'><a href='#n781'>781</a></p>
<p id='n782' class='pln'><a href='#n782'>782</a></p>
<p id='n783' class='stm mis'><a href='#n783'>783</a></p>
<p id='n784' class='pln'><a href='#n784'>784</a></p>
<p id='n785' class='pln'><a href='#n785'>785</a></p>
<p id='n786' class='stm mis'><a href='#n786'>786</a></p>
<p id='n787' class='stm mis'><a href='#n787'>787</a></p>
<p id='n788' class='stm mis'><a href='#n788'>788</a></p>
<p id='n789' class='stm mis'><a href='#n789'>789</a></p>
<p id='n790' class='stm mis'><a href='#n790'>790</a></p>
<p id='n791' class='stm mis'><a href='#n791'>791</a></p>
<p id='n792' class='stm mis'><a href='#n792'>792</a></p>
<p id='n793' class='pln'><a href='#n793'>793</a></p>
<p id='n794' class='pln'><a href='#n794'>794</a></p>
<p id='n795' class='stm mis'><a href='#n795'>795</a></p>
<p id='n796' class='stm mis'><a href='#n796'>796</a></p>
<p id='n797' class='stm mis'><a href='#n797'>797</a></p>
<p id='n798' class='stm mis'><a href='#n798'>798</a></p>
<p id='n799' class='stm mis'><a href='#n799'>799</a></p>
<p id='n800' class='stm mis'><a href='#n800'>800</a></p>
<p id='n801' class='pln'><a href='#n801'>801</a></p>
<p id='n802' class='stm mis'><a href='#n802'>802</a></p>
<p id='n803' class='pln'><a href='#n803'>803</a></p>
<p id='n804' class='stm mis'><a href='#n804'>804</a></p>
<p id='n805' class='stm mis'><a href='#n805'>805</a></p>
<p id='n806' class='stm mis'><a href='#n806'>806</a></p>
<p id='n807' class='stm mis'><a href='#n807'>807</a></p>
<p id='n808' class='stm mis'><a href='#n808'>808</a></p>
<p id='n809' class='pln'><a href='#n809'>809</a></p>
<p id='n810' class='stm mis'><a href='#n810'>810</a></p>
<p id='n811' class='pln'><a href='#n811'>811</a></p>
<p id='n812' class='stm mis'><a href='#n812'>812</a></p>
<p id='n813' class='pln'><a href='#n813'>813</a></p>
<p id='n814' class='pln'><a href='#n814'>814</a></p>
<p id='n815' class='pln'><a href='#n815'>815</a></p>
<p id='n816' class='pln'><a href='#n816'>816</a></p>
<p id='n817' class='pln'><a href='#n817'>817</a></p>
<p id='n818' class='pln'><a href='#n818'>818</a></p>
<p id='n819' class='pln'><a href='#n819'>819</a></p>
<p id='n820' class='pln'><a href='#n820'>820</a></p>
<p id='n821' class='pln'><a href='#n821'>821</a></p>
<p id='n822' class='stm run hide_run'><a href='#n822'>822</a></p>
<p id='n823' class='pln'><a href='#n823'>823</a></p>
<p id='n824' class='pln'><a href='#n824'>824</a></p>
<p id='n825' class='stm run hide_run'><a href='#n825'>825</a></p>
<p id='n826' class='pln'><a href='#n826'>826</a></p>
<p id='n827' class='pln'><a href='#n827'>827</a></p>
<p id='n828' class='stm run hide_run'><a href='#n828'>828</a></p>
<p id='n829' class='stm run hide_run'><a href='#n829'>829</a></p>
<p id='n830' class='stm run hide_run'><a href='#n830'>830</a></p>
<p id='n831' class='pln'><a href='#n831'>831</a></p>
<p id='n832' class='stm run hide_run'><a href='#n832'>832</a></p>
<p id='n833' class='stm mis'><a href='#n833'>833</a></p>
<p id='n834' class='pln'><a href='#n834'>834</a></p>
<p id='n835' class='stm run hide_run'><a href='#n835'>835</a></p>
<p id='n836' class='pln'><a href='#n836'>836</a></p>
<p id='n837' class='stm mis'><a href='#n837'>837</a></p>
<p id='n838' class='pln'><a href='#n838'>838</a></p>
<p id='n839' class='stm run hide_run'><a href='#n839'>839</a></p>
<p id='n840' class='pln'><a href='#n840'>840</a></p>
<p id='n841' class='stm mis'><a href='#n841'>841</a></p>
<p id='n842' class='pln'><a href='#n842'>842</a></p>
<p id='n843' class='stm run hide_run'><a href='#n843'>843</a></p>
<p id='n844' class='pln'><a href='#n844'>844</a></p>
<p id='n845' class='stm mis'><a href='#n845'>845</a></p>
<p id='n846' class='stm mis'><a href='#n846'>846</a></p>
<p id='n847' class='stm mis'><a href='#n847'>847</a></p>
<p id='n848' class='stm mis'><a href='#n848'>848</a></p>
<p id='n849' class='pln'><a href='#n849'>849</a></p>
<p id='n850' class='stm mis'><a href='#n850'>850</a></p>
<p id='n851' class='stm mis'><a href='#n851'>851</a></p>
<p id='n852' class='pln'><a href='#n852'>852</a></p>
<p id='n853' class='pln'><a href='#n853'>853</a></p>
<p id='n854' class='pln'><a href='#n854'>854</a></p>
<p id='n855' class='stm mis'><a href='#n855'>855</a></p>
<p id='n856' class='stm mis'><a href='#n856'>856</a></p>
<p id='n857' class='stm mis'><a href='#n857'>857</a></p>
<p id='n858' class='stm mis'><a href='#n858'>858</a></p>
<p id='n859' class='stm mis'><a href='#n859'>859</a></p>
<p id='n860' class='stm mis'><a href='#n860'>860</a></p>
<p id='n861' class='stm mis'><a href='#n861'>861</a></p>
<p id='n862' class='pln'><a href='#n862'>862</a></p>
<p id='n863' class='stm mis'><a href='#n863'>863</a></p>
<p id='n864' class='stm mis'><a href='#n864'>864</a></p>
<p id='n865' class='stm mis'><a href='#n865'>865</a></p>
<p id='n866' class='stm mis'><a href='#n866'>866</a></p>
<p id='n867' class='stm mis'><a href='#n867'>867</a></p>
<p id='n868' class='pln'><a href='#n868'>868</a></p>
<p id='n869' class='stm mis'><a href='#n869'>869</a></p>
<p id='n870' class='stm mis'><a href='#n870'>870</a></p>
<p id='n871' class='stm mis'><a href='#n871'>871</a></p>
<p id='n872' class='stm mis'><a href='#n872'>872</a></p>
<p id='n873' class='stm mis'><a href='#n873'>873</a></p>
<p id='n874' class='pln'><a href='#n874'>874</a></p>
<p id='n875' class='stm mis'><a href='#n875'>875</a></p>
<p id='n876' class='stm mis'><a href='#n876'>876</a></p>
<p id='n877' class='pln'><a href='#n877'>877</a></p>
<p id='n878' class='pln'><a href='#n878'>878</a></p>
<p id='n879' class='stm mis'><a href='#n879'>879</a></p>
<p id='n880' class='stm mis'><a href='#n880'>880</a></p>
<p id='n881' class='stm mis'><a href='#n881'>881</a></p>
<p id='n882' class='stm mis'><a href='#n882'>882</a></p>
<p id='n883' class='stm mis'><a href='#n883'>883</a></p>
<p id='n884' class='stm mis'><a href='#n884'>884</a></p>
<p id='n885' class='stm mis'><a href='#n885'>885</a></p>
<p id='n886' class='pln'><a href='#n886'>886</a></p>
<p id='n887' class='pln'><a href='#n887'>887</a></p>
<p id='n888' class='stm mis'><a href='#n888'>888</a></p>
<p id='n889' class='stm mis'><a href='#n889'>889</a></p>
<p id='n890' class='stm mis'><a href='#n890'>890</a></p>
<p id='n891' class='stm mis'><a href='#n891'>891</a></p>
<p id='n892' class='stm mis'><a href='#n892'>892</a></p>
<p id='n893' class='stm mis'><a href='#n893'>893</a></p>
<p id='n894' class='pln'><a href='#n894'>894</a></p>
<p id='n895' class='stm mis'><a href='#n895'>895</a></p>
<p id='n896' class='stm mis'><a href='#n896'>896</a></p>
<p id='n897' class='stm mis'><a href='#n897'>897</a></p>
<p id='n898' class='stm mis'><a href='#n898'>898</a></p>
<p id='n899' class='stm mis'><a href='#n899'>899</a></p>
<p id='n900' class='pln'><a href='#n900'>900</a></p>
<p id='n901' class='pln'><a href='#n901'>901</a></p>
<p id='n902' class='stm mis'><a href='#n902'>902</a></p>
<p id='n903' class='stm mis'><a href='#n903'>903</a></p>
<p id='n904' class='stm mis'><a href='#n904'>904</a></p>
<p id='n905' class='stm mis'><a href='#n905'>905</a></p>
<p id='n906' class='stm mis'><a href='#n906'>906</a></p>
<p id='n907' class='pln'><a href='#n907'>907</a></p>
<p id='n908' class='pln'><a href='#n908'>908</a></p>
<p id='n909' class='stm mis'><a href='#n909'>909</a></p>
<p id='n910' class='stm mis'><a href='#n910'>910</a></p>
<p id='n911' class='stm mis'><a href='#n911'>911</a></p>
<p id='n912' class='stm mis'><a href='#n912'>912</a></p>
<p id='n913' class='stm mis'><a href='#n913'>913</a></p>
<p id='n914' class='stm mis'><a href='#n914'>914</a></p>
<p id='n915' class='stm mis'><a href='#n915'>915</a></p>
<p id='n916' class='pln'><a href='#n916'>916</a></p>
<p id='n917' class='pln'><a href='#n917'>917</a></p>
<p id='n918' class='stm mis'><a href='#n918'>918</a></p>
<p id='n919' class='stm mis'><a href='#n919'>919</a></p>
<p id='n920' class='stm mis'><a href='#n920'>920</a></p>
<p id='n921' class='stm mis'><a href='#n921'>921</a></p>
<p id='n922' class='stm mis'><a href='#n922'>922</a></p>
<p id='n923' class='pln'><a href='#n923'>923</a></p>
<p id='n924' class='stm mis'><a href='#n924'>924</a></p>
<p id='n925' class='stm mis'><a href='#n925'>925</a></p>
<p id='n926' class='stm mis'><a href='#n926'>926</a></p>
<p id='n927' class='stm mis'><a href='#n927'>927</a></p>
<p id='n928' class='stm mis'><a href='#n928'>928</a></p>
<p id='n929' class='pln'><a href='#n929'>929</a></p>
<p id='n930' class='pln'><a href='#n930'>930</a></p>
<p id='n931' class='pln'><a href='#n931'>931</a></p>
<p id='n932' class='pln'><a href='#n932'>932</a></p>
<p id='n933' class='stm mis'><a href='#n933'>933</a></p>
<p id='n934' class='stm mis'><a href='#n934'>934</a></p>
<p id='n935' class='stm mis'><a href='#n935'>935</a></p>
<p id='n936' class='pln'><a href='#n936'>936</a></p>
<p id='n937' class='pln'><a href='#n937'>937</a></p>
<p id='n938' class='stm mis'><a href='#n938'>938</a></p>
<p id='n939' class='stm mis'><a href='#n939'>939</a></p>
<p id='n940' class='stm mis'><a href='#n940'>940</a></p>
<p id='n941' class='stm mis'><a href='#n941'>941</a></p>
<p id='n942' class='stm mis'><a href='#n942'>942</a></p>
<p id='n943' class='stm mis'><a href='#n943'>943</a></p>
<p id='n944' class='pln'><a href='#n944'>944</a></p>
<p id='n945' class='pln'><a href='#n945'>945</a></p>
<p id='n946' class='stm mis'><a href='#n946'>946</a></p>
<p id='n947' class='stm mis'><a href='#n947'>947</a></p>
<p id='n948' class='stm mis'><a href='#n948'>948</a></p>
<p id='n949' class='stm mis'><a href='#n949'>949</a></p>
<p id='n950' class='stm mis'><a href='#n950'>950</a></p>
<p id='n951' class='stm mis'><a href='#n951'>951</a></p>
<p id='n952' class='pln'><a href='#n952'>952</a></p>
<p id='n953' class='stm mis'><a href='#n953'>953</a></p>
<p id='n954' class='pln'><a href='#n954'>954</a></p>
<p id='n955' class='pln'><a href='#n955'>955</a></p>
<p id='n956' class='pln'><a href='#n956'>956</a></p>
<p id='n957' class='pln'><a href='#n957'>957</a></p>
<p id='n958' class='pln'><a href='#n958'>958</a></p>
<p id='n959' class='pln'><a href='#n959'>959</a></p>
<p id='n960' class='pln'><a href='#n960'>960</a></p>
<p id='n961' class='pln'><a href='#n961'>961</a></p>
<p id='n962' class='pln'><a href='#n962'>962</a></p>
<p id='n963' class='pln'><a href='#n963'>963</a></p>
<p id='n964' class='pln'><a href='#n964'>964</a></p>
<p id='n965' class='stm run hide_run'><a href='#n965'>965</a></p>
<p id='n966' class='pln'><a href='#n966'>966</a></p>
<p id='n967' class='pln'><a href='#n967'>967</a></p>
<p id='n968' class='pln'><a href='#n968'>968</a></p>
<p id='n969' class='stm run hide_run'><a href='#n969'>969</a></p>
<p id='n970' class='stm run hide_run'><a href='#n970'>970</a></p>
<p id='n971' class='pln'><a href='#n971'>971</a></p>
<p id='n972' class='stm run hide_run'><a href='#n972'>972</a></p>
<p id='n973' class='stm run hide_run'><a href='#n973'>973</a></p>
<p id='n974' class='pln'><a href='#n974'>974</a></p>
<p id='n975' class='stm run hide_run'><a href='#n975'>975</a></p>
<p id='n976' class='pln'><a href='#n976'>976</a></p>
<p id='n977' class='stm run hide_run'><a href='#n977'>977</a></p>
<p id='n978' class='pln'><a href='#n978'>978</a></p>
<p id='n979' class='stm run hide_run'><a href='#n979'>979</a></p>
<p id='n980' class='pln'><a href='#n980'>980</a></p>
<p id='n981' class='stm run hide_run'><a href='#n981'>981</a></p>
<p id='n982' class='pln'><a href='#n982'>982</a></p>
<p id='n983' class='stm run hide_run'><a href='#n983'>983</a></p>
<p id='n984' class='pln'><a href='#n984'>984</a></p>
<p id='n985' class='stm run hide_run'><a href='#n985'>985</a></p>
<p id='n986' class='stm run hide_run'><a href='#n986'>986</a></p>
<p id='n987' class='stm mis'><a href='#n987'>987</a></p>
<p id='n988' class='stm mis'><a href='#n988'>988</a></p>
<p id='n989' class='pln'><a href='#n989'>989</a></p>
<p id='n990' class='stm run hide_run'><a href='#n990'>990</a></p>
<p id='n991' class='pln'><a href='#n991'>991</a></p>
<p id='n992' class='pln'><a href='#n992'>992</a></p>
<p id='n993' class='stm run hide_run'><a href='#n993'>993</a></p>
<p id='n994' class='stm run hide_run'><a href='#n994'>994</a></p>
<p id='n995' class='stm run hide_run'><a href='#n995'>995</a></p>
<p id='n996' class='stm run hide_run'><a href='#n996'>996</a></p>
<p id='n997' class='stm run hide_run'><a href='#n997'>997</a></p>
<p id='n998' class='stm mis'><a href='#n998'>998</a></p>
<p id='n999' class='stm mis'><a href='#n999'>999</a></p>
<p id='n1000' class='stm mis'><a href='#n1000'>1000</a></p>
<p id='n1001' class='pln'><a href='#n1001'>1001</a></p>
<p id='n1002' class='pln'><a href='#n1002'>1002</a></p>
<p id='n1003' class='pln'><a href='#n1003'>1003</a></p>
<p id='n1004' class='pln'><a href='#n1004'>1004</a></p>
<p id='n1005' class='stm run hide_run'><a href='#n1005'>1005</a></p>
<p id='n1006' class='pln'><a href='#n1006'>1006</a></p>
<p id='n1007' class='pln'><a href='#n1007'>1007</a></p>
<p id='n1008' class='stm run hide_run'><a href='#n1008'>1008</a></p>
<p id='n1009' class='stm run hide_run'><a href='#n1009'>1009</a></p>
<p id='n1010' class='stm run hide_run'><a href='#n1010'>1010</a></p>
<p id='n1011' class='stm mis'><a href='#n1011'>1011</a></p>
<p id='n1012' class='stm mis'><a href='#n1012'>1012</a></p>
<p id='n1013' class='stm mis'><a href='#n1013'>1013</a></p>
<p id='n1014' class='pln'><a href='#n1014'>1014</a></p>
<p id='n1015' class='pln'><a href='#n1015'>1015</a></p>
<p id='n1016' class='stm run hide_run'><a href='#n1016'>1016</a></p>
<p id='n1017' class='pln'><a href='#n1017'>1017</a></p>
<p id='n1018' class='pln'><a href='#n1018'>1018</a></p>
<p id='n1019' class='stm run hide_run'><a href='#n1019'>1019</a></p>
<p id='n1020' class='stm run hide_run'><a href='#n1020'>1020</a></p>
<p id='n1021' class='pln'><a href='#n1021'>1021</a></p>
<p id='n1022' class='pln'><a href='#n1022'>1022</a></p>
<p id='n1023' class='stm run hide_run'><a href='#n1023'>1023</a></p>
<p id='n1024' class='pln'><a href='#n1024'>1024</a></p>
<p id='n1025' class='pln'><a href='#n1025'>1025</a></p>
<p id='n1026' class='stm run hide_run'><a href='#n1026'>1026</a></p>
<p id='n1027' class='stm run hide_run'><a href='#n1027'>1027</a></p>
<p id='n1028' class='stm mis'><a href='#n1028'>1028</a></p>
<p id='n1029' class='pln'><a href='#n1029'>1029</a></p>
<p id='n1030' class='pln'><a href='#n1030'>1030</a></p>
<p id='n1031' class='stm run hide_run'><a href='#n1031'>1031</a></p>
<p id='n1032' class='stm run hide_run'><a href='#n1032'>1032</a></p>
<p id='n1033' class='stm run hide_run'><a href='#n1033'>1033</a></p>
<p id='n1034' class='stm run hide_run'><a href='#n1034'>1034</a></p>
<p id='n1035' class='pln'><a href='#n1035'>1035</a></p>
<p id='n1036' class='pln'><a href='#n1036'>1036</a></p>
<p id='n1037' class='stm run hide_run'><a href='#n1037'>1037</a></p>
<p id='n1038' class='stm run hide_run'><a href='#n1038'>1038</a></p>
<p id='n1039' class='pln'><a href='#n1039'>1039</a></p>
<p id='n1040' class='pln'><a href='#n1040'>1040</a></p>
<p id='n1041' class='pln'><a href='#n1041'>1041</a></p>
<p id='n1042' class='pln'><a href='#n1042'>1042</a></p>
<p id='n1043' class='stm run hide_run'><a href='#n1043'>1043</a></p>
<p id='n1044' class='stm run hide_run'><a href='#n1044'>1044</a></p>
<p id='n1045' class='stm run hide_run'><a href='#n1045'>1045</a></p>
<p id='n1046' class='stm run hide_run'><a href='#n1046'>1046</a></p>
<p id='n1047' class='stm run hide_run'><a href='#n1047'>1047</a></p>
<p id='n1048' class='stm run hide_run'><a href='#n1048'>1048</a></p>
<p id='n1049' class='stm mis'><a href='#n1049'>1049</a></p>
<p id='n1050' class='stm mis'><a href='#n1050'>1050</a></p>
<p id='n1051' class='pln'><a href='#n1051'>1051</a></p>
<p id='n1052' class='stm mis'><a href='#n1052'>1052</a></p>
<p id='n1053' class='pln'><a href='#n1053'>1053</a></p>
<p id='n1054' class='stm run hide_run'><a href='#n1054'>1054</a></p>
<p id='n1055' class='stm run hide_run'><a href='#n1055'>1055</a></p>
<p id='n1056' class='stm run hide_run'><a href='#n1056'>1056</a></p>
<p id='n1057' class='stm run hide_run'><a href='#n1057'>1057</a></p>
<p id='n1058' class='stm run hide_run'><a href='#n1058'>1058</a></p>
<p id='n1059' class='stm run hide_run'><a href='#n1059'>1059</a></p>
<p id='n1060' class='stm run hide_run'><a href='#n1060'>1060</a></p>
<p id='n1061' class='pln'><a href='#n1061'>1061</a></p>
<p id='n1062' class='stm mis'><a href='#n1062'>1062</a></p>
<p id='n1063' class='stm mis'><a href='#n1063'>1063</a></p>
<p id='n1064' class='pln'><a href='#n1064'>1064</a></p>
<p id='n1065' class='stm run hide_run'><a href='#n1065'>1065</a></p>
<p id='n1066' class='pln'><a href='#n1066'>1066</a></p>
<p id='n1067' class='pln'><a href='#n1067'>1067</a></p>
<p id='n1068' class='stm run hide_run'><a href='#n1068'>1068</a></p>
<p id='n1069' class='pln'><a href='#n1069'>1069</a></p>
<p id='n1070' class='pln'><a href='#n1070'>1070</a></p>
<p id='n1071' class='pln'><a href='#n1071'>1071</a></p>
<p id='n1072' class='pln'><a href='#n1072'>1072</a></p>
<p id='n1073' class='pln'><a href='#n1073'>1073</a></p>
<p id='n1074' class='pln'><a href='#n1074'>1074</a></p>
<p id='n1075' class='pln'><a href='#n1075'>1075</a></p>
<p id='n1076' class='pln'><a href='#n1076'>1076</a></p>
<p id='n1077' class='pln'><a href='#n1077'>1077</a></p>
<p id='n1078' class='pln'><a href='#n1078'>1078</a></p>
<p id='n1079' class='pln'><a href='#n1079'>1079</a></p>
<p id='n1080' class='pln'><a href='#n1080'>1080</a></p>
<p id='n1081' class='stm run hide_run'><a href='#n1081'>1081</a></p>
<p id='n1082' class='pln'><a href='#n1082'>1082</a></p>
<p id='n1083' class='pln'><a href='#n1083'>1083</a></p>
<p id='n1084' class='stm run hide_run'><a href='#n1084'>1084</a></p>
<p id='n1085' class='stm run hide_run'><a href='#n1085'>1085</a></p>
<p id='n1086' class='pln'><a href='#n1086'>1086</a></p>
<p id='n1087' class='stm run hide_run'><a href='#n1087'>1087</a></p>
<p id='n1088' class='pln'><a href='#n1088'>1088</a></p>
<p id='n1089' class='stm run hide_run'><a href='#n1089'>1089</a></p>
<p id='n1090' class='stm mis'><a href='#n1090'>1090</a></p>
<p id='n1091' class='pln'><a href='#n1091'>1091</a></p>
<p id='n1092' class='stm run hide_run'><a href='#n1092'>1092</a></p>
<p id='n1093' class='pln'><a href='#n1093'>1093</a></p>
<p id='n1094' class='stm mis'><a href='#n1094'>1094</a></p>
<p id='n1095' class='pln'><a href='#n1095'>1095</a></p>
<p id='n1096' class='stm run hide_run'><a href='#n1096'>1096</a></p>
<p id='n1097' class='pln'><a href='#n1097'>1097</a></p>
<p id='n1098' class='stm mis'><a href='#n1098'>1098</a></p>
<p id='n1099' class='pln'><a href='#n1099'>1099</a></p>
<p id='n1100' class='stm run hide_run'><a href='#n1100'>1100</a></p>
<p id='n1101' class='stm mis'><a href='#n1101'>1101</a></p>
<p id='n1102' class='stm mis'><a href='#n1102'>1102</a></p>
<p id='n1103' class='stm mis'><a href='#n1103'>1103</a></p>
<p id='n1104' class='stm mis'><a href='#n1104'>1104</a></p>
<p id='n1105' class='stm mis'><a href='#n1105'>1105</a></p>
<p id='n1106' class='stm mis'><a href='#n1106'>1106</a></p>
<p id='n1107' class='stm mis'><a href='#n1107'>1107</a></p>
<p id='n1108' class='stm mis'><a href='#n1108'>1108</a></p>
<p id='n1109' class='stm mis'><a href='#n1109'>1109</a></p>
<p id='n1110' class='stm mis'><a href='#n1110'>1110</a></p>
<p id='n1111' class='stm mis'><a href='#n1111'>1111</a></p>
<p id='n1112' class='pln'><a href='#n1112'>1112</a></p>
<p id='n1113' class='stm run hide_run'><a href='#n1113'>1113</a></p>
<p id='n1114' class='stm mis'><a href='#n1114'>1114</a></p>
<p id='n1115' class='stm mis'><a href='#n1115'>1115</a></p>
<p id='n1116' class='stm mis'><a href='#n1116'>1116</a></p>
<p id='n1117' class='pln'><a href='#n1117'>1117</a></p>
<p id='n1118' class='stm mis'><a href='#n1118'>1118</a></p>
<p id='n1119' class='stm mis'><a href='#n1119'>1119</a></p>
<p id='n1120' class='stm mis'><a href='#n1120'>1120</a></p>
<p id='n1121' class='pln'><a href='#n1121'>1121</a></p>
<p id='n1122' class='stm mis'><a href='#n1122'>1122</a></p>
<p id='n1123' class='stm mis'><a href='#n1123'>1123</a></p>
<p id='n1124' class='stm mis'><a href='#n1124'>1124</a></p>
<p id='n1125' class='stm mis'><a href='#n1125'>1125</a></p>
<p id='n1126' class='pln'><a href='#n1126'>1126</a></p>
<p id='n1127' class='stm mis'><a href='#n1127'>1127</a></p>
<p id='n1128' class='pln'><a href='#n1128'>1128</a></p>
<p id='n1129' class='stm mis'><a href='#n1129'>1129</a></p>
<p id='n1130' class='pln'><a href='#n1130'>1130</a></p>
<p id='n1131' class='stm run hide_run'><a href='#n1131'>1131</a></p>
<p id='n1132' class='stm mis'><a href='#n1132'>1132</a></p>
<p id='n1133' class='stm mis'><a href='#n1133'>1133</a></p>
<p id='n1134' class='pln'><a href='#n1134'>1134</a></p>
<p id='n1135' class='pln'><a href='#n1135'>1135</a></p>
<p id='n1136' class='pln'><a href='#n1136'>1136</a></p>
<p id='n1137' class='pln'><a href='#n1137'>1137</a></p>
<p id='n1138' class='pln'><a href='#n1138'>1138</a></p>
<p id='n1139' class='pln'><a href='#n1139'>1139</a></p>
<p id='n1140' class='pln'><a href='#n1140'>1140</a></p>
<p id='n1141' class='stm mis'><a href='#n1141'>1141</a></p>
<p id='n1142' class='stm mis'><a href='#n1142'>1142</a></p>
<p id='n1143' class='stm mis'><a href='#n1143'>1143</a></p>
<p id='n1144' class='pln'><a href='#n1144'>1144</a></p>
<p id='n1145' class='pln'><a href='#n1145'>1145</a></p>
<p id='n1146' class='pln'><a href='#n1146'>1146</a></p>
<p id='n1147' class='pln'><a href='#n1147'>1147</a></p>
<p id='n1148' class='pln'><a href='#n1148'>1148</a></p>
<p id='n1149' class='pln'><a href='#n1149'>1149</a></p>
<p id='n1150' class='pln'><a href='#n1150'>1150</a></p>
<p id='n1151' class='pln'><a href='#n1151'>1151</a></p>
<p id='n1152' class='pln'><a href='#n1152'>1152</a></p>
<p id='n1153' class='pln'><a href='#n1153'>1153</a></p>
<p id='n1154' class='pln'><a href='#n1154'>1154</a></p>
<p id='n1155' class='stm mis'><a href='#n1155'>1155</a></p>
<p id='n1156' class='pln'><a href='#n1156'>1156</a></p>
<p id='n1157' class='stm run hide_run'><a href='#n1157'>1157</a></p>
<p id='n1158' class='stm mis'><a href='#n1158'>1158</a></p>
<p id='n1159' class='stm mis'><a href='#n1159'>1159</a></p>
<p id='n1160' class='pln'><a href='#n1160'>1160</a></p>
<p id='n1161' class='pln'><a href='#n1161'>1161</a></p>
<p id='n1162' class='pln'><a href='#n1162'>1162</a></p>
<p id='n1163' class='pln'><a href='#n1163'>1163</a></p>
<p id='n1164' class='pln'><a href='#n1164'>1164</a></p>
<p id='n1165' class='pln'><a href='#n1165'>1165</a></p>
<p id='n1166' class='pln'><a href='#n1166'>1166</a></p>
<p id='n1167' class='stm mis'><a href='#n1167'>1167</a></p>
<p id='n1168' class='stm mis'><a href='#n1168'>1168</a></p>
<p id='n1169' class='pln'><a href='#n1169'>1169</a></p>
<p id='n1170' class='pln'><a href='#n1170'>1170</a></p>
<p id='n1171' class='pln'><a href='#n1171'>1171</a></p>
<p id='n1172' class='pln'><a href='#n1172'>1172</a></p>
<p id='n1173' class='pln'><a href='#n1173'>1173</a></p>
<p id='n1174' class='pln'><a href='#n1174'>1174</a></p>
<p id='n1175' class='pln'><a href='#n1175'>1175</a></p>
<p id='n1176' class='stm mis'><a href='#n1176'>1176</a></p>
<p id='n1177' class='pln'><a href='#n1177'>1177</a></p>
<p id='n1178' class='stm mis'><a href='#n1178'>1178</a></p>
<p id='n1179' class='pln'><a href='#n1179'>1179</a></p>
<p id='n1180' class='pln'><a href='#n1180'>1180</a></p>
<p id='n1181' class='pln'><a href='#n1181'>1181</a></p>
<p id='n1182' class='pln'><a href='#n1182'>1182</a></p>
<p id='n1183' class='pln'><a href='#n1183'>1183</a></p>
<p id='n1184' class='pln'><a href='#n1184'>1184</a></p>
<p id='n1185' class='pln'><a href='#n1185'>1185</a></p>
<p id='n1186' class='pln'><a href='#n1186'>1186</a></p>
<p id='n1187' class='pln'><a href='#n1187'>1187</a></p>
<p id='n1188' class='pln'><a href='#n1188'>1188</a></p>
<p id='n1189' class='pln'><a href='#n1189'>1189</a></p>
<p id='n1190' class='pln'><a href='#n1190'>1190</a></p>
<p id='n1191' class='pln'><a href='#n1191'>1191</a></p>
<p id='n1192' class='pln'><a href='#n1192'>1192</a></p>
<p id='n1193' class='stm mis'><a href='#n1193'>1193</a></p>
<p id='n1194' class='pln'><a href='#n1194'>1194</a></p>
<p id='n1195' class='pln'><a href='#n1195'>1195</a></p>
<p id='n1196' class='pln'><a href='#n1196'>1196</a></p>
<p id='n1197' class='pln'><a href='#n1197'>1197</a></p>
<p id='n1198' class='pln'><a href='#n1198'>1198</a></p>
<p id='n1199' class='pln'><a href='#n1199'>1199</a></p>
<p id='n1200' class='pln'><a href='#n1200'>1200</a></p>
<p id='n1201' class='pln'><a href='#n1201'>1201</a></p>
<p id='n1202' class='pln'><a href='#n1202'>1202</a></p>
<p id='n1203' class='pln'><a href='#n1203'>1203</a></p>
<p id='n1204' class='stm run hide_run'><a href='#n1204'>1204</a></p>
<p id='n1205' class='stm mis'><a href='#n1205'>1205</a></p>
<p id='n1206' class='stm mis'><a href='#n1206'>1206</a></p>
<p id='n1207' class='pln'><a href='#n1207'>1207</a></p>
<p id='n1208' class='stm mis'><a href='#n1208'>1208</a></p>
<p id='n1209' class='stm mis'><a href='#n1209'>1209</a></p>
<p id='n1210' class='stm mis'><a href='#n1210'>1210</a></p>
<p id='n1211' class='pln'><a href='#n1211'>1211</a></p>
<p id='n1212' class='stm mis'><a href='#n1212'>1212</a></p>
<p id='n1213' class='pln'><a href='#n1213'>1213</a></p>
<p id='n1214' class='stm mis'><a href='#n1214'>1214</a></p>
<p id='n1215' class='pln'><a href='#n1215'>1215</a></p>
<p id='n1216' class='pln'><a href='#n1216'>1216</a></p>
<p id='n1217' class='stm run hide_run'><a href='#n1217'>1217</a></p>
<p id='n1218' class='pln'><a href='#n1218'>1218</a></p>
<p id='n1219' class='pln'><a href='#n1219'>1219</a></p>
<p id='n1220' class='stm run hide_run'><a href='#n1220'>1220</a></p>
<p id='n1221' class='stm run hide_run'><a href='#n1221'>1221</a></p>
<p id='n1222' class='pln'><a href='#n1222'>1222</a></p>
<p id='n1223' class='stm run hide_run'><a href='#n1223'>1223</a></p>
<p id='n1224' class='stm mis'><a href='#n1224'>1224</a></p>
<p id='n1225' class='pln'><a href='#n1225'>1225</a></p>
<p id='n1226' class='stm run hide_run'><a href='#n1226'>1226</a></p>
<p id='n1227' class='pln'><a href='#n1227'>1227</a></p>
<p id='n1228' class='stm mis'><a href='#n1228'>1228</a></p>
<p id='n1229' class='stm mis'><a href='#n1229'>1229</a></p>
<p id='n1230' class='pln'><a href='#n1230'>1230</a></p>
<p id='n1231' class='stm run hide_run'><a href='#n1231'>1231</a></p>
<p id='n1232' class='pln'><a href='#n1232'>1232</a></p>
<p id='n1233' class='stm mis'><a href='#n1233'>1233</a></p>
<p id='n1234' class='pln'><a href='#n1234'>1234</a></p>
<p id='n1235' class='stm run hide_run'><a href='#n1235'>1235</a></p>
<p id='n1236' class='pln'><a href='#n1236'>1236</a></p>
<p id='n1237' class='stm mis'><a href='#n1237'>1237</a></p>
<p id='n1238' class='pln'><a href='#n1238'>1238</a></p>
<p id='n1239' class='stm run hide_run'><a href='#n1239'>1239</a></p>
<p id='n1240' class='pln'><a href='#n1240'>1240</a></p>
<p id='n1241' class='stm mis'><a href='#n1241'>1241</a></p>
<p id='n1242' class='stm mis'><a href='#n1242'>1242</a></p>
<p id='n1243' class='stm mis'><a href='#n1243'>1243</a></p>
<p id='n1244' class='pln'><a href='#n1244'>1244</a></p>
<p id='n1245' class='stm mis'><a href='#n1245'>1245</a></p>
<p id='n1246' class='pln'><a href='#n1246'>1246</a></p>
<p id='n1247' class='pln'><a href='#n1247'>1247</a></p>
<p id='n1248' class='pln'><a href='#n1248'>1248</a></p>
<p id='n1249' class='pln'><a href='#n1249'>1249</a></p>
<p id='n1250' class='stm mis'><a href='#n1250'>1250</a></p>
<p id='n1251' class='stm mis'><a href='#n1251'>1251</a></p>
<p id='n1252' class='stm mis'><a href='#n1252'>1252</a></p>
<p id='n1253' class='stm mis'><a href='#n1253'>1253</a></p>
<p id='n1254' class='pln'><a href='#n1254'>1254</a></p>
<p id='n1255' class='stm mis'><a href='#n1255'>1255</a></p>
<p id='n1256' class='pln'><a href='#n1256'>1256</a></p>
<p id='n1257' class='pln'><a href='#n1257'>1257</a></p>
<p id='n1258' class='pln'><a href='#n1258'>1258</a></p>
<p id='n1259' class='pln'><a href='#n1259'>1259</a></p>
<p id='n1260' class='stm mis'><a href='#n1260'>1260</a></p>
<p id='n1261' class='pln'><a href='#n1261'>1261</a></p>
<p id='n1262' class='stm mis'><a href='#n1262'>1262</a></p>
<p id='n1263' class='pln'><a href='#n1263'>1263</a></p>
<p id='n1264' class='pln'><a href='#n1264'>1264</a></p>
<p id='n1265' class='pln'><a href='#n1265'>1265</a></p>
<p id='n1266' class='stm mis'><a href='#n1266'>1266</a></p>
<p id='n1267' class='stm mis'><a href='#n1267'>1267</a></p>
<p id='n1268' class='stm mis'><a href='#n1268'>1268</a></p>
<p id='n1269' class='pln'><a href='#n1269'>1269</a></p>
<p id='n1270' class='stm mis'><a href='#n1270'>1270</a></p>
<p id='n1271' class='pln'><a href='#n1271'>1271</a></p>
<p id='n1272' class='stm mis'><a href='#n1272'>1272</a></p>
<p id='n1273' class='pln'><a href='#n1273'>1273</a></p>
<p id='n1274' class='pln'><a href='#n1274'>1274</a></p>
<p id='n1275' class='pln'><a href='#n1275'>1275</a></p>
<p id='n1276' class='pln'><a href='#n1276'>1276</a></p>
<p id='n1277' class='pln'><a href='#n1277'>1277</a></p>
<p id='n1278' class='stm mis'><a href='#n1278'>1278</a></p>
<p id='n1279' class='stm mis'><a href='#n1279'>1279</a></p>
<p id='n1280' class='pln'><a href='#n1280'>1280</a></p>
<p id='n1281' class='pln'><a href='#n1281'>1281</a></p>
<p id='n1282' class='stm mis'><a href='#n1282'>1282</a></p>
<p id='n1283' class='pln'><a href='#n1283'>1283</a></p>
<p id='n1284' class='stm mis'><a href='#n1284'>1284</a></p>
<p id='n1285' class='stm mis'><a href='#n1285'>1285</a></p>
<p id='n1286' class='pln'><a href='#n1286'>1286</a></p>
<p id='n1287' class='stm mis'><a href='#n1287'>1287</a></p>
<p id='n1288' class='stm mis'><a href='#n1288'>1288</a></p>
<p id='n1289' class='pln'><a href='#n1289'>1289</a></p>
<p id='n1290' class='stm mis'><a href='#n1290'>1290</a></p>
<p id='n1291' class='stm mis'><a href='#n1291'>1291</a></p>
<p id='n1292' class='stm mis'><a href='#n1292'>1292</a></p>
<p id='n1293' class='pln'><a href='#n1293'>1293</a></p>
<p id='n1294' class='stm run hide_run'><a href='#n1294'>1294</a></p>
<p id='n1295' class='stm mis'><a href='#n1295'>1295</a></p>
<p id='n1296' class='pln'><a href='#n1296'>1296</a></p>
<p id='n1297' class='stm mis'><a href='#n1297'>1297</a></p>
<p id='n1298' class='stm mis'><a href='#n1298'>1298</a></p>
<p id='n1299' class='stm mis'><a href='#n1299'>1299</a></p>
<p id='n1300' class='stm mis'><a href='#n1300'>1300</a></p>
<p id='n1301' class='stm mis'><a href='#n1301'>1301</a></p>
<p id='n1302' class='stm mis'><a href='#n1302'>1302</a></p>
<p id='n1303' class='stm mis'><a href='#n1303'>1303</a></p>
<p id='n1304' class='stm mis'><a href='#n1304'>1304</a></p>
<p id='n1305' class='stm mis'><a href='#n1305'>1305</a></p>
<p id='n1306' class='pln'><a href='#n1306'>1306</a></p>
<p id='n1307' class='pln'><a href='#n1307'>1307</a></p>
<p id='n1308' class='stm mis'><a href='#n1308'>1308</a></p>
<p id='n1309' class='stm mis'><a href='#n1309'>1309</a></p>
<p id='n1310' class='pln'><a href='#n1310'>1310</a></p>
<p id='n1311' class='stm mis'><a href='#n1311'>1311</a></p>
<p id='n1312' class='pln'><a href='#n1312'>1312</a></p>
<p id='n1313' class='stm mis'><a href='#n1313'>1313</a></p>
<p id='n1314' class='stm mis'><a href='#n1314'>1314</a></p>
<p id='n1315' class='pln'><a href='#n1315'>1315</a></p>
<p id='n1316' class='stm mis'><a href='#n1316'>1316</a></p>
<p id='n1317' class='stm mis'><a href='#n1317'>1317</a></p>
<p id='n1318' class='stm mis'><a href='#n1318'>1318</a></p>
<p id='n1319' class='stm mis'><a href='#n1319'>1319</a></p>
<p id='n1320' class='pln'><a href='#n1320'>1320</a></p>
<p id='n1321' class='pln'><a href='#n1321'>1321</a></p>
<p id='n1322' class='pln'><a href='#n1322'>1322</a></p>
<p id='n1323' class='stm mis'><a href='#n1323'>1323</a></p>
<p id='n1324' class='stm mis'><a href='#n1324'>1324</a></p>
<p id='n1325' class='stm mis'><a href='#n1325'>1325</a></p>
<p id='n1326' class='pln'><a href='#n1326'>1326</a></p>
<p id='n1327' class='stm mis'><a href='#n1327'>1327</a></p>
<p id='n1328' class='stm mis'><a href='#n1328'>1328</a></p>
<p id='n1329' class='pln'><a href='#n1329'>1329</a></p>
<p id='n1330' class='pln'><a href='#n1330'>1330</a></p>
<p id='n1331' class='stm mis'><a href='#n1331'>1331</a></p>
<p id='n1332' class='stm mis'><a href='#n1332'>1332</a></p>
<p id='n1333' class='pln'><a href='#n1333'>1333</a></p>
<p id='n1334' class='pln'><a href='#n1334'>1334</a></p>
<p id='n1335' class='pln'><a href='#n1335'>1335</a></p>
<p id='n1336' class='pln'><a href='#n1336'>1336</a></p>
<p id='n1337' class='pln'><a href='#n1337'>1337</a></p>
<p id='n1338' class='pln'><a href='#n1338'>1338</a></p>
<p id='n1339' class='pln'><a href='#n1339'>1339</a></p>
<p id='n1340' class='stm mis'><a href='#n1340'>1340</a></p>
<p id='n1341' class='stm mis'><a href='#n1341'>1341</a></p>
<p id='n1342' class='stm mis'><a href='#n1342'>1342</a></p>
<p id='n1343' class='stm mis'><a href='#n1343'>1343</a></p>
<p id='n1344' class='stm mis'><a href='#n1344'>1344</a></p>
<p id='n1345' class='pln'><a href='#n1345'>1345</a></p>
<p id='n1346' class='pln'><a href='#n1346'>1346</a></p>
<p id='n1347' class='stm mis'><a href='#n1347'>1347</a></p>
<p id='n1348' class='stm mis'><a href='#n1348'>1348</a></p>
<p id='n1349' class='stm mis'><a href='#n1349'>1349</a></p>
<p id='n1350' class='stm mis'><a href='#n1350'>1350</a></p>
<p id='n1351' class='stm mis'><a href='#n1351'>1351</a></p>
<p id='n1352' class='pln'><a href='#n1352'>1352</a></p>
<p id='n1353' class='stm mis'><a href='#n1353'>1353</a></p>
<p id='n1354' class='pln'><a href='#n1354'>1354</a></p>
<p id='n1355' class='pln'><a href='#n1355'>1355</a></p>
<p id='n1356' class='pln'><a href='#n1356'>1356</a></p>
<p id='n1357' class='pln'><a href='#n1357'>1357</a></p>
<p id='n1358' class='pln'><a href='#n1358'>1358</a></p>
<p id='n1359' class='pln'><a href='#n1359'>1359</a></p>
<p id='n1360' class='pln'><a href='#n1360'>1360</a></p>
<p id='n1361' class='pln'><a href='#n1361'>1361</a></p>
<p id='n1362' class='pln'><a href='#n1362'>1362</a></p>
<p id='n1363' class='stm run hide_run'><a href='#n1363'>1363</a></p>
<p id='n1364' class='pln'><a href='#n1364'>1364</a></p>
<p id='n1365' class='stm run hide_run'><a href='#n1365'>1365</a></p>
<p id='n1366' class='stm run hide_run'><a href='#n1366'>1366</a></p>
<p id='n1367' class='stm run hide_run'><a href='#n1367'>1367</a></p>
<p id='n1368' class='stm run hide_run'><a href='#n1368'>1368</a></p>
<p id='n1369' class='pln'><a href='#n1369'>1369</a></p>
<p id='n1370' class='stm run hide_run'><a href='#n1370'>1370</a></p>
<p id='n1371' class='stm mis'><a href='#n1371'>1371</a></p>
<p id='n1372' class='pln'><a href='#n1372'>1372</a></p>
<p id='n1373' class='stm run hide_run'><a href='#n1373'>1373</a></p>
<p id='n1374' class='pln'><a href='#n1374'>1374</a></p>
<p id='n1375' class='stm mis'><a href='#n1375'>1375</a></p>
<p id='n1376' class='stm mis'><a href='#n1376'>1376</a></p>
<p id='n1377' class='pln'><a href='#n1377'>1377</a></p>
<p id='n1378' class='stm run hide_run'><a href='#n1378'>1378</a></p>
<p id='n1379' class='stm mis'><a href='#n1379'>1379</a></p>
<p id='n1380' class='stm mis'><a href='#n1380'>1380</a></p>
<p id='n1381' class='stm mis'><a href='#n1381'>1381</a></p>
<p id='n1382' class='stm mis'><a href='#n1382'>1382</a></p>
<p id='n1383' class='pln'><a href='#n1383'>1383</a></p>
<p id='n1384' class='stm mis'><a href='#n1384'>1384</a></p>
<p id='n1385' class='stm mis'><a href='#n1385'>1385</a></p>
<p id='n1386' class='stm mis'><a href='#n1386'>1386</a></p>
<p id='n1387' class='stm mis'><a href='#n1387'>1387</a></p>
<p id='n1388' class='stm mis'><a href='#n1388'>1388</a></p>
<p id='n1389' class='stm mis'><a href='#n1389'>1389</a></p>
<p id='n1390' class='stm mis'><a href='#n1390'>1390</a></p>
<p id='n1391' class='stm mis'><a href='#n1391'>1391</a></p>
<p id='n1392' class='stm mis'><a href='#n1392'>1392</a></p>
<p id='n1393' class='pln'><a href='#n1393'>1393</a></p>
<p id='n1394' class='stm mis'><a href='#n1394'>1394</a></p>
<p id='n1395' class='stm mis'><a href='#n1395'>1395</a></p>
<p id='n1396' class='stm mis'><a href='#n1396'>1396</a></p>
<p id='n1397' class='stm mis'><a href='#n1397'>1397</a></p>
<p id='n1398' class='stm mis'><a href='#n1398'>1398</a></p>
<p id='n1399' class='stm mis'><a href='#n1399'>1399</a></p>
<p id='n1400' class='stm mis'><a href='#n1400'>1400</a></p>
<p id='n1401' class='stm mis'><a href='#n1401'>1401</a></p>
<p id='n1402' class='stm mis'><a href='#n1402'>1402</a></p>
<p id='n1403' class='stm mis'><a href='#n1403'>1403</a></p>
<p id='n1404' class='stm mis'><a href='#n1404'>1404</a></p>
<p id='n1405' class='stm mis'><a href='#n1405'>1405</a></p>
<p id='n1406' class='stm mis'><a href='#n1406'>1406</a></p>
<p id='n1407' class='pln'><a href='#n1407'>1407</a></p>
<p id='n1408' class='stm run hide_run'><a href='#n1408'>1408</a></p>
<p id='n1409' class='pln'><a href='#n1409'>1409</a></p>
<p id='n1410' class='pln'><a href='#n1410'>1410</a></p>
<p id='n1411' class='stm mis'><a href='#n1411'>1411</a></p>
<p id='n1412' class='stm mis'><a href='#n1412'>1412</a></p>
<p id='n1413' class='stm mis'><a href='#n1413'>1413</a></p>
<p id='n1414' class='pln'><a href='#n1414'>1414</a></p>
<p id='n1415' class='stm mis'><a href='#n1415'>1415</a></p>
<p id='n1416' class='stm mis'><a href='#n1416'>1416</a></p>
<p id='n1417' class='stm mis'><a href='#n1417'>1417</a></p>
<p id='n1418' class='stm mis'><a href='#n1418'>1418</a></p>
<p id='n1419' class='stm mis'><a href='#n1419'>1419</a></p>
<p id='n1420' class='stm mis'><a href='#n1420'>1420</a></p>
<p id='n1421' class='stm mis'><a href='#n1421'>1421</a></p>
<p id='n1422' class='stm mis'><a href='#n1422'>1422</a></p>
<p id='n1423' class='stm mis'><a href='#n1423'>1423</a></p>
<p id='n1424' class='stm mis'><a href='#n1424'>1424</a></p>
<p id='n1425' class='pln'><a href='#n1425'>1425</a></p>
<p id='n1426' class='stm mis'><a href='#n1426'>1426</a></p>
<p id='n1427' class='stm mis'><a href='#n1427'>1427</a></p>
<p id='n1428' class='pln'><a href='#n1428'>1428</a></p>
<p id='n1429' class='stm mis'><a href='#n1429'>1429</a></p>
<p id='n1430' class='stm mis'><a href='#n1430'>1430</a></p>
<p id='n1431' class='pln'><a href='#n1431'>1431</a></p>
<p id='n1432' class='stm mis'><a href='#n1432'>1432</a></p>
<p id='n1433' class='stm mis'><a href='#n1433'>1433</a></p>
<p id='n1434' class='stm mis'><a href='#n1434'>1434</a></p>
<p id='n1435' class='stm mis'><a href='#n1435'>1435</a></p>
<p id='n1436' class='stm mis'><a href='#n1436'>1436</a></p>
<p id='n1437' class='pln'><a href='#n1437'>1437</a></p>
<p id='n1438' class='pln'><a href='#n1438'>1438</a></p>
<p id='n1439' class='stm run hide_run'><a href='#n1439'>1439</a></p>
<p id='n1440' class='pln'><a href='#n1440'>1440</a></p>
<p id='n1441' class='stm run hide_run'><a href='#n1441'>1441</a></p>
<p id='n1442' class='stm run hide_run'><a href='#n1442'>1442</a></p>
<p id='n1443' class='stm run hide_run'><a href='#n1443'>1443</a></p>
<p id='n1444' class='stm run hide_run'><a href='#n1444'>1444</a></p>
<p id='n1445' class='stm run hide_run'><a href='#n1445'>1445</a></p>
<p id='n1446' class='stm run hide_run'><a href='#n1446'>1446</a></p>
<p id='n1447' class='pln'><a href='#n1447'>1447</a></p>
<p id='n1448' class='stm run hide_run'><a href='#n1448'>1448</a></p>
<p id='n1449' class='stm mis'><a href='#n1449'>1449</a></p>
<p id='n1450' class='pln'><a href='#n1450'>1450</a></p>
<p id='n1451' class='stm run hide_run'><a href='#n1451'>1451</a></p>
<p id='n1452' class='pln'><a href='#n1452'>1452</a></p>
<p id='n1453' class='stm mis'><a href='#n1453'>1453</a></p>
<p id='n1454' class='stm mis'><a href='#n1454'>1454</a></p>
<p id='n1455' class='pln'><a href='#n1455'>1455</a></p>
<p id='n1456' class='stm run hide_run'><a href='#n1456'>1456</a></p>
<p id='n1457' class='stm mis'><a href='#n1457'>1457</a></p>
<p id='n1458' class='stm mis'><a href='#n1458'>1458</a></p>
<p id='n1459' class='stm mis'><a href='#n1459'>1459</a></p>
<p id='n1460' class='stm mis'><a href='#n1460'>1460</a></p>
<p id='n1461' class='pln'><a href='#n1461'>1461</a></p>
<p id='n1462' class='stm mis'><a href='#n1462'>1462</a></p>
<p id='n1463' class='stm mis'><a href='#n1463'>1463</a></p>
<p id='n1464' class='stm mis'><a href='#n1464'>1464</a></p>
<p id='n1465' class='stm mis'><a href='#n1465'>1465</a></p>
<p id='n1466' class='stm mis'><a href='#n1466'>1466</a></p>
<p id='n1467' class='stm mis'><a href='#n1467'>1467</a></p>
<p id='n1468' class='stm mis'><a href='#n1468'>1468</a></p>
<p id='n1469' class='stm mis'><a href='#n1469'>1469</a></p>
<p id='n1470' class='stm mis'><a href='#n1470'>1470</a></p>
<p id='n1471' class='pln'><a href='#n1471'>1471</a></p>
<p id='n1472' class='stm mis'><a href='#n1472'>1472</a></p>
<p id='n1473' class='stm mis'><a href='#n1473'>1473</a></p>
<p id='n1474' class='stm mis'><a href='#n1474'>1474</a></p>
<p id='n1475' class='stm mis'><a href='#n1475'>1475</a></p>
<p id='n1476' class='stm mis'><a href='#n1476'>1476</a></p>
<p id='n1477' class='stm mis'><a href='#n1477'>1477</a></p>
<p id='n1478' class='stm mis'><a href='#n1478'>1478</a></p>
<p id='n1479' class='stm mis'><a href='#n1479'>1479</a></p>
<p id='n1480' class='stm mis'><a href='#n1480'>1480</a></p>
<p id='n1481' class='stm mis'><a href='#n1481'>1481</a></p>
<p id='n1482' class='stm mis'><a href='#n1482'>1482</a></p>
<p id='n1483' class='stm mis'><a href='#n1483'>1483</a></p>
<p id='n1484' class='stm mis'><a href='#n1484'>1484</a></p>
<p id='n1485' class='pln'><a href='#n1485'>1485</a></p>
<p id='n1486' class='stm run hide_run'><a href='#n1486'>1486</a></p>
<p id='n1487' class='pln'><a href='#n1487'>1487</a></p>
<p id='n1488' class='pln'><a href='#n1488'>1488</a></p>
<p id='n1489' class='stm mis'><a href='#n1489'>1489</a></p>
<p id='n1490' class='stm mis'><a href='#n1490'>1490</a></p>
<p id='n1491' class='pln'><a href='#n1491'>1491</a></p>
<p id='n1492' class='stm mis'><a href='#n1492'>1492</a></p>
<p id='n1493' class='stm mis'><a href='#n1493'>1493</a></p>
<p id='n1494' class='stm mis'><a href='#n1494'>1494</a></p>
<p id='n1495' class='stm mis'><a href='#n1495'>1495</a></p>
<p id='n1496' class='stm mis'><a href='#n1496'>1496</a></p>
<p id='n1497' class='stm mis'><a href='#n1497'>1497</a></p>
<p id='n1498' class='stm mis'><a href='#n1498'>1498</a></p>
<p id='n1499' class='stm mis'><a href='#n1499'>1499</a></p>
<p id='n1500' class='stm mis'><a href='#n1500'>1500</a></p>
<p id='n1501' class='pln'><a href='#n1501'>1501</a></p>
<p id='n1502' class='pln'><a href='#n1502'>1502</a></p>
<p id='n1503' class='stm mis'><a href='#n1503'>1503</a></p>
<p id='n1504' class='stm mis'><a href='#n1504'>1504</a></p>
<p id='n1505' class='stm mis'><a href='#n1505'>1505</a></p>
<p id='n1506' class='stm mis'><a href='#n1506'>1506</a></p>
<p id='n1507' class='stm mis'><a href='#n1507'>1507</a></p>
<p id='n1508' class='pln'><a href='#n1508'>1508</a></p>
<p id='n1509' class='stm mis'><a href='#n1509'>1509</a></p>
<p id='n1510' class='stm mis'><a href='#n1510'>1510</a></p>
<p id='n1511' class='stm mis'><a href='#n1511'>1511</a></p>
<p id='n1512' class='pln'><a href='#n1512'>1512</a></p>
<p id='n1513' class='stm mis'><a href='#n1513'>1513</a></p>
<p id='n1514' class='stm mis'><a href='#n1514'>1514</a></p>
<p id='n1515' class='stm mis'><a href='#n1515'>1515</a></p>
<p id='n1516' class='stm mis'><a href='#n1516'>1516</a></p>
<p id='n1517' class='pln'><a href='#n1517'>1517</a></p>
<p id='n1518' class='stm mis'><a href='#n1518'>1518</a></p>
<p id='n1519' class='pln'><a href='#n1519'>1519</a></p>
<p id='n1520' class='pln'><a href='#n1520'>1520</a></p>
<p id='n1521' class='stm run hide_run'><a href='#n1521'>1521</a></p>
<p id='n1522' class='pln'><a href='#n1522'>1522</a></p>
<p id='n1523' class='pln'><a href='#n1523'>1523</a></p>
<p id='n1524' class='stm run hide_run'><a href='#n1524'>1524</a></p>
<p id='n1525' class='stm run hide_run'><a href='#n1525'>1525</a></p>
<p id='n1526' class='stm run hide_run'><a href='#n1526'>1526</a></p>
<p id='n1527' class='stm run hide_run'><a href='#n1527'>1527</a></p>
<p id='n1528' class='stm run hide_run'><a href='#n1528'>1528</a></p>
<p id='n1529' class='stm run hide_run'><a href='#n1529'>1529</a></p>
<p id='n1530' class='stm run hide_run'><a href='#n1530'>1530</a></p>
<p id='n1531' class='pln'><a href='#n1531'>1531</a></p>
<p id='n1532' class='stm run hide_run'><a href='#n1532'>1532</a></p>
<p id='n1533' class='stm mis'><a href='#n1533'>1533</a></p>
<p id='n1534' class='pln'><a href='#n1534'>1534</a></p>
<p id='n1535' class='stm run hide_run'><a href='#n1535'>1535</a></p>
<p id='n1536' class='pln'><a href='#n1536'>1536</a></p>
<p id='n1537' class='stm mis'><a href='#n1537'>1537</a></p>
<p id='n1538' class='stm mis'><a href='#n1538'>1538</a></p>
<p id='n1539' class='pln'><a href='#n1539'>1539</a></p>
<p id='n1540' class='stm run hide_run'><a href='#n1540'>1540</a></p>
<p id='n1541' class='stm mis'><a href='#n1541'>1541</a></p>
<p id='n1542' class='stm mis'><a href='#n1542'>1542</a></p>
<p id='n1543' class='stm mis'><a href='#n1543'>1543</a></p>
<p id='n1544' class='stm mis'><a href='#n1544'>1544</a></p>
<p id='n1545' class='pln'><a href='#n1545'>1545</a></p>
<p id='n1546' class='stm mis'><a href='#n1546'>1546</a></p>
<p id='n1547' class='stm mis'><a href='#n1547'>1547</a></p>
<p id='n1548' class='stm mis'><a href='#n1548'>1548</a></p>
<p id='n1549' class='stm mis'><a href='#n1549'>1549</a></p>
<p id='n1550' class='stm mis'><a href='#n1550'>1550</a></p>
<p id='n1551' class='stm mis'><a href='#n1551'>1551</a></p>
<p id='n1552' class='stm mis'><a href='#n1552'>1552</a></p>
<p id='n1553' class='stm mis'><a href='#n1553'>1553</a></p>
<p id='n1554' class='stm mis'><a href='#n1554'>1554</a></p>
<p id='n1555' class='pln'><a href='#n1555'>1555</a></p>
<p id='n1556' class='stm mis'><a href='#n1556'>1556</a></p>
<p id='n1557' class='stm mis'><a href='#n1557'>1557</a></p>
<p id='n1558' class='stm mis'><a href='#n1558'>1558</a></p>
<p id='n1559' class='stm mis'><a href='#n1559'>1559</a></p>
<p id='n1560' class='stm mis'><a href='#n1560'>1560</a></p>
<p id='n1561' class='stm mis'><a href='#n1561'>1561</a></p>
<p id='n1562' class='stm mis'><a href='#n1562'>1562</a></p>
<p id='n1563' class='stm mis'><a href='#n1563'>1563</a></p>
<p id='n1564' class='stm mis'><a href='#n1564'>1564</a></p>
<p id='n1565' class='stm mis'><a href='#n1565'>1565</a></p>
<p id='n1566' class='stm mis'><a href='#n1566'>1566</a></p>
<p id='n1567' class='stm mis'><a href='#n1567'>1567</a></p>
<p id='n1568' class='stm mis'><a href='#n1568'>1568</a></p>
<p id='n1569' class='pln'><a href='#n1569'>1569</a></p>
<p id='n1570' class='stm run hide_run'><a href='#n1570'>1570</a></p>
<p id='n1571' class='pln'><a href='#n1571'>1571</a></p>
<p id='n1572' class='pln'><a href='#n1572'>1572</a></p>
<p id='n1573' class='stm mis'><a href='#n1573'>1573</a></p>
<p id='n1574' class='stm mis'><a href='#n1574'>1574</a></p>
<p id='n1575' class='stm mis'><a href='#n1575'>1575</a></p>
<p id='n1576' class='pln'><a href='#n1576'>1576</a></p>
<p id='n1577' class='stm mis'><a href='#n1577'>1577</a></p>
<p id='n1578' class='stm mis'><a href='#n1578'>1578</a></p>
<p id='n1579' class='stm mis'><a href='#n1579'>1579</a></p>
<p id='n1580' class='stm mis'><a href='#n1580'>1580</a></p>
<p id='n1581' class='stm mis'><a href='#n1581'>1581</a></p>
<p id='n1582' class='stm mis'><a href='#n1582'>1582</a></p>
<p id='n1583' class='stm mis'><a href='#n1583'>1583</a></p>
<p id='n1584' class='stm mis'><a href='#n1584'>1584</a></p>
<p id='n1585' class='stm mis'><a href='#n1585'>1585</a></p>
<p id='n1586' class='pln'><a href='#n1586'>1586</a></p>
<p id='n1587' class='pln'><a href='#n1587'>1587</a></p>
<p id='n1588' class='stm mis'><a href='#n1588'>1588</a></p>
<p id='n1589' class='stm mis'><a href='#n1589'>1589</a></p>
<p id='n1590' class='stm mis'><a href='#n1590'>1590</a></p>
<p id='n1591' class='stm mis'><a href='#n1591'>1591</a></p>
<p id='n1592' class='stm mis'><a href='#n1592'>1592</a></p>
<p id='n1593' class='stm mis'><a href='#n1593'>1593</a></p>
<p id='n1594' class='pln'><a href='#n1594'>1594</a></p>
<p id='n1595' class='stm mis'><a href='#n1595'>1595</a></p>
<p id='n1596' class='stm mis'><a href='#n1596'>1596</a></p>
<p id='n1597' class='stm mis'><a href='#n1597'>1597</a></p>
<p id='n1598' class='pln'><a href='#n1598'>1598</a></p>
<p id='n1599' class='stm mis'><a href='#n1599'>1599</a></p>
<p id='n1600' class='stm mis'><a href='#n1600'>1600</a></p>
<p id='n1601' class='stm mis'><a href='#n1601'>1601</a></p>
<p id='n1602' class='stm mis'><a href='#n1602'>1602</a></p>
<p id='n1603' class='pln'><a href='#n1603'>1603</a></p>
<p id='n1604' class='stm mis'><a href='#n1604'>1604</a></p>
<p id='n1605' class='pln'><a href='#n1605'>1605</a></p>
<p id='n1606' class='pln'><a href='#n1606'>1606</a></p>
<p id='n1607' class='stm run hide_run'><a href='#n1607'>1607</a></p>
<p id='n1608' class='pln'><a href='#n1608'>1608</a></p>
<p id='n1609' class='pln'><a href='#n1609'>1609</a></p>
<p id='n1610' class='stm run hide_run'><a href='#n1610'>1610</a></p>
<p id='n1611' class='stm run hide_run'><a href='#n1611'>1611</a></p>
<p id='n1612' class='stm run hide_run'><a href='#n1612'>1612</a></p>
<p id='n1613' class='stm run hide_run'><a href='#n1613'>1613</a></p>
<p id='n1614' class='stm run hide_run'><a href='#n1614'>1614</a></p>
<p id='n1615' class='pln'><a href='#n1615'>1615</a></p>
<p id='n1616' class='stm run hide_run'><a href='#n1616'>1616</a></p>
<p id='n1617' class='stm run hide_run'><a href='#n1617'>1617</a></p>
<p id='n1618' class='pln'><a href='#n1618'>1618</a></p>
<p id='n1619' class='stm run hide_run'><a href='#n1619'>1619</a></p>
<p id='n1620' class='pln'><a href='#n1620'>1620</a></p>
<p id='n1621' class='stm run hide_run'><a href='#n1621'>1621</a></p>
<p id='n1622' class='pln'><a href='#n1622'>1622</a></p>
<p id='n1623' class='stm run hide_run'><a href='#n1623'>1623</a></p>
<p id='n1624' class='pln'><a href='#n1624'>1624</a></p>
<p id='n1625' class='stm run hide_run'><a href='#n1625'>1625</a></p>
<p id='n1626' class='stm run hide_run'><a href='#n1626'>1626</a></p>
<p id='n1627' class='stm mis'><a href='#n1627'>1627</a></p>
<p id='n1628' class='stm mis'><a href='#n1628'>1628</a></p>
<p id='n1629' class='pln'><a href='#n1629'>1629</a></p>
<p id='n1630' class='pln'><a href='#n1630'>1630</a></p>
<p id='n1631' class='stm run hide_run'><a href='#n1631'>1631</a></p>
<p id='n1632' class='stm mis'><a href='#n1632'>1632</a></p>
<p id='n1633' class='stm mis'><a href='#n1633'>1633</a></p>
<p id='n1634' class='pln'><a href='#n1634'>1634</a></p>
<p id='n1635' class='pln'><a href='#n1635'>1635</a></p>
<p id='n1636' class='pln'><a href='#n1636'>1636</a></p>
<p id='n1637' class='stm run hide_run'><a href='#n1637'>1637</a></p>
<p id='n1638' class='stm run hide_run'><a href='#n1638'>1638</a></p>
<p id='n1639' class='stm mis'><a href='#n1639'>1639</a></p>
<p id='n1640' class='pln'><a href='#n1640'>1640</a></p>
<p id='n1641' class='stm run hide_run'><a href='#n1641'>1641</a></p>
<p id='n1642' class='stm run hide_run'><a href='#n1642'>1642</a></p>
<p id='n1643' class='stm run hide_run'><a href='#n1643'>1643</a></p>
<p id='n1644' class='stm run hide_run'><a href='#n1644'>1644</a></p>
<p id='n1645' class='stm run hide_run'><a href='#n1645'>1645</a></p>
<p id='n1646' class='pln'><a href='#n1646'>1646</a></p>
<p id='n1647' class='stm run hide_run'><a href='#n1647'>1647</a></p>
<p id='n1648' class='stm run hide_run'><a href='#n1648'>1648</a></p>
<p id='n1649' class='stm run hide_run'><a href='#n1649'>1649</a></p>
<p id='n1650' class='stm run hide_run'><a href='#n1650'>1650</a></p>
<p id='n1651' class='stm run hide_run'><a href='#n1651'>1651</a></p>
<p id='n1652' class='stm run hide_run'><a href='#n1652'>1652</a></p>
<p id='n1653' class='stm mis'><a href='#n1653'>1653</a></p>
<p id='n1654' class='stm mis'><a href='#n1654'>1654</a></p>
<p id='n1655' class='stm mis'><a href='#n1655'>1655</a></p>
<p id='n1656' class='pln'><a href='#n1656'>1656</a></p>
<p id='n1657' class='pln'><a href='#n1657'>1657</a></p>
<p id='n1658' class='stm run hide_run'><a href='#n1658'>1658</a></p>
<p id='n1659' class='stm run hide_run'><a href='#n1659'>1659</a></p>
<p id='n1660' class='stm run hide_run'><a href='#n1660'>1660</a></p>
<p id='n1661' class='stm run hide_run'><a href='#n1661'>1661</a></p>
<p id='n1662' class='stm run hide_run'><a href='#n1662'>1662</a></p>
<p id='n1663' class='pln'><a href='#n1663'>1663</a></p>
<p id='n1664' class='stm run hide_run'><a href='#n1664'>1664</a></p>
<p id='n1665' class='stm run hide_run'><a href='#n1665'>1665</a></p>
<p id='n1666' class='stm run hide_run'><a href='#n1666'>1666</a></p>
<p id='n1667' class='pln'><a href='#n1667'>1667</a></p>
<p id='n1668' class='stm run hide_run'><a href='#n1668'>1668</a></p>
<p id='n1669' class='pln'><a href='#n1669'>1669</a></p>
<p id='n1670' class='stm run hide_run'><a href='#n1670'>1670</a></p>
<p id='n1671' class='stm run hide_run'><a href='#n1671'>1671</a></p>
<p id='n1672' class='stm run hide_run'><a href='#n1672'>1672</a></p>
<p id='n1673' class='stm run hide_run'><a href='#n1673'>1673</a></p>
<p id='n1674' class='pln'><a href='#n1674'>1674</a></p>
<p id='n1675' class='stm mis'><a href='#n1675'>1675</a></p>
<p id='n1676' class='pln'><a href='#n1676'>1676</a></p>
<p id='n1677' class='stm run hide_run'><a href='#n1677'>1677</a></p>
<p id='n1678' class='stm run hide_run'><a href='#n1678'>1678</a></p>
<p id='n1679' class='pln'><a href='#n1679'>1679</a></p>
<p id='n1680' class='stm mis'><a href='#n1680'>1680</a></p>
<p id='n1681' class='pln'><a href='#n1681'>1681</a></p>
<p id='n1682' class='stm run hide_run'><a href='#n1682'>1682</a></p>
<p id='n1683' class='stm run hide_run'><a href='#n1683'>1683</a></p>
<p id='n1684' class='stm run hide_run'><a href='#n1684'>1684</a></p>
<p id='n1685' class='pln'><a href='#n1685'>1685</a></p>
<p id='n1686' class='pln'><a href='#n1686'>1686</a></p>
<p id='n1687' class='stm run hide_run'><a href='#n1687'>1687</a></p>
<p id='n1688' class='pln'><a href='#n1688'>1688</a></p>
<p id='n1689' class='pln'><a href='#n1689'>1689</a></p>
<p id='n1690' class='stm run hide_run'><a href='#n1690'>1690</a></p>
<p id='n1691' class='stm run hide_run'><a href='#n1691'>1691</a></p>
<p id='n1692' class='stm run hide_run'><a href='#n1692'>1692</a></p>
<p id='n1693' class='stm run hide_run'><a href='#n1693'>1693</a></p>
<p id='n1694' class='pln'><a href='#n1694'>1694</a></p>
<p id='n1695' class='stm run hide_run'><a href='#n1695'>1695</a></p>
<p id='n1696' class='pln'><a href='#n1696'>1696</a></p>
<p id='n1697' class='stm mis'><a href='#n1697'>1697</a></p>
<p id='n1698' class='pln'><a href='#n1698'>1698</a></p>
<p id='n1699' class='stm run hide_run'><a href='#n1699'>1699</a></p>
<p id='n1700' class='pln'><a href='#n1700'>1700</a></p>
<p id='n1701' class='stm mis'><a href='#n1701'>1701</a></p>
<p id='n1702' class='stm mis'><a href='#n1702'>1702</a></p>
<p id='n1703' class='stm mis'><a href='#n1703'>1703</a></p>
<p id='n1704' class='stm mis'><a href='#n1704'>1704</a></p>
<p id='n1705' class='pln'><a href='#n1705'>1705</a></p>
<p id='n1706' class='pln'><a href='#n1706'>1706</a></p>
<p id='n1707' class='stm mis'><a href='#n1707'>1707</a></p>
<p id='n1708' class='stm mis'><a href='#n1708'>1708</a></p>
<p id='n1709' class='stm mis'><a href='#n1709'>1709</a></p>
<p id='n1710' class='pln'><a href='#n1710'>1710</a></p>
<p id='n1711' class='stm mis'><a href='#n1711'>1711</a></p>
<p id='n1712' class='stm mis'><a href='#n1712'>1712</a></p>
<p id='n1713' class='stm mis'><a href='#n1713'>1713</a></p>
<p id='n1714' class='stm mis'><a href='#n1714'>1714</a></p>
<p id='n1715' class='stm mis'><a href='#n1715'>1715</a></p>
<p id='n1716' class='stm mis'><a href='#n1716'>1716</a></p>
<p id='n1717' class='stm mis'><a href='#n1717'>1717</a></p>
<p id='n1718' class='stm mis'><a href='#n1718'>1718</a></p>
<p id='n1719' class='stm mis'><a href='#n1719'>1719</a></p>
<p id='n1720' class='pln'><a href='#n1720'>1720</a></p>
<p id='n1721' class='pln'><a href='#n1721'>1721</a></p>
<p id='n1722' class='stm mis'><a href='#n1722'>1722</a></p>
<p id='n1723' class='stm mis'><a href='#n1723'>1723</a></p>
<p id='n1724' class='stm mis'><a href='#n1724'>1724</a></p>
<p id='n1725' class='stm mis'><a href='#n1725'>1725</a></p>
<p id='n1726' class='stm mis'><a href='#n1726'>1726</a></p>
<p id='n1727' class='pln'><a href='#n1727'>1727</a></p>
<p id='n1728' class='stm mis'><a href='#n1728'>1728</a></p>
<p id='n1729' class='stm mis'><a href='#n1729'>1729</a></p>
<p id='n1730' class='stm mis'><a href='#n1730'>1730</a></p>
<p id='n1731' class='pln'><a href='#n1731'>1731</a></p>
<p id='n1732' class='stm mis'><a href='#n1732'>1732</a></p>
<p id='n1733' class='pln'><a href='#n1733'>1733</a></p>
<p id='n1734' class='stm mis'><a href='#n1734'>1734</a></p>
<p id='n1735' class='stm mis'><a href='#n1735'>1735</a></p>
<p id='n1736' class='stm mis'><a href='#n1736'>1736</a></p>
<p id='n1737' class='pln'><a href='#n1737'>1737</a></p>
<p id='n1738' class='pln'><a href='#n1738'>1738</a></p>
<p id='n1739' class='stm run hide_run'><a href='#n1739'>1739</a></p>
<p id='n1740' class='pln'><a href='#n1740'>1740</a></p>
<p id='n1741' class='pln'><a href='#n1741'>1741</a></p>
<p id='n1742' class='stm run hide_run'><a href='#n1742'>1742</a></p>
<p id='n1743' class='stm run hide_run'><a href='#n1743'>1743</a></p>
<p id='n1744' class='stm run hide_run'><a href='#n1744'>1744</a></p>
<p id='n1745' class='stm run hide_run'><a href='#n1745'>1745</a></p>
<p id='n1746' class='stm run hide_run'><a href='#n1746'>1746</a></p>
<p id='n1747' class='stm run hide_run'><a href='#n1747'>1747</a></p>
<p id='n1748' class='pln'><a href='#n1748'>1748</a></p>
<p id='n1749' class='stm run hide_run'><a href='#n1749'>1749</a></p>
<p id='n1750' class='stm run hide_run'><a href='#n1750'>1750</a></p>
<p id='n1751' class='pln'><a href='#n1751'>1751</a></p>
<p id='n1752' class='stm run hide_run'><a href='#n1752'>1752</a></p>
<p id='n1753' class='pln'><a href='#n1753'>1753</a></p>
<p id='n1754' class='stm run hide_run'><a href='#n1754'>1754</a></p>
<p id='n1755' class='pln'><a href='#n1755'>1755</a></p>
<p id='n1756' class='pln'><a href='#n1756'>1756</a></p>
<p id='n1757' class='stm run hide_run'><a href='#n1757'>1757</a></p>
<p id='n1758' class='pln'><a href='#n1758'>1758</a></p>
<p id='n1759' class='stm run hide_run'><a href='#n1759'>1759</a></p>
<p id='n1760' class='stm run hide_run'><a href='#n1760'>1760</a></p>
<p id='n1761' class='stm mis'><a href='#n1761'>1761</a></p>
<p id='n1762' class='stm mis'><a href='#n1762'>1762</a></p>
<p id='n1763' class='pln'><a href='#n1763'>1763</a></p>
<p id='n1764' class='stm run hide_run'><a href='#n1764'>1764</a></p>
<p id='n1765' class='pln'><a href='#n1765'>1765</a></p>
<p id='n1766' class='pln'><a href='#n1766'>1766</a></p>
<p id='n1767' class='pln'><a href='#n1767'>1767</a></p>
<p id='n1768' class='pln'><a href='#n1768'>1768</a></p>
<p id='n1769' class='pln'><a href='#n1769'>1769</a></p>
<p id='n1770' class='pln'><a href='#n1770'>1770</a></p>
<p id='n1771' class='stm run hide_run'><a href='#n1771'>1771</a></p>
<p id='n1772' class='stm run hide_run'><a href='#n1772'>1772</a></p>
<p id='n1773' class='pln'><a href='#n1773'>1773</a></p>
<p id='n1774' class='stm run hide_run'><a href='#n1774'>1774</a></p>
<p id='n1775' class='stm run hide_run'><a href='#n1775'>1775</a></p>
<p id='n1776' class='stm run hide_run'><a href='#n1776'>1776</a></p>
<p id='n1777' class='pln'><a href='#n1777'>1777</a></p>
<p id='n1778' class='stm run hide_run'><a href='#n1778'>1778</a></p>
<p id='n1779' class='pln'><a href='#n1779'>1779</a></p>
<p id='n1780' class='stm run hide_run'><a href='#n1780'>1780</a></p>
<p id='n1781' class='stm run hide_run'><a href='#n1781'>1781</a></p>
<p id='n1782' class='stm mis'><a href='#n1782'>1782</a></p>
<p id='n1783' class='stm mis'><a href='#n1783'>1783</a></p>
<p id='n1784' class='stm mis'><a href='#n1784'>1784</a></p>
<p id='n1785' class='pln'><a href='#n1785'>1785</a></p>
<p id='n1786' class='pln'><a href='#n1786'>1786</a></p>
<p id='n1787' class='stm run hide_run'><a href='#n1787'>1787</a></p>
<p id='n1788' class='pln'><a href='#n1788'>1788</a></p>
<p id='n1789' class='stm run hide_run'><a href='#n1789'>1789</a></p>
<p id='n1790' class='stm run hide_run'><a href='#n1790'>1790</a></p>
<p id='n1791' class='stm run hide_run'><a href='#n1791'>1791</a></p>
<p id='n1792' class='pln'><a href='#n1792'>1792</a></p>
<p id='n1793' class='stm run hide_run'><a href='#n1793'>1793</a></p>
<p id='n1794' class='pln'><a href='#n1794'>1794</a></p>
<p id='n1795' class='pln'><a href='#n1795'>1795</a></p>
<p id='n1796' class='pln'><a href='#n1796'>1796</a></p>
<p id='n1797' class='pln'><a href='#n1797'>1797</a></p>
<p id='n1798' class='pln'><a href='#n1798'>1798</a></p>
<p id='n1799' class='pln'><a href='#n1799'>1799</a></p>
<p id='n1800' class='pln'><a href='#n1800'>1800</a></p>
<p id='n1801' class='stm run hide_run'><a href='#n1801'>1801</a></p>
<p id='n1802' class='stm run hide_run'><a href='#n1802'>1802</a></p>
<p id='n1803' class='pln'><a href='#n1803'>1803</a></p>
<p id='n1804' class='stm run hide_run'><a href='#n1804'>1804</a></p>
<p id='n1805' class='pln'><a href='#n1805'>1805</a></p>
<p id='n1806' class='stm run hide_run'><a href='#n1806'>1806</a></p>
<p id='n1807' class='stm run hide_run'><a href='#n1807'>1807</a></p>
<p id='n1808' class='stm run hide_run'><a href='#n1808'>1808</a></p>
<p id='n1809' class='pln'><a href='#n1809'>1809</a></p>
<p id='n1810' class='stm run hide_run'><a href='#n1810'>1810</a></p>
<p id='n1811' class='stm run hide_run'><a href='#n1811'>1811</a></p>
<p id='n1812' class='pln'><a href='#n1812'>1812</a></p>
<p id='n1813' class='stm mis'><a href='#n1813'>1813</a></p>
<p id='n1814' class='pln'><a href='#n1814'>1814</a></p>
<p id='n1815' class='stm run hide_run'><a href='#n1815'>1815</a></p>
<p id='n1816' class='pln'><a href='#n1816'>1816</a></p>
<p id='n1817' class='pln'><a href='#n1817'>1817</a></p>
<p id='n1818' class='stm run hide_run'><a href='#n1818'>1818</a></p>
<p id='n1819' class='stm run hide_run'><a href='#n1819'>1819</a></p>
<p id='n1820' class='pln'><a href='#n1820'>1820</a></p>
<p id='n1821' class='pln'><a href='#n1821'>1821</a></p>
<p id='n1822' class='stm run hide_run'><a href='#n1822'>1822</a></p>
<p id='n1823' class='pln'><a href='#n1823'>1823</a></p>
<p id='n1824' class='pln'><a href='#n1824'>1824</a></p>
<p id='n1825' class='stm run hide_run'><a href='#n1825'>1825</a></p>
<p id='n1826' class='stm run hide_run'><a href='#n1826'>1826</a></p>
<p id='n1827' class='stm run hide_run'><a href='#n1827'>1827</a></p>
<p id='n1828' class='pln'><a href='#n1828'>1828</a></p>
<p id='n1829' class='stm run hide_run'><a href='#n1829'>1829</a></p>
<p id='n1830' class='stm mis'><a href='#n1830'>1830</a></p>
<p id='n1831' class='pln'><a href='#n1831'>1831</a></p>
<p id='n1832' class='stm run hide_run'><a href='#n1832'>1832</a></p>
<p id='n1833' class='pln'><a href='#n1833'>1833</a></p>
<p id='n1834' class='stm mis'><a href='#n1834'>1834</a></p>
<p id='n1835' class='pln'><a href='#n1835'>1835</a></p>
<p id='n1836' class='pln'><a href='#n1836'>1836</a></p>
<p id='n1837' class='stm run hide_run'><a href='#n1837'>1837</a></p>
<p id='n1838' class='pln'><a href='#n1838'>1838</a></p>
<p id='n1839' class='stm mis'><a href='#n1839'>1839</a></p>
<p id='n1840' class='stm mis'><a href='#n1840'>1840</a></p>
<p id='n1841' class='stm mis'><a href='#n1841'>1841</a></p>
<p id='n1842' class='stm mis'><a href='#n1842'>1842</a></p>
<p id='n1843' class='pln'><a href='#n1843'>1843</a></p>
<p id='n1844' class='stm mis'><a href='#n1844'>1844</a></p>
<p id='n1845' class='pln'><a href='#n1845'>1845</a></p>
<p id='n1846' class='stm mis'><a href='#n1846'>1846</a></p>
<p id='n1847' class='pln'><a href='#n1847'>1847</a></p>
<p id='n1848' class='stm mis'><a href='#n1848'>1848</a></p>
<p id='n1849' class='pln'><a href='#n1849'>1849</a></p>
<p id='n1850' class='stm mis'><a href='#n1850'>1850</a></p>
<p id='n1851' class='stm mis'><a href='#n1851'>1851</a></p>
<p id='n1852' class='stm mis'><a href='#n1852'>1852</a></p>
<p id='n1853' class='stm mis'><a href='#n1853'>1853</a></p>
<p id='n1854' class='stm mis'><a href='#n1854'>1854</a></p>
<p id='n1855' class='stm mis'><a href='#n1855'>1855</a></p>
<p id='n1856' class='stm mis'><a href='#n1856'>1856</a></p>
<p id='n1857' class='pln'><a href='#n1857'>1857</a></p>
<p id='n1858' class='pln'><a href='#n1858'>1858</a></p>
<p id='n1859' class='pln'><a href='#n1859'>1859</a></p>
<p id='n1860' class='pln'><a href='#n1860'>1860</a></p>
<p id='n1861' class='pln'><a href='#n1861'>1861</a></p>
<p id='n1862' class='pln'><a href='#n1862'>1862</a></p>
<p id='n1863' class='pln'><a href='#n1863'>1863</a></p>
<p id='n1864' class='stm mis'><a href='#n1864'>1864</a></p>
<p id='n1865' class='stm mis'><a href='#n1865'>1865</a></p>
<p id='n1866' class='pln'><a href='#n1866'>1866</a></p>
<p id='n1867' class='stm mis'><a href='#n1867'>1867</a></p>
<p id='n1868' class='stm mis'><a href='#n1868'>1868</a></p>
<p id='n1869' class='pln'><a href='#n1869'>1869</a></p>
<p id='n1870' class='stm mis'><a href='#n1870'>1870</a></p>
<p id='n1871' class='pln'><a href='#n1871'>1871</a></p>
<p id='n1872' class='stm mis'><a href='#n1872'>1872</a></p>
<p id='n1873' class='stm mis'><a href='#n1873'>1873</a></p>
<p id='n1874' class='stm mis'><a href='#n1874'>1874</a></p>
<p id='n1875' class='stm mis'><a href='#n1875'>1875</a></p>
<p id='n1876' class='stm mis'><a href='#n1876'>1876</a></p>
<p id='n1877' class='pln'><a href='#n1877'>1877</a></p>
<p id='n1878' class='pln'><a href='#n1878'>1878</a></p>
<p id='n1879' class='stm mis'><a href='#n1879'>1879</a></p>
<p id='n1880' class='pln'><a href='#n1880'>1880</a></p>
<p id='n1881' class='stm mis'><a href='#n1881'>1881</a></p>
<p id='n1882' class='stm mis'><a href='#n1882'>1882</a></p>
<p id='n1883' class='stm mis'><a href='#n1883'>1883</a></p>
<p id='n1884' class='pln'><a href='#n1884'>1884</a></p>
<p id='n1885' class='stm mis'><a href='#n1885'>1885</a></p>
<p id='n1886' class='pln'><a href='#n1886'>1886</a></p>
<p id='n1887' class='pln'><a href='#n1887'>1887</a></p>
<p id='n1888' class='pln'><a href='#n1888'>1888</a></p>
<p id='n1889' class='pln'><a href='#n1889'>1889</a></p>
<p id='n1890' class='pln'><a href='#n1890'>1890</a></p>
<p id='n1891' class='pln'><a href='#n1891'>1891</a></p>
<p id='n1892' class='pln'><a href='#n1892'>1892</a></p>
<p id='n1893' class='stm mis'><a href='#n1893'>1893</a></p>
<p id='n1894' class='stm mis'><a href='#n1894'>1894</a></p>
<p id='n1895' class='pln'><a href='#n1895'>1895</a></p>
<p id='n1896' class='stm mis'><a href='#n1896'>1896</a></p>
<p id='n1897' class='pln'><a href='#n1897'>1897</a></p>
<p id='n1898' class='stm mis'><a href='#n1898'>1898</a></p>
<p id='n1899' class='stm mis'><a href='#n1899'>1899</a></p>
<p id='n1900' class='stm mis'><a href='#n1900'>1900</a></p>
<p id='n1901' class='pln'><a href='#n1901'>1901</a></p>
<p id='n1902' class='stm mis'><a href='#n1902'>1902</a></p>
<p id='n1903' class='stm mis'><a href='#n1903'>1903</a></p>
<p id='n1904' class='pln'><a href='#n1904'>1904</a></p>
<p id='n1905' class='stm mis'><a href='#n1905'>1905</a></p>
<p id='n1906' class='pln'><a href='#n1906'>1906</a></p>
<p id='n1907' class='stm mis'><a href='#n1907'>1907</a></p>
<p id='n1908' class='pln'><a href='#n1908'>1908</a></p>
<p id='n1909' class='pln'><a href='#n1909'>1909</a></p>
<p id='n1910' class='stm mis'><a href='#n1910'>1910</a></p>
<p id='n1911' class='stm mis'><a href='#n1911'>1911</a></p>
<p id='n1912' class='pln'><a href='#n1912'>1912</a></p>
<p id='n1913' class='pln'><a href='#n1913'>1913</a></p>
<p id='n1914' class='stm run hide_run'><a href='#n1914'>1914</a></p>
<p id='n1915' class='pln'><a href='#n1915'>1915</a></p>
<p id='n1916' class='pln'><a href='#n1916'>1916</a></p>
<p id='n1917' class='stm run hide_run'><a href='#n1917'>1917</a></p>
<p id='n1918' class='pln'><a href='#n1918'>1918</a></p>
<p id='n1919' class='stm run hide_run'><a href='#n1919'>1919</a></p>
<p id='n1920' class='pln'><a href='#n1920'>1920</a></p>
<p id='n1921' class='stm mis'><a href='#n1921'>1921</a></p>
<p id='n1922' class='pln'><a href='#n1922'>1922</a></p>
<p id='n1923' class='stm run hide_run'><a href='#n1923'>1923</a></p>
<p id='n1924' class='pln'><a href='#n1924'>1924</a></p>
<p id='n1925' class='stm mis'><a href='#n1925'>1925</a></p>
<p id='n1926' class='pln'><a href='#n1926'>1926</a></p>
<p id='n1927' class='stm run hide_run'><a href='#n1927'>1927</a></p>
<p id='n1928' class='stm mis'><a href='#n1928'>1928</a></p>
<p id='n1929' class='pln'><a href='#n1929'>1929</a></p>
<p id='n1930' class='stm mis'><a href='#n1930'>1930</a></p>
<p id='n1931' class='pln'><a href='#n1931'>1931</a></p>
<p id='n1932' class='pln'><a href='#n1932'>1932</a></p>
<p id='n1933' class='stm mis'><a href='#n1933'>1933</a></p>
<p id='n1934' class='stm mis'><a href='#n1934'>1934</a></p>
<p id='n1935' class='stm mis'><a href='#n1935'>1935</a></p>
<p id='n1936' class='stm mis'><a href='#n1936'>1936</a></p>
<p id='n1937' class='stm mis'><a href='#n1937'>1937</a></p>
<p id='n1938' class='stm mis'><a href='#n1938'>1938</a></p>
<p id='n1939' class='stm mis'><a href='#n1939'>1939</a></p>
<p id='n1940' class='stm mis'><a href='#n1940'>1940</a></p>
<p id='n1941' class='pln'><a href='#n1941'>1941</a></p>
<p id='n1942' class='pln'><a href='#n1942'>1942</a></p>
<p id='n1943' class='stm mis'><a href='#n1943'>1943</a></p>
<p id='n1944' class='stm mis'><a href='#n1944'>1944</a></p>
<p id='n1945' class='pln'><a href='#n1945'>1945</a></p>
<p id='n1946' class='stm mis'><a href='#n1946'>1946</a></p>
<p id='n1947' class='stm mis'><a href='#n1947'>1947</a></p>
<p id='n1948' class='stm mis'><a href='#n1948'>1948</a></p>
<p id='n1949' class='stm mis'><a href='#n1949'>1949</a></p>
<p id='n1950' class='pln'><a href='#n1950'>1950</a></p>
<p id='n1951' class='stm mis'><a href='#n1951'>1951</a></p>
<p id='n1952' class='stm mis'><a href='#n1952'>1952</a></p>
<p id='n1953' class='pln'><a href='#n1953'>1953</a></p>
<p id='n1954' class='stm mis'><a href='#n1954'>1954</a></p>
<p id='n1955' class='stm mis'><a href='#n1955'>1955</a></p>
<p id='n1956' class='pln'><a href='#n1956'>1956</a></p>
<p id='n1957' class='pln'><a href='#n1957'>1957</a></p>
<p id='n1958' class='stm mis'><a href='#n1958'>1958</a></p>
<p id='n1959' class='stm mis'><a href='#n1959'>1959</a></p>
<p id='n1960' class='stm mis'><a href='#n1960'>1960</a></p>
<p id='n1961' class='stm mis'><a href='#n1961'>1961</a></p>
<p id='n1962' class='stm mis'><a href='#n1962'>1962</a></p>
<p id='n1963' class='pln'><a href='#n1963'>1963</a></p>
<p id='n1964' class='stm mis'><a href='#n1964'>1964</a></p>
<p id='n1965' class='pln'><a href='#n1965'>1965</a></p>
<p id='n1966' class='pln'><a href='#n1966'>1966</a></p>
<p id='n1967' class='pln'><a href='#n1967'>1967</a></p>
<p id='n1968' class='pln'><a href='#n1968'>1968</a></p>
<p id='n1969' class='pln'><a href='#n1969'>1969</a></p>
<p id='n1970' class='pln'><a href='#n1970'>1970</a></p>
<p id='n1971' class='pln'><a href='#n1971'>1971</a></p>
<p id='n1972' class='pln'><a href='#n1972'>1972</a></p>
<p id='n1973' class='pln'><a href='#n1973'>1973</a></p>
<p id='n1974' class='stm run hide_run'><a href='#n1974'>1974</a></p>
<p id='n1975' class='pln'><a href='#n1975'>1975</a></p>
<p id='n1976' class='pln'><a href='#n1976'>1976</a></p>
<p id='n1977' class='stm run hide_run'><a href='#n1977'>1977</a></p>
<p id='n1978' class='stm run hide_run'><a href='#n1978'>1978</a></p>
<p id='n1979' class='stm run hide_run'><a href='#n1979'>1979</a></p>
<p id='n1980' class='stm run hide_run'><a href='#n1980'>1980</a></p>
<p id='n1981' class='stm run hide_run'><a href='#n1981'>1981</a></p>
<p id='n1982' class='stm run hide_run'><a href='#n1982'>1982</a></p>
<p id='n1983' class='pln'><a href='#n1983'>1983</a></p>
<p id='n1984' class='pln'><a href='#n1984'>1984</a></p>
<p id='n1985' class='pln'><a href='#n1985'>1985</a></p>
<p id='n1986' class='pln'><a href='#n1986'>1986</a></p>
<p id='n1987' class='stm run hide_run'><a href='#n1987'>1987</a></p>
<p id='n1988' class='pln'><a href='#n1988'>1988</a></p>
<p id='n1989' class='stm run hide_run'><a href='#n1989'>1989</a></p>
<p id='n1990' class='stm mis'><a href='#n1990'>1990</a></p>
<p id='n1991' class='pln'><a href='#n1991'>1991</a></p>
<p id='n1992' class='stm run hide_run'><a href='#n1992'>1992</a></p>
<p id='n1993' class='pln'><a href='#n1993'>1993</a></p>
<p id='n1994' class='stm mis'><a href='#n1994'>1994</a></p>
<p id='n1995' class='pln'><a href='#n1995'>1995</a></p>
<p id='n1996' class='stm run hide_run'><a href='#n1996'>1996</a></p>
<p id='n1997' class='pln'><a href='#n1997'>1997</a></p>
<p id='n1998' class='stm mis'><a href='#n1998'>1998</a></p>
<p id='n1999' class='pln'><a href='#n1999'>1999</a></p>
<p id='n2000' class='stm run hide_run'><a href='#n2000'>2000</a></p>
<p id='n2001' class='pln'><a href='#n2001'>2001</a></p>
<p id='n2002' class='stm mis'><a href='#n2002'>2002</a></p>
<p id='n2003' class='pln'><a href='#n2003'>2003</a></p>
<p id='n2004' class='stm run hide_run'><a href='#n2004'>2004</a></p>
<p id='n2005' class='pln'><a href='#n2005'>2005</a></p>
<p id='n2006' class='stm mis'><a href='#n2006'>2006</a></p>
<p id='n2007' class='pln'><a href='#n2007'>2007</a></p>
<p id='n2008' class='stm run hide_run'><a href='#n2008'>2008</a></p>
<p id='n2009' class='pln'><a href='#n2009'>2009</a></p>
<p id='n2010' class='pln'><a href='#n2010'>2010</a></p>
<p id='n2011' class='stm mis'><a href='#n2011'>2011</a></p>
<p id='n2012' class='pln'><a href='#n2012'>2012</a></p>
<p id='n2013' class='pln'><a href='#n2013'>2013</a></p>
<p id='n2014' class='pln'><a href='#n2014'>2014</a></p>
<p id='n2015' class='pln'><a href='#n2015'>2015</a></p>
<p id='n2016' class='stm mis'><a href='#n2016'>2016</a></p>
<p id='n2017' class='stm mis'><a href='#n2017'>2017</a></p>
<p id='n2018' class='stm mis'><a href='#n2018'>2018</a></p>
<p id='n2019' class='stm mis'><a href='#n2019'>2019</a></p>
<p id='n2020' class='stm mis'><a href='#n2020'>2020</a></p>
<p id='n2021' class='pln'><a href='#n2021'>2021</a></p>
<p id='n2022' class='pln'><a href='#n2022'>2022</a></p>
<p id='n2023' class='stm mis'><a href='#n2023'>2023</a></p>
<p id='n2024' class='stm mis'><a href='#n2024'>2024</a></p>
<p id='n2025' class='stm mis'><a href='#n2025'>2025</a></p>
<p id='n2026' class='stm mis'><a href='#n2026'>2026</a></p>
<p id='n2027' class='pln'><a href='#n2027'>2027</a></p>
<p id='n2028' class='pln'><a href='#n2028'>2028</a></p>
<p id='n2029' class='stm mis'><a href='#n2029'>2029</a></p>
<p id='n2030' class='stm mis'><a href='#n2030'>2030</a></p>
<p id='n2031' class='pln'><a href='#n2031'>2031</a></p>
<p id='n2032' class='stm mis'><a href='#n2032'>2032</a></p>
<p id='n2033' class='pln'><a href='#n2033'>2033</a></p>
<p id='n2034' class='stm run hide_run'><a href='#n2034'>2034</a></p>
<p id='n2035' class='stm mis'><a href='#n2035'>2035</a></p>
<p id='n2036' class='stm mis'><a href='#n2036'>2036</a></p>
<p id='n2037' class='pln'><a href='#n2037'>2037</a></p>
<p id='n2038' class='stm mis'><a href='#n2038'>2038</a></p>
<p id='n2039' class='stm mis'><a href='#n2039'>2039</a></p>
<p id='n2040' class='stm mis'><a href='#n2040'>2040</a></p>
<p id='n2041' class='pln'><a href='#n2041'>2041</a></p>
<p id='n2042' class='pln'><a href='#n2042'>2042</a></p>
<p id='n2043' class='stm mis'><a href='#n2043'>2043</a></p>
<p id='n2044' class='stm mis'><a href='#n2044'>2044</a></p>
<p id='n2045' class='stm mis'><a href='#n2045'>2045</a></p>
<p id='n2046' class='stm mis'><a href='#n2046'>2046</a></p>
<p id='n2047' class='stm mis'><a href='#n2047'>2047</a></p>
<p id='n2048' class='stm mis'><a href='#n2048'>2048</a></p>
<p id='n2049' class='stm mis'><a href='#n2049'>2049</a></p>
<p id='n2050' class='stm mis'><a href='#n2050'>2050</a></p>
<p id='n2051' class='stm mis'><a href='#n2051'>2051</a></p>
<p id='n2052' class='pln'><a href='#n2052'>2052</a></p>
<p id='n2053' class='stm mis'><a href='#n2053'>2053</a></p>
<p id='n2054' class='stm mis'><a href='#n2054'>2054</a></p>
<p id='n2055' class='stm mis'><a href='#n2055'>2055</a></p>
<p id='n2056' class='stm mis'><a href='#n2056'>2056</a></p>
<p id='n2057' class='pln'><a href='#n2057'>2057</a></p>
<p id='n2058' class='stm mis'><a href='#n2058'>2058</a></p>
<p id='n2059' class='stm mis'><a href='#n2059'>2059</a></p>
<p id='n2060' class='pln'><a href='#n2060'>2060</a></p>
<p id='n2061' class='pln'><a href='#n2061'>2061</a></p>
<p id='n2062' class='stm mis'><a href='#n2062'>2062</a></p>
<p id='n2063' class='pln'><a href='#n2063'>2063</a></p>
<p id='n2064' class='pln'><a href='#n2064'>2064</a></p>
<p id='n2065' class='pln'><a href='#n2065'>2065</a></p>
<p id='n2066' class='pln'><a href='#n2066'>2066</a></p>
<p id='n2067' class='stm mis'><a href='#n2067'>2067</a></p>
<p id='n2068' class='stm mis'><a href='#n2068'>2068</a></p>
<p id='n2069' class='stm mis'><a href='#n2069'>2069</a></p>
<p id='n2070' class='stm mis'><a href='#n2070'>2070</a></p>
<p id='n2071' class='stm mis'><a href='#n2071'>2071</a></p>
<p id='n2072' class='stm mis'><a href='#n2072'>2072</a></p>
<p id='n2073' class='stm mis'><a href='#n2073'>2073</a></p>
<p id='n2074' class='stm mis'><a href='#n2074'>2074</a></p>
<p id='n2075' class='stm mis'><a href='#n2075'>2075</a></p>
<p id='n2076' class='stm mis'><a href='#n2076'>2076</a></p>
<p id='n2077' class='pln'><a href='#n2077'>2077</a></p>
<p id='n2078' class='stm run hide_run'><a href='#n2078'>2078</a></p>
<p id='n2079' class='stm mis'><a href='#n2079'>2079</a></p>
<p id='n2080' class='stm mis'><a href='#n2080'>2080</a></p>
<p id='n2081' class='stm mis'><a href='#n2081'>2081</a></p>
<p id='n2082' class='stm mis'><a href='#n2082'>2082</a></p>
<p id='n2083' class='stm mis'><a href='#n2083'>2083</a></p>
<p id='n2084' class='pln'><a href='#n2084'>2084</a></p>
<p id='n2085' class='pln'><a href='#n2085'>2085</a></p>
<p id='n2086' class='stm mis'><a href='#n2086'>2086</a></p>
<p id='n2087' class='stm mis'><a href='#n2087'>2087</a></p>
<p id='n2088' class='stm mis'><a href='#n2088'>2088</a></p>
<p id='n2089' class='stm mis'><a href='#n2089'>2089</a></p>
<p id='n2090' class='stm mis'><a href='#n2090'>2090</a></p>
<p id='n2091' class='stm mis'><a href='#n2091'>2091</a></p>
<p id='n2092' class='stm mis'><a href='#n2092'>2092</a></p>
<p id='n2093' class='stm mis'><a href='#n2093'>2093</a></p>
<p id='n2094' class='pln'><a href='#n2094'>2094</a></p>
<p id='n2095' class='pln'><a href='#n2095'>2095</a></p>
<p id='n2096' class='stm mis'><a href='#n2096'>2096</a></p>
<p id='n2097' class='pln'><a href='#n2097'>2097</a></p>
<p id='n2098' class='pln'><a href='#n2098'>2098</a></p>
<p id='n2099' class='stm mis'><a href='#n2099'>2099</a></p>
<p id='n2100' class='pln'><a href='#n2100'>2100</a></p>
<p id='n2101' class='pln'><a href='#n2101'>2101</a></p>
<p id='n2102' class='stm mis'><a href='#n2102'>2102</a></p>
<p id='n2103' class='stm mis'><a href='#n2103'>2103</a></p>
<p id='n2104' class='stm mis'><a href='#n2104'>2104</a></p>
<p id='n2105' class='stm mis'><a href='#n2105'>2105</a></p>
<p id='n2106' class='pln'><a href='#n2106'>2106</a></p>
<p id='n2107' class='pln'><a href='#n2107'>2107</a></p>
<p id='n2108' class='stm mis'><a href='#n2108'>2108</a></p>
<p id='n2109' class='stm mis'><a href='#n2109'>2109</a></p>
<p id='n2110' class='stm mis'><a href='#n2110'>2110</a></p>
<p id='n2111' class='stm mis'><a href='#n2111'>2111</a></p>
<p id='n2112' class='stm mis'><a href='#n2112'>2112</a></p>
<p id='n2113' class='pln'><a href='#n2113'>2113</a></p>
<p id='n2114' class='pln'><a href='#n2114'>2114</a></p>
<p id='n2115' class='stm mis'><a href='#n2115'>2115</a></p>
<p id='n2116' class='stm mis'><a href='#n2116'>2116</a></p>
<p id='n2117' class='stm mis'><a href='#n2117'>2117</a></p>
<p id='n2118' class='pln'><a href='#n2118'>2118</a></p>
<p id='n2119' class='stm mis'><a href='#n2119'>2119</a></p>
<p id='n2120' class='pln'><a href='#n2120'>2120</a></p>
<p id='n2121' class='pln'><a href='#n2121'>2121</a></p>
<p id='n2122' class='stm mis'><a href='#n2122'>2122</a></p>
<p id='n2123' class='stm mis'><a href='#n2123'>2123</a></p>
<p id='n2124' class='stm mis'><a href='#n2124'>2124</a></p>
<p id='n2125' class='stm mis'><a href='#n2125'>2125</a></p>
<p id='n2126' class='stm mis'><a href='#n2126'>2126</a></p>
<p id='n2127' class='stm mis'><a href='#n2127'>2127</a></p>
<p id='n2128' class='stm mis'><a href='#n2128'>2128</a></p>
<p id='n2129' class='stm mis'><a href='#n2129'>2129</a></p>
<p id='n2130' class='stm mis'><a href='#n2130'>2130</a></p>
<p id='n2131' class='pln'><a href='#n2131'>2131</a></p>
<p id='n2132' class='pln'><a href='#n2132'>2132</a></p>
<p id='n2133' class='stm mis'><a href='#n2133'>2133</a></p>
<p id='n2134' class='pln'><a href='#n2134'>2134</a></p>
<p id='n2135' class='stm mis'><a href='#n2135'>2135</a></p>
<p id='n2136' class='stm mis'><a href='#n2136'>2136</a></p>
<p id='n2137' class='pln'><a href='#n2137'>2137</a></p>
<p id='n2138' class='stm mis'><a href='#n2138'>2138</a></p>
<p id='n2139' class='stm mis'><a href='#n2139'>2139</a></p>
<p id='n2140' class='pln'><a href='#n2140'>2140</a></p>
<p id='n2141' class='stm mis'><a href='#n2141'>2141</a></p>
<p id='n2142' class='stm mis'><a href='#n2142'>2142</a></p>
<p id='n2143' class='pln'><a href='#n2143'>2143</a></p>
<p id='n2144' class='stm mis'><a href='#n2144'>2144</a></p>
<p id='n2145' class='stm mis'><a href='#n2145'>2145</a></p>
<p id='n2146' class='stm mis'><a href='#n2146'>2146</a></p>
<p id='n2147' class='stm mis'><a href='#n2147'>2147</a></p>
<p id='n2148' class='stm mis'><a href='#n2148'>2148</a></p>
<p id='n2149' class='stm mis'><a href='#n2149'>2149</a></p>
<p id='n2150' class='stm mis'><a href='#n2150'>2150</a></p>
<p id='n2151' class='stm mis'><a href='#n2151'>2151</a></p>
<p id='n2152' class='stm mis'><a href='#n2152'>2152</a></p>
<p id='n2153' class='stm mis'><a href='#n2153'>2153</a></p>
<p id='n2154' class='stm mis'><a href='#n2154'>2154</a></p>
<p id='n2155' class='pln'><a href='#n2155'>2155</a></p>
<p id='n2156' class='pln'><a href='#n2156'>2156</a></p>
<p id='n2157' class='stm mis'><a href='#n2157'>2157</a></p>
<p id='n2158' class='stm mis'><a href='#n2158'>2158</a></p>
<p id='n2159' class='stm mis'><a href='#n2159'>2159</a></p>
<p id='n2160' class='stm mis'><a href='#n2160'>2160</a></p>
<p id='n2161' class='pln'><a href='#n2161'>2161</a></p>
<p id='n2162' class='stm mis'><a href='#n2162'>2162</a></p>
<p id='n2163' class='stm mis'><a href='#n2163'>2163</a></p>
<p id='n2164' class='pln'><a href='#n2164'>2164</a></p>
<p id='n2165' class='stm mis'><a href='#n2165'>2165</a></p>
<p id='n2166' class='pln'><a href='#n2166'>2166</a></p>
<p id='n2167' class='stm mis'><a href='#n2167'>2167</a></p>
<p id='n2168' class='pln'><a href='#n2168'>2168</a></p>
<p id='n2169' class='pln'><a href='#n2169'>2169</a></p>
<p id='n2170' class='pln'><a href='#n2170'>2170</a></p>
<p id='n2171' class='pln'><a href='#n2171'>2171</a></p>
<p id='n2172' class='pln'><a href='#n2172'>2172</a></p>
<p id='n2173' class='pln'><a href='#n2173'>2173</a></p>
<p id='n2174' class='pln'><a href='#n2174'>2174</a></p>
<p id='n2175' class='pln'><a href='#n2175'>2175</a></p>
<p id='n2176' class='pln'><a href='#n2176'>2176</a></p>
<p id='n2177' class='pln'><a href='#n2177'>2177</a></p>
<p id='n2178' class='stm mis'><a href='#n2178'>2178</a></p>
<p id='n2179' class='pln'><a href='#n2179'>2179</a></p>
<p id='n2180' class='stm run hide_run'><a href='#n2180'>2180</a></p>
<p id='n2181' class='pln'><a href='#n2181'>2181</a></p>
<p id='n2182' class='pln'><a href='#n2182'>2182</a></p>
<p id='n2183' class='stm run hide_run'><a href='#n2183'>2183</a></p>
<p id='n2184' class='stm run hide_run'><a href='#n2184'>2184</a></p>
<p id='n2185' class='stm run hide_run'><a href='#n2185'>2185</a></p>
<p id='n2186' class='pln'><a href='#n2186'>2186</a></p>
<p id='n2187' class='stm run hide_run'><a href='#n2187'>2187</a></p>
<p id='n2188' class='pln'><a href='#n2188'>2188</a></p>
<p id='n2189' class='stm run hide_run'><a href='#n2189'>2189</a></p>
<p id='n2190' class='pln'><a href='#n2190'>2190</a></p>
<p id='n2191' class='stm run hide_run'><a href='#n2191'>2191</a></p>
<p id='n2192' class='pln'><a href='#n2192'>2192</a></p>
<p id='n2193' class='stm mis'><a href='#n2193'>2193</a></p>
<p id='n2194' class='pln'><a href='#n2194'>2194</a></p>
<p id='n2195' class='stm run hide_run'><a href='#n2195'>2195</a></p>
<p id='n2196' class='stm run hide_run'><a href='#n2196'>2196</a></p>
<p id='n2197' class='stm run hide_run'><a href='#n2197'>2197</a></p>
<p id='n2198' class='stm mis'><a href='#n2198'>2198</a></p>
<p id='n2199' class='stm mis'><a href='#n2199'>2199</a></p>
<p id='n2200' class='pln'><a href='#n2200'>2200</a></p>
<p id='n2201' class='stm run hide_run'><a href='#n2201'>2201</a></p>
<p id='n2202' class='stm mis'><a href='#n2202'>2202</a></p>
<p id='n2203' class='pln'><a href='#n2203'>2203</a></p>
<p id='n2204' class='stm run hide_run'><a href='#n2204'>2204</a></p>
<p id='n2205' class='stm run hide_run'><a href='#n2205'>2205</a></p>
<p id='n2206' class='stm run hide_run'><a href='#n2206'>2206</a></p>
<p id='n2207' class='stm run hide_run'><a href='#n2207'>2207</a></p>
<p id='n2208' class='stm run hide_run'><a href='#n2208'>2208</a></p>
<p id='n2209' class='stm run hide_run'><a href='#n2209'>2209</a></p>
<p id='n2210' class='stm run hide_run'><a href='#n2210'>2210</a></p>
<p id='n2211' class='stm run hide_run'><a href='#n2211'>2211</a></p>
<p id='n2212' class='stm mis'><a href='#n2212'>2212</a></p>
<p id='n2213' class='stm mis'><a href='#n2213'>2213</a></p>
<p id='n2214' class='stm mis'><a href='#n2214'>2214</a></p>
<p id='n2215' class='stm mis'><a href='#n2215'>2215</a></p>
<p id='n2216' class='stm mis'><a href='#n2216'>2216</a></p>
<p id='n2217' class='stm mis'><a href='#n2217'>2217</a></p>
<p id='n2218' class='pln'><a href='#n2218'>2218</a></p>
<p id='n2219' class='pln'><a href='#n2219'>2219</a></p>
<p id='n2220' class='pln'><a href='#n2220'>2220</a></p>
<p id='n2221' class='pln'><a href='#n2221'>2221</a></p>
<p id='n2222' class='pln'><a href='#n2222'>2222</a></p>
<p id='n2223' class='pln'><a href='#n2223'>2223</a></p>
<p id='n2224' class='pln'><a href='#n2224'>2224</a></p>
<p id='n2225' class='pln'><a href='#n2225'>2225</a></p>
<p id='n2226' class='stm mis'><a href='#n2226'>2226</a></p>
<p id='n2227' class='stm mis'><a href='#n2227'>2227</a></p>
<p id='n2228' class='stm mis'><a href='#n2228'>2228</a></p>
<p id='n2229' class='stm run hide_run'><a href='#n2229'>2229</a></p>
<p id='n2230' class='stm run hide_run'><a href='#n2230'>2230</a></p>
<p id='n2231' class='stm run hide_run'><a href='#n2231'>2231</a></p>
<p id='n2232' class='stm run hide_run'><a href='#n2232'>2232</a></p>
<p id='n2233' class='stm mis'><a href='#n2233'>2233</a></p>
<p id='n2234' class='stm mis'><a href='#n2234'>2234</a></p>
<p id='n2235' class='stm mis'><a href='#n2235'>2235</a></p>
<p id='n2236' class='pln'><a href='#n2236'>2236</a></p>
<p id='n2237' class='stm run hide_run'><a href='#n2237'>2237</a></p>
<p id='n2238' class='stm run hide_run'><a href='#n2238'>2238</a></p>
<p id='n2239' class='stm run hide_run'><a href='#n2239'>2239</a></p>
<p id='n2240' class='stm run hide_run'><a href='#n2240'>2240</a></p>
<p id='n2241' class='pln'><a href='#n2241'>2241</a></p>
<p id='n2242' class='stm mis'><a href='#n2242'>2242</a></p>
<p id='n2243' class='pln'><a href='#n2243'>2243</a></p>
<p id='n2244' class='stm run hide_run'><a href='#n2244'>2244</a></p>
<p id='n2245' class='stm run hide_run'><a href='#n2245'>2245</a></p>
<p id='n2246' class='stm run hide_run'><a href='#n2246'>2246</a></p>
<p id='n2247' class='stm run hide_run'><a href='#n2247'>2247</a></p>
<p id='n2248' class='stm mis'><a href='#n2248'>2248</a></p>
<p id='n2249' class='stm run hide_run'><a href='#n2249'>2249</a></p>
<p id='n2250' class='pln'><a href='#n2250'>2250</a></p>
<p id='n2251' class='stm run hide_run'><a href='#n2251'>2251</a></p>
<p id='n2252' class='pln'><a href='#n2252'>2252</a></p>
<p id='n2253' class='pln'><a href='#n2253'>2253</a></p>
<p id='n2254' class='pln'><a href='#n2254'>2254</a></p>
<p id='n2255' class='pln'><a href='#n2255'>2255</a></p>
<p id='n2256' class='pln'><a href='#n2256'>2256</a></p>
<p id='n2257' class='pln'><a href='#n2257'>2257</a></p>
<p id='n2258' class='pln'><a href='#n2258'>2258</a></p>
<p id='n2259' class='pln'><a href='#n2259'>2259</a></p>
<p id='n2260' class='pln'><a href='#n2260'>2260</a></p>
<p id='n2261' class='pln'><a href='#n2261'>2261</a></p>
<p id='n2262' class='pln'><a href='#n2262'>2262</a></p>
<p id='n2263' class='stm mis'><a href='#n2263'>2263</a></p>
<p id='n2264' class='stm mis'><a href='#n2264'>2264</a></p>
<p id='n2265' class='stm mis'><a href='#n2265'>2265</a></p>
<p id='n2266' class='pln'><a href='#n2266'>2266</a></p>
<p id='n2267' class='stm run hide_run'><a href='#n2267'>2267</a></p>
<p id='n2268' class='stm run hide_run'><a href='#n2268'>2268</a></p>
<p id='n2269' class='pln'><a href='#n2269'>2269</a></p>
<p id='n2270' class='pln'><a href='#n2270'>2270</a></p>
<p id='n2271' class='stm run hide_run'><a href='#n2271'>2271</a></p>
<p id='n2272' class='pln'><a href='#n2272'>2272</a></p>
<p id='n2273' class='pln'><a href='#n2273'>2273</a></p>
<p id='n2274' class='stm run hide_run'><a href='#n2274'>2274</a></p>
<p id='n2275' class='stm run hide_run'><a href='#n2275'>2275</a></p>
<p id='n2276' class='pln'><a href='#n2276'>2276</a></p>
<p id='n2277' class='stm run hide_run'><a href='#n2277'>2277</a></p>
<p id='n2278' class='stm run hide_run'><a href='#n2278'>2278</a></p>
<p id='n2279' class='pln'><a href='#n2279'>2279</a></p>
<p id='n2280' class='stm run hide_run'><a href='#n2280'>2280</a></p>
<p id='n2281' class='pln'><a href='#n2281'>2281</a></p>
<p id='n2282' class='stm run hide_run'><a href='#n2282'>2282</a></p>
<p id='n2283' class='pln'><a href='#n2283'>2283</a></p>
<p id='n2284' class='stm run hide_run'><a href='#n2284'>2284</a></p>
<p id='n2285' class='stm run hide_run'><a href='#n2285'>2285</a></p>
<p id='n2286' class='stm run hide_run'><a href='#n2286'>2286</a></p>
<p id='n2287' class='stm mis'><a href='#n2287'>2287</a></p>
<p id='n2288' class='stm mis'><a href='#n2288'>2288</a></p>
<p id='n2289' class='pln'><a href='#n2289'>2289</a></p>
<p id='n2290' class='stm run hide_run'><a href='#n2290'>2290</a></p>
<p id='n2291' class='pln'><a href='#n2291'>2291</a></p>
<p id='n2292' class='pln'><a href='#n2292'>2292</a></p>
<p id='n2293' class='stm run hide_run'><a href='#n2293'>2293</a></p>
<p id='n2294' class='stm run hide_run'><a href='#n2294'>2294</a></p>
<p id='n2295' class='pln'><a href='#n2295'>2295</a></p>
<p id='n2296' class='stm run hide_run'><a href='#n2296'>2296</a></p>
<p id='n2297' class='stm run hide_run'><a href='#n2297'>2297</a></p>
<p id='n2298' class='pln'><a href='#n2298'>2298</a></p>
<p id='n2299' class='stm run hide_run'><a href='#n2299'>2299</a></p>
<p id='n2300' class='stm mis'><a href='#n2300'>2300</a></p>
<p id='n2301' class='stm mis'><a href='#n2301'>2301</a></p>
<p id='n2302' class='stm run hide_run'><a href='#n2302'>2302</a></p>
<p id='n2303' class='pln'><a href='#n2303'>2303</a></p>
<p id='n2304' class='stm run hide_run'><a href='#n2304'>2304</a></p>
<p id='n2305' class='stm run hide_run'><a href='#n2305'>2305</a></p>
<p id='n2306' class='stm mis'><a href='#n2306'>2306</a></p>
<p id='n2307' class='stm mis'><a href='#n2307'>2307</a></p>
<p id='n2308' class='pln'><a href='#n2308'>2308</a></p>
<p id='n2309' class='stm run hide_run'><a href='#n2309'>2309</a></p>
<p id='n2310' class='pln'><a href='#n2310'>2310</a></p>
<p id='n2311' class='stm run hide_run'><a href='#n2311'>2311</a></p>
<p id='n2312' class='pln'><a href='#n2312'>2312</a></p>
<p id='n2313' class='pln'><a href='#n2313'>2313</a></p>
<p id='n2314' class='pln'><a href='#n2314'>2314</a></p>
<p id='n2315' class='pln'><a href='#n2315'>2315</a></p>
<p id='n2316' class='pln'><a href='#n2316'>2316</a></p>
<p id='n2317' class='pln'><a href='#n2317'>2317</a></p>
<p id='n2318' class='pln'><a href='#n2318'>2318</a></p>
<p id='n2319' class='pln'><a href='#n2319'>2319</a></p>
<p id='n2320' class='stm run hide_run'><a href='#n2320'>2320</a></p>
<p id='n2321' class='pln'><a href='#n2321'>2321</a></p>
<p id='n2322' class='pln'><a href='#n2322'>2322</a></p>
<p id='n2323' class='pln'><a href='#n2323'>2323</a></p>
<p id='n2324' class='pln'><a href='#n2324'>2324</a></p>
<p id='n2325' class='pln'><a href='#n2325'>2325</a></p>
<p id='n2326' class='pln'><a href='#n2326'>2326</a></p>
<p id='n2327' class='pln'><a href='#n2327'>2327</a></p>
<p id='n2328' class='stm run hide_run'><a href='#n2328'>2328</a></p>
<p id='n2329' class='pln'><a href='#n2329'>2329</a></p>
<p id='n2330' class='pln'><a href='#n2330'>2330</a></p>
<p id='n2331' class='pln'><a href='#n2331'>2331</a></p>
<p id='n2332' class='pln'><a href='#n2332'>2332</a></p>
<p id='n2333' class='pln'><a href='#n2333'>2333</a></p>
<p id='n2334' class='pln'><a href='#n2334'>2334</a></p>
<p id='n2335' class='pln'><a href='#n2335'>2335</a></p>
<p id='n2336' class='stm run hide_run'><a href='#n2336'>2336</a></p>
<p id='n2337' class='pln'><a href='#n2337'>2337</a></p>
<p id='n2338' class='stm run hide_run'><a href='#n2338'>2338</a></p>
<p id='n2339' class='pln'><a href='#n2339'>2339</a></p>
<p id='n2340' class='stm run hide_run'><a href='#n2340'>2340</a></p>
<p id='n2341' class='pln'><a href='#n2341'>2341</a></p>
<p id='n2342' class='pln'><a href='#n2342'>2342</a></p>
<p id='n2343' class='pln'><a href='#n2343'>2343</a></p>
<p id='n2344' class='pln'><a href='#n2344'>2344</a></p>
<p id='n2345' class='pln'><a href='#n2345'>2345</a></p>
<p id='n2346' class='pln'><a href='#n2346'>2346</a></p>
<p id='n2347' class='pln'><a href='#n2347'>2347</a></p>
<p id='n2348' class='stm run hide_run'><a href='#n2348'>2348</a></p>
<p id='n2349' class='pln'><a href='#n2349'>2349</a></p>
<p id='n2350' class='pln'><a href='#n2350'>2350</a></p>
<p id='n2351' class='pln'><a href='#n2351'>2351</a></p>
<p id='n2352' class='pln'><a href='#n2352'>2352</a></p>
<p id='n2353' class='pln'><a href='#n2353'>2353</a></p>
<p id='n2354' class='pln'><a href='#n2354'>2354</a></p>
<p id='n2355' class='pln'><a href='#n2355'>2355</a></p>
<p id='n2356' class='pln'><a href='#n2356'>2356</a></p>
<p id='n2357' class='stm run hide_run'><a href='#n2357'>2357</a></p>
<p id='n2358' class='pln'><a href='#n2358'>2358</a></p>
<p id='n2359' class='stm mis'><a href='#n2359'>2359</a></p>
<p id='n2360' class='pln'><a href='#n2360'>2360</a></p>
<p id='n2361' class='stm run hide_run'><a href='#n2361'>2361</a></p>
<p id='n2362' class='stm mis'><a href='#n2362'>2362</a></p>
<p id='n2363' class='pln'><a href='#n2363'>2363</a></p>
<p id='n2364' class='stm run hide_run'><a href='#n2364'>2364</a></p>
<p id='n2365' class='stm mis'><a href='#n2365'>2365</a></p>
<p id='n2366' class='pln'><a href='#n2366'>2366</a></p>
<p id='n2367' class='stm run hide_run'><a href='#n2367'>2367</a></p>
<p id='n2368' class='stm mis'><a href='#n2368'>2368</a></p>
<p id='n2369' class='pln'><a href='#n2369'>2369</a></p>
<p id='n2370' class='stm run hide_run'><a href='#n2370'>2370</a></p>
<p id='n2371' class='stm mis'><a href='#n2371'>2371</a></p>
<p id='n2372' class='pln'><a href='#n2372'>2372</a></p>
<p id='n2373' class='pln'><a href='#n2373'>2373</a></p>
<p id='n2374' class='stm run hide_run'><a href='#n2374'>2374</a></p>
<p id='n2375' class='stm mis'><a href='#n2375'>2375</a></p>
<p id='n2376' class='stm mis'><a href='#n2376'>2376</a></p>
<p id='n2377' class='stm mis'><a href='#n2377'>2377</a></p>
<p id='n2378' class='pln'><a href='#n2378'>2378</a></p>
<p id='n2379' class='pln'><a href='#n2379'>2379</a></p>
<p id='n2380' class='stm run hide_run'><a href='#n2380'>2380</a></p>
<p id='n2381' class='stm mis'><a href='#n2381'>2381</a></p>
<p id='n2382' class='stm mis'><a href='#n2382'>2382</a></p>
<p id='n2383' class='stm mis'><a href='#n2383'>2383</a></p>
<p id='n2384' class='stm mis'><a href='#n2384'>2384</a></p>
<p id='n2385' class='pln'><a href='#n2385'>2385</a></p>
<p id='n2386' class='stm mis'><a href='#n2386'>2386</a></p>
<p id='n2387' class='stm mis'><a href='#n2387'>2387</a></p>
<p id='n2388' class='stm mis'><a href='#n2388'>2388</a></p>
<p id='n2389' class='pln'><a href='#n2389'>2389</a></p>
<p id='n2390' class='stm mis'><a href='#n2390'>2390</a></p>
<p id='n2391' class='stm mis'><a href='#n2391'>2391</a></p>
<p id='n2392' class='stm mis'><a href='#n2392'>2392</a></p>
<p id='n2393' class='pln'><a href='#n2393'>2393</a></p>
<p id='n2394' class='stm mis'><a href='#n2394'>2394</a></p>
<p id='n2395' class='stm mis'><a href='#n2395'>2395</a></p>
<p id='n2396' class='stm mis'><a href='#n2396'>2396</a></p>
<p id='n2397' class='pln'><a href='#n2397'>2397</a></p>
<p id='n2398' class='stm mis'><a href='#n2398'>2398</a></p>
<p id='n2399' class='stm mis'><a href='#n2399'>2399</a></p>
<p id='n2400' class='pln'><a href='#n2400'>2400</a></p>
<p id='n2401' class='stm mis'><a href='#n2401'>2401</a></p>
<p id='n2402' class='stm mis'><a href='#n2402'>2402</a></p>
<p id='n2403' class='stm mis'><a href='#n2403'>2403</a></p>
<p id='n2404' class='pln'><a href='#n2404'>2404</a></p>
<p id='n2405' class='stm mis'><a href='#n2405'>2405</a></p>
<p id='n2406' class='pln'><a href='#n2406'>2406</a></p>
<p id='n2407' class='stm mis'><a href='#n2407'>2407</a></p>
<p id='n2408' class='stm mis'><a href='#n2408'>2408</a></p>
<p id='n2409' class='stm mis'><a href='#n2409'>2409</a></p>
<p id='n2410' class='stm mis'><a href='#n2410'>2410</a></p>
<p id='n2411' class='stm mis'><a href='#n2411'>2411</a></p>
<p id='n2412' class='stm mis'><a href='#n2412'>2412</a></p>
<p id='n2413' class='stm mis'><a href='#n2413'>2413</a></p>
<p id='n2414' class='stm mis'><a href='#n2414'>2414</a></p>
<p id='n2415' class='stm mis'><a href='#n2415'>2415</a></p>
<p id='n2416' class='stm mis'><a href='#n2416'>2416</a></p>
<p id='n2417' class='stm mis'><a href='#n2417'>2417</a></p>
<p id='n2418' class='stm mis'><a href='#n2418'>2418</a></p>
<p id='n2419' class='stm mis'><a href='#n2419'>2419</a></p>
<p id='n2420' class='stm mis'><a href='#n2420'>2420</a></p>
<p id='n2421' class='stm mis'><a href='#n2421'>2421</a></p>
<p id='n2422' class='stm mis'><a href='#n2422'>2422</a></p>
<p id='n2423' class='stm mis'><a href='#n2423'>2423</a></p>
<p id='n2424' class='stm mis'><a href='#n2424'>2424</a></p>
<p id='n2425' class='pln'><a href='#n2425'>2425</a></p>
<p id='n2426' class='stm mis'><a href='#n2426'>2426</a></p>
<p id='n2427' class='pln'><a href='#n2427'>2427</a></p>
<p id='n2428' class='stm mis'><a href='#n2428'>2428</a></p>
<p id='n2429' class='pln'><a href='#n2429'>2429</a></p>
<p id='n2430' class='pln'><a href='#n2430'>2430</a></p>
<p id='n2431' class='pln'><a href='#n2431'>2431</a></p>
<p id='n2432' class='pln'><a href='#n2432'>2432</a></p>
<p id='n2433' class='stm mis'><a href='#n2433'>2433</a></p>
<p id='n2434' class='stm mis'><a href='#n2434'>2434</a></p>
<p id='n2435' class='stm mis'><a href='#n2435'>2435</a></p>
<p id='n2436' class='stm mis'><a href='#n2436'>2436</a></p>
<p id='n2437' class='pln'><a href='#n2437'>2437</a></p>
<p id='n2438' class='stm mis'><a href='#n2438'>2438</a></p>
<p id='n2439' class='pln'><a href='#n2439'>2439</a></p>
<p id='n2440' class='stm mis'><a href='#n2440'>2440</a></p>
<p id='n2441' class='stm mis'><a href='#n2441'>2441</a></p>
<p id='n2442' class='stm mis'><a href='#n2442'>2442</a></p>
<p id='n2443' class='stm mis'><a href='#n2443'>2443</a></p>
<p id='n2444' class='stm mis'><a href='#n2444'>2444</a></p>
<p id='n2445' class='stm mis'><a href='#n2445'>2445</a></p>
<p id='n2446' class='stm mis'><a href='#n2446'>2446</a></p>
<p id='n2447' class='stm mis'><a href='#n2447'>2447</a></p>
<p id='n2448' class='pln'><a href='#n2448'>2448</a></p>
<p id='n2449' class='stm mis'><a href='#n2449'>2449</a></p>
<p id='n2450' class='stm mis'><a href='#n2450'>2450</a></p>
<p id='n2451' class='stm mis'><a href='#n2451'>2451</a></p>
<p id='n2452' class='stm mis'><a href='#n2452'>2452</a></p>
<p id='n2453' class='stm mis'><a href='#n2453'>2453</a></p>
<p id='n2454' class='stm mis'><a href='#n2454'>2454</a></p>
<p id='n2455' class='stm mis'><a href='#n2455'>2455</a></p>
<p id='n2456' class='stm mis'><a href='#n2456'>2456</a></p>
<p id='n2457' class='pln'><a href='#n2457'>2457</a></p>
<p id='n2458' class='stm mis'><a href='#n2458'>2458</a></p>
<p id='n2459' class='pln'><a href='#n2459'>2459</a></p>
<p id='n2460' class='stm mis'><a href='#n2460'>2460</a></p>
<p id='n2461' class='stm mis'><a href='#n2461'>2461</a></p>
<p id='n2462' class='stm mis'><a href='#n2462'>2462</a></p>
<p id='n2463' class='stm mis'><a href='#n2463'>2463</a></p>
<p id='n2464' class='stm mis'><a href='#n2464'>2464</a></p>
<p id='n2465' class='stm mis'><a href='#n2465'>2465</a></p>
<p id='n2466' class='stm mis'><a href='#n2466'>2466</a></p>
<p id='n2467' class='stm mis'><a href='#n2467'>2467</a></p>
<p id='n2468' class='pln'><a href='#n2468'>2468</a></p>
<p id='n2469' class='stm mis'><a href='#n2469'>2469</a></p>
<p id='n2470' class='pln'><a href='#n2470'>2470</a></p>
<p id='n2471' class='stm mis'><a href='#n2471'>2471</a></p>
<p id='n2472' class='stm mis'><a href='#n2472'>2472</a></p>
<p id='n2473' class='stm mis'><a href='#n2473'>2473</a></p>
<p id='n2474' class='stm mis'><a href='#n2474'>2474</a></p>
<p id='n2475' class='stm mis'><a href='#n2475'>2475</a></p>
<p id='n2476' class='stm mis'><a href='#n2476'>2476</a></p>
<p id='n2477' class='stm mis'><a href='#n2477'>2477</a></p>
<p id='n2478' class='pln'><a href='#n2478'>2478</a></p>
<p id='n2479' class='stm mis'><a href='#n2479'>2479</a></p>
<p id='n2480' class='stm mis'><a href='#n2480'>2480</a></p>
<p id='n2481' class='stm mis'><a href='#n2481'>2481</a></p>
<p id='n2482' class='stm mis'><a href='#n2482'>2482</a></p>
<p id='n2483' class='stm mis'><a href='#n2483'>2483</a></p>
<p id='n2484' class='pln'><a href='#n2484'>2484</a></p>
<p id='n2485' class='stm mis'><a href='#n2485'>2485</a></p>
<p id='n2486' class='stm mis'><a href='#n2486'>2486</a></p>
<p id='n2487' class='stm mis'><a href='#n2487'>2487</a></p>
<p id='n2488' class='pln'><a href='#n2488'>2488</a></p>
<p id='n2489' class='stm mis'><a href='#n2489'>2489</a></p>
<p id='n2490' class='stm mis'><a href='#n2490'>2490</a></p>
<p id='n2491' class='stm mis'><a href='#n2491'>2491</a></p>
<p id='n2492' class='pln'><a href='#n2492'>2492</a></p>
<p id='n2493' class='pln'><a href='#n2493'>2493</a></p>
<p id='n2494' class='stm mis'><a href='#n2494'>2494</a></p>
<p id='n2495' class='pln'><a href='#n2495'>2495</a></p>
<p id='n2496' class='pln'><a href='#n2496'>2496</a></p>
<p id='n2497' class='stm mis'><a href='#n2497'>2497</a></p>
<p id='n2498' class='pln'><a href='#n2498'>2498</a></p>
<p id='n2499' class='pln'><a href='#n2499'>2499</a></p>
<p id='n2500' class='stm mis'><a href='#n2500'>2500</a></p>
<p id='n2501' class='stm mis'><a href='#n2501'>2501</a></p>
<p id='n2502' class='stm mis'><a href='#n2502'>2502</a></p>
<p id='n2503' class='stm mis'><a href='#n2503'>2503</a></p>
<p id='n2504' class='pln'><a href='#n2504'>2504</a></p>
<p id='n2505' class='pln'><a href='#n2505'>2505</a></p>
<p id='n2506' class='pln'><a href='#n2506'>2506</a></p>
<p id='n2507' class='stm mis'><a href='#n2507'>2507</a></p>
<p id='n2508' class='stm mis'><a href='#n2508'>2508</a></p>
<p id='n2509' class='pln'><a href='#n2509'>2509</a></p>
<p id='n2510' class='stm mis'><a href='#n2510'>2510</a></p>
<p id='n2511' class='stm mis'><a href='#n2511'>2511</a></p>
<p id='n2512' class='pln'><a href='#n2512'>2512</a></p>
<p id='n2513' class='stm mis'><a href='#n2513'>2513</a></p>
<p id='n2514' class='stm mis'><a href='#n2514'>2514</a></p>
<p id='n2515' class='pln'><a href='#n2515'>2515</a></p>
<p id='n2516' class='pln'><a href='#n2516'>2516</a></p>
<p id='n2517' class='pln'><a href='#n2517'>2517</a></p>
<p id='n2518' class='pln'><a href='#n2518'>2518</a></p>
<p id='n2519' class='pln'><a href='#n2519'>2519</a></p>
<p id='n2520' class='pln'><a href='#n2520'>2520</a></p>
<p id='n2521' class='pln'><a href='#n2521'>2521</a></p>
<p id='n2522' class='pln'><a href='#n2522'>2522</a></p>
<p id='n2523' class='pln'><a href='#n2523'>2523</a></p>
<p id='n2524' class='pln'><a href='#n2524'>2524</a></p>
<p id='n2525' class='pln'><a href='#n2525'>2525</a></p>
<p id='n2526' class='pln'><a href='#n2526'>2526</a></p>
<p id='n2527' class='stm mis'><a href='#n2527'>2527</a></p>
<p id='n2528' class='pln'><a href='#n2528'>2528</a></p>
<p id='n2529' class='stm mis'><a href='#n2529'>2529</a></p>
<p id='n2530' class='pln'><a href='#n2530'>2530</a></p>
<p id='n2531' class='pln'><a href='#n2531'>2531</a></p>
<p id='n2532' class='stm run hide_run'><a href='#n2532'>2532</a></p>
<p id='n2533' class='pln'><a href='#n2533'>2533</a></p>
<p id='n2534' class='pln'><a href='#n2534'>2534</a></p>
<p id='n2535' class='stm run hide_run'><a href='#n2535'>2535</a></p>
<p id='n2536' class='stm run hide_run'><a href='#n2536'>2536</a></p>
<p id='n2537' class='pln'><a href='#n2537'>2537</a></p>
<p id='n2538' class='stm run hide_run'><a href='#n2538'>2538</a></p>
<p id='n2539' class='stm mis'><a href='#n2539'>2539</a></p>
<p id='n2540' class='pln'><a href='#n2540'>2540</a></p>
<p id='n2541' class='stm run hide_run'><a href='#n2541'>2541</a></p>
<p id='n2542' class='stm mis'><a href='#n2542'>2542</a></p>
<p id='n2543' class='pln'><a href='#n2543'>2543</a></p>
<p id='n2544' class='stm run hide_run'><a href='#n2544'>2544</a></p>
<p id='n2545' class='stm mis'><a href='#n2545'>2545</a></p>
<p id='n2546' class='stm mis'><a href='#n2546'>2546</a></p>
<p id='n2547' class='stm mis'><a href='#n2547'>2547</a></p>
<p id='n2548' class='stm mis'><a href='#n2548'>2548</a></p>
<p id='n2549' class='stm mis'><a href='#n2549'>2549</a></p>
<p id='n2550' class='stm mis'><a href='#n2550'>2550</a></p>
<p id='n2551' class='pln'><a href='#n2551'>2551</a></p>
<p id='n2552' class='stm mis'><a href='#n2552'>2552</a></p>
<p id='n2553' class='stm mis'><a href='#n2553'>2553</a></p>
<p id='n2554' class='stm mis'><a href='#n2554'>2554</a></p>
<p id='n2555' class='stm mis'><a href='#n2555'>2555</a></p>
<p id='n2556' class='stm mis'><a href='#n2556'>2556</a></p>
<p id='n2557' class='stm mis'><a href='#n2557'>2557</a></p>
<p id='n2558' class='stm mis'><a href='#n2558'>2558</a></p>
<p id='n2559' class='stm mis'><a href='#n2559'>2559</a></p>
<p id='n2560' class='stm mis'><a href='#n2560'>2560</a></p>
<p id='n2561' class='pln'><a href='#n2561'>2561</a></p>
<p id='n2562' class='stm mis'><a href='#n2562'>2562</a></p>
<p id='n2563' class='stm mis'><a href='#n2563'>2563</a></p>
<p id='n2564' class='stm mis'><a href='#n2564'>2564</a></p>
<p id='n2565' class='stm mis'><a href='#n2565'>2565</a></p>
<p id='n2566' class='stm mis'><a href='#n2566'>2566</a></p>
<p id='n2567' class='stm mis'><a href='#n2567'>2567</a></p>
<p id='n2568' class='stm mis'><a href='#n2568'>2568</a></p>
<p id='n2569' class='stm mis'><a href='#n2569'>2569</a></p>
<p id='n2570' class='pln'><a href='#n2570'>2570</a></p>
<p id='n2571' class='stm mis'><a href='#n2571'>2571</a></p>
<p id='n2572' class='stm mis'><a href='#n2572'>2572</a></p>
<p id='n2573' class='stm mis'><a href='#n2573'>2573</a></p>
<p id='n2574' class='stm mis'><a href='#n2574'>2574</a></p>
<p id='n2575' class='stm mis'><a href='#n2575'>2575</a></p>
<p id='n2576' class='stm mis'><a href='#n2576'>2576</a></p>
<p id='n2577' class='stm mis'><a href='#n2577'>2577</a></p>
<p id='n2578' class='stm mis'><a href='#n2578'>2578</a></p>
<p id='n2579' class='pln'><a href='#n2579'>2579</a></p>
<p id='n2580' class='pln'><a href='#n2580'>2580</a></p>
<p id='n2581' class='stm mis'><a href='#n2581'>2581</a></p>
<p id='n2582' class='pln'><a href='#n2582'>2582</a></p>
<p id='n2583' class='stm mis'><a href='#n2583'>2583</a></p>
<p id='n2584' class='stm mis'><a href='#n2584'>2584</a></p>
<p id='n2585' class='stm mis'><a href='#n2585'>2585</a></p>
<p id='n2586' class='stm mis'><a href='#n2586'>2586</a></p>
<p id='n2587' class='stm mis'><a href='#n2587'>2587</a></p>
<p id='n2588' class='pln'><a href='#n2588'>2588</a></p>
<p id='n2589' class='stm mis'><a href='#n2589'>2589</a></p>
<p id='n2590' class='stm mis'><a href='#n2590'>2590</a></p>
<p id='n2591' class='pln'><a href='#n2591'>2591</a></p>
<p id='n2592' class='stm mis'><a href='#n2592'>2592</a></p>
<p id='n2593' class='pln'><a href='#n2593'>2593</a></p>
<p id='n2594' class='pln'><a href='#n2594'>2594</a></p>
<p id='n2595' class='pln'><a href='#n2595'>2595</a></p>
<p id='n2596' class='pln'><a href='#n2596'>2596</a></p>
<p id='n2597' class='pln'><a href='#n2597'>2597</a></p>
<p id='n2598' class='pln'><a href='#n2598'>2598</a></p>
<p id='n2599' class='pln'><a href='#n2599'>2599</a></p>
<p id='n2600' class='pln'><a href='#n2600'>2600</a></p>
<p id='n2601' class='pln'><a href='#n2601'>2601</a></p>
<p id='n2602' class='pln'><a href='#n2602'>2602</a></p>
<p id='n2603' class='pln'><a href='#n2603'>2603</a></p>
<p id='n2604' class='stm mis'><a href='#n2604'>2604</a></p>
<p id='n2605' class='pln'><a href='#n2605'>2605</a></p>
<p id='n2606' class='pln'><a href='#n2606'>2606</a></p>
<p id='n2607' class='stm run hide_run'><a href='#n2607'>2607</a></p>
<p id='n2608' class='pln'><a href='#n2608'>2608</a></p>
<p id='n2609' class='pln'><a href='#n2609'>2609</a></p>
<p id='n2610' class='stm run hide_run'><a href='#n2610'>2610</a></p>
<p id='n2611' class='stm run hide_run'><a href='#n2611'>2611</a></p>
<p id='n2612' class='stm run hide_run'><a href='#n2612'>2612</a></p>
<p id='n2613' class='pln'><a href='#n2613'>2613</a></p>
<p id='n2614' class='stm run hide_run'><a href='#n2614'>2614</a></p>
<p id='n2615' class='pln'><a href='#n2615'>2615</a></p>
<p id='n2616' class='stm mis'><a href='#n2616'>2616</a></p>
<p id='n2617' class='pln'><a href='#n2617'>2617</a></p>
<p id='n2618' class='stm run hide_run'><a href='#n2618'>2618</a></p>
<p id='n2619' class='pln'><a href='#n2619'>2619</a></p>
<p id='n2620' class='stm mis'><a href='#n2620'>2620</a></p>
<p id='n2621' class='pln'><a href='#n2621'>2621</a></p>
<p id='n2622' class='stm run hide_run'><a href='#n2622'>2622</a></p>
<p id='n2623' class='stm mis'><a href='#n2623'>2623</a></p>
<p id='n2624' class='stm mis'><a href='#n2624'>2624</a></p>
<p id='n2625' class='stm mis'><a href='#n2625'>2625</a></p>
<p id='n2626' class='stm mis'><a href='#n2626'>2626</a></p>
<p id='n2627' class='stm mis'><a href='#n2627'>2627</a></p>
<p id='n2628' class='pln'><a href='#n2628'>2628</a></p>
<p id='n2629' class='stm mis'><a href='#n2629'>2629</a></p>
<p id='n2630' class='pln'><a href='#n2630'>2630</a></p>
<p id='n2631' class='pln'><a href='#n2631'>2631</a></p>
<p id='n2632' class='pln'><a href='#n2632'>2632</a></p>
<p id='n2633' class='pln'><a href='#n2633'>2633</a></p>
<p id='n2634' class='pln'><a href='#n2634'>2634</a></p>
<p id='n2635' class='stm mis'><a href='#n2635'>2635</a></p>
<p id='n2636' class='stm mis'><a href='#n2636'>2636</a></p>
<p id='n2637' class='stm mis'><a href='#n2637'>2637</a></p>
<p id='n2638' class='stm mis'><a href='#n2638'>2638</a></p>
<p id='n2639' class='stm mis'><a href='#n2639'>2639</a></p>
<p id='n2640' class='stm mis'><a href='#n2640'>2640</a></p>
<p id='n2641' class='stm mis'><a href='#n2641'>2641</a></p>
<p id='n2642' class='pln'><a href='#n2642'>2642</a></p>
<p id='n2643' class='stm mis'><a href='#n2643'>2643</a></p>
<p id='n2644' class='stm mis'><a href='#n2644'>2644</a></p>
<p id='n2645' class='stm mis'><a href='#n2645'>2645</a></p>
<p id='n2646' class='stm mis'><a href='#n2646'>2646</a></p>
<p id='n2647' class='stm mis'><a href='#n2647'>2647</a></p>
<p id='n2648' class='stm mis'><a href='#n2648'>2648</a></p>
<p id='n2649' class='stm mis'><a href='#n2649'>2649</a></p>
<p id='n2650' class='stm mis'><a href='#n2650'>2650</a></p>
<p id='n2651' class='stm mis'><a href='#n2651'>2651</a></p>
<p id='n2652' class='stm mis'><a href='#n2652'>2652</a></p>
<p id='n2653' class='pln'><a href='#n2653'>2653</a></p>
<p id='n2654' class='stm mis'><a href='#n2654'>2654</a></p>
<p id='n2655' class='stm mis'><a href='#n2655'>2655</a></p>
<p id='n2656' class='stm mis'><a href='#n2656'>2656</a></p>
<p id='n2657' class='stm mis'><a href='#n2657'>2657</a></p>
<p id='n2658' class='stm mis'><a href='#n2658'>2658</a></p>
<p id='n2659' class='stm mis'><a href='#n2659'>2659</a></p>
<p id='n2660' class='stm mis'><a href='#n2660'>2660</a></p>
<p id='n2661' class='pln'><a href='#n2661'>2661</a></p>
<p id='n2662' class='stm mis'><a href='#n2662'>2662</a></p>
<p id='n2663' class='stm mis'><a href='#n2663'>2663</a></p>
<p id='n2664' class='stm mis'><a href='#n2664'>2664</a></p>
<p id='n2665' class='stm mis'><a href='#n2665'>2665</a></p>
<p id='n2666' class='stm mis'><a href='#n2666'>2666</a></p>
<p id='n2667' class='stm mis'><a href='#n2667'>2667</a></p>
<p id='n2668' class='stm mis'><a href='#n2668'>2668</a></p>
<p id='n2669' class='stm mis'><a href='#n2669'>2669</a></p>
<p id='n2670' class='pln'><a href='#n2670'>2670</a></p>
<p id='n2671' class='stm mis'><a href='#n2671'>2671</a></p>
<p id='n2672' class='stm mis'><a href='#n2672'>2672</a></p>
<p id='n2673' class='pln'><a href='#n2673'>2673</a></p>
<p id='n2674' class='stm mis'><a href='#n2674'>2674</a></p>
<p id='n2675' class='stm mis'><a href='#n2675'>2675</a></p>
<p id='n2676' class='stm mis'><a href='#n2676'>2676</a></p>
<p id='n2677' class='pln'><a href='#n2677'>2677</a></p>
<p id='n2678' class='pln'><a href='#n2678'>2678</a></p>
<p id='n2679' class='stm run hide_run'><a href='#n2679'>2679</a></p>
<p id='n2680' class='pln'><a href='#n2680'>2680</a></p>
<p id='n2681' class='pln'><a href='#n2681'>2681</a></p>
<p id='n2682' class='stm run hide_run'><a href='#n2682'>2682</a></p>
<p id='n2683' class='stm run hide_run'><a href='#n2683'>2683</a></p>
<p id='n2684' class='pln'><a href='#n2684'>2684</a></p>
<p id='n2685' class='stm run hide_run'><a href='#n2685'>2685</a></p>
<p id='n2686' class='pln'><a href='#n2686'>2686</a></p>
<p id='n2687' class='stm run hide_run'><a href='#n2687'>2687</a></p>
<p id='n2688' class='pln'><a href='#n2688'>2688</a></p>
<p id='n2689' class='stm run hide_run'><a href='#n2689'>2689</a></p>
<p id='n2690' class='stm run hide_run'><a href='#n2690'>2690</a></p>
<p id='n2691' class='stm run hide_run'><a href='#n2691'>2691</a></p>
<p id='n2692' class='stm mis'><a href='#n2692'>2692</a></p>
<p id='n2693' class='stm mis'><a href='#n2693'>2693</a></p>
<p id='n2694' class='stm run hide_run'><a href='#n2694'>2694</a></p>
<p id='n2695' class='pln'><a href='#n2695'>2695</a></p>
<p id='n2696' class='stm run hide_run'><a href='#n2696'>2696</a></p>
<p id='n2697' class='pln'><a href='#n2697'>2697</a></p>
<p id='n2698' class='stm run hide_run'><a href='#n2698'>2698</a></p>
<p id='n2699' class='pln'><a href='#n2699'>2699</a></p>
<p id='n2700' class='pln'><a href='#n2700'>2700</a></p>
<p id='n2701' class='pln'><a href='#n2701'>2701</a></p>
<p id='n2702' class='stm run hide_run'><a href='#n2702'>2702</a></p>
<p id='n2703' class='stm run hide_run'><a href='#n2703'>2703</a></p>
<p id='n2704' class='stm mis'><a href='#n2704'>2704</a></p>
<p id='n2705' class='stm mis'><a href='#n2705'>2705</a></p>
<p id='n2706' class='stm run hide_run'><a href='#n2706'>2706</a></p>
<p id='n2707' class='pln'><a href='#n2707'>2707</a></p>
<p id='n2708' class='pln'><a href='#n2708'>2708</a></p>
<p id='n2709' class='pln'><a href='#n2709'>2709</a></p>
<p id='n2710' class='stm run hide_run'><a href='#n2710'>2710</a></p>
<p id='n2711' class='stm run hide_run'><a href='#n2711'>2711</a></p>
<p id='n2712' class='stm mis'><a href='#n2712'>2712</a></p>
<p id='n2713' class='stm mis'><a href='#n2713'>2713</a></p>
<p id='n2714' class='stm run hide_run'><a href='#n2714'>2714</a></p>
<p id='n2715' class='pln'><a href='#n2715'>2715</a></p>
<p id='n2716' class='pln'><a href='#n2716'>2716</a></p>
<p id='n2717' class='pln'><a href='#n2717'>2717</a></p>
<p id='n2718' class='stm run hide_run'><a href='#n2718'>2718</a></p>
<p id='n2719' class='stm run hide_run'><a href='#n2719'>2719</a></p>
<p id='n2720' class='stm mis'><a href='#n2720'>2720</a></p>
<p id='n2721' class='stm mis'><a href='#n2721'>2721</a></p>
<p id='n2722' class='stm run hide_run'><a href='#n2722'>2722</a></p>
<p id='n2723' class='pln'><a href='#n2723'>2723</a></p>
<p id='n2724' class='stm run hide_run'><a href='#n2724'>2724</a></p>
<p id='n2725' class='pln'><a href='#n2725'>2725</a></p>
<p id='n2726' class='pln'><a href='#n2726'>2726</a></p>
<p id='n2727' class='pln'><a href='#n2727'>2727</a></p>
<p id='n2728' class='pln'><a href='#n2728'>2728</a></p>
<p id='n2729' class='pln'><a href='#n2729'>2729</a></p>
<p id='n2730' class='pln'><a href='#n2730'>2730</a></p>
<p id='n2731' class='pln'><a href='#n2731'>2731</a></p>
<p id='n2732' class='pln'><a href='#n2732'>2732</a></p>
<p id='n2733' class='pln'><a href='#n2733'>2733</a></p>
<p id='n2734' class='pln'><a href='#n2734'>2734</a></p>
<p id='n2735' class='stm run hide_run'><a href='#n2735'>2735</a></p>
<p id='n2736' class='pln'><a href='#n2736'>2736</a></p>
<p id='n2737' class='pln'><a href='#n2737'>2737</a></p>
<p id='n2738' class='stm run hide_run'><a href='#n2738'>2738</a></p>
<p id='n2739' class='pln'><a href='#n2739'>2739</a></p>
<p id='n2740' class='pln'><a href='#n2740'>2740</a></p>
<p id='n2741' class='pln'><a href='#n2741'>2741</a></p>
<p id='n2742' class='pln'><a href='#n2742'>2742</a></p>
<p id='n2743' class='pln'><a href='#n2743'>2743</a></p>
<p id='n2744' class='pln'><a href='#n2744'>2744</a></p>
<p id='n2745' class='pln'><a href='#n2745'>2745</a></p>
<p id='n2746' class='pln'><a href='#n2746'>2746</a></p>
<p id='n2747' class='stm run hide_run'><a href='#n2747'>2747</a></p>
<p id='n2748' class='stm run hide_run'><a href='#n2748'>2748</a></p>
<p id='n2749' class='pln'><a href='#n2749'>2749</a></p>
<p id='n2750' class='stm run hide_run'><a href='#n2750'>2750</a></p>
<p id='n2751' class='stm run hide_run'><a href='#n2751'>2751</a></p>
<p id='n2752' class='pln'><a href='#n2752'>2752</a></p>
<p id='n2753' class='stm run hide_run'><a href='#n2753'>2753</a></p>
<p id='n2754' class='pln'><a href='#n2754'>2754</a></p>
<p id='n2755' class='stm run hide_run'><a href='#n2755'>2755</a></p>
<p id='n2756' class='pln'><a href='#n2756'>2756</a></p>
<p id='n2757' class='stm run hide_run'><a href='#n2757'>2757</a></p>
<p id='n2758' class='pln'><a href='#n2758'>2758</a></p>
<p id='n2759' class='stm run hide_run'><a href='#n2759'>2759</a></p>
<p id='n2760' class='pln'><a href='#n2760'>2760</a></p>
<p id='n2761' class='stm run hide_run'><a href='#n2761'>2761</a></p>
<p id='n2762' class='stm run hide_run'><a href='#n2762'>2762</a></p>
<p id='n2763' class='stm run hide_run'><a href='#n2763'>2763</a></p>
<p id='n2764' class='stm mis'><a href='#n2764'>2764</a></p>
<p id='n2765' class='stm mis'><a href='#n2765'>2765</a></p>
<p id='n2766' class='pln'><a href='#n2766'>2766</a></p>
<p id='n2767' class='pln'><a href='#n2767'>2767</a></p>
<p id='n2768' class='stm run hide_run'><a href='#n2768'>2768</a></p>
<p id='n2769' class='pln'><a href='#n2769'>2769</a></p>
<p id='n2770' class='stm run hide_run'><a href='#n2770'>2770</a></p>
<p id='n2771' class='stm run hide_run'><a href='#n2771'>2771</a></p>
<p id='n2772' class='pln'><a href='#n2772'>2772</a></p>
<p id='n2773' class='stm run hide_run'><a href='#n2773'>2773</a></p>
<p id='n2774' class='pln'><a href='#n2774'>2774</a></p>
<p id='n2775' class='stm run hide_run'><a href='#n2775'>2775</a></p>
<p id='n2776' class='stm run hide_run'><a href='#n2776'>2776</a></p>
<p id='n2777' class='stm run hide_run'><a href='#n2777'>2777</a></p>
<p id='n2778' class='stm run hide_run'><a href='#n2778'>2778</a></p>
<p id='n2779' class='stm run hide_run'><a href='#n2779'>2779</a></p>
<p id='n2780' class='stm run hide_run'><a href='#n2780'>2780</a></p>
<p id='n2781' class='stm mis'><a href='#n2781'>2781</a></p>
<p id='n2782' class='stm mis'><a href='#n2782'>2782</a></p>
<p id='n2783' class='stm mis'><a href='#n2783'>2783</a></p>
<p id='n2784' class='pln'><a href='#n2784'>2784</a></p>
<p id='n2785' class='stm run hide_run'><a href='#n2785'>2785</a></p>
<p id='n2786' class='stm run hide_run'><a href='#n2786'>2786</a></p>
<p id='n2787' class='stm run hide_run'><a href='#n2787'>2787</a></p>
<p id='n2788' class='pln'><a href='#n2788'>2788</a></p>
<p id='n2789' class='stm run hide_run'><a href='#n2789'>2789</a></p>
<p id='n2790' class='stm run hide_run'><a href='#n2790'>2790</a></p>
<p id='n2791' class='stm run hide_run'><a href='#n2791'>2791</a></p>
<p id='n2792' class='stm run hide_run'><a href='#n2792'>2792</a></p>
<p id='n2793' class='stm run hide_run'><a href='#n2793'>2793</a></p>
<p id='n2794' class='stm mis'><a href='#n2794'>2794</a></p>
<p id='n2795' class='stm mis'><a href='#n2795'>2795</a></p>
<p id='n2796' class='stm mis'><a href='#n2796'>2796</a></p>
<p id='n2797' class='pln'><a href='#n2797'>2797</a></p>
<p id='n2798' class='stm run hide_run'><a href='#n2798'>2798</a></p>
<p id='n2799' class='stm run hide_run'><a href='#n2799'>2799</a></p>
<p id='n2800' class='pln'><a href='#n2800'>2800</a></p>
<p id='n2801' class='stm run hide_run'><a href='#n2801'>2801</a></p>
<p id='n2802' class='pln'><a href='#n2802'>2802</a></p>
<p id='n2803' class='pln'><a href='#n2803'>2803</a></p>
<p id='n2804' class='pln'><a href='#n2804'>2804</a></p>
<p id='n2805' class='pln'><a href='#n2805'>2805</a></p>
<p id='n2806' class='pln'><a href='#n2806'>2806</a></p>
<p id='n2807' class='pln'><a href='#n2807'>2807</a></p>
<p id='n2808' class='pln'><a href='#n2808'>2808</a></p>
<p id='n2809' class='pln'><a href='#n2809'>2809</a></p>
<p id='n2810' class='pln'><a href='#n2810'>2810</a></p>
<p id='n2811' class='pln'><a href='#n2811'>2811</a></p>
<p id='n2812' class='stm run hide_run'><a href='#n2812'>2812</a></p>
<p id='n2813' class='pln'><a href='#n2813'>2813</a></p>
<p id='n2814' class='stm run hide_run'><a href='#n2814'>2814</a></p>
<p id='n2815' class='pln'><a href='#n2815'>2815</a></p>
<p id='n2816' class='stm run hide_run'><a href='#n2816'>2816</a></p>
<p id='n2817' class='pln'><a href='#n2817'>2817</a></p>
<p id='n2818' class='stm run hide_run'><a href='#n2818'>2818</a></p>
<p id='n2819' class='pln'><a href='#n2819'>2819</a></p>
<p id='n2820' class='stm run hide_run'><a href='#n2820'>2820</a></p>
<p id='n2821' class='stm run hide_run'><a href='#n2821'>2821</a></p>
<p id='n2822' class='stm run hide_run'><a href='#n2822'>2822</a></p>
<p id='n2823' class='stm mis'><a href='#n2823'>2823</a></p>
<p id='n2824' class='stm mis'><a href='#n2824'>2824</a></p>
<p id='n2825' class='pln'><a href='#n2825'>2825</a></p>
<p id='n2826' class='stm run hide_run'><a href='#n2826'>2826</a></p>
<p id='n2827' class='stm run hide_run'><a href='#n2827'>2827</a></p>
<p id='n2828' class='pln'><a href='#n2828'>2828</a></p>
<p id='n2829' class='pln'><a href='#n2829'>2829</a></p>
<p id='n2830' class='stm run hide_run'><a href='#n2830'>2830</a></p>
<p id='n2831' class='stm run hide_run'><a href='#n2831'>2831</a></p>
<p id='n2832' class='stm mis'><a href='#n2832'>2832</a></p>
<p id='n2833' class='stm mis'><a href='#n2833'>2833</a></p>
<p id='n2834' class='stm run hide_run'><a href='#n2834'>2834</a></p>
<p id='n2835' class='stm run hide_run'><a href='#n2835'>2835</a></p>
<p id='n2836' class='pln'><a href='#n2836'>2836</a></p>
<p id='n2837' class='pln'><a href='#n2837'>2837</a></p>
<p id='n2838' class='stm run hide_run'><a href='#n2838'>2838</a></p>
<p id='n2839' class='stm run hide_run'><a href='#n2839'>2839</a></p>
<p id='n2840' class='stm mis'><a href='#n2840'>2840</a></p>
<p id='n2841' class='stm mis'><a href='#n2841'>2841</a></p>
<p id='n2842' class='stm run hide_run'><a href='#n2842'>2842</a></p>
<p id='n2843' class='pln'><a href='#n2843'>2843</a></p>
<p id='n2844' class='pln'><a href='#n2844'>2844</a></p>
<p id='n2845' class='stm run hide_run'><a href='#n2845'>2845</a></p>
<p id='n2846' class='stm run hide_run'><a href='#n2846'>2846</a></p>
<p id='n2847' class='stm run hide_run'><a href='#n2847'>2847</a></p>
<p id='n2848' class='stm run hide_run'><a href='#n2848'>2848</a></p>
<p id='n2849' class='pln'><a href='#n2849'>2849</a></p>
<p id='n2850' class='stm run hide_run'><a href='#n2850'>2850</a></p>
<p id='n2851' class='stm run hide_run'><a href='#n2851'>2851</a></p>
<p id='n2852' class='pln'><a href='#n2852'>2852</a></p>
<p id='n2853' class='stm run hide_run'><a href='#n2853'>2853</a></p>
<p id='n2854' class='pln'><a href='#n2854'>2854</a></p>
<p id='n2855' class='pln'><a href='#n2855'>2855</a></p>
<p id='n2856' class='pln'><a href='#n2856'>2856</a></p>
<p id='n2857' class='pln'><a href='#n2857'>2857</a></p>
<p id='n2858' class='pln'><a href='#n2858'>2858</a></p>
<p id='n2859' class='pln'><a href='#n2859'>2859</a></p>
<p id='n2860' class='pln'><a href='#n2860'>2860</a></p>
<p id='n2861' class='pln'><a href='#n2861'>2861</a></p>
<p id='n2862' class='pln'><a href='#n2862'>2862</a></p>
<p id='n2863' class='pln'><a href='#n2863'>2863</a></p>
<p id='n2864' class='stm run hide_run'><a href='#n2864'>2864</a></p>
<p id='n2865' class='pln'><a href='#n2865'>2865</a></p>
<p id='n2866' class='stm run hide_run'><a href='#n2866'>2866</a></p>
<p id='n2867' class='pln'><a href='#n2867'>2867</a></p>
<p id='n2868' class='pln'><a href='#n2868'>2868</a></p>
<p id='n2869' class='stm run hide_run'><a href='#n2869'>2869</a></p>
<p id='n2870' class='stm run hide_run'><a href='#n2870'>2870</a></p>
<p id='n2871' class='stm run hide_run'><a href='#n2871'>2871</a></p>
<p id='n2872' class='pln'><a href='#n2872'>2872</a></p>
<p id='n2873' class='stm run hide_run'><a href='#n2873'>2873</a></p>
<p id='n2874' class='stm mis'><a href='#n2874'>2874</a></p>
<p id='n2875' class='pln'><a href='#n2875'>2875</a></p>
<p id='n2876' class='stm run hide_run'><a href='#n2876'>2876</a></p>
<p id='n2877' class='pln'><a href='#n2877'>2877</a></p>
<p id='n2878' class='stm mis'><a href='#n2878'>2878</a></p>
<p id='n2879' class='pln'><a href='#n2879'>2879</a></p>
<p id='n2880' class='stm run hide_run'><a href='#n2880'>2880</a></p>
<p id='n2881' class='pln'><a href='#n2881'>2881</a></p>
<p id='n2882' class='stm mis'><a href='#n2882'>2882</a></p>
<p id='n2883' class='pln'><a href='#n2883'>2883</a></p>
<p id='n2884' class='stm run hide_run'><a href='#n2884'>2884</a></p>
<p id='n2885' class='pln'><a href='#n2885'>2885</a></p>
<p id='n2886' class='stm mis'><a href='#n2886'>2886</a></p>
<p id='n2887' class='stm mis'><a href='#n2887'>2887</a></p>
<p id='n2888' class='stm mis'><a href='#n2888'>2888</a></p>
<p id='n2889' class='stm mis'><a href='#n2889'>2889</a></p>
<p id='n2890' class='stm mis'><a href='#n2890'>2890</a></p>
<p id='n2891' class='pln'><a href='#n2891'>2891</a></p>
<p id='n2892' class='stm mis'><a href='#n2892'>2892</a></p>
<p id='n2893' class='stm mis'><a href='#n2893'>2893</a></p>
<p id='n2894' class='stm mis'><a href='#n2894'>2894</a></p>
<p id='n2895' class='stm mis'><a href='#n2895'>2895</a></p>
<p id='n2896' class='pln'><a href='#n2896'>2896</a></p>
<p id='n2897' class='stm run hide_run'><a href='#n2897'>2897</a></p>
<p id='n2898' class='pln'><a href='#n2898'>2898</a></p>
<p id='n2899' class='stm mis'><a href='#n2899'>2899</a></p>
<p id='n2900' class='stm mis'><a href='#n2900'>2900</a></p>
<p id='n2901' class='stm mis'><a href='#n2901'>2901</a></p>
<p id='n2902' class='stm mis'><a href='#n2902'>2902</a></p>
<p id='n2903' class='stm mis'><a href='#n2903'>2903</a></p>
<p id='n2904' class='stm mis'><a href='#n2904'>2904</a></p>
<p id='n2905' class='pln'><a href='#n2905'>2905</a></p>
<p id='n2906' class='stm mis'><a href='#n2906'>2906</a></p>
<p id='n2907' class='pln'><a href='#n2907'>2907</a></p>
<p id='n2908' class='stm run hide_run'><a href='#n2908'>2908</a></p>
<p id='n2909' class='stm mis'><a href='#n2909'>2909</a></p>
<p id='n2910' class='stm mis'><a href='#n2910'>2910</a></p>
<p id='n2911' class='stm mis'><a href='#n2911'>2911</a></p>
<p id='n2912' class='stm mis'><a href='#n2912'>2912</a></p>
<p id='n2913' class='stm mis'><a href='#n2913'>2913</a></p>
<p id='n2914' class='stm mis'><a href='#n2914'>2914</a></p>
<p id='n2915' class='stm mis'><a href='#n2915'>2915</a></p>
<p id='n2916' class='stm mis'><a href='#n2916'>2916</a></p>
<p id='n2917' class='stm mis'><a href='#n2917'>2917</a></p>
<p id='n2918' class='stm mis'><a href='#n2918'>2918</a></p>
<p id='n2919' class='pln'><a href='#n2919'>2919</a></p>
<p id='n2920' class='stm run hide_run'><a href='#n2920'>2920</a></p>
<p id='n2921' class='stm mis'><a href='#n2921'>2921</a></p>
<p id='n2922' class='stm mis'><a href='#n2922'>2922</a></p>
<p id='n2923' class='stm mis'><a href='#n2923'>2923</a></p>
<p id='n2924' class='stm mis'><a href='#n2924'>2924</a></p>
<p id='n2925' class='pln'><a href='#n2925'>2925</a></p>
<p id='n2926' class='stm mis'><a href='#n2926'>2926</a></p>
<p id='n2927' class='stm mis'><a href='#n2927'>2927</a></p>
<p id='n2928' class='pln'><a href='#n2928'>2928</a></p>
<p id='n2929' class='pln'><a href='#n2929'>2929</a></p>
<p id='n2930' class='stm mis'><a href='#n2930'>2930</a></p>
<p id='n2931' class='pln'><a href='#n2931'>2931</a></p>
<p id='n2932' class='stm mis'><a href='#n2932'>2932</a></p>
<p id='n2933' class='stm mis'><a href='#n2933'>2933</a></p>
<p id='n2934' class='stm mis'><a href='#n2934'>2934</a></p>
<p id='n2935' class='stm mis'><a href='#n2935'>2935</a></p>
<p id='n2936' class='stm mis'><a href='#n2936'>2936</a></p>
<p id='n2937' class='stm mis'><a href='#n2937'>2937</a></p>
<p id='n2938' class='stm mis'><a href='#n2938'>2938</a></p>
<p id='n2939' class='pln'><a href='#n2939'>2939</a></p>
<p id='n2940' class='pln'><a href='#n2940'>2940</a></p>
<p id='n2941' class='stm mis'><a href='#n2941'>2941</a></p>
<p id='n2942' class='stm mis'><a href='#n2942'>2942</a></p>
<p id='n2943' class='stm mis'><a href='#n2943'>2943</a></p>
<p id='n2944' class='pln'><a href='#n2944'>2944</a></p>
<p id='n2945' class='stm mis'><a href='#n2945'>2945</a></p>
<p id='n2946' class='stm mis'><a href='#n2946'>2946</a></p>
<p id='n2947' class='pln'><a href='#n2947'>2947</a></p>
<p id='n2948' class='stm mis'><a href='#n2948'>2948</a></p>
<p id='n2949' class='stm mis'><a href='#n2949'>2949</a></p>
<p id='n2950' class='stm mis'><a href='#n2950'>2950</a></p>
<p id='n2951' class='pln'><a href='#n2951'>2951</a></p>
<p id='n2952' class='stm mis'><a href='#n2952'>2952</a></p>
<p id='n2953' class='stm mis'><a href='#n2953'>2953</a></p>
<p id='n2954' class='stm mis'><a href='#n2954'>2954</a></p>
<p id='n2955' class='pln'><a href='#n2955'>2955</a></p>
<p id='n2956' class='stm mis'><a href='#n2956'>2956</a></p>
<p id='n2957' class='stm mis'><a href='#n2957'>2957</a></p>
<p id='n2958' class='stm mis'><a href='#n2958'>2958</a></p>
<p id='n2959' class='pln'><a href='#n2959'>2959</a></p>
<p id='n2960' class='stm mis'><a href='#n2960'>2960</a></p>
<p id='n2961' class='stm mis'><a href='#n2961'>2961</a></p>
<p id='n2962' class='stm mis'><a href='#n2962'>2962</a></p>
<p id='n2963' class='pln'><a href='#n2963'>2963</a></p>
<p id='n2964' class='stm mis'><a href='#n2964'>2964</a></p>
<p id='n2965' class='stm mis'><a href='#n2965'>2965</a></p>
<p id='n2966' class='stm mis'><a href='#n2966'>2966</a></p>
<p id='n2967' class='pln'><a href='#n2967'>2967</a></p>
<p id='n2968' class='stm mis'><a href='#n2968'>2968</a></p>
<p id='n2969' class='pln'><a href='#n2969'>2969</a></p>
<p id='n2970' class='pln'><a href='#n2970'>2970</a></p>
<p id='n2971' class='pln'><a href='#n2971'>2971</a></p>
<p id='n2972' class='pln'><a href='#n2972'>2972</a></p>
<p id='n2973' class='pln'><a href='#n2973'>2973</a></p>
<p id='n2974' class='pln'><a href='#n2974'>2974</a></p>
<p id='n2975' class='pln'><a href='#n2975'>2975</a></p>
<p id='n2976' class='pln'><a href='#n2976'>2976</a></p>
<p id='n2977' class='pln'><a href='#n2977'>2977</a></p>
<p id='n2978' class='pln'><a href='#n2978'>2978</a></p>
<p id='n2979' class='pln'><a href='#n2979'>2979</a></p>
<p id='n2980' class='pln'><a href='#n2980'>2980</a></p>
<p id='n2981' class='stm run hide_run'><a href='#n2981'>2981</a></p>
<p id='n2982' class='pln'><a href='#n2982'>2982</a></p>
<p id='n2983' class='pln'><a href='#n2983'>2983</a></p>
<p id='n2984' class='stm run hide_run'><a href='#n2984'>2984</a></p>
<p id='n2985' class='stm run hide_run'><a href='#n2985'>2985</a></p>
<p id='n2986' class='pln'><a href='#n2986'>2986</a></p>
<p id='n2987' class='stm run hide_run'><a href='#n2987'>2987</a></p>
<p id='n2988' class='pln'><a href='#n2988'>2988</a></p>
<p id='n2989' class='stm mis'><a href='#n2989'>2989</a></p>
<p id='n2990' class='pln'><a href='#n2990'>2990</a></p>
<p id='n2991' class='stm run hide_run'><a href='#n2991'>2991</a></p>
<p id='n2992' class='pln'><a href='#n2992'>2992</a></p>
<p id='n2993' class='stm run hide_run'><a href='#n2993'>2993</a></p>
<p id='n2994' class='pln'><a href='#n2994'>2994</a></p>
<p id='n2995' class='stm run hide_run'><a href='#n2995'>2995</a></p>
<p id='n2996' class='stm run hide_run'><a href='#n2996'>2996</a></p>
<p id='n2997' class='stm run hide_run'><a href='#n2997'>2997</a></p>
<p id='n2998' class='stm mis'><a href='#n2998'>2998</a></p>
<p id='n2999' class='stm mis'><a href='#n2999'>2999</a></p>
<p id='n3000' class='pln'><a href='#n3000'>3000</a></p>
<p id='n3001' class='stm run hide_run'><a href='#n3001'>3001</a></p>
<p id='n3002' class='stm run hide_run'><a href='#n3002'>3002</a></p>
<p id='n3003' class='stm run hide_run'><a href='#n3003'>3003</a></p>
<p id='n3004' class='stm run hide_run'><a href='#n3004'>3004</a></p>
<p id='n3005' class='pln'><a href='#n3005'>3005</a></p>
<p id='n3006' class='pln'><a href='#n3006'>3006</a></p>
<p id='n3007' class='pln'><a href='#n3007'>3007</a></p>
<p id='n3008' class='pln'><a href='#n3008'>3008</a></p>
<p id='n3009' class='pln'><a href='#n3009'>3009</a></p>
<p id='n3010' class='stm run hide_run'><a href='#n3010'>3010</a></p>
<p id='n3011' class='stm run hide_run'><a href='#n3011'>3011</a></p>
<p id='n3012' class='stm run hide_run'><a href='#n3012'>3012</a></p>
<p id='n3013' class='stm run hide_run'><a href='#n3013'>3013</a></p>
<p id='n3014' class='stm run hide_run'><a href='#n3014'>3014</a></p>
<p id='n3015' class='stm mis'><a href='#n3015'>3015</a></p>
<p id='n3016' class='stm mis'><a href='#n3016'>3016</a></p>
<p id='n3017' class='stm mis'><a href='#n3017'>3017</a></p>
<p id='n3018' class='stm run hide_run'><a href='#n3018'>3018</a></p>
<p id='n3019' class='stm run hide_run'><a href='#n3019'>3019</a></p>
<p id='n3020' class='stm run hide_run'><a href='#n3020'>3020</a></p>
<p id='n3021' class='stm run hide_run'><a href='#n3021'>3021</a></p>
<p id='n3022' class='stm mis'><a href='#n3022'>3022</a></p>
<p id='n3023' class='stm mis'><a href='#n3023'>3023</a></p>
<p id='n3024' class='stm mis'><a href='#n3024'>3024</a></p>
<p id='n3025' class='stm run hide_run'><a href='#n3025'>3025</a></p>
<p id='n3026' class='stm run hide_run'><a href='#n3026'>3026</a></p>
<p id='n3027' class='stm mis'><a href='#n3027'>3027</a></p>
<p id='n3028' class='stm mis'><a href='#n3028'>3028</a></p>
<p id='n3029' class='stm mis'><a href='#n3029'>3029</a></p>
<p id='n3030' class='pln'><a href='#n3030'>3030</a></p>
<p id='n3031' class='pln'><a href='#n3031'>3031</a></p>
<p id='n3032' class='pln'><a href='#n3032'>3032</a></p>
<p id='n3033' class='pln'><a href='#n3033'>3033</a></p>
<p id='n3034' class='pln'><a href='#n3034'>3034</a></p>
<p id='n3035' class='pln'><a href='#n3035'>3035</a></p>
<p id='n3036' class='stm mis'><a href='#n3036'>3036</a></p>
<p id='n3037' class='stm mis'><a href='#n3037'>3037</a></p>
<p id='n3038' class='stm mis'><a href='#n3038'>3038</a></p>
<p id='n3039' class='stm mis'><a href='#n3039'>3039</a></p>
<p id='n3040' class='stm mis'><a href='#n3040'>3040</a></p>
<p id='n3041' class='stm mis'><a href='#n3041'>3041</a></p>
<p id='n3042' class='pln'><a href='#n3042'>3042</a></p>
<p id='n3043' class='stm mis'><a href='#n3043'>3043</a></p>
<p id='n3044' class='stm mis'><a href='#n3044'>3044</a></p>
<p id='n3045' class='stm mis'><a href='#n3045'>3045</a></p>
<p id='n3046' class='pln'><a href='#n3046'>3046</a></p>
<p id='n3047' class='stm mis'><a href='#n3047'>3047</a></p>
<p id='n3048' class='pln'><a href='#n3048'>3048</a></p>
<p id='n3049' class='stm mis'><a href='#n3049'>3049</a></p>
<p id='n3050' class='stm mis'><a href='#n3050'>3050</a></p>
<p id='n3051' class='stm mis'><a href='#n3051'>3051</a></p>
<p id='n3052' class='pln'><a href='#n3052'>3052</a></p>
<p id='n3053' class='stm mis'><a href='#n3053'>3053</a></p>
<p id='n3054' class='stm mis'><a href='#n3054'>3054</a></p>
<p id='n3055' class='pln'><a href='#n3055'>3055</a></p>
<p id='n3056' class='pln'><a href='#n3056'>3056</a></p>
<p id='n3057' class='pln'><a href='#n3057'>3057</a></p>
<p id='n3058' class='pln'><a href='#n3058'>3058</a></p>
<p id='n3059' class='pln'><a href='#n3059'>3059</a></p>
<p id='n3060' class='stm mis'><a href='#n3060'>3060</a></p>
<p id='n3061' class='stm mis'><a href='#n3061'>3061</a></p>
<p id='n3062' class='stm mis'><a href='#n3062'>3062</a></p>
<p id='n3063' class='stm mis'><a href='#n3063'>3063</a></p>
<p id='n3064' class='stm mis'><a href='#n3064'>3064</a></p>
<p id='n3065' class='pln'><a href='#n3065'>3065</a></p>
<p id='n3066' class='pln'><a href='#n3066'>3066</a></p>
<p id='n3067' class='stm mis'><a href='#n3067'>3067</a></p>
<p id='n3068' class='pln'><a href='#n3068'>3068</a></p>
<p id='n3069' class='pln'><a href='#n3069'>3069</a></p>
<p id='n3070' class='pln'><a href='#n3070'>3070</a></p>
<p id='n3071' class='pln'><a href='#n3071'>3071</a></p>
<p id='n3072' class='pln'><a href='#n3072'>3072</a></p>
<p id='n3073' class='pln'><a href='#n3073'>3073</a></p>
<p id='n3074' class='stm mis'><a href='#n3074'>3074</a></p>
<p id='n3075' class='stm mis'><a href='#n3075'>3075</a></p>
<p id='n3076' class='stm mis'><a href='#n3076'>3076</a></p>
<p id='n3077' class='stm mis'><a href='#n3077'>3077</a></p>
<p id='n3078' class='stm mis'><a href='#n3078'>3078</a></p>
<p id='n3079' class='stm mis'><a href='#n3079'>3079</a></p>
<p id='n3080' class='stm mis'><a href='#n3080'>3080</a></p>
<p id='n3081' class='pln'><a href='#n3081'>3081</a></p>
<p id='n3082' class='stm mis'><a href='#n3082'>3082</a></p>
<p id='n3083' class='pln'><a href='#n3083'>3083</a></p>
<p id='n3084' class='stm mis'><a href='#n3084'>3084</a></p>
<p id='n3085' class='stm mis'><a href='#n3085'>3085</a></p>
<p id='n3086' class='pln'><a href='#n3086'>3086</a></p>
<p id='n3087' class='pln'><a href='#n3087'>3087</a></p>
<p id='n3088' class='pln'><a href='#n3088'>3088</a></p>
<p id='n3089' class='pln'><a href='#n3089'>3089</a></p>
<p id='n3090' class='pln'><a href='#n3090'>3090</a></p>
<p id='n3091' class='pln'><a href='#n3091'>3091</a></p>
<p id='n3092' class='stm mis'><a href='#n3092'>3092</a></p>
<p id='n3093' class='stm mis'><a href='#n3093'>3093</a></p>
<p id='n3094' class='stm mis'><a href='#n3094'>3094</a></p>
<p id='n3095' class='stm mis'><a href='#n3095'>3095</a></p>
<p id='n3096' class='stm mis'><a href='#n3096'>3096</a></p>
<p id='n3097' class='pln'><a href='#n3097'>3097</a></p>
<p id='n3098' class='stm run hide_run'><a href='#n3098'>3098</a></p>
<p id='n3099' class='pln'><a href='#n3099'>3099</a></p>
<p id='n3100' class='pln'><a href='#n3100'>3100</a></p>
<p id='n3101' class='stm run hide_run'><a href='#n3101'>3101</a></p>
<p id='n3102' class='stm run hide_run'><a href='#n3102'>3102</a></p>
<p id='n3103' class='pln'><a href='#n3103'>3103</a></p>
<p id='n3104' class='stm run hide_run'><a href='#n3104'>3104</a></p>
<p id='n3105' class='pln'><a href='#n3105'>3105</a></p>
<p id='n3106' class='stm mis'><a href='#n3106'>3106</a></p>
<p id='n3107' class='pln'><a href='#n3107'>3107</a></p>
<p id='n3108' class='stm run hide_run'><a href='#n3108'>3108</a></p>
<p id='n3109' class='stm mis'><a href='#n3109'>3109</a></p>
<p id='n3110' class='stm mis'><a href='#n3110'>3110</a></p>
<p id='n3111' class='stm mis'><a href='#n3111'>3111</a></p>
<p id='n3112' class='stm mis'><a href='#n3112'>3112</a></p>
<p id='n3113' class='stm mis'><a href='#n3113'>3113</a></p>
<p id='n3114' class='stm mis'><a href='#n3114'>3114</a></p>
<p id='n3115' class='stm mis'><a href='#n3115'>3115</a></p>
<p id='n3116' class='pln'><a href='#n3116'>3116</a></p>
<p id='n3117' class='stm mis'><a href='#n3117'>3117</a></p>
<p id='n3118' class='pln'><a href='#n3118'>3118</a></p>
<p id='n3119' class='stm mis'><a href='#n3119'>3119</a></p>
<p id='n3120' class='stm mis'><a href='#n3120'>3120</a></p>
<p id='n3121' class='stm mis'><a href='#n3121'>3121</a></p>
<p id='n3122' class='stm mis'><a href='#n3122'>3122</a></p>
<p id='n3123' class='stm mis'><a href='#n3123'>3123</a></p>
<p id='n3124' class='stm mis'><a href='#n3124'>3124</a></p>
<p id='n3125' class='stm mis'><a href='#n3125'>3125</a></p>
<p id='n3126' class='stm mis'><a href='#n3126'>3126</a></p>
<p id='n3127' class='stm mis'><a href='#n3127'>3127</a></p>
<p id='n3128' class='stm mis'><a href='#n3128'>3128</a></p>
<p id='n3129' class='stm mis'><a href='#n3129'>3129</a></p>
<p id='n3130' class='pln'><a href='#n3130'>3130</a></p>
<p id='n3131' class='stm mis'><a href='#n3131'>3131</a></p>
<p id='n3132' class='stm mis'><a href='#n3132'>3132</a></p>
<p id='n3133' class='stm mis'><a href='#n3133'>3133</a></p>
<p id='n3134' class='stm mis'><a href='#n3134'>3134</a></p>
<p id='n3135' class='stm mis'><a href='#n3135'>3135</a></p>
<p id='n3136' class='pln'><a href='#n3136'>3136</a></p>
<p id='n3137' class='stm mis'><a href='#n3137'>3137</a></p>
<p id='n3138' class='stm mis'><a href='#n3138'>3138</a></p>
<p id='n3139' class='stm mis'><a href='#n3139'>3139</a></p>
<p id='n3140' class='stm mis'><a href='#n3140'>3140</a></p>
<p id='n3141' class='stm mis'><a href='#n3141'>3141</a></p>
<p id='n3142' class='pln'><a href='#n3142'>3142</a></p>
<p id='n3143' class='stm mis'><a href='#n3143'>3143</a></p>
<p id='n3144' class='stm mis'><a href='#n3144'>3144</a></p>
<p id='n3145' class='stm mis'><a href='#n3145'>3145</a></p>
<p id='n3146' class='stm mis'><a href='#n3146'>3146</a></p>
<p id='n3147' class='stm mis'><a href='#n3147'>3147</a></p>
<p id='n3148' class='stm mis'><a href='#n3148'>3148</a></p>
<p id='n3149' class='stm mis'><a href='#n3149'>3149</a></p>
<p id='n3150' class='stm mis'><a href='#n3150'>3150</a></p>
<p id='n3151' class='pln'><a href='#n3151'>3151</a></p>
<p id='n3152' class='stm mis'><a href='#n3152'>3152</a></p>
<p id='n3153' class='stm mis'><a href='#n3153'>3153</a></p>
<p id='n3154' class='pln'><a href='#n3154'>3154</a></p>
<p id='n3155' class='pln'><a href='#n3155'>3155</a></p>
<p id='n3156' class='stm mis'><a href='#n3156'>3156</a></p>
<p id='n3157' class='pln'><a href='#n3157'>3157</a></p>
<p id='n3158' class='stm mis'><a href='#n3158'>3158</a></p>
<p id='n3159' class='stm mis'><a href='#n3159'>3159</a></p>
<p id='n3160' class='stm mis'><a href='#n3160'>3160</a></p>
<p id='n3161' class='stm mis'><a href='#n3161'>3161</a></p>
<p id='n3162' class='stm mis'><a href='#n3162'>3162</a></p>
<p id='n3163' class='stm mis'><a href='#n3163'>3163</a></p>
<p id='n3164' class='stm mis'><a href='#n3164'>3164</a></p>
<p id='n3165' class='pln'><a href='#n3165'>3165</a></p>
<p id='n3166' class='stm mis'><a href='#n3166'>3166</a></p>
<p id='n3167' class='pln'><a href='#n3167'>3167</a></p>
<p id='n3168' class='pln'><a href='#n3168'>3168</a></p>
<p id='n3169' class='pln'><a href='#n3169'>3169</a></p>
<p id='n3170' class='pln'><a href='#n3170'>3170</a></p>
<p id='n3171' class='pln'><a href='#n3171'>3171</a></p>
<p id='n3172' class='pln'><a href='#n3172'>3172</a></p>
<p id='n3173' class='pln'><a href='#n3173'>3173</a></p>
<p id='n3174' class='pln'><a href='#n3174'>3174</a></p>
<p id='n3175' class='pln'><a href='#n3175'>3175</a></p>
<p id='n3176' class='stm mis'><a href='#n3176'>3176</a></p>
<p id='n3177' class='pln'><a href='#n3177'>3177</a></p>
<p id='n3178' class='pln'><a href='#n3178'>3178</a></p>
<p id='n3179' class='stm run hide_run'><a href='#n3179'>3179</a></p>
<p id='n3180' class='stm run hide_run'><a href='#n3180'>3180</a></p>
<p id='n3181' class='pln'><a href='#n3181'>3181</a></p>
<p id='n3182' class='stm run hide_run'><a href='#n3182'>3182</a></p>
<p id='n3183' class='pln'><a href='#n3183'>3183</a></p>
<p id='n3184' class='stm run hide_run'><a href='#n3184'>3184</a></p>
<p id='n3185' class='pln'><a href='#n3185'>3185</a></p>
<p id='n3186' class='stm run hide_run'><a href='#n3186'>3186</a></p>
<p id='n3187' class='pln'><a href='#n3187'>3187</a></p>
<p id='n3188' class='stm run hide_run'><a href='#n3188'>3188</a></p>
<p id='n3189' class='pln'><a href='#n3189'>3189</a></p>
<p id='n3190' class='stm run hide_run'><a href='#n3190'>3190</a></p>
<p id='n3191' class='stm run hide_run'><a href='#n3191'>3191</a></p>
<p id='n3192' class='stm run hide_run'><a href='#n3192'>3192</a></p>
<p id='n3193' class='stm run hide_run'><a href='#n3193'>3193</a></p>
<p id='n3194' class='pln'><a href='#n3194'>3194</a></p>
<p id='n3195' class='stm run hide_run'><a href='#n3195'>3195</a></p>
<p id='n3196' class='pln'><a href='#n3196'>3196</a></p>
<p id='n3197' class='stm run hide_run'><a href='#n3197'>3197</a></p>
<p id='n3198' class='stm run hide_run'><a href='#n3198'>3198</a></p>
<p id='n3199' class='stm run hide_run'><a href='#n3199'>3199</a></p>
<p id='n3200' class='stm run hide_run'><a href='#n3200'>3200</a></p>
<p id='n3201' class='stm run hide_run'><a href='#n3201'>3201</a></p>
<p id='n3202' class='stm run hide_run'><a href='#n3202'>3202</a></p>
<p id='n3203' class='stm run hide_run'><a href='#n3203'>3203</a></p>
<p id='n3204' class='stm run hide_run'><a href='#n3204'>3204</a></p>
<p id='n3205' class='stm run hide_run'><a href='#n3205'>3205</a></p>
<p id='n3206' class='pln'><a href='#n3206'>3206</a></p>
<p id='n3207' class='stm run hide_run'><a href='#n3207'>3207</a></p>
<p id='n3208' class='pln'><a href='#n3208'>3208</a></p>
<p id='n3209' class='stm run hide_run'><a href='#n3209'>3209</a></p>
<p id='n3210' class='stm run hide_run'><a href='#n3210'>3210</a></p>
<p id='n3211' class='stm run hide_run'><a href='#n3211'>3211</a></p>
<p id='n3212' class='stm run hide_run'><a href='#n3212'>3212</a></p>
<p id='n3213' class='stm run hide_run'><a href='#n3213'>3213</a></p>
<p id='n3214' class='stm run hide_run'><a href='#n3214'>3214</a></p>
<p id='n3215' class='stm run hide_run'><a href='#n3215'>3215</a></p>
<p id='n3216' class='stm run hide_run'><a href='#n3216'>3216</a></p>
<p id='n3217' class='pln'><a href='#n3217'>3217</a></p>
<p id='n3218' class='stm run hide_run'><a href='#n3218'>3218</a></p>
<p id='n3219' class='stm run hide_run'><a href='#n3219'>3219</a></p>
<p id='n3220' class='stm run hide_run'><a href='#n3220'>3220</a></p>
<p id='n3221' class='stm mis'><a href='#n3221'>3221</a></p>
<p id='n3222' class='stm mis'><a href='#n3222'>3222</a></p>
<p id='n3223' class='stm run hide_run'><a href='#n3223'>3223</a></p>
<p id='n3224' class='pln'><a href='#n3224'>3224</a></p>
<p id='n3225' class='stm run hide_run'><a href='#n3225'>3225</a></p>
<p id='n3226' class='pln'><a href='#n3226'>3226</a></p>
<p id='n3227' class='stm run hide_run'><a href='#n3227'>3227</a></p>
<p id='n3228' class='stm run hide_run'><a href='#n3228'>3228</a></p>
<p id='n3229' class='stm run hide_run'><a href='#n3229'>3229</a></p>
<p id='n3230' class='stm run hide_run'><a href='#n3230'>3230</a></p>
<p id='n3231' class='stm mis'><a href='#n3231'>3231</a></p>
<p id='n3232' class='stm mis'><a href='#n3232'>3232</a></p>
<p id='n3233' class='stm mis'><a href='#n3233'>3233</a></p>
<p id='n3234' class='pln'><a href='#n3234'>3234</a></p>
<p id='n3235' class='stm run hide_run'><a href='#n3235'>3235</a></p>
<p id='n3236' class='stm run hide_run'><a href='#n3236'>3236</a></p>
<p id='n3237' class='stm run hide_run'><a href='#n3237'>3237</a></p>
<p id='n3238' class='stm run hide_run'><a href='#n3238'>3238</a></p>
<p id='n3239' class='pln'><a href='#n3239'>3239</a></p>
<p id='n3240' class='stm run hide_run'><a href='#n3240'>3240</a></p>
<p id='n3241' class='stm run hide_run'><a href='#n3241'>3241</a></p>
<p id='n3242' class='pln'><a href='#n3242'>3242</a></p>
<p id='n3243' class='stm run hide_run'><a href='#n3243'>3243</a></p>
<p id='n3244' class='stm run hide_run'><a href='#n3244'>3244</a></p>
<p id='n3245' class='pln'><a href='#n3245'>3245</a></p>
<p id='n3246' class='stm run hide_run'><a href='#n3246'>3246</a></p>
<p id='n3247' class='stm run hide_run'><a href='#n3247'>3247</a></p>
<p id='n3248' class='stm mis'><a href='#n3248'>3248</a></p>
<p id='n3249' class='pln'><a href='#n3249'>3249</a></p>
<p id='n3250' class='stm run hide_run'><a href='#n3250'>3250</a></p>
<p id='n3251' class='stm run hide_run'><a href='#n3251'>3251</a></p>
<p id='n3252' class='stm mis'><a href='#n3252'>3252</a></p>
<p id='n3253' class='stm mis'><a href='#n3253'>3253</a></p>
<p id='n3254' class='stm mis'><a href='#n3254'>3254</a></p>
<p id='n3255' class='pln'><a href='#n3255'>3255</a></p>
<p id='n3256' class='stm mis'><a href='#n3256'>3256</a></p>
<p id='n3257' class='stm mis'><a href='#n3257'>3257</a></p>
<p id='n3258' class='pln'><a href='#n3258'>3258</a></p>
<p id='n3259' class='pln'><a href='#n3259'>3259</a></p>
<p id='n3260' class='stm run hide_run'><a href='#n3260'>3260</a></p>
<p id='n3261' class='stm run hide_run'><a href='#n3261'>3261</a></p>
<p id='n3262' class='stm mis'><a href='#n3262'>3262</a></p>
<p id='n3263' class='stm mis'><a href='#n3263'>3263</a></p>
<p id='n3264' class='stm mis'><a href='#n3264'>3264</a></p>
<p id='n3265' class='pln'><a href='#n3265'>3265</a></p>
<p id='n3266' class='stm run hide_run'><a href='#n3266'>3266</a></p>
<p id='n3267' class='stm run hide_run'><a href='#n3267'>3267</a></p>
<p id='n3268' class='stm run hide_run'><a href='#n3268'>3268</a></p>
<p id='n3269' class='pln'><a href='#n3269'>3269</a></p>
<p id='n3270' class='pln'><a href='#n3270'>3270</a></p>
<p id='n3271' class='pln'><a href='#n3271'>3271</a></p>
<p id='n3272' class='stm run hide_run'><a href='#n3272'>3272</a></p>
<p id='n3273' class='pln'><a href='#n3273'>3273</a></p>
<p id='n3274' class='stm run hide_run'><a href='#n3274'>3274</a></p>
<p id='n3275' class='stm run hide_run'><a href='#n3275'>3275</a></p>
<p id='n3276' class='pln'><a href='#n3276'>3276</a></p>
<p id='n3277' class='stm run hide_run'><a href='#n3277'>3277</a></p>
<p id='n3278' class='pln'><a href='#n3278'>3278</a></p>
<p id='n3279' class='pln'><a href='#n3279'>3279</a></p>
<p id='n3280' class='pln'><a href='#n3280'>3280</a></p>
<p id='n3281' class='pln'><a href='#n3281'>3281</a></p>
<p id='n3282' class='pln'><a href='#n3282'>3282</a></p>
<p id='n3283' class='pln'><a href='#n3283'>3283</a></p>
<p id='n3284' class='pln'><a href='#n3284'>3284</a></p>
<p id='n3285' class='stm run hide_run'><a href='#n3285'>3285</a></p>
<p id='n3286' class='pln'><a href='#n3286'>3286</a></p>
<p id='n3287' class='stm run hide_run'><a href='#n3287'>3287</a></p>
<p id='n3288' class='pln'><a href='#n3288'>3288</a></p>
<p id='n3289' class='pln'><a href='#n3289'>3289</a></p>
<p id='n3290' class='stm run hide_run'><a href='#n3290'>3290</a></p>
<p id='n3291' class='pln'><a href='#n3291'>3291</a></p>
<p id='n3292' class='pln'><a href='#n3292'>3292</a></p>
<p id='n3293' class='stm run hide_run'><a href='#n3293'>3293</a></p>
<p id='n3294' class='stm run hide_run'><a href='#n3294'>3294</a></p>
<p id='n3295' class='stm run hide_run'><a href='#n3295'>3295</a></p>
<p id='n3296' class='stm run hide_run'><a href='#n3296'>3296</a></p>
<p id='n3297' class='stm run hide_run'><a href='#n3297'>3297</a></p>
<p id='n3298' class='pln'><a href='#n3298'>3298</a></p>
<p id='n3299' class='stm run hide_run'><a href='#n3299'>3299</a></p>
<p id='n3300' class='pln'><a href='#n3300'>3300</a></p>
<p id='n3301' class='stm run hide_run'><a href='#n3301'>3301</a></p>
<p id='n3302' class='pln'><a href='#n3302'>3302</a></p>
<p id='n3303' class='stm run hide_run'><a href='#n3303'>3303</a></p>
<p id='n3304' class='pln'><a href='#n3304'>3304</a></p>
<p id='n3305' class='stm mis'><a href='#n3305'>3305</a></p>
<p id='n3306' class='pln'><a href='#n3306'>3306</a></p>
<p id='n3307' class='stm run hide_run'><a href='#n3307'>3307</a></p>
<p id='n3308' class='stm run hide_run'><a href='#n3308'>3308</a></p>
<p id='n3309' class='stm run hide_run'><a href='#n3309'>3309</a></p>
<p id='n3310' class='stm mis'><a href='#n3310'>3310</a></p>
<p id='n3311' class='stm mis'><a href='#n3311'>3311</a></p>
<p id='n3312' class='stm run hide_run'><a href='#n3312'>3312</a></p>
<p id='n3313' class='pln'><a href='#n3313'>3313</a></p>
<p id='n3314' class='stm run hide_run'><a href='#n3314'>3314</a></p>
<p id='n3315' class='pln'><a href='#n3315'>3315</a></p>
<p id='n3316' class='pln'><a href='#n3316'>3316</a></p>
<p id='n3317' class='stm run hide_run'><a href='#n3317'>3317</a></p>
<p id='n3318' class='stm run hide_run'><a href='#n3318'>3318</a></p>
<p id='n3319' class='stm run hide_run'><a href='#n3319'>3319</a></p>
<p id='n3320' class='stm mis'><a href='#n3320'>3320</a></p>
<p id='n3321' class='stm mis'><a href='#n3321'>3321</a></p>
<p id='n3322' class='stm mis'><a href='#n3322'>3322</a></p>
<p id='n3323' class='pln'><a href='#n3323'>3323</a></p>
<p id='n3324' class='stm run hide_run'><a href='#n3324'>3324</a></p>
<p id='n3325' class='stm run hide_run'><a href='#n3325'>3325</a></p>
<p id='n3326' class='stm mis'><a href='#n3326'>3326</a></p>
<p id='n3327' class='stm mis'><a href='#n3327'>3327</a></p>
<p id='n3328' class='stm run hide_run'><a href='#n3328'>3328</a></p>
<p id='n3329' class='pln'><a href='#n3329'>3329</a></p>
<p id='n3330' class='stm run hide_run'><a href='#n3330'>3330</a></p>
<p id='n3331' class='stm run hide_run'><a href='#n3331'>3331</a></p>
<p id='n3332' class='stm mis'><a href='#n3332'>3332</a></p>
<p id='n3333' class='stm mis'><a href='#n3333'>3333</a></p>
<p id='n3334' class='stm run hide_run'><a href='#n3334'>3334</a></p>
<p id='n3335' class='pln'><a href='#n3335'>3335</a></p>
<p id='n3336' class='stm run hide_run'><a href='#n3336'>3336</a></p>
<p id='n3337' class='stm run hide_run'><a href='#n3337'>3337</a></p>
<p id='n3338' class='stm mis'><a href='#n3338'>3338</a></p>
<p id='n3339' class='stm mis'><a href='#n3339'>3339</a></p>
<p id='n3340' class='stm run hide_run'><a href='#n3340'>3340</a></p>
<p id='n3341' class='pln'><a href='#n3341'>3341</a></p>
<p id='n3342' class='stm run hide_run'><a href='#n3342'>3342</a></p>
<p id='n3343' class='pln'><a href='#n3343'>3343</a></p>
<p id='n3344' class='pln'><a href='#n3344'>3344</a></p>
<p id='n3345' class='pln'><a href='#n3345'>3345</a></p>
<p id='n3346' class='pln'><a href='#n3346'>3346</a></p>
<p id='n3347' class='pln'><a href='#n3347'>3347</a></p>
<p id='n3348' class='pln'><a href='#n3348'>3348</a></p>
<p id='n3349' class='pln'><a href='#n3349'>3349</a></p>
<p id='n3350' class='pln'><a href='#n3350'>3350</a></p>
<p id='n3351' class='pln'><a href='#n3351'>3351</a></p>
<p id='n3352' class='pln'><a href='#n3352'>3352</a></p>
<p id='n3353' class='pln'><a href='#n3353'>3353</a></p>
<p id='n3354' class='stm run hide_run'><a href='#n3354'>3354</a></p>
<p id='n3355' class='pln'><a href='#n3355'>3355</a></p>
<p id='n3356' class='pln'><a href='#n3356'>3356</a></p>
<p id='n3357' class='stm run hide_run'><a href='#n3357'>3357</a></p>
<p id='n3358' class='stm run hide_run'><a href='#n3358'>3358</a></p>
<p id='n3359' class='pln'><a href='#n3359'>3359</a></p>
<p id='n3360' class='stm run hide_run'><a href='#n3360'>3360</a></p>
<p id='n3361' class='stm run hide_run'><a href='#n3361'>3361</a></p>
<p id='n3362' class='pln'><a href='#n3362'>3362</a></p>
<p id='n3363' class='stm run hide_run'><a href='#n3363'>3363</a></p>
<p id='n3364' class='pln'><a href='#n3364'>3364</a></p>
<p id='n3365' class='stm run hide_run'><a href='#n3365'>3365</a></p>
<p id='n3366' class='pln'><a href='#n3366'>3366</a></p>
<p id='n3367' class='stm run hide_run'><a href='#n3367'>3367</a></p>
<p id='n3368' class='pln'><a href='#n3368'>3368</a></p>
<p id='n3369' class='stm run hide_run'><a href='#n3369'>3369</a></p>
<p id='n3370' class='pln'><a href='#n3370'>3370</a></p>
<p id='n3371' class='stm run hide_run'><a href='#n3371'>3371</a></p>
<p id='n3372' class='pln'><a href='#n3372'>3372</a></p>
<p id='n3373' class='stm run hide_run'><a href='#n3373'>3373</a></p>
<p id='n3374' class='pln'><a href='#n3374'>3374</a></p>
<p id='n3375' class='stm run hide_run'><a href='#n3375'>3375</a></p>
<p id='n3376' class='pln'><a href='#n3376'>3376</a></p>
<p id='n3377' class='stm run hide_run'><a href='#n3377'>3377</a></p>
<p id='n3378' class='pln'><a href='#n3378'>3378</a></p>
<p id='n3379' class='stm run hide_run'><a href='#n3379'>3379</a></p>
<p id='n3380' class='pln'><a href='#n3380'>3380</a></p>
<p id='n3381' class='stm run hide_run'><a href='#n3381'>3381</a></p>
<p id='n3382' class='pln'><a href='#n3382'>3382</a></p>
<p id='n3383' class='stm run hide_run'><a href='#n3383'>3383</a></p>
<p id='n3384' class='pln'><a href='#n3384'>3384</a></p>
<p id='n3385' class='stm run hide_run'><a href='#n3385'>3385</a></p>
<p id='n3386' class='stm run hide_run'><a href='#n3386'>3386</a></p>
<p id='n3387' class='stm mis'><a href='#n3387'>3387</a></p>
<p id='n3388' class='stm mis'><a href='#n3388'>3388</a></p>
<p id='n3389' class='pln'><a href='#n3389'>3389</a></p>
<p id='n3390' class='stm run hide_run'><a href='#n3390'>3390</a></p>
<p id='n3391' class='stm run hide_run'><a href='#n3391'>3391</a></p>
<p id='n3392' class='pln'><a href='#n3392'>3392</a></p>
<p id='n3393' class='stm run hide_run'><a href='#n3393'>3393</a></p>
<p id='n3394' class='pln'><a href='#n3394'>3394</a></p>
<p id='n3395' class='pln'><a href='#n3395'>3395</a></p>
<p id='n3396' class='stm run hide_run'><a href='#n3396'>3396</a></p>
<p id='n3397' class='stm run hide_run'><a href='#n3397'>3397</a></p>
<p id='n3398' class='stm run hide_run'><a href='#n3398'>3398</a></p>
<p id='n3399' class='stm run hide_run'><a href='#n3399'>3399</a></p>
<p id='n3400' class='stm mis'><a href='#n3400'>3400</a></p>
<p id='n3401' class='stm mis'><a href='#n3401'>3401</a></p>
<p id='n3402' class='stm mis'><a href='#n3402'>3402</a></p>
<p id='n3403' class='pln'><a href='#n3403'>3403</a></p>
<p id='n3404' class='pln'><a href='#n3404'>3404</a></p>
<p id='n3405' class='stm run hide_run'><a href='#n3405'>3405</a></p>
<p id='n3406' class='stm run hide_run'><a href='#n3406'>3406</a></p>
<p id='n3407' class='stm run hide_run'><a href='#n3407'>3407</a></p>
<p id='n3408' class='stm run hide_run'><a href='#n3408'>3408</a></p>
<p id='n3409' class='stm run hide_run'><a href='#n3409'>3409</a></p>
<p id='n3410' class='pln'><a href='#n3410'>3410</a></p>
<p id='n3411' class='stm run hide_run'><a href='#n3411'>3411</a></p>
<p id='n3412' class='stm run hide_run'><a href='#n3412'>3412</a></p>
<p id='n3413' class='stm run hide_run'><a href='#n3413'>3413</a></p>
<p id='n3414' class='pln'><a href='#n3414'>3414</a></p>
<p id='n3415' class='pln'><a href='#n3415'>3415</a></p>
<p id='n3416' class='stm run hide_run'><a href='#n3416'>3416</a></p>
<p id='n3417' class='stm run hide_run'><a href='#n3417'>3417</a></p>
<p id='n3418' class='stm run hide_run'><a href='#n3418'>3418</a></p>
<p id='n3419' class='stm run hide_run'><a href='#n3419'>3419</a></p>
<p id='n3420' class='stm run hide_run'><a href='#n3420'>3420</a></p>
<p id='n3421' class='stm run hide_run'><a href='#n3421'>3421</a></p>
<p id='n3422' class='pln'><a href='#n3422'>3422</a></p>
<p id='n3423' class='pln'><a href='#n3423'>3423</a></p>
<p id='n3424' class='pln'><a href='#n3424'>3424</a></p>
<p id='n3425' class='stm run hide_run'><a href='#n3425'>3425</a></p>
<p id='n3426' class='stm run hide_run'><a href='#n3426'>3426</a></p>
<p id='n3427' class='stm run hide_run'><a href='#n3427'>3427</a></p>
<p id='n3428' class='stm run hide_run'><a href='#n3428'>3428</a></p>
<p id='n3429' class='stm run hide_run'><a href='#n3429'>3429</a></p>
<p id='n3430' class='stm run hide_run'><a href='#n3430'>3430</a></p>
<p id='n3431' class='pln'><a href='#n3431'>3431</a></p>
<p id='n3432' class='pln'><a href='#n3432'>3432</a></p>
<p id='n3433' class='stm run hide_run'><a href='#n3433'>3433</a></p>
<p id='n3434' class='stm run hide_run'><a href='#n3434'>3434</a></p>
<p id='n3435' class='stm run hide_run'><a href='#n3435'>3435</a></p>
<p id='n3436' class='stm mis'><a href='#n3436'>3436</a></p>
<p id='n3437' class='pln'><a href='#n3437'>3437</a></p>
<p id='n3438' class='stm run hide_run'><a href='#n3438'>3438</a></p>
<p id='n3439' class='stm run hide_run'><a href='#n3439'>3439</a></p>
<p id='n3440' class='stm run hide_run'><a href='#n3440'>3440</a></p>
<p id='n3441' class='stm run hide_run'><a href='#n3441'>3441</a></p>
<p id='n3442' class='stm mis'><a href='#n3442'>3442</a></p>
<p id='n3443' class='stm mis'><a href='#n3443'>3443</a></p>
<p id='n3444' class='stm mis'><a href='#n3444'>3444</a></p>
<p id='n3445' class='stm run hide_run'><a href='#n3445'>3445</a></p>
<p id='n3446' class='pln'><a href='#n3446'>3446</a></p>
<p id='n3447' class='pln'><a href='#n3447'>3447</a></p>
<p id='n3448' class='pln'><a href='#n3448'>3448</a></p>
<p id='n3449' class='pln'><a href='#n3449'>3449</a></p>
<p id='n3450' class='stm run hide_run'><a href='#n3450'>3450</a></p>
<p id='n3451' class='stm run hide_run'><a href='#n3451'>3451</a></p>
<p id='n3452' class='stm run hide_run'><a href='#n3452'>3452</a></p>
<p id='n3453' class='stm mis'><a href='#n3453'>3453</a></p>
<p id='n3454' class='pln'><a href='#n3454'>3454</a></p>
<p id='n3455' class='pln'><a href='#n3455'>3455</a></p>
<p id='n3456' class='stm run hide_run'><a href='#n3456'>3456</a></p>
<p id='n3457' class='pln'><a href='#n3457'>3457</a></p>
<p id='n3458' class='pln'><a href='#n3458'>3458</a></p>
<p id='n3459' class='stm run hide_run'><a href='#n3459'>3459</a></p>
<p id='n3460' class='pln'><a href='#n3460'>3460</a></p>
<p id='n3461' class='stm run hide_run'><a href='#n3461'>3461</a></p>
<p id='n3462' class='pln'><a href='#n3462'>3462</a></p>
<p id='n3463' class='stm run hide_run'><a href='#n3463'>3463</a></p>
<p id='n3464' class='stm run hide_run'><a href='#n3464'>3464</a></p>
<p id='n3465' class='stm mis'><a href='#n3465'>3465</a></p>
<p id='n3466' class='stm mis'><a href='#n3466'>3466</a></p>
<p id='n3467' class='pln'><a href='#n3467'>3467</a></p>
<p id='n3468' class='pln'><a href='#n3468'>3468</a></p>
<p id='n3469' class='stm run hide_run'><a href='#n3469'>3469</a></p>
<p id='n3470' class='pln'><a href='#n3470'>3470</a></p>
<p id='n3471' class='pln'><a href='#n3471'>3471</a></p>
<p id='n3472' class='pln'><a href='#n3472'>3472</a></p>
<p id='n3473' class='pln'><a href='#n3473'>3473</a></p>
<p id='n3474' class='pln'><a href='#n3474'>3474</a></p>
<p id='n3475' class='pln'><a href='#n3475'>3475</a></p>
<p id='n3476' class='pln'><a href='#n3476'>3476</a></p>
<p id='n3477' class='pln'><a href='#n3477'>3477</a></p>
<p id='n3478' class='stm run hide_run'><a href='#n3478'>3478</a></p>
<p id='n3479' class='stm run hide_run'><a href='#n3479'>3479</a></p>
<p id='n3480' class='stm run hide_run'><a href='#n3480'>3480</a></p>
<p id='n3481' class='pln'><a href='#n3481'>3481</a></p>
<p id='n3482' class='stm run hide_run'><a href='#n3482'>3482</a></p>
<p id='n3483' class='stm run hide_run'><a href='#n3483'>3483</a></p>
<p id='n3484' class='stm run hide_run'><a href='#n3484'>3484</a></p>
<p id='n3485' class='stm mis'><a href='#n3485'>3485</a></p>
<p id='n3486' class='stm mis'><a href='#n3486'>3486</a></p>
<p id='n3487' class='pln'><a href='#n3487'>3487</a></p>
<p id='n3488' class='stm run hide_run'><a href='#n3488'>3488</a></p>
<p id='n3489' class='stm run hide_run'><a href='#n3489'>3489</a></p>
<p id='n3490' class='stm run hide_run'><a href='#n3490'>3490</a></p>
<p id='n3491' class='pln'><a href='#n3491'>3491</a></p>
<p id='n3492' class='stm run hide_run'><a href='#n3492'>3492</a></p>
<p id='n3493' class='pln'><a href='#n3493'>3493</a></p>
<p id='n3494' class='stm run hide_run'><a href='#n3494'>3494</a></p>
<p id='n3495' class='stm run hide_run'><a href='#n3495'>3495</a></p>
<p id='n3496' class='stm run hide_run'><a href='#n3496'>3496</a></p>
<p id='n3497' class='stm run hide_run'><a href='#n3497'>3497</a></p>
<p id='n3498' class='stm run hide_run'><a href='#n3498'>3498</a></p>
<p id='n3499' class='pln'><a href='#n3499'>3499</a></p>
<p id='n3500' class='stm run hide_run'><a href='#n3500'>3500</a></p>
<p id='n3501' class='pln'><a href='#n3501'>3501</a></p>
<p id='n3502' class='stm run hide_run'><a href='#n3502'>3502</a></p>
<p id='n3503' class='stm run hide_run'><a href='#n3503'>3503</a></p>
<p id='n3504' class='stm run hide_run'><a href='#n3504'>3504</a></p>
<p id='n3505' class='pln'><a href='#n3505'>3505</a></p>
<p id='n3506' class='pln'><a href='#n3506'>3506</a></p>
<p id='n3507' class='pln'><a href='#n3507'>3507</a></p>
<p id='n3508' class='pln'><a href='#n3508'>3508</a></p>
<p id='n3509' class='pln'><a href='#n3509'>3509</a></p>
<p id='n3510' class='pln'><a href='#n3510'>3510</a></p>
<p id='n3511' class='pln'><a href='#n3511'>3511</a></p>
<p id='n3512' class='stm run hide_run'><a href='#n3512'>3512</a></p>
<p id='n3513' class='pln'><a href='#n3513'>3513</a></p>
<p id='n3514' class='stm run hide_run'><a href='#n3514'>3514</a></p>
<p id='n3515' class='pln'><a href='#n3515'>3515</a></p>
<p id='n3516' class='pln'><a href='#n3516'>3516</a></p>
<p id='n3517' class='pln'><a href='#n3517'>3517</a></p>
<p id='n3518' class='pln'><a href='#n3518'>3518</a></p>
<p id='n3519' class='pln'><a href='#n3519'>3519</a></p>
<p id='n3520' class='stm run hide_run'><a href='#n3520'>3520</a></p>
<p id='n3521' class='pln'><a href='#n3521'>3521</a></p>
<p id='n3522' class='stm run hide_run'><a href='#n3522'>3522</a></p>
<p id='n3523' class='stm run hide_run'><a href='#n3523'>3523</a></p>
<p id='n3524' class='pln'><a href='#n3524'>3524</a></p>
<p id='n3525' class='stm run hide_run'><a href='#n3525'>3525</a></p>
<p id='n3526' class='pln'><a href='#n3526'>3526</a></p>
<p id='n3527' class='stm run hide_run'><a href='#n3527'>3527</a></p>
<p id='n3528' class='pln'><a href='#n3528'>3528</a></p>
<p id='n3529' class='stm run hide_run'><a href='#n3529'>3529</a></p>
<p id='n3530' class='pln'><a href='#n3530'>3530</a></p>
<p id='n3531' class='stm mis'><a href='#n3531'>3531</a></p>
<p id='n3532' class='pln'><a href='#n3532'>3532</a></p>
<p id='n3533' class='pln'><a href='#n3533'>3533</a></p>
<p id='n3534' class='pln'><a href='#n3534'>3534</a></p>
<p id='n3535' class='stm run hide_run'><a href='#n3535'>3535</a></p>
<p id='n3536' class='stm run hide_run'><a href='#n3536'>3536</a></p>
<p id='n3537' class='stm run hide_run'><a href='#n3537'>3537</a></p>
<p id='n3538' class='stm run hide_run'><a href='#n3538'>3538</a></p>
<p id='n3539' class='stm run hide_run'><a href='#n3539'>3539</a></p>
<p id='n3540' class='stm mis'><a href='#n3540'>3540</a></p>
<p id='n3541' class='stm mis'><a href='#n3541'>3541</a></p>
<p id='n3542' class='stm mis'><a href='#n3542'>3542</a></p>
<p id='n3543' class='pln'><a href='#n3543'>3543</a></p>
<p id='n3544' class='stm run hide_run'><a href='#n3544'>3544</a></p>
<p id='n3545' class='stm run hide_run'><a href='#n3545'>3545</a></p>
<p id='n3546' class='stm run hide_run'><a href='#n3546'>3546</a></p>
<p id='n3547' class='stm run hide_run'><a href='#n3547'>3547</a></p>
<p id='n3548' class='stm run hide_run'><a href='#n3548'>3548</a></p>
<p id='n3549' class='stm run hide_run'><a href='#n3549'>3549</a></p>
<p id='n3550' class='stm run hide_run'><a href='#n3550'>3550</a></p>
<p id='n3551' class='stm run hide_run'><a href='#n3551'>3551</a></p>
<p id='n3552' class='pln'><a href='#n3552'>3552</a></p>
<p id='n3553' class='pln'><a href='#n3553'>3553</a></p>
<p id='n3554' class='pln'><a href='#n3554'>3554</a></p>
<p id='n3555' class='pln'><a href='#n3555'>3555</a></p>
<p id='n3556' class='pln'><a href='#n3556'>3556</a></p>
<p id='n3557' class='pln'><a href='#n3557'>3557</a></p>
<p id='n3558' class='pln'><a href='#n3558'>3558</a></p>
<p id='n3559' class='stm run hide_run'><a href='#n3559'>3559</a></p>
<p id='n3560' class='pln'><a href='#n3560'>3560</a></p>
<p id='n3561' class='stm run hide_run'><a href='#n3561'>3561</a></p>
<p id='n3562' class='stm run hide_run'><a href='#n3562'>3562</a></p>
<p id='n3563' class='stm run hide_run'><a href='#n3563'>3563</a></p>
<p id='n3564' class='stm mis'><a href='#n3564'>3564</a></p>
<p id='n3565' class='stm mis'><a href='#n3565'>3565</a></p>
<p id='n3566' class='pln'><a href='#n3566'>3566</a></p>
<p id='n3567' class='stm run hide_run'><a href='#n3567'>3567</a></p>
<p id='n3568' class='stm run hide_run'><a href='#n3568'>3568</a></p>
<p id='n3569' class='stm run hide_run'><a href='#n3569'>3569</a></p>
<p id='n3570' class='stm run hide_run'><a href='#n3570'>3570</a></p>
<p id='n3571' class='stm mis'><a href='#n3571'>3571</a></p>
<p id='n3572' class='stm mis'><a href='#n3572'>3572</a></p>
<p id='n3573' class='pln'><a href='#n3573'>3573</a></p>
<p id='n3574' class='stm run hide_run'><a href='#n3574'>3574</a></p>
<p id='n3575' class='stm run hide_run'><a href='#n3575'>3575</a></p>
<p id='n3576' class='pln'><a href='#n3576'>3576</a></p>
<p id='n3577' class='stm run hide_run'><a href='#n3577'>3577</a></p>
<p id='n3578' class='pln'><a href='#n3578'>3578</a></p>
<p id='n3579' class='stm run hide_run'><a href='#n3579'>3579</a></p>
<p id='n3580' class='stm run hide_run'><a href='#n3580'>3580</a></p>
<p id='n3581' class='stm run hide_run'><a href='#n3581'>3581</a></p>
<p id='n3582' class='stm run hide_run'><a href='#n3582'>3582</a></p>
<p id='n3583' class='stm run hide_run'><a href='#n3583'>3583</a></p>
<p id='n3584' class='stm mis'><a href='#n3584'>3584</a></p>
<p id='n3585' class='stm run hide_run'><a href='#n3585'>3585</a></p>
<p id='n3586' class='stm run hide_run'><a href='#n3586'>3586</a></p>
<p id='n3587' class='stm run hide_run'><a href='#n3587'>3587</a></p>
<p id='n3588' class='stm run hide_run'><a href='#n3588'>3588</a></p>
<p id='n3589' class='stm run hide_run'><a href='#n3589'>3589</a></p>
<p id='n3590' class='stm mis'><a href='#n3590'>3590</a></p>
<p id='n3591' class='stm run hide_run'><a href='#n3591'>3591</a></p>
<p id='n3592' class='pln'><a href='#n3592'>3592</a></p>
<p id='n3593' class='stm run hide_run'><a href='#n3593'>3593</a></p>
<p id='n3594' class='stm run hide_run'><a href='#n3594'>3594</a></p>
<p id='n3595' class='pln'><a href='#n3595'>3595</a></p>
<p id='n3596' class='stm run hide_run'><a href='#n3596'>3596</a></p>
<p id='n3597' class='stm run hide_run'><a href='#n3597'>3597</a></p>
<p id='n3598' class='stm run hide_run'><a href='#n3598'>3598</a></p>
<p id='n3599' class='stm mis'><a href='#n3599'>3599</a></p>
<p id='n3600' class='stm mis'><a href='#n3600'>3600</a></p>
<p id='n3601' class='pln'><a href='#n3601'>3601</a></p>
<p id='n3602' class='stm run hide_run'><a href='#n3602'>3602</a></p>
<p id='n3603' class='stm run hide_run'><a href='#n3603'>3603</a></p>
<p id='n3604' class='pln'><a href='#n3604'>3604</a></p>
<p id='n3605' class='stm run hide_run'><a href='#n3605'>3605</a></p>
<p id='n3606' class='stm run hide_run'><a href='#n3606'>3606</a></p>
<p id='n3607' class='stm mis'><a href='#n3607'>3607</a></p>
<p id='n3608' class='stm run hide_run'><a href='#n3608'>3608</a></p>
<p id='n3609' class='pln'><a href='#n3609'>3609</a></p>
<p id='n3610' class='stm run hide_run'><a href='#n3610'>3610</a></p>
<p id='n3611' class='stm run hide_run'><a href='#n3611'>3611</a></p>
<p id='n3612' class='stm mis'><a href='#n3612'>3612</a></p>
<p id='n3613' class='stm run hide_run'><a href='#n3613'>3613</a></p>
<p id='n3614' class='pln'><a href='#n3614'>3614</a></p>
<p id='n3615' class='stm run hide_run'><a href='#n3615'>3615</a></p>
<p id='n3616' class='stm run hide_run'><a href='#n3616'>3616</a></p>
<p id='n3617' class='stm run hide_run'><a href='#n3617'>3617</a></p>
<p id='n3618' class='pln'><a href='#n3618'>3618</a></p>
<p id='n3619' class='stm mis'><a href='#n3619'>3619</a></p>
<p id='n3620' class='pln'><a href='#n3620'>3620</a></p>
<p id='n3621' class='stm run hide_run'><a href='#n3621'>3621</a></p>
<p id='n3622' class='pln'><a href='#n3622'>3622</a></p>
<p id='n3623' class='pln'><a href='#n3623'>3623</a></p>
<p id='n3624' class='pln'><a href='#n3624'>3624</a></p>
<p id='n3625' class='pln'><a href='#n3625'>3625</a></p>
<p id='n3626' class='pln'><a href='#n3626'>3626</a></p>
<p id='n3627' class='pln'><a href='#n3627'>3627</a></p>
<p id='n3628' class='stm run hide_run'><a href='#n3628'>3628</a></p>
<p id='n3629' class='pln'><a href='#n3629'>3629</a></p>
<p id='n3630' class='stm run hide_run'><a href='#n3630'>3630</a></p>
<p id='n3631' class='stm run hide_run'><a href='#n3631'>3631</a></p>
<p id='n3632' class='pln'><a href='#n3632'>3632</a></p>
<p id='n3633' class='stm run hide_run'><a href='#n3633'>3633</a></p>
<p id='n3634' class='stm run hide_run'><a href='#n3634'>3634</a></p>
<p id='n3635' class='stm run hide_run'><a href='#n3635'>3635</a></p>
<p id='n3636' class='stm mis'><a href='#n3636'>3636</a></p>
<p id='n3637' class='stm mis'><a href='#n3637'>3637</a></p>
<p id='n3638' class='pln'><a href='#n3638'>3638</a></p>
<p id='n3639' class='stm run hide_run'><a href='#n3639'>3639</a></p>
<p id='n3640' class='stm run hide_run'><a href='#n3640'>3640</a></p>
<p id='n3641' class='pln'><a href='#n3641'>3641</a></p>
<p id='n3642' class='stm run hide_run'><a href='#n3642'>3642</a></p>
<p id='n3643' class='stm run hide_run'><a href='#n3643'>3643</a></p>
<p id='n3644' class='stm mis'><a href='#n3644'>3644</a></p>
<p id='n3645' class='stm run hide_run'><a href='#n3645'>3645</a></p>
<p id='n3646' class='pln'><a href='#n3646'>3646</a></p>
<p id='n3647' class='stm run hide_run'><a href='#n3647'>3647</a></p>
<p id='n3648' class='stm run hide_run'><a href='#n3648'>3648</a></p>
<p id='n3649' class='stm mis'><a href='#n3649'>3649</a></p>
<p id='n3650' class='stm run hide_run'><a href='#n3650'>3650</a></p>
<p id='n3651' class='pln'><a href='#n3651'>3651</a></p>
<p id='n3652' class='stm run hide_run'><a href='#n3652'>3652</a></p>
<p id='n3653' class='stm run hide_run'><a href='#n3653'>3653</a></p>
<p id='n3654' class='stm mis'><a href='#n3654'>3654</a></p>
<p id='n3655' class='stm run hide_run'><a href='#n3655'>3655</a></p>
<p id='n3656' class='stm run hide_run'><a href='#n3656'>3656</a></p>
<p id='n3657' class='pln'><a href='#n3657'>3657</a></p>
<p id='n3658' class='stm run hide_run'><a href='#n3658'>3658</a></p>
<p id='n3659' class='stm run hide_run'><a href='#n3659'>3659</a></p>
<p id='n3660' class='stm mis'><a href='#n3660'>3660</a></p>
<p id='n3661' class='stm run hide_run'><a href='#n3661'>3661</a></p>
<p id='n3662' class='pln'><a href='#n3662'>3662</a></p>
<p id='n3663' class='stm run hide_run'><a href='#n3663'>3663</a></p>
<p id='n3664' class='stm run hide_run'><a href='#n3664'>3664</a></p>
<p id='n3665' class='pln'><a href='#n3665'>3665</a></p>
<p id='n3666' class='stm run hide_run'><a href='#n3666'>3666</a></p>
<p id='n3667' class='pln'><a href='#n3667'>3667</a></p>
<p id='n3668' class='pln'><a href='#n3668'>3668</a></p>
<p id='n3669' class='pln'><a href='#n3669'>3669</a></p>
<p id='n3670' class='pln'><a href='#n3670'>3670</a></p>
<p id='n3671' class='pln'><a href='#n3671'>3671</a></p>
<p id='n3672' class='pln'><a href='#n3672'>3672</a></p>
<p id='n3673' class='pln'><a href='#n3673'>3673</a></p>
<p id='n3674' class='pln'><a href='#n3674'>3674</a></p>
<p id='n3675' class='pln'><a href='#n3675'>3675</a></p>
<p id='n3676' class='pln'><a href='#n3676'>3676</a></p>
<p id='n3677' class='stm run hide_run'><a href='#n3677'>3677</a></p>
<p id='n3678' class='pln'><a href='#n3678'>3678</a></p>
<p id='n3679' class='stm run hide_run'><a href='#n3679'>3679</a></p>
<p id='n3680' class='stm run hide_run'><a href='#n3680'>3680</a></p>
<p id='n3681' class='pln'><a href='#n3681'>3681</a></p>
<p id='n3682' class='pln'><a href='#n3682'>3682</a></p>
<p id='n3683' class='pln'><a href='#n3683'>3683</a></p>
<p id='n3684' class='pln'><a href='#n3684'>3684</a></p>
<p id='n3685' class='pln'><a href='#n3685'>3685</a></p>
<p id='n3686' class='stm run hide_run'><a href='#n3686'>3686</a></p>
<p id='n3687' class='pln'><a href='#n3687'>3687</a></p>
<p id='n3688' class='stm run hide_run'><a href='#n3688'>3688</a></p>
<p id='n3689' class='pln'><a href='#n3689'>3689</a></p>
<p id='n3690' class='stm run hide_run'><a href='#n3690'>3690</a></p>
<p id='n3691' class='stm run hide_run'><a href='#n3691'>3691</a></p>
<p id='n3692' class='stm run hide_run'><a href='#n3692'>3692</a></p>
<p id='n3693' class='stm run hide_run'><a href='#n3693'>3693</a></p>
<p id='n3694' class='stm run hide_run'><a href='#n3694'>3694</a></p>
<p id='n3695' class='stm run hide_run'><a href='#n3695'>3695</a></p>
<p id='n3696' class='stm run hide_run'><a href='#n3696'>3696</a></p>
<p id='n3697' class='stm run hide_run'><a href='#n3697'>3697</a></p>
<p id='n3698' class='stm run hide_run'><a href='#n3698'>3698</a></p>
<p id='n3699' class='stm run hide_run'><a href='#n3699'>3699</a></p>
<p id='n3700' class='stm run hide_run'><a href='#n3700'>3700</a></p>
<p id='n3701' class='stm run hide_run'><a href='#n3701'>3701</a></p>
<p id='n3702' class='stm run hide_run'><a href='#n3702'>3702</a></p>
<p id='n3703' class='stm run hide_run'><a href='#n3703'>3703</a></p>
<p id='n3704' class='stm run hide_run'><a href='#n3704'>3704</a></p>
<p id='n3705' class='stm mis'><a href='#n3705'>3705</a></p>
<p id='n3706' class='stm run hide_run'><a href='#n3706'>3706</a></p>
<p id='n3707' class='pln'><a href='#n3707'>3707</a></p>
<p id='n3708' class='pln'><a href='#n3708'>3708</a></p>
<p id='n3709' class='pln'><a href='#n3709'>3709</a></p>
<p id='n3710' class='pln'><a href='#n3710'>3710</a></p>
<p id='n3711' class='pln'><a href='#n3711'>3711</a></p>
<p id='n3712' class='stm run hide_run'><a href='#n3712'>3712</a></p>
<p id='n3713' class='stm run hide_run'><a href='#n3713'>3713</a></p>
<p id='n3714' class='pln'><a href='#n3714'>3714</a></p>
<p id='n3715' class='stm run hide_run'><a href='#n3715'>3715</a></p>
<p id='n3716' class='stm run hide_run'><a href='#n3716'>3716</a></p>
<p id='n3717' class='stm run hide_run'><a href='#n3717'>3717</a></p>
<p id='n3718' class='pln'><a href='#n3718'>3718</a></p>
<p id='n3719' class='stm run hide_run'><a href='#n3719'>3719</a></p>
<p id='n3720' class='stm run hide_run'><a href='#n3720'>3720</a></p>
<p id='n3721' class='stm run hide_run'><a href='#n3721'>3721</a></p>
<p id='n3722' class='stm run hide_run'><a href='#n3722'>3722</a></p>
<p id='n3723' class='stm run hide_run'><a href='#n3723'>3723</a></p>
<p id='n3724' class='stm run hide_run'><a href='#n3724'>3724</a></p>
<p id='n3725' class='stm run hide_run'><a href='#n3725'>3725</a></p>
<p id='n3726' class='stm run hide_run'><a href='#n3726'>3726</a></p>
<p id='n3727' class='stm run hide_run'><a href='#n3727'>3727</a></p>
<p id='n3728' class='stm run hide_run'><a href='#n3728'>3728</a></p>
<p id='n3729' class='pln'><a href='#n3729'>3729</a></p>
<p id='n3730' class='pln'><a href='#n3730'>3730</a></p>
<p id='n3731' class='pln'><a href='#n3731'>3731</a></p>
<p id='n3732' class='pln'><a href='#n3732'>3732</a></p>
<p id='n3733' class='pln'><a href='#n3733'>3733</a></p>
<p id='n3734' class='pln'><a href='#n3734'>3734</a></p>
<p id='n3735' class='stm run hide_run'><a href='#n3735'>3735</a></p>
<p id='n3736' class='pln'><a href='#n3736'>3736</a></p>
<p id='n3737' class='pln'><a href='#n3737'>3737</a></p>
<p id='n3738' class='stm run hide_run'><a href='#n3738'>3738</a></p>
<p id='n3739' class='pln'><a href='#n3739'>3739</a></p>
<p id='n3740' class='pln'><a href='#n3740'>3740</a></p>
<p id='n3741' class='pln'><a href='#n3741'>3741</a></p>
<p id='n3742' class='stm mis'><a href='#n3742'>3742</a></p>
<p id='n3743' class='pln'><a href='#n3743'>3743</a></p>
<p id='n3744' class='pln'><a href='#n3744'>3744</a></p>
<p id='n3745' class='pln'><a href='#n3745'>3745</a></p>
<p id='n3746' class='pln'><a href='#n3746'>3746</a></p>
<p id='n3747' class='pln'><a href='#n3747'>3747</a></p>
<p id='n3748' class='pln'><a href='#n3748'>3748</a></p>
<p id='n3749' class='pln'><a href='#n3749'>3749</a></p>
<p id='n3750' class='pln'><a href='#n3750'>3750</a></p>
<p id='n3751' class='pln'><a href='#n3751'>3751</a></p>
<p id='n3752' class='pln'><a href='#n3752'>3752</a></p>
<p id='n3753' class='pln'><a href='#n3753'>3753</a></p>
<p id='n3754' class='pln'><a href='#n3754'>3754</a></p>
<p id='n3755' class='pln'><a href='#n3755'>3755</a></p>
<p id='n3756' class='pln'><a href='#n3756'>3756</a></p>
<p id='n3757' class='pln'><a href='#n3757'>3757</a></p>
<p id='n3758' class='pln'><a href='#n3758'>3758</a></p>
<p id='n3759' class='pln'><a href='#n3759'>3759</a></p>
<p id='n3760' class='pln'><a href='#n3760'>3760</a></p>
<p id='n3761' class='pln'><a href='#n3761'>3761</a></p>
<p id='n3762' class='pln'><a href='#n3762'>3762</a></p>
<p id='n3763' class='pln'><a href='#n3763'>3763</a></p>
<p id='n3764' class='pln'><a href='#n3764'>3764</a></p>
<p id='n3765' class='pln'><a href='#n3765'>3765</a></p>
<p id='n3766' class='pln'><a href='#n3766'>3766</a></p>
<p id='n3767' class='pln'><a href='#n3767'>3767</a></p>
<p id='n3768' class='pln'><a href='#n3768'>3768</a></p>
<p id='n3769' class='pln'><a href='#n3769'>3769</a></p>
<p id='n3770' class='pln'><a href='#n3770'>3770</a></p>
<p id='n3771' class='pln'><a href='#n3771'>3771</a></p>
<p id='n3772' class='pln'><a href='#n3772'>3772</a></p>
<p id='n3773' class='pln'><a href='#n3773'>3773</a></p>
<p id='n3774' class='pln'><a href='#n3774'>3774</a></p>
<p id='n3775' class='pln'><a href='#n3775'>3775</a></p>
<p id='n3776' class='pln'><a href='#n3776'>3776</a></p>
<p id='n3777' class='pln'><a href='#n3777'>3777</a></p>
<p id='n3778' class='pln'><a href='#n3778'>3778</a></p>
<p id='n3779' class='pln'><a href='#n3779'>3779</a></p>
<p id='n3780' class='pln'><a href='#n3780'>3780</a></p>
<p id='n3781' class='pln'><a href='#n3781'>3781</a></p>
<p id='n3782' class='pln'><a href='#n3782'>3782</a></p>
</td>
<td class='text' valign='top'>
<p id='t1' class='pln'><span class='com'>#!/usr/bin/env python</span><span class='strut'>&nbsp;</span></p>
<p id='t2' class='pln'><span class='com'># -*- coding: utf-8 -*-</span><span class='strut'>&nbsp;</span></p>
<p id='t3' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t4' class='stm run hide_run'><span class='key'>from</span> <span class='nam'>__future__</span> <span class='key'>import</span> <span class='nam'>absolute_import</span><span class='strut'>&nbsp;</span></p>
<p id='t5' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t6' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>base64</span><span class='strut'>&nbsp;</span></p>
<p id='t7' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>datetime</span><span class='strut'>&nbsp;</span></p>
<p id='t8' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>netrc</span><span class='strut'>&nbsp;</span></p>
<p id='t9' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>os</span><span class='strut'>&nbsp;</span></p>
<p id='t10' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>re</span><span class='strut'>&nbsp;</span></p>
<p id='t11' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>socket</span><span class='strut'>&nbsp;</span></p>
<p id='t12' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>time</span><span class='strut'>&nbsp;</span></p>
<p id='t13' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>email</span><span class='op'>.</span><span class='nam'>utils</span><span class='strut'>&nbsp;</span></p>
<p id='t14' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>xml</span><span class='op'>.</span><span class='nam'>etree</span><span class='op'>.</span><span class='nam'>ElementTree</span><span class='strut'>&nbsp;</span></p>
<p id='t15' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>random</span><span class='strut'>&nbsp;</span></p>
<p id='t16' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>math</span><span class='strut'>&nbsp;</span></p>
<p id='t17' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t18' class='stm run hide_run'><span class='key'>from</span> <span class='op'>.</span><span class='nam'>utils</span> <span class='key'>import</span> <span class='op'>*</span><span class='strut'>&nbsp;</span></p>
<p id='t19' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t20' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t21' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>InfoExtractor</span><span class='op'>(</span><span class='nam'>object</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t22' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information Extractor class.</span><span class='strut'>&nbsp;</span></p>
<p id='t23' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t24' class='pln'><span class='str'>&nbsp; &nbsp; Information extractors are the classes that, given a URL, extract</span><span class='strut'>&nbsp;</span></p>
<p id='t25' class='pln'><span class='str'>&nbsp; &nbsp; information about the video (or videos) the URL refers to. This</span><span class='strut'>&nbsp;</span></p>
<p id='t26' class='pln'><span class='str'>&nbsp; &nbsp; information includes the real video URL, the video title, author and</span><span class='strut'>&nbsp;</span></p>
<p id='t27' class='pln'><span class='str'>&nbsp; &nbsp; others. The information is stored in a dictionary which is then</span><span class='strut'>&nbsp;</span></p>
<p id='t28' class='pln'><span class='str'>&nbsp; &nbsp; passed to the FileDownloader. The FileDownloader processes this</span><span class='strut'>&nbsp;</span></p>
<p id='t29' class='pln'><span class='str'>&nbsp; &nbsp; information possibly downloading the video to the file system, among</span><span class='strut'>&nbsp;</span></p>
<p id='t30' class='pln'><span class='str'>&nbsp; &nbsp; other possible outcomes.</span><span class='strut'>&nbsp;</span></p>
<p id='t31' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t32' class='pln'><span class='str'>&nbsp; &nbsp; The dictionaries must include the following fields:</span><span class='strut'>&nbsp;</span></p>
<p id='t33' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t34' class='pln'><span class='str'>&nbsp; &nbsp; id:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Video identifier.</span><span class='strut'>&nbsp;</span></p>
<p id='t35' class='pln'><span class='str'>&nbsp; &nbsp; url:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Final video URL.</span><span class='strut'>&nbsp;</span></p>
<p id='t36' class='pln'><span class='str'>&nbsp; &nbsp; title:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Video title, unescaped.</span><span class='strut'>&nbsp;</span></p>
<p id='t37' class='pln'><span class='str'>&nbsp; &nbsp; ext:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Video filename extension.</span><span class='strut'>&nbsp;</span></p>
<p id='t38' class='pln'><span class='str'>&nbsp; &nbsp; uploader:&nbsp; &nbsp; &nbsp;&nbsp; Full name of the video uploader.</span><span class='strut'>&nbsp;</span></p>
<p id='t39' class='pln'><span class='str'>&nbsp; &nbsp; upload_date:&nbsp; &nbsp; Video upload date (YYYYMMDD).</span><span class='strut'>&nbsp;</span></p>
<p id='t40' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t41' class='pln'><span class='str'>&nbsp; &nbsp; The following fields are optional:</span><span class='strut'>&nbsp;</span></p>
<p id='t42' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t43' class='pln'><span class='str'>&nbsp; &nbsp; format:&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; The video format, defaults to ext (used for --get-format)</span><span class='strut'>&nbsp;</span></p>
<p id='t44' class='pln'><span class='str'>&nbsp; &nbsp; thumbnail:&nbsp; &nbsp; &nbsp; Full URL to a video thumbnail image.</span><span class='strut'>&nbsp;</span></p>
<p id='t45' class='pln'><span class='str'>&nbsp; &nbsp; description:&nbsp; &nbsp; One-line video description.</span><span class='strut'>&nbsp;</span></p>
<p id='t46' class='pln'><span class='str'>&nbsp; &nbsp; uploader_id:&nbsp; &nbsp; Nickname or id of the video uploader.</span><span class='strut'>&nbsp;</span></p>
<p id='t47' class='pln'><span class='str'>&nbsp; &nbsp; player_url:&nbsp; &nbsp;&nbsp; SWF Player URL (used for rtmpdump).</span><span class='strut'>&nbsp;</span></p>
<p id='t48' class='pln'><span class='str'>&nbsp; &nbsp; subtitles:&nbsp; &nbsp; &nbsp; The .srt file contents.</span><span class='strut'>&nbsp;</span></p>
<p id='t49' class='pln'><span class='str'>&nbsp; &nbsp; urlhandle:&nbsp; &nbsp; &nbsp; [internal] The urlHandle to be used to download the file,</span><span class='strut'>&nbsp;</span></p>
<p id='t50' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; like returned by urllib.request.urlopen</span><span class='strut'>&nbsp;</span></p>
<p id='t51' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t52' class='pln'><span class='str'>&nbsp; &nbsp; The fields should all be Unicode strings.</span><span class='strut'>&nbsp;</span></p>
<p id='t53' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t54' class='pln'><span class='str'>&nbsp; &nbsp; Subclasses of this one should re-define the _real_initialize() and</span><span class='strut'>&nbsp;</span></p>
<p id='t55' class='pln'><span class='str'>&nbsp; &nbsp; _real_extract() methods and define a _VALID_URL regexp.</span><span class='strut'>&nbsp;</span></p>
<p id='t56' class='pln'><span class='str'>&nbsp; &nbsp; Probably, they should also be added to the list of extractors.</span><span class='strut'>&nbsp;</span></p>
<p id='t57' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t58' class='pln'><span class='str'>&nbsp; &nbsp; _real_extract() must return a *list* of information dictionaries as</span><span class='strut'>&nbsp;</span></p>
<p id='t59' class='pln'><span class='str'>&nbsp; &nbsp; described above.</span><span class='strut'>&nbsp;</span></p>
<p id='t60' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t61' class='pln'><span class='str'>&nbsp; &nbsp; Finally, the _WORKING attribute should be set to False for broken IEs</span><span class='strut'>&nbsp;</span></p>
<p id='t62' class='pln'><span class='str'>&nbsp; &nbsp; in order to warn the users and skip the tests.</span><span class='strut'>&nbsp;</span></p>
<p id='t63' class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t64' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t65' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_ready</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'>&nbsp;</span></p>
<p id='t66' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_downloader</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t67' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_WORKING</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'>&nbsp;</span></p>
<p id='t68' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t69' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t70' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Constructor. Receives an optional downloader.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t71' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_ready</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'>&nbsp;</span></p>
<p id='t72' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>set_downloader</span><span class='op'>(</span><span class='nam'>downloader</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t73' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t74' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>suitable</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t75' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Receives a URL and returns True if suitable for this IE.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t76' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t77' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t78' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>working</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t79' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Getter method for _WORKING.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t80' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_WORKING</span><span class='strut'>&nbsp;</span></p>
<p id='t81' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t82' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>initialize</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t83' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Initializes an instance (authentication, etc).&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t84' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_ready</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t85' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_real_initialize</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t86' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_ready</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'>&nbsp;</span></p>
<p id='t87' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t88' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t89' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Extracts URL information and returns it in list of dicts.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t90' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>initialize</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t91' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t92' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t93' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>set_downloader</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t94' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Sets the downloader for this IE.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t95' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span> <span class='op'>=</span> <span class='nam'>downloader</span><span class='strut'>&nbsp;</span></p>
<p id='t96' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t97' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_initialize</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t98' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Real initialization process. Redefine in subclasses.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t99' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>pass</span><span class='strut'>&nbsp;</span></p>
<p id='t100' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t101' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t102' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Real extraction process. Redefine in subclasses.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t103' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>pass</span><span class='strut'>&nbsp;</span></p>
<p id='t104' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t105' class='stm run hide_run'>&nbsp; &nbsp; <span class='op'>@</span><span class='nam'>property</span><span class='strut'>&nbsp;</span></p>
<p id='t106' class='pln'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>IE_NAME</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t107' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>type</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>__name__</span><span class='op'>[</span><span class='op'>:</span><span class='op'>-</span><span class='num'>2</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t108' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t109' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_download_webpage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url_or_request</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>,</span> <span class='nam'>note</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>errnote</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t110' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>note</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t111' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>note</span> <span class='op'>=</span> <span class='str'>u&#39;Downloading video webpage&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t112' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[%s] %s: %s&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>,</span> <span class='nam'>note</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t113' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t114' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>urlh</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>url_or_request</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t115' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage_bytes</span> <span class='op'>=</span> <span class='nam'>urlh</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t116' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>webpage_bytes</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>,</span> <span class='str'>&#39;replace&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t117' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t118' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>errnote</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t119' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>errnote</span> <span class='op'>=</span> <span class='str'>u&#39;Unable to download webpage&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t120' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>ExtractorError</span><span class='op'>(</span><span class='str'>u&#39;%s: %s&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>errnote</span><span class='op'>,</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t121' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t122' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t123' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>YoutubeIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t124' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information extractor for youtube.com.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t125' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t126' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&quot;&quot;&quot;^</span><span class='strut'>&nbsp;</span></p>
<p id='t127' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; (</span><span class='strut'>&nbsp;</span></p>
<p id='t128' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; (?:https?://)?&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; # http(s):// (optional)</span><span class='strut'>&nbsp;</span></p>
<p id='t129' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; (?:youtu\.be/|(?:\w+\.)?youtube(?:-nocookie)?\.com/|</span><span class='strut'>&nbsp;</span></p>
<p id='t130' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tube\.majestyc\.net/)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; # the various hostnames, with wildcard subdomains</span><span class='strut'>&nbsp;</span></p>
<p id='t131' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; (?:.*?\#/)?&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # handle anchor (#/) redirect urls</span><span class='strut'>&nbsp;</span></p>
<p id='t132' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; (?!view_play_list|my_playlists|artist|playlist)&nbsp; &nbsp; &nbsp; # ignore playlist URLs</span><span class='strut'>&nbsp;</span></p>
<p id='t133' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; (?:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # the various things that can precede the ID:</span><span class='strut'>&nbsp;</span></p>
<p id='t134' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; (?:(?:v|embed|e)/)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; # v/ or embed/ or e/</span><span class='strut'>&nbsp;</span></p>
<p id='t135' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; |(?:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; # or the v= param in all its forms</span><span class='strut'>&nbsp;</span></p>
<p id='t136' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; (?:watch(?:_popup)?(?:\.php)?)?&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # preceding watch(_popup|.php) or nothing (like /?v=xxxx)</span><span class='strut'>&nbsp;</span></p>
<p id='t137' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; (?:\?|\#!?)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # the params delimiter ? or # or #!</span><span class='strut'>&nbsp;</span></p>
<p id='t138' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; (?:.*?&amp;)?&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # any other preceding param (like /?s=tuff&amp;v=xxxx)</span><span class='strut'>&nbsp;</span></p>
<p id='t139' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; v=</span><span class='strut'>&nbsp;</span></p>
<p id='t140' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; )</span><span class='strut'>&nbsp;</span></p>
<p id='t141' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; )?&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; # optional -&gt; youtube.com/xxxx is OK</span><span class='strut'>&nbsp;</span></p>
<p id='t142' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; )?&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; # all until now is optional -&gt; you can pass the naked ID</span><span class='strut'>&nbsp;</span></p>
<p id='t143' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; ([0-9A-Za-z_-]+)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; # here is it! the YouTube video ID</span><span class='strut'>&nbsp;</span></p>
<p id='t144' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; (?(1).+)?&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # if we found the ID, everything can follow</span><span class='strut'>&nbsp;</span></p>
<p id='t145' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; $&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t146' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_LANG_URL</span> <span class='op'>=</span> <span class='str'>r&#39;http://www.youtube.com/?hl=en&amp;persist_hl=1&amp;gl=US&amp;persist_gl=1&amp;opt_out_ackd=1&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t147' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_LOGIN_URL</span> <span class='op'>=</span> <span class='str'>&#39;https://www.youtube.com/signup?next=/&amp;gl=US&amp;hl=en&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t148' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_AGE_URL</span> <span class='op'>=</span> <span class='str'>&#39;http://www.youtube.com/verify_age?next_url=/&amp;gl=US&amp;hl=en&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t149' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_NEXT_URL_RE</span> <span class='op'>=</span> <span class='str'>r&#39;[\?&amp;]next_url=([^&amp;]+)&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t150' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_NETRC_MACHINE</span> <span class='op'>=</span> <span class='str'>&#39;youtube&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t151' class='pln'>&nbsp; &nbsp; <span class='com'># Listed in order of quality</span><span class='strut'>&nbsp;</span></p>
<p id='t152' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_available_formats</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>&#39;38&#39;</span><span class='op'>,</span> <span class='str'>&#39;37&#39;</span><span class='op'>,</span> <span class='str'>&#39;46&#39;</span><span class='op'>,</span> <span class='str'>&#39;22&#39;</span><span class='op'>,</span> <span class='str'>&#39;45&#39;</span><span class='op'>,</span> <span class='str'>&#39;35&#39;</span><span class='op'>,</span> <span class='str'>&#39;44&#39;</span><span class='op'>,</span> <span class='str'>&#39;34&#39;</span><span class='op'>,</span> <span class='str'>&#39;18&#39;</span><span class='op'>,</span> <span class='str'>&#39;43&#39;</span><span class='op'>,</span> <span class='str'>&#39;6&#39;</span><span class='op'>,</span> <span class='str'>&#39;5&#39;</span><span class='op'>,</span> <span class='str'>&#39;17&#39;</span><span class='op'>,</span> <span class='str'>&#39;13&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t153' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_available_formats_prefer_free</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>&#39;38&#39;</span><span class='op'>,</span> <span class='str'>&#39;46&#39;</span><span class='op'>,</span> <span class='str'>&#39;37&#39;</span><span class='op'>,</span> <span class='str'>&#39;45&#39;</span><span class='op'>,</span> <span class='str'>&#39;22&#39;</span><span class='op'>,</span> <span class='str'>&#39;44&#39;</span><span class='op'>,</span> <span class='str'>&#39;35&#39;</span><span class='op'>,</span> <span class='str'>&#39;43&#39;</span><span class='op'>,</span> <span class='str'>&#39;34&#39;</span><span class='op'>,</span> <span class='str'>&#39;18&#39;</span><span class='op'>,</span> <span class='str'>&#39;6&#39;</span><span class='op'>,</span> <span class='str'>&#39;5&#39;</span><span class='op'>,</span> <span class='str'>&#39;17&#39;</span><span class='op'>,</span> <span class='str'>&#39;13&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t154' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_video_extensions</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t155' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;13&#39;</span><span class='op'>:</span> <span class='str'>&#39;3gp&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t156' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;17&#39;</span><span class='op'>:</span> <span class='str'>&#39;mp4&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t157' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;18&#39;</span><span class='op'>:</span> <span class='str'>&#39;mp4&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t158' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;22&#39;</span><span class='op'>:</span> <span class='str'>&#39;mp4&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t159' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;37&#39;</span><span class='op'>:</span> <span class='str'>&#39;mp4&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t160' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;38&#39;</span><span class='op'>:</span> <span class='str'>&#39;video&#39;</span><span class='op'>,</span> <span class='com'># You actually don&#39;t know if this will be MOV, AVI or whatever</span><span class='strut'>&nbsp;</span></p>
<p id='t161' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;43&#39;</span><span class='op'>:</span> <span class='str'>&#39;webm&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t162' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;44&#39;</span><span class='op'>:</span> <span class='str'>&#39;webm&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t163' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;45&#39;</span><span class='op'>:</span> <span class='str'>&#39;webm&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t164' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;46&#39;</span><span class='op'>:</span> <span class='str'>&#39;webm&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t165' class='pln'>&nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t166' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_video_dimensions</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t167' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;5&#39;</span><span class='op'>:</span> <span class='str'>&#39;240x400&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t168' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;6&#39;</span><span class='op'>:</span> <span class='str'>&#39;???&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t169' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;13&#39;</span><span class='op'>:</span> <span class='str'>&#39;???&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t170' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;17&#39;</span><span class='op'>:</span> <span class='str'>&#39;144x176&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t171' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;18&#39;</span><span class='op'>:</span> <span class='str'>&#39;360x640&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t172' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;22&#39;</span><span class='op'>:</span> <span class='str'>&#39;720x1280&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t173' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;34&#39;</span><span class='op'>:</span> <span class='str'>&#39;360x640&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t174' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;35&#39;</span><span class='op'>:</span> <span class='str'>&#39;480x854&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t175' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;37&#39;</span><span class='op'>:</span> <span class='str'>&#39;1080x1920&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t176' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;38&#39;</span><span class='op'>:</span> <span class='str'>&#39;3072x4096&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t177' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;43&#39;</span><span class='op'>:</span> <span class='str'>&#39;360x640&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t178' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;44&#39;</span><span class='op'>:</span> <span class='str'>&#39;480x854&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t179' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;45&#39;</span><span class='op'>:</span> <span class='str'>&#39;720x1280&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t180' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;46&#39;</span><span class='op'>:</span> <span class='str'>&#39;1080x1920&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t181' class='pln'>&nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t182' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;youtube&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t183' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t184' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>suitable</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t185' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Receives a URL and returns True if suitable for this IE.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t186' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>VERBOSE</span><span class='op'>)</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t187' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t188' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_lang</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t189' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report attempt to set language.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t190' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[youtube] Setting language&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t191' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t192' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_login</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t193' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report attempt to log in.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t194' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[youtube] Logging in&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t195' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t196' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_age_confirmation</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t197' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report attempt to confirm age.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t198' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[youtube] Confirming age&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t199' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t200' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_video_webpage_download</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t201' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report attempt to download video webpage.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t202' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[youtube] %s: Downloading video webpage&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t203' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t204' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_video_info_webpage_download</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t205' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report attempt to download video info webpage.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t206' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[youtube] %s: Downloading video info webpage&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t207' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t208' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_video_subtitles_download</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t209' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report attempt to download video info webpage.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t210' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[youtube] %s: Downloading video subtitles&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t211' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t212' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_information_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t213' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report attempt to extract video information.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t214' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[youtube] %s: Extracting video information&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t215' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t216' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_unavailable_format</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>,</span> <span class='nam'>format</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t217' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report extracted video URL.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t218' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[youtube] %s: Format %s not available&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>video_id</span><span class='op'>,</span> <span class='nam'>format</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t219' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t220' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_rtmp_download</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t221' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Indicate the download will use the RTMP protocol.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t222' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[youtube] RTMP download detected&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t223' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t224' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_closed_captions_xml_to_srt</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>xml_string</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t225' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>srt</span> <span class='op'>=</span> <span class='str'>&#39;&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t226' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>texts</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>r&#39;&lt;text start=&quot;([\d\.]+)&quot;( dur=&quot;([\d\.]+)&quot;)?&gt;([^&lt;]+)&lt;/text&gt;&#39;</span><span class='op'>,</span> <span class='nam'>xml_string</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>MULTILINE</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t227' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># TODO parse xml instead of regex</span><span class='strut'>&nbsp;</span></p>
<p id='t228' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>n</span><span class='op'>,</span> <span class='op'>(</span><span class='nam'>start</span><span class='op'>,</span> <span class='nam'>dur_tag</span><span class='op'>,</span> <span class='nam'>dur</span><span class='op'>,</span> <span class='nam'>caption</span><span class='op'>)</span> <span class='key'>in</span> <span class='nam'>enumerate</span><span class='op'>(</span><span class='nam'>texts</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t229' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>dur</span><span class='op'>:</span> <span class='nam'>dur</span> <span class='op'>=</span> <span class='str'>&#39;4&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t230' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>start</span> <span class='op'>=</span> <span class='nam'>float</span><span class='op'>(</span><span class='nam'>start</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t231' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>end</span> <span class='op'>=</span> <span class='nam'>start</span> <span class='op'>+</span> <span class='nam'>float</span><span class='op'>(</span><span class='nam'>dur</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t232' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>start</span> <span class='op'>=</span> <span class='str'>&quot;%02i:%02i:%02i,%03i&quot;</span> <span class='op'>%</span><span class='op'>(</span><span class='nam'>start</span><span class='op'>/</span><span class='op'>(</span><span class='num'>60</span><span class='op'>*</span><span class='num'>60</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>start</span><span class='op'>/</span><span class='num'>60</span><span class='op'>%</span><span class='num'>60</span><span class='op'>,</span> <span class='nam'>start</span><span class='op'>%</span><span class='num'>60</span><span class='op'>,</span> <span class='nam'>start</span><span class='op'>%</span><span class='num'>1</span><span class='op'>*</span><span class='num'>1000</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t233' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>end</span> <span class='op'>=</span> <span class='str'>&quot;%02i:%02i:%02i,%03i&quot;</span> <span class='op'>%</span><span class='op'>(</span><span class='nam'>end</span><span class='op'>/</span><span class='op'>(</span><span class='num'>60</span><span class='op'>*</span><span class='num'>60</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>end</span><span class='op'>/</span><span class='num'>60</span><span class='op'>%</span><span class='num'>60</span><span class='op'>,</span> <span class='nam'>end</span><span class='op'>%</span><span class='num'>60</span><span class='op'>,</span> <span class='nam'>end</span><span class='op'>%</span><span class='num'>1</span><span class='op'>*</span><span class='num'>1000</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t234' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>caption</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>caption</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t235' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>caption</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>caption</span><span class='op'>)</span> <span class='com'># double cycle, intentional</span><span class='strut'>&nbsp;</span></p>
<p id='t236' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>srt</span> <span class='op'>+=</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>n</span><span class='op'>+</span><span class='num'>1</span><span class='op'>)</span> <span class='op'>+</span> <span class='str'>&#39;\n&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t237' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>srt</span> <span class='op'>+=</span> <span class='nam'>start</span> <span class='op'>+</span> <span class='str'>&#39; --&gt; &#39;</span> <span class='op'>+</span> <span class='nam'>end</span> <span class='op'>+</span> <span class='str'>&#39;\n&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t238' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>srt</span> <span class='op'>+=</span> <span class='nam'>caption</span> <span class='op'>+</span> <span class='str'>&#39;\n\n&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t239' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>srt</span><span class='strut'>&nbsp;</span></p>
<p id='t240' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t241' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_extract_subtitles</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t242' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_video_subtitles_download</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t243' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='str'>&#39;http://video.google.com/timedtext?hl=en&amp;type=list&amp;v=%s&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t244' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t245' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>srt_list</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t246' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t247' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>(</span><span class='str'>u&#39;WARNING: unable to download video subtitles: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t248' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>srt_lang_list</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>r&#39;name=&quot;([^&quot;]*)&quot;[^&gt;]+lang_code=&quot;([\w\-]+)&quot;&#39;</span><span class='op'>,</span> <span class='nam'>srt_list</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t249' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>srt_lang_list</span> <span class='op'>=</span> <span class='nam'>dict</span><span class='op'>(</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>l</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>l</span> <span class='key'>in</span> <span class='nam'>srt_lang_list</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t250' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>srt_lang_list</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t251' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>(</span><span class='str'>u&#39;WARNING: video has no closed captions&#39;</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t252' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;subtitleslang&#39;</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t253' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>srt_lang</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;subtitleslang&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t254' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='str'>&#39;en&#39;</span> <span class='key'>in</span> <span class='nam'>srt_lang_list</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t255' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>srt_lang</span> <span class='op'>=</span> <span class='str'>&#39;en&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t256' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t257' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>srt_lang</span> <span class='op'>=</span> <span class='nam'>list</span><span class='op'>(</span><span class='nam'>srt_lang_list</span><span class='op'>.</span><span class='nam'>keys</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t258' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>srt_lang</span> <span class='key'>in</span> <span class='nam'>srt_lang_list</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t259' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>(</span><span class='str'>u&#39;WARNING: no closed captions found in the specified language&#39;</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t260' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='str'>&#39;http://www.youtube.com/api/timedtext?lang=%s&amp;name=%s&amp;v=%s&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>srt_lang</span><span class='op'>,</span> <span class='nam'>srt_lang_list</span><span class='op'>[</span><span class='nam'>srt_lang</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t261' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t262' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>srt_xml</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t263' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t264' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>(</span><span class='str'>u&#39;WARNING: unable to download video subtitles: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t265' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>srt_xml</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t266' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>(</span><span class='str'>u&#39;WARNING: unable to download video subtitles&#39;</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t267' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>(</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_closed_captions_xml_to_srt</span><span class='op'>(</span><span class='nam'>srt_xml</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t268' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t269' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_print_formats</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>formats</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t270' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span><span class='op'>(</span><span class='str'>&#39;Available formats:&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t271' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>x</span> <span class='key'>in</span> <span class='nam'>formats</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t272' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span><span class='op'>(</span><span class='str'>&#39;%s\t:\t%s\t[%s]&#39;</span> <span class='op'>%</span><span class='op'>(</span><span class='nam'>x</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_video_extensions</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='nam'>x</span><span class='op'>,</span> <span class='str'>&#39;flv&#39;</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_video_dimensions</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='nam'>x</span><span class='op'>,</span> <span class='str'>&#39;???&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t273' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t274' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_initialize</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t275' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t276' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t277' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t278' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>username</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t279' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>password</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t280' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>downloader_params</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='strut'>&nbsp;</span></p>
<p id='t281' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t282' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Attempt to use provided username and password or .netrc data</span><span class='strut'>&nbsp;</span></p>
<p id='t283' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>downloader_params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;username&#39;</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t284' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>username</span> <span class='op'>=</span> <span class='nam'>downloader_params</span><span class='op'>[</span><span class='str'>&#39;username&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t285' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>password</span> <span class='op'>=</span> <span class='nam'>downloader_params</span><span class='op'>[</span><span class='str'>&#39;password&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t286' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>downloader_params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;usenetrc&#39;</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t287' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t288' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='nam'>netrc</span><span class='op'>.</span><span class='nam'>netrc</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>authenticators</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_NETRC_MACHINE</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t289' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>info</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t290' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>username</span> <span class='op'>=</span> <span class='nam'>info</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t291' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>password</span> <span class='op'>=</span> <span class='nam'>info</span><span class='op'>[</span><span class='num'>2</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t292' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t293' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>netrc</span><span class='op'>.</span><span class='nam'>NetrcParseError</span><span class='op'>(</span><span class='str'>&#39;No authenticators for %s&#39;</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_NETRC_MACHINE</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t294' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>IOError</span><span class='op'>,</span> <span class='nam'>netrc</span><span class='op'>.</span><span class='nam'>NetrcParseError</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t295' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u&#39;WARNING: parsing .netrc: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t296' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t297' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t298' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Set language</span><span class='strut'>&nbsp;</span></p>
<p id='t299' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_LANG_URL</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t300' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t301' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_lang</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t302' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t303' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t304' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u&#39;WARNING: unable to set language: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t305' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t306' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t307' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># No authentication to be performed</span><span class='strut'>&nbsp;</span></p>
<p id='t308' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>username</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t309' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t310' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t311' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Log in</span><span class='strut'>&nbsp;</span></p>
<p id='t312' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>login_form</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t313' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;current_form&#39;</span><span class='op'>:</span> <span class='str'>&#39;loginForm&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t314' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;next&#39;</span><span class='op'>:</span>&nbsp; &nbsp;&nbsp; <span class='str'>&#39;/&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t315' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;action_login&#39;</span><span class='op'>:</span> <span class='str'>&#39;Log In&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t316' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;username&#39;</span><span class='op'>:</span> <span class='nam'>username</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t317' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;password&#39;</span><span class='op'>:</span> <span class='nam'>password</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t318' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t319' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_LOGIN_URL</span><span class='op'>,</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>urlencode</span><span class='op'>(</span><span class='nam'>login_form</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t320' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t321' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_login</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t322' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>login_results</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t323' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;(?i)&lt;form[^&gt;]* name=&quot;loginForm&quot;&#39;</span><span class='op'>,</span> <span class='nam'>login_results</span><span class='op'>)</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t324' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u&#39;WARNING: unable to log in: bad username or password&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t325' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t326' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t327' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u&#39;WARNING: unable to log in: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t328' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t329' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t330' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Confirm age</span><span class='strut'>&nbsp;</span></p>
<p id='t331' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>age_form</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t332' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;next_url&#39;</span><span class='op'>:</span>&nbsp; &nbsp;&nbsp; <span class='str'>&#39;/&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t333' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;action_confirm&#39;</span><span class='op'>:</span>&nbsp;&nbsp; <span class='str'>&#39;Confirm&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t334' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t335' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_AGE_URL</span><span class='op'>,</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>urlencode</span><span class='op'>(</span><span class='nam'>age_form</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t336' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t337' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_age_confirmation</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t338' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>age_results</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t339' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t340' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to confirm age: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t341' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t342' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t343' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_extract_id</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t344' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>VERBOSE</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t345' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t346' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t347' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t348' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>2</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t349' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>video_id</span><span class='strut'>&nbsp;</span></p>
<p id='t350' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t351' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t352' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract original video URL from URL with redirection, like age verification, using next_url parameter</span><span class='strut'>&nbsp;</span></p>
<p id='t353' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_NEXT_URL_RE</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t354' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t355' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>url</span> <span class='op'>=</span> <span class='str'>&#39;http://www.youtube.com/&#39;</span> <span class='op'>+</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>lstrip</span><span class='op'>(</span><span class='str'>&#39;/&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t356' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_extract_id</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t357' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t358' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Get video webpage</span><span class='strut'>&nbsp;</span></p>
<p id='t359' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_video_webpage_download</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t360' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>url</span> <span class='op'>=</span> <span class='str'>&#39;http://www.youtube.com/watch?v=%s&amp;gl=US&amp;hl=en&amp;has_verified=1&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='strut'>&nbsp;</span></p>
<p id='t361' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t362' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t363' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_webpage_bytes</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t364' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t365' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download video webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t366' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t367' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t368' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_webpage</span> <span class='op'>=</span> <span class='nam'>video_webpage_bytes</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>,</span> <span class='str'>&#39;ignore&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t369' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t370' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Attempt to extract SWF player URL</span><span class='strut'>&nbsp;</span></p>
<p id='t371' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;swfConfig.*?&quot;(http:\\/\\/.*?watch.*?-.*?\.swf)&quot;&#39;</span><span class='op'>,</span> <span class='nam'>video_webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t372' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t373' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>player_url</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>sub</span><span class='op'>(</span><span class='str'>r&#39;\\(.)&#39;</span><span class='op'>,</span> <span class='str'>r&#39;\1&#39;</span><span class='op'>,</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t374' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t375' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>player_url</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t376' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t377' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Get video info</span><span class='strut'>&nbsp;</span></p>
<p id='t378' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_video_info_webpage_download</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t379' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>el_type</span> <span class='key'>in</span> <span class='op'>[</span><span class='str'>&#39;&amp;el=embedded&#39;</span><span class='op'>,</span> <span class='str'>&#39;&amp;el=detailpage&#39;</span><span class='op'>,</span> <span class='str'>&#39;&amp;el=vevo&#39;</span><span class='op'>,</span> <span class='str'>&#39;&#39;</span><span class='op'>]</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t380' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_info_url</span> <span class='op'>=</span> <span class='op'>(</span><span class='str'>&#39;http://www.youtube.com/get_video_info?&amp;video_id=%s%s&amp;ps=default&amp;eurl=&amp;gl=US&amp;hl=en&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t381' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>%</span> <span class='op'>(</span><span class='nam'>video_id</span><span class='op'>,</span> <span class='nam'>el_type</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t382' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>video_info_url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t383' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t384' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_info_webpage_bytes</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t385' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_info_webpage</span> <span class='op'>=</span> <span class='nam'>video_info_webpage_bytes</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>,</span> <span class='str'>&#39;ignore&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t386' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_info</span> <span class='op'>=</span> <span class='nam'>compat_parse_qs</span><span class='op'>(</span><span class='nam'>video_info_webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t387' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='str'>&#39;token&#39;</span> <span class='key'>in</span> <span class='nam'>video_info</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t388' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span><span class='strut'>&nbsp;</span></p>
<p id='t389' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t390' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download video info webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t391' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t392' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='str'>&#39;token&#39;</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>video_info</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t393' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='str'>&#39;reason&#39;</span> <span class='key'>in</span> <span class='nam'>video_info</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t394' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: YouTube said: %s&#39;</span> <span class='op'>%</span> <span class='nam'>video_info</span><span class='op'>[</span><span class='str'>&#39;reason&#39;</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t395' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t396' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: &quot;token&quot; parameter not in video info for unknown reason&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t397' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t398' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t399' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Check for &quot;rental&quot; videos</span><span class='strut'>&nbsp;</span></p>
<p id='t400' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='str'>&#39;ypc_video_rental_bar_text&#39;</span> <span class='key'>in</span> <span class='nam'>video_info</span> <span class='key'>and</span> <span class='str'>&#39;author&#39;</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>video_info</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t401' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: &quot;rental&quot; videos not supported&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t402' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t403' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t404' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Start extracting information</span><span class='strut'>&nbsp;</span></p>
<p id='t405' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_information_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t406' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t407' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># uploader</span><span class='strut'>&nbsp;</span></p>
<p id='t408' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='str'>&#39;author&#39;</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>video_info</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t409' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract uploader name&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t410' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t411' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_uploader</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote_plus</span><span class='op'>(</span><span class='nam'>video_info</span><span class='op'>[</span><span class='str'>&#39;author&#39;</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t412' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t413' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># uploader_id</span><span class='strut'>&nbsp;</span></p>
<p id='t414' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_uploader_id</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t415' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;link itemprop=&quot;url&quot; href=&quot;http://www.youtube.com/(?:user|channel)/([^&quot;]+)&quot;&gt;&#39;</span><span class='op'>,</span> <span class='nam'>video_webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t416' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t417' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_uploader_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t418' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t419' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;WARNING: unable to extract uploader nickname&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t420' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t421' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># title</span><span class='strut'>&nbsp;</span></p>
<p id='t422' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='str'>&#39;title&#39;</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>video_info</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t423' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract video title&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t424' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t425' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote_plus</span><span class='op'>(</span><span class='nam'>video_info</span><span class='op'>[</span><span class='str'>&#39;title&#39;</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t426' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t427' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># thumbnail image</span><span class='strut'>&nbsp;</span></p>
<p id='t428' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='str'>&#39;thumbnail_url&#39;</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>video_info</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t429' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;WARNING: unable to extract video thumbnail&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t430' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_thumbnail</span> <span class='op'>=</span> <span class='str'>&#39;&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t431' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span>&nbsp;&nbsp; <span class='com'># don&#39;t panic if we can&#39;t find it</span><span class='strut'>&nbsp;</span></p>
<p id='t432' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_thumbnail</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote_plus</span><span class='op'>(</span><span class='nam'>video_info</span><span class='op'>[</span><span class='str'>&#39;thumbnail_url&#39;</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t433' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t434' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># upload date</span><span class='strut'>&nbsp;</span></p>
<p id='t435' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>upload_date</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t436' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;id=&quot;eow-date.*?&gt;(.*?)&lt;/span&gt;&#39;</span><span class='op'>,</span> <span class='nam'>video_webpage</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>DOTALL</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t437' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t438' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>upload_date</span> <span class='op'>=</span> <span class='str'>&#39; &#39;</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>re</span><span class='op'>.</span><span class='nam'>sub</span><span class='op'>(</span><span class='str'>r&#39;[/,-]&#39;</span><span class='op'>,</span> <span class='str'>r&#39; &#39;</span><span class='op'>,</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t439' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>format_expressions</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>&#39;%d %B %Y&#39;</span><span class='op'>,</span> <span class='str'>&#39;%B %d %Y&#39;</span><span class='op'>,</span> <span class='str'>&#39;%b %d %Y&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t440' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>expression</span> <span class='key'>in</span> <span class='nam'>format_expressions</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t441' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t442' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>upload_date</span> <span class='op'>=</span> <span class='nam'>datetime</span><span class='op'>.</span><span class='nam'>datetime</span><span class='op'>.</span><span class='nam'>strptime</span><span class='op'>(</span><span class='nam'>upload_date</span><span class='op'>,</span> <span class='nam'>expression</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>strftime</span><span class='op'>(</span><span class='str'>&#39;%Y%m%d&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t443' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t444' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>pass</span><span class='strut'>&nbsp;</span></p>
<p id='t445' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t446' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># description</span><span class='strut'>&nbsp;</span></p>
<p id='t447' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_description</span> <span class='op'>=</span> <span class='nam'>get_element_by_id</span><span class='op'>(</span><span class='str'>&quot;eow-description&quot;</span><span class='op'>,</span> <span class='nam'>video_webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t448' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>video_description</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t449' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_description</span> <span class='op'>=</span> <span class='nam'>clean_html</span><span class='op'>(</span><span class='nam'>video_description</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t450' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t451' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_description</span> <span class='op'>=</span> <span class='str'>&#39;&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t452' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t453' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># closed captions</span><span class='strut'>&nbsp;</span></p>
<p id='t454' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_subtitles</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t455' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;writesubtitles&#39;</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t456' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>(</span><span class='nam'>srt_error</span><span class='op'>,</span> <span class='nam'>video_subtitles</span><span class='op'>)</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_extract_subtitles</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t457' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>srt_error</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t458' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='nam'>srt_error</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t459' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t460' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='str'>&#39;length_seconds&#39;</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>video_info</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t461' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;WARNING: unable to extract video duration&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t462' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_duration</span> <span class='op'>=</span> <span class='str'>&#39;&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t463' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t464' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_duration</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote_plus</span><span class='op'>(</span><span class='nam'>video_info</span><span class='op'>[</span><span class='str'>&#39;length_seconds&#39;</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t465' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t466' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># token</span><span class='strut'>&nbsp;</span></p>
<p id='t467' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_token</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote_plus</span><span class='op'>(</span><span class='nam'>video_info</span><span class='op'>[</span><span class='str'>&#39;token&#39;</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t468' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t469' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Decide which formats to download</span><span class='strut'>&nbsp;</span></p>
<p id='t470' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>req_format</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;format&#39;</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t471' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t472' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='str'>&#39;conn&#39;</span> <span class='key'>in</span> <span class='nam'>video_info</span> <span class='key'>and</span> <span class='nam'>video_info</span><span class='op'>[</span><span class='str'>&#39;conn&#39;</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>startswith</span><span class='op'>(</span><span class='str'>&#39;rtmp&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t473' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_rtmp_download</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t474' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url_list</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>(</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>video_info</span><span class='op'>[</span><span class='str'>&#39;conn&#39;</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t475' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='str'>&#39;url_encoded_fmt_stream_map&#39;</span> <span class='key'>in</span> <span class='nam'>video_info</span> <span class='key'>and</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>video_info</span><span class='op'>[</span><span class='str'>&#39;url_encoded_fmt_stream_map&#39;</span><span class='op'>]</span><span class='op'>)</span> <span class='op'>&gt;=</span> <span class='num'>1</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t476' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>url_data_strs</span> <span class='op'>=</span> <span class='nam'>video_info</span><span class='op'>[</span><span class='str'>&#39;url_encoded_fmt_stream_map&#39;</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;,&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t477' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>url_data</span> <span class='op'>=</span> <span class='op'>[</span><span class='nam'>compat_parse_qs</span><span class='op'>(</span><span class='nam'>uds</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>uds</span> <span class='key'>in</span> <span class='nam'>url_data_strs</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t478' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>url_data</span> <span class='op'>=</span> <span class='op'>[</span><span class='nam'>ud</span> <span class='key'>for</span> <span class='nam'>ud</span> <span class='key'>in</span> <span class='nam'>url_data</span> <span class='key'>if</span> <span class='str'>&#39;itag&#39;</span> <span class='key'>in</span> <span class='nam'>ud</span> <span class='key'>and</span> <span class='str'>&#39;url&#39;</span> <span class='key'>in</span> <span class='nam'>ud</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t479' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>url_map</span> <span class='op'>=</span> <span class='nam'>dict</span><span class='op'>(</span><span class='op'>(</span><span class='nam'>ud</span><span class='op'>[</span><span class='str'>&#39;itag&#39;</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>ud</span><span class='op'>[</span><span class='str'>&#39;url&#39;</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span> <span class='op'>+</span> <span class='str'>&#39;&amp;signature=&#39;</span> <span class='op'>+</span> <span class='nam'>ud</span><span class='op'>[</span><span class='str'>&#39;sig&#39;</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>ud</span> <span class='key'>in</span> <span class='nam'>url_data</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t480' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t481' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>format_limit</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;format_limit&#39;</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t482' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>available_formats</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_available_formats_prefer_free</span> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;prefer_free_formats&#39;</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span> <span class='key'>else</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_available_formats</span><span class='strut'>&nbsp;</span></p>
<p id='t483' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>format_limit</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span> <span class='key'>and</span> <span class='nam'>format_limit</span> <span class='key'>in</span> <span class='nam'>available_formats</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t484' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>format_list</span> <span class='op'>=</span> <span class='nam'>available_formats</span><span class='op'>[</span><span class='nam'>available_formats</span><span class='op'>.</span><span class='nam'>index</span><span class='op'>(</span><span class='nam'>format_limit</span><span class='op'>)</span><span class='op'>:</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t485' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t486' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>format_list</span> <span class='op'>=</span> <span class='nam'>available_formats</span><span class='strut'>&nbsp;</span></p>
<p id='t487' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>existing_formats</span> <span class='op'>=</span> <span class='op'>[</span><span class='nam'>x</span> <span class='key'>for</span> <span class='nam'>x</span> <span class='key'>in</span> <span class='nam'>format_list</span> <span class='key'>if</span> <span class='nam'>x</span> <span class='key'>in</span> <span class='nam'>url_map</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t488' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>existing_formats</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t489' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: no known formats available for video&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t490' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t491' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;listformats&#39;</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t492' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_print_formats</span><span class='op'>(</span><span class='nam'>existing_formats</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t493' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t494' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>req_format</span> <span class='key'>is</span> <span class='nam'>None</span> <span class='key'>or</span> <span class='nam'>req_format</span> <span class='op'>==</span> <span class='str'>&#39;best&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t495' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url_list</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>(</span><span class='nam'>existing_formats</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>url_map</span><span class='op'>[</span><span class='nam'>existing_formats</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>]</span><span class='op'>)</span><span class='op'>]</span> <span class='com'># Best quality</span><span class='strut'>&nbsp;</span></p>
<p id='t496' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>req_format</span> <span class='op'>==</span> <span class='str'>&#39;worst&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t497' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url_list</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>(</span><span class='nam'>existing_formats</span><span class='op'>[</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>existing_formats</span><span class='op'>)</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>url_map</span><span class='op'>[</span><span class='nam'>existing_formats</span><span class='op'>[</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>existing_formats</span><span class='op'>)</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='op'>]</span><span class='op'>)</span><span class='op'>]</span> <span class='com'># worst quality</span><span class='strut'>&nbsp;</span></p>
<p id='t498' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>req_format</span> <span class='key'>in</span> <span class='op'>(</span><span class='str'>&#39;-1&#39;</span><span class='op'>,</span> <span class='str'>&#39;all&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t499' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url_list</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>(</span><span class='nam'>f</span><span class='op'>,</span> <span class='nam'>url_map</span><span class='op'>[</span><span class='nam'>f</span><span class='op'>]</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>f</span> <span class='key'>in</span> <span class='nam'>existing_formats</span><span class='op'>]</span> <span class='com'># All formats</span><span class='strut'>&nbsp;</span></p>
<p id='t500' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t501' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Specific formats. We pick the first in a slash-delimeted sequence.</span><span class='strut'>&nbsp;</span></p>
<p id='t502' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># For example, if &#39;1/2/3/4&#39; is requested and &#39;2&#39; and &#39;4&#39; are available, we pick &#39;2&#39;.</span><span class='strut'>&nbsp;</span></p>
<p id='t503' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>req_formats</span> <span class='op'>=</span> <span class='nam'>req_format</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;/&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t504' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url_list</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t505' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>rf</span> <span class='key'>in</span> <span class='nam'>req_formats</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t506' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>rf</span> <span class='key'>in</span> <span class='nam'>url_map</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t507' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url_list</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>(</span><span class='nam'>rf</span><span class='op'>,</span> <span class='nam'>url_map</span><span class='op'>[</span><span class='nam'>rf</span><span class='op'>]</span><span class='op'>)</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t508' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span><span class='strut'>&nbsp;</span></p>
<p id='t509' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>video_url_list</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t510' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: requested format not available&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t511' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t512' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t513' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: no conn or url_encoded_fmt_stream_map information found in video info&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t514' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t515' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t516' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>results</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t517' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>format_param</span><span class='op'>,</span> <span class='nam'>video_real_url</span> <span class='key'>in</span> <span class='nam'>video_url_list</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t518' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extension</span><span class='strut'>&nbsp;</span></p>
<p id='t519' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_extension</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_video_extensions</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='nam'>format_param</span><span class='op'>,</span> <span class='str'>&#39;flv&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t520' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t521' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_format</span> <span class='op'>=</span> <span class='str'>&#39;{0} - {1}&#39;</span><span class='op'>.</span><span class='nam'>format</span><span class='op'>(</span><span class='nam'>format_param</span> <span class='key'>if</span> <span class='nam'>format_param</span> <span class='key'>else</span> <span class='nam'>video_extension</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t522' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_video_dimensions</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='nam'>format_param</span><span class='op'>,</span> <span class='str'>&#39;???&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t523' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t524' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>results</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t525' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp;&nbsp; <span class='nam'>video_id</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t526' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='nam'>video_real_url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t527' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>video_uploader</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t528' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader_id&#39;</span><span class='op'>:</span> <span class='nam'>video_uploader_id</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t529' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span>&nbsp; <span class='nam'>upload_date</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t530' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span>&nbsp; &nbsp; <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t531' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='nam'>video_extension</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t532' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;format&#39;</span><span class='op'>:</span>&nbsp;&nbsp; <span class='nam'>video_format</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t533' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;thumbnail&#39;</span><span class='op'>:</span>&nbsp; &nbsp; <span class='nam'>video_thumbnail</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t534' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;description&#39;</span><span class='op'>:</span>&nbsp; <span class='nam'>video_description</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t535' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;player_url&#39;</span><span class='op'>:</span>&nbsp;&nbsp; <span class='nam'>player_url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t536' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;subtitles&#39;</span><span class='op'>:</span>&nbsp; &nbsp; <span class='nam'>video_subtitles</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t537' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;duration&#39;</span><span class='op'>:</span>&nbsp; &nbsp;&nbsp; <span class='nam'>video_duration</span><span class='strut'>&nbsp;</span></p>
<p id='t538' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t539' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>results</span><span class='strut'>&nbsp;</span></p>
<p id='t540' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t541' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t542' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>MetacafeIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t543' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information Extractor for metacafe.com.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t544' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t545' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;(?:http://)?(?:www\.)?metacafe\.com/watch/([^/]+)/([^/]+)/.*&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t546' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_DISCLAIMER</span> <span class='op'>=</span> <span class='str'>&#39;http://www.metacafe.com/family_filter/&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t547' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_FILTER_POST</span> <span class='op'>=</span> <span class='str'>&#39;http://www.metacafe.com/f/index.php?inputType=filter&amp;controllerGroup=user&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t548' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;metacafe&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t549' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t550' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t551' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t552' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t553' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_disclaimer</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t554' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report disclaimer retrieval.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t555' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[metacafe] Retrieving disclaimer&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t556' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t557' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_age_confirmation</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t558' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report attempt to confirm age.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t559' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[metacafe] Confirming age&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t560' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t561' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t562' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report webpage download.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t563' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[metacafe] %s: Downloading webpage&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t564' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t565' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t566' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t567' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[metacafe] %s: Extracting information&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t568' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t569' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_initialize</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t570' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Retrieve disclaimer</span><span class='strut'>&nbsp;</span></p>
<p id='t571' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_DISCLAIMER</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t572' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t573' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_disclaimer</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t574' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>disclaimer</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t575' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t576' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to retrieve disclaimer: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t577' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t578' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t579' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Confirm age</span><span class='strut'>&nbsp;</span></p>
<p id='t580' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>disclaimer_form</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t581' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;filters&#39;</span><span class='op'>:</span> <span class='str'>&#39;0&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t582' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;submit&#39;</span><span class='op'>:</span> <span class='str'>&quot;Continue - I&#39;m over 18&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t583' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t584' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_FILTER_POST</span><span class='op'>,</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>urlencode</span><span class='op'>(</span><span class='nam'>disclaimer_form</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t585' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t586' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_age_confirmation</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t587' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>disclaimer</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t588' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t589' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to confirm age: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t590' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t591' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t592' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t593' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract id and simplified title from URL</span><span class='strut'>&nbsp;</span></p>
<p id='t594' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t595' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t596' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t597' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t598' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t599' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t600' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t601' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Check if video comes from YouTube</span><span class='strut'>&nbsp;</span></p>
<p id='t602' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj2</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='str'>r&#39;^yt-(.*)$&#39;</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t603' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj2</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t604' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>download</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;http://www.youtube.com/watch?v=%s&#39;</span> <span class='op'>%</span> <span class='nam'>mobj2</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t605' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t606' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t607' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Retrieve video webpage to extract further information</span><span class='strut'>&nbsp;</span></p>
<p id='t608' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='str'>&#39;http://www.metacafe.com/watch/%s/&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t609' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t610' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t611' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t612' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t613' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable retrieve video webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t614' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t615' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t616' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract URL, uploader and title from webpage</span><span class='strut'>&nbsp;</span></p>
<p id='t617' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t618' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;(?m)&amp;mediaURL=([^&amp;]+)&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t619' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t620' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mediaURL</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t621' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_extension</span> <span class='op'>=</span> <span class='nam'>mediaURL</span><span class='op'>[</span><span class='op'>-</span><span class='num'>3</span><span class='op'>:</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t622' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t623' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract gdaKey if available</span><span class='strut'>&nbsp;</span></p>
<p id='t624' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;(?m)&amp;gdaKey=(.*?)&amp;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t625' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t626' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>mediaURL</span><span class='strut'>&nbsp;</span></p>
<p id='t627' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t628' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>gdaKey</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t629' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='str'>&#39;%s?__gda__=%s&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>mediaURL</span><span class='op'>,</span> <span class='nam'>gdaKey</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t630' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t631' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39; name=&quot;flashvars&quot; value=&quot;(.*?)&quot;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t632' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t633' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract media URL&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t634' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t635' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>vardict</span> <span class='op'>=</span> <span class='nam'>compat_parse_qs</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t636' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='str'>&#39;mediaData&#39;</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>vardict</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t637' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract media URL&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t638' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t639' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&quot;mediaURL&quot;:&quot;(http.*?)&quot;,&quot;key&quot;:&quot;(.*?)&quot;&#39;</span><span class='op'>,</span> <span class='nam'>vardict</span><span class='op'>[</span><span class='str'>&#39;mediaData&#39;</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t640' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t641' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract media URL&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t642' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t643' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mediaURL</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>&#39;\\/&#39;</span><span class='op'>,</span> <span class='str'>&#39;/&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t644' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_extension</span> <span class='op'>=</span> <span class='nam'>mediaURL</span><span class='op'>[</span><span class='op'>-</span><span class='num'>3</span><span class='op'>:</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t645' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='str'>&#39;%s?__gda__=%s&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>mediaURL</span><span class='op'>,</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>2</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t646' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t647' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;(?im)&lt;title&gt;(.*) - Video&lt;/title&gt;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t648' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t649' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract title&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t650' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t651' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t652' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t653' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;submitter=(.*?);&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t654' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t655' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract uploader nickname&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t656' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t657' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_uploader</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t658' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t659' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t660' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp;&nbsp; <span class='nam'>video_id</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t661' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t662' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>video_uploader</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t663' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span>&nbsp; <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t664' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span>&nbsp; &nbsp; <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t665' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='nam'>video_extension</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t666' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t667' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t668' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t669' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>DailymotionIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t670' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information Extractor for Dailymotion&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t671' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t672' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;(?i)(?:https?://)?(?:www\.)?dailymotion\.[a-z]{2,3}/video/([^/]+)&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t673' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;dailymotion&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t674' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t675' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t676' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t677' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t678' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t679' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t680' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[dailymotion] %s: Extracting information&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t681' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t682' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t683' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract id and simplified title from URL</span><span class='strut'>&nbsp;</span></p>
<p id='t684' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t685' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t686' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t687' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t688' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t689' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;_&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;?&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t690' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t691' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_extension</span> <span class='op'>=</span> <span class='str'>&#39;mp4&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t692' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t693' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Retrieve video webpage to extract further information</span><span class='strut'>&nbsp;</span></p>
<p id='t694' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t695' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span><span class='op'>.</span><span class='nam'>add_header</span><span class='op'>(</span><span class='str'>&#39;Cookie&#39;</span><span class='op'>,</span> <span class='str'>&#39;family_filter=off&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t696' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_webpage</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t697' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t698' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract URL, uploader and title from webpage</span><span class='strut'>&nbsp;</span></p>
<p id='t699' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t700' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;\s*var flashvars = (.*)&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t701' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t702' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract media URL&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t703' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t704' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>flashvars</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t705' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t706' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>key</span> <span class='key'>in</span> <span class='op'>[</span><span class='str'>&#39;hd1080URL&#39;</span><span class='op'>,</span> <span class='str'>&#39;hd720URL&#39;</span><span class='op'>,</span> <span class='str'>&#39;hqURL&#39;</span><span class='op'>,</span> <span class='str'>&#39;sdURL&#39;</span><span class='op'>,</span> <span class='str'>&#39;ldURL&#39;</span><span class='op'>,</span> <span class='str'>&#39;video_url&#39;</span><span class='op'>]</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t707' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>key</span> <span class='key'>in</span> <span class='nam'>flashvars</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t708' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>max_quality</span> <span class='op'>=</span> <span class='nam'>key</span><span class='strut'>&nbsp;</span></p>
<p id='t709' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[dailymotion] Using %s&#39;</span> <span class='op'>%</span> <span class='nam'>key</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t710' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span><span class='strut'>&nbsp;</span></p>
<p id='t711' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t712' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract video URL&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t713' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t714' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t715' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&quot;&#39;</span> <span class='op'>+</span> <span class='nam'>max_quality</span> <span class='op'>+</span> <span class='str'>r&#39;&quot;:&quot;(.+?)&quot;&#39;</span><span class='op'>,</span> <span class='nam'>flashvars</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t716' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t717' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract video URL&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t718' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t719' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t720' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>&#39;\\/&#39;</span><span class='op'>,</span> <span class='str'>&#39;/&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t721' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t722' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># TODO: support choosing qualities</span><span class='strut'>&nbsp;</span></p>
<p id='t723' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t724' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;meta property=&quot;og:title&quot; content=&quot;(?P&lt;title&gt;[^&quot;]*)&quot; /&gt;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t725' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t726' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract title&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t727' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t728' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;title&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t729' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t730' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_uploader</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t731' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;(?im)&lt;span class=&quot;owner[^\&quot;]+?&quot;&gt;[^&lt;]+?&lt;a [^&gt;]+?&gt;([^&lt;]+?)&lt;/a&gt;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t732' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t733' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># lookin for official user</span><span class='strut'>&nbsp;</span></p>
<p id='t734' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj_official</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;span rel=&quot;author&quot;[^&gt;]+?&gt;([^&lt;]+?)&lt;/span&gt;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t735' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj_official</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t736' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;WARNING: unable to extract uploader nickname&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t737' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t738' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_uploader</span> <span class='op'>=</span> <span class='nam'>mobj_official</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t739' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t740' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_uploader</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t741' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t742' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_upload_date</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t743' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;div class=&quot;[^&quot;]*uploaded_cont[^&quot;]*&quot; title=&quot;[^&quot;]*&quot;&gt;([0-9]{2})-([0-9]{2})-([0-9]{4})&lt;/div&gt;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t744' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t745' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_upload_date</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>3</span><span class='op'>)</span> <span class='op'>+</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>2</span><span class='op'>)</span> <span class='op'>+</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t746' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t747' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t748' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp;&nbsp; <span class='nam'>video_id</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t749' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t750' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>video_uploader</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t751' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span>&nbsp; <span class='nam'>video_upload_date</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t752' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span>&nbsp; &nbsp; <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t753' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='nam'>video_extension</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t754' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t755' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t756' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t757' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>PhotobucketIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t758' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information extractor for photobucket.com.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t759' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t760' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;(?:http://)?(?:[a-z0-9]+\.)?photobucket\.com/.*[\?\&amp;]current=(.*\.flv)&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t761' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;photobucket&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t762' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t763' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t764' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t765' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t766' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t767' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report webpage download.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t768' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[photobucket] %s: Downloading webpage&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t769' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t770' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t771' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t772' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[photobucket] %s: Extracting information&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t773' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t774' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t775' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract id from URL</span><span class='strut'>&nbsp;</span></p>
<p id='t776' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t777' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t778' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t779' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t780' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t781' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t782' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t783' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_extension</span> <span class='op'>=</span> <span class='str'>&#39;flv&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t784' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t785' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Retrieve video webpage to extract further information</span><span class='strut'>&nbsp;</span></p>
<p id='t786' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t787' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t788' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t789' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t790' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t791' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Unable to retrieve video webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t792' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t793' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t794' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract URL, uploader, and title from webpage</span><span class='strut'>&nbsp;</span></p>
<p id='t795' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t796' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;link rel=&quot;video_src&quot; href=&quot;.*\?file=([^&quot;]+)&quot; /&gt;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t797' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t798' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract media URL&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t799' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t800' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mediaURL</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t801' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t802' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>mediaURL</span><span class='strut'>&nbsp;</span></p>
<p id='t803' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t804' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;title&gt;(.*) video by (.*) - Photobucket&lt;/title&gt;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t805' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t806' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract title&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t807' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t808' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t809' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t810' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_uploader</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>2</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t811' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t812' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t813' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp;&nbsp; <span class='nam'>video_id</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t814' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t815' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>video_uploader</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t816' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span>&nbsp; <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t817' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span>&nbsp; &nbsp; <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t818' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='nam'>video_extension</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t819' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t820' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t821' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t822' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>YahooIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t823' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information extractor for video.yahoo.com.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t824' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t825' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_WORKING</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'>&nbsp;</span></p>
<p id='t826' class='pln'>&nbsp; &nbsp; <span class='com'># _VALID_URL matches all Yahoo! Video URLs</span><span class='strut'>&nbsp;</span></p>
<p id='t827' class='pln'>&nbsp; &nbsp; <span class='com'># _VPAGE_URL matches only the extractable &#39;/watch/&#39; URLs</span><span class='strut'>&nbsp;</span></p>
<p id='t828' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;(?:http://)?(?:[a-z]+\.)?video\.yahoo\.com/(?:watch|network)/([0-9]+)(?:/|\?v=)([0-9]+)(?:[#\?].*)?&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t829' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VPAGE_URL</span> <span class='op'>=</span> <span class='str'>r&#39;(?:http://)?video\.yahoo\.com/watch/([0-9]+)/([0-9]+)(?:[#\?].*)?&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t830' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;video.yahoo&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t831' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t832' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t833' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t834' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t835' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t836' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report webpage download.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t837' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[video.yahoo] %s: Downloading webpage&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t838' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t839' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t840' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t841' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[video.yahoo] %s: Extracting information&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t842' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t843' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='nam'>new_video</span><span class='op'>=</span><span class='nam'>True</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t844' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract ID from URL</span><span class='strut'>&nbsp;</span></p>
<p id='t845' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t846' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t847' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t848' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t849' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t850' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>2</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t851' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_extension</span> <span class='op'>=</span> <span class='str'>&#39;flv&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t852' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t853' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Rewrite valid but non-extractable URLs as</span><span class='strut'>&nbsp;</span></p>
<p id='t854' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># extractable English language /watch/ URLs</span><span class='strut'>&nbsp;</span></p>
<p id='t855' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VPAGE_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t856' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t857' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t858' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t859' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t860' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Unable to retrieve video webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t861' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t862' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t863' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;\(&quot;id&quot;, &quot;([0-9]+)&quot;\);&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t864' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t865' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Unable to extract id field&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t866' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t867' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>yahoo_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t868' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t869' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;\(&quot;vid&quot;, &quot;([0-9]+)&quot;\);&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t870' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t871' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Unable to extract vid field&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t872' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t873' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>yahoo_vid</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t874' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t875' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>url</span> <span class='op'>=</span> <span class='str'>&#39;http://video.yahoo.com/watch/%s/%s&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>yahoo_vid</span><span class='op'>,</span> <span class='nam'>yahoo_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t876' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>,</span> <span class='nam'>new_video</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t877' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t878' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Retrieve video webpage to extract further information</span><span class='strut'>&nbsp;</span></p>
<p id='t879' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t880' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t881' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t882' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t883' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t884' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Unable to retrieve video webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t885' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t886' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t887' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract uploader and title from webpage</span><span class='strut'>&nbsp;</span></p>
<p id='t888' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t889' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;meta name=&quot;title&quot; content=&quot;(.*)&quot; /&gt;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t890' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t891' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract video title&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t892' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t893' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t894' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t895' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;h2 class=&quot;ti-5&quot;&gt;&lt;a href=&quot;http://video\.yahoo\.com/(people|profile)/[0-9]+&quot; beacon=&quot;.*&quot;&gt;(.*)&lt;/a&gt;&lt;/h2&gt;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t896' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t897' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract video uploader&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t898' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t899' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_uploader</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t900' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t901' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract video thumbnail</span><span class='strut'>&nbsp;</span></p>
<p id='t902' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;link rel=&quot;image_src&quot; href=&quot;(.*)&quot; /&gt;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t903' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t904' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract video thumbnail&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t905' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t906' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_thumbnail</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t907' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t908' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract video description</span><span class='strut'>&nbsp;</span></p>
<p id='t909' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;meta name=&quot;description&quot; content=&quot;(.*)&quot; /&gt;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t910' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t911' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract video description&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t912' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t913' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_description</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t914' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>video_description</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t915' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_description</span> <span class='op'>=</span> <span class='str'>&#39;No description available.&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t916' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t917' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract video height and width</span><span class='strut'>&nbsp;</span></p>
<p id='t918' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;meta name=&quot;video_height&quot; content=&quot;([0-9]+)&quot; /&gt;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t919' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t920' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract video height&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t921' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t922' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>yv_video_height</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t923' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t924' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;meta name=&quot;video_width&quot; content=&quot;([0-9]+)&quot; /&gt;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t925' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t926' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract video width&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t927' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t928' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>yv_video_width</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t929' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t930' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Retrieve video playlist to extract media URL</span><span class='strut'>&nbsp;</span></p>
<p id='t931' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># I&#39;m not completely sure what all these options are, but we</span><span class='strut'>&nbsp;</span></p>
<p id='t932' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># seem to need most of them, otherwise the server sends a 401.</span><span class='strut'>&nbsp;</span></p>
<p id='t933' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>yv_lg</span> <span class='op'>=</span> <span class='str'>&#39;R0xx6idZnW2zlrKP8xxAIR&#39;</span>&nbsp; <span class='com'># not sure what this represents</span><span class='strut'>&nbsp;</span></p>
<p id='t934' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>yv_bitrate</span> <span class='op'>=</span> <span class='str'>&#39;700&#39;</span>&nbsp; <span class='com'># according to Wikipedia this is hard-coded</span><span class='strut'>&nbsp;</span></p>
<p id='t935' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='str'>&#39;http://cosmos.bcst.yahoo.com/up/yep/process/getPlaylistFOP.php?node_id=&#39;</span> <span class='op'>+</span> <span class='nam'>video_id</span> <span class='op'>+</span><span class='strut'>&nbsp;</span></p>
<p id='t936' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;&amp;tech=flash&amp;mode=playlist&amp;lg=&#39;</span> <span class='op'>+</span> <span class='nam'>yv_lg</span> <span class='op'>+</span> <span class='str'>&#39;&amp;bitrate=&#39;</span> <span class='op'>+</span> <span class='nam'>yv_bitrate</span> <span class='op'>+</span> <span class='str'>&#39;&amp;vidH=&#39;</span> <span class='op'>+</span> <span class='nam'>yv_video_height</span> <span class='op'>+</span><span class='strut'>&nbsp;</span></p>
<p id='t937' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;&amp;vidW=&#39;</span> <span class='op'>+</span> <span class='nam'>yv_video_width</span> <span class='op'>+</span> <span class='str'>&#39;&amp;swf=as3&amp;rd=video.yahoo.com&amp;tk=null&amp;adsupported=v1,v2,&amp;eventid=1301797&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t938' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t939' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t940' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t941' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t942' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Unable to retrieve video webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t943' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t944' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t945' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract media URL from playlist XML</span><span class='strut'>&nbsp;</span></p>
<p id='t946' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;STREAM APP=&quot;(http://.*)&quot; FULLPATH=&quot;/?(/.*\.flv\?[^&quot;]*)&quot;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t947' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t948' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Unable to extract media URL&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t949' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t950' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span> <span class='op'>+</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>2</span><span class='op'>)</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t951' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>video_url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t952' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t953' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t954' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp;&nbsp; <span class='nam'>video_id</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t955' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t956' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>video_uploader</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t957' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span>&nbsp; <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t958' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span>&nbsp; &nbsp; <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t959' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='nam'>video_extension</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t960' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;thumbnail&#39;</span><span class='op'>:</span>&nbsp; &nbsp; <span class='nam'>video_thumbnail</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t961' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;description&#39;</span><span class='op'>:</span>&nbsp; <span class='nam'>video_description</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t962' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t963' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t964' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t965' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>VimeoIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t966' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information extractor for vimeo.com.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t967' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t968' class='pln'>&nbsp; &nbsp; <span class='com'># _VALID_URL matches Vimeo URLs</span><span class='strut'>&nbsp;</span></p>
<p id='t969' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;(?:https?://)?(?:(?:www|player).)?vimeo\.com/(?:(?:groups|album)/[^/]+/)?(?:videos?/)?([0-9]+)&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t970' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;vimeo&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t971' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t972' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t973' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t974' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t975' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t976' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report webpage download.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t977' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[vimeo] %s: Downloading webpage&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t978' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t979' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t980' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t981' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[vimeo] %s: Extracting information&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t982' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t983' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='nam'>new_video</span><span class='op'>=</span><span class='nam'>True</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t984' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract ID from URL</span><span class='strut'>&nbsp;</span></p>
<p id='t985' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t986' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t987' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t988' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t989' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t990' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t991' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t992' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Retrieve video webpage to extract further information</span><span class='strut'>&nbsp;</span></p>
<p id='t993' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span> <span class='nam'>std_headers</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t994' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t995' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t996' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage_bytes</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t997' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>webpage_bytes</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t998' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t999' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Unable to retrieve video webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1000' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1001' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1002' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Now we begin extracting as much information as we can from what we</span><span class='strut'>&nbsp;</span></p>
<p id='t1003' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># retrieved. First we extract the information common to all extractors,</span><span class='strut'>&nbsp;</span></p>
<p id='t1004' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># and latter we extract those that are Vimeo specific.</span><span class='strut'>&nbsp;</span></p>
<p id='t1005' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1006' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1007' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract the config JSON</span><span class='strut'>&nbsp;</span></p>
<p id='t1008' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1009' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>config</span> <span class='op'>=</span> <span class='nam'>webpage</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39; = {config:&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;,assets:&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1010' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>config</span> <span class='op'>=</span> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>loads</span><span class='op'>(</span><span class='nam'>config</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1011' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1012' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract info section&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1013' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1014' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1015' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract title</span><span class='strut'>&nbsp;</span></p>
<p id='t1016' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>&quot;video&quot;</span><span class='op'>]</span><span class='op'>[</span><span class='str'>&quot;title&quot;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1017' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1018' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract uploader and uploader_id</span><span class='strut'>&nbsp;</span></p>
<p id='t1019' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_uploader</span> <span class='op'>=</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>&quot;video&quot;</span><span class='op'>]</span><span class='op'>[</span><span class='str'>&quot;owner&quot;</span><span class='op'>]</span><span class='op'>[</span><span class='str'>&quot;name&quot;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1020' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_uploader_id</span> <span class='op'>=</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>&quot;video&quot;</span><span class='op'>]</span><span class='op'>[</span><span class='str'>&quot;owner&quot;</span><span class='op'>]</span><span class='op'>[</span><span class='str'>&quot;url&quot;</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;/&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1021' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1022' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract video thumbnail</span><span class='strut'>&nbsp;</span></p>
<p id='t1023' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_thumbnail</span> <span class='op'>=</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>&quot;video&quot;</span><span class='op'>]</span><span class='op'>[</span><span class='str'>&quot;thumbnail&quot;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1024' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1025' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract video description</span><span class='strut'>&nbsp;</span></p>
<p id='t1026' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_description</span> <span class='op'>=</span> <span class='nam'>get_element_by_attribute</span><span class='op'>(</span><span class='str'>&quot;itemprop&quot;</span><span class='op'>,</span> <span class='str'>&quot;description&quot;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1027' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>video_description</span><span class='op'>:</span> <span class='nam'>video_description</span> <span class='op'>=</span> <span class='nam'>clean_html</span><span class='op'>(</span><span class='nam'>video_description</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1028' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span> <span class='nam'>video_description</span> <span class='op'>=</span> <span class='str'>&#39;&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1029' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1030' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract upload date</span><span class='strut'>&nbsp;</span></p>
<p id='t1031' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_upload_date</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t1032' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;meta itemprop=&quot;dateCreated&quot; content=&quot;(\d{4})-(\d{2})-(\d{2})T&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1033' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1034' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_upload_date</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span> <span class='op'>+</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>2</span><span class='op'>)</span> <span class='op'>+</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>3</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1035' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1036' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Vimeo specific: extract request signature and timestamp</span><span class='strut'>&nbsp;</span></p>
<p id='t1037' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sig</span> <span class='op'>=</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>&#39;request&#39;</span><span class='op'>]</span><span class='op'>[</span><span class='str'>&#39;signature&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1038' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>timestamp</span> <span class='op'>=</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>&#39;request&#39;</span><span class='op'>]</span><span class='op'>[</span><span class='str'>&#39;timestamp&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1039' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1040' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Vimeo specific: extract video codec and quality information</span><span class='strut'>&nbsp;</span></p>
<p id='t1041' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># First consider quality, then codecs, then take everything</span><span class='strut'>&nbsp;</span></p>
<p id='t1042' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># TODO bind to format param</span><span class='strut'>&nbsp;</span></p>
<p id='t1043' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>codecs</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>(</span><span class='str'>&#39;h264&#39;</span><span class='op'>,</span> <span class='str'>&#39;mp4&#39;</span><span class='op'>)</span><span class='op'>,</span> <span class='op'>(</span><span class='str'>&#39;vp8&#39;</span><span class='op'>,</span> <span class='str'>&#39;flv&#39;</span><span class='op'>)</span><span class='op'>,</span> <span class='op'>(</span><span class='str'>&#39;vp6&#39;</span><span class='op'>,</span> <span class='str'>&#39;flv&#39;</span><span class='op'>)</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1044' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>files</span> <span class='op'>=</span> <span class='op'>{</span> <span class='str'>&#39;hd&#39;</span><span class='op'>:</span> <span class='op'>[</span><span class='op'>]</span><span class='op'>,</span> <span class='str'>&#39;sd&#39;</span><span class='op'>:</span> <span class='op'>[</span><span class='op'>]</span><span class='op'>,</span> <span class='str'>&#39;other&#39;</span><span class='op'>:</span> <span class='op'>[</span><span class='op'>]</span><span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t1045' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>codec_name</span><span class='op'>,</span> <span class='nam'>codec_extension</span> <span class='key'>in</span> <span class='nam'>codecs</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1046' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>codec_name</span> <span class='key'>in</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>&quot;video&quot;</span><span class='op'>]</span><span class='op'>[</span><span class='str'>&quot;files&quot;</span><span class='op'>]</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1047' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='str'>&#39;hd&#39;</span> <span class='key'>in</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>&quot;video&quot;</span><span class='op'>]</span><span class='op'>[</span><span class='str'>&quot;files&quot;</span><span class='op'>]</span><span class='op'>[</span><span class='nam'>codec_name</span><span class='op'>]</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1048' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>files</span><span class='op'>[</span><span class='str'>&#39;hd&#39;</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='op'>(</span><span class='nam'>codec_name</span><span class='op'>,</span> <span class='nam'>codec_extension</span><span class='op'>,</span> <span class='str'>&#39;hd&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1049' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='str'>&#39;sd&#39;</span> <span class='key'>in</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>&quot;video&quot;</span><span class='op'>]</span><span class='op'>[</span><span class='str'>&quot;files&quot;</span><span class='op'>]</span><span class='op'>[</span><span class='nam'>codec_name</span><span class='op'>]</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1050' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>files</span><span class='op'>[</span><span class='str'>&#39;sd&#39;</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='op'>(</span><span class='nam'>codec_name</span><span class='op'>,</span> <span class='nam'>codec_extension</span><span class='op'>,</span> <span class='str'>&#39;sd&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1051' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1052' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>files</span><span class='op'>[</span><span class='str'>&#39;other&#39;</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='op'>(</span><span class='nam'>codec_name</span><span class='op'>,</span> <span class='nam'>codec_extension</span><span class='op'>,</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>&quot;video&quot;</span><span class='op'>]</span><span class='op'>[</span><span class='str'>&quot;files&quot;</span><span class='op'>]</span><span class='op'>[</span><span class='nam'>codec_name</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1053' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1054' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>quality</span> <span class='key'>in</span> <span class='op'>(</span><span class='str'>&#39;hd&#39;</span><span class='op'>,</span> <span class='str'>&#39;sd&#39;</span><span class='op'>,</span> <span class='str'>&#39;other&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1055' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>files</span><span class='op'>[</span><span class='nam'>quality</span><span class='op'>]</span><span class='op'>)</span> <span class='op'>&gt;</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1056' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_quality</span> <span class='op'>=</span> <span class='nam'>files</span><span class='op'>[</span><span class='nam'>quality</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='num'>2</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1057' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_codec</span> <span class='op'>=</span> <span class='nam'>files</span><span class='op'>[</span><span class='nam'>quality</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1058' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_extension</span> <span class='op'>=</span> <span class='nam'>files</span><span class='op'>[</span><span class='nam'>quality</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1059' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[vimeo] %s: Downloading %s file at %s quality&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>video_id</span><span class='op'>,</span> <span class='nam'>video_codec</span><span class='op'>.</span><span class='nam'>upper</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>video_quality</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1060' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span><span class='strut'>&nbsp;</span></p>
<p id='t1061' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1062' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: no known codec found&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1063' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1064' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1065' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='str'>&quot;http://player.vimeo.com/play_redirect?clip_id=%s&amp;sig=%s&amp;time=%s&amp;quality=%s&amp;codecs=%s&amp;type=moogaloop_local&amp;embed_location=&quot;</span> <span class='xx'>\</span><span class='strut'>&nbsp;</span></p>
<p id='t1066' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>%</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>,</span> <span class='nam'>sig</span><span class='op'>,</span> <span class='nam'>timestamp</span><span class='op'>,</span> <span class='nam'>video_quality</span><span class='op'>,</span> <span class='nam'>video_codec</span><span class='op'>.</span><span class='nam'>upper</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1067' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1068' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t1069' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp;&nbsp; <span class='nam'>video_id</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1070' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1071' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>video_uploader</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1072' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader_id&#39;</span><span class='op'>:</span> <span class='nam'>video_uploader_id</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1073' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span>&nbsp; <span class='nam'>video_upload_date</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1074' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span>&nbsp; &nbsp; <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1075' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='nam'>video_extension</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1076' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;thumbnail&#39;</span><span class='op'>:</span>&nbsp; &nbsp; <span class='nam'>video_thumbnail</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1077' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;description&#39;</span><span class='op'>:</span>&nbsp; <span class='nam'>video_description</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1078' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1079' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1080' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1081' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>ArteTvIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1082' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;arte.tv information extractor.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1083' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1084' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;(?:http://)?videos\.arte\.tv/(?:fr|de)/videos/.*&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1085' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_LIVE_URL</span> <span class='op'>=</span> <span class='str'>r&#39;index-[0-9]+\.html$&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1086' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1087' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;arte.tv&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1088' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1089' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1090' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1091' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1092' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1093' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report webpage download.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1094' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[arte.tv] %s: Downloading webpage&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1095' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1096' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1097' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1098' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[arte.tv] %s: Extracting information&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1099' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1100' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>fetch_webpage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1101' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1102' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1103' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1104' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1105' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1106' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Unable to retrieve video webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1107' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1108' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='nam'>ValueError</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1109' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1110' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1111' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>webpage</span><span class='strut'>&nbsp;</span></p>
<p id='t1112' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1113' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>grep_webpage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='nam'>regex</span><span class='op'>,</span> <span class='nam'>regexFlags</span><span class='op'>,</span> <span class='nam'>matchTuples</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1114' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>page</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>fetch_webpage</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1115' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>regex</span><span class='op'>,</span> <span class='nam'>page</span><span class='op'>,</span> <span class='nam'>regexFlags</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1116' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t1117' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1118' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1119' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1120' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1121' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1122' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='op'>(</span><span class='nam'>i</span><span class='op'>,</span> <span class='nam'>key</span><span class='op'>,</span> <span class='nam'>err</span><span class='op'>)</span> <span class='key'>in</span> <span class='nam'>matchTuples</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1123' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='nam'>i</span><span class='op'>)</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1124' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1125' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1126' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1127' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span><span class='op'>[</span><span class='nam'>key</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='nam'>i</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1128' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1129' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>info</span><span class='strut'>&nbsp;</span></p>
<p id='t1130' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1131' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>extractLiveStream</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1132' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_lang</span> <span class='op'>=</span> <span class='nam'>url</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;/&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>4</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1133' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>grep_webpage</span><span class='op'>(</span><span class='strut'>&nbsp;</span></p>
<p id='t1134' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1135' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>r&#39;src=&quot;(.*?/videothek_js.*?\.js)&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1136' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='num'>0</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1137' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>[</span><span class='strut'>&nbsp;</span></p>
<p id='t1138' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>(</span><span class='num'>1</span><span class='op'>,</span> <span class='str'>&#39;url&#39;</span><span class='op'>,</span> <span class='str'>u&#39;ERROR: Invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1139' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1140' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1141' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>http_host</span> <span class='op'>=</span> <span class='nam'>url</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;/&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='num'>2</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1142' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>next_url</span> <span class='op'>=</span> <span class='str'>&#39;http://%s%s&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>http_host</span><span class='op'>,</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>info</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;url&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1143' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>grep_webpage</span><span class='op'>(</span><span class='strut'>&nbsp;</span></p>
<p id='t1144' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>next_url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1145' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>r&#39;(s_artestras_scst_geoFRDE_&#39;</span> <span class='op'>+</span> <span class='nam'>video_lang</span> <span class='op'>+</span> <span class='str'>&#39;.*?)\&#39;.*?&#39;</span> <span class='op'>+</span><span class='strut'>&nbsp;</span></p>
<p id='t1146' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;(http://.*?\.swf).*?&#39;</span> <span class='op'>+</span><span class='strut'>&nbsp;</span></p>
<p id='t1147' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;(rtmp://.*?)\&#39;&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1148' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>re</span><span class='op'>.</span><span class='nam'>DOTALL</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1149' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>[</span><span class='strut'>&nbsp;</span></p>
<p id='t1150' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>(</span><span class='num'>1</span><span class='op'>,</span> <span class='str'>&#39;path&#39;</span><span class='op'>,</span>&nbsp;&nbsp; <span class='str'>u&#39;ERROR: could not extract video path: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1151' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>(</span><span class='num'>2</span><span class='op'>,</span> <span class='str'>&#39;player&#39;</span><span class='op'>,</span> <span class='str'>u&#39;ERROR: could not extract video player: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1152' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>(</span><span class='num'>3</span><span class='op'>,</span> <span class='str'>&#39;url&#39;</span><span class='op'>,</span>&nbsp; &nbsp; <span class='str'>u&#39;ERROR: could not extract video url: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1153' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1154' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1155' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='str'>u&#39;%s/%s&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>info</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;url&#39;</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>info</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;path&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1156' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1157' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>extractPlus7Stream</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1158' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_lang</span> <span class='op'>=</span> <span class='nam'>url</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;/&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>3</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1159' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>grep_webpage</span><span class='op'>(</span><span class='strut'>&nbsp;</span></p>
<p id='t1160' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1161' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>r&#39;param name=&quot;movie&quot;.*?videorefFileUrl=(http[^\&#39;&quot;&amp;]*)&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1162' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='num'>0</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1163' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>[</span><span class='strut'>&nbsp;</span></p>
<p id='t1164' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>(</span><span class='num'>1</span><span class='op'>,</span> <span class='str'>&#39;url&#39;</span><span class='op'>,</span> <span class='str'>u&#39;ERROR: Invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1165' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1166' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1167' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>next_url</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>info</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;url&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1168' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>grep_webpage</span><span class='op'>(</span><span class='strut'>&nbsp;</span></p>
<p id='t1169' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>next_url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1170' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>r&#39;&lt;video lang=&quot;%s&quot; ref=&quot;(http[^\&#39;&quot;&amp;]*)&#39;</span> <span class='op'>%</span> <span class='nam'>video_lang</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1171' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='num'>0</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1172' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>[</span><span class='strut'>&nbsp;</span></p>
<p id='t1173' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>(</span><span class='num'>1</span><span class='op'>,</span> <span class='str'>&#39;url&#39;</span><span class='op'>,</span> <span class='str'>u&#39;ERROR: Could not find &lt;video&gt; tag: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1174' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1175' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1176' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>next_url</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>info</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;url&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1177' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1178' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>grep_webpage</span><span class='op'>(</span><span class='strut'>&nbsp;</span></p>
<p id='t1179' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>next_url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1180' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>r&#39;&lt;video id=&quot;(.*?)&quot;.*?&gt;.*?&#39;</span> <span class='op'>+</span><span class='strut'>&nbsp;</span></p>
<p id='t1181' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;&lt;name&gt;(.*?)&lt;/name&gt;.*?&#39;</span> <span class='op'>+</span><span class='strut'>&nbsp;</span></p>
<p id='t1182' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;&lt;dateVideo&gt;(.*?)&lt;/dateVideo&gt;.*?&#39;</span> <span class='op'>+</span><span class='strut'>&nbsp;</span></p>
<p id='t1183' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;&lt;url quality=&quot;hd&quot;&gt;(.*?)&lt;/url&gt;&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1184' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>re</span><span class='op'>.</span><span class='nam'>DOTALL</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1185' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>[</span><span class='strut'>&nbsp;</span></p>
<p id='t1186' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>(</span><span class='num'>1</span><span class='op'>,</span> <span class='str'>&#39;id&#39;</span><span class='op'>,</span>&nbsp; &nbsp; <span class='str'>u&#39;ERROR: could not extract video id: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1187' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>(</span><span class='num'>2</span><span class='op'>,</span> <span class='str'>&#39;title&#39;</span><span class='op'>,</span> <span class='str'>u&#39;ERROR: could not extract video title: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1188' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>(</span><span class='num'>3</span><span class='op'>,</span> <span class='str'>&#39;date&#39;</span><span class='op'>,</span>&nbsp; <span class='str'>u&#39;ERROR: could not extract video date: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1189' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>(</span><span class='num'>4</span><span class='op'>,</span> <span class='str'>&#39;url&#39;</span><span class='op'>,</span>&nbsp;&nbsp; <span class='str'>u&#39;ERROR: could not extract video url: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1190' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1191' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1192' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1193' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t1194' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='nam'>info</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;id&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1195' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>info</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;url&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1196' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span>&nbsp; &nbsp;&nbsp; <span class='str'>u&#39;arte.tv&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1197' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span>&nbsp; <span class='nam'>info</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;date&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1198' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;title&#39;</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1199' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>u&#39;mp4&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1200' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;format&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp;&nbsp; <span class='str'>u&#39;NA&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1201' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;player_url&#39;</span><span class='op'>:</span>&nbsp;&nbsp; <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1202' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t1203' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1204' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1205' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>url</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;/&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1206' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1207' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1208' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_LIVE_URL</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1209' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>extractLiveStream</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1210' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1211' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1212' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>extractPlus7Stream</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1213' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1214' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='nam'>info</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1215' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1216' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1217' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>GenericIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1218' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Generic last-resort information extractor.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1219' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1220' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;.*&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1221' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;generic&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1222' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1223' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1224' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1225' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1226' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1227' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report webpage download.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1228' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;WARNING: Falling back on generic information extractor.&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1229' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[generic] %s: Downloading webpage&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1230' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1231' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1232' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1233' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[generic] %s: Extracting information&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1234' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1235' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_following_redirect</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>new_url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1236' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1237' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[redirect] Following redirect to %s&#39;</span> <span class='op'>%</span> <span class='nam'>new_url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1238' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1239' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_test_redirect</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1240' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Check if it is a redirect, like url shorteners, in case restart chain.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1241' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>class</span> <span class='nam'>HeadRequest</span><span class='op'>(</span><span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1242' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>get_method</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1243' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='str'>&quot;HEAD&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1244' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1245' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>class</span> <span class='nam'>HEADRedirectHandler</span><span class='op'>(</span><span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>HTTPRedirectHandler</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1246' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1247' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Subclass the HTTPRedirectHandler to make it use our</span><span class='strut'>&nbsp;</span></p>
<p id='t1248' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; HeadRequest also on the redirected URL</span><span class='strut'>&nbsp;</span></p>
<p id='t1249' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1250' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>redirect_request</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>req</span><span class='op'>,</span> <span class='nam'>fp</span><span class='op'>,</span> <span class='nam'>code</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>,</span> <span class='nam'>headers</span><span class='op'>,</span> <span class='nam'>newurl</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1251' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>code</span> <span class='key'>in</span> <span class='op'>(</span><span class='num'>301</span><span class='op'>,</span> <span class='num'>302</span><span class='op'>,</span> <span class='num'>303</span><span class='op'>,</span> <span class='num'>307</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1252' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>newurl</span> <span class='op'>=</span> <span class='nam'>newurl</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>&#39; &#39;</span><span class='op'>,</span> <span class='str'>&#39;%20&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1253' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>newheaders</span> <span class='op'>=</span> <span class='nam'>dict</span><span class='op'>(</span><span class='op'>(</span><span class='nam'>k</span><span class='op'>,</span><span class='nam'>v</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>k</span><span class='op'>,</span><span class='nam'>v</span> <span class='key'>in</span> <span class='nam'>req</span><span class='op'>.</span><span class='nam'>headers</span><span class='op'>.</span><span class='nam'>items</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1254' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>k</span><span class='op'>.</span><span class='nam'>lower</span><span class='op'>(</span><span class='op'>)</span> <span class='key'>not</span> <span class='key'>in</span> <span class='op'>(</span><span class='str'>&quot;content-length&quot;</span><span class='op'>,</span> <span class='str'>&quot;content-type&quot;</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1255' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>HeadRequest</span><span class='op'>(</span><span class='nam'>newurl</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1256' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='nam'>headers</span><span class='op'>=</span><span class='nam'>newheaders</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1257' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='nam'>origin_req_host</span><span class='op'>=</span><span class='nam'>req</span><span class='op'>.</span><span class='nam'>get_origin_req_host</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1258' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='nam'>unverifiable</span><span class='op'>=</span><span class='nam'>True</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1259' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1260' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>HTTPError</span><span class='op'>(</span><span class='nam'>req</span><span class='op'>.</span><span class='nam'>get_full_url</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>code</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>,</span> <span class='nam'>headers</span><span class='op'>,</span> <span class='nam'>fp</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1261' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1262' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>class</span> <span class='nam'>HTTPMethodFallback</span><span class='op'>(</span><span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>BaseHandler</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1263' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1264' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Fallback to GET if HEAD is not allowed (405 HTTP error)</span><span class='strut'>&nbsp;</span></p>
<p id='t1265' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1266' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>http_error_405</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>req</span><span class='op'>,</span> <span class='nam'>fp</span><span class='op'>,</span> <span class='nam'>code</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>,</span> <span class='nam'>headers</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1267' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fp</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1268' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fp</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1269' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1270' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>newheaders</span> <span class='op'>=</span> <span class='nam'>dict</span><span class='op'>(</span><span class='op'>(</span><span class='nam'>k</span><span class='op'>,</span><span class='nam'>v</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>k</span><span class='op'>,</span><span class='nam'>v</span> <span class='key'>in</span> <span class='nam'>req</span><span class='op'>.</span><span class='nam'>headers</span><span class='op'>.</span><span class='nam'>items</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1271' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>k</span><span class='op'>.</span><span class='nam'>lower</span><span class='op'>(</span><span class='op'>)</span> <span class='key'>not</span> <span class='key'>in</span> <span class='op'>(</span><span class='str'>&quot;content-length&quot;</span><span class='op'>,</span> <span class='str'>&quot;content-type&quot;</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1272' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>parent</span><span class='op'>.</span><span class='nam'>open</span><span class='op'>(</span><span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>req</span><span class='op'>.</span><span class='nam'>get_full_url</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1273' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='nam'>headers</span><span class='op'>=</span><span class='nam'>newheaders</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1274' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='nam'>origin_req_host</span><span class='op'>=</span><span class='nam'>req</span><span class='op'>.</span><span class='nam'>get_origin_req_host</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1275' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='nam'>unverifiable</span><span class='op'>=</span><span class='nam'>True</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1276' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1277' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Build our opener</span><span class='strut'>&nbsp;</span></p>
<p id='t1278' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>opener</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>OpenerDirector</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1279' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>handler</span> <span class='key'>in</span> <span class='op'>[</span><span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>HTTPHandler</span><span class='op'>,</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>HTTPDefaultErrorHandler</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1280' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>HTTPMethodFallback</span><span class='op'>,</span> <span class='nam'>HEADRedirectHandler</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1281' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>HTTPErrorProcessor</span><span class='op'>,</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>HTTPSHandler</span><span class='op'>]</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1282' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>opener</span><span class='op'>.</span><span class='nam'>add_handler</span><span class='op'>(</span><span class='nam'>handler</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1283' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1284' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>response</span> <span class='op'>=</span> <span class='nam'>opener</span><span class='op'>.</span><span class='nam'>open</span><span class='op'>(</span><span class='nam'>HeadRequest</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1285' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>new_url</span> <span class='op'>=</span> <span class='nam'>response</span><span class='op'>.</span><span class='nam'>geturl</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1286' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1287' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>url</span> <span class='op'>==</span> <span class='nam'>new_url</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1288' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>False</span><span class='strut'>&nbsp;</span></p>
<p id='t1289' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1290' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_following_redirect</span><span class='op'>(</span><span class='nam'>new_url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1291' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>download</span><span class='op'>(</span><span class='op'>[</span><span class='nam'>new_url</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1292' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>True</span><span class='strut'>&nbsp;</span></p>
<p id='t1293' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1294' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1295' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_test_redirect</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span> <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1296' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1297' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>url</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;/&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1298' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1299' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1300' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1301' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1302' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1303' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Unable to retrieve video webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1304' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1305' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='nam'>ValueError</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1306' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># since this is the last-resort InfoExtractor, if</span><span class='strut'>&nbsp;</span></p>
<p id='t1307' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># this error is thrown, it&#39;ll be thrown here</span><span class='strut'>&nbsp;</span></p>
<p id='t1308' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1309' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1310' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1311' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1312' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Start with something easy: JW Player in SWFObject</span><span class='strut'>&nbsp;</span></p>
<p id='t1313' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;flashvars: [\&#39;&quot;](?:.*&amp;)?file=(http[^\&#39;&quot;&amp;]*)&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1314' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1315' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Broaden the search a little bit</span><span class='strut'>&nbsp;</span></p>
<p id='t1316' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;[^A-Za-z0-9]?(?:file|source)=(http[^\&#39;&quot;&amp;]*)&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1317' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1318' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1319' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1320' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1321' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># It&#39;s possible that one of the regexes</span><span class='strut'>&nbsp;</span></p>
<p id='t1322' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># matched, but returned an empty group:</span><span class='strut'>&nbsp;</span></p>
<p id='t1323' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1324' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1325' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1326' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1327' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1328' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>basename</span><span class='op'>(</span><span class='nam'>video_url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1329' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1330' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># here&#39;s a fun little line of code for you:</span><span class='strut'>&nbsp;</span></p>
<p id='t1331' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_extension</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>splitext</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>[</span><span class='num'>1</span><span class='op'>:</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1332' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>splitext</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1333' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1334' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># it&#39;s tempting to parse this further, but you would</span><span class='strut'>&nbsp;</span></p>
<p id='t1335' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># have to take into account all the variations like</span><span class='strut'>&nbsp;</span></p>
<p id='t1336' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'>#&nbsp;&nbsp; Video Title - Site Name</span><span class='strut'>&nbsp;</span></p>
<p id='t1337' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'>#&nbsp;&nbsp; Site Name | Video Title</span><span class='strut'>&nbsp;</span></p>
<p id='t1338' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'>#&nbsp;&nbsp; Video Title - Tagline | Site Name</span><span class='strut'>&nbsp;</span></p>
<p id='t1339' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># and so on and so forth; it&#39;s just not practical</span><span class='strut'>&nbsp;</span></p>
<p id='t1340' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;title&gt;(.*)&lt;/title&gt;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1341' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1342' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract title&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1343' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1344' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1345' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1346' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># video uploader is domain name</span><span class='strut'>&nbsp;</span></p>
<p id='t1347' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='str'>r&#39;(?:https?://)?([^/]*)/.*&#39;</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1348' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1349' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract title&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1350' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1351' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_uploader</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1352' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1353' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t1354' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp;&nbsp; <span class='nam'>video_id</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1355' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1356' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>video_uploader</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1357' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span>&nbsp; <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1358' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span>&nbsp; &nbsp; <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1359' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='nam'>video_extension</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1360' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1361' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1362' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1363' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>YoutubeSearchIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1364' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information Extractor for YouTube search queries.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1365' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;ytsearch(\d+|all)?:[\s\S]+&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1366' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_API_URL</span> <span class='op'>=</span> <span class='str'>&#39;https://gdata.youtube.com/feeds/api/videos?q=%s&amp;start-index=%i&amp;max-results=50&amp;v=2&amp;alt=jsonc&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1367' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_max_youtube_results</span> <span class='op'>=</span> <span class='num'>1000</span><span class='strut'>&nbsp;</span></p>
<p id='t1368' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;youtube:search&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1369' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1370' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1371' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1372' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1373' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1374' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report attempt to download search page with given number.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1375' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>query</span> <span class='op'>=</span> <span class='nam'>query</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='nam'>preferredencoding</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1376' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[youtube] query &quot;%s&quot;: Downloading page %s&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1377' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1378' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1379' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1380' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1381' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid search query &quot;%s&quot;&#39;</span> <span class='op'>%</span> <span class='nam'>query</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1382' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1383' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1384' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>prefix</span><span class='op'>,</span> <span class='nam'>query</span> <span class='op'>=</span> <span class='nam'>query</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;:&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1385' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>prefix</span> <span class='op'>=</span> <span class='nam'>prefix</span><span class='op'>[</span><span class='num'>8</span><span class='op'>:</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1386' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>query</span> <span class='op'>=</span> <span class='nam'>query</span><span class='op'>.</span><span class='nam'>encode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1387' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>prefix</span> <span class='op'>==</span> <span class='str'>&#39;&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1388' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1389' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1390' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>prefix</span> <span class='op'>==</span> <span class='str'>&#39;all&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1391' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_max_youtube_results</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1392' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1393' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1394' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1395' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>n</span> <span class='op'>=</span> <span class='nam'>int</span><span class='op'>(</span><span class='nam'>prefix</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1396' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>n</span> <span class='op'>&lt;=</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1397' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid download number %s for query &quot;%s&quot;&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>n</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1398' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1399' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>n</span> <span class='op'>&gt;</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_max_youtube_results</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1400' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u&#39;WARNING: ytsearch returns max %i results (you requested %i)&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_max_youtube_results</span><span class='op'>,</span> <span class='nam'>n</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1401' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>n</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_max_youtube_results</span><span class='strut'>&nbsp;</span></p>
<p id='t1402' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='nam'>n</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1403' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1404' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='nam'>ValueError</span><span class='op'>:</span> <span class='com'># parsing prefix as integer fails</span><span class='strut'>&nbsp;</span></p>
<p id='t1405' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1406' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1407' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1408' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>,</span> <span class='nam'>n</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1409' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Downloads a specified number of results for a query&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1410' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1411' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1412' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>pagenum</span> <span class='op'>=</span> <span class='num'>0</span><span class='strut'>&nbsp;</span></p>
<p id='t1413' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>limit</span> <span class='op'>=</span> <span class='nam'>n</span><span class='strut'>&nbsp;</span></p>
<p id='t1414' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1415' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>while</span> <span class='op'>(</span><span class='num'>50</span> <span class='op'>*</span> <span class='nam'>pagenum</span><span class='op'>)</span> <span class='op'>&lt;</span> <span class='nam'>limit</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1416' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>+</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1417' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>result_url</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_API_URL</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>quote_plus</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>)</span><span class='op'>,</span> <span class='op'>(</span><span class='num'>50</span><span class='op'>*</span><span class='nam'>pagenum</span><span class='op'>)</span><span class='op'>+</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1418' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>result_url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1419' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1420' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>data</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1421' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1422' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download API page: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1423' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1424' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>api_response</span> <span class='op'>=</span> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>loads</span><span class='op'>(</span><span class='nam'>data</span><span class='op'>)</span><span class='op'>[</span><span class='str'>&#39;data&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1425' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1426' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>new_ids</span> <span class='op'>=</span> <span class='nam'>list</span><span class='op'>(</span><span class='nam'>video</span><span class='op'>[</span><span class='str'>&#39;id&#39;</span><span class='op'>]</span> <span class='key'>for</span> <span class='nam'>video</span> <span class='key'>in</span> <span class='nam'>api_response</span><span class='op'>[</span><span class='str'>&#39;items&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1427' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_ids</span> <span class='op'>+=</span> <span class='nam'>new_ids</span><span class='strut'>&nbsp;</span></p>
<p id='t1428' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1429' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>limit</span> <span class='op'>=</span> <span class='nam'>min</span><span class='op'>(</span><span class='nam'>n</span><span class='op'>,</span> <span class='nam'>api_response</span><span class='op'>[</span><span class='str'>&#39;totalItems&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1430' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>pagenum</span> <span class='op'>+=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
<p id='t1431' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1432' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>video_ids</span><span class='op'>)</span> <span class='op'>&gt;</span> <span class='nam'>n</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1433' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='nam'>video_ids</span><span class='op'>[</span><span class='op'>:</span><span class='nam'>n</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1434' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>id</span> <span class='key'>in</span> <span class='nam'>video_ids</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1435' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>download</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;http://www.youtube.com/watch?v=%s&#39;</span> <span class='op'>%</span> <span class='nam'>id</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1436' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1437' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1438' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1439' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>GoogleSearchIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1440' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information Extractor for Google Video search queries.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1441' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;gvsearch(\d+|all)?:[\s\S]+&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1442' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_TEMPLATE_URL</span> <span class='op'>=</span> <span class='str'>&#39;http://video.google.com/videosearch?q=%s+site:video.google.com&amp;start=%s&amp;hl=en&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1443' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VIDEO_INDICATOR</span> <span class='op'>=</span> <span class='str'>r&#39;&lt;a href=&quot;http://video\.google\.com/videoplay\?docid=([^&quot;\&amp;]+)&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1444' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_MORE_PAGES_INDICATOR</span> <span class='op'>=</span> <span class='str'>r&#39;class=&quot;pn&quot; id=&quot;pnnext&quot;&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1445' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_max_google_results</span> <span class='op'>=</span> <span class='num'>1000</span><span class='strut'>&nbsp;</span></p>
<p id='t1446' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;video.google:search&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1447' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1448' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1449' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1450' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1451' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1452' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report attempt to download playlist page with given number.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1453' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>query</span> <span class='op'>=</span> <span class='nam'>query</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='nam'>preferredencoding</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1454' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[video.google] query &quot;%s&quot;: Downloading page %s&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1455' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1456' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1457' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1458' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1459' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid search query &quot;%s&quot;&#39;</span> <span class='op'>%</span> <span class='nam'>query</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1460' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1461' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1462' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>prefix</span><span class='op'>,</span> <span class='nam'>query</span> <span class='op'>=</span> <span class='nam'>query</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;:&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1463' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>prefix</span> <span class='op'>=</span> <span class='nam'>prefix</span><span class='op'>[</span><span class='num'>8</span><span class='op'>:</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1464' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>query</span> <span class='op'>=</span> <span class='nam'>query</span><span class='op'>.</span><span class='nam'>encode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1465' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>prefix</span> <span class='op'>==</span> <span class='str'>&#39;&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1466' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1467' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1468' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>prefix</span> <span class='op'>==</span> <span class='str'>&#39;all&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1469' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_max_google_results</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1470' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1471' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1472' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1473' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>n</span> <span class='op'>=</span> <span class='nam'>int</span><span class='op'>(</span><span class='nam'>prefix</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1474' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>n</span> <span class='op'>&lt;=</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1475' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid download number %s for query &quot;%s&quot;&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>n</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1476' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1477' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>n</span> <span class='op'>&gt;</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_max_google_results</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1478' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u&#39;WARNING: gvsearch returns max %i results (you requested %i)&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_max_google_results</span><span class='op'>,</span> <span class='nam'>n</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1479' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>n</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_max_google_results</span><span class='strut'>&nbsp;</span></p>
<p id='t1480' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='nam'>n</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1481' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1482' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='nam'>ValueError</span><span class='op'>:</span> <span class='com'># parsing prefix as integer fails</span><span class='strut'>&nbsp;</span></p>
<p id='t1483' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1484' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1485' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1486' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>,</span> <span class='nam'>n</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1487' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Downloads a specified number of results for a query&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1488' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1489' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1490' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>pagenum</span> <span class='op'>=</span> <span class='num'>0</span><span class='strut'>&nbsp;</span></p>
<p id='t1491' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1492' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>while</span> <span class='nam'>True</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1493' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1494' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>result_url</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_TEMPLATE_URL</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>quote_plus</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>*</span><span class='num'>10</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1495' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>result_url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1496' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1497' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>page</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1498' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1499' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1500' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1501' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1502' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract video identifiers</span><span class='strut'>&nbsp;</span></p>
<p id='t1503' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>mobj</span> <span class='key'>in</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>finditer</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VIDEO_INDICATOR</span><span class='op'>,</span> <span class='nam'>page</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1504' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1505' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>video_id</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>video_ids</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1506' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_ids</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1507' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>video_ids</span><span class='op'>)</span> <span class='op'>==</span> <span class='nam'>n</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1508' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Specified n videos reached</span><span class='strut'>&nbsp;</span></p>
<p id='t1509' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>id</span> <span class='key'>in</span> <span class='nam'>video_ids</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1510' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>download</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;http://video.google.com/videoplay?docid=%s&#39;</span> <span class='op'>%</span> <span class='nam'>id</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1511' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1512' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1513' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_MORE_PAGES_INDICATOR</span><span class='op'>,</span> <span class='nam'>page</span><span class='op'>)</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1514' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>id</span> <span class='key'>in</span> <span class='nam'>video_ids</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1515' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>download</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;http://video.google.com/videoplay?docid=%s&#39;</span> <span class='op'>%</span> <span class='nam'>id</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1516' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1517' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1518' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>pagenum</span> <span class='op'>=</span> <span class='nam'>pagenum</span> <span class='op'>+</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
<p id='t1519' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1520' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1521' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>YahooSearchIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1522' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information Extractor for Yahoo! Video search queries.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1523' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1524' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_WORKING</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'>&nbsp;</span></p>
<p id='t1525' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;yvsearch(\d+|all)?:[\s\S]+&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1526' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_TEMPLATE_URL</span> <span class='op'>=</span> <span class='str'>&#39;http://video.yahoo.com/search/?p=%s&amp;o=%s&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1527' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VIDEO_INDICATOR</span> <span class='op'>=</span> <span class='str'>r&#39;href=&quot;http://video\.yahoo\.com/watch/([0-9]+/[0-9]+)&quot;&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1528' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_MORE_PAGES_INDICATOR</span> <span class='op'>=</span> <span class='str'>r&#39;\s*Next&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1529' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_max_yahoo_results</span> <span class='op'>=</span> <span class='num'>1000</span><span class='strut'>&nbsp;</span></p>
<p id='t1530' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;video.yahoo:search&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1531' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1532' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1533' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1534' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1535' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1536' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report attempt to download playlist page with given number.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1537' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>query</span> <span class='op'>=</span> <span class='nam'>query</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='nam'>preferredencoding</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1538' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[video.yahoo] query &quot;%s&quot;: Downloading page %s&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1539' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1540' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1541' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1542' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1543' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid search query &quot;%s&quot;&#39;</span> <span class='op'>%</span> <span class='nam'>query</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1544' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1545' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1546' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>prefix</span><span class='op'>,</span> <span class='nam'>query</span> <span class='op'>=</span> <span class='nam'>query</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;:&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1547' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>prefix</span> <span class='op'>=</span> <span class='nam'>prefix</span><span class='op'>[</span><span class='num'>8</span><span class='op'>:</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1548' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>query</span> <span class='op'>=</span> <span class='nam'>query</span><span class='op'>.</span><span class='nam'>encode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1549' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>prefix</span> <span class='op'>==</span> <span class='str'>&#39;&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1550' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1551' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1552' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>prefix</span> <span class='op'>==</span> <span class='str'>&#39;all&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1553' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_max_yahoo_results</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1554' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1555' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1556' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1557' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>n</span> <span class='op'>=</span> <span class='nam'>int</span><span class='op'>(</span><span class='nam'>prefix</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1558' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>n</span> <span class='op'>&lt;=</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1559' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid download number %s for query &quot;%s&quot;&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>n</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1560' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1561' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>n</span> <span class='op'>&gt;</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_max_yahoo_results</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1562' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u&#39;WARNING: yvsearch returns max %i results (you requested %i)&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_max_yahoo_results</span><span class='op'>,</span> <span class='nam'>n</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1563' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>n</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_max_yahoo_results</span><span class='strut'>&nbsp;</span></p>
<p id='t1564' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='nam'>n</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1565' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1566' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='nam'>ValueError</span><span class='op'>:</span> <span class='com'># parsing prefix as integer fails</span><span class='strut'>&nbsp;</span></p>
<p id='t1567' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1568' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1569' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1570' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_download_n_results</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>query</span><span class='op'>,</span> <span class='nam'>n</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1571' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Downloads a specified number of results for a query&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1572' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1573' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1574' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>already_seen</span> <span class='op'>=</span> <span class='nam'>set</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1575' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>pagenum</span> <span class='op'>=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
<p id='t1576' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1577' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>while</span> <span class='nam'>True</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1578' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1579' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>result_url</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_TEMPLATE_URL</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>quote_plus</span><span class='op'>(</span><span class='nam'>query</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1580' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>result_url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1581' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1582' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>page</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1583' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1584' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1585' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1586' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1587' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract video identifiers</span><span class='strut'>&nbsp;</span></p>
<p id='t1588' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>mobj</span> <span class='key'>in</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>finditer</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VIDEO_INDICATOR</span><span class='op'>,</span> <span class='nam'>page</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1589' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1590' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>video_id</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>already_seen</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1591' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_ids</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1592' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>already_seen</span><span class='op'>.</span><span class='nam'>add</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1593' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>video_ids</span><span class='op'>)</span> <span class='op'>==</span> <span class='nam'>n</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1594' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Specified n videos reached</span><span class='strut'>&nbsp;</span></p>
<p id='t1595' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>id</span> <span class='key'>in</span> <span class='nam'>video_ids</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1596' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>download</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;http://video.yahoo.com/watch/%s&#39;</span> <span class='op'>%</span> <span class='nam'>id</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1597' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1598' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1599' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_MORE_PAGES_INDICATOR</span><span class='op'>,</span> <span class='nam'>page</span><span class='op'>)</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1600' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>id</span> <span class='key'>in</span> <span class='nam'>video_ids</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1601' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>download</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;http://video.yahoo.com/watch/%s&#39;</span> <span class='op'>%</span> <span class='nam'>id</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1602' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1603' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1604' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>pagenum</span> <span class='op'>=</span> <span class='nam'>pagenum</span> <span class='op'>+</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
<p id='t1605' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1606' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1607' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>YoutubePlaylistIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1608' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information Extractor for YouTube playlists.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1609' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1610' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;(?:(?:https?://)?(?:\w+\.)?youtube\.com/(?:(?:course|view_play_list|my_playlists|artist|playlist)\?.*?(p|a|list)=|user/.*?/user/|p/|user/.*?#[pg]/c/)(?:PL|EC)?|PL|EC)([0-9A-Za-z-_]{10,})(?:/.*?/([0-9A-Za-z_-]+))?.*&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1611' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_TEMPLATE_URL</span> <span class='op'>=</span> <span class='str'>&#39;http://www.youtube.com/%s?%s=%s&amp;page=%s&amp;gl=US&amp;hl=en&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1612' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VIDEO_INDICATOR_TEMPLATE</span> <span class='op'>=</span> <span class='str'>r&#39;/watch\?v=(.+?)&amp;amp;([^&amp;&quot;]+&amp;amp;)*list=.*?%s&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1613' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_MORE_PAGES_INDICATOR</span> <span class='op'>=</span> <span class='str'>u&quot;Next \N{RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK}&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1614' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;youtube:playlist&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1615' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1616' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1617' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1618' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1619' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>playlist_id</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1620' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report attempt to download playlist page with given number.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1621' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[youtube] PL %s: Downloading page #%s&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>playlist_id</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1622' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1623' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1624' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract playlist id</span><span class='strut'>&nbsp;</span></p>
<p id='t1625' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1626' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1627' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid url: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1628' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1629' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1630' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Single video case</span><span class='strut'>&nbsp;</span></p>
<p id='t1631' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>3</span><span class='op'>)</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1632' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>download</span><span class='op'>(</span><span class='op'>[</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>3</span><span class='op'>)</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1633' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1634' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1635' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Download playlist pages</span><span class='strut'>&nbsp;</span></p>
<p id='t1636' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># prefix is &#39;p&#39; as default for playlists but there are other types that need extra care</span><span class='strut'>&nbsp;</span></p>
<p id='t1637' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>playlist_prefix</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1638' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>playlist_prefix</span> <span class='op'>==</span> <span class='str'>&#39;a&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1639' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>playlist_access</span> <span class='op'>=</span> <span class='str'>&#39;artist&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1640' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1641' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>playlist_prefix</span> <span class='op'>=</span> <span class='str'>&#39;p&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1642' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>playlist_access</span> <span class='op'>=</span> <span class='str'>&#39;view_play_list&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1643' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>playlist_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>2</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1644' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1645' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>pagenum</span> <span class='op'>=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
<p id='t1646' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1647' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>while</span> <span class='nam'>True</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1648' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>playlist_id</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1649' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>url</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_TEMPLATE_URL</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>playlist_access</span><span class='op'>,</span> <span class='nam'>playlist_prefix</span><span class='op'>,</span> <span class='nam'>playlist_id</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1650' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1651' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1652' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>page</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1653' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1654' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1655' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1656' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1657' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract video identifiers</span><span class='strut'>&nbsp;</span></p>
<p id='t1658' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>ids_in_page</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1659' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>mobj</span> <span class='key'>in</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>finditer</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VIDEO_INDICATOR_TEMPLATE</span> <span class='op'>%</span> <span class='nam'>playlist_id</span><span class='op'>,</span> <span class='nam'>page</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1660' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>ids_in_page</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1661' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>ids_in_page</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1662' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_ids</span><span class='op'>.</span><span class='nam'>extend</span><span class='op'>(</span><span class='nam'>ids_in_page</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1663' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1664' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_MORE_PAGES_INDICATOR</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>page</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1665' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span><span class='strut'>&nbsp;</span></p>
<p id='t1666' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>pagenum</span> <span class='op'>=</span> <span class='nam'>pagenum</span> <span class='op'>+</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
<p id='t1667' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1668' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>total</span> <span class='op'>=</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>video_ids</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1669' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1670' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>playliststart</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;playliststart&#39;</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span> <span class='op'>-</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
<p id='t1671' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>playlistend</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;playlistend&#39;</span><span class='op'>,</span> <span class='op'>-</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1672' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>playlistend</span> <span class='op'>==</span> <span class='op'>-</span><span class='num'>1</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1673' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='nam'>video_ids</span><span class='op'>[</span><span class='nam'>playliststart</span><span class='op'>:</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1674' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1675' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='nam'>video_ids</span><span class='op'>[</span><span class='nam'>playliststart</span><span class='op'>:</span><span class='nam'>playlistend</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1676' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1677' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>video_ids</span><span class='op'>)</span> <span class='op'>==</span> <span class='nam'>total</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1678' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[youtube] PL %s: Found %i videos&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>playlist_id</span><span class='op'>,</span> <span class='nam'>total</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1679' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1680' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[youtube] PL %s: Found %i videos, downloading %i&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>playlist_id</span><span class='op'>,</span> <span class='nam'>total</span><span class='op'>,</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>video_ids</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1681' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1682' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>id</span> <span class='key'>in</span> <span class='nam'>video_ids</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1683' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>download</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;http://www.youtube.com/watch?v=%s&#39;</span> <span class='op'>%</span> <span class='nam'>id</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1684' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1685' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1686' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1687' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>YoutubeChannelIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1688' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information Extractor for YouTube channels.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1689' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1690' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&quot;^(?:https?://)?(?:youtu\.be|(?:\w+\.)?youtube(?:-nocookie)?\.com)/channel/([0-9A-Za-z_-]+)(?:/.*)?$&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1691' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_TEMPLATE_URL</span> <span class='op'>=</span> <span class='str'>&#39;http://www.youtube.com/channel/%s/videos?sort=da&amp;flow=list&amp;view=0&amp;page=%s&amp;gl=US&amp;hl=en&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1692' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_MORE_PAGES_INDICATOR</span> <span class='op'>=</span> <span class='str'>u&quot;Next \N{RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK}&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1693' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;youtube:channel&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1694' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1695' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>channel_id</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1696' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report attempt to download channel page with given number.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1697' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[youtube] Channel %s: Downloading page #%s&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>channel_id</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1698' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1699' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1700' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract channel id</span><span class='strut'>&nbsp;</span></p>
<p id='t1701' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1702' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1703' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid url: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1704' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1705' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1706' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Download channel pages</span><span class='strut'>&nbsp;</span></p>
<p id='t1707' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>channel_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1708' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1709' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>pagenum</span> <span class='op'>=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
<p id='t1710' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1711' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>while</span> <span class='nam'>True</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1712' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>channel_id</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1713' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>url</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_TEMPLATE_URL</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>channel_id</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1714' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1715' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1716' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>page</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1717' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1718' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1719' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1720' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1721' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract video identifiers</span><span class='strut'>&nbsp;</span></p>
<p id='t1722' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>ids_in_page</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1723' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>mobj</span> <span class='key'>in</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>finditer</span><span class='op'>(</span><span class='str'>r&#39;href=&quot;/watch\?v=([0-9A-Za-z_-]+)&amp;&#39;</span><span class='op'>,</span> <span class='nam'>page</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1724' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>ids_in_page</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1725' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>ids_in_page</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1726' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_ids</span><span class='op'>.</span><span class='nam'>extend</span><span class='op'>(</span><span class='nam'>ids_in_page</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1727' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1728' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_MORE_PAGES_INDICATOR</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>page</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1729' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span><span class='strut'>&nbsp;</span></p>
<p id='t1730' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>pagenum</span> <span class='op'>=</span> <span class='nam'>pagenum</span> <span class='op'>+</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
<p id='t1731' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1732' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[youtube] Channel %s: Found %i videos&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>channel_id</span><span class='op'>,</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>video_ids</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1733' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1734' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>id</span> <span class='key'>in</span> <span class='nam'>video_ids</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1735' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>download</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;http://www.youtube.com/watch?v=%s&#39;</span> <span class='op'>%</span> <span class='nam'>id</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1736' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1737' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1738' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1739' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>YoutubeUserIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1740' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information Extractor for YouTube users.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1741' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1742' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;(?:(?:(?:https?://)?(?:\w+\.)?youtube\.com/user/)|ytuser:)([A-Za-z0-9_-]+)&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1743' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_TEMPLATE_URL</span> <span class='op'>=</span> <span class='str'>&#39;http://gdata.youtube.com/feeds/api/users/%s&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1744' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_GDATA_PAGE_SIZE</span> <span class='op'>=</span> <span class='num'>50</span><span class='strut'>&nbsp;</span></p>
<p id='t1745' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_GDATA_URL</span> <span class='op'>=</span> <span class='str'>&#39;http://gdata.youtube.com/feeds/api/users/%s/uploads?max-results=%d&amp;start-index=%d&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1746' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VIDEO_INDICATOR</span> <span class='op'>=</span> <span class='str'>r&#39;/watch\?v=(.+?)[\&lt;&amp;]&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1747' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;youtube:user&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1748' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1749' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1750' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1751' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1752' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>username</span><span class='op'>,</span> <span class='nam'>start_index</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1753' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report attempt to download user page.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1754' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[youtube] user %s: Downloading video ids from %d to %d&#39;</span> <span class='op'>%</span><span class='strut'>&nbsp;</span></p>
<p id='t1755' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>(</span><span class='nam'>username</span><span class='op'>,</span> <span class='nam'>start_index</span><span class='op'>,</span> <span class='nam'>start_index</span> <span class='op'>+</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_GDATA_PAGE_SIZE</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1756' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1757' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1758' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract username</span><span class='strut'>&nbsp;</span></p>
<p id='t1759' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1760' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1761' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid url: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1762' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1763' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1764' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>username</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1765' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1766' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Download video ids using YouTube Data API. Result size per</span><span class='strut'>&nbsp;</span></p>
<p id='t1767' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># query is limited (currently to 50 videos) so we need to query</span><span class='strut'>&nbsp;</span></p>
<p id='t1768' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># page by page until there are no video ids - it means we got</span><span class='strut'>&nbsp;</span></p>
<p id='t1769' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># all of them.</span><span class='strut'>&nbsp;</span></p>
<p id='t1770' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1771' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1772' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>pagenum</span> <span class='op'>=</span> <span class='num'>0</span><span class='strut'>&nbsp;</span></p>
<p id='t1773' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1774' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>while</span> <span class='nam'>True</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1775' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>start_index</span> <span class='op'>=</span> <span class='nam'>pagenum</span> <span class='op'>*</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_GDATA_PAGE_SIZE</span> <span class='op'>+</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
<p id='t1776' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>username</span><span class='op'>,</span> <span class='nam'>start_index</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1777' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1778' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_GDATA_URL</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>username</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_GDATA_PAGE_SIZE</span><span class='op'>,</span> <span class='nam'>start_index</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1779' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1780' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1781' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>page</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1782' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1783' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1784' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1785' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1786' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract video identifiers</span><span class='strut'>&nbsp;</span></p>
<p id='t1787' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>ids_in_page</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1788' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1789' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>mobj</span> <span class='key'>in</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>finditer</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VIDEO_INDICATOR</span><span class='op'>,</span> <span class='nam'>page</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1790' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>ids_in_page</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1791' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>ids_in_page</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1792' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1793' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_ids</span><span class='op'>.</span><span class='nam'>extend</span><span class='op'>(</span><span class='nam'>ids_in_page</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1794' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1795' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># A little optimization - if current page is not</span><span class='strut'>&nbsp;</span></p>
<p id='t1796' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># &quot;full&quot;, ie. does not contain PAGE_SIZE video ids then</span><span class='strut'>&nbsp;</span></p>
<p id='t1797' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># we can assume that this page is the last one - there</span><span class='strut'>&nbsp;</span></p>
<p id='t1798' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># are no more ids on further pages - no need to query</span><span class='strut'>&nbsp;</span></p>
<p id='t1799' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># again.</span><span class='strut'>&nbsp;</span></p>
<p id='t1800' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1801' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>ids_in_page</span><span class='op'>)</span> <span class='op'>&lt;</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_GDATA_PAGE_SIZE</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1802' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span><span class='strut'>&nbsp;</span></p>
<p id='t1803' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1804' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>pagenum</span> <span class='op'>+=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
<p id='t1805' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1806' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>all_ids_count</span> <span class='op'>=</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>video_ids</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1807' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>playliststart</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;playliststart&#39;</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span> <span class='op'>-</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
<p id='t1808' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>playlistend</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;playlistend&#39;</span><span class='op'>,</span> <span class='op'>-</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1809' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1810' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>playlistend</span> <span class='op'>==</span> <span class='op'>-</span><span class='num'>1</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1811' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='nam'>video_ids</span><span class='op'>[</span><span class='nam'>playliststart</span><span class='op'>:</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1812' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1813' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='nam'>video_ids</span><span class='op'>[</span><span class='nam'>playliststart</span><span class='op'>:</span><span class='nam'>playlistend</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1814' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1815' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&quot;[youtube] user %s: Collected %d video ids (downloading %d of them)&quot;</span> <span class='op'>%</span><span class='strut'>&nbsp;</span></p>
<p id='t1816' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>(</span><span class='nam'>username</span><span class='op'>,</span> <span class='nam'>all_ids_count</span><span class='op'>,</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>video_ids</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1817' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1818' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>video_id</span> <span class='key'>in</span> <span class='nam'>video_ids</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1819' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>download</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;http://www.youtube.com/watch?v=%s&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1820' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1821' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1822' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>BlipTVUserIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1823' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information Extractor for blip.tv users.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1824' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1825' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;(?:(?:(?:https?://)?(?:\w+\.)?blip\.tv/)|bliptvuser:)([^/]+)/*$&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1826' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_PAGE_SIZE</span> <span class='op'>=</span> <span class='num'>12</span><span class='strut'>&nbsp;</span></p>
<p id='t1827' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;blip.tv:user&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1828' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1829' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1830' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1831' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1832' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>username</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1833' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report attempt to download user page.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1834' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[%s] user %s: Downloading video ids from page %d&#39;</span> <span class='op'>%</span><span class='strut'>&nbsp;</span></p>
<p id='t1835' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>username</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1836' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1837' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1838' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract username</span><span class='strut'>&nbsp;</span></p>
<p id='t1839' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1840' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1841' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid url: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1842' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1843' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1844' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>username</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1845' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1846' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>page_base</span> <span class='op'>=</span> <span class='str'>&#39;http://m.blip.tv/pr/show_get_full_episode_list?users_id=%s&amp;lite=0&amp;esi=1&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1847' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1848' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1849' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1850' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1851' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>page</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1852' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;data-users-id=&quot;([^&quot;]+)&quot;&#39;</span><span class='op'>,</span> <span class='nam'>page</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1853' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>page_base</span> <span class='op'>=</span> <span class='nam'>page_base</span> <span class='op'>%</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1854' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1855' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1856' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1857' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1858' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1859' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Download video ids using BlipTV Ajax calls. Result size per</span><span class='strut'>&nbsp;</span></p>
<p id='t1860' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># query is limited (currently to 12 videos) so we need to query</span><span class='strut'>&nbsp;</span></p>
<p id='t1861' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># page by page until there are no video ids - it means we got</span><span class='strut'>&nbsp;</span></p>
<p id='t1862' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># all of them.</span><span class='strut'>&nbsp;</span></p>
<p id='t1863' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1864' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1865' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>pagenum</span> <span class='op'>=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
<p id='t1866' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1867' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>while</span> <span class='nam'>True</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1868' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>username</span><span class='op'>,</span> <span class='nam'>pagenum</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1869' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1870' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span> <span class='nam'>page_base</span> <span class='op'>+</span> <span class='str'>&quot;&amp;page=&quot;</span> <span class='op'>+</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>pagenum</span><span class='op'>)</span> <span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1871' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1872' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1873' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>page</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1874' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1875' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1876' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1877' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1878' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract video identifiers</span><span class='strut'>&nbsp;</span></p>
<p id='t1879' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>ids_in_page</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1880' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1881' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>mobj</span> <span class='key'>in</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>finditer</span><span class='op'>(</span><span class='str'>r&#39;href=&quot;/([^&quot;]+)&quot;&#39;</span><span class='op'>,</span> <span class='nam'>page</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1882' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>ids_in_page</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1883' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>ids_in_page</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1884' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1885' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_ids</span><span class='op'>.</span><span class='nam'>extend</span><span class='op'>(</span><span class='nam'>ids_in_page</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1886' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1887' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># A little optimization - if current page is not</span><span class='strut'>&nbsp;</span></p>
<p id='t1888' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># &quot;full&quot;, ie. does not contain PAGE_SIZE video ids then</span><span class='strut'>&nbsp;</span></p>
<p id='t1889' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># we can assume that this page is the last one - there</span><span class='strut'>&nbsp;</span></p>
<p id='t1890' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># are no more ids on further pages - no need to query</span><span class='strut'>&nbsp;</span></p>
<p id='t1891' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># again.</span><span class='strut'>&nbsp;</span></p>
<p id='t1892' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1893' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>ids_in_page</span><span class='op'>)</span> <span class='op'>&lt;</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_PAGE_SIZE</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1894' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span><span class='strut'>&nbsp;</span></p>
<p id='t1895' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1896' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>pagenum</span> <span class='op'>+=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
<p id='t1897' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1898' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>all_ids_count</span> <span class='op'>=</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>video_ids</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1899' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>playliststart</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;playliststart&#39;</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span> <span class='op'>-</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
<p id='t1900' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>playlistend</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;playlistend&#39;</span><span class='op'>,</span> <span class='op'>-</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1901' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1902' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>playlistend</span> <span class='op'>==</span> <span class='op'>-</span><span class='num'>1</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1903' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='nam'>video_ids</span><span class='op'>[</span><span class='nam'>playliststart</span><span class='op'>:</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1904' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1905' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_ids</span> <span class='op'>=</span> <span class='nam'>video_ids</span><span class='op'>[</span><span class='nam'>playliststart</span><span class='op'>:</span><span class='nam'>playlistend</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1906' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1907' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&quot;[%s] user %s: Collected %d video ids (downloading %d of them)&quot;</span> <span class='op'>%</span><span class='strut'>&nbsp;</span></p>
<p id='t1908' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>username</span><span class='op'>,</span> <span class='nam'>all_ids_count</span><span class='op'>,</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>video_ids</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1909' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1910' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>video_id</span> <span class='key'>in</span> <span class='nam'>video_ids</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1911' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>download</span><span class='op'>(</span><span class='op'>[</span><span class='str'>u&#39;http://blip.tv/&#39;</span><span class='op'>+</span><span class='nam'>video_id</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1912' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1913' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1914' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>DepositFilesIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1915' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information extractor for depositfiles.com&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1916' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1917' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;(?:http://)?(?:\w+\.)?depositfiles\.com/(?:../(?#locale))?files/(.+)&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1918' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1919' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1920' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report webpage download.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1921' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[DepositFiles] %s: Downloading webpage&#39;</span> <span class='op'>%</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1922' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1923' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1924' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1925' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[DepositFiles] %s: Extracting information&#39;</span> <span class='op'>%</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1926' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1927' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1928' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file_id</span> <span class='op'>=</span> <span class='nam'>url</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;/&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1929' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Rebuild url in english locale</span><span class='strut'>&nbsp;</span></p>
<p id='t1930' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>url</span> <span class='op'>=</span> <span class='str'>&#39;http://depositfiles.com/en/files/&#39;</span> <span class='op'>+</span> <span class='nam'>file_id</span><span class='strut'>&nbsp;</span></p>
<p id='t1931' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1932' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Retrieve file webpage with &#39;Free download&#39; button pressed</span><span class='strut'>&nbsp;</span></p>
<p id='t1933' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>free_download_indication</span> <span class='op'>=</span> <span class='op'>{</span> <span class='str'>&#39;gateway_result&#39;</span> <span class='op'>:</span> <span class='str'>&#39;1&#39;</span> <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t1934' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>,</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>urlencode</span><span class='op'>(</span><span class='nam'>free_download_indication</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1935' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1936' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>file_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1937' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1938' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1939' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Unable to retrieve file webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1940' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1941' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1942' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Search for the real file URL</span><span class='strut'>&nbsp;</span></p>
<p id='t1943' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;form action=&quot;(http://fileshare.+?)&quot;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1944' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='op'>(</span><span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>)</span> <span class='key'>or</span> <span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1945' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Try to figure out reason of the error.</span><span class='strut'>&nbsp;</span></p>
<p id='t1946' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;strong&gt;(Attention.*?)&lt;/strong&gt;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>DOTALL</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1947' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='op'>(</span><span class='nam'>mobj</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>)</span> <span class='key'>and</span> <span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1948' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>restriction_message</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>sub</span><span class='op'>(</span><span class='str'>&#39;\s+&#39;</span><span class='op'>,</span> <span class='str'>&#39; &#39;</span><span class='op'>,</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1949' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: %s&#39;</span> <span class='op'>%</span> <span class='nam'>restriction_message</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1950' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1951' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract download URL from: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1952' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1953' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1954' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file_url</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1955' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file_extension</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>splitext</span><span class='op'>(</span><span class='nam'>file_url</span><span class='op'>)</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>[</span><span class='num'>1</span><span class='op'>:</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1956' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1957' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Search for file title</span><span class='strut'>&nbsp;</span></p>
<p id='t1958' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;b title=&quot;(.*?)&quot;&gt;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1959' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1960' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract title&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1961' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t1962' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file_title</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1963' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1964' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t1965' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp;&nbsp; <span class='nam'>file_id</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1966' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='nam'>file_url</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1967' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1968' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span>&nbsp; <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1969' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span>&nbsp; &nbsp; <span class='nam'>file_title</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1970' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='nam'>file_extension</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1971' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1972' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1973' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1974' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>FacebookIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1975' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information Extractor for Facebook&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1976' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1977' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_WORKING</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'>&nbsp;</span></p>
<p id='t1978' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;^(?:https?://)?(?:\w+\.)?facebook\.com/(?:video/video|photo)\.php\?(?:.*?)v=(?P&lt;ID&gt;\d+)(?:.*)&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1979' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_LOGIN_URL</span> <span class='op'>=</span> <span class='str'>&#39;https://login.facebook.com/login.php?m&amp;next=http%3A%2F%2Fm.facebook.com%2Fhome.php&amp;&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1980' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_NETRC_MACHINE</span> <span class='op'>=</span> <span class='str'>&#39;facebook&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1981' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_available_formats</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>&#39;video&#39;</span><span class='op'>,</span> <span class='str'>&#39;highqual&#39;</span><span class='op'>,</span> <span class='str'>&#39;lowqual&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t1982' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_video_extensions</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t1983' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;video&#39;</span><span class='op'>:</span> <span class='str'>&#39;mp4&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1984' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;highqual&#39;</span><span class='op'>:</span> <span class='str'>&#39;mp4&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1985' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;lowqual&#39;</span><span class='op'>:</span> <span class='str'>&#39;mp4&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t1986' class='pln'>&nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t1987' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;facebook&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t1988' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1989' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1990' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1991' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1992' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_reporter</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>message</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1993' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Add header and report message.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1994' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[facebook] %s&#39;</span> <span class='op'>%</span> <span class='nam'>message</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1995' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t1996' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_login</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t1997' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report attempt to log in.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t1998' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_reporter</span><span class='op'>(</span><span class='str'>u&#39;Logging in&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t1999' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2000' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_video_webpage_download</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2001' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report attempt to download video webpage.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2002' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_reporter</span><span class='op'>(</span><span class='str'>u&#39;%s: Downloading video webpage&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2003' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2004' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_information_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2005' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report attempt to extract video information.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2006' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_reporter</span><span class='op'>(</span><span class='str'>u&#39;%s: Extracting video information&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2007' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2008' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_parse_page</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_webpage</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2009' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Extract video information from page&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2010' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># General data</span><span class='strut'>&nbsp;</span></p>
<p id='t2011' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>data</span> <span class='op'>=</span> <span class='op'>{</span><span class='str'>&#39;title&#39;</span><span class='op'>:</span> <span class='str'>r&#39;\(&quot;video_title&quot;, &quot;(.*?)&quot;\)&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2012' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;description&#39;</span><span class='op'>:</span> <span class='str'>r&#39;&lt;div class=&quot;datawrap&quot;&gt;(.*?)&lt;/div&gt;&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2013' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;owner&#39;</span><span class='op'>:</span> <span class='str'>r&#39;\(&quot;video_owner_name&quot;, &quot;(.*?)&quot;\)&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2014' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;thumbnail&#39;</span><span class='op'>:</span>&nbsp; <span class='str'>r&#39;\(&quot;thumb_url&quot;, &quot;(?P&lt;THUMB&gt;.*?)&quot;\)&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2015' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t2016' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_info</span> <span class='op'>=</span> <span class='op'>{</span><span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t2017' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>piece</span> <span class='key'>in</span> <span class='nam'>data</span><span class='op'>.</span><span class='nam'>keys</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2018' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>data</span><span class='op'>[</span><span class='nam'>piece</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>video_webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2019' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2020' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_info</span><span class='op'>[</span><span class='nam'>piece</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote_plus</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&quot;unicode_escape&quot;</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2021' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2022' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Video urls</span><span class='strut'>&nbsp;</span></p>
<p id='t2023' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_urls</span> <span class='op'>=</span> <span class='op'>{</span><span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t2024' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>fmt</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_available_formats</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2025' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;\(&quot;%s_src\&quot;, &quot;(.+?)&quot;\)&#39;</span> <span class='op'>%</span> <span class='nam'>fmt</span><span class='op'>,</span> <span class='nam'>video_webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2026' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2027' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># URL is in a Javascript segment inside an escaped Unicode format within</span><span class='strut'>&nbsp;</span></p>
<p id='t2028' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># the generally utf-8 page</span><span class='strut'>&nbsp;</span></p>
<p id='t2029' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_urls</span><span class='op'>[</span><span class='nam'>fmt</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote_plus</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&quot;unicode_escape&quot;</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2030' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_info</span><span class='op'>[</span><span class='str'>&#39;video_urls&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>video_urls</span><span class='strut'>&nbsp;</span></p>
<p id='t2031' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2032' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>video_info</span><span class='strut'>&nbsp;</span></p>
<p id='t2033' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2034' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_initialize</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2035' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2036' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2037' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2038' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>useremail</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t2039' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>password</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t2040' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>downloader_params</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='strut'>&nbsp;</span></p>
<p id='t2041' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2042' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Attempt to use provided username and password or .netrc data</span><span class='strut'>&nbsp;</span></p>
<p id='t2043' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>downloader_params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;username&#39;</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2044' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>useremail</span> <span class='op'>=</span> <span class='nam'>downloader_params</span><span class='op'>[</span><span class='str'>&#39;username&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2045' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>password</span> <span class='op'>=</span> <span class='nam'>downloader_params</span><span class='op'>[</span><span class='str'>&#39;password&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2046' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>downloader_params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;usenetrc&#39;</span><span class='op'>,</span> <span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2047' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2048' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='nam'>netrc</span><span class='op'>.</span><span class='nam'>netrc</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>authenticators</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_NETRC_MACHINE</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2049' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>info</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2050' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>useremail</span> <span class='op'>=</span> <span class='nam'>info</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2051' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>password</span> <span class='op'>=</span> <span class='nam'>info</span><span class='op'>[</span><span class='num'>2</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2052' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2053' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>netrc</span><span class='op'>.</span><span class='nam'>NetrcParseError</span><span class='op'>(</span><span class='str'>&#39;No authenticators for %s&#39;</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_NETRC_MACHINE</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2054' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>IOError</span><span class='op'>,</span> <span class='nam'>netrc</span><span class='op'>.</span><span class='nam'>NetrcParseError</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2055' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u&#39;WARNING: parsing .netrc: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2056' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2057' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2058' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>useremail</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2059' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2060' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2061' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Log in</span><span class='strut'>&nbsp;</span></p>
<p id='t2062' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>login_form</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t2063' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;email&#39;</span><span class='op'>:</span> <span class='nam'>useremail</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2064' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;pass&#39;</span><span class='op'>:</span> <span class='nam'>password</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2065' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;login&#39;</span><span class='op'>:</span> <span class='str'>&#39;Log+In&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2066' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t2067' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_LOGIN_URL</span><span class='op'>,</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>urlencode</span><span class='op'>(</span><span class='nam'>login_form</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2068' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2069' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_login</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2070' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>login_results</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2071' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;form(.*)name=&quot;login&quot;(.*)&lt;/form&gt;&#39;</span><span class='op'>,</span> <span class='nam'>login_results</span><span class='op'>)</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2072' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u&#39;WARNING: unable to log in: bad username/password, or exceded login rate limit (~3/min). Check credentials or wait.&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2073' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2074' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2075' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_stderr</span><span class='op'>(</span><span class='str'>u&#39;WARNING: unable to log in: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2076' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2077' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2078' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2079' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2080' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2081' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2082' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2083' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;ID&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2084' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2085' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Get video webpage</span><span class='strut'>&nbsp;</span></p>
<p id='t2086' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_video_webpage_download</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2087' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='str'>&#39;https://www.facebook.com/video/video.php?v=%s&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2088' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2089' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>page</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2090' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_webpage</span> <span class='op'>=</span> <span class='nam'>page</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2091' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2092' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download video webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2093' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2094' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2095' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Start extracting information</span><span class='strut'>&nbsp;</span></p>
<p id='t2096' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_information_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2097' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2098' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract information</span><span class='strut'>&nbsp;</span></p>
<p id='t2099' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_info</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_parse_page</span><span class='op'>(</span><span class='nam'>video_webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2100' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2101' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># uploader</span><span class='strut'>&nbsp;</span></p>
<p id='t2102' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='str'>&#39;owner&#39;</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>video_info</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2103' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract uploader nickname&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2104' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2105' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_uploader</span> <span class='op'>=</span> <span class='nam'>video_info</span><span class='op'>[</span><span class='str'>&#39;owner&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2106' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2107' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># title</span><span class='strut'>&nbsp;</span></p>
<p id='t2108' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='str'>&#39;title&#39;</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>video_info</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2109' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract video title&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2110' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2111' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>video_info</span><span class='op'>[</span><span class='str'>&#39;title&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2112' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>video_title</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2113' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2114' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># thumbnail image</span><span class='strut'>&nbsp;</span></p>
<p id='t2115' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='str'>&#39;thumbnail&#39;</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>video_info</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2116' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;WARNING: unable to extract video thumbnail&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2117' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_thumbnail</span> <span class='op'>=</span> <span class='str'>&#39;&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2118' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2119' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_thumbnail</span> <span class='op'>=</span> <span class='nam'>video_info</span><span class='op'>[</span><span class='str'>&#39;thumbnail&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2120' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2121' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># upload date</span><span class='strut'>&nbsp;</span></p>
<p id='t2122' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>upload_date</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t2123' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='str'>&#39;upload_date&#39;</span> <span class='key'>in</span> <span class='nam'>video_info</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2124' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>upload_time</span> <span class='op'>=</span> <span class='nam'>video_info</span><span class='op'>[</span><span class='str'>&#39;upload_date&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2125' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>timetuple</span> <span class='op'>=</span> <span class='nam'>email</span><span class='op'>.</span><span class='nam'>utils</span><span class='op'>.</span><span class='nam'>parsedate_tz</span><span class='op'>(</span><span class='nam'>upload_time</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2126' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>timetuple</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2127' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2128' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>upload_date</span> <span class='op'>=</span> <span class='nam'>time</span><span class='op'>.</span><span class='nam'>strftime</span><span class='op'>(</span><span class='str'>&#39;%Y%m%d&#39;</span><span class='op'>,</span> <span class='nam'>timetuple</span><span class='op'>[</span><span class='num'>0</span><span class='op'>:</span><span class='num'>9</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2129' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2130' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>pass</span><span class='strut'>&nbsp;</span></p>
<p id='t2131' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2132' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># description</span><span class='strut'>&nbsp;</span></p>
<p id='t2133' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_description</span> <span class='op'>=</span> <span class='nam'>video_info</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;description&#39;</span><span class='op'>,</span> <span class='str'>&#39;No description available.&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2134' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2135' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>url_map</span> <span class='op'>=</span> <span class='nam'>video_info</span><span class='op'>[</span><span class='str'>&#39;video_urls&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2136' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>url_map</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2137' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Decide which formats to download</span><span class='strut'>&nbsp;</span></p>
<p id='t2138' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>req_format</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;format&#39;</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2139' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>format_limit</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;format_limit&#39;</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2140' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2141' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>format_limit</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span> <span class='key'>and</span> <span class='nam'>format_limit</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_available_formats</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2142' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>format_list</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_available_formats</span><span class='op'>[</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_available_formats</span><span class='op'>.</span><span class='nam'>index</span><span class='op'>(</span><span class='nam'>format_limit</span><span class='op'>)</span><span class='op'>:</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2143' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2144' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>format_list</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_available_formats</span><span class='strut'>&nbsp;</span></p>
<p id='t2145' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>existing_formats</span> <span class='op'>=</span> <span class='op'>[</span><span class='nam'>x</span> <span class='key'>for</span> <span class='nam'>x</span> <span class='key'>in</span> <span class='nam'>format_list</span> <span class='key'>if</span> <span class='nam'>x</span> <span class='key'>in</span> <span class='nam'>url_map</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2146' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>existing_formats</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2147' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: no known formats available for video&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2148' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2149' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>req_format</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2150' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url_list</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>(</span><span class='nam'>existing_formats</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>url_map</span><span class='op'>[</span><span class='nam'>existing_formats</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>]</span><span class='op'>)</span><span class='op'>]</span> <span class='com'># Best quality</span><span class='strut'>&nbsp;</span></p>
<p id='t2151' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>req_format</span> <span class='op'>==</span> <span class='str'>&#39;worst&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2152' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url_list</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>(</span><span class='nam'>existing_formats</span><span class='op'>[</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>existing_formats</span><span class='op'>)</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>url_map</span><span class='op'>[</span><span class='nam'>existing_formats</span><span class='op'>[</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>existing_formats</span><span class='op'>)</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='op'>]</span><span class='op'>)</span><span class='op'>]</span> <span class='com'># worst quality</span><span class='strut'>&nbsp;</span></p>
<p id='t2153' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>req_format</span> <span class='op'>==</span> <span class='str'>&#39;-1&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2154' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url_list</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>(</span><span class='nam'>f</span><span class='op'>,</span> <span class='nam'>url_map</span><span class='op'>[</span><span class='nam'>f</span><span class='op'>]</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>f</span> <span class='key'>in</span> <span class='nam'>existing_formats</span><span class='op'>]</span> <span class='com'># All formats</span><span class='strut'>&nbsp;</span></p>
<p id='t2155' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2156' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Specific format</span><span class='strut'>&nbsp;</span></p>
<p id='t2157' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>req_format</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>url_map</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2158' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: requested format not available&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2159' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2160' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url_list</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>(</span><span class='nam'>req_format</span><span class='op'>,</span> <span class='nam'>url_map</span><span class='op'>[</span><span class='nam'>req_format</span><span class='op'>]</span><span class='op'>)</span><span class='op'>]</span> <span class='com'># Specific format</span><span class='strut'>&nbsp;</span></p>
<p id='t2161' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2162' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>results</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2163' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>format_param</span><span class='op'>,</span> <span class='nam'>video_real_url</span> <span class='key'>in</span> <span class='nam'>video_url_list</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2164' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extension</span><span class='strut'>&nbsp;</span></p>
<p id='t2165' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_extension</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_video_extensions</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='nam'>format_param</span><span class='op'>,</span> <span class='str'>&#39;mp4&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2166' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2167' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>results</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t2168' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp;&nbsp; <span class='nam'>video_id</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2169' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='nam'>video_real_url</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2170' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>video_uploader</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2171' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span>&nbsp; <span class='nam'>upload_date</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2172' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span>&nbsp; &nbsp; <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2173' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='nam'>video_extension</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2174' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;format&#39;</span><span class='op'>:</span>&nbsp;&nbsp; <span class='op'>(</span><span class='nam'>format_param</span> <span class='key'>is</span> <span class='nam'>None</span> <span class='key'>and</span> <span class='str'>u&#39;NA&#39;</span> <span class='key'>or</span> <span class='nam'>format_param</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2175' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;thumbnail&#39;</span><span class='op'>:</span>&nbsp; &nbsp; <span class='nam'>video_thumbnail</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2176' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;description&#39;</span><span class='op'>:</span>&nbsp; <span class='nam'>video_description</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2177' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2178' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>results</span><span class='strut'>&nbsp;</span></p>
<p id='t2179' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2180' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>BlipTVIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2181' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information extractor for blip.tv&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2182' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2183' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;^(?:https?://)?(?:\w+\.)?blip\.tv(/.+)$&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2184' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_URL_EXT</span> <span class='op'>=</span> <span class='str'>r&#39;^.*\.([a-z0-9]+)$&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2185' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;blip.tv&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2186' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2187' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2188' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2189' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[%s] %s: Extracting information&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2190' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2191' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_direct_download</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>title</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2192' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2193' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[%s] %s: Direct download detected&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>title</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2194' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2195' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2196' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2197' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2198' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2199' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2200' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2201' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='str'>&#39;?&#39;</span> <span class='key'>in</span> <span class='nam'>url</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2202' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cchar</span> <span class='op'>=</span> <span class='str'>&#39;&amp;&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2203' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2204' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cchar</span> <span class='op'>=</span> <span class='str'>&#39;?&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2205' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>json_url</span> <span class='op'>=</span> <span class='nam'>url</span> <span class='op'>+</span> <span class='nam'>cchar</span> <span class='op'>+</span> <span class='str'>&#39;skin=json&amp;version=2&amp;no_wrap=1&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2206' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>json_url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2207' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2208' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t2209' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2210' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>urlh</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2211' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>urlh</span><span class='op'>.</span><span class='nam'>headers</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;Content-Type&#39;</span><span class='op'>,</span> <span class='str'>&#39;&#39;</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>startswith</span><span class='op'>(</span><span class='str'>&#39;video/&#39;</span><span class='op'>)</span><span class='op'>:</span> <span class='com'># Direct download</span><span class='strut'>&nbsp;</span></p>
<p id='t2212' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>basename</span> <span class='op'>=</span> <span class='nam'>url</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;/&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2213' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>title</span><span class='op'>,</span><span class='nam'>ext</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>splitext</span><span class='op'>(</span><span class='nam'>basename</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2214' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>title</span> <span class='op'>=</span> <span class='nam'>title</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;UTF-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2215' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>ext</span> <span class='op'>=</span> <span class='nam'>ext</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>&#39;.&#39;</span><span class='op'>,</span> <span class='str'>&#39;&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2216' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_direct_download</span><span class='op'>(</span><span class='nam'>title</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2217' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t2218' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span> <span class='nam'>title</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2219' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span> <span class='nam'>url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2220' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2221' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2222' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span> <span class='nam'>title</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2223' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span> <span class='nam'>ext</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2224' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;urlhandle&#39;</span><span class='op'>:</span> <span class='nam'>urlh</span><span class='strut'>&nbsp;</span></p>
<p id='t2225' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t2226' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2227' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download video info webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2228' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2229' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>info</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span> <span class='com'># Regular URL</span><span class='strut'>&nbsp;</span></p>
<p id='t2230' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2231' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>json_code_bytes</span> <span class='op'>=</span> <span class='nam'>urlh</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2232' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>json_code</span> <span class='op'>=</span> <span class='nam'>json_code_bytes</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2233' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2234' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to read video info webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2235' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2236' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2237' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2238' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>json_data</span> <span class='op'>=</span> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>loads</span><span class='op'>(</span><span class='nam'>json_code</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2239' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='str'>&#39;Post&#39;</span> <span class='key'>in</span> <span class='nam'>json_data</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2240' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>data</span> <span class='op'>=</span> <span class='nam'>json_data</span><span class='op'>[</span><span class='str'>&#39;Post&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2241' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2242' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>data</span> <span class='op'>=</span> <span class='nam'>json_data</span><span class='strut'>&nbsp;</span></p>
<p id='t2243' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2244' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>upload_date</span> <span class='op'>=</span> <span class='nam'>datetime</span><span class='op'>.</span><span class='nam'>datetime</span><span class='op'>.</span><span class='nam'>strptime</span><span class='op'>(</span><span class='nam'>data</span><span class='op'>[</span><span class='str'>&#39;datestamp&#39;</span><span class='op'>]</span><span class='op'>,</span> <span class='str'>&#39;%m-%d-%y %H:%M%p&#39;</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>strftime</span><span class='op'>(</span><span class='str'>&#39;%Y%m%d&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2245' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>data</span><span class='op'>[</span><span class='str'>&#39;media&#39;</span><span class='op'>]</span><span class='op'>[</span><span class='str'>&#39;url&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2246' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>umobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_URL_EXT</span><span class='op'>,</span> <span class='nam'>video_url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2247' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>umobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2248' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>ValueError</span><span class='op'>(</span><span class='str'>&#39;Can not determine filename extension&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2249' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>ext</span> <span class='op'>=</span> <span class='nam'>umobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2250' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2251' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t2252' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span> <span class='nam'>data</span><span class='op'>[</span><span class='str'>&#39;item_id&#39;</span><span class='op'>]</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2253' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2254' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>data</span><span class='op'>[</span><span class='str'>&#39;display_name&#39;</span><span class='op'>]</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2255' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span> <span class='nam'>upload_date</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2256' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span> <span class='nam'>data</span><span class='op'>[</span><span class='str'>&#39;title&#39;</span><span class='op'>]</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2257' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span> <span class='nam'>ext</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2258' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;format&#39;</span><span class='op'>:</span> <span class='nam'>data</span><span class='op'>[</span><span class='str'>&#39;media&#39;</span><span class='op'>]</span><span class='op'>[</span><span class='str'>&#39;mimeType&#39;</span><span class='op'>]</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2259' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;thumbnail&#39;</span><span class='op'>:</span> <span class='nam'>data</span><span class='op'>[</span><span class='str'>&#39;thumbnailUrl&#39;</span><span class='op'>]</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2260' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;description&#39;</span><span class='op'>:</span> <span class='nam'>data</span><span class='op'>[</span><span class='str'>&#39;description&#39;</span><span class='op'>]</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2261' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;player_url&#39;</span><span class='op'>:</span> <span class='nam'>data</span><span class='op'>[</span><span class='str'>&#39;embedUrl&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2262' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t2263' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>ValueError</span><span class='op'>,</span><span class='nam'>KeyError</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2264' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to parse video information: %s&#39;</span> <span class='op'>%</span> <span class='nam'>repr</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2265' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2266' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2267' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>std_headers</span><span class='op'>[</span><span class='str'>&#39;User-Agent&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='str'>&#39;iTunes/10.6.1&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2268' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='nam'>info</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2269' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2270' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2271' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>MyVideoIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2272' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information Extractor for myvideo.de.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2273' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2274' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;(?:http://)?(?:www\.)?myvideo\.de/watch/([0-9]+)/([^?/]+).*&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2275' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;myvideo&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2276' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2277' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2278' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2279' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2280' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2281' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2282' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[myvideo] %s: Extracting information&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2283' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2284' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span><span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2285' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2286' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2287' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2288' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2289' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2290' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2291' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2292' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Get video webpage</span><span class='strut'>&nbsp;</span></p>
<p id='t2293' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage_url</span> <span class='op'>=</span> <span class='str'>&#39;http://www.myvideo.de/watch/%s&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='strut'>&nbsp;</span></p>
<p id='t2294' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_webpage</span><span class='op'>(</span><span class='nam'>webpage_url</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2295' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2296' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2297' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;link rel=\&#39;image_src\&#39; href=\&#39;(http://is[0-9].myvideo\.de/de/movie[0-9]+/[a-f0-9]+)/thumbs/[^.]+\.jpg\&#39; /&gt;&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2298' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2299' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2300' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract media URL&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2301' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2302' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span> <span class='op'>+</span> <span class='op'>(</span><span class='str'>&#39;/%s.flv&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2303' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2304' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>&#39;&lt;title&gt;([^&lt;]+)&lt;/title&gt;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2305' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2306' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract title&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2307' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2308' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2309' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2310' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2311' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t2312' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp;&nbsp; <span class='nam'>video_id</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2313' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2314' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2315' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span>&nbsp; <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2316' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span>&nbsp; &nbsp; <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2317' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='str'>u&#39;flv&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2318' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2319' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2320' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>ComedyCentralIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2321' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information extractor for The Daily Show and Colbert Report &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2322' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2323' class='pln'>&nbsp; &nbsp; <span class='com'># urls can be abbreviations like :thedailyshow or :colbert</span><span class='strut'>&nbsp;</span></p>
<p id='t2324' class='pln'>&nbsp; &nbsp; <span class='com'># urls for episodes like:</span><span class='strut'>&nbsp;</span></p>
<p id='t2325' class='pln'>&nbsp; &nbsp; <span class='com'># or urls for clips like: http://www.thedailyshow.com/watch/mon-december-10-2012/any-given-gun-day</span><span class='strut'>&nbsp;</span></p>
<p id='t2326' class='pln'>&nbsp; &nbsp; <span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; or: http://www.colbertnation.com/the-colbert-report-videos/421667/november-29-2012/moon-shattering-news</span><span class='strut'>&nbsp;</span></p>
<p id='t2327' class='pln'>&nbsp; &nbsp; <span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; or: http://www.colbertnation.com/the-colbert-report-collections/422008/festival-of-lights/79524</span><span class='strut'>&nbsp;</span></p>
<p id='t2328' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&quot;&quot;&quot;^(:(?P&lt;shortname&gt;tds|thedailyshow|cr|colbert|colbertnation|colbertreport)</span><span class='strut'>&nbsp;</span></p>
<p id='t2329' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |(https?://)?(www\.)?</span><span class='strut'>&nbsp;</span></p>
<p id='t2330' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (?P&lt;showname&gt;thedailyshow|colbertnation)\.com/</span><span class='strut'>&nbsp;</span></p>
<p id='t2331' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; (full-episodes/(?P&lt;episode&gt;.*)|</span><span class='strut'>&nbsp;</span></p>
<p id='t2332' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (?P&lt;clip&gt;</span><span class='strut'>&nbsp;</span></p>
<p id='t2333' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (the-colbert-report-(videos|collections)/(?P&lt;clipID&gt;[0-9]+)/[^/]*/(?P&lt;cntitle&gt;.*?))</span><span class='strut'>&nbsp;</span></p>
<p id='t2334' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |(watch/(?P&lt;date&gt;[^/]*)/(?P&lt;tdstitle&gt;.*)))))</span><span class='strut'>&nbsp;</span></p>
<p id='t2335' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; $&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2336' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;comedycentral&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2337' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2338' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_available_formats</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>&#39;3500&#39;</span><span class='op'>,</span> <span class='str'>&#39;2200&#39;</span><span class='op'>,</span> <span class='str'>&#39;1700&#39;</span><span class='op'>,</span> <span class='str'>&#39;1200&#39;</span><span class='op'>,</span> <span class='str'>&#39;750&#39;</span><span class='op'>,</span> <span class='str'>&#39;400&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2339' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2340' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_video_extensions</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t2341' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;3500&#39;</span><span class='op'>:</span> <span class='str'>&#39;mp4&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2342' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;2200&#39;</span><span class='op'>:</span> <span class='str'>&#39;mp4&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2343' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;1700&#39;</span><span class='op'>:</span> <span class='str'>&#39;mp4&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2344' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;1200&#39;</span><span class='op'>:</span> <span class='str'>&#39;mp4&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2345' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;750&#39;</span><span class='op'>:</span> <span class='str'>&#39;mp4&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2346' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;400&#39;</span><span class='op'>:</span> <span class='str'>&#39;mp4&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2347' class='pln'>&nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t2348' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_video_dimensions</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t2349' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;3500&#39;</span><span class='op'>:</span> <span class='str'>&#39;1280x720&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2350' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;2200&#39;</span><span class='op'>:</span> <span class='str'>&#39;960x540&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2351' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;1700&#39;</span><span class='op'>:</span> <span class='str'>&#39;768x432&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2352' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;1200&#39;</span><span class='op'>:</span> <span class='str'>&#39;640x360&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2353' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;750&#39;</span><span class='op'>:</span> <span class='str'>&#39;512x288&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2354' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;400&#39;</span><span class='op'>:</span> <span class='str'>&#39;384x216&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2355' class='pln'>&nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t2356' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2357' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>suitable</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2358' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Receives a URL and returns True if suitable for this IE.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2359' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>VERBOSE</span><span class='op'>)</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t2360' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2361' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>episode_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2362' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[comedycentral] %s: Extracting information&#39;</span> <span class='op'>%</span> <span class='nam'>episode_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2363' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2364' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_config_download</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>episode_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2365' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[comedycentral] %s: Downloading configuration&#39;</span> <span class='op'>%</span> <span class='nam'>episode_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2366' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2367' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_index_download</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>episode_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2368' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[comedycentral] %s: Downloading show index&#39;</span> <span class='op'>%</span> <span class='nam'>episode_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2369' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2370' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_player_url</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>episode_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2371' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[comedycentral] %s: Determining player URL&#39;</span> <span class='op'>%</span> <span class='nam'>episode_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2372' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2373' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2374' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_print_formats</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>formats</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2375' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span><span class='op'>(</span><span class='str'>&#39;Available formats:&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2376' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>x</span> <span class='key'>in</span> <span class='nam'>formats</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2377' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span><span class='op'>(</span><span class='str'>&#39;%s\t:\t%s\t[%s]&#39;</span> <span class='op'>%</span><span class='op'>(</span><span class='nam'>x</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_video_extensions</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='nam'>x</span><span class='op'>,</span> <span class='str'>&#39;mp4&#39;</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_video_dimensions</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='nam'>x</span><span class='op'>,</span> <span class='str'>&#39;???&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2378' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2379' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2380' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2381' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>VERBOSE</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2382' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2383' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2384' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2385' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2386' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;shortname&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2387' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;shortname&#39;</span><span class='op'>)</span> <span class='key'>in</span> <span class='op'>(</span><span class='str'>&#39;tds&#39;</span><span class='op'>,</span> <span class='str'>&#39;thedailyshow&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2388' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>url</span> <span class='op'>=</span> <span class='str'>u&#39;http://www.thedailyshow.com/full-episodes/&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2389' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2390' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>url</span> <span class='op'>=</span> <span class='str'>u&#39;http://www.colbertnation.com/full-episodes/&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2391' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>VERBOSE</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2392' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t2393' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2394' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;clip&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2395' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;showname&#39;</span><span class='op'>)</span> <span class='op'>==</span> <span class='str'>&#39;thedailyshow&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2396' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>epTitle</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;tdstitle&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2397' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2398' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>epTitle</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;cntitle&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2399' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>dlNewest</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'>&nbsp;</span></p>
<p id='t2400' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2401' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>dlNewest</span> <span class='op'>=</span> <span class='key'>not</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;episode&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2402' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>dlNewest</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2403' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>epTitle</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;showname&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2404' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2405' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>epTitle</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;episode&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2406' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2407' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>req</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2408' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>epTitle</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2409' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2410' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>htmlHandle</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>req</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2411' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>html</span> <span class='op'>=</span> <span class='nam'>htmlHandle</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2412' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2413' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2414' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2415' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>dlNewest</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2416' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>url</span> <span class='op'>=</span> <span class='nam'>htmlHandle</span><span class='op'>.</span><span class='nam'>geturl</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2417' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>VERBOSE</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2418' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2419' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Invalid redirected URL: &#39;</span> <span class='op'>+</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2420' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2421' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;episode&#39;</span><span class='op'>)</span> <span class='op'>==</span> <span class='str'>&#39;&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2422' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Redirected URL is still not specific: &#39;</span> <span class='op'>+</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2423' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2424' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>epTitle</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;episode&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2425' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2426' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mMovieParams</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>&#39;(?:&lt;param name=&quot;movie&quot; value=&quot;|var url = &quot;)(http://media.mtvnservices.com/([^&quot;]*(?:episode|video).*?:.*?))&quot;&#39;</span><span class='op'>,</span> <span class='nam'>html</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2427' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2428' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>mMovieParams</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2429' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># The Colbert Report embeds the information in a without</span><span class='strut'>&nbsp;</span></p>
<p id='t2430' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># a URL prefix; so extract the alternate reference</span><span class='strut'>&nbsp;</span></p>
<p id='t2431' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># and then add the URL prefix manually.</span><span class='strut'>&nbsp;</span></p>
<p id='t2432' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2433' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>altMovieParams</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>&#39;data-mgid=&quot;([^&quot;]*(?:episode|video).*?:.*?)&quot;&#39;</span><span class='op'>,</span> <span class='nam'>html</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2434' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>altMovieParams</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2435' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to find Flash URL in webpage &#39;</span> <span class='op'>+</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2436' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2437' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2438' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mMovieParams</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>(</span><span class='str'>&quot;http://media.mtvnservices.com/&quot;</span> <span class='op'>+</span> <span class='nam'>altMovieParams</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>altMovieParams</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2439' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2440' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>playerUrl_raw</span> <span class='op'>=</span> <span class='nam'>mMovieParams</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2441' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_player_url</span><span class='op'>(</span><span class='nam'>epTitle</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2442' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2443' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>urlHandle</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>playerUrl_raw</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2444' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>playerUrl</span> <span class='op'>=</span> <span class='nam'>urlHandle</span><span class='op'>.</span><span class='nam'>geturl</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2445' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2446' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to find out player URL: &#39;</span> <span class='op'>+</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2447' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2448' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2449' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>uri</span> <span class='op'>=</span> <span class='nam'>mMovieParams</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2450' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>indexUrl</span> <span class='op'>=</span> <span class='str'>&#39;http://shadow.comedycentral.com/feeds/video_player/mrss/?&#39;</span> <span class='op'>+</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>urlencode</span><span class='op'>(</span><span class='op'>{</span><span class='str'>&#39;uri&#39;</span><span class='op'>:</span> <span class='nam'>uri</span><span class='op'>}</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2451' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_index_download</span><span class='op'>(</span><span class='nam'>epTitle</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2452' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2453' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>indexXml</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>indexUrl</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2454' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2455' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download episode index: &#39;</span> <span class='op'>+</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2456' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2457' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2458' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>results</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2459' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2460' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>idoc</span> <span class='op'>=</span> <span class='nam'>xml</span><span class='op'>.</span><span class='nam'>etree</span><span class='op'>.</span><span class='nam'>ElementTree</span><span class='op'>.</span><span class='nam'>fromstring</span><span class='op'>(</span><span class='nam'>indexXml</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2461' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>itemEls</span> <span class='op'>=</span> <span class='nam'>idoc</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>&#39;.//item&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2462' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>itemEl</span> <span class='key'>in</span> <span class='nam'>itemEls</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2463' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mediaId</span> <span class='op'>=</span> <span class='nam'>itemEl</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>&#39;./guid&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>text</span><span class='strut'>&nbsp;</span></p>
<p id='t2464' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>shortMediaId</span> <span class='op'>=</span> <span class='nam'>mediaId</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;:&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2465' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>showId</span> <span class='op'>=</span> <span class='nam'>mediaId</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;:&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>2</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>&#39;.com&#39;</span><span class='op'>,</span> <span class='str'>&#39;&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2466' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>officialTitle</span> <span class='op'>=</span> <span class='nam'>itemEl</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>&#39;./title&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>text</span><span class='strut'>&nbsp;</span></p>
<p id='t2467' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>officialDate</span> <span class='op'>=</span> <span class='nam'>itemEl</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>&#39;./pubDate&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>text</span><span class='strut'>&nbsp;</span></p>
<p id='t2468' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2469' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>configUrl</span> <span class='op'>=</span> <span class='op'>(</span><span class='str'>&#39;http://www.comedycentral.com/global/feeds/entertainment/media/mediaGenEntertainment.jhtml?&#39;</span> <span class='op'>+</span><span class='strut'>&nbsp;</span></p>
<p id='t2470' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>urlencode</span><span class='op'>(</span><span class='op'>{</span><span class='str'>&#39;uri&#39;</span><span class='op'>:</span> <span class='nam'>mediaId</span><span class='op'>}</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2471' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>configReq</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>configUrl</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2472' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_config_download</span><span class='op'>(</span><span class='nam'>epTitle</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2473' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2474' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>configXml</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>configReq</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2475' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2476' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2477' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2478' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2479' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cdoc</span> <span class='op'>=</span> <span class='nam'>xml</span><span class='op'>.</span><span class='nam'>etree</span><span class='op'>.</span><span class='nam'>ElementTree</span><span class='op'>.</span><span class='nam'>fromstring</span><span class='op'>(</span><span class='nam'>configXml</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2480' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>turls</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2481' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>rendition</span> <span class='key'>in</span> <span class='nam'>cdoc</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>&#39;.//rendition&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2482' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>finfo</span> <span class='op'>=</span> <span class='op'>(</span><span class='nam'>rendition</span><span class='op'>.</span><span class='nam'>attrib</span><span class='op'>[</span><span class='str'>&#39;bitrate&#39;</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>rendition</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>&#39;./src&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>text</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2483' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>turls</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>finfo</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2484' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2485' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>turls</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2486' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;\nERROR: unable to download &#39;</span> <span class='op'>+</span> <span class='nam'>mediaId</span> <span class='op'>+</span> <span class='str'>&#39;: No videos found&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2487' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>continue</span><span class='strut'>&nbsp;</span></p>
<p id='t2488' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2489' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;listformats&#39;</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2490' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_print_formats</span><span class='op'>(</span><span class='op'>[</span><span class='nam'>i</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span> <span class='key'>for</span> <span class='nam'>i</span> <span class='key'>in</span> <span class='nam'>turls</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2491' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2492' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2493' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># For now, just pick the highest bitrate</span><span class='strut'>&nbsp;</span></p>
<p id='t2494' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>format</span><span class='op'>,</span><span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>turls</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2495' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2496' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Get the format arg from the arg stream</span><span class='strut'>&nbsp;</span></p>
<p id='t2497' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>req_format</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;format&#39;</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2498' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2499' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Select format if we can find one</span><span class='strut'>&nbsp;</span></p>
<p id='t2500' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>f</span><span class='op'>,</span><span class='nam'>v</span> <span class='key'>in</span> <span class='nam'>turls</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2501' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>f</span> <span class='op'>==</span> <span class='nam'>req_format</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2502' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>format</span><span class='op'>,</span> <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>f</span><span class='op'>,</span> <span class='nam'>v</span><span class='strut'>&nbsp;</span></p>
<p id='t2503' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span><span class='strut'>&nbsp;</span></p>
<p id='t2504' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2505' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Patch to download from alternative CDN, which does not</span><span class='strut'>&nbsp;</span></p>
<p id='t2506' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># break on current RTMPDump builds</span><span class='strut'>&nbsp;</span></p>
<p id='t2507' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>broken_cdn</span> <span class='op'>=</span> <span class='str'>&quot;rtmpe://viacomccstrmfs.fplive.net/viacomccstrm/gsp.comedystor/&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2508' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>better_cdn</span> <span class='op'>=</span> <span class='str'>&quot;rtmpe://cp10740.edgefcs.net/ondemand/mtvnorigin/gsp.comedystor/&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2509' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2510' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>video_url</span><span class='op'>.</span><span class='nam'>startswith</span><span class='op'>(</span><span class='nam'>broken_cdn</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2511' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>video_url</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='nam'>broken_cdn</span><span class='op'>,</span> <span class='nam'>better_cdn</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2512' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2513' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>effTitle</span> <span class='op'>=</span> <span class='nam'>showId</span> <span class='op'>+</span> <span class='str'>u&#39;-&#39;</span> <span class='op'>+</span> <span class='nam'>epTitle</span><span class='strut'>&nbsp;</span></p>
<p id='t2514' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t2515' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span> <span class='nam'>shortMediaId</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2516' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2517' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>showId</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2518' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span> <span class='nam'>officialDate</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2519' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span> <span class='nam'>effTitle</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2520' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span> <span class='str'>&#39;mp4&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2521' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;format&#39;</span><span class='op'>:</span> <span class='nam'>format</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2522' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;thumbnail&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2523' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;description&#39;</span><span class='op'>:</span> <span class='nam'>officialTitle</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2524' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;player_url&#39;</span><span class='op'>:</span> <span class='nam'>None</span> <span class='com'>#playerUrl</span><span class='strut'>&nbsp;</span></p>
<p id='t2525' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t2526' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2527' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>results</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>info</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2528' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2529' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>results</span><span class='strut'>&nbsp;</span></p>
<p id='t2530' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2531' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2532' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>EscapistIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2533' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information extractor for The Escapist &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2534' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2535' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;^(https?://)?(www\.)?escapistmagazine\.com/videos/view/(?P&lt;showname&gt;[^/]+)/(?P&lt;episode&gt;[^/?]+)[/?]?.*$&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2536' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;escapist&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2537' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2538' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>showName</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2539' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[escapist] %s: Extracting information&#39;</span> <span class='op'>%</span> <span class='nam'>showName</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2540' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2541' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_config_download</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>showName</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2542' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[escapist] %s: Downloading configuration&#39;</span> <span class='op'>%</span> <span class='nam'>showName</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2543' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2544' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2545' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2546' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2547' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2548' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2549' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>showName</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;showname&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2550' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>videoId</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;episode&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2551' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2552' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>showName</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2553' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2554' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webPage</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2555' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webPageBytes</span> <span class='op'>=</span> <span class='nam'>webPage</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2556' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='str'>r&#39;text/html; charset=&quot;?([^&quot;]+)&quot;?&#39;</span><span class='op'>,</span> <span class='nam'>webPage</span><span class='op'>.</span><span class='nam'>headers</span><span class='op'>[</span><span class='str'>&#39;Content-Type&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2557' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webPage</span> <span class='op'>=</span> <span class='nam'>webPageBytes</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span> <span class='key'>if</span> <span class='nam'>m</span> <span class='key'>else</span> <span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2558' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2559' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download webpage: &#39;</span> <span class='op'>+</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2560' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2561' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2562' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>descMatch</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>&#39;&lt;meta name=&quot;description&quot; content=&quot;([^&quot;]*)&quot;&#39;</span><span class='op'>,</span> <span class='nam'>webPage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2563' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>description</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>descMatch</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2564' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>imgMatch</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>&#39;&lt;meta property=&quot;og:image&quot; content=&quot;([^&quot;]*)&quot;&#39;</span><span class='op'>,</span> <span class='nam'>webPage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2565' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>imgUrl</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>imgMatch</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2566' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>playerUrlMatch</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>&#39;&lt;meta property=&quot;og:video&quot; content=&quot;([^&quot;]*)&quot;&#39;</span><span class='op'>,</span> <span class='nam'>webPage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2567' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>playerUrl</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>playerUrlMatch</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2568' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>configUrlMatch</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>&#39;config=(.*)$&#39;</span><span class='op'>,</span> <span class='nam'>playerUrl</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2569' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>configUrl</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>configUrlMatch</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2570' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2571' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_config_download</span><span class='op'>(</span><span class='nam'>showName</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2572' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2573' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>configJSON</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>configUrl</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2574' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='str'>r&#39;text/html; charset=&quot;?([^&quot;]+)&quot;?&#39;</span><span class='op'>,</span> <span class='nam'>configJSON</span><span class='op'>.</span><span class='nam'>headers</span><span class='op'>[</span><span class='str'>&#39;Content-Type&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2575' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>configJSON</span> <span class='op'>=</span> <span class='nam'>configJSON</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span> <span class='key'>if</span> <span class='nam'>m</span> <span class='key'>else</span> <span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2576' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2577' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download configuration: &#39;</span> <span class='op'>+</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2578' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2579' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2580' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Technically, it&#39;s JavaScript, not JSON</span><span class='strut'>&nbsp;</span></p>
<p id='t2581' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>configJSON</span> <span class='op'>=</span> <span class='nam'>configJSON</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>&quot;&#39;&quot;</span><span class='op'>,</span> <span class='str'>&#39;&quot;&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2582' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2583' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2584' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>config</span> <span class='op'>=</span> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>loads</span><span class='op'>(</span><span class='nam'>configJSON</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2585' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>ValueError</span><span class='op'>,</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2586' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Invalid JSON in configuration file: &#39;</span> <span class='op'>+</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2587' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2588' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2589' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>playlist</span> <span class='op'>=</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>&#39;playlist&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2590' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>videoUrl</span> <span class='op'>=</span> <span class='nam'>playlist</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>[</span><span class='str'>&#39;url&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2591' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2592' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t2593' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span> <span class='nam'>videoId</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2594' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span> <span class='nam'>videoUrl</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2595' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>showName</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2596' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2597' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span> <span class='nam'>showName</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2598' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span> <span class='str'>&#39;flv&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2599' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;thumbnail&#39;</span><span class='op'>:</span> <span class='nam'>imgUrl</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2600' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;description&#39;</span><span class='op'>:</span> <span class='nam'>description</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2601' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;player_url&#39;</span><span class='op'>:</span> <span class='nam'>playerUrl</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2602' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t2603' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2604' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='nam'>info</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2605' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2606' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2607' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>CollegeHumorIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2608' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information extractor for collegehumor.com&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2609' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2610' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_WORKING</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'>&nbsp;</span></p>
<p id='t2611' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;^(?:https?://)?(?:www\.)?collegehumor\.com/video/(?P&lt;videoid&gt;[0-9]+)/(?P&lt;shorttitle&gt;.*)$&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2612' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;collegehumor&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2613' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2614' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_manifest</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2615' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2616' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[%s] %s: Downloading XML manifest&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2617' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2618' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2619' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2620' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[%s] %s: Extracting information&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2621' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2622' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2623' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2624' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2625' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2626' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2627' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;videoid&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2628' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2629' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t2630' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span> <span class='nam'>video_id</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2631' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2632' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2633' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t2634' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2635' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2636' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>xmlUrl</span> <span class='op'>=</span> <span class='str'>&#39;http://www.collegehumor.com/moogaloop/video/&#39;</span> <span class='op'>+</span> <span class='nam'>video_id</span><span class='strut'>&nbsp;</span></p>
<p id='t2637' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2638' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>metaXml</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>xmlUrl</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2639' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2640' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download video info XML: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2641' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2642' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2643' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mdoc</span> <span class='op'>=</span> <span class='nam'>xml</span><span class='op'>.</span><span class='nam'>etree</span><span class='op'>.</span><span class='nam'>ElementTree</span><span class='op'>.</span><span class='nam'>fromstring</span><span class='op'>(</span><span class='nam'>metaXml</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2644' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2645' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>videoNode</span> <span class='op'>=</span> <span class='nam'>mdoc</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>&#39;./video&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2646' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;description&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>videoNode</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>&#39;./description&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>text</span><span class='strut'>&nbsp;</span></p>
<p id='t2647' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;title&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>videoNode</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>&#39;./caption&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>text</span><span class='strut'>&nbsp;</span></p>
<p id='t2648' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;thumbnail&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>videoNode</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>&#39;./thumbnail&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>text</span><span class='strut'>&nbsp;</span></p>
<p id='t2649' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>manifest_url</span> <span class='op'>=</span> <span class='nam'>videoNode</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>&#39;./file&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>text</span><span class='strut'>&nbsp;</span></p>
<p id='t2650' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='nam'>IndexError</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2651' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;\nERROR: Invalid metadata XML file&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2652' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2653' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2654' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>manifest_url</span> <span class='op'>+=</span> <span class='str'>&#39;?hdcore=2.10.3&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2655' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_manifest</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2656' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2657' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>manifestXml</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>manifest_url</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2658' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2659' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download video info XML: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2660' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2661' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2662' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>adoc</span> <span class='op'>=</span> <span class='nam'>xml</span><span class='op'>.</span><span class='nam'>etree</span><span class='op'>.</span><span class='nam'>ElementTree</span><span class='op'>.</span><span class='nam'>fromstring</span><span class='op'>(</span><span class='nam'>manifestXml</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2663' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2664' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>media_node</span> <span class='op'>=</span> <span class='nam'>adoc</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>&#39;./{http://ns.adobe.com/f4m/1.0}media&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2665' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>node_id</span> <span class='op'>=</span> <span class='nam'>media_node</span><span class='op'>.</span><span class='nam'>attrib</span><span class='op'>[</span><span class='str'>&#39;url&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2666' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>adoc</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>&#39;./{http://ns.adobe.com/f4m/1.0}id&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>text</span><span class='strut'>&nbsp;</span></p>
<p id='t2667' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='nam'>IndexError</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2668' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;\nERROR: Invalid manifest file&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2669' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2670' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2671' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>url_pr</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse_urlparse</span><span class='op'>(</span><span class='nam'>manifest_url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2672' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>url</span> <span class='op'>=</span> <span class='nam'>url_pr</span><span class='op'>.</span><span class='nam'>scheme</span> <span class='op'>+</span> <span class='str'>&#39;://&#39;</span> <span class='op'>+</span> <span class='nam'>url_pr</span><span class='op'>.</span><span class='nam'>netloc</span> <span class='op'>+</span> <span class='str'>&#39;/z&#39;</span> <span class='op'>+</span> <span class='nam'>video_id</span><span class='op'>[</span><span class='op'>:</span><span class='op'>-</span><span class='num'>2</span><span class='op'>]</span> <span class='op'>+</span> <span class='str'>&#39;/&#39;</span> <span class='op'>+</span> <span class='nam'>node_id</span> <span class='op'>+</span> <span class='str'>&#39;Seg1-Frag1&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2673' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2674' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;url&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>url</span><span class='strut'>&nbsp;</span></p>
<p id='t2675' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;ext&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='str'>&#39;f4f&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2676' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='nam'>info</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2677' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2678' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2679' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>XVideosIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2680' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information extractor for xvideos.com&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2681' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2682' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;^(?:https?://)?(?:www\.)?xvideos\.com/video([0-9]+)(?:.*)&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2683' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;xvideos&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2684' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2685' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2686' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2687' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[%s] %s: Extracting information&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2688' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2689' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2690' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2691' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2692' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2693' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2694' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2695' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2696' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_webpage</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2697' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2698' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2699' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2700' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2701' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract video URL</span><span class='strut'>&nbsp;</span></p>
<p id='t2702' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;flv_url=(.+?)&amp;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2703' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2704' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract video url&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2705' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2706' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2707' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2708' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2709' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract title</span><span class='strut'>&nbsp;</span></p>
<p id='t2710' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;title&gt;(.*?)\s+-\s+XVID&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2711' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2712' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract video title&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2713' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2714' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2715' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2716' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2717' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract video thumbnail</span><span class='strut'>&nbsp;</span></p>
<p id='t2718' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;http://(?:img.*?\.)xvideos.com/videos/thumbs/[a-fA-F0-9]+/[a-fA-F0-9]+/[a-fA-F0-9]+/[a-fA-F0-9]+/([a-fA-F0-9.]+jpg)&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2719' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2720' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract video thumbnail&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2721' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2722' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_thumbnail</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>0</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2723' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2724' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t2725' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span> <span class='nam'>video_id</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2726' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2727' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2728' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2729' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span> <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2730' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span> <span class='str'>&#39;flv&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2731' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;thumbnail&#39;</span><span class='op'>:</span> <span class='nam'>video_thumbnail</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2732' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;description&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2733' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t2734' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2735' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='nam'>info</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2736' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2737' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2738' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>SoundcloudIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2739' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information extractor for soundcloud.com</span><span class='strut'>&nbsp;</span></p>
<p id='t2740' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp;&nbsp; To access the media, the uid of the song and a stream token</span><span class='strut'>&nbsp;</span></p>
<p id='t2741' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp;&nbsp; must be extracted from the page source and the script must make</span><span class='strut'>&nbsp;</span></p>
<p id='t2742' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp;&nbsp; a request to media.soundcloud.com/crossdomain.xml. Then</span><span class='strut'>&nbsp;</span></p>
<p id='t2743' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp;&nbsp; the media can be grabbed by requesting from an url composed</span><span class='strut'>&nbsp;</span></p>
<p id='t2744' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp;&nbsp; of the stream token and uid</span><span class='strut'>&nbsp;</span></p>
<p id='t2745' class='pln'><span class='str'>&nbsp; &nbsp;&nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2746' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2747' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;^(?:https?://)?(?:www\.)?soundcloud\.com/([\w\d-]+)/([\w\d-]+)&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2748' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;soundcloud&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2749' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2750' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2751' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2752' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2753' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_resolve</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2754' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2755' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[%s] %s: Resolving id&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2756' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2757' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2758' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2759' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[%s] %s: Retrieving stream&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2760' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2761' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2762' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2763' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2764' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2765' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2766' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2767' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># extract uploader (which is in the url)</span><span class='strut'>&nbsp;</span></p>
<p id='t2768' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>uploader</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2769' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># extract simple title (uploader + slug of song title)</span><span class='strut'>&nbsp;</span></p>
<p id='t2770' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>slug_title</span> <span class='op'>=</span>&nbsp; <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>2</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2771' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>simple_title</span> <span class='op'>=</span> <span class='nam'>uploader</span> <span class='op'>+</span> <span class='str'>u&#39;-&#39;</span> <span class='op'>+</span> <span class='nam'>slug_title</span><span class='strut'>&nbsp;</span></p>
<p id='t2772' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2773' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_resolve</span><span class='op'>(</span><span class='str'>&#39;%s/%s&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>uploader</span><span class='op'>,</span> <span class='nam'>slug_title</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2774' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2775' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>url</span> <span class='op'>=</span> <span class='str'>&#39;http://soundcloud.com/%s/%s&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>uploader</span><span class='op'>,</span> <span class='nam'>slug_title</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2776' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>resolv_url</span> <span class='op'>=</span> <span class='str'>&#39;http://api.soundcloud.com/resolve.json?url=&#39;</span> <span class='op'>+</span> <span class='nam'>url</span> <span class='op'>+</span> <span class='str'>&#39;&amp;client_id=b45b1aa10f1ac2941910a7f0d10f8e28&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2777' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>resolv_url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2778' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2779' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info_json_bytes</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2780' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info_json</span> <span class='op'>=</span> <span class='nam'>info_json_bytes</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2781' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2782' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download video webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2783' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2784' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2785' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>loads</span><span class='op'>(</span><span class='nam'>info_json</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2786' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;id&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2787' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='str'>&#39;%s/%s&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>uploader</span><span class='op'>,</span> <span class='nam'>slug_title</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2788' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2789' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>streams_url</span> <span class='op'>=</span> <span class='str'>&#39;https://api.sndcdn.com/i1/tracks/&#39;</span> <span class='op'>+</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span> <span class='op'>+</span> <span class='str'>&#39;/streams?client_id=b45b1aa10f1ac2941910a7f0d10f8e28&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2790' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>streams_url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2791' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2792' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>stream_json_bytes</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2793' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>stream_json</span> <span class='op'>=</span> <span class='nam'>stream_json_bytes</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2794' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2795' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download stream definitions: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2796' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2797' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2798' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>streams</span> <span class='op'>=</span> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>loads</span><span class='op'>(</span><span class='nam'>stream_json</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2799' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mediaURL</span> <span class='op'>=</span> <span class='nam'>streams</span><span class='op'>[</span><span class='str'>&#39;http_mp3_128_url&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2800' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2801' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t2802' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp;&nbsp; <span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;id&#39;</span><span class='op'>]</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2803' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='nam'>mediaURL</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2804' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;user&#39;</span><span class='op'>]</span><span class='op'>[</span><span class='str'>&#39;username&#39;</span><span class='op'>]</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2805' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span>&nbsp; <span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;created_at&#39;</span><span class='op'>]</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2806' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span>&nbsp; &nbsp; <span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;title&#39;</span><span class='op'>]</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2807' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='str'>u&#39;mp3&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2808' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;description&#39;</span><span class='op'>:</span> <span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;description&#39;</span><span class='op'>]</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2809' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2810' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2811' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2812' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>InfoQIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2813' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information extractor for infoq.com&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2814' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;^(?:https?://)?(?:www\.)?infoq\.com/[^/]+/[^/]+$&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2815' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2816' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2817' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2818' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[%s] %s: Extracting information&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2819' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2820' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2821' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2822' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2823' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2824' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2825' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2826' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_webpage</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>=</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2827' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2828' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2829' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract video URL</span><span class='strut'>&nbsp;</span></p>
<p id='t2830' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&quot;jsclassref=&#39;([^&#39;]*)&#39;&quot;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2831' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2832' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract video url&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2833' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2834' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>real_id</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>base64</span><span class='op'>.</span><span class='nam'>b64decode</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>encode</span><span class='op'>(</span><span class='str'>&#39;ascii&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2835' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='str'>&#39;rtmpe://video.infoq.com/cfx/st/&#39;</span> <span class='op'>+</span> <span class='nam'>real_id</span><span class='strut'>&nbsp;</span></p>
<p id='t2836' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2837' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract title</span><span class='strut'>&nbsp;</span></p>
<p id='t2838' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;contentTitle = &quot;(.*?)&quot;;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2839' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2840' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract video title&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2841' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2842' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2843' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2844' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract description</span><span class='strut'>&nbsp;</span></p>
<p id='t2845' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_description</span> <span class='op'>=</span> <span class='str'>u&#39;No description available.&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2846' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;meta name=&quot;description&quot; content=&quot;(.*)&quot;(?:\s*/)?&gt;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2847' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2848' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_description</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2849' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2850' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_filename</span> <span class='op'>=</span> <span class='nam'>video_url</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;/&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2851' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span><span class='op'>,</span> <span class='nam'>extension</span> <span class='op'>=</span> <span class='nam'>video_filename</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;.&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2852' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2853' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t2854' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span> <span class='nam'>video_id</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2855' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2856' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2857' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2858' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span> <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2859' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span> <span class='nam'>extension</span><span class='op'>,</span> <span class='com'># Extension is always(?) mp4, but seems to be flv</span><span class='strut'>&nbsp;</span></p>
<p id='t2860' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;thumbnail&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2861' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;description&#39;</span><span class='op'>:</span> <span class='nam'>video_description</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2862' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t2863' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2864' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='nam'>info</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2865' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2866' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>MixcloudIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2867' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information extractor for www.mixcloud.com&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2868' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2869' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_WORKING</span> <span class='op'>=</span> <span class='nam'>False</span> <span class='com'># New API, but it seems good http://www.mixcloud.com/developers/documentation/</span><span class='strut'>&nbsp;</span></p>
<p id='t2870' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;^(?:https?://)?(?:www\.)?mixcloud\.com/([\w\d-]+)/([\w\d-]+)&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2871' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;mixcloud&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2872' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2873' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2874' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2875' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2876' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_download_json</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2877' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report JSON download.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2878' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[%s] Downloading json&#39;</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2879' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2880' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2881' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2882' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[%s] %s: Extracting information&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2883' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2884' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>get_urls</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>jsonData</span><span class='op'>,</span> <span class='nam'>fmt</span><span class='op'>,</span> <span class='nam'>bitrate</span><span class='op'>=</span><span class='str'>&#39;best&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2885' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Get urls from &#39;audio_formats&#39; section in json&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2886' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file_url</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t2887' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2888' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>bitrate_list</span> <span class='op'>=</span> <span class='nam'>jsonData</span><span class='op'>[</span><span class='nam'>fmt</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2889' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>bitrate</span> <span class='key'>is</span> <span class='nam'>None</span> <span class='key'>or</span> <span class='nam'>bitrate</span> <span class='op'>==</span> <span class='str'>&#39;best&#39;</span> <span class='key'>or</span> <span class='nam'>bitrate</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>bitrate_list</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2890' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>bitrate</span> <span class='op'>=</span> <span class='nam'>max</span><span class='op'>(</span><span class='nam'>bitrate_list</span><span class='op'>)</span> <span class='com'># select highest</span><span class='strut'>&nbsp;</span></p>
<p id='t2891' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2892' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>url_list</span> <span class='op'>=</span> <span class='nam'>jsonData</span><span class='op'>[</span><span class='nam'>fmt</span><span class='op'>]</span><span class='op'>[</span><span class='nam'>bitrate</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2893' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='nam'>TypeError</span><span class='op'>:</span> <span class='com'># we have no bitrate info.</span><span class='strut'>&nbsp;</span></p>
<p id='t2894' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>url_list</span> <span class='op'>=</span> <span class='nam'>jsonData</span><span class='op'>[</span><span class='nam'>fmt</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2895' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>url_list</span><span class='strut'>&nbsp;</span></p>
<p id='t2896' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2897' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>check_urls</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url_list</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2898' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Returns 1st active url from list&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2899' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>url</span> <span class='key'>in</span> <span class='nam'>url_list</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2900' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2901' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2902' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>url</span><span class='strut'>&nbsp;</span></p>
<p id='t2903' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2904' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>url</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t2905' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2906' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t2907' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2908' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_print_formats</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>formats</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2909' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span><span class='op'>(</span><span class='str'>&#39;Available formats:&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2910' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>fmt</span> <span class='key'>in</span> <span class='nam'>formats</span><span class='op'>.</span><span class='nam'>keys</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2911' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>b</span> <span class='key'>in</span> <span class='nam'>formats</span><span class='op'>[</span><span class='nam'>fmt</span><span class='op'>]</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2912' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2913' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>ext</span> <span class='op'>=</span> <span class='nam'>formats</span><span class='op'>[</span><span class='nam'>fmt</span><span class='op'>]</span><span class='op'>[</span><span class='nam'>b</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2914' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span><span class='op'>(</span><span class='str'>&#39;%s\t%s\t[%s]&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>fmt</span><span class='op'>,</span> <span class='nam'>b</span><span class='op'>,</span> <span class='nam'>ext</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;.&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2915' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='nam'>TypeError</span><span class='op'>:</span> <span class='com'># we have no bitrate info</span><span class='strut'>&nbsp;</span></p>
<p id='t2916' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>ext</span> <span class='op'>=</span> <span class='nam'>formats</span><span class='op'>[</span><span class='nam'>fmt</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2917' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span><span class='op'>(</span><span class='str'>&#39;%s\t%s\t[%s]&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>fmt</span><span class='op'>,</span> <span class='str'>&#39;??&#39;</span><span class='op'>,</span> <span class='nam'>ext</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;.&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2918' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span><span class='strut'>&nbsp;</span></p>
<p id='t2919' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2920' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2921' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2922' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2923' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2924' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2925' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># extract uploader &amp; filename from url</span><span class='strut'>&nbsp;</span></p>
<p id='t2926' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>uploader</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2927' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file_id</span> <span class='op'>=</span> <span class='nam'>uploader</span> <span class='op'>+</span> <span class='str'>&quot;-&quot;</span> <span class='op'>+</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>2</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2928' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2929' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># construct API request</span><span class='strut'>&nbsp;</span></p>
<p id='t2930' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file_url</span> <span class='op'>=</span> <span class='str'>&#39;http://www.mixcloud.com/api/1/cloudcast/&#39;</span> <span class='op'>+</span> <span class='str'>&#39;/&#39;</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;/&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>3</span><span class='op'>:</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='op'>)</span> <span class='op'>+</span> <span class='str'>&#39;.json&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2931' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># retrieve .json file with links to files</span><span class='strut'>&nbsp;</span></p>
<p id='t2932' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>file_url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2933' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2934' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_json</span><span class='op'>(</span><span class='nam'>file_url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2935' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>jsonData</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2936' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2937' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Unable to retrieve file: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2938' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2939' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2940' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># parse JSON</span><span class='strut'>&nbsp;</span></p>
<p id='t2941' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>json_data</span> <span class='op'>=</span> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>loads</span><span class='op'>(</span><span class='nam'>jsonData</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2942' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>player_url</span> <span class='op'>=</span> <span class='nam'>json_data</span><span class='op'>[</span><span class='str'>&#39;player_swf_url&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2943' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>formats</span> <span class='op'>=</span> <span class='nam'>dict</span><span class='op'>(</span><span class='nam'>json_data</span><span class='op'>[</span><span class='str'>&#39;audio_formats&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2944' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2945' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>req_format</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;format&#39;</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2946' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>bitrate</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t2947' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2948' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;listformats&#39;</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2949' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_print_formats</span><span class='op'>(</span><span class='nam'>formats</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2950' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2951' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2952' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>req_format</span> <span class='key'>is</span> <span class='nam'>None</span> <span class='key'>or</span> <span class='nam'>req_format</span> <span class='op'>==</span> <span class='str'>&#39;best&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2953' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>format_param</span> <span class='key'>in</span> <span class='nam'>formats</span><span class='op'>.</span><span class='nam'>keys</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2954' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>url_list</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>get_urls</span><span class='op'>(</span><span class='nam'>formats</span><span class='op'>,</span> <span class='nam'>format_param</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2955' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># check urls</span><span class='strut'>&nbsp;</span></p>
<p id='t2956' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file_url</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>check_urls</span><span class='op'>(</span><span class='nam'>url_list</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2957' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>file_url</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2958' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span> <span class='com'># got it!</span><span class='strut'>&nbsp;</span></p>
<p id='t2959' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2960' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>req_format</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>formats</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2961' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: format is not available&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2962' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t2963' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2964' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>url_list</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>get_urls</span><span class='op'>(</span><span class='nam'>formats</span><span class='op'>,</span> <span class='nam'>req_format</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2965' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file_url</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>check_urls</span><span class='op'>(</span><span class='nam'>url_list</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2966' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>format_param</span> <span class='op'>=</span> <span class='nam'>req_format</span><span class='strut'>&nbsp;</span></p>
<p id='t2967' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2968' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t2969' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span> <span class='nam'>file_id</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2970' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span> <span class='nam'>file_url</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2971' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>uploader</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2972' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2973' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span> <span class='nam'>json_data</span><span class='op'>[</span><span class='str'>&#39;name&#39;</span><span class='op'>]</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2974' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span> <span class='nam'>file_url</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;.&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2975' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;format&#39;</span><span class='op'>:</span> <span class='op'>(</span><span class='nam'>format_param</span> <span class='key'>is</span> <span class='nam'>None</span> <span class='key'>and</span> <span class='str'>u&#39;NA&#39;</span> <span class='key'>or</span> <span class='nam'>format_param</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2976' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;thumbnail&#39;</span><span class='op'>:</span> <span class='nam'>json_data</span><span class='op'>[</span><span class='str'>&#39;thumbnail_url&#39;</span><span class='op'>]</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2977' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;description&#39;</span><span class='op'>:</span> <span class='nam'>json_data</span><span class='op'>[</span><span class='str'>&#39;description&#39;</span><span class='op'>]</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2978' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;player_url&#39;</span><span class='op'>:</span> <span class='nam'>player_url</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t2979' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t2980' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2981' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>StanfordOpenClassroomIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2982' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information extractor for Stanford&#39;s Open ClassRoom&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2983' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2984' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;^(?:https?://)?openclassroom.stanford.edu(?P&lt;path&gt;/?|(/MainFolder/(?:HomePage|CoursePage|VideoPage)\.php([?]course=(?P&lt;course&gt;[^&amp;]+)(&amp;video=(?P&lt;video&gt;[^&amp;]+))?(&amp;.*)?)?))$&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2985' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;stanfordoc&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2986' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2987' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>objid</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2988' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2989' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[%s] %s: Downloading webpage&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>objid</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2990' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2991' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2992' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2993' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[%s] %s: Extracting information&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2994' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2995' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2996' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2997' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t2998' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t2999' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3000' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3001' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;course&#39;</span><span class='op'>)</span> <span class='key'>and</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;video&#39;</span><span class='op'>)</span><span class='op'>:</span> <span class='com'># A specific video</span><span class='strut'>&nbsp;</span></p>
<p id='t3002' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>course</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;course&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3003' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;video&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3004' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t3005' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span> <span class='nam'>course</span> <span class='op'>+</span> <span class='str'>&#39;_&#39;</span> <span class='op'>+</span> <span class='nam'>video</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3006' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3007' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3008' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t3009' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3010' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;id&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3011' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>baseUrl</span> <span class='op'>=</span> <span class='str'>&#39;http://openclassroom.stanford.edu/MainFolder/courses/&#39;</span> <span class='op'>+</span> <span class='nam'>course</span> <span class='op'>+</span> <span class='str'>&#39;/videos/&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3012' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>xmlUrl</span> <span class='op'>=</span> <span class='nam'>baseUrl</span> <span class='op'>+</span> <span class='nam'>video</span> <span class='op'>+</span> <span class='str'>&#39;.xml&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3013' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3014' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>metaXml</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>xmlUrl</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3015' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3016' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download video info XML: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3017' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3018' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mdoc</span> <span class='op'>=</span> <span class='nam'>xml</span><span class='op'>.</span><span class='nam'>etree</span><span class='op'>.</span><span class='nam'>ElementTree</span><span class='op'>.</span><span class='nam'>fromstring</span><span class='op'>(</span><span class='nam'>metaXml</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3019' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3020' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;title&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>mdoc</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>&#39;./title&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>text</span><span class='strut'>&nbsp;</span></p>
<p id='t3021' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;url&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>baseUrl</span> <span class='op'>+</span> <span class='nam'>mdoc</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>&#39;./videoFile&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>text</span><span class='strut'>&nbsp;</span></p>
<p id='t3022' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='nam'>IndexError</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3023' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;\nERROR: Invalid metadata XML file&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3024' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3025' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;ext&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;url&#39;</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>rpartition</span><span class='op'>(</span><span class='str'>&#39;.&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='num'>2</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3026' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='nam'>info</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3027' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;course&#39;</span><span class='op'>)</span><span class='op'>:</span> <span class='com'># A course page</span><span class='strut'>&nbsp;</span></p>
<p id='t3028' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>course</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;course&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3029' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t3030' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span> <span class='nam'>course</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3031' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;type&#39;</span><span class='op'>:</span> <span class='str'>&#39;playlist&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3032' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3033' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3034' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t3035' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3036' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;id&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3037' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3038' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>coursepage</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3039' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3040' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download course info page: &#39;</span> <span class='op'>+</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3041' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3042' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3043' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>&#39;&lt;h1&gt;([^&lt;]+)&lt;/h1&gt;&#39;</span><span class='op'>,</span> <span class='nam'>coursepage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3044' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>m</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3045' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;title&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3046' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3047' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;title&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;id&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3048' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3049' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>&#39;&lt;description&gt;([^&lt;]+)&lt;/description&gt;&#39;</span><span class='op'>,</span> <span class='nam'>coursepage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3050' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>m</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3051' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;description&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3052' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3053' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>links</span> <span class='op'>=</span> <span class='nam'>orderedSet</span><span class='op'>(</span><span class='nam'>re</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>&#39;&lt;a href=&quot;(VideoPage.php\?[^&quot;]+)&quot;&gt;&#39;</span><span class='op'>,</span> <span class='nam'>coursepage</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3054' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;list&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='op'>[</span><span class='strut'>&nbsp;</span></p>
<p id='t3055' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t3056' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;type&#39;</span><span class='op'>:</span> <span class='str'>&#39;reference&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3057' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span> <span class='str'>&#39;http://openclassroom.stanford.edu/MainFolder/&#39;</span> <span class='op'>+</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>vpage</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3058' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t3059' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>vpage</span> <span class='key'>in</span> <span class='nam'>links</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3060' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>results</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3061' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>entry</span> <span class='key'>in</span> <span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;list&#39;</span><span class='op'>]</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3062' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span> <span class='nam'>entry</span><span class='op'>[</span><span class='str'>&#39;type&#39;</span><span class='op'>]</span> <span class='op'>==</span> <span class='str'>&#39;reference&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3063' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>results</span> <span class='op'>+=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>extract</span><span class='op'>(</span><span class='nam'>entry</span><span class='op'>[</span><span class='str'>&#39;url&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3064' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>results</span><span class='strut'>&nbsp;</span></p>
<p id='t3065' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3066' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span> <span class='com'># Root page</span><span class='strut'>&nbsp;</span></p>
<p id='t3067' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t3068' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span> <span class='str'>&#39;Stanford OpenClassroom&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3069' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;type&#39;</span><span class='op'>:</span> <span class='str'>&#39;playlist&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3070' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3071' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3072' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t3073' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3074' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;id&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3075' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>rootURL</span> <span class='op'>=</span> <span class='str'>&#39;http://openclassroom.stanford.edu/MainFolder/HomePage.php&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3076' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3077' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>rootpage</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>rootURL</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3078' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3079' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download course info page: &#39;</span> <span class='op'>+</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3080' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3081' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3082' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;title&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;id&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3083' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3084' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>links</span> <span class='op'>=</span> <span class='nam'>orderedSet</span><span class='op'>(</span><span class='nam'>re</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>&#39;&lt;a href=&quot;(CoursePage.php\?[^&quot;]+)&quot;&gt;&#39;</span><span class='op'>,</span> <span class='nam'>rootpage</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3085' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;list&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='op'>[</span><span class='strut'>&nbsp;</span></p>
<p id='t3086' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t3087' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;type&#39;</span><span class='op'>:</span> <span class='str'>&#39;reference&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3088' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span> <span class='str'>&#39;http://openclassroom.stanford.edu/MainFolder/&#39;</span> <span class='op'>+</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>cpage</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3089' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t3090' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>cpage</span> <span class='key'>in</span> <span class='nam'>links</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3091' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3092' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>results</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3093' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>entry</span> <span class='key'>in</span> <span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;list&#39;</span><span class='op'>]</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3094' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span> <span class='nam'>entry</span><span class='op'>[</span><span class='str'>&#39;type&#39;</span><span class='op'>]</span> <span class='op'>==</span> <span class='str'>&#39;reference&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3095' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>results</span> <span class='op'>+=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>extract</span><span class='op'>(</span><span class='nam'>entry</span><span class='op'>[</span><span class='str'>&#39;url&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3096' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>results</span><span class='strut'>&nbsp;</span></p>
<p id='t3097' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3098' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>MTVIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3099' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information extractor for MTV.com&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t3100' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3101' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;^(?P&lt;proto&gt;https?://)?(?:www\.)?mtv\.com/videos/[^/]+/(?P&lt;videoid&gt;[0-9]+)/[^/]+$&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3102' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;mtv&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3103' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3104' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3105' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t3106' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[%s] %s: Extracting information&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3107' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3108' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3109' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3110' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3111' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3112' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3113' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;proto&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3114' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>url</span> <span class='op'>=</span> <span class='str'>&#39;http://&#39;</span> <span class='op'>+</span> <span class='nam'>url</span><span class='strut'>&nbsp;</span></p>
<p id='t3115' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;videoid&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3116' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3117' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_webpage</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3118' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3119' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;meta name=&quot;mtv_vt&quot; content=&quot;([^&quot;]+)&quot;/&gt;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3120' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3121' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract song name&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3122' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3123' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>song_name</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;iso-8859-1&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3124' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;meta name=&quot;mtv_an&quot; content=&quot;([^&quot;]+)&quot;/&gt;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3125' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3126' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract performer&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3127' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3128' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>performer</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;iso-8859-1&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3129' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>performer</span> <span class='op'>+</span> <span class='str'>&#39; - &#39;</span> <span class='op'>+</span> <span class='nam'>song_name</span><span class='strut'>&nbsp;</span></p>
<p id='t3130' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3131' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;meta name=&quot;mtvn_uri&quot; content=&quot;([^&quot;]+)&quot;/&gt;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3132' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3133' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to mtvn_uri&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3134' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3135' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mtvn_uri</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3136' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3137' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;MTVN.Player.defaultPlaylistId = ([0-9]+);&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3138' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3139' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract content id&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3140' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3141' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>content_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3142' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3143' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>videogen_url</span> <span class='op'>=</span> <span class='str'>&#39;http://www.mtv.com/player/includes/mediaGen.jhtml?uri=&#39;</span> <span class='op'>+</span> <span class='nam'>mtvn_uri</span> <span class='op'>+</span> <span class='str'>&#39;&amp;id=&#39;</span> <span class='op'>+</span> <span class='nam'>content_id</span> <span class='op'>+</span> <span class='str'>&#39;&amp;vid=&#39;</span> <span class='op'>+</span> <span class='nam'>video_id</span> <span class='op'>+</span> <span class='str'>&#39;&amp;ref=www.mtvn.com&amp;viewUri=&#39;</span> <span class='op'>+</span> <span class='nam'>mtvn_uri</span><span class='strut'>&nbsp;</span></p>
<p id='t3144' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3145' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>videogen_url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3146' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3147' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>metadataXml</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3148' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3149' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download video metadata: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3150' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3151' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3152' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mdoc</span> <span class='op'>=</span> <span class='nam'>xml</span><span class='op'>.</span><span class='nam'>etree</span><span class='op'>.</span><span class='nam'>ElementTree</span><span class='op'>.</span><span class='nam'>fromstring</span><span class='op'>(</span><span class='nam'>metadataXml</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3153' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>renditions</span> <span class='op'>=</span> <span class='nam'>mdoc</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='str'>&#39;.//rendition&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3154' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3155' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># For now, always pick the highest quality.</span><span class='strut'>&nbsp;</span></p>
<p id='t3156' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>rendition</span> <span class='op'>=</span> <span class='nam'>renditions</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3157' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3158' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3159' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>_</span><span class='op'>,</span><span class='nam'>_</span><span class='op'>,</span><span class='nam'>ext</span> <span class='op'>=</span> <span class='nam'>rendition</span><span class='op'>.</span><span class='nam'>attrib</span><span class='op'>[</span><span class='str'>&#39;type&#39;</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>partition</span><span class='op'>(</span><span class='str'>&#39;/&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3160' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>format</span> <span class='op'>=</span> <span class='nam'>ext</span> <span class='op'>+</span> <span class='str'>&#39;-&#39;</span> <span class='op'>+</span> <span class='nam'>rendition</span><span class='op'>.</span><span class='nam'>attrib</span><span class='op'>[</span><span class='str'>&#39;width&#39;</span><span class='op'>]</span> <span class='op'>+</span> <span class='str'>&#39;x&#39;</span> <span class='op'>+</span> <span class='nam'>rendition</span><span class='op'>.</span><span class='nam'>attrib</span><span class='op'>[</span><span class='str'>&#39;height&#39;</span><span class='op'>]</span> <span class='op'>+</span> <span class='str'>&#39;_&#39;</span> <span class='op'>+</span> <span class='nam'>rendition</span><span class='op'>.</span><span class='nam'>attrib</span><span class='op'>[</span><span class='str'>&#39;bitrate&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3161' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>rendition</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>&#39;./src&#39;</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>text</span><span class='strut'>&nbsp;</span></p>
<p id='t3162' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='nam'>KeyError</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3163' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>&#39;Invalid rendition field.&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3164' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3165' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3166' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t3167' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span> <span class='nam'>video_id</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3168' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3169' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>performer</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3170' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3171' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span> <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3172' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span> <span class='nam'>ext</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3173' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;format&#39;</span><span class='op'>:</span> <span class='nam'>format</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3174' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t3175' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3176' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='nam'>info</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3177' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3178' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3179' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>YoukuIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3180' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span>&nbsp; <span class='str'>r&#39;(?:http://)?v\.youku\.com/v_show/id_(?P&lt;ID&gt;[A-Za-z0-9]+)\.html&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3181' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3182' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3183' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report webpage download.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t3184' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[%s] %s: Downloading webpage&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3185' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3186' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3187' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t3188' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[%s] %s: Extracting information&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3189' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3190' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_gen_sid</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3191' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>nowTime</span> <span class='op'>=</span> <span class='nam'>int</span><span class='op'>(</span><span class='nam'>time</span><span class='op'>.</span><span class='nam'>time</span><span class='op'>(</span><span class='op'>)</span> <span class='op'>*</span> <span class='num'>1000</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3192' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>random1</span> <span class='op'>=</span> <span class='nam'>random</span><span class='op'>.</span><span class='nam'>randint</span><span class='op'>(</span><span class='num'>1000</span><span class='op'>,</span><span class='num'>1998</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3193' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>random2</span> <span class='op'>=</span> <span class='nam'>random</span><span class='op'>.</span><span class='nam'>randint</span><span class='op'>(</span><span class='num'>1000</span><span class='op'>,</span><span class='num'>9999</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3194' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3195' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='str'>&quot;%d%d%d&quot;</span> <span class='op'>%</span><span class='op'>(</span><span class='nam'>nowTime</span><span class='op'>,</span><span class='nam'>random1</span><span class='op'>,</span><span class='nam'>random2</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3196' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3197' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_get_file_ID_mix_string</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>seed</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3198' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mixed</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3199' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>source</span> <span class='op'>=</span> <span class='nam'>list</span><span class='op'>(</span><span class='str'>&quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\:._-1234567890&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3200' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>seed</span> <span class='op'>=</span> <span class='nam'>float</span><span class='op'>(</span><span class='nam'>seed</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3201' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>i</span> <span class='key'>in</span> <span class='nam'>range</span><span class='op'>(</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>source</span><span class='op'>)</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3202' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>seed</span>&nbsp; <span class='op'>=</span>&nbsp; <span class='op'>(</span><span class='nam'>seed</span> <span class='op'>*</span> <span class='num'>211</span> <span class='op'>+</span> <span class='num'>30031</span> <span class='op'>)</span> <span class='op'>%</span> <span class='num'>65536</span><span class='strut'>&nbsp;</span></p>
<p id='t3203' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>index</span>&nbsp; <span class='op'>=</span>&nbsp; <span class='nam'>math</span><span class='op'>.</span><span class='nam'>floor</span><span class='op'>(</span><span class='nam'>seed</span> <span class='op'>/</span> <span class='num'>65536</span> <span class='op'>*</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>source</span><span class='op'>)</span> <span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3204' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mixed</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>source</span><span class='op'>[</span><span class='nam'>int</span><span class='op'>(</span><span class='nam'>index</span><span class='op'>)</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3205' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>source</span><span class='op'>.</span><span class='nam'>remove</span><span class='op'>(</span><span class='nam'>source</span><span class='op'>[</span><span class='nam'>int</span><span class='op'>(</span><span class='nam'>index</span><span class='op'>)</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3206' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'>#return &#39;&#39;.join(mixed)</span><span class='strut'>&nbsp;</span></p>
<p id='t3207' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>mixed</span><span class='strut'>&nbsp;</span></p>
<p id='t3208' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3209' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_get_file_id</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>fileId</span><span class='op'>,</span> <span class='nam'>seed</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3210' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mixed</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_get_file_ID_mix_string</span><span class='op'>(</span><span class='nam'>seed</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3211' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>ids</span> <span class='op'>=</span> <span class='nam'>fileId</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;*&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3212' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>realId</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3213' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>ch</span> <span class='key'>in</span> <span class='nam'>ids</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3214' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>ch</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3215' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>realId</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>mixed</span><span class='op'>[</span><span class='nam'>int</span><span class='op'>(</span><span class='nam'>ch</span><span class='op'>)</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3216' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='str'>&#39;&#39;</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>realId</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3217' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3218' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3219' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3220' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3221' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3222' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3223' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;ID&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3224' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3225' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info_url</span> <span class='op'>=</span> <span class='str'>&#39;http://v.youku.com/player/getPlayList/VideoIDS/&#39;</span> <span class='op'>+</span> <span class='nam'>video_id</span><span class='strut'>&nbsp;</span></p>
<p id='t3226' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3227' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>info_url</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span> <span class='nam'>std_headers</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3228' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3229' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_webpage</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3230' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>jsondata</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3231' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3232' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Unable to retrieve video webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3233' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3234' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3235' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3236' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3237' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>jsonstr</span> <span class='op'>=</span> <span class='nam'>jsondata</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3238' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>config</span> <span class='op'>=</span> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>loads</span><span class='op'>(</span><span class='nam'>jsonstr</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3239' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3240' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_title</span> <span class='op'>=</span>&nbsp; <span class='nam'>config</span><span class='op'>[</span><span class='str'>&#39;data&#39;</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='str'>&#39;title&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3241' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>seed</span> <span class='op'>=</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>&#39;data&#39;</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='str'>&#39;seed&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3242' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3243' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>format</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>params</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;format&#39;</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3244' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>supported_format</span> <span class='op'>=</span> <span class='nam'>list</span><span class='op'>(</span><span class='nam'>config</span><span class='op'>[</span><span class='str'>&#39;data&#39;</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='str'>&#39;streamfileids&#39;</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>keys</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3245' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3246' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>format</span> <span class='key'>is</span> <span class='nam'>None</span> <span class='key'>or</span> <span class='nam'>format</span> <span class='op'>==</span> <span class='str'>&#39;best&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3247' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='str'>&#39;hd2&#39;</span> <span class='key'>in</span> <span class='nam'>supported_format</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3248' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>format</span> <span class='op'>=</span> <span class='str'>&#39;hd2&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3249' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3250' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>format</span> <span class='op'>=</span> <span class='str'>&#39;flv&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3251' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>ext</span> <span class='op'>=</span> <span class='str'>u&#39;flv&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3252' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>format</span> <span class='op'>==</span> <span class='str'>&#39;worst&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3253' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>format</span> <span class='op'>=</span> <span class='str'>&#39;mp4&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3254' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>ext</span> <span class='op'>=</span> <span class='str'>u&#39;mp4&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3255' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3256' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>format</span> <span class='op'>=</span> <span class='str'>&#39;flv&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3257' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>ext</span> <span class='op'>=</span> <span class='str'>u&#39;flv&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3258' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3259' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3260' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fileid</span> <span class='op'>=</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>&#39;data&#39;</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='str'>&#39;streamfileids&#39;</span><span class='op'>]</span><span class='op'>[</span><span class='nam'>format</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3261' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>keys</span> <span class='op'>=</span> <span class='op'>[</span><span class='nam'>s</span><span class='op'>[</span><span class='str'>&#39;k&#39;</span><span class='op'>]</span> <span class='key'>for</span> <span class='nam'>s</span> <span class='key'>in</span> <span class='nam'>config</span><span class='op'>[</span><span class='str'>&#39;data&#39;</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='str'>&#39;segs&#39;</span><span class='op'>]</span><span class='op'>[</span><span class='nam'>format</span><span class='op'>]</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3262' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>UnicodeDecodeError</span><span class='op'>,</span> <span class='nam'>ValueError</span><span class='op'>,</span> <span class='nam'>KeyError</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3263' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract info section&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3264' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3265' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3266' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>files_info</span><span class='op'>=</span><span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3267' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sid</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_gen_sid</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3268' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fileid</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_get_file_id</span><span class='op'>(</span><span class='nam'>fileid</span><span class='op'>,</span> <span class='nam'>seed</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3269' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3270' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'>#column 8,9 of fileid represent the segment number</span><span class='strut'>&nbsp;</span></p>
<p id='t3271' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'>#fileid[7:9] should be changed</span><span class='strut'>&nbsp;</span></p>
<p id='t3272' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>index</span><span class='op'>,</span> <span class='nam'>key</span> <span class='key'>in</span> <span class='nam'>enumerate</span><span class='op'>(</span><span class='nam'>keys</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3273' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3274' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>temp_fileid</span> <span class='op'>=</span> <span class='str'>&#39;%s%02X%s&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>fileid</span><span class='op'>[</span><span class='num'>0</span><span class='op'>:</span><span class='num'>8</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>index</span><span class='op'>,</span> <span class='nam'>fileid</span><span class='op'>[</span><span class='num'>10</span><span class='op'>:</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3275' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>download_url</span> <span class='op'>=</span> <span class='str'>&#39;http://f.youku.com/player/getFlvPath/sid/%s_%02X/st/flv/fileid/%s?k=%s&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>sid</span><span class='op'>,</span> <span class='nam'>index</span><span class='op'>,</span> <span class='nam'>temp_fileid</span><span class='op'>,</span> <span class='nam'>key</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3276' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3277' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t3278' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span> <span class='str'>&#39;%s_part%02d&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>video_id</span><span class='op'>,</span> <span class='nam'>index</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3279' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span> <span class='nam'>download_url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3280' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3281' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3282' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span> <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3283' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span> <span class='nam'>ext</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3284' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t3285' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>files_info</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>info</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3286' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3287' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>files_info</span><span class='strut'>&nbsp;</span></p>
<p id='t3288' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3289' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3290' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>XNXXIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3291' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information extractor for xnxx.com&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t3292' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3293' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;^http://video\.xnxx\.com/video([0-9]+)/(.*)&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3294' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;xnxx&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3295' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>VIDEO_URL_RE</span> <span class='op'>=</span> <span class='str'>r&#39;flv_url=(.*?)&amp;amp;&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3296' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>VIDEO_TITLE_RE</span> <span class='op'>=</span> <span class='str'>r&#39;&lt;title&gt;(.*?)\s+-\s+XNXX.COM&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3297' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>VIDEO_THUMB_RE</span> <span class='op'>=</span> <span class='str'>r&#39;url_bigthumb=(.*?)&amp;amp;&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3298' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3299' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_webpage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3300' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t3301' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[%s] %s: Downloading webpage&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3302' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3303' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3304' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t3305' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[%s] %s: Extracting information&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3306' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3307' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3308' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3309' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3310' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3311' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3312' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3313' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3314' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_webpage</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3315' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3316' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Get webpage content</span><span class='strut'>&nbsp;</span></p>
<p id='t3317' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3318' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage_bytes</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3319' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>webpage_bytes</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3320' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3321' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download video webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>err</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3322' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3323' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3324' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>result</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>VIDEO_URL_RE</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3325' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>result</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3326' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract video url&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3327' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3328' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>compat_urllib_parse</span><span class='op'>.</span><span class='nam'>unquote</span><span class='op'>(</span><span class='nam'>result</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3329' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3330' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>result</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>VIDEO_TITLE_RE</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3331' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>result</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3332' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract video title&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3333' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3334' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>result</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3335' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3336' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>result</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>VIDEO_THUMB_RE</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3337' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>result</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3338' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract video thumbnail&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3339' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3340' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_thumbnail</span> <span class='op'>=</span> <span class='nam'>result</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3341' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3342' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t3343' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span> <span class='nam'>video_id</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3344' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3345' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3346' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3347' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span> <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3348' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span> <span class='str'>&#39;flv&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3349' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;thumbnail&#39;</span><span class='op'>:</span> <span class='nam'>video_thumbnail</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3350' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;description&#39;</span><span class='op'>:</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3351' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3352' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3353' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3354' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>GooglePlusIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3355' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information extractor for plus.google.com.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t3356' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3357' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;(?:https://)?plus\.google\.com/(?:[^/]+/)*?posts/(\w+)&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3358' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;plus.google&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3359' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3360' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3361' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>InfoExtractor</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>downloader</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3362' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3363' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_extract_entry</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3364' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report downloading extry&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t3365' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[plus.google] Downloading entry: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3366' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3367' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_date</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>upload_date</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3368' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report downloading extry&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t3369' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[plus.google] Entry date: %s&#39;</span> <span class='op'>%</span> <span class='nam'>upload_date</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3370' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3371' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_uploader</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>uploader</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3372' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report downloading extry&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t3373' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[plus.google] Uploader: %s&#39;</span> <span class='op'>%</span> <span class='nam'>uploader</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3374' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3375' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_title</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_title</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3376' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report downloading extry&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t3377' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[plus.google] Title: %s&#39;</span> <span class='op'>%</span> <span class='nam'>video_title</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3378' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3379' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_extract_vid_page</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>video_page</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3380' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t3381' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[plus.google] Extracting video page: %s&#39;</span> <span class='op'>%</span> <span class='nam'>video_page</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3382' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3383' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3384' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract id from URL</span><span class='strut'>&nbsp;</span></p>
<p id='t3385' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3386' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3387' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3388' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3389' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3390' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>post_url</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>0</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3391' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3392' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3393' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_extension</span> <span class='op'>=</span> <span class='str'>&#39;flv&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3394' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3395' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Step 1, Retrieve post webpage to extract further information</span><span class='strut'>&nbsp;</span></p>
<p id='t3396' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extract_entry</span><span class='op'>(</span><span class='nam'>post_url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3397' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>post_url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3398' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3399' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3400' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3401' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Unable to retrieve entry webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3402' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3403' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3404' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract update date</span><span class='strut'>&nbsp;</span></p>
<p id='t3405' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>upload_date</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t3406' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>pattern</span> <span class='op'>=</span> <span class='str'>&#39;title=&quot;Timestamp&quot;&gt;(.*?)&lt;/a&gt;&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3407' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>pattern</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3408' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3409' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>upload_date</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3410' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Convert timestring to a format suitable for filename</span><span class='strut'>&nbsp;</span></p>
<p id='t3411' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>upload_date</span> <span class='op'>=</span> <span class='nam'>datetime</span><span class='op'>.</span><span class='nam'>datetime</span><span class='op'>.</span><span class='nam'>strptime</span><span class='op'>(</span><span class='nam'>upload_date</span><span class='op'>,</span> <span class='str'>&quot;%Y-%m-%d&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3412' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>upload_date</span> <span class='op'>=</span> <span class='nam'>upload_date</span><span class='op'>.</span><span class='nam'>strftime</span><span class='op'>(</span><span class='str'>&#39;%Y%m%d&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3413' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_date</span><span class='op'>(</span><span class='nam'>upload_date</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3414' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3415' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract uploader</span><span class='strut'>&nbsp;</span></p>
<p id='t3416' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>uploader</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t3417' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>pattern</span> <span class='op'>=</span> <span class='str'>r&#39;rel\=&quot;author&quot;.*?&gt;(.*?)&lt;/a&gt;&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3418' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>pattern</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3419' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3420' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>uploader</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3421' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_uploader</span><span class='op'>(</span><span class='nam'>uploader</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3422' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3423' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract title</span><span class='strut'>&nbsp;</span></p>
<p id='t3424' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Get the first line for title</span><span class='strut'>&nbsp;</span></p>
<p id='t3425' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_title</span> <span class='op'>=</span> <span class='str'>u&#39;NA&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3426' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>pattern</span> <span class='op'>=</span> <span class='str'>r&#39;&lt;meta name\=\&quot;Description\&quot; content\=\&quot;(.*?)[\n&lt;&quot;]&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3427' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>pattern</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3428' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3429' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_title</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3430' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_title</span><span class='op'>(</span><span class='nam'>video_title</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3431' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3432' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Step 2, Stimulate clicking the image box to launch video</span><span class='strut'>&nbsp;</span></p>
<p id='t3433' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>pattern</span> <span class='op'>=</span> <span class='str'>&#39;&quot;(https\://plus\.google\.com/photos/.*?)&quot;,,&quot;image/jpeg&quot;,&quot;video&quot;\]&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3434' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>pattern</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3435' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3436' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract video page URL&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3437' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3438' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_page</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3439' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>request</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>Request</span><span class='op'>(</span><span class='nam'>video_page</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3440' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3441' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>request</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3442' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3443' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Unable to retrieve video webpage: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3444' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3445' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extract_vid_page</span><span class='op'>(</span><span class='nam'>video_page</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3446' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3447' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3448' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Extract video links on video page</span><span class='strut'>&nbsp;</span></p>
<p id='t3449' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Extract video links of all sizes&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t3450' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>pattern</span> <span class='op'>=</span> <span class='str'>&#39;\d+,\d+,(\d+),&quot;(http\://redirector\.googlevideo\.com.*?)&quot;&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3451' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>findall</span><span class='op'>(</span><span class='nam'>pattern</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3452' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3453' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to extract video links&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3454' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3455' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Sort in resolution</span><span class='strut'>&nbsp;</span></p>
<p id='t3456' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>links</span> <span class='op'>=</span> <span class='nam'>sorted</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3457' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3458' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Choose the lowest of the sort, i.e. highest resolution</span><span class='strut'>&nbsp;</span></p>
<p id='t3459' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>links</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3460' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Only get the url. The resolution part in the tuple has no use anymore</span><span class='strut'>&nbsp;</span></p>
<p id='t3461' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>video_url</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3462' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Treat escaped \u0026 style hex</span><span class='strut'>&nbsp;</span></p>
<p id='t3463' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3464' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>video_url</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&quot;unicode_escape&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3465' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='nam'>AttributeError</span><span class='op'>:</span> <span class='com'># Python 3</span><span class='strut'>&nbsp;</span></p>
<p id='t3466' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>bytes</span><span class='op'>(</span><span class='nam'>video_url</span><span class='op'>,</span> <span class='str'>&#39;ascii&#39;</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;unicode-escape&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3467' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3468' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3469' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t3470' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp;&nbsp; <span class='nam'>video_id</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3471' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3472' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>uploader</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3473' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span>&nbsp; <span class='nam'>upload_date</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3474' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span>&nbsp; &nbsp; <span class='nam'>video_title</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3475' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='nam'>video_extension</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3476' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3477' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3478' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>NBAIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3479' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;^(?:https?://)?(?:watch\.|www\.)?nba\.com/(?:nba/)?video(/[^?]*)(\?.*)?$&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3480' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;nba&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3481' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3482' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3483' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3484' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3485' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3486' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3487' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3488' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3489' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>video_id</span><span class='op'>.</span><span class='nam'>endswith</span><span class='op'>(</span><span class='str'>&#39;/index.html&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3490' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>video_id</span><span class='op'>[</span><span class='op'>:</span><span class='op'>-</span><span class='nam'>len</span><span class='op'>(</span><span class='str'>&#39;/index.html&#39;</span><span class='op'>)</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3491' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3492' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_webpage</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3493' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3494' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='str'>u&#39;http://ht-mobile.cdn.turner.com/nba/big&#39;</span> <span class='op'>+</span> <span class='nam'>video_id</span> <span class='op'>+</span> <span class='str'>&#39;_nba_1280x720.mp4&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3495' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_findProp</span><span class='op'>(</span><span class='nam'>rexp</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3496' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>rexp</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3497' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>m</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3498' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3499' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3500' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>default</span><span class='strut'>&nbsp;</span></p>
<p id='t3501' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3502' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>shortened_video_id</span> <span class='op'>=</span> <span class='nam'>video_id</span><span class='op'>.</span><span class='nam'>rpartition</span><span class='op'>(</span><span class='str'>&#39;/&#39;</span><span class='op'>)</span><span class='op'>[</span><span class='num'>2</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3503' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>title</span> <span class='op'>=</span> <span class='nam'>_findProp</span><span class='op'>(</span><span class='str'>r&#39;&lt;meta property=&quot;og:title&quot; content=&quot;(.*?)&quot;&#39;</span><span class='op'>,</span> <span class='nam'>shortened_video_id</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>&#39;NBA.com: &#39;</span><span class='op'>,</span> <span class='str'>&#39;&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3504' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t3505' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span> <span class='nam'>shortened_video_id</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3506' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3507' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span> <span class='str'>&#39;mp4&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3508' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span> <span class='nam'>title</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3509' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader_date&#39;</span><span class='op'>:</span> <span class='nam'>_findProp</span><span class='op'>(</span><span class='str'>r&#39;&lt;b&gt;Date:&lt;/b&gt; (.*?)&lt;/div&gt;&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3510' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;description&#39;</span><span class='op'>:</span> <span class='nam'>_findProp</span><span class='op'>(</span><span class='str'>r&#39;&lt;div class=&quot;description&quot;&gt;(.*?)&lt;/h1&gt;&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3511' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t3512' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='nam'>info</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3513' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3514' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>JustinTVIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3515' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Information extractor for justin.tv and twitch.tv&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t3516' class='pln'>&nbsp; &nbsp; <span class='com'># TODO: One broadcast may be split into multiple videos. The key</span><span class='strut'>&nbsp;</span></p>
<p id='t3517' class='pln'>&nbsp; &nbsp; <span class='com'># &#39;broadcast_id&#39; is the same for all parts, and &#39;broadcast_part&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3518' class='pln'>&nbsp; &nbsp; <span class='com'># starts at 1 and increases. Can we treat all parts as one video?</span><span class='strut'>&nbsp;</span></p>
<p id='t3519' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3520' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&quot;&quot;&quot;(?x)^(?:http://)?(?:www\.)?(?:twitch|justin)\.tv/</span><span class='strut'>&nbsp;</span></p>
<p id='t3521' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; ([^/]+)(?:/b/([^/]+))?/?(?:\#.*)?$&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t3522' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_JUSTIN_PAGE_LIMIT</span> <span class='op'>=</span> <span class='num'>100</span><span class='strut'>&nbsp;</span></p>
<p id='t3523' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;justin.tv&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3524' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3525' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3526' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report information extraction.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t3527' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[%s] %s: Extracting information&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>file_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3528' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3529' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>channel</span><span class='op'>,</span> <span class='nam'>offset</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3530' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Report attempt to download a single page of videos.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t3531' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>to_screen</span><span class='op'>(</span><span class='str'>u&#39;[%s] %s: Downloading video information from %d to %d&#39;</span> <span class='op'>%</span><span class='strut'>&nbsp;</span></p>
<p id='t3532' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>IE_NAME</span><span class='op'>,</span> <span class='nam'>channel</span><span class='op'>,</span> <span class='nam'>offset</span><span class='op'>,</span> <span class='nam'>offset</span> <span class='op'>+</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_JUSTIN_PAGE_LIMIT</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3533' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3534' class='pln'>&nbsp; &nbsp; <span class='com'># Return count of items, list of *valid* items</span><span class='strut'>&nbsp;</span></p>
<p id='t3535' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_parse_page</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3536' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3537' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>urlh</span> <span class='op'>=</span> <span class='nam'>compat_urllib_request</span><span class='op'>.</span><span class='nam'>urlopen</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3538' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage_bytes</span> <span class='op'>=</span> <span class='nam'>urlh</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3539' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>webpage_bytes</span><span class='op'>.</span><span class='nam'>decode</span><span class='op'>(</span><span class='str'>&#39;utf-8&#39;</span><span class='op'>,</span> <span class='str'>&#39;ignore&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3540' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='op'>(</span><span class='nam'>compat_urllib_error</span><span class='op'>.</span><span class='nam'>URLError</span><span class='op'>,</span> <span class='nam'>compat_http_client</span><span class='op'>.</span><span class='nam'>HTTPException</span><span class='op'>,</span> <span class='nam'>socket</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>)</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3541' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to download video info JSON: %s&#39;</span> <span class='op'>%</span> <span class='nam'>compat_str</span><span class='op'>(</span><span class='nam'>err</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3542' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3543' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3544' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>response</span> <span class='op'>=</span> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>loads</span><span class='op'>(</span><span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3545' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3546' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>clip</span> <span class='key'>in</span> <span class='nam'>response</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3547' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>clip</span><span class='op'>[</span><span class='str'>&#39;video_file_url&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3548' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>video_url</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3549' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_extension</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>splitext</span><span class='op'>(</span><span class='nam'>video_url</span><span class='op'>)</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>[</span><span class='num'>1</span><span class='op'>:</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3550' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_date</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>sub</span><span class='op'>(</span><span class='str'>&#39;-&#39;</span><span class='op'>,</span> <span class='str'>&#39;&#39;</span><span class='op'>,</span> <span class='nam'>clip</span><span class='op'>[</span><span class='str'>&#39;created_on&#39;</span><span class='op'>]</span><span class='op'>[</span><span class='op'>:</span><span class='num'>10</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3551' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t3552' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span> <span class='nam'>clip</span><span class='op'>[</span><span class='str'>&#39;id&#39;</span><span class='op'>]</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3553' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3554' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span> <span class='nam'>clip</span><span class='op'>[</span><span class='str'>&#39;title&#39;</span><span class='op'>]</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3555' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>clip</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;user_id&#39;</span><span class='op'>,</span> <span class='nam'>clip</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;channel_id&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3556' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span> <span class='nam'>video_date</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3557' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span> <span class='nam'>video_extension</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3558' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3559' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>(</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>response</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>info</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3560' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3561' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3562' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3563' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3564' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3565' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3566' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3567' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>api</span> <span class='op'>=</span> <span class='str'>&#39;http://api.justin.tv&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3568' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>lastindex</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3569' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>paged</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'>&nbsp;</span></p>
<p id='t3570' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>lastindex</span> <span class='op'>==</span> <span class='num'>1</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3571' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>paged</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'>&nbsp;</span></p>
<p id='t3572' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>api</span> <span class='op'>+=</span> <span class='str'>&#39;/channel/archives/%s.json&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3573' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3574' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>api</span> <span class='op'>+=</span> <span class='str'>&#39;/clip/show/%s.json&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3575' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>api</span> <span class='op'>=</span> <span class='nam'>api</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>video_id</span><span class='op'>,</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3576' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3577' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_extraction</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3578' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3579' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3580' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>offset</span> <span class='op'>=</span> <span class='num'>0</span><span class='strut'>&nbsp;</span></p>
<p id='t3581' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>limit</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_JUSTIN_PAGE_LIMIT</span><span class='strut'>&nbsp;</span></p>
<p id='t3582' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>while</span> <span class='nam'>True</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3583' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>paged</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3584' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>report_download_page</span><span class='op'>(</span><span class='nam'>video_id</span><span class='op'>,</span> <span class='nam'>offset</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3585' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>page_url</span> <span class='op'>=</span> <span class='nam'>api</span> <span class='op'>+</span> <span class='op'>(</span><span class='str'>&#39;?offset=%d&amp;limit=%d&#39;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>offset</span><span class='op'>,</span> <span class='nam'>limit</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3586' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>page_count</span><span class='op'>,</span> <span class='nam'>page_info</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_parse_page</span><span class='op'>(</span><span class='nam'>page_url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3587' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span><span class='op'>.</span><span class='nam'>extend</span><span class='op'>(</span><span class='nam'>page_info</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3588' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>paged</span> <span class='key'>or</span> <span class='nam'>page_count</span> <span class='op'>!=</span> <span class='nam'>limit</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3589' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span><span class='strut'>&nbsp;</span></p>
<p id='t3590' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>offset</span> <span class='op'>+=</span> <span class='nam'>limit</span><span class='strut'>&nbsp;</span></p>
<p id='t3591' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>info</span><span class='strut'>&nbsp;</span></p>
<p id='t3592' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3593' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>FunnyOrDieIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3594' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;^(?:https?://)?(?:www\.)?funnyordie\.com/videos/(?P&lt;id&gt;[0-9a-f]+)/.*$&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3595' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3596' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3597' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3598' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3599' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3600' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3601' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3602' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;id&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3603' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_webpage</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3604' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3605' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;video[^&gt;]*&gt;\s*&lt;source[^&gt;]*&gt;\s*&lt;source src=&quot;(?P&lt;url&gt;[^&quot;]+)&quot;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>DOTALL</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3606' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>m</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3607' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: unable to find video information&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3608' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;url&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3609' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3610' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&quot;class=&#39;player_page_h1&#39;&gt;\s+&lt;a.*?&gt;(?P&lt;title&gt;.*?)&lt;/a&gt;&quot;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3611' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>m</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3612' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;Cannot find video title&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3613' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>title</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;title&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3614' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3615' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;meta property=&quot;og:description&quot; content=&quot;(?P&lt;desc&gt;.*?)&quot;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3616' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>m</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3617' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>desc</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;desc&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3618' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3619' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>desc</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t3620' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3621' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t3622' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span> <span class='nam'>video_id</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3623' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3624' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span> <span class='str'>&#39;mp4&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3625' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span> <span class='nam'>title</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3626' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;description&#39;</span><span class='op'>:</span> <span class='nam'>desc</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3627' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t3628' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='nam'>info</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3629' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3630' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>TweetReelIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3631' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;^(?:https?://)?(?:www\.)?tweetreel\.com/[?](?P&lt;id&gt;[0-9a-z]+)$&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3632' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3633' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3634' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mobj</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3635' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>mobj</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3636' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: invalid URL: %s&#39;</span> <span class='op'>%</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3637' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t3638' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3639' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>mobj</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;id&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3640' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_webpage</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3641' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3642' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;div id=&quot;left&quot; status_id=&quot;([0-9]+)&quot;&gt;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3643' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>m</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3644' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Cannot find status ID&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3645' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>status_id</span> <span class='op'>=</span> <span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3646' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3647' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;div class=&quot;tweet_text&quot;&gt;(.*?)&lt;/div&gt;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>,</span> <span class='nam'>flags</span><span class='op'>=</span><span class='nam'>re</span><span class='op'>.</span><span class='nam'>DOTALL</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3648' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>m</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3649' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;WARNING: Cannot find description&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3650' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>desc</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>re</span><span class='op'>.</span><span class='nam'>sub</span><span class='op'>(</span><span class='str'>&#39;&lt;a.*?&lt;/a&gt;&#39;</span><span class='op'>,</span> <span class='str'>&#39;&#39;</span><span class='op'>,</span> <span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3651' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3652' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;div class=&quot;tweet_info&quot;&gt;.*?from &lt;a target=&quot;_blank&quot; href=&quot;https?://twitter.com/(?P&lt;uploader_id&gt;.+?)&quot;&gt;(?P&lt;uploader&gt;.+?)&lt;/a&gt;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>,</span> <span class='nam'>flags</span><span class='op'>=</span><span class='nam'>re</span><span class='op'>.</span><span class='nam'>DOTALL</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3653' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>m</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3654' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Cannot find uploader&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3655' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>uploader</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;uploader&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3656' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>uploader_id</span> <span class='op'>=</span> <span class='nam'>unescapeHTML</span><span class='op'>(</span><span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;uploader_id&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3657' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3658' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;span unixtime=&quot;([0-9]+)&quot;&#39;</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3659' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>m</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3660' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Cannot find upload date&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3661' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>upload_date</span> <span class='op'>=</span> <span class='nam'>datetime</span><span class='op'>.</span><span class='nam'>datetime</span><span class='op'>.</span><span class='nam'>fromtimestamp</span><span class='op'>(</span><span class='nam'>int</span><span class='op'>(</span><span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>strftime</span><span class='op'>(</span><span class='str'>&#39;%Y%m%d&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3662' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3663' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>title</span> <span class='op'>=</span> <span class='nam'>desc</span><span class='strut'>&nbsp;</span></p>
<p id='t3664' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='str'>&#39;http://files.tweetreel.com/video/&#39;</span> <span class='op'>+</span> <span class='nam'>status_id</span> <span class='op'>+</span> <span class='str'>&#39;.mov&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3665' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3666' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t3667' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span> <span class='nam'>video_id</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3668' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span> <span class='nam'>video_url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3669' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span> <span class='str'>&#39;mov&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3670' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span> <span class='nam'>title</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3671' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;description&#39;</span><span class='op'>:</span> <span class='nam'>desc</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3672' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>uploader</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3673' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader_id&#39;</span><span class='op'>:</span> <span class='nam'>uploader_id</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3674' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;internal_id&#39;</span><span class='op'>:</span> <span class='nam'>status_id</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3675' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;upload_date&#39;</span><span class='op'>:</span> <span class='nam'>upload_date</span><span class='strut'>&nbsp;</span></p>
<p id='t3676' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t3677' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='nam'>info</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3678' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3679' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>SteamIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3680' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&quot;&quot;&quot;http://store.steampowered.com/ </span><span class='strut'>&nbsp;</span></p>
<p id='t3681' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (?P&lt;urltype&gt;video|app)/ #If the page is only for videos or for a game</span><span class='strut'>&nbsp;</span></p>
<p id='t3682' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (?P&lt;gameID&gt;\d+)/?</span><span class='strut'>&nbsp;</span></p>
<p id='t3683' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (?P&lt;videoID&gt;\d*)(?P&lt;extra&gt;\??) #For urltype == video we sometimes get the videoID</span><span class='strut'>&nbsp;</span></p>
<p id='t3684' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t3685' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3686' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>suitable</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3687' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Receives a URL and returns True if suitable for this IE.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t3688' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>VERBOSE</span><span class='op'>)</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t3689' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3690' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3691' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>VERBOSE</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3692' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>urlRE</span> <span class='op'>=</span> <span class='str'>r&quot;&#39;movie_(?P&lt;videoID&gt;\d+)&#39;: \{\s*FILENAME: \&quot;(?P&lt;videoURL&gt;[\w:/\.\?=]+)\&quot;(,\s*MOVIE_NAME: \&quot;(?P&lt;videoName&gt;[\w:/\.\?=\+-]+)\&quot;)?\s*\},&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t3693' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>gameID</span> <span class='op'>=</span> <span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;gameID&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3694' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>videourl</span> <span class='op'>=</span> <span class='str'>&#39;http://store.steampowered.com/video/%s/&#39;</span> <span class='op'>%</span> <span class='nam'>gameID</span><span class='strut'>&nbsp;</span></p>
<p id='t3695' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_webpage</span><span class='op'>(</span><span class='nam'>videourl</span><span class='op'>,</span> <span class='nam'>gameID</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3696' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mweb</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>finditer</span><span class='op'>(</span><span class='nam'>urlRE</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3697' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>namesRE</span> <span class='op'>=</span> <span class='str'>r&#39;&lt;span class=\&quot;title\&quot;&gt;(?P&lt;videoName&gt;[\w:/\.\?=\+\s-]+)&lt;/span&gt;&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3698' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>titles</span> <span class='op'>=</span> <span class='nam'>list</span><span class='op'>(</span><span class='nam'>re</span><span class='op'>.</span><span class='nam'>finditer</span><span class='op'>(</span><span class='nam'>namesRE</span><span class='op'>,</span> <span class='nam'>webpage</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3699' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>videos</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3700' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>vid</span><span class='op'>,</span><span class='nam'>vtitle</span> <span class='key'>in</span> <span class='nam'>zip</span><span class='op'>(</span><span class='nam'>mweb</span><span class='op'>,</span><span class='nam'>titles</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3701' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>vid</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;videoID&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3702' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>title</span> <span class='op'>=</span> <span class='nam'>vtitle</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;videoName&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3703' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='nam'>vid</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;videoURL&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3704' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>video_url</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3705' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_downloader</span><span class='op'>.</span><span class='nam'>trouble</span><span class='op'>(</span><span class='str'>u&#39;ERROR: Cannot find video url for %s&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3706' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t3707' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span><span class='nam'>video_id</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3708' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span><span class='nam'>video_url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3709' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span> <span class='str'>&#39;flv&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3710' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span> <span class='nam'>title</span><span class='strut'>&nbsp;</span></p>
<p id='t3711' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t3712' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>videos</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>info</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3713' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>videos</span><span class='strut'>&nbsp;</span></p>
<p id='t3714' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3715' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>UstreamIE</span><span class='op'>(</span><span class='nam'>InfoExtractor</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3716' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_VALID_URL</span> <span class='op'>=</span> <span class='str'>r&#39;http://www.ustream.tv/recorded/(?P&lt;videoID&gt;\d+)&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3717' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>IE_NAME</span> <span class='op'>=</span> <span class='str'>u&#39;ustream&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t3718' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3719' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_real_extract</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3720' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>_VALID_URL</span><span class='op'>,</span> <span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3721' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_id</span> <span class='op'>=</span> <span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;videoID&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3722' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>video_url</span> <span class='op'>=</span> <span class='str'>u&#39;http://tcdn.ustream.tv/video/%s&#39;</span> <span class='op'>%</span> <span class='nam'>video_id</span><span class='strut'>&nbsp;</span></p>
<p id='t3723' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>webpage</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>_download_webpage</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>,</span> <span class='nam'>video_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3724' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;data-title=&quot;(?P&lt;title&gt;.+)&quot;&#39;</span><span class='op'>,</span><span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3725' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>title</span> <span class='op'>=</span> <span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;title&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3726' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='str'>r&#39;&lt;a class=&quot;state&quot; data-content-type=&quot;channel&quot; data-content-id=&quot;(?P&lt;uploader&gt;\d+)&quot;&#39;</span><span class='op'>,</span><span class='nam'>webpage</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3727' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>uploader</span> <span class='op'>=</span> <span class='nam'>m</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='str'>&#39;uploader&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3728' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>info</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
<p id='t3729' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;id&#39;</span><span class='op'>:</span><span class='nam'>video_id</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3730' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;url&#39;</span><span class='op'>:</span><span class='nam'>video_url</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3731' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;ext&#39;</span><span class='op'>:</span> <span class='str'>&#39;flv&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3732' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;title&#39;</span><span class='op'>:</span> <span class='nam'>title</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3733' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;uploader&#39;</span><span class='op'>:</span> <span class='nam'>uploader</span><span class='strut'>&nbsp;</span></p>
<p id='t3734' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t3735' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='nam'>info</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3736' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3737' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3738' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>gen_extractors</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t3739' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Return a list of an instance of every supported extractor.</span><span class='strut'>&nbsp;</span></p>
<p id='t3740' class='pln'><span class='str'>&nbsp; &nbsp; The order does matter; the first extractor matched is the one handling the URL.</span><span class='strut'>&nbsp;</span></p>
<p id='t3741' class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t3742' class='stm mis'>&nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='strut'>&nbsp;</span></p>
<p id='t3743' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>YoutubePlaylistIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3744' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>YoutubeChannelIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3745' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>YoutubeUserIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3746' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>YoutubeSearchIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3747' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>YoutubeIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3748' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>MetacafeIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3749' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>DailymotionIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3750' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>GoogleSearchIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3751' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>PhotobucketIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3752' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>YahooIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3753' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>YahooSearchIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3754' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>DepositFilesIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3755' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>FacebookIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3756' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>BlipTVUserIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3757' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>BlipTVIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3758' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>VimeoIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3759' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>MyVideoIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3760' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>ComedyCentralIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3761' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>EscapistIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3762' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>CollegeHumorIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3763' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>XVideosIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3764' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>SoundcloudIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3765' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>InfoQIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3766' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>MixcloudIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3767' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>StanfordOpenClassroomIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3768' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>MTVIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3769' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>YoukuIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3770' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>XNXXIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3771' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>GooglePlusIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3772' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>ArteTvIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3773' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>NBAIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3774' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>JustinTVIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3775' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>FunnyOrDieIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3776' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>TweetReelIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3777' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>SteamIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3778' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>UstreamIE</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t3779' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>GenericIE</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t3780' class='pln'>&nbsp; &nbsp; <span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t3781' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3782' class='pln'><span class='strut'>&nbsp;</span></p>
</td>
</tr>
</table>
</div>
<div id='footer'>
<div class='content'>
<p>
<a class='nav' href='index.html'>&#xab; index</a> &nbsp; &nbsp; <a class='nav' href='http://nedbatchelder.com/code/coverage/3.6b1'>coverage.py v3.6b1</a>
</p>
</div>
</div>
</body>
</html>