From b0548018d82cf6ecc717b3382ca5e699631458e9 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 14 Feb 2016 19:50:59 +0100 Subject: [PATCH] Simplepie is removed since we don't use it anymore --- boot.php | 9 - include/Scrape.php | 127 +- include/feed.php | 28 +- library/simplepie/LICENSE.txt | 26 - library/simplepie/README.markdown | 53 - .../COMPATIBILITY README.txt | 7 - .../sp_compatibility_test.php | 330 - library/simplepie/create.php | 178 - library/simplepie/db.sql | 38 - library/simplepie/demo/cli_test.php | 23 - .../demo/for_the_demo/alternate_favicon.png | Bin 28621 -> 0 bytes .../for_the_demo/background_blockquote.png | Bin 27353 -> 0 bytes .../demo/for_the_demo/background_menuitem.gif | Bin 533 -> 0 bytes .../for_the_demo/background_menuitem_off.gif | Bin 533 -> 0 bytes .../background_menuitem_shadow.gif | Bin 250 -> 0 bytes .../demo/for_the_demo/favicons/alternate.png | Bin 28621 -> 0 bytes .../demo/for_the_demo/favicons/blinklist.png | Bin 4377 -> 0 bytes .../demo/for_the_demo/favicons/blogmarks.png | Bin 3823 -> 0 bytes .../demo/for_the_demo/favicons/delicious.png | Bin 3739 -> 0 bytes .../demo/for_the_demo/favicons/digg.png | Bin 4004 -> 0 bytes .../demo/for_the_demo/favicons/magnolia.png | Bin 4574 -> 0 bytes .../demo/for_the_demo/favicons/myweb2.png | Bin 4010 -> 0 bytes .../demo/for_the_demo/favicons/newsvine.png | Bin 3804 -> 0 bytes .../demo/for_the_demo/favicons/reddit.png | Bin 4239 -> 0 bytes .../demo/for_the_demo/favicons/segnalo.png | Bin 4116 -> 0 bytes .../demo/for_the_demo/favicons/simpy.png | Bin 4256 -> 0 bytes .../demo/for_the_demo/favicons/spurl.png | Bin 3970 -> 0 bytes .../demo/for_the_demo/favicons/technorati.png | Bin 4087 -> 0 bytes .../demo/for_the_demo/favicons/wists.png | Bin 3974 -> 0 bytes library/simplepie/demo/for_the_demo/feed.png | Bin 715 -> 0 bytes .../demo/for_the_demo/logo_simplepie_demo.png | Bin 3047 -> 0 bytes .../demo/for_the_demo/lucida-grande-bold.swf | Bin 21159 -> 0 bytes .../demo/for_the_demo/mediaplayer.swf | Bin 32008 -> 0 bytes .../demo/for_the_demo/mediaplayer_readme.htm | 5 - .../demo/for_the_demo/mini_podcast.png | Bin 1202 -> 0 bytes .../demo/for_the_demo/place_audio.png | Bin 851 -> 0 bytes .../demo/for_the_demo/place_video.png | Bin 36713 -> 0 bytes .../demo/for_the_demo/sIFR-print.css | 35 - .../demo/for_the_demo/sIFR-screen.css | 39 - .../demo/for_the_demo/sifr-config.js | 40 - library/simplepie/demo/for_the_demo/sifr.js | 19 - .../simplepie/demo/for_the_demo/simplepie.css | 397 - .../simplepie/demo/for_the_demo/sleight.js | 31 - .../place_audio_fireworksfile.png | Bin 39177 -> 0 bytes .../place_video_fireworksfile.png | Bin 115826 -> 0 bytes .../source_files/sIFR-r245/SifrStyleSheet.as | 71 - .../source_files/sIFR-r245/_README_.txt | 12 - .../source_files/sIFR-r245/options.as | 12 - .../source_files/sIFR-r245/sIFR.as | 359 - .../source_files/sIFR-r245/sifr.fla | Bin 47104 -> 0 bytes .../demo/for_the_demo/top_gradient.gif | Bin 1378 -> 0 bytes .../simplepie/demo/for_the_demo/verdana.swf | Bin 28575 -> 0 bytes .../for_the_demo/yanone-kaffeesatz-bold.swf | Bin 76780 -> 0 bytes library/simplepie/demo/handler_image.php | 6 - library/simplepie/demo/index.php | 295 - library/simplepie/demo/minimalistic.php | 137 - library/simplepie/demo/multifeeds.php | 108 - library/simplepie/demo/test.php | 62 - library/simplepie/idn/LICENCE | 502 - library/simplepie/idn/ReadMe.txt | 123 - library/simplepie/idn/idna_convert.class.php | 969 - library/simplepie/idn/npdata.ser | 1 - library/simplepie/simplepie.inc | 15150 ---------------- util/README | 2 +- 64 files changed, 41 insertions(+), 19153 deletions(-) delete mode 100644 library/simplepie/LICENSE.txt delete mode 100644 library/simplepie/README.markdown delete mode 100644 library/simplepie/compatibility_test/COMPATIBILITY README.txt delete mode 100644 library/simplepie/compatibility_test/sp_compatibility_test.php delete mode 100644 library/simplepie/create.php delete mode 100644 library/simplepie/db.sql delete mode 100644 library/simplepie/demo/cli_test.php delete mode 100644 library/simplepie/demo/for_the_demo/alternate_favicon.png delete mode 100644 library/simplepie/demo/for_the_demo/background_blockquote.png delete mode 100644 library/simplepie/demo/for_the_demo/background_menuitem.gif delete mode 100644 library/simplepie/demo/for_the_demo/background_menuitem_off.gif delete mode 100644 library/simplepie/demo/for_the_demo/background_menuitem_shadow.gif delete mode 100644 library/simplepie/demo/for_the_demo/favicons/alternate.png delete mode 100644 library/simplepie/demo/for_the_demo/favicons/blinklist.png delete mode 100644 library/simplepie/demo/for_the_demo/favicons/blogmarks.png delete mode 100644 library/simplepie/demo/for_the_demo/favicons/delicious.png delete mode 100644 library/simplepie/demo/for_the_demo/favicons/digg.png delete mode 100644 library/simplepie/demo/for_the_demo/favicons/magnolia.png delete mode 100644 library/simplepie/demo/for_the_demo/favicons/myweb2.png delete mode 100644 library/simplepie/demo/for_the_demo/favicons/newsvine.png delete mode 100644 library/simplepie/demo/for_the_demo/favicons/reddit.png delete mode 100644 library/simplepie/demo/for_the_demo/favicons/segnalo.png delete mode 100644 library/simplepie/demo/for_the_demo/favicons/simpy.png delete mode 100644 library/simplepie/demo/for_the_demo/favicons/spurl.png delete mode 100644 library/simplepie/demo/for_the_demo/favicons/technorati.png delete mode 100644 library/simplepie/demo/for_the_demo/favicons/wists.png delete mode 100644 library/simplepie/demo/for_the_demo/feed.png delete mode 100644 library/simplepie/demo/for_the_demo/logo_simplepie_demo.png delete mode 100644 library/simplepie/demo/for_the_demo/lucida-grande-bold.swf delete mode 100644 library/simplepie/demo/for_the_demo/mediaplayer.swf delete mode 100644 library/simplepie/demo/for_the_demo/mediaplayer_readme.htm delete mode 100644 library/simplepie/demo/for_the_demo/mini_podcast.png delete mode 100644 library/simplepie/demo/for_the_demo/place_audio.png delete mode 100644 library/simplepie/demo/for_the_demo/place_video.png delete mode 100644 library/simplepie/demo/for_the_demo/sIFR-print.css delete mode 100644 library/simplepie/demo/for_the_demo/sIFR-screen.css delete mode 100644 library/simplepie/demo/for_the_demo/sifr-config.js delete mode 100644 library/simplepie/demo/for_the_demo/sifr.js delete mode 100644 library/simplepie/demo/for_the_demo/simplepie.css delete mode 100644 library/simplepie/demo/for_the_demo/sleight.js delete mode 100644 library/simplepie/demo/for_the_demo/source_files/place_audio_fireworksfile.png delete mode 100644 library/simplepie/demo/for_the_demo/source_files/place_video_fireworksfile.png delete mode 100644 library/simplepie/demo/for_the_demo/source_files/sIFR-r245/SifrStyleSheet.as delete mode 100644 library/simplepie/demo/for_the_demo/source_files/sIFR-r245/_README_.txt delete mode 100644 library/simplepie/demo/for_the_demo/source_files/sIFR-r245/options.as delete mode 100644 library/simplepie/demo/for_the_demo/source_files/sIFR-r245/sIFR.as delete mode 100644 library/simplepie/demo/for_the_demo/source_files/sIFR-r245/sifr.fla delete mode 100644 library/simplepie/demo/for_the_demo/top_gradient.gif delete mode 100644 library/simplepie/demo/for_the_demo/verdana.swf delete mode 100644 library/simplepie/demo/for_the_demo/yanone-kaffeesatz-bold.swf delete mode 100644 library/simplepie/demo/handler_image.php delete mode 100644 library/simplepie/demo/index.php delete mode 100644 library/simplepie/demo/minimalistic.php delete mode 100644 library/simplepie/demo/multifeeds.php delete mode 100644 library/simplepie/demo/test.php delete mode 100644 library/simplepie/idn/LICENCE delete mode 100644 library/simplepie/idn/ReadMe.txt delete mode 100644 library/simplepie/idn/idna_convert.class.php delete mode 100644 library/simplepie/idn/npdata.ser delete mode 100644 library/simplepie/simplepie.inc diff --git a/boot.php b/boot.php index 4ef30eada..62b90aa2c 100644 --- a/boot.php +++ b/boot.php @@ -588,15 +588,6 @@ class App { if(x($_SERVER,'SERVER_NAME')) { $this->hostname = $_SERVER['SERVER_NAME']; - // See bug 437 - this didn't work so disabling it - //if(stristr($this->hostname,'xn--')) { - // PHP or webserver may have converted idn to punycode, so - // convert punycode back to utf-8 - // require_once('library/simplepie/idn/idna_convert.class.php'); - // $x = new idna_convert(); - // $this->hostname = $x->decode($_SERVER['SERVER_NAME']); - //} - if(x($_SERVER,'SERVER_PORT') && $_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443) $this->hostname .= ':' . $_SERVER['SERVER_PORT']; /* diff --git a/include/Scrape.php b/include/Scrape.php index ca6489b16..95a3c0221 100644 --- a/include/Scrape.php +++ b/include/Scrape.php @@ -2,6 +2,7 @@ require_once('library/HTML5/Parser.php'); require_once('include/crypto.php'); +require_once('include/feed.php'); if(! function_exists('scrape_dfrn')) { function scrape_dfrn($url, $dont_probe = false) { @@ -366,8 +367,6 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) { $network = NETWORK_TWITTER; } - // Twitter is deactivated since twitter closed its old API - //$twitter = ((strpos($url,'twitter.com') !== false) ? true : false); $lastfm = ((strpos($url,'last.fm/user') !== false) ? true : false); $at_addr = ((strpos($url,'@') !== false) ? true : false); @@ -604,21 +603,6 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) { $vcard['nick'] = $addr_parts[0]; } - /* if($twitter) { - logger('twitter: setup'); - $tid = basename($url); - $tapi = 'https://api.twitter.com/1/statuses/user_timeline.rss'; - if(intval($tid)) - $poll = $tapi . '?user_id=' . $tid; - else - $poll = $tapi . '?screen_name=' . $tid; - $profile = 'http://twitter.com/#!/' . $tid; - //$vcard['photo'] = 'https://api.twitter.com/1/users/profile_image/' . $tid; - $vcard['photo'] = 'https://api.twitter.com/1/users/profile_image?screen_name=' . $tid . '&size=bigger'; - $vcard['nick'] = $tid; - $vcard['fn'] = $tid; - } */ - if($lastfm) { $profile = $url; $poll = str_replace(array('www.','last.fm/'),array('','ws.audioscrobbler.com/1.0/'),$url) . '/recenttracks.rss'; @@ -662,85 +646,34 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) { if(x($feedret,'photo') && (! x($vcard,'photo'))) $vcard['photo'] = $feedret['photo']; - require_once('library/simplepie/simplepie.inc'); - $feed = new SimplePie(); + $cookiejar = tempnam(get_temppath(), 'cookiejar-scrape-feed-'); $xml = fetch_url($poll, false, $redirects, 0, Null, $cookiejar); unlink($cookiejar); logger('probe_url: fetch feed: ' . $poll . ' returns: ' . $xml, LOGGER_DATA); - $a = get_app(); - logger('probe_url: scrape_feed: headers: ' . $a->get_curl_headers(), LOGGER_DATA); - - // Don't try and parse an empty string - $feed->set_raw_data(($xml) ? $xml : ''); - - $feed->init(); - if($feed->error()) { - logger('probe_url: scrape_feed: Error parsing XML: ' . $feed->error()); + if ($xml == "") { + logger("scrape_feed: XML is empty for feed ".$poll); $network = NETWORK_PHANTOM; - } + } else { + $data = feed_import($xml,$dummy1,$dummy2, $dummy3, true); - if(! x($vcard,'photo')) - $vcard['photo'] = $feed->get_image_url(); - $author = $feed->get_author(); + if (!is_array($data)) { + logger("scrape_feed: This doesn't seem to be a feed: ".$poll); + $network = NETWORK_PHANTOM; + } else { + if (($vcard["photo"] == "") AND ($data["header"]["author-avatar"] != "")) + $vcard["photo"] = $data["header"]["author-avatar"]; - if($author) { - $vcard['fn'] = unxmlify(trim($author->get_name())); - if(! $vcard['fn']) - $vcard['fn'] = trim(unxmlify($author->get_email())); - if(strpos($vcard['fn'],'@') !== false) - $vcard['fn'] = substr($vcard['fn'],0,strpos($vcard['fn'],'@')); + if (($vcard["fn"] == "") AND ($data["header"]["author-name"] != "")) + $vcard["fn"] = $data["header"]["author-name"]; - $email = unxmlify($author->get_email()); - if(! $profile && $author->get_link()) - $profile = trim(unxmlify($author->get_link())); - if(! $vcard['photo']) { - $rawtags = $feed->get_feed_tags( SIMPLEPIE_NAMESPACE_ATOM_10, 'author'); - if($rawtags) { - $elems = $rawtags[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]; - if((x($elems,'link')) && ($elems['link'][0]['attribs']['']['rel'] === 'photo')) - $vcard['photo'] = $elems['link'][0]['attribs']['']['href']; - } - } - // Fetch fullname via poco:displayName - $pocotags = $feed->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author'); - if ($pocotags) { - $elems = $pocotags[0]['child']['http://portablecontacts.net/spec/1.0']; - if (isset($elems["displayName"])) - $vcard['fn'] = $elems["displayName"][0]["data"]; - if (isset($elems["preferredUsername"])) - $vcard['nick'] = $elems["preferredUsername"][0]["data"]; - } - } - else { - $item = $feed->get_item(0); - if($item) { - $author = $item->get_author(); - if($author) { - $vcard['fn'] = trim(unxmlify($author->get_name())); - if(! $vcard['fn']) - $vcard['fn'] = trim(unxmlify($author->get_email())); - if(strpos($vcard['fn'],'@') !== false) - $vcard['fn'] = substr($vcard['fn'],0,strpos($vcard['fn'],'@')); - $email = unxmlify($author->get_email()); - if(! $profile && $author->get_link()) - $profile = trim(unxmlify($author->get_link())); - } - if(! $vcard['photo']) { - $rawmedia = $item->get_item_tags('http://search.yahoo.com/mrss/','thumbnail'); - if($rawmedia && $rawmedia[0]['attribs']['']['url']) - $vcard['photo'] = unxmlify($rawmedia[0]['attribs']['']['url']); - } - if(! $vcard['photo']) { - $rawtags = $item->get_item_tags( SIMPLEPIE_NAMESPACE_ATOM_10, 'author'); - if($rawtags) { - $elems = $rawtags[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]; - if((x($elems,'link')) && ($elems['link'][0]['attribs']['']['rel'] === 'photo')) - $vcard['photo'] = $elems['link'][0]['attribs']['']['href']; - } - } + if (($vcard["nick"] == "") AND ($data["header"]["author-nick"] != "")) + $vcard["nick"] = $data["header"]["author-nick"]; + + if(!$profile AND ($data["header"]["author-link"] != "") AND !in_array($network, array("", NETWORK_FEED))) + $profile = $data["header"]["author-link"]; } } @@ -783,27 +716,9 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) { } } - if((! $vcard['photo']) && strlen($email)) - $vcard['photo'] = avatar_img($email); - if($poll === $profile) - $lnk = $feed->get_permalink(); - if(isset($lnk) && strlen($lnk)) - $profile = $lnk; - - if(! $network) { + if(! $network) $network = NETWORK_FEED; - // If it is a feed, don't take the author name as feed name - unset($vcard['fn']); - } - if(! (x($vcard,'fn'))) - $vcard['fn'] = notags($feed->get_title()); - if(! (x($vcard,'fn'))) - $vcard['fn'] = notags($feed->get_description()); - if(strpos($vcard['fn'],'Twitter / ') !== false) { - $vcard['fn'] = substr($vcard['fn'],strpos($vcard['fn'],'/')+1); - $vcard['fn'] = trim($vcard['fn']); - } if(! x($vcard,'nick')) { $vcard['nick'] = strtolower(notags(unxmlify($vcard['fn']))); if(strpos($vcard['nick'],' ')) @@ -816,7 +731,7 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) { if(! x($vcard,'photo')) { $a = get_app(); - $vcard['photo'] = $a->get_baseurl() . '/images/person-175.jpg' ; + $vcard['photo'] = App::get_baseurl() . '/images/person-175.jpg' ; } if(! $profile) diff --git a/include/feed.php b/include/feed.php index 6d645ecff..184b784c7 100644 --- a/include/feed.php +++ b/include/feed.php @@ -14,12 +14,13 @@ function feed_import($xml,$importer,&$contact, &$hub, $simulate = false) { $doc = new DOMDocument(); @$doc->loadXML($xml); $xpath = new DomXPath($doc); - $xpath->registerNamespace('atom', "http://www.w3.org/2005/Atom"); + $xpath->registerNamespace('atom', NAMESPACE_ATOM1); $xpath->registerNamespace('dc', "http://purl.org/dc/elements/1.1/"); $xpath->registerNamespace('content', "http://purl.org/rss/1.0/modules/content/"); $xpath->registerNamespace('rdf', "http://www.w3.org/1999/02/22-rdf-syntax-ns#"); $xpath->registerNamespace('rss', "http://purl.org/rss/1.0/"); $xpath->registerNamespace('media', "http://search.yahoo.com/mrss/"); + $xpath->registerNamespace('poco', NAMESPACE_POCO); $author = array(); @@ -36,22 +37,23 @@ function feed_import($xml,$importer,&$contact, &$hub, $simulate = false) { // Is it Atom? if ($xpath->query('/atom:feed/atom:entry')->length > 0) { - $self = $xpath->query("atom:link[@rel='self']")->item(0)->attributes; - if (is_object($self)) - foreach($self AS $attributes) + $alternate = $xpath->query("atom:link[@rel='alternate']")->item(0)->attributes; + if (is_object($alternate)) + foreach($alternate AS $attributes) if ($attributes->name == "href") $author["author-link"] = $attributes->textContent; + if ($author["author-link"] == "") + $author["author-link"] = $xpath->evaluate('/atom:feed/atom:author/atom:uri/text()')->item(0)->nodeValue; + if ($author["author-link"] == "") { - $alternate = $xpath->query("atom:link[@rel='alternate']")->item(0)->attributes; - if (is_object($alternate)) - foreach($alternate AS $attributes) + $self = $xpath->query("atom:link[@rel='self']")->item(0)->attributes; + if (is_object($self)) + foreach($self AS $attributes) if ($attributes->name == "href") $author["author-link"] = $attributes->textContent; } - if ($author["author-link"] == "") - $author["author-link"] = $xpath->evaluate('/atom:feed/atom:author/atom:uri/text()')->item(0)->nodeValue; if ($author["author-link"] == "") $author["author-link"] = $xpath->evaluate('/atom:feed/atom:id/text()')->item(0)->nodeValue; @@ -65,6 +67,14 @@ function feed_import($xml,$importer,&$contact, &$hub, $simulate = false) { if ($author["author-name"] == "") $author["author-name"] = $xpath->evaluate('/atom:feed/atom:author/atom:name/text()')->item(0)->nodeValue; + $value = $xpath->evaluate('atom:author/poco:displayName/text()')->item(0)->nodeValue; + if ($value != "") + $author["author-name"] = $value; + + $value = $xpath->evaluate('atom:author/poco:preferredUsername/text()')->item(0)->nodeValue; + if ($value != "") + $author["author-nick"] = $value; + $author["edited"] = $author["created"] = $xpath->query('/atom:feed/atom:updated/text()')->item(0)->nodeValue; $author["app"] = $xpath->evaluate('/atom:feed/atom:generator/text()')->item(0)->nodeValue; diff --git a/library/simplepie/LICENSE.txt b/library/simplepie/LICENSE.txt deleted file mode 100644 index a822a4bd9..000000000 --- a/library/simplepie/LICENSE.txt +++ /dev/null @@ -1,26 +0,0 @@ -Copyright (c) 2004-2007, Ryan Parman and Geoffrey Sneddon. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are -permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this list of - conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, this list - of conditions and the following disclaimer in the documentation and/or other materials - provided with the distribution. - - * Neither the name of the SimplePie Team nor the names of its contributors may be used - to endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS -AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/library/simplepie/README.markdown b/library/simplepie/README.markdown deleted file mode 100644 index e5ca021ce..000000000 --- a/library/simplepie/README.markdown +++ /dev/null @@ -1,53 +0,0 @@ -# SimplePie - -## Authors and contributors - -* [Ryan Parman](http://ryanparman.com) -* [Geoffrey Sneddon](http://gsnedders.com) -* [Ryan McCue](http://ryanmccue.info) -* [Michael Shipley](http://michaelpshipley.com) -* [Steve Minutillo](http://minutillo.com/steve/) - - -## License - -[New BSD license](http://www.opensource.org/licenses/bsd-license.php) - - -## Project status - -SimplePie is currently maintained by Ryan McCue. - -At the moment, there isn't a lot of active development happening. If the community decides that SimplePie is a valuable tool, then the community will come together to maintain it into the future. - -If you're interested in getting involved with SimplePie, please get in touch with Ryan McCue. - - -## What comes in the package? - -1. `simplepie.inc` - The SimplePie library. This is all that's required for your pages. -2. `README.markdown` - This document. -3. `LICENSE.txt` - A copy of the BSD license. -4. `compatibility_test/` - The SimplePie compatibility test that checks your server for required settings. -5. `demo/` - A basic feed reader demo that shows off some of SimplePie's more noticable features. -6. `idn/` - A third-party library that SimplePie can optionally use to understand Internationalized Domain Names (IDNs). -7. `test/` - SimplePie's unit test suite. - - -## To start the demo - -1. Upload this package to your webserver. -2. Make sure that the cache folder inside of the demo folder is server-writable. -3. Navigate your browser to the demo folder. - - -## Need support? - -For further setup and install documentation, function references, etc., visit: -[http://simplepie.org/wiki/](http://simplepie.org/wiki/) - -For bug reports and feature requests, visit: -[http://github.com/rmccue/simplepie/issues](http://github.com/rmccue/simplepie/issues) - -Support mailing list -- powered by users, for users. -[http://tech.groups.yahoo.com/group/simplepie-support/](http://tech.groups.yahoo.com/group/simplepie-support/) diff --git a/library/simplepie/compatibility_test/COMPATIBILITY README.txt b/library/simplepie/compatibility_test/COMPATIBILITY README.txt deleted file mode 100644 index 5b2498992..000000000 --- a/library/simplepie/compatibility_test/COMPATIBILITY README.txt +++ /dev/null @@ -1,7 +0,0 @@ -SIMPLEPIE COMPATIBILITY TEST - -1) Upload sp_compatibility_test.php to the web-accessible root of your website. -For example, if your website is www.example.com, upload it so that you can get -to it at www.example.com/sp_compatibility_test.php - -2) Open your web browser and go to the page you just uploaded. \ No newline at end of file diff --git a/library/simplepie/compatibility_test/sp_compatibility_test.php b/library/simplepie/compatibility_test/sp_compatibility_test.php deleted file mode 100644 index a7a7f5fde..000000000 --- a/library/simplepie/compatibility_test/sp_compatibility_test.php +++ /dev/null @@ -1,330 +0,0 @@ -=')); -$pcre_ok = extension_loaded('pcre'); -$curl_ok = function_exists('curl_exec'); -$zlib_ok = extension_loaded('zlib'); -$mbstring_ok = extension_loaded('mbstring'); -$iconv_ok = extension_loaded('iconv'); -if (extension_loaded('xmlreader')) -{ - $xml_ok = true; -} -elseif (extension_loaded('xml')) -{ - $parser_check = xml_parser_create(); - xml_parse_into_struct($parser_check, '&', $values); - xml_parser_free($parser_check); - $xml_ok = isset($values[0]['value']); -} -else -{ - $xml_ok = false; -} - -header('Content-type: text/html; charset=UTF-8'); - -?> - - - -SimplePie: Server Compatibility Test 1.2 - - - - - - - - - -
-
- -
-

SimplePie Compatibility Test

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TestShould BeWhat You Have
PHP¹4.3.0 or higher
XMLEnabled
PCRE²Enabled
cURLEnabled
ZlibEnabled
mbstringEnabled
iconvEnabled
-
- -
-

What does this mean?

-
    - -
  1. You have everything you need to run SimplePie properly! Congratulations!
  2. - - -
  3. PHP: You are running a supported version of PHP. No problems here.
  4. - -
  5. XML: You have XMLReader support or a version of XML support that isn't broken installed. No problems here.
  6. - -
  7. PCRE: You have PCRE support installed. No problems here.
  8. - -
  9. cURL: You have cURL support installed. No problems here.
  10. - -
  11. cURL: The cURL extension is not available. SimplePie will use fsockopen() instead.
  12. - - - -
  13. Zlib: You have Zlib enabled. This allows SimplePie to support GZIP-encoded feeds. No problems here.
  14. - -
  15. Zlib: The Zlib extension is not available. SimplePie will ignore any GZIP-encoding, and instead handle feeds as uncompressed text.
  16. - - - -
  17. mbstring and iconv: You have both mbstring and iconv installed! This will allow SimplePie to handle the greatest number of languages. Check the Supported Character Encodings chart to see what's supported on your webhost.
  18. - -
  19. mbstring: mbstring is installed, but iconv is not. Check the Supported Character Encodings chart to see what's supported on your webhost.
  20. - -
  21. iconv: iconv is installed, but mbstring is not. Check the Supported Character Encodings chart to see what's supported on your webhost.
  22. - -
  23. mbstring and iconv: You do not have either of the extensions installed. This will significantly impair your ability to read non-English feeds, as well as even some English ones. Check the Supported Character Encodings chart to see what's supported on your webhost.
  24. - - -
  25. PCRE: Your PHP installation doesn't support Perl-Compatible Regular Expressions. SimplePie is a no-go at the moment.
  26. - - -
  27. XML: Your PHP installation doesn't support XML parsing. SimplePie is a no-go at the moment.
  28. - - -
  29. PHP: You are running an unsupported version of PHP. SimplePie is a no-go at the moment.
  30. - - -
-
- -
- -

Bottom Line: Yes, you can!

-

Your webhost has its act together!

-

You can download the latest version of SimplePie from SimplePie.org and install it by following the instructions. You can find example uses with SimplePie Ideas.

-

Take the time to read Requirements and Getting Started to make sure you're prepared to use SimplePie. No seriously, read them.

-

Note: Passing this test does not guarantee that SimplePie will run on your webhost — it only ensures that the basic requirements have been addressed.

- -

Bottom Line: Yes, you can!

-

For most feeds, it'll run with no problems. There are certain languages that you might have a hard time with though.

-

You can download the latest version of SimplePie from SimplePie.org and install it by following the instructions. You can find example uses with SimplePie Ideas.

-

Take the time to read Requirements and Getting Started to make sure you're prepared to use SimplePie. No seriously, read them.

-

Note: Passing this test does not guarantee that SimplePie will run on your webhost — it only ensures that the basic requirements have been addressed.

- -

Bottom Line: We're sorry…

-

Your webhost does not support the minimum requirements for SimplePie. It may be a good idea to contact your webhost, and ask them to install a more recent version of PHP as well as the xmlreader, xml, mbstring, iconv, curl, and zlib extensions.

- -
- -
-

¹ — SimplePie 2 will not support PHP 4.x. The core PHP team has discontinued PHP 4.x patches and support. Read the announcement.

-

² — Some recent versions of the PCRE (PERL-Compatible Regular Expression) engine compiled into PHP have been buggy, and are the source of PHP segmentation faults (e.g. crashes) which cause random things like blank, white screens. Check the Support Forums for the latest information on patches and ongoing fixes.

-
- -
- -
- - - \ No newline at end of file diff --git a/library/simplepie/create.php b/library/simplepie/create.php deleted file mode 100644 index 908ed182b..000000000 --- a/library/simplepie/create.php +++ /dev/null @@ -1,178 +0,0 @@ -success && !($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300))) - { - return false; - } - else - { - $data = explode("\n", $file->body); - unset($file); - - foreach ($data as $line) - { - // New character set - if (substr($line, 0, 5) === 'Name:') - { - // If we already have one, push it on to the array - if (isset($aliases)) - { - for ($i = 0, $count = count($aliases); $i < $count; $i++) - { - $aliases[$i] = normalize_character_set($aliases[$i]); - } - $charsets[$preferred] = array_unique($aliases); - natsort($charsets[$preferred]); - } - - $start = 5 + strspn($line, "\x09\x0A\x0B\xC\x0D\x20", 5); - $chars = strcspn($line, "\x09\x0A\x0B\xC\x0D\x20", $start); - $aliases = array(substr($line, $start, $chars)); - $preferred = end($aliases); - } - // Another alias - elseif(substr($line, 0, 6) === 'Alias:') - { - $start = 7 + strspn($line, "\x09\x0A\x0B\xC\x0D\x20", 7); - $chars = strcspn($line, "\x09\x0A\x0B\xC\x0D\x20", $start); - $aliases[] = substr($line, $start, $chars); - - if (end($aliases) === 'None') - { - array_pop($aliases); - } - elseif (substr($line, 7 + $chars + 1, 21) === '(preferred MIME name)') - { - $preferred = end($aliases); - } - } - } - - // Compatibility replacements - $compat = array( - 'EUC-KR' => 'windows-949', - 'GB2312' => 'GBK', - 'GB_2312-80' => 'GBK', - 'ISO-8859-1' => 'windows-1252', - 'ISO-8859-9' => 'windows-1254', - 'ISO-8859-11' => 'windows-874', - 'KS_C_5601-1987' => 'windows-949', - 'TIS-620' => 'windows-874', - //'US-ASCII' => 'windows-1252', - 'x-x-big5' => 'Big5', - ); - - foreach ($compat as $real => $replace) - { - if (isset($charsets[$real]) && isset($charsets[$replace])) - { - $charsets[$replace] = array_merge($charsets[$replace], $charsets[$real]); - unset($charsets[$real]); - } - elseif (isset($charsets[$real])) - { - $charsets[$replace] = $charsets[$real]; - $charsets[$replace][] = normalize_character_set($replace); - unset($charsets[$real]); - } - else - { - $charsets[$replace][] = normalize_character_set($real); - } - $charsets[$replace] = array_unique($charsets[$replace]); - natsort($charsets[$replace]); - } - - // Sort it - uksort($charsets, 'strnatcasecmp'); - - // Check that nothing matches more than one - $all = call_user_func_array('array_merge', $charsets); - $all_count = array_count_values($all); - if (max($all_count) > 1) - { - echo "Duplicated charsets:\n"; - foreach ($all_count as $charset => $count) - { - if ($count > 1) - { - echo "$charset\n"; - } - } - } - - // And we're done! - return $charsets; - } -} - -function charset($charset) -{ - $normalized_charset = normalize_character_set($charset); - if ($charsets = build_character_set_list()) - { - foreach ($charsets as $preferred => $aliases) - { - if (in_array($normalized_charset, $aliases)) - { - return $preferred; - } - } - return $charset; - } - else - { - return false; - } -} - -function build_function() -{ - if ($charsets = build_character_set_list()) - { - $return = << $aliases) - { - foreach ($aliases as $alias) - { - $return .= "\t\tcase " . var_export($alias, true) . ":\n"; - } - $return .= "\t\t\treturn " . var_export($preferred, true) . ";\n\n"; - } - $return .= << \ No newline at end of file diff --git a/library/simplepie/db.sql b/library/simplepie/db.sql deleted file mode 100644 index 13f504c21..000000000 --- a/library/simplepie/db.sql +++ /dev/null @@ -1,38 +0,0 @@ -/* SQLite */ -CREATE TABLE cache_data ( - id TEXT NOT NULL, - items SMALLINT NOT NULL DEFAULT 0, - data BLOB NOT NULL, - mtime INTEGER UNSIGNED NOT NULL -); -CREATE UNIQUE INDEX id ON cache_data(id); - -CREATE TABLE items ( - feed_id TEXT NOT NULL, - id TEXT NOT NULL, - data TEXT NOT NULL, - posted INTEGER UNSIGNED NOT NULL -); -CREATE INDEX feed_id ON items(feed_id); - - -/* MySQL */ -CREATE TABLE `cache_data` ( - `id` TEXT CHARACTER SET utf8 NOT NULL, - `items` SMALLINT NOT NULL DEFAULT 0, - `data` BLOB NOT NULL, - `mtime` INT UNSIGNED NOT NULL, - UNIQUE ( - `id`(125) - ) -); - -CREATE TABLE `items` ( - `feed_id` TEXT CHARACTER SET utf8 NOT NULL, - `id` TEXT CHARACTER SET utf8 NOT NULL, - `data` TEXT CHARACTER SET utf8 NOT NULL, - `posted` INT UNSIGNED NOT NULL, - INDEX `feed_id` ( - `feed_id`(125) - ) -); \ No newline at end of file diff --git a/library/simplepie/demo/cli_test.php b/library/simplepie/demo/cli_test.php deleted file mode 100644 index ec933c5ad..000000000 --- a/library/simplepie/demo/cli_test.php +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/php -set_feed_url($argv[1]); - $feed->enable_cache(false); - $feed->init(); -} - -$items = $feed->get_items(); - -foreach ($items as $item) -{ - echo $item->get_title() . "\n"; -} - -var_dump($feed->get_item_quantity()); - -?> \ No newline at end of file diff --git a/library/simplepie/demo/for_the_demo/alternate_favicon.png b/library/simplepie/demo/for_the_demo/alternate_favicon.png deleted file mode 100644 index 063fb280549db7a68a47cce157d680ed7af1a8a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28621 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 jER6-t2hmNVK4OZd1iu4kC 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 X%(=7Y&!9t#9!C>o9hX4ROX5}q3 diff --git a/library/simplepie/demo/for_the_demo/background_menuitem_off.gif b/library/simplepie/demo/for_the_demo/background_menuitem_off.gif deleted file mode 100644 index 236cf406dc2528b538ed078628f9f95e3240f9fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 533 zcmV+w0_y!oNk%w1VJrb00K@_{rvp=`}_O)`uh3#`S|$w_xJbq_V)Gl z_4M@g^Yioa^78TV@$m5Q@9*#K?(XgF?d+9?4>gws~>FDU_=jZ3<=H}()<>ch# zG>j0Ay?kSK!zdx?sTj0KvTng*Vqk)eT;0hWlIou8@) ztgQ&Iun3~Fb9sG@sI9EAunE4u2@1l)!nDR{c$S-=vA@K^3(?XG4As^R*bT?qV|S(l zss_Hq*4NqC4(aL-?ClTS@Lq$Mx(CGB>+b9j{QVLC03`^FN03V&RI#S1O9wEZz=skh zNSsKaV#R_OwIuoktem@u6DL?4S)ruK3Kmk5s?5l;%0^GX&h?vkQl-iZICJ8}z_TZY zmO!Dr6z9uYyN4!o`t+Hhsnez!qDl=)l?ft_MXRxcX!EJmuTeLM9XpnT*{W!fT=g^z z+f0cno02VSwys^X9rEf;%Qr^>Egk|39!$8f;lqd%D_+dFvE#>(BTJr4xw7TUm@{kM X%(=7Y&!9t#9!C>o9hX4RO5uq&s diff --git a/library/simplepie/demo/for_the_demo/background_menuitem_shadow.gif b/library/simplepie/demo/for_the_demo/background_menuitem_shadow.gif deleted file mode 100644 index 95cfb820d47f717cc9ddd31d626d497e23f1a38a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 250 zcmV+9?4>gws~>FDU_=jZ3<=H}() z<>ch#;^N}q;Naii-`(BaA^8LV2LS&7EC2ui015zj000E1@U2H>RW3WMn{UYnG9*Hl z=drAdx*AEGz;S`xh>aV3?-RhFFgPe02Y`SwkX$;ON+^`MoJyZntTW4{cCB5nc&v?v zuir9wYfih{V>Eobj-T)IX<1zFtM_|ye1C6bcy@V*b##Pqeua99jf0SEiI<3(i-D4r zn2es9laZK@j-!^Mp{9nVsIFn0u&1G*w6~PFq^i1|bF#d-!n>@3#)r1UzG4voJBQbb A?f?J) diff --git a/library/simplepie/demo/for_the_demo/favicons/alternate.png b/library/simplepie/demo/for_the_demo/favicons/alternate.png deleted file mode 100644 index 063fb280549db7a68a47cce157d680ed7af1a8a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28621 zcmb@tcU)6X(>MwuqJp3x(m_Q*KtMn`Bq~w_1d%3Pr1#!SR0KqtbPxz2O{MovKuYML zhaP$;flxw12uUvA=Y5~&z4!Om{oMENXV31O&+gfs-90lqvojm@Moaa^b@uBN6cjgJ zsl9xAk>C91xq9UyUSyZOUcAz~dJ%%JT7SKGzvixH3VYWndPTS%j}suGH+KK>2L)Sd(INKJASdqbvTRP?&x1V0Q7^3rL7z=c;ey4(jviE zcYn=S2v=f1<}&f2=9jBu&Yvb{BbQWXbklliiEBx!wEim``0Z6S z=m?WDLtS>)i^mAP(&Mcsl1CwOU%m6c__yhuQtee|S>I$^6&IZ#5ks4bOaQ|U=Hp%a zM28IB?>9eubD$@Pb_8gNMcj+&1h0{Z0zFARJ%g;e_P%JpG+kEf16w-e;_*nKdnJ*7 zDIiL6q+`0C9PN)@zbUxxLhXDgjG$AsC`32EYA(6~RYyXCf&=%@%F9w{{*B>9P99zVSX{qVJOoV{=`2o2{2`Ys0qo$!w58>%0p= zHy`8~Q2CevSRKAsnY|YFQBc~2Q8q|Im zz{xsiF`l`FV`h*Fl>%_$VNd!^6&}^#z+8G z`&oqX)60pl-u~8NPU|H(Eg?!RyIke8ht*z1WydILeKot$Ejsq>=lK%$-dAEnd70TM z?!E5l5Bw!)z1V!c?agZU?-m&q4QX4ID=#D?-o)P18;lwqy#1y3fM`rOySsRgcmEfh zRa5dx(%^efHcdxq1yRksji9ex!WtRX5%cV-4piWC&e9;-P>XwloF&DaCBa+oA-o5Z zE)fh{i0}P3tJz*iDfQVh0g@e^dn4nYPcX~8xvV7S#{IE~ zNL`Qq_WHa!K~Kbpvkk^_AWA51(sya+}c<{)+a3I92)>DqO_7x&V&pEs^Ji4;1= zu%^aAb2$-=gk2+)o5+@Gx)%4<=t~b;%eW`$SCE?W!(aOBmqb(=cFPerRN`e-(C;6c z3ywK_Jq6E6*$&$tjI#nZ#}D&PuTxhUOS5}JC_%3eN?C1vV=Zmz9*(}$)3f^(V03x2 zC7|{jo$}=dIo!(OP7CEemDGThVXD~mYtCaHQQaruy&Fcp))`^;@0#-IB3xN`en@6N zSBsZi*4j~J1|*?c#rzuZ5wl+`JX$9Fs|oL?Oym?&4#EN85V1=~M-C7Ofv>DO+_ zf}B2b$Z>5q0ROTseNV+?Km!Y>; zo|p&~{aMiTaR@o{E8)T7%g>xkXQO-%A5!0bhW$A=fbqNaGUxI!gCQYAi(A_-W-x*`T=%DqZ^0qqakaa5Ujz^ zSn7_4n!v?$E$M8!ZKJND%ftn?K%H1xGoDYyD>1aoY&TkYBev~}V)pLqIZXBjtbTgf zHOsitvA!V7<125|5!mt_R(65s8gsh*fUO=2yRrHIKbS0l( zeNmmc0%viJR}sZNqG_VHZA;Qiyz9LDCATJQFS9A6p42LU9oIct6;$haPV@Ky50Y#HJ84#we1jIg-~#`ap!m7`QXU!b{!IVg1#mkY z6Lxg`vY}#O3l23-+_)3>-F-SLg~@lmPpq>ypGzc`KIw|3W>G+xro{8uSvC7Vdva7` z2VPb)G?-DLznY2B3Y-Ej6g~`hyF;bTBvxdmA8@WwaqY?cw70f*%NA`PyPwsg-aU52 z8mDKh#~Am;B>sRgly}8$1d2BLXmRcK`&dt%kGHq4vEG$XOI-zSzWg3*yc zH)igK-&gW4`ocrylHjoRs^whRhMA||qF>?12XKQRR*vI($01sml&1RL2?<99Al1O> z`0dP7OnN&uD2w6LZ_=vE@TkL!9wR>v7h?!}^BH+*zXgWxh(G>>UScd;nnaZdOz8~^ zXF%8_%{!Cd#!(*k4e_ViVQ-m|yH&c>^#4^K7+ zuP3DDQSm&r=vAV;+v6>M*Kl={BYZ5yXyLi0NDN1Ug(v_+&%3E%*JZA*a>p{BTN-UQ z$KsFKJoh&DMwuz@ODi$o<0Td!WbHw(sp zCdRJH@$^>rX8_}jsvYaE8w)Zg8#GPH{X+8ecDKALjliDw**uAR$o%rBjhwwFf(iH} zvX9Lx@+#1qIwBv!;sOb;mdEIU>RvOvW%>M#X<}MTc#$6pSdyB$XJ>vY^X5!x{5V!veyMo*t%kplP znQB83SJ415r@#A;yz)lxMK3$v$*}to_o2O=SMxPcwibEs^eeBu!ya|@RrY{tHd+b; zLw1Md&>lU0M6LLZC*FbImTTEpFY9)@cs?Kxsc7~`;u)V&TlWUPz$6FT$LL$Z-(9zk zbU#o0+jcB9xNya~?p)XLTJ>hI;hV>U>R44>DZ?w>VC5AmbGV zQVo6w|FzntzI9L#mdNr}(gwhWge3R@ zA~kL;fTDW)S_^Gg4cBxc-y$I7d5iJlQJH8i$OJNDfj-I5)3Q% z6{okQA@Nnq!Y`RgyDyV&1%neM^JdV@ijc<*+^V9#)yIDHtlNq;8Ko?I>)WGFGhz6C zxa=Snc=Rf9Df*epAFnviteW(fW_&sgiT1am%CGR=qN=c$%lCQ-WK3rEQDyUqel=p7 zSR>RgEPf~BvPeIzB8&ekE1i%Loj5Po?(ztosM@b;N{E5NhM@2a1i-?B5gPwCPL!{l zoyo8)ar*xFP9oE`GWI7S*i|Hsr;yV^)A$Bonaaa5<$|euFI6bHUkI)o<|nU3zZ$e0 z_Y`zsPMG!*DHCp2Jz-dF_~mt!HK^*-JGLNkC&?zMzuKt3`s?Eyccc18hO77AwPM4} zERmhRlHx`9_~ZNgOV;&XY6*3&(?hQZ6(%X%V{lr(7Vxen{el#1^VMym-_`jgKakdX zS9fr#GjP~bAZa_!Za8jiUA=h2(BTpfNb-O_|G$T9mw0T&WkNe?UwWfXDr!|i_7q-~@^->m((G!k;jNG5%ca~8 zw;{!K9;sos{#pwVrYBGG*!D6>8p6RHrFOVqYm5)F>Njj=iO4apLW_pE2ccWH>akE)mf+c+mLjvcTQ4^Dy`Gy;dNcj!7hrs<0`#{ z5evLV;tUmp!J-0T^|3tV4+GM(MNeHC9l>wYn>Tt0ca*1Cr8s(@+|ajjCLFwubzI~M zYEFo7JnD^D$TwB@sAz#aE_}D5K2|LK*(}LQT=m8e116LTdt7}K&_RaYNy*8+U`35Q z?#>x|sCw;l{+hOyWFvghqMrTz4K0H;$M-@W&NDt;vA}ZX^xl=e!-B)r%XL05P7a@q zuo&XlD91zPrYw=i8k{AjoI_5UbEw;X588kWuq2(f&X82urxgX5YqL%y- z&D-kVn9kaGdH$@WyvD1u^|v_N&lVBIRCG_*-^q z=NnGD4_Fsck~eDUam|Fmw_nmsZ#^kFj!A40ty3a-e$hUT>UZ98Ez7{VtJCaX!5Q6A zgI&_zVE{LWp}&*FL9Km?m%^hB_%On#%57Usy#rAHnR1=5k8K5*0$ABD8dUJ4i)*NK z)2Qh2GpFs!?&h)|oCtm1hFj;0JGB+XCfR+>o9WM%3N>xBa_g6Il5L)ep9oaXqj*so zm2Pp_+Q)ZD(y!{9iMtL#UbLXLPbDOl5t12)BiE0W7y)bV5hayK_q`~rzE#D<=_OuV z%*$YUX#LY1-}zNFz~^IznWa>tpkv`!Y-P@F0(j)UFfa@p$`}3|`QXi+&`AC{kW=6( zQ_GP}>4{lo`{TUOzvTNjTDovqR=saa#+-25DVi zt@AHX6^!%=r_A(6_Gt)v_UuQ*mC5A>qtdCAn^YY~LY{Zs4uJ)BCb3!gxcb(QocJb$ zW&8&_V0@PFc;!e2kkNEv)Nx$W#NF_TCZ_1xTp0bs4Z#A;wk&a~L%V=y75yN4+=r!; z*#PxTGB9k8+TLIe?@7DTf|@&*6c*WNzM4f+8UJ2&z2bTxt1KcB984YP^+LDNaKl$D87e3Icpi=WUmv7OrT7|ap6ig|$kX+$ekf(b0p@O<8gpr5sAi4d^ z27N37C4ZX0gQtgW(er0f>k;Ekvsp7xZHT*0%eT{1Mq2sR2I{og@%+oOlcfG$K?wF% zZB$-Uba$icEo|D;>t_YPwBPxtx|!X6n1c3{JboZ$Sv|meJVR}PS|%vP3rjP;#xRQI zAMO5@FBDfUBiBFX+cU^fl$9Se>i3fAq~XKXw>+T;EphL*f1tG9(S$zLo>68c zL%Oo}_8Cq>5#_AS3K4PLvV#9WAMB}>O#Ue}lT!k&(8X35hmj0Wrd3`&BiDUXB}+db zzhw_v*)0eM8RJKo>ktKH0v4L@WO~op#SOd?4Fo+N`Rpl=7=?r?V|QY*TnCv%>%6^tbqY^ zZ81YF|DYeLMrUTTq)%rCP!bh7F8>D$9!B|pT9+4%&mJ6UEtzThfQ;-O`KR>}zn&47 zM&QodFX+!K*TsG5$)ml{86%sjx~-MK(vt$s%O-XNso5bB4Md9guT|kHL!k)Xko;iAm2AUWYNbVhX-D!}f_R;pgl9dO!W>%uH8#CLyd3##2 zc63wvmy2j)z4ELD_GQi$@GlLRu7ODRai#JN@?DjJ_!Quu163O-Eu89x7f-pgAP`#J zHYRBBCLq6IFZRxg{Q}`ruu-aE<(>L>Vi?ni`hU#{hpoL5dmdSYjws&iw(D(&4;3SA^HIDCE3&aqInzLYaf1}hwO7b23J6}u04@-8|LkgDhN9fM z*qNHw!*V?R8N1z&;<-mofToYBr9Ig8G#*`bH%L}SyU@M!GUXJ=sY^q0BNvfdo0Ke3Vn^@rU66B}I;gi>d$kLj^Gl8Bn zJx$*`YLsI<<5z8m<}S~&R#nBF@HR$kfn!HDV#Lc6GzSli&6Ri(9|b=s7?0prlN(!huf=SKkD$&&NlkZOWlyy3 z@Y>DB9}ttIG*kS~f51%LRt<@<{u=eNyyK;VS;C6(Svimt=3lA-p`Q>(#A5(aM$$Lo z1hb-#&jGX*))vEDl|#?Ah-=zp!HsR8!z#n);$feOo8K$+PSD|(!UKfc_3kGW*V&0Z zP2B4{yd!yEDVB%__@J#hySRHRbWhMtmts-V=8vk<5#x?@*P3E~rk>Z;D}h3BJj;WY zrt9AtnP+KSo@Y2`7xPP3&EAZIdV?9K55^(=ye~oCEdmEx#s+0=LyE& zjfspx1{nXYiL)xKtMtrmY@rSuz(lcqn2u!+WIU{OwK9?IvFV!#shW z%CQO$D?DATlx9Y_Rn#I+VL5Hdhkk8}HlV#EYt=csnqpHCgwd!$CEn*Yyd-^yr_=0k zv1sjUvb;6U$o%f0=c7T!l6et6fgDeD@9&pa9YDd@1eH+)G4 zL9#QEd(2b8R6D`dYQD>#zOli_6-PB=47>egf^xnK3b7bZ9lds!=DEFJQR}ib%&aWK zSIgJLy{u!KY#9o473Y`;n@#rtS~E87BKlRM0Zj*!BmHT90t}mi?+QtjXQ#BY4VauW z&fk!`LoZ)C%QC|DmBbw2&y4A3qvS9(T2ct4P_I<1a*l#jnD`&ZWTWue-!h`^TXfPZ z*^5(u*3$ZPRUc*#eRWh1T}0?syoMzw659&+FpUwGrk+MWzE4H|T;pz<`MGevw})?W z{^I=6XN%q8Qk-j!x8+N4)N9Sjw0 z`Rj>ZZM}(#qLMpKhxvs;knKH|q|3HD85mG3(pl2swiF{NwePUSEz$qlR@OLx-k^rt znl?343A`AcIi!gqNJ&J^)|AY6feO+$sP{+~Gc+RsAm+8{2fajrwX?xe#b<9@ksl4F z+=+%UXa&_2KQgh@L~nZ-Go4xc*4FtD^M|k(NwuNs|-x&4*ZH&C??Re*#5>gKJdc~~X>91Euov#@R{4n-*lO~}jnl?%e6~dOHiZw?(-gNZ@ z&nGTfRJ|z0O0EfZUmf6VKJdTx78Fc{KdarhKUPbF^1_DIL>|qzRD@l5?1v7;9}z!! z2DKmE>h{$Dg~OzvlwR%)jSKm{9EQ}aCaG*Z{X5Uc#L(YuxRYXxO6T%U2JB0lwb-8A zDSNf*hF#IKK;i)cWn~Okb)2gf-ue294y5Yu ziO5RwmGB5?yZ)?VP651^U&$GjPyq=EmK9r;Tm3$IRUgE{=P~#t$o2 zF*u}uC_ax4Q?p%+?L4WiYm&}5Yu6&%avcu)2s=%0Ur7v7FL}t*C5^xQ7|H*$=0aO; z!>+hrFQYSNdR#B3hr#jdGPU2})3uu3uG>yFkDuDBTxE@(U2gPIw7CJiB>m$?=7rrz z8b0A?CIcO_lW*n306U1w8CO~kZig*mt>+F@>$RO2!q!Ii7VPVN7TUnRSenzTnL&z= zn}aY97H?b%KvT3V^$51U^6P+5G4?v=w?MxE0GQrhzL0r)-Lc5|n3W+Z^U7H1DLaTS zC{xqv9d;J3WZ->xwl^Yj2ZBB1WEl{~`h094)FJM_$2EW1qV#obfkZ;FXR7aNjjG`M z*POAq!|JkO0AQ$-00^DmooLAJ1T0zGJ!!mIvCTDc^DIeSJuaKe?^iUGFiCzM?@D9% z!DC@5H`6a}<;ooDJ)#}_x1zrmkpI^%yz{!5U@mGIp9`pCW6qs6p~-wlFNOWpv@h?- zDSthMK;zy?dY);Vxz`pMiJ13im?PVA8xssq_U<(*W<6myY20TneVyL(8Mvw*NVn4ADVqAu)kvXG)(9R(?m_x_B)wFPUnxc z2Z(ty|L+Z@KK|cp?ffr2-AUBx#=Pd84&rUW9dn5J^9ps;TfMJ4sT7<3occ;6b@l-%0`smxV9Pi|rSd$BWfA(;B4z{NyHT7;(Tv5!RtIP-0nf#qqM6z4KrF zBtF|3vg=@1m{&&s(1@*dHv40Cz)x*1_gL-|2{Yv)v8y<}YlUO+mmH4_^4GB9b78f$ z!fhXOX~NvMZWQ?hG#nOEs=6n;S#w-*e$Ruo7Ol4d^!r|yoneHTCBaAfp0nSsK4)9} zoh~(uX*gJzodv6=Fm;9L1#yUB)vghAqMW=NDOD{fUzkm~FGiwwHgaJ@4Sn?F|C8bL|M=*_b~+oRY2d>NJ?uJ3(6Ilg{VH!m z)AVQE48;VqFcxD#HnBQz zlOEx%qh<1x^r{8nQ$7+(9)~nU*AO~K4`S8H2d#0w8vG>I=_;?VKaMTG!eUvxbE~wm z6YS;*rrFDza+xG(6vQf1Owk~|^pEal+PEseN-d!_S!cQsGp-f#Mj|);Tt&H+7|kbK zhYPyWE(U!PyanQX!nE%E?o5$Ns_&}kG^0scb$e3%xy;XoIJyA?FMT6@s_XM_Mc4Y@ zvgr^uq#&nE5P1XE5iJa;MuM)QPNbY+P`Kckiudo&QquyvCIW=7wPjlBbvXOpGc@zT zhr&`P!Ho>}nbs=n?H{$(rnu6Q=`dSZ zbi?$c0E=jI#mV0VA$x(L+ATlpr8A+s%!vVd#|XvWwZtxl*Yu&C|LU56uGBOu?vUL0 zk!DuBm1V1FGMe|rEL(kPzA*cwO%UDov$Yw}v*$duR?jEA5O{u+&!&$H#EW{Kp0hfU zUA1Kp)z4~%+CUB?0uS$ir{)qh0?XbG2=a_cBO@nmMHCzax7ptsZ_6srYfZglaji*5 z{uk0+gHIlxe2U)?k|M{<5+;K7jJApF6y@EZ68Cs+GS`s)Rny7%zK8=F{noN%a+?1}W^}Y;VVXvHYGiTn{>u73 zlt7kwvUBX#ie8uj+cXIeI3@qNP$QJy#%>$4HxCm!Ekl@_emf6bc6x#!_eSk9x@4Sx zRD24+!D2*rPPPxt^}S8G>&cT#N8Y|YLC>Rg_r2>*56E_$Y|O{99hEZm7 z!R_5EIWG<{?MH8o!Eq zW)0!<|9-Vt{b8q(VrT}h0%r^>8*v|5IS(8^HYv){%QE6nYtd`J=#IWV6HngT+dGK+ z8scAsgKF}IJkPw_I=-5PRXqnAa1BbgrX`r;LI6n)+l-ryvNdP}?&7{o6wJ97DfIuFk@-kJU`x6L|{AFcRp`V<&GobI-b#Jhgn ztFpxIqB1dU!P2a;%y_^LA`to=qo4Y4P`(7s82_{EJYMwB1zQK!0*P*|y^5=w#n~R~ zOoyEZ2K5~(Ojr+XOKn?cxZ>rvD&_{rh1ELkRH-h6pdg&&-UDI>;j+V6k^kmxvYkTj zgQNSy=Isv^cg`#RwNhZ+v^nIkH`+!NKb^dLH?7h#gk!kf=?ph%QHKqv1D488{^)le z4vZZqhq&-Uj#Uxo8cz30Gcm_bj|OFTRL|GMS|G_wTY;(Y$7MPYzJ2Fm2ZK$>H)8by zf!AVM;V29HSE6YI?D7C-E^BuqEl8HH(yxZEbzW{TV>ikt{=|0r$652+aGcz9o2HP9 zAr!;*-OxOrySO{>A?{UL+kT;VPX2zHvs*q1X3SA<3v73KiZyIqfC_K%mL8W~0~&~; z(yYwM4fk;OZU(XW4Al+P>KDx(v(Gk=nVx5j5fjL&HUQNS60nEN2EvlQ`>tlSvBjNA zko(^;g*vvKWu*mOIt|n-#yoG(HisPzRE`0da5X@$?11=z;PUzd5JFWT=S`7 zAK{ZjfsioB*FlAP{Zp|PJJ$Mjq8!q)*M0Q^vQ{!E`&0t=C_W_&)Es(yTBXQYGNz z$=owUv?d1=@EDxZgsaoAcW8U2*p7kxH$nc3D$QQY-}?VOB*?GxM5e_#N*9^&UHHZ6 z{tpw5<=Flf} zp!P^_bhTAVNR6d$*)Tz|4m2eVA;s=n)b9ov$nNHB1ZIa2dS@Zc<`cw0uXeNr8IBAH zodd#A@Za--Xj> z!0Y(ZMn%2f7jBF6@c)_KoC`O^|9!Za-t5=}P64`buCGiUcj>#MWNy-|zU1sP-`)Yh zTkKvvgTYAeDjXf{S{!aNUL6esr=@kif5J+4CG6kXGVuKDWOoAz%K-(i%HjSXSG@{L zDQr%0on)PD{I?4?Gct*|F;T4juVV3F{LuyiCej{4z{;a5rEM-_2&yWRgj#S4So;KW zNotH#jX_F97g?vBWkz+Dv2h7-c4sn#us z`v*e+^&e72fXzu9AqNN|;exh=$BCzhYq&Q5h~{6Sv@hk_xVI%A#%_lBD9y# zWNrhpov4)^X^zhlEkVRtrj?})#BJn{xZw)YTR4R4* z#l-Jn2bMlG779GlJl|j&mM*`yCV|qn&~K+kM#Jzzemcq8dqJ=_ey%}OY8(k z{v7e>n+7(Vo8W6zpKnYnGMN_(dHNil2i5Ir8f;9Rldd843xNV;13=k$(s9Iyz!^6+ z(*JvSa2A!(cIo)1Ugj1%ZU+!%Ez7hgz+u7MYE%Dg;>c}fLQwHmK5a+M-{X771ElUf zy*nv26GnwpbwE$sBRdj#fcpm%!7wY$YkHu~fOFOrKY1dUV=&9J{|?W)aa-}im7;Hf z2>L?>D@g>U37O=vmn^GbLVE(J)k;h?(?b7+@QC(!WPXf214a_OSO$jinYfq(ZrIr>0h3&i@8sccveTTNM!f zs;xUh8&JKgf0pzQ_Toz;HdF%w1~wA>e&xx?1Upr`j5tNKI;q_JKeTzhyZtLZ>$A^Y zr*!?te>9l9=DA2n?wJJ1kFMNCo8^yjSCAjx`32E|s8@MPA%4?*i)SYp1U89s9eDDm zQ?1ei9UEUb&$W0nnqL*Y4b9jJJ1ez{vq3PDZQr3S8}}_}KMgbVyhsAPjd=w+mWhDc z*BtpB4OkD2`@sDM`!J1R`kb$D>xM{=M>7CR->i|M1xcDw)AO1H-A) zle2Q%r)otqPWyA7ePr7EXK3dvuC<#(zn7^Lg~)EWY&JBG7d@5RBX14BB&?D0{UvgC zFJ$}PX2%3>RYbiRc@D;{JC7$wHR z#!29w)tV#4itL&%`WaIvTmce_;JX~;6cdb;#U7z)jx1rOPqY}^N1-_}f5=WtX5@-Z zkQo_X{a3CEGb*!)L=Vpv<~- zptQVV+&Yl+-^3%hwO|S~l<82-PaK5v@KC~5FB!EExQC|XJ`=}bFPZI1uvYDM3emJf zSaG51#*h26Q$#ZVu3;T>l~fzp!*wPn2u$O-<%7KM*QhYA=Y$y%$>7GA=6V*Sw7YI_ zXfG4cQviKbd^%I8RV1$-F#k}fd>0&mMF+L&;Qv03e{7!Zp~5Blu7}_&(=0Om+m2}k zE)lZV*SLB~`wbq1il+;8eYj??PqU=@l)e~w`pAM1?&TV67@}v#=Wl)?*e5+!*&~M6 zL-EX&U1Md9^hYI_I-#|1vw@nD8XZ{tt^s2wmbwg*6ID{D)Q3bSG@F&zjKfn%6)?mH5RTlpzXm*mY8z~~D&iZBXDyCLddXabd|rsJ%{g#o%eQGn z%fhgioLv*g{O1JXxn!jIad*y5KJF&IGG|1r#;#h{-M~CWwJsEpVPbJnzfnuOK^Mox zmcuOZ@4c`U)PdZZL+dmqHnf|paiiPeGac7_Z9v+lx1G#oD5jI+e^L1=Q0^Lk2yCvX zo~JRTj9akkWQ~sM}UxiUjN7So#eYjWyb>k~Lrb-V2`q z^A?9%t!9R$jYdPR=hznBTAY8}ZgR=?rG!mK#DI7A35t`}gEqECjwT-hQ&t?k5%_RA z9N~c%P_jClGNPN)*l$@}Yagpkc~DurGZxaf`ojLC}0AuNq=r zfvPz4m{W9NR165#I6gY{?J2Q2kD50nrhE2%%YI5(mjmTdjLSR>GTdoATNE275H4rS zD=s!{9Qkw3?J~I& zREB2wRA&D;F_D@KbX_iktc7yUXw~o48*M}bq6d^jc>)?(6Yw2>g#5LZJCG0pLqSYb zH!dIIFAhMna`vIkm$>FJYeB-RVQ!c<&IMgAYj}#qAQ(LY4;vtzif>GE$vf!r<@gCA zM*Pkq8#0pQu1sEOE`~zw;AQnmx+LwqH5#uW)RJTT;!ZRAp>eE9sKsD~_4agmL&0IS zP|nP3iXBJRVuO zFR!TjHm?SlMX~LRs;Ig%Ew6yPg9-TDaM$fl`~$6hF%D$yS4BBQ;hTMfHD*e%Pfor< zE%dGeU&%RSM?#|{fJy0hBdaJ2{%LAHrzcdvL9vb`C>lHxXa3!6P^U?2G+WFgPPOT3 zY@r{Zt0`zBWrbEj<IxW9DOG^!zAa9=+p zcE9Xx`NLy2p|(bdQaMxUIb_}fd97hCC-jvmQ3neTt#SgLUkUgP%sY}_F@HSI^b)dA%SIHv~7iTz4Y`nsllzuA5oQ2BYz;4T0- zq2UYLkb7QFIu22mYv>!XC~@T!3K}E%kh>I76~~aB1<%}?Oq|DXQu|Pi82~^Yv>pp# z6>2*@hi$M2Yqo};tS+BC!IE3V&Po4>sQcm0#D;G+9~&^`_&7Vc@N#(bVg0vk@Owiz z?ysai3I_6n?BShReM%9|0Oq;OU9waf46cckPqS2>C3E@!R4w z80YvG6E;!?AvRcC(^qg=$dR|k27!g%hN>y584uB{jx# z{9t&53A7C^ABGFBBENSA{+nz5dz1S|pE$s++zJ|-C14UdLz&2>*tQzzIKtu9dpAvN zz!!jz+wU%fgQ-UpO5->yg8K5-w50&Hw4S!Sjpbz?in(G3i2nd7K- z0xb=`JUc}os`9WPm(~a((T`>lfa#(~@s{U?{GK1Y13zg{mMcYR&*y2&E09acUfJgX zX_@2PQw15g++hAaWH04ZY~Wl7x3+3 z)$Rz$XqS_`f)*NE3^26l`c2PKlMD)|1Vu+SSdj@@MAPy)Sk;^xKFK%R#KG8Ns>%|kK9WrmmBWKb=Xki( zi8fidDVgrOtoR2YQjgSkI|EK~X2Cd(JOnl{&0X5yz@pYI#E(uZw$@={>n}icbO~N{ z%s8WUsN^!BT`mGZF<_-AhMMgsmy)#cerUR_fOT_FiSS+cT>WF>(7S#_AjK9T1?h&7W3s2NH+Xbju;L~@r>Ja$EjKB zq}>0@;MSfa4Q$g+E&Cu9+uo9jJI+3b%^b!DM+AUzKJDEiZ7JvE2-5K#Qxc}e64q4| z_nMFBw>{s*vhK9an+^MZ_5e6yhNpUsbSsE4jVJcCKb{xeL(CPX9X0T*>dZeIK!i&1 zcmV}MqDCG!-Q{p@M?^?((91sgXL!T81R7T?5w~9qt7<jU7F6dePHkHW5 zwTg@tHxH0f>Nz9{7=i#igA(55bc`U6lCt3VE|M?GL<4B@JfsjPO!UL^wpfb-D01!JD98mz|y6#LoHh^tCN|=ojQd2S)gX`R=ikg&lC{D7Qidn3Z2sa+jR4 z2={#w96S>@$}s~{gchqo-t_Lz+abMB4QrxMd!Ctu!&f(;-o%Aa7I;v?5%SE{yg1}j zJ=%Ell%YA`C3rXO7=~&%mfZTfO-8=!2NjYHeGf2&#oAmP0(>kZ zmYpQpJCG58+QhZfOF10#3%x9-f$Qug{il~K!m`hyET`wDx}-JQV1;r4@`vD0@jU}b z>GqC)|J1G`bt&Gv5uBDFMxb*y&Rl6N1#!#QsjPISjko;bVpOON;rqS-xmH3!!W>RB z&r#p>*Xf|t+8J*J>f~#1)DX(d+HeEiw>dgf5Lp`lzt8O4F@GcxICKQVZuwl#=`3=d z7m{i@L-^M2XDVbwz;AX{MBZq3k~SlYI!{<}n7k)y&tdVSt|4u39YE7mkn6s6NyBSFJK zv;7F0J~S=ihiVEaK}>ubI$u@+^Qb7!aPV=lWl2i{Ktv!@q{WcZ^5Na1tnyH>CF+4b4g+^^omtg}&!jadx+JH-+6F~7Hto3;tS?urdNWZ( zAs}L-67l;0_ws=JDIRY;pL8JXA({$A)Ep{8b`)+64u#goWJdB55wn|Rft5 ziW50z{=Nt4G_aD=vkaoM<#tWBx7)Mm@#)w7vSQa^BNKVfy<)dbIZ6T0GloXt_wZuj z8R_WrM?oVTRfvjA-SNHR#j}=Y6@TkC5GOer>u6b?t^M=qTu6Uo5(vN`m*d(gvCWLU zZec>U5CrYIcvo7vpt_U*>mCJUT~ckVX42_R=v9SkAd*qR^=JH8h3h@?Uw|SGxu|f| zDg_0}+f~rA|6ojpX%A@W+ah7doy#9t4}1cTZe`&mOM(&0r-7T$ zvG|NID~MT9O?93>z4_UWbL3HLZVJOF^br%>7GFh{3+2fv8l0HTH>Y&YbztamMM|>E zR@D4v0UJVLp$(?;x95SrB-gmKy%sDoQOah>vk);xgdFRC&<*v)7nAbMn{fJc+S1yO zwu9w`@Vc;VRm}O*VBn1H9#1WK6jy)Yck3CKhBFL>iNoA_v`DG5IRh8mK$j#-hKE|m zS(YHvkw^Q}kqi9@m)mO5QdpEr$2+nKc~PAdPW&D^;w7@iI7bzbHAepK683bqUVC8= z%^duKn_Omn4nD%2iXu;EY0^oZA0$ch{gA!@(&8yv|34)E-#qcZIOCI6k?uEl(n1+7 z^N<9mN5r0~ny%(R))zDe4wh~rJT=~t)9bv%L911d5QRs`<~a3TRKuNSndG<_e!yzt zyJxGZt@I;0r34)!`-lAHIS))+_K}}|6fNolP9O=gyWeOrpb?xBpWr*fa(8J#3>i1| zx>f3?(^Z=s8)0#1Ci+YgpCg-g%mvgik5g_g2#u0Gf>r6DtICba;VMlssk@+C3|hdA zPb7w1}(k1~hikyaf2S%{9n& zrlG4y@sLcZy^zToNW%(Rpox3I)l9pE;JL(Q&M}0maf}R&xZkiJ#N)o%w2Bv(_4_E5 z%sC}GD#Do)DD1l@M-U=H$@$0CuY;Bh)3}N81a+gP3S(T^z)s!I_YWIlZtRU0ILpR| zw=yDA_Q3TSoKqDrUTv6upwL#QJ{c&#Ph`S-#UU50e}r=T9xiJ&WJbQsMoJ5c7$HkI zgnZ>D0&L_lr!s>fMWNf|#o+LUYN4)#rEo2hEGU0@u_GiU=tVD>*ZWGvb~@aD|NGih znOFR~euz^=jBY89!CvOM=oGTWM_tivhfb9UIZ%k6YSH8;=T{$VmLAD5tiLp?mRfKu zwav~rveQi8y&RY=S|K#kW)c*af#7QPJXlo1ye>C_dlZGPY?-uh2E_+Nx8|204F|Aa zv!d<`d=4pI!n9x#mgFb){m@@Zsy;$x(@L2F`@I4UA;|=_@~mUju|cGzzXX{g_w(7^ zGI;)93JO7%{}Es(4=w~)%Kxnpdm+Gv2sNS}O=A<)9y3OD-%n6`aEI+8=S_I`fRQaK zHYO$}_HhPChmf@o25;jh$&+7=y|w}RLGWvpBIp(oy-j3@6qsVJCPBCtuJS%Izw45_ zSr4@n1tL7O>-YoL@~7)JDeJFujDjC@`Yk5SR(=Kl|CrqwOaLmQ58xK-@LP+y%YI1s1VX71Ey?y-c&`mtg7UFPy~$&XsN*r;IZ& z2u(W8KiXFb(7G>kl4|`%X~;tMPTx2{`^pnO=aQ$5@vmHjNc+34-~IOIRaxRadn!+3 zGnOe8bpC{STw@r!eNCt$tvXySDTMAUue{SHuYn8X5#LlE8v5BpKqOz%DlAIs@$^|^ zPea z^@Kclcw2RSK}rL%y?B0mT3(UruCfL7O^AQt8)0CVDpMVe#w4>9CPTN)QSI%t4;EU& zeLY0_RPG+E_1BNPB7B)aWabh-IH!`b)lhER1d_}G#{8`*%b=ib%BfCK`<^m{`Y2=g*bg)6qogw|G|~_?{;tCB43Wr*3T~N zCPlYNe*^If@Upe^&wu7sw`M=0rXUOYcg}w9iV95px09h&aBs}9W;!qt_ zwuZ~r3GFA|joFF=?~g{6S8OhE8;Qk&)^S%DJVAPq);@CIyikMj?m|D}2iMxFKM3Z? zwj|o$Jfho3s%2fzL!LK+D)T7B1KyIu_t&?+Piljy&OZN+CgXAUQpWb0xc|iStxyXt z+ut9=bGKH}mztE8Ea-Kr)f@I@?6u96AfcEbD$gLa5rA_vnjimJ1l1o6#kHDD4sVxI zgPBT6vHAj9rn8k^dkhJFbfc7Zw*CR+0EpEOd(mL#o>OIOl9gj97@^FQyPif@O;`{l+si zM%KPt`*hsU?$)D`A{H2e$cip7G>qD`*#SE{IdsJy6i?hO;(2Vo+*sq+FPpJUtH{98 zRE}GU`(5#bUkxN}VaAGM^jv2bkfsli@&$w#*3Mx-b~3c)wUHXI1hQti0&Q#qLd;W5 zi4VFZ^HNloeH#@R-6nzqU>{4Ap#g}9#Y3A2q zF>xTxubX$lLm+!`vrNU{<2SpvyBj7|Y?E-a!6JE{Hio$HPWnm~;87>|<2yuGYKl#C zWMe)t!iIBQieV{DdNx}+XL)tDX>)=%xLB-Pj>3LjJPE3E2sgRWFQ+0Iubp!#|P&9r#|B zGgsHT&nc^vB=E_v1x99A>zn&3z$a&LJm1{$?4z+nT;M~y9WsoD?oO-_Bz^(EEpvCu zZdiG^|F&G*;mD)T68ZQ?f6Hire|K@^cJ~JjTecY^!S*MyW`@DuF$>*f(H^5@&{E3} zWB%NV%@IE<%GQa~cRWjl;z6O@H1E~h@t&RG5CJq|aC{>sYysz$Rn@iIrb8}EOsXmR z^#^9fd2nNzbotE#igmnJG7F;Sabkjm^50F=*_zN8coZd4%W%20{IfWEW=eh=p zfi}4=s{P$Zs18NDb=+Qj!@Zh)mAoWu9k1nX)?c{!(}(VHLU*h|i+4-HloDf=nhII$ z$T!QE(RKX&*PZnP{P8x4`-tVH2l8r8YHZke&(-{t3Z%2J=e4mwrQFdk2di4WQ)eW? z?O%pL-MP`QQ4di|pZML_Ba~~JYdC;Q?vt~97Mn;4w&G135rP0V5P5@YN9~MR*9Cjo z%zPLFJSvAeMvA?kg+BW{QwmRa`Mac$jz>M-XL2??yjplvDo!?phrn8x)>_L0k0F;i z(*wk`$zG2Q)gaC~J71kG2{@4l16x5Ou^UQNsEN?O3^*g@AA?13cRGPoFpVk~vN--m zCv{|jADt#y;jPC;VxefEuu;v!W@FOu`>aM5`{K}H@m?7odaC|ntWIMl>_f%3e#+5m zcihPs>Ao>G%{T`<^WECe#s=^$wX17d?}ajWLUg2>gRp6fT$9C5+0B@%I~Lj_3{N!iGmx<*WSVa#nVp_2Hcov9mryzWnX###ult#Aa;SQ}Wq$vT3Wv zqKD14V$gs`(ScGW7RQU!F`dfnTZ5HIFXa0Ane-54y1vk{=aj`#6Um-t;A0hE4=YWo zEXeDX8Teb6u-UR#>$EA1RIZaZFYBb22K{J@1aRB5*)|}{8yk#Do8IUQ#IxJWL`%Gv zthvXD%qP+P_Y>eMY_Cc6n^_(WUZ=O|y&~@%`q`5cpGDQ@<>7GKJyQ3M?Jr|mdBRaI zU6C#xx)_sUIBbd%BzVTj5AO;j4q@A7M80^|XsP61; zfOX_vDoDKsA<`L->eQW4fI0LX#gmqZ6jEWb9gUCNsTU+3wK2FTMkNP2euK&Cr*47u z{eH3F!8Rm`DMz*a?&m}*N8v|V)wH(X7z)Ue5bKQ>4NS2RcQ$H{ZwDHZGD0cE6|Sd5Dc z7H=H#)7eS+D-nk!3^!Z0*M;D%H$Xj{tjs}bQ@^0bz*3*sx3DrI+44j2uI?(bhi1Mu z6M1+9hOeA?ojup(24bu)CepfRHyW}sd_g3UQlNtIW76T9*R$!$ z)a^MV{_~3aUkN@}=_4ZPg?jt{uBinT$UwX17T1?;LvC2fQ=;l$^x${#brPV2%fzRV zHTV%_VFw9su99C(0{sshQh!pDd|P}?)g5>NQ$~QI7Hz-njW%LXuySmU9^_so6Gc@i zt*`VQbfQpe7Zt1cKky(Fwl4A~+j4^7QaQkc*>JyhgI3DM zKZTJjLM7IId9U)Fp_K3enltu0(&e=rp?9yJH&=lSn^MqaZ+RY7=`1d2)T{kmlHyKy zj2n9e-@KRoR}~^;J)cum)H3&U5A>MD6j?TQG09(i9Kp~xAV0yixY%Ove^F>;Q{!+x z+cozU#)&2EgBUY>uB;Qz1N(183-l1GB4YGz=go*XK*zMMD?SL(1o6X>2eQ1vJ9oP6 zLu{_-TU%9#66{+DkTr7o&;=xRu@)b$7>! zbCF(9e6LrOfu@^BHsY+2-k0-r69Z<%F{%;0EOpuRgj4th4OevbM)A8stN1Nw?wL0# zC-f^qqB8A>H_oI6vO4ZW9^N^!5BX6xqz7QS~6Za@$-eAmDvm$Yo?69ED=%b>` z!XO531!4Lp?>yK~YH(o8c<0;)4*Do;ue$Y_HIX51&42Oy9fNqk^L}w#O#pmeWObRc zkf{}aYXm5_MY+T7$S&P2XWr{BU@eWz=O&AIg|L97(V)W2%ZVZx6dF9@U2nYGEYA#) zPxC+dFG!^X5n%=eMAVH4PEGgOqi2=oq9^U=Uys}H5<`~GRzAss{B+@S)2s$e`d`i1zzkP1LsXjtoLLHo3!l!fypF@gE9j9q$bmCub&5*>Q9iRf=F;F_B2uoXH0xj|epsqKsEn z+gP=VM0y(0{Hu#!FL9<<(C-KN5dS(I(tfNCBG;yI5U$TVCOqs5IksQWj+ulPVBNEh z5z-B&q%e>RP=qG3G-1V|M3(nmis>E=>(xWe;U8=Qj3W2-CZux|>mGHe>PuV_$;zqdSiS611DZb{O9W9Uhv*6ZB zus7l6DUi@OPy6q27Yj)8r}XUo@x9s;t&2}js7X-?-`Dy{hsBKI#z=hnej-sAFOPS^ z8b94{;(}RC*vZV@CP+FsL<42Nhf%y$KcSNzLkdA*a=2^L*Q3yU>m9^aZ25He=D`ETb{5{yQJWFNVght4P44?EP0^!9%I}x%TTc_2ntWIlCC*sZUUZ=xIlG3>ImMHA|a!$bf|3IZi269>tkGVJUnl z+X!Wrd9Dqs{pXXztKtNW%H{5>F*Cwba3{|Ds}KJrlU-c#vG5Zpa6H^k=uUD)w9?dT zXdcAcQnNaYFTUs~bXB8{MP1<}fyTyxMB;F=Y%_}#6vRVD{>H%9*DfR3K;kdy_AvxR zzmMHEMtn=9Gn#U`CZwy7On-D;EOU;9c~J3D4)lA8?tyL%gmjTw*5RhxFOcayf36iy zemck>+Qo$1{8OP5Gdp3XbgUOH1-d>_1=VIGMnlX&KJY^Vf3wgqEs5eemk3?rDAnVI zu9qYjqQsWreIID=XB9}Djb%oGT|{Si1%|*^Pul=mZR{qtm6kt$dUEqt#g)M_LA^F? zZ8RDaAC*%T&qqMOpMfaMNd&7re!k!=f>Kt{0{$tZH6eS$1 zoLr&ZrrpnLd%2PWQ#niE`SVy5YCbYhc4Wpm5)b|}7GFG#>QXCne{=nY`*~c|?@V`6 z_cbe?A7(?I;eyOH!$oY%`}l0lq%->d)dFN7yk=gr(Fvtl3usdp%HE&lI^T>-XvBD+ z4rdgI7t|;;aWcOjzP=1UdWhts5pr}bQ(5uOK)+W)VVhZXk1la15jt2ylQQ!XP>A@R z)xEgHSZ0h{QJYIEeN$|QNM@;wLj&jJjj9i9@%{=$D)sk!b6#%Tu${g-LtK8I_*vsB zjA+r$#4-IE(u+g6+u0~V`)0_{23qr>hlmY+DRCYC!IKfFO=IpO8mF!(e}gNX5>oTR zSs`)6dp`WqgNeMbLG{Adio|Exl;#CDjX(d^BY(H{qV@iczE*RdTv~bv=w{|MOmP?f zsQe>#C|I!k{`A<)()HU85LboYpA`$qI5#_mhC1CK#CEv~W#ci=&TT5xuGY06M%bQ? z8?wvS@)ObAzz|??gEgMBw&&|*vZ?IY7Nap2Xs7O}BoKFY{Lj!uX%vEy3F`v2@tfUG z=J{T(2;g=$8?E=FUr2zjE_)sR1o|0(!Itxs?D9r1-ICq==k^V4#tpc{ zVNYKvua^{hK55+Ij)&8~A?`U4l z`YW30cZ>p4dk^%-p$m*_YG>t$7(|~v`R{&eeogZw84hlNkE?H}Upj7#deRejb-`=hdvI>4L0h)s=b9djY+_d`pe zVv$Z7G|_%>9G@t#^9}8~V!|7I9XxZN?|1q7iPKS{D45)EH6_Z3`G-0#{+RQ5Wk1NH zx!T;K1@Rc{alw?WCMhNr^g}F@{LXkD#)38f3$*MY;pBK3ci3RKKHh4MEi2q zID(N0)Ldx32s0`M&JMxq>u3oyqO04|n{j??>%)m3f z(r@BEO!xv%8WF+H_&K3%@!f5svFAwiN;{hDHyqL_9cbSd*DQxMAR|>3`^USt)CQP4 zcxOLaTYzS3tE61sjj8+YDy#fMO@ewlhJpi+MowYBJvB~AWV;Ws83C8E5!GBI7A}OE z*~ooL)-TtG(;xBVOGu^&=dR}0|I1BS9Y&l^BcqC~y|UtA3hu4xe@tyjK^^w(q##19 z&!(ah5m^k7D|k@4;1QU%%_d5pa2EwQJv5n(#qS?QewMBXe4kwc$ij-#+{R6Us`#`G zB^>q$kh3@-%mx8|9iTkS)7Z%(YWxi*?lj@eO#!R|db+kg4gkOIO5i?n8FwefP;f zvnBl{TTc(pN%AKDym9Tq$T@o@eW^#4o>Im#$%*FLJKbz%&~ApO%}A6L#a!~x@o|gP zH7##nhHs6Pf3|8i79V5(%{#@j16J-NrslEG)-CE+M#=Rb02~(&F+Hsrk!+1prN1+~ zNjSY~bI(B=aBhA7k=cV4GUPQK8c-&qV$JbUq<=npy_=7!3;un~FW=Yr3rd+(6{iul zXvQsIFtJo=_TSee@=-B^4mqT9i%*@L$4QjPtHlUwIBM$1iO<7)%r2pNn^}Zj8cBG1 zB;tV50Qmw*b1GG~``stFjqcr=K*nshgUGW3aITF`y`|P`)}JJzCG7(V9wofQqx z!iKi+dNkvo3`lqQvalB&)=72g3J+FErEFNXZ)?xQ8`DbRG20Dy!vmU1{#Lj+^L+eN@O9$A!n&*?ol%NI4=K{>}513_5DSt^jVvr}ZU@i&iu_7aN-*e6k|S zFu}+iOmE4tp*_-1_1bvo_=SyxQ9-|E@e~th@iU<)DMB1=2Jo4TrSx)D*6iX%GQrLLTgxb z#R;mGmmzK4Ch6T}4oCPLl|d(4+}5bzuoy0BoU?5pSBI(h)V2JcVRnK%CV6lcxB=(= z(S%Y}<(UhiGWJ~-D5RhuXv3qsTj#9QJx9H+kw~%d&n#^og&+P^m$j+2A6fAbzSJ0@ zqKxc8xt!f_QSGkP_nf%P_1XILP#?`l0f;dL7THke!}rNjt5Pj;1)7>NfJ(+QAJlVa zm{@6C^_U&MVf!VW45S#aF`OKwCcjvPCZBnO`X2w@jv1hvDshmakC*Gp&v&dOzJx(qVlXW@g=-30#A>c%RGWJ2Pi{qh;#fcQ#Ns|JXMv5YQRyT;B@7gZI6abZgd> zPIDZL`dTGhgtmG7D*Demnv z(9QXGUZnjw>wb}Ykv>$n|8~XE4USs)`7Vfvw$jRC<&d4*@NB&e7{QqKpQq%uX5^o4 zxq-p%)8=k`E%WM-N;C#ot{HgT4vDPFJv7mH`f*{?K zYu6Fx##da;#FVf9IUOBA5B;H)TwHhSa`Z`?x;mg>C*l%kq7Q}{Yp(JC>N{5beuhts z6oshu5+F*MPK(=t**3|DiwD{N3WHl*C!T3C2iQ+P8;> zAlBoF8^PDLb&H(C>6#D;2upWF$pACqa?uS_r=LvG+PZ{4c&&Pd`jt%Pc~)mIz|5^Q zE$jA|o)Hh$4$OLl4*$GPr2QTr@W|uo^}v>~%!;!*6c-1=Z+MQQtnzhbY!fY|cbSpL z+VJ{8zvt89?jT=B5nIBm=Ku3M!p7&;=zA67{l$FU1yqwKO4H!s4a2rLH8pK)R(Etl z{uZQb0!r6rE*7UAhD%ht?dtGG{FI&!YN(01h3v!gO7(H9Caec|T6 z-O<7c#8Tn6U~P}S=^RI3${{Vm4@1q9o?g7>eY6&pfjXcxTo%$ldc9^$H)1RJ@EvyJ z>i@=QF#ZMZYdIqSqv7^npM8{v>bSJ=#PyGY2(P1=*PQ@tm7f4?R|FCWk-Dr`NBHnk zgvd@W)Kt5VH1?B&0aE57Fbkdl>G1#ws{!uoc_b{lsX_g-nqbBu^VOUCTT0@~Vf%OK z`u5BJNuz~EobXwYGQVP}Ebc8Xt6C%X#OvxzdremmmL4pKmGfeF|6?GlC5i6kar$K^ z90pPl^4yh9-~lG|;SW;i!hvR7NpyP4Y9BuIbU~`O)6}L^9&9*t&mx`&zW)Ty131gw@wkqhi9N$3sudAep)M zO)6-S+a!-V7RG|241QDygo4IrSy4^|>bG3sVY?Th+Hbvf_M4#0lxPbeZyv0(L%8c^ zA{aNtxOhI*gXSfH@u{Jff{FrBF=d6Y1`FiDc;%B@S|Kru|Ea8h`7VM z5*q?}Vf{(Qv~X0X8Zq@IHt*Q>uy{Am$%^rhzyojZ*a=7Ms%C9$`~w>Xs`#|Gagt&i+@I8Ri9t#3vMVL42Bk0tB2x+B$M;#odnN$g$*I zEwwQ`J~%PK(LtPmz&er|ygpOG3eDmZ`T8PD>Kx9k2SO~QvTqq$rym|~Lc2OpVsbsJ z={R^BHx?8AN!9KP>28f5`tN+z8dFf(O-CGR4bzaDKd1Sw`c@xyZY)e;s^ZfI^P~lf z)@%%aKMy(c_Bv*zmBu*8`q{ucbhz`rBChG=c;w*J37ocrr4nPxgE!Q6?~biB-gR`MJ6ruuk@V0rr3QWy;lrP z?lRiaQiz15dO?!MlY0CetV;=pFJ3TAW<7?8`lh8r&!Cy!?P!Ics8-*8azDL^euNHv zGVSd=065q}8&i#;ki@jB%4uj1y|2t?DLm0E+MVIouNgt2yy2;1{B zgyikl&QiR%lS`l2fUcS3nz*<~m52ZOeuJR@NNFY{^9>kDpW9L} z;J`TgL9{am^wo3D6?5~ru0JVe0glPe`_0w0v@|a(fTa0m zF$M3A_X2;u{$W!=>cZImmoo1Jy^Bqor|`2j%bf{B{nqFK8+>$6+|x;z5q3@X^cgU% zsF^XGjx(6~>r~0q_wcEapQI{@M4*z%%y&>5$q7>d)NVa$j6FkfOx`ZbpAQ&=#IWmo zS9ES|O;=(iOXPF@4Zy)6Hj}HMGc~!-^|x>OshTHE>!o6UP&7;3 zjeG`bOlyHSJ<$3^F2B`5p^yI(vTf=D z7?>;zjuw4Rjwz&q^aN17Me+KtgpuW)TNTw!iPXN{*f~k+UHxH5)|uBM5pk>00EQCQ zL!p#7dAHtKm$qD=hZ^1a`ziG+e@!eNg=1~Y+-I5c_6+^Eayz~L$t*NYik{Yg18y!p z>}q0fRoDhUk>@crI;1+t5Of#1?QBXT-)W893;}B$dq+e_iCAFL=_Xo>Ey|Q*ijD11 zg!J(yokuek#wTw;{JN!KDYHBsgV1bC!=-@Nw;XLt8&s>WiaJ_2DM@r(l6-PhfiAqL z5CY%V?X^?My^Lc!n|#mKZ&y>>>FaL%qLh~$s(l4CaRx6X_qUarrEbG7IGHAXSVPto z6O-am-`KOY9sjLDdBvuIYddv24@P_sTUrq8S<${U_*z=}k9q{KoEYMg&K$VX0zDs( zpgK8G!3Rf~RPq^eb)|N+0`cKm|1J7SJ8Y9!TsDRYvrE`JGt~4QMWojMt8V5rQAyo_ zXzb|;!nH>xQm37Z?GqEYvh?y4AWJ51ol2Q~xO>D`?e@K_;b<9_*i3FN$V}7wsP9dY zCYIV&Tk7$R4bE|0hn3)wWH2W3B#CP(H88NhIZa~Ul8)u~`R~JDt_F+WZg%c`HxN%M zEqE-UQI1G6Z(vFzJWpYx(@r{sv~}M$vfpO(jl^WM;BdDs|6i;QL*CkQN*;iO{!pD% z0^W3xpXf`R)Mu1}qndufNNceKHjzJoMjdoM3Og|lFT0c5c+a%-eJG_vqv071#`~?$ zUsvZkS$!As5NbK5Q+K{26uxwP78S)_ngEp4^g7Z|$bJq`bjhwst=_CU|K_=xG-R%>9+BF=JoS;3!4c;J;08 zvEhmo0nZWK>5RT8(=Z578DV)J}gO>cN*Uo{3 zsxavCDgXGYZ5F@sTkBZaisq)V3(O(c&QD7cT#F})k5SY%?pM}88`3J$PS7WqWz4l^ zdF;9o_cSD(9|7;#qrntE`7RX|aKPH!R`b4KJkuD?XpyzIVB>Vnp}jmGH|A-A@T5l5 znO&!VMZhz<`tsI|sQ4pusJiMZpwmFr}(Wb~y4Fan0c1NT20KaFX3-=x+0{r^7_ z2f@+Sv;Ps5S<0XY2*{|4GLqi}<4RK|Z4KTL{SCaF%*hhC?DFQhJ)rMiiC2l^=jX$i z)ghIV{PkUWJu)N)5K?&}C4-NG|BBqMF(X?_Zup6LCB6BZiZp>{N-7?cib{%d(dfrr zGYjrbV~DIm-N_U(DSL+Ng;Z8u%^vYQ)!8+~@R$j+MstMSVFu69p1h$6Iaj(WL^L#&v= zRJj^GecR+<5p@>-qC=oR?b`f}6=P0GHUZ-QL@0}{5=~^mi;z%6y$J1sJv+MIGP^o| zTm4&s;lUeyF{kr+L3gs{J=`3|y}*K$}pCcx{0sheCC<)*&3ihQ}0(iKo=r?+Oa5V(q*T&60nzL8j{+VApAn4*BA1di|e5 zam__Z{r4$l{}%@bF(#_OASb{MzLRNz4wW!=B$BB>msuq~cMKu$z#-86!dS!O*_gs- zdsie(?JM1YdD2Yy$Tw4_sYcx-+?r@n=r(S~{h)@YcJb>i`Td}2IknLJN>(|l8WzQ| zN;s~d_(|5}11TxV>>Q-~&0_ocsc}-z#62Srf+VY<+>0{MPpYD)+P?s!3T#XVlX5RJ jER6-t2hmNVK4OZd14Tx0C=30S9dto58wWL&oqzYI96n@aI9mmjL3}ak-f{F8Ie(u%#4&IqmV=> zQc@v>sH`Lv2~o+ZRK|J!=y~7YAMf>C&-LDa-JkoqKJ%Z?bpx>Rc!h@tqW~ZzG&<5| zzk!gGvx^XZ5^%r?XdnUA%O@&a-`d&&{v&=)00IE;lHwH}9_;qs17BC{+MnT6iqfks z)%eeO002OUbaHk9Kx6@c9PpRx0RY+iFSi2#a$IzHGyoC^0A!y)FJAy82>@gx?Q9GI zkU9V$1pMV406_5m%Lf2}5bF~V4S-Am;7FmqL7@QnRREl>uV0i806`W2e0`&QLI4Q) z03a6<66Om)=m7vJpYX_N0KyUgP@J4yg#M0vhzUS-4**X7A1zt}ptTY}(D@%t;wk`_ z4Z!t_|7bKDKmY*Y8j13!Dggih!eRh`ou$)h5&-x@fb9Z0eY1*A->wEg&j9oU`@}@X z{`+1CG7RwF;=eop8)yUo1pr)N0T&T0Vu@6t(5Oh%Dmog2$24GFaNM}J_zs5ij5$ns z%;#B}Sw{&QL>2Zp(ja*^X9(9Qk3MfBA0K~_0A4U(m?TmxMij4-q)4?%E6EH{tmI}C z4l6EFgOpcPW7W|b37RzRNS*I{Yi$^8{p=n% zNI1qjO}ePMRvg-JckpQQV)gd+Y4Jn+odd21(hln#$qAkcl@1FFzZtO^r4bz&b369y zQHgl}gtElJq^)F1iu>{0)Rwe28R!$@CrwXun(YG9ptJ+*=V8v5FD ziG+&3Cizxp%AHC*J?i)BYgq zq1z*+UR>{Z-}U~a$L0gP1M^RAJxv)j8{!_CAFh8EGom|+jP^WFe4+eey7*EsL^ zz(m%h-sJjJ{VUID&gsXmkIg8~%)Kd{-9P)|?bUbo?~(V{=RD`x=i5K{EpRT}`{=hw zSnOExS!P*o{^Y!ZU8!HST%~<3|6=fE;cM=i+S=Q1r`F}yU(-%~SN*>Dqw=TQhTz8X zuioDsf1YiL?y%D70Kg7fkO(7)G;#`ANBN=V(P0=orWR|BW5V^}^B8;?^_Ya2xmXxk zQ3NuZAW@OsffUbii9E=;!>z&-#oNA%&TqN9Qea(3Q}~?7Z?Oa7Es`u!NB2y~P-P1! zG z9dYokEt{RKeYL}yla_O;OYb2DH#_$VkJnxT-d;YnzH9#S0Y?IF2CW6B}M7DQ))!o>Gax+hbP{gT+d|95<9J&t$W5g z$2~VLFF8M~z@yOatU(dASgJ&zlvqkX_o-~+eE)^6@|ugK6(=r5R=Qr+uad6jszKMR z)DB&_d9|i4v;J^{)isqyp2k1d-!(nBQQ4f?5_Hp~RjQ4#ZMA*)*45kD9f6%jcSO4| zU5j^z?p^6lyYJOw_(1f*&cmrk?Y+f)@%=83)dx5RXisLI-Wtps3LCb5CO5(|@^y6J zdHsvbmqBBu<5Ck06U&nWQ#G$rr#)Zm&hXD{znPisd|Ui3;=R?J{5;G2hYwE{sy`lI z^jOkf=3b_K8dWh4Vqgx(pbJ4G#z-NufYL|RpxMxA=q*etmK9r$qvFQ#2@K*4lZ<&x zmdxzTGc5J22?T341tK%?C;K$%0Y@YG0%tB)I(IxzC~v?nPd*QR*WC^R2L%rb*$CT- z*o#_<8Ht-q7)k0$Y3@;#7LgHCvkKFSFO-I;1IqVR+ElNpRjZe2{T389MzmOoT)BquGB*cZVK*79%`OCUYg!&KI*<&etZ431B?QVgNzUB9MKEb4KWEd z3ZsS#MGzylBA243qlaSd#9ocdJ{lYEnP8KsktBYMcuKe%+5CcD` zg%5}@;)awVFHr=PF)9Vsf%=A)M*E^KpvN#Q7(>i4Oef|$mV))iR$*sxd^ks3F>V~s zjZ>vt!tO*tf7m(X(<5sWXU4zr3?#KvOp;!rqKTt03RFNhDoH{&-M%ovIp-Z9ED z9%CG2+Qk&Y)Wu9-_F?X1A+iLp+-K!sjbI%jND|Ts@7VO%YKd545OI{9%3e-lAjOd8 zIczx|kyXfboI;#MTufY<+`yf{y}=X1v%#Cl`)5}&AD%CppTu9Xn{Ri$fTBQ`;C{hz zA%CIY!g(U1BJH9kq6=cF;(X#A5)Kk;lDSe;saJdArG=%R$t1`M$-bbRlv9!WC|{xA zq{yK-qI8C8u1rv#QYljnP*YLIs*h{bYQ}1rYD?+hbw29$?XA(v(T_54GBn<&X{2l{ zwqMYM)s)?gVs2sKXPI-L$!f^@iw(D}sa=wNlf$GF+1c17#r2*W%H7hV$aB(L&?nLN zxj$DxWZ=ug3P*B-e}_7U^+%{jmPeCfvf_}VN8{HL6Ow4j$;a`jdFkYgl9QBEkFxAf z&!0)j70r8C;8sX0DlFMsx>S~UL9TqE;!LI1WmC1h5^ojYP#xVag`smjeZ^uR^?oHKCSIrd77Q8E%%lUBP z5i&aNgtFMbk#&+b?O8G-kL=Y<@Fd4y*~ z%0!*TB*a$5+ayvX^`(eXb9=5yr^z_WN>b32S-EEUJcUrj14?pK0(DJ!Mx|S|QLRk< zghqtsAuSVaJsmY&%3cvY9(^7ICPSuu%tk!M-1~)0_)KNYEX_kLaxFU#ytRgdGBysj zXYC%_(;elU!kz0~mJi9hCAvTJE4+crn;9q%TY^{7NJ#Dk}yX zn-;edpO}bA%1CBUsZ5ngYtPU+@%+@0EaddrGnAaMyto3+!loj#;ykJx{8@ZZ@H*n11R2JZTwpAI3kc z9F==M^wNE7YQl2z{wvD#x!1HeduKD>4!$!y<(&4EOyPbNBy6NN~*m^gsZB#V^#} z763>9zz>EH2Eh;pkst&XUPGt=jRpWP3=5Bs33=0X5iS~<>6*3L=k&_itQczF<0QeU?a{Ut552?Wb00OB=L_t(2ku}jz zXcT80#_{KQXC~RK&TOJ4o0yu!Caolj|1cOqVoeVogq*A*TIi`DTIi{zlol=3qh4A) z2rA-1@DG@SibP9kBY{vfkw&vCN;Gj-<7UmeJ3Bi&@B8zho*zD!=SvX*AOaE)2w?zi zkb7GVX%aEIj$^&wAR@E@0{|q1faC*xb#m@jD*wW-Xi-aJYV!*BtL|jyl3Lp$L5dLo zAdE=*P5JoU=jm7FFT0kmY4sd~sa$dR@oU2RuJ4on_QiFU`UoKDdH>9R*%yBGm+f7h zo`p)DR8r$*e0_XmdS)T`wzsvvEkQj!Mz^UDZyic4Tu;p%9azzUjJo_QQg<|Lt9u6q zf6Udj{r2~a7gPJzHd#k-g{cwRwQfgGPitab_>_O_!T7L5MdcUpi(+cF6k3P3#2}hM3Df^$ z{08eh?)(Y0HfJ7C>knTqZm>V?9eWdV00jjoiXxzq%VO#_yhd&ugtDM01VBa=idIU2 zV#8R7h^nBaQw9!7_kg-~3?pZ$6s-3l1&yEkPQtH7jWNfTN&&Hi^zJGReE+twr)72& zch3m`+t832lJK~C`$X9-R_2o}uHud#`1R>v@2NX_ve7w*Qw^udAX+!`(FqJExpLi8&{`|%A`Y_AMe?Urie>t8!Ihq;ImcCiv)Zgw= zJ^&G#bS^kCIy>)&gKL^MwJmdqiRXo(N0~W4JhZ80TStAZMaoA(0AN0dE=|tePUl|+ zfzis1qqjM+dv$Zy634L=MKOv(5r`3E#2A6mkwP_+*QF}7xN*j9$0mdj2!!tdgS|}B Tm7TM^00000NkvXXu0mjfB^P<7 diff --git a/library/simplepie/demo/for_the_demo/favicons/blogmarks.png b/library/simplepie/demo/for_the_demo/favicons/blogmarks.png deleted file mode 100644 index c5372614a4a623d418be15ececf2768a87f70f29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3823 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 diff --git a/library/simplepie/demo/for_the_demo/favicons/delicious.png b/library/simplepie/demo/for_the_demo/favicons/delicious.png deleted file mode 100644 index 2e6021d26e2d699ace681e80b4dff96eee0a5830..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3739 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 FV1i(EKivQT diff --git a/library/simplepie/demo/for_the_demo/favicons/digg.png b/library/simplepie/demo/for_the_demo/favicons/digg.png deleted file mode 100644 index 3aa96770e80ac18446c0254f37af3d75740cc415..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4004 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 KMNUMnLSTY_%g(I; diff --git a/library/simplepie/demo/for_the_demo/favicons/magnolia.png b/library/simplepie/demo/for_the_demo/favicons/magnolia.png deleted file mode 100644 index da519f5ab92d84c56d4e55f0c74f17d828391960..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4574 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 IM6N<$f?ZhTO8@`> diff --git a/library/simplepie/demo/for_the_demo/favicons/myweb2.png b/library/simplepie/demo/for_the_demo/favicons/myweb2.png deleted file mode 100644 index 2a12968d5ea10ae7b39e47855deb2040e35a5881..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4010 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 QS^xk507*qoM6N<$g7XK!pa1{> diff --git a/library/simplepie/demo/for_the_demo/favicons/newsvine.png b/library/simplepie/demo/for_the_demo/favicons/newsvine.png deleted file mode 100644 index 5cdbb31c69adf4c0a52bcb93193c7a1f9566c76c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3804 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 diff --git a/library/simplepie/demo/for_the_demo/favicons/segnalo.png b/library/simplepie/demo/for_the_demo/favicons/segnalo.png deleted file mode 100644 index 748149b3713b90ee4c3e8e8e85f73d743d0eec38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4116 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 diff --git a/library/simplepie/demo/for_the_demo/favicons/technorati.png b/library/simplepie/demo/for_the_demo/favicons/technorati.png deleted file mode 100644 index 0f19e824e614e7d56638174c33690d77606df22c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4087 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 diff --git a/library/simplepie/demo/for_the_demo/favicons/wists.png b/library/simplepie/demo/for_the_demo/favicons/wists.png deleted file mode 100644 index 2e2d294d1ec6198f50c3a37253cc7252a2d4b3a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3974 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 diff --git a/library/simplepie/demo/for_the_demo/feed.png b/library/simplepie/demo/for_the_demo/feed.png deleted file mode 100644 index e23c50c85b2fc311da507ea1a36b05c859477153..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 715 zcmV;+0yO=JP)+60z1wux?1B>3(E=W@nR>oP6QkosV~Z^E|V&0*rblG7hKyj7<|R zpB~c<)A3vFRu=s_()x^_5#I9fB+Bb^NQ^=o902q=7S!4nA9z>D|LDWt0tlH9&YLs8 z#jznnPdxz&cY(cirJ#}Zwze*Sn1Hh);QbKANWE4yq65Rg<~`uZQ=r>ml?9ZRfL|HF zw%TA+@fV0t?EaQ!YM$2tffqnI4@9{*KFS;i&eO_B0Z2Y11S&%ULAgFM@jEGG>GaYC5e0Jxn25xX4php5d2R%e0NXMy~41aX|Iu4V)2 zsD%J7aa;m+-|uio;=Xh6!~@{m3~+M|xV8x72wI*}kZ!^+K2jEJHDtRwG@BGuLumyb zTq&n!lic+VK|k4Fd921#gm;;$HUMZ6paXxx3$jMZ3;ZIl#<&yDpp(9@^Dy6W=Soqn zx-_k78w#Y4CV-a-x3lW-UXH1%IHmVb0v~2ozjwR|2+qKltp?xkBAmhRf%I^u9V)cH!U>vs1-eg7H z^~7Zbka36$PtrooQe!67#W>#Iht0QNVdZm037{z~8ZjHE6IFC{@xDgT%IJZVch1r9 xZQ~TIqV&z5Nj^h}`kntTq@Q$Zp_KV2zyNZ!0q^m>#MuA<002ovPDHLkV1i)rMIQhF diff --git a/library/simplepie/demo/for_the_demo/logo_simplepie_demo.png b/library/simplepie/demo/for_the_demo/logo_simplepie_demo.png deleted file mode 100644 index eda2d868b54949e2f4f7c12d21f0ae1f9052f0c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3047 zcmVWdJZTFEBGNFg9|O{E`3w z3p`0gK~#90?Ojic+N-@^sq(vQx$`X+c$wNd)f=|VHI3*Z@KCP^ZiaW4S8;)P!;f{q;!D0Wf7z9?*Sg;&#vU zrUT0K zX^X9-hpqs;1Mrlu=lpvCV8VLjG*RbWnR}lw=9cs`Xi*+W_g$^3UQK8sO|>CrEvFxx zEYo?2jln6hG$-}ueZdFtLj5`j^9mBt2(sSz#3n)#Q8zLYv93OVHpVo1Fc6Ust=5>R zY%RC+-IY>m#4B`&v@ShYO7%J4gI3KZN~t8X*A5~|jbEh{u{(1LJzkTrj)P-IT<2bA zmhJJC96X1B3*a;P&I{!RRR+y%)&n)IzifD!RJg}ULn*Z+q6yeOV&FW=hh7;EJ|QZl zLLwRh_$Xu#pjEJwLtHHXa#U9rU+|v(=Xe$Vx6NJBq8vggkzJ0B0!uGRI{=^;ijzcA z=br6AU*7d~P5;egaLLNvVO_jd5K)ha+^oUP`L1DjD$;JhO1*+@XVRMk+lp6-#w}?n z0*T(t`x(!))PKr*UPZ=A7EMLUCB^b%4G+Ag|2U!gP2dZ8QW~IxEZn??g}{hOjth%Mh| z0K*Nclo}m^76T#D{h9K=^Ta=dcH^4qqL17NQFev)qk2Q=g~mf7h>HL3oZC*RncPof zvz`%jHGv)rDc+46)c);!#PNzLO8`&QZ_`FLA_^f}%wJ_0$%tr-v`+a{DdiK<67>aU z+$yD9zUK%90!J9Jkj^}V8V?d5vSBI03P7LrREd_Wh)J0VBt7;i^k9tLM=3=Ht)*zm zDDwcDLCwe?A;-8{FxcsxQfkQMhXDRsgua4^89;>)XbE!wZj!-IK`b}jWwwVhvZd#U zI9Vc7oe@_ThIr+zww9i=_+1BHL5rj} zLf*>Amx4gD81#ngT?u&|6q^{N;Gd{niJl^DxT%-$=qQBm~;Ep`=3rqTr_rhNifB%%1}y;Sznq6 z*)tjJRh>!k|_;Xm;taGFn2~vO^}#%tdyFvT_!o{ zWUZ)EeqK|^Qp||+$IwQxB>EP57CeTgkR?vn{1Ibr^}Aq!;}^|=wJh?nc>Y1kLp&~e z*9f<$E2$TG?i^Q0Hn(a@E3H%q&}x7W;Ik!vvPW9#gme$z_@1^#*W*qNE$LF*=0qXY zi;aV?QrTbNHy}V|+e_-02p;6wvPt@P-H@2SYE)JS_9(^M0->&T(o!dyMpsWrn_0d` zhc?y+M;m8h>W1N#F6KkI>Lse)d`dQF&=VlX4#QpYT*-vH2;&pz@#%88^4Z1g=J+IUn(e65p~x)2I!E2gOn zO;c(mRZ7kFyeB*?Q0Ae3B%gHW1V!_*Xo8U|LS3{-QiEh%Edtwt z6^((&-0Eep!W!cSFlp7RjMdv#wpXH!Q^NwyVeVbi5>~8t2+xXJpiCHju^(-$Me`w! z@1Vd?eH++(*%F#Eh_^vlq0TL|&OF1$Fcg}bGG>bpSFp|jwYEPpU$M9_sfRsDJ?*$V!F?(168{f4f_c{;r`7GiZW znHvDGhIb^!wI$Ya5Csv9d7o}Fy$kzF-$ZfUwWR0KDoH0+7tStDsWGs3S~8yV+z?|^ z8!>EdF5cL&Yge(0Msu02XV8H=yYzAU0zIzfyIJP}h29mWu7VHrC&xoGeczg~zYjz)CNc9z zuM5hl)mQM7AA zvlu(hC(Z)$WEES0^Tl$8`aZaUeo;Y_MD!`v=-C*X;THXmj1`(^MC`zRYDrOAC-sn0 z3nqsq0O|b&Q^B`F`AlaXJ#$zVq}b`F zRX{`M5_;C?ZPidVX3(?hRE=|2Y7y+`bg?nkbfE`oi1M2sb_UA{rY{iRR58WoeP&he zF)-RQ`(Xxsa6(w6-D9W4ps9z=vCL7Q`{00i1ix1ehL@6jRec;Xft6SUmbqKhg`F^Wi|S~ZyG30nZBT2`qQ!BbW$qR&P82P3w`g&qXqmf3ixWl5+|5HW pz~UC$y~Lo!BSmX1Z_(mJ@qc@qaLI98VlDsx002ovPDHLkV1fZ`uyFtY diff --git a/library/simplepie/demo/for_the_demo/lucida-grande-bold.swf b/library/simplepie/demo/for_the_demo/lucida-grande-bold.swf deleted file mode 100644 index 0a41e15eb87253083c1233fbd9e4aff27d438082..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21159 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 JLhMM>=Kb?J~S+n_*SrvEA{}eAOAF^Bv~YSUSuZ zv>Tn{@3GQmWOl|(AL(XDzFjxg>Lz z&P*j6C7Uo~2g^u$<}7@=s+;TdLMzwlLfRt(AuVT~&P<(|Xmi*Sj;?B07)w494o7AH zTWMAOr20u6vj$z|;s5&|fbZ3}%1TPGScGr&SttdYE&27_S%wfa6Clc->LNqvk@l&h zzF?CHuWj`JkY zBB%d+`X{6@?;AAB?tg~&Z_r{XFH;c|I05|=FLvHv`>ZGCK*{TW(0hy^+(`nFCsz3i z^}U(*cf8>VNOgkB8`O7Dig$bB=?%NTQu*g>61?Tk5@-NHtnE0FYbT1A1&J7pvma0H9LKi{oC2!pl0iDP~^OC z(DjMFRdfFHX+IiU<0OFwC#cv=;60n@yEg%~Bj}WLL@$EMrBEZ9WA?mnPsi~#Pt5V~ zU#M74%ppR3XPy53^uL9oC*-$nLTXk2km=-k|NY7SKN9*~eUk~YH?Zs9>pwLxC#)8W zB!tMA$U4d<%ifUnAtn&>h-Zn{h>wYGauIS}a%@s6={YG`{;Yhm!c?*cc?bD8xry9Q z4p8(|!j(wMk;*?Re^H)H*+Z$OG*f=1OjBX0Y*9I?LQ{=XRaWDv{iZfaeS><2daL^H z>eDp5G$J*UHS#qYHSTH*Youwu)%2!bpwhM0YyGa}uDxEnO8cSqYwcw^M|3dVwYoQT zzv?FG-PF^VWHV{gq{2z9lip4`qF=7hp_S9xX;udF4Y&ro4K5hGFmRiEYBENjO;4eV z=|9uIGdg5+)`&Buc#7&DujvMpDLKr+9h4tB8nK8$dgC3J!0+W!R-8YuN+tin#ZB{4 z9mjKr4#r@-X~gZ`d+cZ@{>iHvyhdzWT6i5zbK#582vfVsF1LGc2&F-N1szBQB8Sw9 zXi_M-E_Es%%UmQa|D3Zi{{xSSqG-Ynbc!*-Buc%5k zC58MVE&tq`_OiDX>zS$I*fj;a!!vN@)yY&}ev%+?mysnti?j0I`uyxHMBq{AGUiCt zdFg8vkwVZwDs6UtpeK&SZS;t4O9>Ov6AJ-*x`NA|8mc#U4>v4(s%26Bu{`9&6JF8xBLkU3o z3^N@@v#ak>LyjaX)SiPmeoV9H&XKzfvb{cFcCY+;SIh;yRX^`XartFp_w-5o1&0Vs zAbu`{=}8?)3~j@&tl$%paCE=1wZWdTpU;Ks@LdQAMZ9-nS>m-Y_e8E8$ocW6E?<=> z!pyTkwp1@$i4&2-Jda~O9e`C%c5^S>0dO}9WY&g$_nw={zvCuCVfx$S_j}Dzu7DEp zVVuxBcgg~@>vui(138QZ*W2nUJ*-%;6fMDCuJ=-@?V{SvlDwdVJ^rG^j~BE2yT4DU ze~vXV;l)2Dj0pYi&BTNsluoLe&+Pp+q3y2|6J|_I$VTb7?QS&T97XAblK1a)fCPqe z`{9M;clvC_8X#QS0y3^g>#9%#;)gPjE!6++EJGMv=tVvc`~K-%*6;>(AxOow~`-R27N(pYtUQ^s=krklre1- zR_pN-Ti>JvT6ivQy0n9m3i4VdptDEupmm|KYx8FmuJ?k**~v^+VDRQHx1~3Bi?G>U zAp6xj3b-CD03{k5CimTA#!3#`Q<8aiyy>OeOL7d z{sj#w{&}GJq#U(r=hDngiD{}I3azr(f{Y_Fq54NJH|vXlEGS1!pb%!?!DMTwEQCllEWTItOA=x18a4A$UZTOO4Xpe2FMQ5x z&U<3GV=_9hKV+p)etF`*xfB=$#u8(^thGm z0A*tlk+83uK79(daOM@^v>P3lX}{r(t+U!azkul#P-aStoCZYz@un`hgV--7^x%G)KWW0Rz zW}1v)WiJjt77dvHSk#AOCTSwfxS%cYP<312L1P>$P_wAkHb)JhCrt!DS=tzGZm==* zybF@c_NlZE|6sHp@CxOD#!u_=fOupO{VAhz58&#-#6QYMC3lkB4ONHoCGR3S!{02x z)*yy6yY1N@!uz^w|KNL={YQ~0an0IB>m!ysx@b(h8t))m(1|Poi+8T))GO5QdUgZ( z-2f=|sf&v}7zsC7+j^lw4u@$$I*g?uJRsSXfMy#{Rj&ePt!J!w9c}357cTQE-ge-L zQc3g$=`~sj{Z~@)EOY0KM+&(>&Srx0%bAQhk=zD?+F{Hspgp^s1&l&E99%;mIz&FUB3d^OEZou3KzS`XwGJl@sb!mbZ{yGuE`sD&Ug}31 zywscS;84X8!Q~6l(oG%Wq1~V2a_x(XLX=(DrJh2?)K!$A;e9Uo@9mb$6eu~cS;(6V zD|~(u`FU+wBXg5()*p3O1U_2tDkJ7H5tMF5#;5wwDUVhbks#DG{CBrd^#HoRzvLIK|=8 zg2Thbher1tmRxQ}Mc1a(?Nklh;Xh@(X^(-h>mB_p;8mu&qVz~oNHS1YfJ1FD{2m;Uf1Ae3YxpHSLb7F>!G z)Xaf+jr_P^xb<;?s~!+)>HsRPXO>r7KLIkHWgyc~eRH4Z*u}j99uUgnK>k`k+M)fb zRa4n8>&|WiuDi}Q&pe<`6M}wh5GU$L6lgtWgZu0yD?^vtY`!}PR9_K<&2Qr7%e@CB zg`|H8p0+6{3TUc9Kg!Wm@;g6EFM&%$QezfC(+4&0OL_yvG-go8XPTw5KWH~5!v|z* zccpYuQkg@^6n@9hj&B8{P4Ua$J=Ry&9xoVOcYAADYD9u_p^KvIc)e(jq+S#mzX6F6 zk<^PGmDG!dx!l=I^8EBiz39zpMJF96>P53R|D58Hvh`BeRWqqZO3dY7ncvLRVMfpA zTMm?fk@uz|@lm|6Yldbb5E~`s!Tus{_*P8vYRefghFkuRR@Aw>2WJR@^P31VuhV>% zAuq;^p<@@rufFmsXRG$y+)}+qJ*VT*9A~f7o2KIM+0J{Wth8`cwmaUZNm4laGm!go zL2--!*sa?04nX)dLQ*)IyJUWu*VOsBUx3`B2{MCI3eFBri37^wa!~Z_#|{au%6T5{ z1px<_aW+&h{gQB_70Bgi7dQVRxMMyF3QFZb6`Gp_nVXvg9@Gc&UMA?+nmTaE&k4t= zET|$d=iSYC`sFeZcP&P$N_;@Y2~N6$P0ib$G&M5;TX_$#_<<{a@vc_@yT!$^*6YM2VID34S6h>YXL3teujNPiF7OZ9e zviwmmar^bdncKR(_w7~HJ}fUz zM(bDHo55exQ0Arz3bwP-4n=hWmW~woglX6U&xfDfcwiZy2T|z(_TfL**hd@#6cu0Z zSeV~`nlH03U=9vuZ#HrACbfX(cWm&Z)`xWYzCG*{2Kw3WWQk7)O>E>1vPjJMu64sOUQxXX`fe=SFCgDRLiF+p?G z6rG^Tq=%z7qrkjI2sXK)!ykm9y!<~(Ky+8(dgeJUs6WKbNgc#tHIWBfe02^y4n)m}F1hI5A$whg zE1;$Atq4OI>%H&IO?}r&qE8XFYF|oNfBDzzZ7svCAB$c_w17;(Qt3tvhe-VFCrRz- ze5|v@K%*nBu&=j(zla{^7t~)QsU5XQO!`&`{>9+TUPo1(=xWlguLfqqIMaMIgxVc< zwoigGQa=;l?zg|PN=#_P!TcakBB9o|j!8Ul(?b&SAJu+e{`&scNaQ@+^FYJclJWyy ziLV&Fg+z7^#wC<1k&v?xEL+a(4lF;jo5M!l1W9PI*Z#LP>1Sl624sR6d)4{J0i~K#qGbm#&4y9%|#GDJxzjwD6 zvZgOTO-rSJ2t|@r*t9Yihykgfy`z78Mm9>`lpNRSpe!$azkwfpzsni96YEcGT-N5b z)F9UP*v%(*0^;h9NWT&iCy{A~q-1nHscf!_Tn6&ylBp|&h{!BNB-YBM`%B7^CoOZA zS&#V4DLamA-G>6=n?$3tuT#}OHVqd|6TFqyum3rO{$o#T^MNNdy>RxAB?;ah9xw6Thk|_jS=_^GW&#vE<3Z8+)|qaBsKw&ohgxLbE$T>Kn+O6v z@E{<6=H6eH&)oZo|3_T+r>H0I2snnrLc{C6r~xKR#WB<6BC}`PS{XKWfZfop_eG{P z?z6&v19R5qS!u^rL8Z-%G0&n96rPlTxxL*5z4G2iVb_3?E-6c-$P*yX;9PDe^~SPj zt;@Hc&0t&e=-4W4r1))OzjSjk5SC_1>PCYbV%GULh&6C*g%&`}E;C=$#_LA&Jfv|3ET6N^wRM1?BQjzmL?qOv;*=w!pf&97ylrwb;8Zvd` zKrs+mS&qqfC(Th)?S;P|EeAEcg3N*`c`q66r_O`iSA=}DVE$}};;8!{LlYc+n&C)t zogF7^L`mp-4SfgB=zuTx@+V{(PsZ?|R`V=icl@Qb#y2*}7*;I+xNv{5{ieo%Eqiz& zdBDkK!Kw$ZythXJ1U{n^mhjpf{S+fV1cxoKRfrVqdD(J%F{{jR27m=44>EUk*9i^> z51#;FgtGv}2}5z@SG8A_826}T*`2^EBQWkXt~k~fwBhGYb4d} z(KfDj<1mULIG|$YwP$YN$vsmyh{pG~T~ZQ!g;aiBh1_koPUcQJ3E2qW#^H9UR*9py z%RgLD=uT4M96+I^me^_XGxzN~y^Mi6hYi{$Q+=(x=s@bl?~2>T`6muryoDae+7W%VF(#k=0br%sWceFL|b1}(?gC4wE9Dn|!JJa?!cKX0DI#;LbO}C$v%$bY3lbm@jM?mD`fvvt!eab!Hb5UK&>~ zlCWFigVc&rU%XJ8e{9PX7Rsa!$55NbqTLoeR@wIaf&0((MW5bW2+efp-{-L)ced6i zNlwzPDwV+A&w)R)0|Q4Ekq$Q<)fvN$8)zz_Z&na=4`@-Oru(G@(tq>R=r;b@zPlm^ zqt2mR71w@bN8gYRb*PZUbpcY5wPk1E!T_CNwi*mi{F@q|$y=q_QWvRhwx6(Eo z$%>?QwMY2 zgf3!;5*YphnSwP^Yd>U6_#}Cik76YCKN79y8j@1cI~g?1RZk+9;Uf#4OG`zIW2Oo` zkHkj+LC_9L8Et9RE>=Kj5P*W#iV@H9T76IMDA?+^AMHnxQT$YdCWjt5P>zU7N2=#n zqWD@KWPE0N?u)tw*ja~V&LyC?UJ)lG$-{hmO1@6o-L9l8CQjsh0h+=rf4Wsv^4ixA zwrvqkt}eX`O0!K`gQ_Dzr62=pRJ?}^M-7VNfUyXGU3R%qY8Hv40uM*tpu`-nq#kM- zRPY7jQd5u@Rd*fquNJ|QE*@~!HY+^~Y*zZ^dlqojSXdCp@cvb;WJx^W>e!!~wdkUN zTmxFv_edAD(|ticWw{Pe7mHx&;qRsLylH~M@SlYm2Xa zk7D8v35H38_rChw^^qZhU5w#MoN#MCjxsD2PZ7Mn+7E`)%q>?R* zQkF!8C@TTAhKV*PbI#%hze@u=$rd?_U?tVg@1ms*5IVbXLQAtj`-f12+sbb|iyTjknZ&I6lylTJDC=c+8Ok_`-kPA!73$EZyJOcBuMK#XrB#;b00U(~ zw_Tmf<{e}L4Xtm^TYI!^m4IzGmSz|di;or-WGkT@n3ZGqEVUJg$eze;kIK@U-vES9 zaSg;fat1R#a6oI{-4$=W3a)7QgI@+6)_I!-THc;;l!#2Y2$2z#pnU5edr5Zb7NdjCThi^hC;FS8|+pku51wu!SIC6$VO{qMD1 zb>gmfu_0iN_oimMv@c6|SRf0>j=Sc^U2v2p28Kvap8(v=-d=Y1`S*YYGDO&lf(v2J z)fd8aQH)oCn)!D-%gn#q4sePgg5o6$wVN7TwVQ5B@2-?+xPK7RA6UJd2in8yMuB+b z3;L5FkK%|VZ2Lrv6VLw^1uh!&U8I;d)gP!1c`$|0=Ia*R2G|^w8F?SmoSBuNIrG_X zfN|V_n8N0#rRmVEoRSRRXbuQgHM6;SAVez%s1Fc=D+6Vng0(={eoPw64d;DI2Uz`WaQE1G?k004zexheTiwBIYJn(8B9TG~60?Ly9YoqWt z!4LX+q~{q4LDQH;$b{(H6jiN8XQ1|v!XyK?b?LjuqmyK;PjChZwDU43e%`u9;7l?L~-6J?VbaNhvFz@R?I6~rUg|Ua$ zlZ(?+nccuhL+lY9N_G4{PXMxl!wpt<{ zc7cqQ^`Y|0)?Uclq}yu85Et*Vqq-Dp)LrK1$L5RAgwf3VdKRlt@0I~UWq&k~7c;?~ zmR!U!+eajv84uqiLAu2B%9h=Bo>Q3#Ro|xkn*ZKmrBVrK*!uB5 zAF5B%&4cnMILrvGst*Ys+@Zo{OBuSUkD`>_)3;*+QMBWWGy78A8uk$yx;h4)d@N+( z63uFzgD~&|JIDyb!SBq}7W;;@fXh=m#!g(_Mt}XYS^uXWTs#s6J_%&1e}D2Tf3^C@ zdq+spi}W%bv_)zTc^lZ;xq4+gM;1;ytftBt3m|?tu7bUw5dsA5Zle3rha|$r1vtn19D{@aA|XExlf~yodsU?4yRf z(PL|hcR8y0M_2KWtTo6Rjhs@nU24!pY|i|ldhCf->R47&8HWe3t(;LO3XUV8SN8LZ#Ulv~+g>xpAOmK>bT zSar1>NUnu2r^>jX_Gi+wr91s_*ujQ*?dlB+o6Hev)D*OXoU_}XPhA`8pLi7MvL>!j zZasDDjDu!onwo>a8O8~lPsf2RU3!>rsG?vgUs5QVGWxAhG;LWvVqHE!po&<}C9{aZ z>UUq}Tt3W6A6f|}=UCVZovb5S!EzCc?zcx*E+EYCECG^yl~2?ktoQwt^}?zAce621 z#QHE|J^Pp0j6&mXAo&-9E$dOy+_clbcqAbui1PtecPC5Dr_K%jIEi?tvzCg)K|8;e z6Wg;3sK-6v$Z@jYmO-EJ6J5ypxR$^)WKm=irC%OshE>>LJ{c$EC@JbOm=W?0&O)um&{1hpYq*JU@W8q$af5`CVySoDfwnexg=X^ue>n-!to6e>q?4ewWfjq zSu>a<4HO3!NUB3!>inl+-Kkzf(IF%^`IucECLL$XEu5tPC(M8BmRpG}#vlaT(lBb&O@$o0E?qh#6| zj#(Uy~wF+mA874P(FFCMN zBC)>r7VK^7Q>Gdd^4P)N*i$mqgEZ?8 zY+!eM4zZcm>EX0r8Rc}lRdeV5x7ZT)Ip#dXzM^|h0E?5pSO-kBMh+jM$3B)hqeHV) zX2W#8+@vns85id#_9YRhE+D*% z3TjxEJZYECWE6CJiE1eULC$ybwK77Denb)ckxP05sk95M5qHue7Y-=iYTW(7OKGDj zZ^s`wAkwpB6`q6Hr>&W|gI$=*rIlFUi??K<F5>I^uYSwx?tLP}mEL_E-t+#Rk+O2vCXY5OI?K+*sZ0eQXDjf!=Lqb~h`@)Rt|07ugfj!zr= zFVk|yr#<*D(<-U{GEeo}Y7c)~?bBD^R$IWDSS^bIvi*Oowr2bi^cmTrWm|2^jVJpl z(XVSsc3bu-9&RUTbGFSh8kX9azDk79)O_RdW=iy%1qdNN{qT)f_c_~|JjW46Ee78>;S!0fG{J z?Z|cMitNpUe%xuG>=B*E4~=wKj^rL6tQ1Dm%73cO4~F`EqQbRFCl&-({Fqyde-&yfW_*=#6cN3L$WitV4>@;0u2p^6HwJe&7PnAH)v2w<)o7g!FbN!#~wv}v^oDtPX$49r1h6;oc{Ca zpAcoD;&rOs{|xWnpuN(04H1+w0sRwi*}T8@^-gfA?);zhBvq?hr4_Hi6BVz&puS(E z>rk8+`}4$zKk?Mi(^M%QHi7s4U*z&9BpI<-TFLq=>Z_2BjYIV2N&9}Ezzd(Kf>rt# zdh`kDUO|0P^ZwUT`_=wG`)vM&@`C^2ejL;I21zPjJDtACp7!T{%=`w$%=-rAO!SpZ z;C(;wl!5w6oeckw%Xr_R3CQ4IAQc3ikdDwnP^A>gLUS~B>5ZMOe8l=v?duQUH4zd@(}{$&3j34O0{A45h3_+LeJ3%-ioMHN#p7?jztVZ-k* z{$mQ@5JeA)T)%Fkqfun&+GryuhqaqFM$^{@tqFBB`dgi>5q-=0c+_dbG@`HB6uD`$ zqtTSvA(D>~Ju);pI&|~0sGv3LH?DIuvb3>cN`H*#5uuwmO8c0Ibg+}N!}MS$o~7f8 zRV(dHf}%EUvA3|AzSEF3#dvC-P*Z8!k^a=(ZAY8R`|)CNaeHb1o>cMa{?w!Wsby`sP3QXe6!z~a z5?>JKiA%)g;%afNIA2^Ut`MIU*NF?oW#TIFd2zkCKr9efifhD|#AkT@iM#rf5V_iZ zyzWhT;+yiMemuWP*mR*EKiZFHHl1lc)Q_KNs_DmtZG3T}l((Gz)C2wa@qYYB(T)Kt}$({#mQx@2>l9HvJ( z!4-8SkZi68eEa!bVG{aR7BILXr;H#I3_Yggv;MEjuC2R`>Ixr8Gt#joIf-*|5(0=2 zLK6~_5NL~oO%z{b6?!R^VZ%&(VXjJ2o*uf7;s2wdvRZ9kuV2>}4d>B{*|h2XzLl0?xNLLiuL|uF1jtBh_4qG z7xaqYSwn9?GO@Pq8jkDV$-ku0vOBuVT*z3b3D+!=nGD@mfh-0DX+lb`mzoTdTCAqn zb(u_85U>IuPj5Shc+GJ`yyN&8Ih?Ol40qnPmZ#hLqQmeN!}4Xt+VJr0IJ=z)kv0$r zu=ruNhxIbStBI9ZqCE0ijKxaf>G&C^>x5?Z6yV~D23&D`39=IB>c$?7PWl8JtUC^x z%udE4Z#D=>-UyO5Q^R1DQ|u9kr|FapEM04+0#D_7ZgFB@7G=Sk#ClENfUX+4#Z zgfvhUlBoFHGbHB@BVL78suGLpDdlCc`hXS#+AL|OrNm)8LCO+Jyh!rSG8(uHBdiCr zi$FUf_mq!murtJmOoT zkl6~)2(z3K{k{T(*+%mOZqw3xl7$#uSIDg2gBt!mlu17XBAPwPE2lc_$(u z9W)r`+@%HDRlbWTC6Rl(wOJe+V3JkdA7B_zzDFoVGUnWH8OKgaIeTfkH?5ZvNyPV! zWiX){aGfm)&izV)?zpuNt)u3 zno?*530%S9u@TwvlCtCNqmGvhcRZ^4%^~$(cv_YQ``ZTP|I;#AQtk ziqFZZ>HOu{YVAsKvO2?Rl12XU24|*@49BbZR!qsreWd> z-t~4s%+D6{m7-Rt&E>Dwrb}A2Rw+I=#dME>GGpEha2&56 zSA2roGV9mFLsg#ueUgD6ow^?0cPPTAZOd}E*=?L)%UZKd*I>4>tef5N2DatJ_e>vc zS*wPfds)Dv(cFUwfu^S~*$ZsT-WLv7jmyK{cf07V5hR%rkG)LU`oSu zmfQM`(VW>8bd1PpS~SpHz;kuvbzIx(F7C*`M(Hw|TL2IM>^auAn6qb52>7a2E|sda ziP=25jV)Pbm(^QF{raTU0jIDA{qgtiS*xzMC#-H4k`2}`hgs9MIyA)E_}Q`?@aBrs zf_~A~9k=Lh$14l4Z2Bz#2~NCZs7_t2GW10gOh8ltb;=;9ZDY=A7_4j2H6t*~s+F6-p?3p`8|U* z-L1Enu?j}kAv5zXds!NUJIg5sQ7~OL%8p8CLCHAXwqXBh%G!dWsl)9B)&#G#JgWFR z2Ssc;6_C|7X2A)4IB0e%KZ%u9o|?-SwaF>brDP|W&rj0erBbz8nqzZ1L`q+9AhGrK zOt^iFf-;z=*WLCFc8c1~CRV^>nmtt84JN-SD#w2$3q`%>ovQ| zqJ5>bumowyI{La0J!#a<4)~rqmhFa&X&4JDi=(zs^gMf!En92RpR#}s(1wR1^aR6J z=ZY&aBlV>x3@W;Lh3xBacjD?RN?&2m(1UqQT+d}Us0(!-jL`hr$$dk}V2@r%jCg5oj zAwrVJ#P5D+y#aurf`gBN-a&#{NkCB<24g-zC`gF|eG&nT4R}}zB+%OT3Pi>S@n4M~ zWr08o;=?$Csz8K9OzD6ILO=$f{wxhdAPNw&h}gD~kljf_HYyuAFIlIG>LIPm^ zLADKx@C(L-{I^FdNTI`G2{dExHw)eSHA45HPzuw2H73O$fH?;wu9JfYCHo<5Ho%&3 zepo9-9!z5Vp7Mxr-4PhRcN^Co>33ZgLyrTg!{j!9Y4>TM8|2`e5cz&>m;mm$0GooC z3qY@@#UFb>o54j7MfoXtjxk~0QAs|kgKd$98Z&2|p+^^H@J)NkHdg z+awXK=9tv>(ATLxemAO*_cKb>$9GbFTxxq*lO_1Afb&G4#t#sDo-AWk@<+CgoGN>M z57qXBc&eeN3NNpiej8k`HB%VYep_v!d# zn)UWFeqJp1asCAVHvbO)u2k?On#)I1DHyzjgbU@JjFu{%5@!d=lkC-45Unxd8rQ;> z7lY^d*m!SWFc2IJJbe+TU6fCLzO+0&{T;?a;g`aT5o#vN5f6usBBG0#K`H-WeXCUB z=%ko*(qu7I;4wvwE*c&vCq3U!mBqtz3Idecgnt&1wZQ}dnF_Efk9)c-ltA=if~E=y z3Q16e1S;bFjH0frmk$x)5CUJQ)i8Yz*|X1E<|)if9*9XEG}Mwbym zkc4NB;BRNm^0`uQr}0wgZeC^5)MxKvgB+EmU6yOB&}k96yVz%Y1#MSpPgd|~Lv&`C zNk;*4zpqN>%R7p>jAFQS;rIO>#u>k&0B+z{Y0;wCFP2169%0)A=NcUm;o%qL-E-c# z$n$>by|9s`LxGcc)?%}bSP!BsN@q9_<{f~%SVoyYpjiE#ZPSwI7-T#+OY04Z3!zxy zwX%1*#((Gu)nySx%P&R=90OZr(OpIJ_=1>~P{etME|1*+IH*e8pO4;A;>4=;^_~~X zbfglSCmrDBcQ)bUO}4YSbu#xfyF24ll$n>zBjF@hc!MMj`-2|)Fbk!eG3IqHI`^UK zxJQ)Zpve|wImXHSrsf@WO6!`M-!BIEqC5x%x3#>pGc#}-?{|5MT%J<6=kkBDP@uSy z3g)WYHG(BAdXlJB1cH_R5>Zal38tr^9uBIiBmxZz1vMEugw;foiw1SehAQKmm?w4M z+&4CHRY}h&6XMJ?HBSb^_~54RQRoXzWuPRTepdEClYJ2D+aa&ZmKXA$2xC0D#kKvW zsU&<(>hb%SKoNqwqow`hVOj}*wqZZY-4GD7L^sDhzpw>IFB8j;%Kk`!T#=SY-1a37 zYo3twjzZGdthj^ow1R(%8|SWfS_xJhC5)u-6<_kI<~<)23jQp(J(DzJ+utj z5N}{t2EtzNKvuZmCI9MWQ2gV*Mol{FLBQz7jWD#E}s z1*09Qtu)n37C$ptP?{DwuVlod&Mxt#h>}s#xVJxq&5LfO-5zrW1*ApsWhoAsdGZoW z`qx*{_VoEzVM{NGHrz)U+~SSo77E|yE0{(9E0~OL2palpGWQ%I*Ni}gDmJh$Ha#w3 zJ2l|6lJOsrAjoOqb&-g_DWe}=r>}345!Fk+YT-kWvqg0}syc~#4Ds!jTWZ?FE3cPJ zz7Q|9QrOC2=B>?*Av|qKoMdsG#TH<@6;{O3<00lZwg7yUGD?N9(4J1&d5($2q!d-7 zBE$=nMavoV_7HX6+ra;_iLDJMM1*O~ojQ^HzcsuGKG#gA3{=33^RIpU3uZu73 z(418|XNxtw(>!?W+D(?F2APB%G7xW;Gg}+a5ZjhB>w)}hvcWB}f6E5cuGv)2DgBUwY5nZC@aDMx# z@hB;=qY@DGz;=jOFx(^tACVV%PhLIA-zka1ls&0a6cxJJ7sl@o@;^y(D)nDL@AAf? zT}0k=Qt{yCR_Z6g%>${kbh8U@?hBUp?nNm+kEcj<6gC#L0Xg=bKlV`Qn2ZPyhX|yo zLXQ^m=CZs|@#aumio0L+Y|5cv8ax`80-Is&v~@4>_xT4N(1g$TsmuzuvjXX25>Nw>4<&K5c&yPdb(h+{?`xnzzR~fac!=))>Z`hSYrA#tt$S~+issJ= z@k5^zol$Y4UC4i9(U9+I2XN*ehc7Q;+*hb~xGft)Vi;&k6 zM!Y^4@R=Y;2f`qkOkYY6xJXEQl%elq;6Ok)sB}VU4#rLvBSyfqN7Yq)Ic}Dma{3sP6-`lGT*{ZIu043(D`A7Nc zQ&GuP*H-V1-PipvW-_Uy`}y2sF6${VIEU((0{3cB%3v zP37S@zU~dY{z41P)!1PXtu9r?Me#f?;t{VQEx)~FJetwZGIJ7By@bd}Bs2>0b>npR zhY=Cs%uQ+e5Uqh#3O}3E&yykT*#zYH&zgrwaSMHHC_rEPC82+NrZ_N!tasrc;2yRpCOpV?S<5-&q2P z+iOB}aOg5PxFx!D7U*CPUTl-2(d{7AlYZVP5|LyKy2qYfG|by)GS5>oH+CNYz|;M~l;)7=@G2fJt<#PZ@UBf8t*eo=%?)Cd>dQ)}Y(Y3O|fz2UI< z*MeHRn{ZHIlQe=MYiREb_o$Uy;U`N4`i4sN&&Vm5=#~wRCun-@8=-Ym3zp0oO~%8a z?Vq6uE%U@IXz_07|G4VX-I#X(8tqX(N5g0Wel{884-BgvZk~6zv$(^}*Ueuj3jeb8 zA9etgXa6$#@lCN83P7$nUno`9$~oS9Xdk(geUz=tm-DMtwZ9a2AE_|GxAwb2wz4d8 zPpY|cQC5DFe@qnR_hNQFCnT(VAvZ&zJXtB=HU`yJL?KsPf^87sRn}nt5!KRU>2a<+maXJOxw^6{5J9N* z-FuT_W%Z2Q_XPLsk5cvh!#nt6fnb-qSdAulA<(yo~FN*h9mqd9^qFs3O2J;NDEwy-t zZb^nk;;@LxDq52u>W2>?=xw*!I>x6a^=L>$-Dr3?!wRAxb1Jj@!E~mN-S1{ zwcjfoBnLM!Df3>Cv#i?!{by2Wrj0QG-z^LkZ53{!s&N3B!Gza?xpoSg$2-#&A0v4T z;2I-(U+*+XIBQa8u(}8tmp$=BhN{`?ED*Jn`U6WTFrH~Wo(;_PHdy0%RD{M(l60keP6EGx);*l$~m=2pUJfg<%Fb><%M8rJHN{$&omHCQj29YeD z0E8oPU+u@Sz=<@?M`Gk~W({Hkb2#k}^+GKt;afg6ra4W1uFI~Tn#pj^l#nbvG3Q+H zB<46h4TJoewAnHtg^^ep2aFZ^*U9atEWl>zaPd*Kb?1;_9uk(GyqT5{LzAB zjG?oTlfDgY`0S!bU__<}0!@?W6~%a1hw}n!xOpW|!D+TJ9?` zP@}{^%@P;z^CA-8J)(QPOqX!LS1hnYoOdWawE=iu@xeS2%4L(5RFcs+mb;urav7V# z@so4!@;Bs6F>9I1U779<(w^bQ4^IB++9lW${VFu34cK%?+NevI3)j`WE)P7TN{)O=m2LO-5@K|#w#q79~QqZ ze2XFqLcZKQBJP6t2}7G@_eZUf9K(_PR`Wgy@-B~7Xo$q;juB@;M?Ss_`Bc*4g-sXTY4 zwO%0Mmc};?-4@(9KxCdV-k{R%PS@TnJ86%L%dUc6`up~1+il}LTz1V>iE%;b##@uf z?toaJ19thP1A0A)T_Af$jdv_K-nEeLGRjauev5CaUgd1}OtylQgSX*GL{(olsgdB^ zY3>mzEkW*8p_HW06?=@T(s&fu<7kjQzGfGo`5dSD)F*g;Aw z*yrzR3l}eg9sW;bH4VtZ!Ip!+2K29f{R=nN7Wg%!;qj|+$aD^Vb$dI#Det!YJ0Snw zl7E-w-?aSOFaHMQ-v#+MBmeezQ^}MBF_wA06H0FPX1(3s+unWe9q(OlulKPewAo7y za~+M|R2`bHW~2FfPiwvw5Z7z17X*yvLS33KeI`R%l9#PN)eL~1{cf~UxAMye!_t4T zrmK>x-c%YV`TJge1>Y%km)1tD$QPuE0>u()j|Nv(b4#eic$8nrl?I<2hu`l*B4{{J zQ!|K_E`XJvPNx>S@e7G6_`I&*(kOv==IGWG7Xgg7xKK}`U3`FdhnzIuC7CXdOa>k{FQjmnfe^3`3aMJA2{ zmiHmc=-3UYN4_72MvRWnLNjlQshhL1qW5NI-(WS^*FAh4q6R~*Koa&SsKH{O0lTP_ zTX1rQzmoBof4B4kTTuADQG87IW5RIhh&f~LfM)_bPLUVaMt2HxB8y9cw3z3 zHs5o**Wo;O_@1}=o;$rx=ef)Gyv^I@Ja_w^d%Pa!dAqmWdEViB_UGRzpShcQc{4sD zqM)7soN$=&T_frc#b#t9#30JjyDibJkJ#CZ%(+;v;xv=?8XZu~>z~FAHZq0qw zRd~l0#}ZeCu`LPAoSDo#y8~ zR1KzKHv4UgD@P#}5O3CqV-r2npaMhJfSNo{&789|bCO3y1I(N$oH-4411{Jzr@=et z%7z)?drLE33J?)rI~u(6(|{nUQjAmx>Ek#I61(qt33CqH*zT58$*tkZsqkbkJUQVe zvs96K-W{qxX3VWA6LY6bto|tz^G_Kf)D4m#Kys%{#(w=-p^@!$5V=DuLA~q_yiC9{ zNp4lkR;FK=Hkyw80?&cv9EJJToT8;-VedEZz%ak@O3%)$MAK9zJ}@RYVuFu>ssNn%Ub@)VSlQV|J(-h4>I8=Y$p6=D`1ur&;EVnP94Hekc&4W z4Y2R4vy#iaUe0A7YAHc9u_W+*DPI&V;)>?buNoe`v`R3g*Z?QNx$FWwoFwLdu}~_( zsXS*{$Q80r`L`n}kdQ#)$B^jDE|o;z0vtTUr|4TQt(7a{SRefoeJlCmnk>!V6>($q zV>4nVTU{$d_FLsVe9bP)Lh$3A+=3J{Flmjx@0E)1HM53aBrl;%Gb3)~=5s4^QZ7uF z9?_4?e6BUBH#yunhyL@g;mS%F#%e1l=&r2s%1bmEAJz!aS3b3iYs z>hc60Z%0VGgY?&Hyb9ZMlTt3FwDQhtRO+~9-m+y{OP%>zRlY4Y8wtdfG~7QbER8A@ zXjA$nET9+_EMRk-T|zfbZON2fvJ=sOKC*pU=QhfDU@P?dal#lCMy(DCxX+Cv6CJtA z-QK}=3Eb1M`RuBQ7w5|2Y6Q6_M=9+Q|Gq0i39)#*8N2;`VVKqwG<~b7S20eQF(s&S ziN~q+%5?a-5oj2c`dfk;W@omh1ac7tVOZ+=AR_@EU#AogjIGtz9Zlwt|)w``2#~NPXPJvnX zjibDUZSB_>zAX%7#PG(3koT_#dB5GTx&}&1s1uV=f199l6GPGKX>YJ9r2EO$Gqd-3F3MO zhcnOj!P}GGDettDAkKQ{yz|}#@1l3f8}cqo;h|aO`#H!r>|HTS{4(|W5V7o+h#$R3 z4EhCP$vyLB#qUiyGU*7iAI=9xzbP}TNUyzUtL?sQ9?;p4Id_H9^5tXqlW%pYx`~U zSTM1zaWZfpxN^y?lL2tPR16Uw{365Z+8kPW;)gy^SePGLpo0Zg@vr0-^4X#4^4iK= zF)R6HvR%zqCA2wY<^g6And zGhc$SBn6LEft@V7^#q>Lu!xgiSrXN1!8sp-!;)g|Np&VaSAZ$-<}&BcHc-*;uvGMt z%r&ED2lGTRrF##DkPc68NavZo4_DTIFDvUCL$vT{3gP0n-5Yj&QEmcEg-^sUab z(b6}vmcHG2?(nuc&z)YE(t>XzMy}cbCOi9u;`{YGWN4^iyU~PoAWn?J9z^>xnYem;tX!HEu;)Xc()I&`f>vz* zDn@|zA)o;UwBH6~c<%u$@?%`&Ks`kcVv$E&`Rhg=Y;1$YrJ+02Mwto%AId!!T-act~`!UViFX2#K zYds@ir(LSgT*x?Cy=?tM4}d)T=aCEbn+looufp9+#(py#xhyGJ|MggM6bme7xtuGA zYysWvs>~@@)>c+P^g?q zQ9BZzpNC%<)#&nf&?7-+~0}XZ215K z>azhE)_5-#`3GF2zy2bhjs|)54T_9&k^N3T?AQG;Ks;R3=IlS?*Ci|NEb0z+hWVBb zizA`IJ!o+)G4Fscj~+vpYx&|!`SJacjmMODqMsDLc|}Itr~PjXwWxPKU)WclMaNF zJ_y5gKsaUb@G;5HS`ctOPvOd!z#?C#MzTMfeG<`0E7v>Vo$me6b@+?ffgD=&nv5X_ zt2!;nyqyU!Z*2MB=$%F8O|ef~Ear{ar_(Z3O*dwr&T01P-~K1$)i=pLo!9Ksvco^pLz(tW%Fbf?^PmG>ze$GkL}48i=`@+*c>nB&{nGQgR?1+-ka*o!EuV z{sordAymyCUv5-*nN8KWoGD}FzG;n<*IiSmV&~n9m3A_3(x0X@qf?1^`vUxc(pvRf zZ=oTR5u1Bb+SUQ90ipci0b+uPSwS`|#(-L#%{S)SG&^dxqrN^>EW~;cT>a@W9|Xlh z9A5{*2?xRnAB5pLAoNeT9cn>v*}ZFjra5}Qwx<<`G^0l_$Px_J(&sdKC&`MvVM=ZD zU;H{PgHvh6y}bSPSK0Va>y1Cp8~-qF{P|6W(6fTRy=?uHCII*B`=ev85Jt~}#G&*! zeqCjGZE;aaiO%5|1<=zgE&C6cTSts)jWj{(gA0v(wU4H z6oJO6wuzbLY&o~USTE(OlX7P-fZ`)79+e7fk~>(dHf78ypZh$`>@J_&rp=`^vfbT>cTLjA%sPo}T1TO}XO2*mAZgS-5g;2|7@Y28IpP9GL6_ z&f!E5%B#>&6^zNa@CI`^-^Q{C5%MA{Dn?q~c^a38g&zY*b3! z7W9cS?xL`HaEP`PvN@2uIefclA*pyK^Ss@K0){c{ClqE+Etoxl;vq1%hr--m3+DDfaXW<4 zj`hMk?(}cs8-{t@^`%B2`77Bn3^Jwd)-HB2Ny;F|)Qb2j?Dudii}px;XqyxrKk%F_ zJaJC%U6gJ4UTllpHsRq1_+cMB{0Kknhll@$9|qvz=lP)<9)6i04#2}dHv^JHOZU2~7T~KY0+7 zf5G)aKZ%Jy;wGNL#J}w(p2oz_xQS;lamim5=>(?y$>%Wnl0W%8CinZ3FJLm7&w3XR zK>O8jAJY+a>G`94M^;w<7_vMGo5Wgki_LFEjAf-nFY z)Hz>ur$VYb>&tWA_k6+ke3>aE&+s?^yI(t$#uY?!n1qlMNE_oO!od}*DOZVCGtn%5 zK?MT1rULarev443`df(|05BJvAfp>^Q@vu{ZKp=paDaqSD?q}Ayz~yk zOJCQ#^!r#^Dbe1q%Vo!6S6{YzF#z)H?~0DPJ$9_}rE-2LU(6Ortu-gv=3JShFZ)7r zB4fU$%#SSd}%vgI|T>q8yebAqoSip1YBVwdBJU2X;b^cFL#Ti_wh4{h*ppC8)c;Zyw30T0Xk zuoWK4z~FwnyO2AP*L&h7c46W?Zka~g?QO&4NjGmdCSLI8?ZMmYs@I zJ7vD?iDdurs}9+G#b2^9h(6$37>$KNI*s=aju=eCH`E=`;Y zOq?zvaVl(*IMG!IFI#su0HkNjk%3pBP6Wg#N`N+0>LgdJLsTM`|Rx7Y7@FvhWvQI}89Hr-&0_zBoD-rb17=AJx> zC$GMkKHCbV8-v`Njrc2g z^AX*3M4wZ9QvyOk=@qYI(ibS`dzniZPn>{z2 zLI{dmllLi^tX?MIlM*C`)DU&{M3yPs^b>elMp^dfe5p_>3qXQ?6`-f-XLhYxl30T> zfR5kX%cu&ar4shjLVhU^(GcNh>2VRo9eBvk5lCaNKTDPuCNHUHo5EyUu>dJ_Uz-nHKkBCZ^JQFRXnbP|J+v{!U<6Wg%(TvD>QSl{#Y23>n;{RDeI-5xpTD(WjbhW>l2D4VfW& zB_#U!x+r7txgHXGLy_2LAu$O|S0YjqjrDG=YDF|!YxMWP>yGJx8S*ccbu`teaD}CJ7h;@K2*`U8#W%YqrM^2?`l?F%Ni~S_2jETJq1vkF=kM+rVd~w&C^zO;;w3qRw zV%}Ra!?gU{>GdWDM17GdEGw)T&E6N8y}yj?eX&mVKEPDJY(3Qhz@GiJ=)@*?`~aK~ zqbxfb9P^U_^BiXRQDb8(bpl6BY+9rZeOO2^9N)?sxRr&NTd@@wu=P4kv-OsAFh4Ky z^Rgeah1KP(Vdb=86soDRYpmwVqs0((NkuEPj6Ie*4@0ih;u)1m6*Hzjv#GSP;8G@5 z$beh+POfp4Hm9;pn3%&wURm+BD5#WuW^P91rj6XtWNop4r+AL-7F{&UTrizJ6iek5 zIahq_xcoU2!kLHKdueUpo692qMr$n=S=pAyK*tsZ9UIw}NA-c&N6RT|H3?Yn{8mI? z%;xY5ihwtp;BdtE5)V5;Hc7;4H)FoHOc>{sq~S`n(x!G+zI&B8)d?ON>vk=#(<<`9 zT<+S=+$=!ttO2zPKk4qHai^T-P@N6dez(KsMuEP1yOM{LT1jQyZB>x*tLIG#H0N05B+4X8Un6{gJDE&oQOt$5oZJW*;{vKhP>uAPkqU;c+x&Dq&KKt5= zW?AT2>OVq1=tnn-w%k^1L{!*q6M>cSp$=51sy?c#KBlYwNmFpWdX$NZU)w0Fey^Tk zgW@|K9AVmw*G7MQJ@osuR`TvTvoWP3g3D%-tUs04oqBr}Zggb<7IRh87)wi~e*IHYeUIZ4|{vb`U9I%gKW4`_Csb`xci@!6LnO=SL)s`y#%)q+{j2 z``TN@CdvGeONf6<_`<7=&KeJ=Y&zFrSA*zI$?lJ1%N&=@1f8}$)bYQc4D6t}7}va%6x3^=jR z2f&PN63i%o8FFUM4NKwG=YLa+4BXUBi#rRi%c}Vk!tU2DeUZy+bIva?G?D}R!aA@c zb;4dS>sAkR1I94cjoWC%Z`n8R1o(UEmIVj(-Ow!`Ex#|j=Yg+|3mexlUT+;Wx@ou7 z*mb&TGdif-S_f4^Na~2WRHqKgKF598`ukk~=UIR36Pr*!*&s+YVf*ZXHUteISxMxc z3p=O4ba0Gkj93B!9>JLvs*CV^6f7)r`s|ppvLW?^^}bYuAGh*F3VKBPo-u&(fa`rg zHCE=cg&e*>#nDu$A|5;y51x=dr%)8$LPzE;9*fhq2=P>mR z2r8*KcQ39E2Aa&7L{!*k!p$QY%G*+3UWo4sH;PN5x<%({OJ5;wv)$W*7^o0Ip?)l# zv|r6QJKr|FIjxexTQ5`rNLl-(e%kIws&+p48N>-Gcq=CF0K$*R@8pcVR-s*PMefeA zJ8(VTo>x*<_9r zPHy>mn(X5S1zb>t=TK*85NXWMqT0qRS4ur6XM$u;{-y}lLoNEGSRZ?*?js;Ec;~6J z>Zo>`2!CfIqc0NgQ0}1KC9eBIxS5AqYu3ElM)=KIjk$o0*~OLWb#K4N#gqcU1Wx!; z8Rw;By?QY{lkuUeBw;CKS!RZ6V*hR;IK}#nvo29H=HqY#zD4*7$ceklewLDGuPvr& z;|q)sx}8A|r#YdA6Ru)ti{GdLeWx2DHxta&OSxFuRKb3?>s-SssYfSWb>X-~_p0-B zEuFgE;i?4m7+FulY3pPHssbnMxBS@R(zXQ47K64Mt8QEh_$jBT|KiIZ-AcX6yqtIl*E*x|o?ER`yC4Zs?pdo}1@4Z2r@?%6cx&>{P`!mjd$ z{&iDVc|-rYsS&!Ne?i&>okle1X7Ve}s(+nd$_tt)qnbN9)zHIEqKE1Q(n3hfki+~p zp_L2YgjVX2g#krf)(xRwI#f0l)(K4^onSTu&^_q8ySdG-CO4{wgq6Xl}Fo4Q7 zLJ*$6!p~8D{u4Mt>vjN-^XBcUp=?&=HoY5A?Gm z%tAyR{b=Ulg;KdhZ5}BEO&i<^4Nk{B^cVNlp;coU?ZqFLBBh8)iBkN1j$-C{nb zy5_d==TG{%1v^MKYC242wH`Dh3C;K#ueB*e_AR~;xYfE>SihXEwUHbYCViL#=jsI9 z0x)dV0f+dfIHR+hf2c0WYKVI+A1d$PL_FD|ZOLSB-wvCZGiuhF$rg{t*2#L?i4VU$ zE(fw%^BYNckT`!%1Pf9i{_Pw;T^3YqQ9PNk&f)ALv%Vq?x=4bL<24d-8wq#-RktK0 z4ZM5cXjwZ|igWbx<;t9+$DgCo9n81&)VObm3>-iGBR(6ytE2YRoXvVEqh~h!9#O0| zo(lP*%x=Y(?@V`V=Ey9yt709H)=hSpG~@@NkJ8>{COHo`YGF!%Lu9f$j@0_T87qt! zZ$c!7@Go}OVVyM<${_^=Tt@I?UuagRCW{r;%||&JTZjLQ#}qrKng9P$XsLF+!3k2f z7S9SL=#-VXInSwtl@CpgjA9=)JmwUf2LE<*el)GQ$cxdixHl9qIRNQa-NCbNPFv zM|o7?^0N~!POD}~BRo;eqhH9(N~u&`27Ews=&FPl3)#xD)-YesS68yDH^35ap`3lp zy4uBjp>SPx6X|)E$XM{Ugp#XNZ{$`%u`B^&fZN>7mDTD~jU?)AAqH%Aewkp4HT1W^ z9HN|Ck*znmQEf^p*^^J8qN)6oT*2J9%cv9Pa~h+$`G;aIx0Em5l86cbIg7D%;VV~M zz*N6(wzdKll%}ZE&Caox6>5tgJON#~txff*-Hke#)T{H$x%r2t>)|yva!@?LYr*(t zE(*E}IZjj_FFN6R!2ok;a8N8)tE=#R;n>MzV&-Xuw8X2~xqKmC&F3ltRK5_7*W6k_ zxJ{KyOXXbUP4)v?X~fsHT#AzeA_fdgqExAh2H;xaz_omjb}5cAc}p5L{L6um+URF| z*U;x~yG&HE?kaC1Z_g0nD9+JWQl??R<=GMC*lb7XFp;>n+LU+;aF4jb%1JXz#=M_r zjvEO#n-;wlk#*^M(A$FiM75nC7O~T|8t)4ZUx&%tW~^OW=QmoVZi}aksu;U%foKc9 z?T7&FmoyhZpU=h-$*k6rJAaw3N44S(iFV~GhOd7iwSWp_X3##gXmCzUp zMzgp$B6r!+_8`o1+hFBTAf^PsTcEUqY3q(<%5aE;BAIPx&Gxu?j|4`du@=~)mU&gY z?wlc)8~d}?i|f%EvxeSM48BI53I~VOxbLNLZ(xb2JF4f3WbcmCFDa0p@aYXyXgU^E ze1g(ROY_Vesu5#U55biVMxIfN@Dxfe2ZfpeDXk|ujVt>MUJ~`<#m`;);)@qAZrifU zR;-Z4h7PO;n6h6KHvF?Bvp4DrmL?H|j}rJYVLkg$)Rin`90MC;k2JfAy=kYea}#WN z(xQv`yOHdGEU@taSlyG_mSu_?e4f&^MokF=mc+vsu3?|M`8xcPk#_027??bhZ9;Xq#)RCtE|J?AM&x!5*-m^B@5;0ee&w}?(BLTDrfvdb(e5;?pxUl* zyTjXXNa4XPzrqV8Pc6S60R-^M+^dR&T_Z`2!=HCb$vZ$SDa$C|uG|TC@jBF1?hRwp z1VvrLt|w>;?&^)WRq0I7k}bS*w~;XUGiV!nlZwO~h$M#Fo_zNEi4b6mcp`O+x_lg$ z;%&rX!jH+MhV9)6sXGLAlYZ0^?Am>nW`$3)7H@?UTFI#`|0DyWn82|Q77~uGztZ%y#w9u(x%>vdpY_miD zT9$WKsX)dqH4I&hnTbq3B_E&Kp$g>ZX|bBEfW1YjP=H_wcF+P&U8~ApQ^>3vQx=S^ z4USV?091|=zKm-bVenHVT(@|I0 zt*vAiAW+1D9W25LC*ku{rynUpQ0Ht4{i#n$H-SW9UbThuNRg*(cq2y$0#al98*v8f&E^rJr~QHS0z0gSF)QJhE8N*x~NkKgi$T`VgI$!uc%VHZrFc)mfl(SU!Sl4 z4y@mQZ9b&?d_5B^-m`IWr_FugZSL1??%zzC`@`DY|9Wlif4w&M2ix2q-exje+m9_D zu-fOmKCsSf?y-HF>9KubJ+@D;SbBYMGqARY!8)X0AKnbCLjhP(b#!dT^Vs_1dBkmD zCJ1WRI-q(s2g(>X{ueB7AJr+}$tirF5ff^5**jtZIi9vN@?DGRaXKmO5us&Hq?gz@ z(JHzZ`~HMgr&e!eGJfo3&Ou*mPHNoCKHTl6gN#7R^xdg+i+MPmZvK!j`C{dzcZQFd zU^VRHqj|L&xZ8%h11cSjn%w=)>0`6=daGi0tiS|QdA933=iNND$6OUK3uNQGz6Egp z&tuCv|L3t~owujBtmIQj%`W<=**Br$OPaP_3Zrf74auc2`gZB{c7#i>we88 z@wEP$kN$C~5#0wPo7sa$!rDKg$=}Fk_TZ5)ayFv(^O4Q)86#o)`N-x-V@)FL`tq2}e#EB8|?lOQI2;dO*C-NHJr16_%L0BdoGD(^lkPOAW zgqwPSQ_&dlE0GPmu0KLD_gy=i!N)3)#`Is7jaYJx-}P(j=?+1^_4=I!SHcVGmlI^j z8$=3`rLM(;p-I=bzK%|egmxn8(*H7_Hl1+p)$w&%#%(;|QhP8LHj9T1K7*fA*ug){ z$h{^1rhWF-neYkxDG@gRuF!bPU&q{OT4U%SSIE%4z~la;V9Ql=8X0B(;^ScXfQ?}T zM*Ms`ZKvHQBW8eXpIz3P$B-B9QJ_Gi2iKpLCNuQKyTaC0+>0wWgL{Ecp^A-v2RA?2 zie$SmHrD(2NEgyFI@Ed?+{lJ-&xF7|Be+nU4t=qMp&3iA87j5%U2B5O;Aq4!tY1o> z7+bX>Rkxm_D99xQl`!-@4iZ@m8kc5}kxhe)go3n(9&aLJvlWGU`=;x$hvu@4x-!|m z>|0n=`OrsR`K7SRFNLn^kA)1{>s3A+R{5~0+@=n2b~_oIN$=t3$K6-dS)bs}nxqZb zDfUSdPo_&~f@Vmnnn4|#ZeNGhzVp5rM0J0Qh4OCU2dn|X^?XP#4htaE-UA|JpTZ8w zV#YcAoOcgee^J;F_v`ho)m-aRkAtk)aP=4Fc`vW`ga~&jVdvmeJ^RLNpIw{ub{X<{yJW!IrNq74 z?c2^HrmV_NDbgjloRtaJNF}EmY=I+7E7NTJa2I5MvI(oI5bcS{KD^4~=ll5i5G_Rto^&axBvF>FRN(UOzSk{DzM9o@K$ zVdJ@V6+>!P=d0o$uLI&kV?$fQU6kB3&hVl?tVQipX(UL^YPq(AFIO}GO~FXUe0pm6 zS(URBH`@jOvfHW$z#{lcYF@LNQ$8jBYR%@1*oVEN%*DoV2Ma?NY|h;HT0PwCy|#=- z=sD?jXFm$Kq+_q?m^(gQn zJ=)OtEoF?~KCg}6$_PhYoLjETiO8~odD;5!I{?VDpN~w|?L%ahH#Tc*F{2`SuP%VQ zi!pU_t-r_)N}1r4R~`l2Z|2LTN(C~A)#ZvP$y`93kmf>N!x>CS5A}`7^C)p>F--}o&fw#(|T={W14}ra9Hn_i*Vq^6= zm-@~xXUn5iK^ZI6C9uOnL&pcADvQ0pwgMhRL02DTASf2r%2vFpdHH`y%+JYgSP)AR zi@Cy@D9?$dIWaefmR03!v9ef_dl+~Ey}1@hpJ>C^!4;s)ML#r-DGm0nmLwCUIQ!V( z8=gpS$iR|Z=ad2p$3mv_kn0qJZ-cc(z!(zxfl(V*z4}H(JBKkc? z-mF>P|DGo4sIXe5xQJdvd)Ktxj^I20KOYE8Am;6n zf6DYNLrMKQX&-vh^x!RIl(nDkRd&=J))2Fmzg)$Q4U3C^d~H$w+eL#)cRlU(_9IIZ z^9Ed&Mhbe~f!+We{Qr2~4KQzafJ|{d;AB!=@0GtO=BLNm+$U|?hiNHVmo2`YJvf~T zbIT$~hg7#~P+Scz!x0CYeezeoI%_#>d7QKfod%xsI*cpODO`>N*w86WFpdzxXgn;E z7`6h&bQV3ek{S`E@9>Vsy(_ST9y2@W@sTUkpX8Txw3j*nN9p6jPEy%Y>P*OYaVLy3 zyF=|_x%>n>{yCR({%J>~zRRum*I$O0cH6vPSY}ek z@XetAdeQ&srS4ytuB^9BswpW&&3}Q-JEofFzZId?+I=9BzMc7`>M}}+$Cw{sKRWhX z;_TX+PNK36P>BX6r#-O`O3c*8>Q0TTVaLBYgg?gd$2;uFz zXHEzK_pK469M+bxUn9?-Yis$^>Mhp5&wW7?fj7ZyX;-Ud2xyPt06ysbqV>afVK*cE}>KnPRakC zIHi7zpgJg6@KuLh`NCcy5;|@I3dblNqj-!W^w*uPON4jbus+;UU57l&Ri(SUHj;VX zg&vObZ&dzW4>=F;wO{vU;;?uWp&fq&{;<_!+?ON7pA5?$y z{9&G(oaefoM^5ltRFnKQ9#@7^x2Y7*hB0d;UL|dt+JO{`DId>tM<1OKPkcm;q{6rE z0t)$c3PAp=)?A3g6@u7p-Z*uQcN?0&UUTY+ywhNmW_PvHtb${Et@VNcrCDVYcLwS^ zvR}6Tjcowv*?8`zZvo;w z9m6Z)mi*KO(8bib;(M-Y1we-scC@s;4Qo5&Ev$iJOujZMJm5FjzZ1PywbQEQkjh@G z=$8u4rIuf+@*6eYrJ)yX`y4qb1`sP4ZGTqfUAk&68dR>WfvdI2`BDWZdJ2()mP?lM z@XFj(abd=+Ba^K)pQO#FnpHU?C2Tuqd$3y}*^I+s96Q5_ric8;jypL{5RNlAB zG1a+r-E~W~T!T3!c=Na{IWy0fQR*Mc(~`2zmW=;qWqvukT7}uleT&ID3=xICcibxp z#vI0RhgtUa>H>I#`gOXiYvrZfjL!S!YB5(k@OAxul>ao;kCL^VP%`NR%wY*=NCo); z;S+a`CM%0uT${J0fL+?9ONx+^{xhbO?j&#N+n+8PP z7%74S1#!r}jqQQ0R~#EqT?h_G&3n~GS}WTw{HO9T zMMd(()TkB7vkGxw#5jFDmn}XOsCT{HjIQV01o;m~ z^mcs|f5K1kUzqsQHblj_fz!eiv1Ty3Q^=G-_^Uq-a({PBoNkUI%+~mGcnf&~iPcq$ zk-lT!D5+;%J7k63<3i}&BObgyuc6$<)%1jGz+%?BJ2sY+={wrQG_?-Mdlq88@+tdS zf=_W_#WmSs<8E5M*m11E+@b9A!E(7<=i-3*h+QQaNM?v-ji|a4yma{9fKBkwPy9pQ zA6%UM*5YicvF`jk(Lrk`(pTJA)92w!k_o1C%Z{aeoNJ5Z$)yk%MTKL?R`b>j4EzmI z51_~ffcU(2+6v}ZT@jBX!8zV#8_HN!m^~{Zse_+;_x!JjePR}_E?@_00}CU}D3TtB zL%I#KA5A+L9DM~0RCC_*H^-i@heWX81)I)M1o|0mPB}}5ZZI5R7!NuS@&5{Y#k|c# z23OMop=Ua{pedQ?9USm?reSl zeJ!@}of@A|MvdmqZmapzxEJvC-TK(|gO}VJ?>RQ9^Nh%pVM0)Zz00<$5p_LqU+y`TK!moHz|q1kRTn(YT#vt7k%uC<;L(C^i{%t5tE@MY`g+W^F~ zzF4MiV^Ce%iY5q-?Tn7N8wr-GSd5cE>V>$; zKd}16>^!RE$FhL({6mfu7#9#}T*Xve?MzNn6o6by5-kg3gHaRhck>GWBL9CWl z-!~v+e&vI;Y#HMxQooD2B~$*^bS6FfU@SA4nP$B_gz{6BV}mOyIv({1tAlwYwc=RE za@4l2{LD75qi@ey>j ztC+`)&1l&yv-Pk~8%@e;>wLu3UB9`?>c82HuS1m8c>3Cu6A83ef|H7dY-L_FF3uN3 za#?=-3LEq_#1p)GC*cMe-(j{B#D1#@Oz)agIA__RMVjJ`HHyS*6-mXDb`gD-eG*&P z;&5Fp>6VNw29Ui&w_h-6#T`!>`ENm&Xs=Bf`L_>eo_7eZ18KJz3KCt^-UFZ8(9WRS z3fHRzmiQ#uNMZEd9=0XoExp@y4OPK2cBD}m@9iWk*t!r)(B0m9ltru2ZHF`RU@Fk_YxxwN=l$za_mqPTr>T@+6;im@Ojx;ATxHK!r; zO0vO*cye=HcFM))WDTsM5L1nCv&PT&I&AD+^iS3rXse2iac6&6x5eb1HsU{JJ8RvL zq`ejws#$F^gQ3_YdkV^?W}6AWU|o&&swLZW0K2mhdqQ1wtnf$$a9*hZbQWjL+E16# z+L5q@j6{0f!b2OwAM(#|>*=x$AId%wwToJrn}dsnqUc+aGKRuKap;QWW;{#*siwz6 zyYZ~1nZJZrHeb_6j(P@2@-?8q+OPm*lF>-Dj4={*8P_#L9nZ(x!@-eFI-}LVPvNBD0&AECL<}54){M!WZS*=x-U5y$l~|}@5$xI{ zzBSz(Mtk|X5p*R+(>{Qa&o*Slp3YM85jj$M*t(ItA0l(5Xk(Yx#mQ76sQ6n zP3j@jd1?rQTLIqz7}%ve;9+8c7W>Fj3v<=y<1u}wf*${OxDD<|2N=9bS+{NTYKGT0 zeF&3#T33&@A?UB#WNnq0kn$&-_a|JD3BPlV5;oLi^qU?`YfZ))g1gpwT)^a8t4ouC zLhsAg|2q!FpM9TbuUm_OC5?Q}f-_y72Di7(RG&&ocB6~k(EBvEFvF$S%9!cR6&?R7 zdI!9cx8?z$l*uC^0rG@w9$n zNQfqpI>ML4L6S-g0ir$5*axndTdH35JzB0INa2)%7{4;c%lI;v^iRt`(>< zARryb>qNbQ0Hs$i9QtPX4wUHaUq z&&Dvz70!~fG%qQ*p(3g)BQ-$E&BPJ%WY%piUinB(ybit=UgP!PHE!_gcJcZbq9$Gk zRHf=#^cE8ghm@F68`6ihAswm>DHQ@~xHhDF3KFVnO&%LU9dx$Q(An*p&OT;3dlBjE z<2vc=P01D(@}JJB3&(z`5gs*lg0Iq9V%~f0<73=(_LhnzjA7OqVa2j|TKh;?kTy1QEpIFWueDpI{s#Z%Y+Ao5S zwBSfkH{Ut-BR)OAox2+eg@*BQ>}J=|_gGmWYb+OsH+S0@N^Wx7xK!t*Pi7-YlH=(s zZ6u9qBWVh`;z`o~*_a_?%}Sh)LS&|lCV&l+DCpO1CLk{x`M2wL9mbjuen5*%WC1?J zna*gHv?iu>GbP#Fca!uHbBGOP*se3gol+9N9s0RTKL>CMsB!FicVfBTV5-7@mol^` zxVvrp17DFSMv9MG;nD33eW5k=xiz)oF;!>4 z%Jy3QyVuRvQw#aMVe_Ql&Xj~3l3*s+m>3cTmV+UV1szxHANJQCmPN%r)fWq+P`Wkh zlU2a5s+)@Ygxwe(&D0i#W8Oj4yhHj7*T2>d^A)SLjGfv^?Ry9u)#Hhi6eN;W$jWN* zLmgKf3z&%F{$-8KLc3r5m1Udhz*Wls@S@og43D6gZ8`)mI^J|XZv42ffWO*0v$=2G zXc*tHgE7=7vEGpRZ_u5^izI=JK$0 zUu0^<4t#n`>m3s(UflkC6SukHoXVdUFD9%+@FO%Cb{Z{G@h=w2sb<7|TeiiDQ%gBDew@F6!t2MlC zy#_e74Pjs5j`xVyXfO-8kyJSo;R%>>L6v;!CHFENDa*Dh=8(dNw$bsOlwsvI-;T*Z z-x8vm+0+jCw^gx(QE-U$n-Fxq5{KQTIP7gUhux_SXn!MOD;p>tc#pR|W2f#w=47Xx zi`Xxv20)ysBZ*rg7uJs(MTUgBn{(_*8{q8TNnrO{FJ%6H&c82h2TfN9{;vY90{u z%V|33`YVjmWq&pv8}xgvWwLk$b!DU4x_{X6G&suUERLtaHW6I$*E~IEu4vM5B}y5o zLq}^_)f?^`b0O1yU06lA=UUUM)k_?E5MHS>e!rK&kG|9p%;hi+oZy@5>2aruoS(Ke zpv_K5$?kN$s~!P=(!U-sPLyT0S0~*J&ipF*q^bCOY)buf!Md_Wvvju=pD zX=-W0c-mDlgaQXM%fQLXH!8M{ezC=upo-1g3S5vo9W{p2@gF`~%Anj7ktRBOhs@2*DqT4q1SJfy4yl#m?6N7IR zA;5d4AqYe~HI5CC@Wx+4x$V^BDR0O0dYgSrHR*4-r>xNt(y2*EJK3{=_kL_l1E|j9 zaj%yUBIBKu(NJ;TUDN37+|~-}t7f4xlk;QnNAr!$@d$-~^9T8pd^JZhId}(h1>H ze=hvl3p^HYz)-JT!jlZ)R>=ktl-=0uK*T`<))MWzg3*E%@PStY9#zd~8*=o;oO%EV zl^l?RNp^HT6gGa!ebx(J)q5D_fX|~GcBB^NT;gaDar3epwdubn5kEOz1L!fQz>y6K zxJDeQy!cGqrME{-+m9)Fdz3Eo)Pc5-+VnSdSTq6sEdbGtH$fYIDe5EiEEePENt~Xi zaMZqsg_sjcl4COpzETxuAHAc`Gx&Md$i9anHNqFf*|wf(;h%~iEsSynBtXWT3W&_0 z|9P)m++FKMu}uO!$kc+hJ59tDVeO7LtPiV!U}5IHK6rLVoJ(gc!8N!7t=I{F@D2HK zB%(Sq>{v&2TEgwLKdRYjiFG<{3wD~?W0F$VH_sy#G}2=3IT!5d^xe9<>kq#{8ioL=;;LVTI4N)!>jkID(b12Z93A~;kRuytUF1j? zP&b+>26c1hmzT7B_h~Gx%r8G(r+hcMwvaFJ5zw;=}@G>ITSH&-f|C4!am)O>&xC>iE=dIX9}Hyo0Zzze$}FMmb5sH zC1)?jn@=kDCA=RP+Od^x?x7bAmZI~0SmlWbziBhdSB(`B6I`q4(@HtnYEm|}u|F0<(LnC*a9JqyI`LR(sTm zRiCXt*lY9$aFo%>`h$MZAKfW@z7EvJJt64s4`Z(2-bLv40la$5 z!@19bG7NPjBAO3wXH{u`TFp}bG0|4F@b&@I+ej0QCW${QO|U>G>$$+q9tb&o_;pdc z#jLpBW*rzDASX!81>pw$UEF`$p#MCw`-p^0H$BPO@Mj&c8+CE7Suy^}iK_*5w%azN zv+Xl``eD7Ne=G0lq_h3jI`{ND*+<#Rd^x|W{3?Ds4xpa>2eES#8@mt6#?faUW%GsX zT)}pXup`pc*g_>+zyZ5aLt4ck;INNc77_5KqL_*IHD37zF)yKuTp_z!f!UPJzsVK` z+c)cB@$pa#gQ#|`z|uqs8`Dt35uVje9MGeQ=3_8>>Xis*vm%@=ZlDjkm;|i+p02`G z$)`kowR~E9EwUc2|0kN=(cR^+^(}sxZ+4P9P8&RYCqJ~q!{rEES01q>Ain#KPdYpK zq;r~2Iy?Q@n0Rpb6!guHV>!Iw*K4Ivc|l~mku;vDU2~7DdGgB?+0ZDI+&tSEyH&=n zCx{)UZ}%7XW6jW1&2{0f0=Q`)ThPgD!ezmDlr2{{yFQkxEkTfwa05Ob!3j=gkpvl;zOrhQL6lp7xFSHb zSOX%fen?Wx5|Hhk5GJCy!KvU($PupiLJ5?oBvK1&WsF@VrZO|LTBK8C9q<_~F5sEl zn@fA2eKg)}s9tQac;=DJE6~we-fhkW=3f(JL!j@@T5>#*3=XLgq|MWsPf|46ut%-z z*+jJ=Z_{Rbav}HCL1wL==XwpNsyXrwi^qFUJl_LpTMZ(e$v=z;G(IEp&^4Sl(!n;sAt%S zHw}`#jq6K6)2boN_h#&Ty|wc7y7_k1%D2nP2exvys3M>DKvYn+XKUb+6wI|BIb`;Y zZ&2zzwr}XD>*{gK3vRzA_20&%{ydWUZ>y8kLx?~5lPUe9Mu79|Yn!rVut9*ft3=O^ zu8Zw);ZC8-wAi&V$QkGhb$g$<%{{sGU=Tx zljypg^Bz1AEAwJWK1y;9H$~Mpi}qbB&i2td5~RAiXk+u}Fk5EsPu!KvO+^K`n26rs zr9{S2PHETp3V6Mt{zWrD{;`HlZc(3%tY?6Xa&%IwN=O7wDk_jnyVq-H)G@x2g^8;p z2>MEj`b?p zrVOb&ZH?EqFl2i;crM#7(B;xQUP(aOsW$drdt>j>I?CUS`1(R!V}hxraId}=ra>=)KVf= zSH%CqEjotzF|Z#SCY-R?m1pbaGTJGc$%Dv*cqc>ipGse`5$>=TDw@N3Cvo6Te-S$q zFV$&B_|X4*g+0h;*mTjh=2p!->xLGYhvA^v`xfDhhmM|B(>T@W zWiM{VIJHNsH`_O(-s}xKviwWT!<|7M?l0BJ!`+)YbFZ|JD@X?J!zKXotSfqc6AYX# zUjeC_;wv*tMCpF%93*PUdP51q>g>=B0bm4bi<_~afJ~|5QdH2Ant{sb zH^^))<*L`8R&(kMR6Wj?suGr^%V3{00?wKBk*wA@NJOS6)()vY==^piw~)`m_*6uB zt|C@e&#<-do6Fq&V9hWIdm+rDCz-oPk1Hask5m)D;U(dc=RE>!1rrcJN|M*O@Exiq zUqu6vRE&yeGb)XScFCa>ACH<_8^VJpqG8-g?HST!%z_+85G(yd6UEJnQQEA8VikOW zp0<$a+NS+6XupgD7X^ooS4;qg8U^_{X=_{sS|k%ybwEj82VMF&G>V$nB-qQw)YgO~ zubcLQ4#hA!Y$T;_C!rXR=-TZgHmYQY;-Q`6PHt*pX7J)5vmq2#%1C70ZttXp z1+gOxWK@If*C3+`WYiDRh6ZKM*fUy9TArIJJxNpUlr^Cq` zPQ7h4rk>Li*1CS3UNG0VRsAgB`k01ISfal}{A247x5pRS)mdANMlUOIVS_6bpqEq1 zGY;OW6|@udkLHa<88c) z(cYT8uQ=L=9{{M3P8n-d&PdhzQM3y)zt-Y4GInm3i+s& zj{16dxNJSZBLjrHxu=WeEb`sChs-q_wtWK$!p~V-{P=o&`<%sj&xNwxb8Cx>x$-1= z#L)v^yB=i6QA}{84=SJ{T-x@Pw^l0xn>&rVV)zAtD^_!KYI!SPMzO*#s~G-Xv-Z`j z>NyDXQL5CA%?aXDS`8%Rx^CK2D&B*skgaBoFhL4vrFjNn#Z^W-dTPX=42^lH(UFpw zZ1WmeqAcW0)h9q%ege@qX@tv(TLo|%3}l7h=~DF;3w&144OGfIfi$w!YIc74KCE8; zJxX?|dBBMW;~Gk2!#K;;+^UEJ^5?J_jfyQf$+h;zOHDu5_DWI{+%WVHYDi5XC%DQ{ zFzFacHlh}+Njr?_)Fe0##(C2T+9Wok?P`nK(Y2u>@n~CgQj6JP+g|Auxn0R{9kvX& z)$F%m#`ssOGV4Nt4JeZ>KA)d6sA zLjabvKjKLHqcudX>sHsv+CRra;se1p$(KcFAE6*S>XY1ku+C~KHJa8EFiw$CJw--Q zY_kjM^8?k(pNiUDaGHrcLmu?Y@ne=8KS_docUXtg>bhabYRLZiU<#wO9DF z;M2G{JG>owm~tDteH|B3Q{$da9N-8yWyM7_8yj8 z!p~*eh?2|#S+BqbgNe}+?TrI!6m%|4SjVk>4YK}d2=jZ`xru=;tjmwv5Z~u|Yca=@ z8?e;!@!_Tb`h%$bt8Z{;-qzaYRo>*+xw$IgjsSemoDwXnbGk|%v61}mRTXhVCJp4p;FKFEGi4};f!!4IU6-b_2mRTyR z)kvQPwws`3tb;_EzS_gDNOLS#_7M%)E0epr?Jn z38bhcB&N!xCA8ADw5A)HhkQf^AzHnBqVjlAhdnb!u(ok7b~mc3*HIR)qj6W~TZ7pgZ3c+v5eu+o@DQ5)xjOulkL_CO+@jp*lgbKLn+AJZZP)Zp*#WIA z0C)LcAZWhOB5gn6bp_sbqLL<>$*0^pS1B`DFz<*aVUX`qi~J36HQqurh5}kP~Kjx?yCjLf5*n4vi|JwX-u{%VW-n) z)YE0Xcwy8d9X|DlQ{EDezrd*O(!#M?1h&AlUszXl2Xxak%TKPWVeB)*ZexE+iQI(! zkf@ErF29n*uKctz2^t_h;~AxAJgfDLXEZDM6UO7qw$}Y#CURhjy$h8&FJAo9YhQfv z;>9?3&91a+1aa4wbZ5s@XU77a?IKMk#D`69FyNG~A?5Z;(Eb;e;e*X8Q(kKsqHx_& zLkzDqv%Wnrv+8JV?cqP}Ou;~~D|b3vc)i(lQFr?#J!yWIfgK$R@1qb}g575OVbsKC zxA0r5`&y%kTNIVxD#qL7dabw|y#ET*ujsc9#RP$8E3|poy9#l&y;0%`t}CHu*Jgy4 zeMV>*lS0dgxEAY>^W@pTk#ab>o}rHzaL%Gwnn8cDY$3l?6tj~e3#K6X>QnGN^LvjK zbC2)kifdx5B$?SKRs6l2U&viw%NHbr3;c6MGO=*O@my)G+IQ!jzI(u;_D!J#(|6{? zr4uJk*u~imS~9yUR2oD2R+sZ|E-s-VIags@t4mDFc=vc z9DMxvv0pBe@CL6zREyy|?>s;V4;X}EQsvM@JYq2DDdxp9X!M)F#|CCnlSZYSF>gJ7 z+i1USu^qI$)W{V_v(khGnu&R8=>_J3u7vQmjOYpf|Mzw+a8XrTf1ep1bGcQz{I<>98nMvOv^M-aRenHGZZsZZj2@d%0mnb6btj3 z)`tbxt~V>=u6-WNki(%b`2|1rIjp_+T6_KX+WV}%&OYZDYQNivDr!Lr91U5d+bX2D zuZlFI#L|ZL+bDkxQmarOREH)YJhLg#C?!ln-2}p4wK5YmDLIdO_jB{M^u}^?H^8db z65AUTEadaSw?XX^Wc-067#0E+)(E>#3sEo%Km@6Wnecm*6;iTiMsi63R33{50A%gJ zmAUBdY$!kRO#>;e-fw`%I1h5E|G*UkJP1@omj$X_pgomofnQw?^AN#bofe&(MmA}q z1(zgBHyYsWUHT~NSHn*>RvTP>-%WtJaAW#ua2*lyQAkKL_qCJ9#i!fN_L-)bjppd% zcjy>E^Sh9-8nh!o2{TcUnz)@jbK(xG=Qf?$AR#DDX2yXNChs-z>b5_|wd#EN0ICW$ zTzatO?&YWgGw~N$*Y2L&e}Pl0njCw{a7AH}zqsmo7g^<@_~yKv5@%4(4B_uN6DW_* z$MX-Z@>)Fq1GSEi^QRJk6-q=>GbF>G!>QxrIHm&^Fd`p9t>a@99C(1zKb4%SYLt|Q z3mIb~xcA7S(2;yWb{*dYlk`EL&Bt(tAA6$kOI?S(K3x5?nx}LG}}l$HD_ZnuMzjSZIuhgwQTWd}(E_z0 z#Si|z#Yq!RYH(7F6D3aKaT0_RcbtfkROGVgNy1w9U42iirgr|cq0c7!_lKf}mh@%o zL@im0u)VSKK1#acTUp+E8P~ z#SgY_3R#(cVt4=ijRA{Kzc$`yL1}htV}OhG`iSFe*1z1+Zn%T@sHHw&-hZq!yJ|X% zzZu*2Rl=M*r}lVzRUYW4;T1h2yg%P#f!8i>|FoN@@0K>Tn%z56{)2zf;S-(Lm;Cs9 zrX#@nwr+SUS>b(WXn0Sj7oJ^EQ@bxBg0LQ*U2(E#KPepYX=R8~ZZv)a1Fo<#-?9jnoZq8ymcr_7-ma-t)o72{rB)UGLPk zZ2TN=~AqYbZ@C*Rz&-rZ-Ot#{MC-!k9)EFs*z?whhk`#Zn5 zt*W{I_#2;xmtJ4w8g=tVecI@oJ2K1M4&JBX9rKLV`-|gcUiiD=WwqYn;T1n4yuY$~4$D}qce`$Q zx3I$dDGR)b!@+xz4c^NCzx7Ux85UmaXN8y5dP7*Ow@5daPT&HgJcoXR3|PC_!n!RFFQJ8aEhj~}d@ccN zje%23&FL7;=~&IFmF85eIkncD+GtM4k*9b;egt}UJS-#Ua9@W1^QRyIB3}u(IyxpM zn0(%Z-eZuAZ?7-GuWd?`rKG0EWTfMlYYcHWc+d@5IuQ0p8c(0U48#Uwu@a<5J=^xQ z+_XeFzUTd?CGiN%)fTe%KtWO$n?0rorAMzJzoV2$5^&kkxU3N}N8$#(vnVMeJuWdOC7H=E zf#o}yfx{l!8RlRMknvAVXjK!=lIRL&NpLtz57e4~vVJv^_E%e~AGk@-SOO1Jj*f5^ z_4#DG**@_p$>|dO=3ieslBt~p@4WD}bM>&3#H7emQhn{7izk2VB=Wd)s1&M*j!8^T z@U@#hbvpTDCs`MlnoN=GW=njgVV-2D?C+3Af6Z7U6inJ1)U_jHOd={k#z&1{EKO=M zN`|N?nFZC?6Hr6{Pg0A^;rePE1*0OA??L(;QXr!oYMWNW zi5~LaRiFAxSDsTkmkJlkI=j#16(~Q>LW_MIced4>&oUMfsXw4=*&!3k6LNkKJ9F-K z5gW9{aSXJ@2|gbXN5_IDQn4TcT28Cs1*tu$#>Q%*n^r^E?Xm%Ch2rX1B9c|od_f}e z8IVYGbzr#KGvUW+kWM1eHKoSSL}b>0)}*ATrzB~{kOL;-ohVc#OVR@AcrX`thee>D z8I_0QuuddHbBf_4By^J~@hAT9Min|R$%FcqZeyd8qSMyVv91J2ol!7qK%pYO*thiCdavUM2Wjbe+d@^}%{TX* zda&$;(sS27>`JO!mUun0Yu^1Va)%MBSkyBh} z3Iia)gy^EMQKAU6QVA{Rnr%7$&J_N8YD*{3N z4Hik172mu2HQ%hrQC7NeJ_-|CCUUP65AA#y{%vl_2`I~vmssBKRFxJeRfnwS28D|)*LKkDabw!!%Cu)3r0%%eH(uUJ zkl}hW(UPrCZimmDWFoHFw3Dvr!Bli-It$0`pJ%9m4{faY&g-Z$CGIwA0-mY|QiX-1 zlz6@%JgE5s8+$w-xC(PPN*qHsWTNQ$bm=wGsdNwHtskBwVxyE?vfHR$KB9c8m+dRc zg9rDr#CVa)N!EFOx#EKyA464MQLQE4WYVY06^?|B^SeBy^V|M?ZJ{~G+NuEyyrXai zT1ZIIivzvvOf2vZGV+kOpE%j4swmhe`o&W=xyHOQhNNCUaYl8WnKNcGXv|ytQ@pWvE_Sy81k=>+HWp*O^!z=sLGQQpxCQI{wL?RsLdU zS!7v7?yLAvdZfrY-KDL@@0PU(96|z`zPg~KwUjdY%+c0zE<>HIrKNPRmUvq711(Pt zucad5RhQz=_LPBhc0$Qm>ZhdT2>Lz$*G zg_oV$Lj9UohzmTzu2u`nkr=v87FiyjTjI&t9R*XznzZ<|=$*o&<|T$}kG7wHi3@Ue z`EB+OS}Z>8A#4ks%gkQ$8AazYv&8~P{RayaIU|985YHnFMo8n)ay%@;uGTESbn)A& zA{Zf8YXX}6t=&uZz-eeeGw=B@x!c-~tIU`QU_|&c2;;XME?}sBi192r&>BEEK8+#h zL0uq#>qa4-59vZALsr=ct^|4mnA=U<{KX$2-wU*k?!mN;rD2=DRBQLbbOYJDxArQD zwwjZ&%^&XFv_as%w6RRqse0!Puodr1o4du3fX!h&VQBG$j1fs1#{0!O|79LjW44JqPLn` zFE!;MA2}kWxuEqfz{qql8drsSss-EC;|j2#GNs8)ljqit!-x)*X*jYqM6b4>-u%J*0@c9pr(oiS%2c0H#8iZQZE3js&S80q26jORG{4j zO3Z;qo@}?^aJO#2*J8bHs7$V4J#|VXn@glZcLL?S6bvFe0vWZVH6RwZ#Sm(;@-`J< zIB%O_IE9qK*t#Olf6!PZV8`eH9PR-Gl<|>v#;XT|f$BU2Al;6_D<^yK1g3*?;Rb$! z2V74*;aWHoE`eTnq~oQXEgbQmBm6PHK4j{qkB0t5ur_-G;lZP%S77kNX@z--h<`1f z%L&306T)X2n$b%PZEnERXWV%08bg=UbvByhOvH0H8esQnF0EitVV`#B_KCJkYywyWNOm1z^_(bYalWnaL)InMmGuHcG12a;AfsDqN<@4v-r{hA)=F z|M|8sjjquZz4&WU1PxE{?M9j>zVwa=&w-U#AS|rFPeN(3SZ0F-7y24jThguhv9WP- zMHso$!;-ohErFas>DHn^i4}fYfXX8sU>+24u zU8PXCPW5Vb5s6IExc22oiXv`U;$1WaCFJ43=W~NZq?3RT*S8&2(Z&?U7*nXWs}#;q zU(j-uU}4$N%P2_6Uamtn_E>1gMHY!yRS!N733#uWM>`U5V4R45FjAIl%Z|_``ybk} z=jgA3H1f|mqmCLP1FmRM+0XYY&o7sC*njG$aNa+;dl@gnYd5d#=P9su+~jf_Lpup7 zya?(w=-i-1%#-lHcPDjYysi~YyI*9yuIZ4j9E_0gN5h{&+e6BZ=akS+tSG}p_AcE) z8A6)ZDu&le1{wS<%$FEyq!uzOkXdi9B07zs=s{&nk<$S)gEKsYR+E#10uMSDB*34D z93r$Cl!2d6VnUlqBN5ufF}nO|AT=gt2%+>Vg3>gCV@5(S{)A5cOb{HMF@#|9^+S^R zar8&H@FPb|3!+C<_1K~Co}ZGHOg;rRAUJj;1ZQHwZXg)^Zry_MhXf?_mjni6$B$?z z8&J(yGg23ffw+8f9L&(Vb;56Z(K)|fJITZ4?Ba>2K? zsqRK(v*}B>3HZ4-`&0<4L6gjpFS4nC=@ZnVNkTLi+3bR|*nx^;V7+UTt44@i+>+jh z4Y*;J{fIVwTBrkDPA$O^Cn2M0PH>qM0*%Cy+QaJL0u#Iz-qh^ - - - - \ No newline at end of file diff --git a/library/simplepie/demo/for_the_demo/mini_podcast.png b/library/simplepie/demo/for_the_demo/mini_podcast.png deleted file mode 100644 index fd6faf2a318701ec923687afd472e5db89ffd651..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1202 zcmV;j1Wo&iP)WdJZSFEBGNFg8Pc<_`b> z1P4h(K~z|U<(5%s8+9DVKbKs3UDGUUdPA;ewlJ|+hry}%3F6bRK24+ral#N8EuCdZMQ9>}wTxzKK)a>7uEi{AZ5mtCw9DG&d`NQ1EOJ$1N6qbgWIx06^0Qd2 zR!k-n0758rQ$2d~J?g~TZBgi>#Fp1rIG6o^*PnichK2@ACKKk^+oC^_T_&DMfQoi0 z7P;!NO(9EU@is4{Tajg%nwlEK(Aq8H_siU?k%_PWKd^|rKzK4tb8|EG_4SDVmT+W` znt8) z;+cfT4|Mk74fQZMKdRFSboLqay`dfk+-G&TBIUjuLaal_E9gCp831B=P^pzUH*=B6 z!{1`J)HCG%jNaQ9*ezNCm|ctKp1<0naGo1UW8R9rup)FnD(q;g1ef?}UyYTr8WkbaB$u(`E0XJYUyGmf|!&gc$$=-?>#~m+_6; zy1Rw<_rC>z|CfH2H&RsMRRh*Neu%EFE?h1bqSxVJU@>4wi2OB6_e8H=WVM3u4#)P+ zS&$?NQ4|3%z3V*5t_@4^uu_vxC_TVbDJHIidq%QbmDTkXlrZ3 z;cy@b0)m=bq|<4V$t0;%N;}tA^Abf7o6Uy9;lOIOA_xLN&XE7Owr#ck0iew8UF$dq Q>i_@%07*qoM6N<$f^gwQSO5S3 diff --git a/library/simplepie/demo/for_the_demo/place_audio.png b/library/simplepie/demo/for_the_demo/place_audio.png deleted file mode 100644 index 560ea0039310545ed1c4dcf7a1004abcd2b780af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 851 zcmV-Z1FZasP)WdJlUH7_tW zlXA8~0000VbVXQnQ*UN;cVTj608L?Ia&K*AWNBd_Mrm?ocW-iQb09diXwrB900OH? zL_t(oh3%KWPZMDn$3J(}f=ErHU?>n%8C+ZlR0kcn$-zjh0|O3XOe`yde?b2L`wuXX zhJ_d%8euf16FM9Ts~z;>k5g1Ea?lD?UWfMDYwzt3VrUcF@AT&TJkR%i-uL_T?y4|9 z%G1wi{dCZLSp@v0pUT8T@&^mcg|>5)dYfeG!x z#P-2%!b}=_W|MnsFAVpneERL?<5#2cYtiJl^|-N;xc(%1CDQ!f+6W#+<*b)9?0^Ls z$ns!hDm<)dujZ29*S8O?@Y-W-Ak^wk{|g*J4h|p-8L(gn(vZbd$oK<54uE}(9n&yP z0EJ**An`64?$;6@lc>-IAZGM@o${>UkeJqsYd0gNYvsFZoh21j)fgvPSLaw#?##L* zpe%(Dh}jYYC=2p|_PD8_FAz_yCT_;&U&nyx*xcCp%kyh7?5CHA=tVgZ(UnD8I%`WR zWrDSDTplYw!+w=Zex;h?s$ z^|t5@)orgf3$@22A8n-Re;Kz1rQBrWn@as?v>$EQ~J{a#-*6xsNZ%0HAkI9a^h zRJb$5tw5_AX>YtRRW|oq-9_8uLq^5e?m d@n(zJ;9uZFSmaT$)Vu%y002ovPDHLkV1g28gKhu- diff --git a/library/simplepie/demo/for_the_demo/place_video.png b/library/simplepie/demo/for_the_demo/place_video.png deleted file mode 100644 index be5ec8219eb952d55d581e40b104d8a74a58af2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36713 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 ATmS$7 diff --git a/library/simplepie/demo/for_the_demo/sIFR-print.css b/library/simplepie/demo/for_the_demo/sIFR-print.css deleted file mode 100644 index ec89b1961..000000000 --- a/library/simplepie/demo/for_the_demo/sIFR-print.css +++ /dev/null @@ -1,35 +0,0 @@ -/*=:project - scalable Inman Flash Replacement (sIFR) version 3. - - =:file - Copyright: 2006 Mark Wubben. - Author: Mark Wubben, - - =:history - * IFR: Shaun Inman - * sIFR 1: Mike Davidson, Shaun Inman and Tomas Jogin - * sIFR 2: Mike Davidson, Shaun Inman, Tomas Jogin and Mark Wubben - - =:license - This software is licensed and provided under the CC-GNU LGPL. - See -*/ - - -/* This is the print stylesheet to hide the Flash headlines from the browser... regular browser text headlines will now print as normal */ - -.sIFR-flash { - display: none !important; - height: 0; - width: 0; - position: absolute; - overflow: hidden; -} - -.sIFR-alternate { - visibility: visible !important; - display: block !important; - position: static !important; - left: auto !important; - top: auto !important; -} \ No newline at end of file diff --git a/library/simplepie/demo/for_the_demo/sIFR-screen.css b/library/simplepie/demo/for_the_demo/sIFR-screen.css deleted file mode 100644 index 778e09d2b..000000000 --- a/library/simplepie/demo/for_the_demo/sIFR-screen.css +++ /dev/null @@ -1,39 +0,0 @@ -/*=:project - scalable Inman Flash Replacement (sIFR) version 3. - - =:file - Copyright: 2006 Mark Wubben. - Author: Mark Wubben, - - =:history - * IFR: Shaun Inman - * sIFR 1: Mike Davidson, Shaun Inman and Tomas Jogin - * sIFR 2: Mike Davidson, Shaun Inman, Tomas Jogin and Mark Wubben - - =:license - This software is licensed and provided under the CC-GNU LGPL. - See -*/ - -/*---- sIFR ---*/ -.sIFR-flash { - visibility: visible !important; - margin: 0; - padding: 0; -} - -.sIFR-replaced { - visibility: visible !important; -} - -.sIFR-alternate { - position: absolute; - left: 0; - top: 0; - width: 0; - height: 0; - display: block; - overflow: hidden; -} - -/*---- Header styling ---*/ diff --git a/library/simplepie/demo/for_the_demo/sifr-config.js b/library/simplepie/demo/for_the_demo/sifr-config.js deleted file mode 100644 index e7066b361..000000000 --- a/library/simplepie/demo/for_the_demo/sifr-config.js +++ /dev/null @@ -1,40 +0,0 @@ -var yanone_kaffeesatz = { - src: './for_the_demo/yanone-kaffeesatz-bold.swf' -}; - -var lucida_grande = { - src: './for_the_demo/lucida-grande-bold.swf' -}; - -sIFR.activate(yanone_kaffeesatz); -//sIFR.activate(lucida_grande); - -sIFR.replace(yanone_kaffeesatz, { -//sIFR.replace(lucida_grande, { - - selector: 'h3.header', - wmode: 'transparent', - css: { - '.sIFR-root': { - 'text-align': 'center', - 'color': '#000000', - 'font-weight': 'bold', - 'background-color': '#EEFFEE', - - 'font-size': '50px', // For Yanone Kaffeesatz - //'font-size': '40px', // For Lucida Grande - - 'letter-spacing': '0' // For Yanone Kaffeesatz - //'letter-spacing': '-4' // For Lucida Grande - - }, - 'a': { - 'text-decoration': 'none', - 'color': '#000000' - }, - 'a:hover': { - 'text-decoration': 'none', - 'color': '#666666' - } - } -}); diff --git a/library/simplepie/demo/for_the_demo/sifr.js b/library/simplepie/demo/for_the_demo/sifr.js deleted file mode 100644 index 0a8b1b6dc..000000000 --- a/library/simplepie/demo/for_the_demo/sifr.js +++ /dev/null @@ -1,19 +0,0 @@ -/*=:project - scalable Inman Flash Replacement (sIFR) version 3, revision 245 - - =:file - Copyright: 2006 Mark Wubben. - Author: Mark Wubben, - - =:history - * IFR: Shaun Inman - * sIFR 1: Mike Davidson, Shaun Inman and Tomas Jogin - * sIFR 2: Mike Davidson, Shaun Inman, Tomas Jogin and Mark Wubben - - =:license - This software is licensed and provided under the CC-GNU LGPL. - See -*/ - -var parseSelector=(function(){var _1=/\s*,\s*/;var _2=/\s*([\s>+~(),]|^|$)\s*/g;var _3=/([\s>+~,]|[^(]\+|^)([#.:@])/g;var _4=/^[^\s>+~]/;var _5=/[\s#.:>+~()@]|[^\s#.:>+~()@]+/g;function parseSelector(_6,_7){_7=_7||document.documentElement;var _8=_6.split(_1),_9=[];for(var i=0;i<_8.length;i++){var _b=[_7],_c=toStream(_8[i]);for(var j=0;j<_c.length;){var _e=_c[j++],_f=_c[j++],_10="";if(_c[j]=="("){while(_c[j++]!=")"&&j<_c.length){_10+=_c[j]}_10=_10.slice(0,-1)}_b=select(_b,_e,_f,_10)}_9=_9.concat(_b)}return _9}function toStream(_11){var _12=_11.replace(_2,"$1").replace(_3,"$1*$2");if(_4.test(_12)){_12=" "+_12}return _12.match(_5)||[]}function select(_13,_14,_15,_16){return (_17[_14])?_17[_14](_13,_15,_16):[]}var _18={toArray:function(_19){var a=[];for(var i=0;i<_19.length;i++){a.push(_19[i])}return a}};var dom={isTag:function(_1d,tag){return (tag=="*")||(tag.toLowerCase()==_1d.nodeName.toLowerCase())},previousSiblingElement:function(_1f){do{_1f=_1f.previousSibling}while(_1f&&_1f.nodeType!=1);return _1f},nextSiblingElement:function(_20){do{_20=_20.nextSibling}while(_20&&_20.nodeType!=1);return _20},hasClass:function(_21,_22){return (_22.className||"").match("(^|\\s)"+_21+"(\\s|$)")},getByTag:function(tag,_24){return _24.getElementsByTagName(tag)}};var _17={"#":function(_25,_26){for(var i=0;i<_25.length;i++){if(_25[i].getAttribute("id")==_26){return [_25[i]]}}return []}," ":function(_28,_29){var _2a=[];for(var i=0;i<_28.length;i++){_2a=_2a.concat(_18.toArray(dom.getByTag(_29,_28[i])))}return _2a},">":function(_2c,_2d){var _2e=[];for(var i=0,_30;i<_2c.length;i++){_30=_2c[i];for(var j=0,_32;j<_30.childNodes.length;j++){_32=_30.childNodes[j];if(_32.nodeType==1&&dom.isTag(_32,_2d)){_2e.push(_32)}}}return _2e},".":function(_33,_34){var _35=[];for(var i=0,_37;i<_33.length;i++){_37=_33[i];if(dom.hasClass([_34],_37)){_35.push(_37)}}return _35},":":function(_38,_39,_3a){return (pseudoClasses[_39])?pseudoClasses[_39](_38,_3a):[]}};parseSelector.selectors=_17;parseSelector.pseudoClasses={};parseSelector.util=_18;parseSelector.dom=dom;return parseSelector})(); -var sIFR=new function(){var _3b=this;var _3c="sIFR-active";var _3d="sIFR-replaced";var _3e="sIFR-replacing";var _3f="sIFR-flash";var _40="sIFR-ignore";var _41="sIFR-alternate";var _42="sIFR-class";var _43="sIFR-layout";var _44=6;var _45=126;var _46=8;var _47="SIFR-PREFETCHED";var _48=[10,1.55,19,1.45,32,1.35,71,1.3,1.25];var _49=5;this.isActive=false;this.isEnabled=true;this.hideElements=true;this.preserveSingleWhitespace=false;this.fixWrap=true;this.fixHover=true;this.registerEvents=true;this.setPrefetchCookie=true;this.cookiePath="/";this.domains=[];this.fromLocal=true;this.forceClear=false;this.forceWidth=false;this.fitExactly=false;this.forceTextTransform=true;this.useDomContentLoaded=true;this.debugMode=false;this.hasFlashClassSet=false;this.delayCss=false;this.callbacks=[];var _4a=0;var _4b=false,_4c=false;var dom=new function(){var _4e="http://www.w3.org/1999/xhtml";this.getBody=function(){var _4f=document.getElementsByTagName("body");if(_4f.length==1){return _4f[0]}return null};this.addClass=function(_50,_51){if(_51){_51.className=((_51.className||"")==""?"":_51.className+" ")+_50}};this.removeClass=function(_52,_53){if(_53){_53.className=_53.className.replace(new RegExp("(^|\\s)"+_52+"(\\s|$)"),"").replace(/^\s+|(\s)\s+/g,"$1")}};this.hasClass=function(_54,_55){return new RegExp("(^|\\s)"+_54+"(\\s|$)").test(_55.className)};this.hasOneOfClassses=function(_56,_57){for(var i=0;i<_56.length;i++){if(this.hasClass(_56[i],_57)){return true}}return false};this.create=function(_59){if(document.createElementNS){return document.createElementNS(_4e,_59)}return document.createElement(_59)};this.setInnerHtml=function(_5a,_5b){if(ua.innerHtmlSupport){_5a.innerHTML=_5b}else{if(ua.xhtmlSupport){_5b=["",_5b,""].join("");var xml=(new DOMParser()).parseFromString(_5b,"text/xml");xml=document.importNode(xml.documentElement,true);while(_5a.firstChild){_5a.removeChild(_5a.firstChild)}while(xml.firstChild){_5a.appendChild(xml.firstChild)}}}};this.nodeFromHtml=function(_5d){var _5e=this.create("div");_5e.innerHTML=_5d;return _5e.firstChild};this.getComputedStyle=function(_5f,_60){var _61;if(document.defaultView&&document.defaultView.getComputedStyle){_61=document.defaultView.getComputedStyle(_5f,null)[_60]}else{if(_5f.currentStyle){_61=_5f.currentStyle[_60]}}return _61||""};this.getStyleAsInt=function(_62,_63,_64){var _65=this.getComputedStyle(_62,_63);if(_64&&!/px$/.test(_65)){return 0}_65=parseInt(_65);return isNaN(_65)?0:_65};this.getZoom=function(){return _66.zoom.getLatest()}};this.dom=dom;var ua=new function(){var ua=navigator.userAgent.toLowerCase();var _69=(navigator.product||"").toLowerCase();this.macintosh=ua.indexOf("mac")>-1;this.windows=ua.indexOf("windows")>-1;this.quicktime=false;this.opera=ua.indexOf("opera")>-1;this.konqueror=_69.indexOf("konqueror")>-1;this.ie=false/*@cc_on || true @*/;this.ieSupported=this.ie&&!/ppc|smartphone|iemobile|msie\s5\.5/.test(ua)/*@cc_on && @_jscript_version >= 5.5 @*/;this.ieWin=this.ie&&this.windows/*@cc_on && @_jscript_version >= 5.1 @*/;this.windows=this.windows&&(!this.ie||this.ieWin);this.ieMac=this.ie&&this.macintosh/*@cc_on && @_jscript_version < 5.1 @*/;this.macintosh=this.macintosh&&(!this.ie||this.ieMac);this.safari=ua.indexOf("safari")>-1;this.webkit=ua.indexOf("applewebkit")>-1&&!this.konqueror;this.khtml=this.webkit||this.konqueror;this.gecko=!this.webkit&&_69=="gecko";this.operaVersion=this.opera&&/.*opera(\s|\/)(\d+\.\d+)/.exec(ua)?parseInt(RegExp.$2):0;this.webkitVersion=this.webkit&&/.*applewebkit\/(\d+).*/.exec(ua)?parseInt(RegExp.$1):0;this.geckoBuildDate=this.gecko&&/.*gecko\/(\d{8}).*/.exec(ua)?parseInt(RegExp.$1):0;this.konquerorVersion=this.konqueror&&/.*konqueror\/(\d\.\d).*/.exec(ua)?parseInt(RegExp.$1):0;this.flashVersion=0;if(this.ieWin){var axo;var _6b=false;try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7")}catch(e){try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");this.flashVersion=6;axo.AllowScriptAccess="always"}catch(e){_6b=this.flashVersion==6}if(!_6b){try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash")}catch(e){}}}if(!_6b&&axo){this.flashVersion=parseFloat(/([\d,?]+)/.exec(axo.GetVariable("$version"))[1].replace(/,/g,"."))}}else{if(navigator.plugins&&navigator.plugins["Shockwave Flash"]){var _6c=navigator.plugins["Shockwave Flash"];this.flashVersion=parseFloat(/(\d+\.?\d*)/.exec(_6c.description)[1]);var i=0;while(this.flashVersion>=_46&&i-1){this.flashVersion=0;this.quicktime=true}i++}}}this.flash=this.flashVersion>=_46;this.transparencySupport=this.macintosh||this.windows;this.computedStyleSupport=this.ie||document.defaultView&&document.defaultView.getComputedStyle&&(!this.gecko||this.geckoBuildDate>=20030624);this.css=true;if(this.computedStyleSupport){try{var _6f=document.getElementsByTagName("head")[0];_6f.style.backgroundColor="#FF0000";var _70=dom.getComputedStyle(_6f,"backgroundColor");this.css=!_70||/\#F{2}0{4}|rgb\(255,\s?0,\s?0\)/i.test(_70);_6f.style.backgroundColor="";_6f=null}catch(e){}}this.xhtmlSupport=!!window.DOMParser&&!!document.importNode;try{var n=dom.create("span");if(!this.ieMac){n.innerHTML="x"}this.innerHtmlSupport=n.innerHTML=="x"}catch(e){this.innerHtmlSupport=false}this.zoomSupport=!!(this.opera&&document.documentElement);this.geckoXml=this.gecko&&(document.contentType||"").indexOf("xml")>-1;this.requiresPrefetch=this.ieWin||this.khtml;this.verifiedKonqueror=false;this.supported=this.flash&&this.css&&(!this.ie||this.ieSupported)&&(!this.opera||this.operaVersion>=8)&&(!this.webkit||this.webkitVersion>=412)&&(!this.konqueror||this.konquerorVersion>3.5)&&this.computedStyleSupport&&(this.innerHtmlSupport||!this.khtml&&this.xhtmlSupport)};this.ua=ua;var _72=new function(){var _73={leading:true,"margin-left":true,"margin-right":true,"text-indent":true};var _74=" ";function capitalize($){return $.toUpperCase()}this.normalize=function(str){if(_3b.preserveSingleWhitespace){return str.replace(/\s/g,_74)}return str.replace(/(\s)\s+/g,"$1").replace(/\xA0/,_74)};this.textTransform=function(_77,str){switch(_77){case "uppercase":str=str.toUpperCase();break;case "lowercase":str=str.toLowerCase();break;case "capitalize":var _79=str;str=str.replace(/^\w|\s\w/g,capitalize);if(str.indexOf("function capitalize")!=-1){var _7a=_79.replace(/(^|\s)(\w)/g,"$1$1$2$2").split(/^\w|\s\w/g);str="";for(var i=0;i<_7a.length;i++){str+=_7a[i].charAt(0).toUpperCase()+_7a[i].substring(1)}}break}return str};this.toHexString=function(str){if(typeof (str)!="string"||!str.charAt(0)=="#"||str.length!=4&&str.length!=7){return str}str=str.replace(/#/,"");if(str.length==3){str=str.replace(/(.)(.)(.)/,"$1$1$2$2$3$3")}return "0x"+str};this.toJson=function(obj){var _7e="";switch(typeof (obj)){case "string":_7e="\""+obj+"\"";break;case "number":case "boolean":_7e=obj.toString();break;case "object":_7e=[];for(var _7f in obj){if(obj[_7f]==Object.prototype[_7f]){continue}_7e.push("\""+_7f+"\":"+_72.toJson(obj[_7f]))}_7e="{"+_7e.join(",")+"}";break}return _7e};this.convertCssArg=function(arg){if(!arg){return {}}if(typeof (arg)=="object"){if(arg.constructor==Array){arg=arg.join("")}else{return arg}}var obj={};var _82=arg.split("}");for(var i=0;i<_82.length;i++){var $=_82[i].match(/([^\s{]+)\s*\{(.+)\s*;?\s*/);if(!$||$.length!=3){continue}if(!obj[$[1]]){obj[$[1]]={}}var _85=$[2].split(";");for(var j=0;j<_85.length;j++){var $2=_85[j].match(/\s*([^:\s]+)\s*\:\s*([^\s;]+)/);if(!$2||$2.length!=3){continue}obj[$[1]][$2[1]]=$2[2]}}return obj};this.extractFromCss=function(css,_89,_8a,_8b){var _8c=null;if(css&&css[_89]&&css[_89][_8a]){_8c=css[_89][_8a];if(_8b){delete css[_89][_8a]}}return _8c};this.cssToString=function(arg){var css=[];for(var _8f in arg){var _90=arg[_8f];if(_90==Object.prototype[_8f]){continue}css.push(_8f,"{");for(var _91 in _90){if(_90[_91]==Object.prototype[_91]){continue}var _92=_90[_91];if(_73[_91]){_92=parseInt(_92,10)}css.push(_91,":",_92,";")}css.push("}")}return escape(css.join(""))};this.bind=function(_93,_94){return function(){_93[_94].apply(_93,arguments)}}};this.util=_72;var _66={};_66.fragmentIdentifier=new function(){this.fix=true;var _95;this.cache=function(){_95=document.title};function doFix(){document.title=_95}this.restore=function(){if(this.fix){setTimeout(doFix,0)}}};_66.synchronizer=new function(){this.isBlocked=false;this.block=function(){this.isBlocked=true};this.unblock=function(){this.isBlocked=false;_96.replaceAll()}};_66.zoom=new function(){var _97=100;this.getLatest=function(){return _97};if(ua.zoomSupport&&ua.opera){var _98=document.createElement("div");_98.style.position="fixed";_98.style.left="-65536px";_98.style.top="0";_98.style.height="100%";_98.style.width="1px";_98.style.zIndex="-32";document.documentElement.appendChild(_98);function updateZoom(){if(!_98){return}var _99=window.innerHeight/_98.offsetHeight;var _9a=Math.round(_99*100)%10;if(_9a>5){_99=Math.round(_99*100)+10-_9a}else{_99=Math.round(_99*100)-_9a}_97=isNaN(_99)?100:_99;_66.synchronizer.unblock();document.documentElement.removeChild(_98);_98=null}_66.synchronizer.block();setTimeout(updateZoom,54)}};this.hacks=_66;var _9b={kwargs:[],replaceAll:function(){for(var i=0;i-1){_9f=_9f.substr(_a0+1);var _a1=_9d.lastIndexOf(_9f);if(_a1>-1&&(_a1+_9f.length)==_9d.length){return true}}}return false}this.activate=function(){if(!ua.supported||!this.isEnabled||this.isActive||!isValidDomain()){return}if(arguments.length>0){this.prefetch.apply(this,arguments)}this.isActive=true;if(this.hideElements){this.setFlashClass()}if(ua.ieWin&&_66.fragmentIdentifier.fix&&window.location.hash!=""){_66.fragmentIdentifier.cache()}else{_66.fragmentIdentifier.fix=false}if(!this.registerEvents){return}function handler(evt){_3b.initialize();if(evt&&evt.type=="load"){if(document.removeEventListener){document.removeEventListener("DOMContentLoaded",handler,false)}if(window.removeEventListener){window.removeEventListener("load",handler,false)}}}if(window.addEventListener){if(_3b.useDomContentLoaded&&ua.gecko){document.addEventListener("DOMContentLoaded",handler,false)}window.addEventListener("load",handler,false)}else{if(ua.ieWin){if(_3b.useDomContentLoaded){document.write("");document.getElementById("__sifr_ie_onload").onreadystatechange=function(){if(this.readyState=="complete"){handler();this.removeNode()}}}window.attachEvent("onload",handler)}}};this.setFlashClass=function(){if(this.hasFlashClassSet){return}dom.addClass(_3c,dom.getBody()||document.documentElement);this.hasFlashClassSet=true};this.removeFlashClass=function(){if(!this.hasFlashClassSet){return}dom.removeClass(_3c,dom.getBody());dom.removeClass(_3c,document.documentElement);this.hasFlashClassSet=false};this.initialize=function(){if(_4c||!this.isActive||!this.isEnabled){return}_4c=true;_9b.replaceAll();clearPrefetch()};function getSource(src){if(typeof (src)!="string"){if(src.src){src=src.src}if(typeof (src)!="string"){var _a4=[];for(var _a5 in src){if(src[_a5]!=Object.prototype[_a5]){_a4.push(_a5)}}_a4.sort().reverse();var _a6="";var i=-1;while(!_a6&&++i<_a4.length){if(parseFloat(_a4[i])<=ua.flashVersion){_a6=src[_a4[i]]}}src=_a6}}if(!src&&_3b.debugMode){throw new Error("sIFR: Could not determine appropriate source")}if(ua.ie&&src.charAt(0)=="/"){src=window.location.toString().replace(/([^:]+)(:\/?\/?)([^\/]+).*/,"$1$2$3")+src}return src}this.prefetch=function(){if(!ua.requiresPrefetch||!ua.supported||!this.isEnabled||!isValidDomain()){return}if(this.setPrefetchCookie&&new RegExp(";?"+_47+"=true;?").test(document.cookie)){return}try{_4b=true;if(ua.ieWin){prefetchIexplore(arguments)}else{prefetchLight(arguments)}if(this.setPrefetchCookie){document.cookie=_47+"=true;path="+this.cookiePath}}catch(e){if(_3b.debugMode){throw e}}};function prefetchIexplore(_a8){for(var i=0;i<_a8.length;i++){document.write("")}}function prefetchLight(_aa){for(var i=0;i<_aa.length;i++){new Image().src=getSource(_aa[i])}}function clearPrefetch(){if(!ua.ieWin||!_4b){return}try{var _ac=document.getElementsByTagName("script");for(var i=_ac.length-1;i>=0;i--){var _ae=_ac[i];if(_ae.type=="sifr/prefetch"){_ae.parentNode.removeChild(_ae)}}}catch(e){}}function getRatio(_af,_b0){for(var i=0;i<_b0.length;i+=2){if(_af<=_b0[i]){return _b0[i+1]}}return _b0[_b0.length-1]}function getFilters(obj){var _b3=[];for(var _b4 in obj){if(obj[_b4]==Object.prototype[_b4]){continue}var _b5=obj[_b4];_b4=[_b4.replace(/filter/i,"")+"Filter"];for(var _b6 in _b5){if(_b5[_b6]==Object.prototype[_b6]){continue}_b4.push(_b6+":"+escape(_72.toJson(_72.toHexString(_b5[_b6]))))}_b3.push(_b4.join(","))}return _b3.join(";")}function calculate(_b7){var _b8,_b9;if(!ua.ie){_b8=dom.getStyleAsInt(_b7,"lineHeight");_b9=Math.floor(dom.getStyleAsInt(_b7,"height")/_b8)}else{if(ua.ie){var _ba=_b7.innerHTML;_b7.style.visibility="visible";_b7.style.overflow="visible";_b7.style.position="static";_b7.style.zoom="normal";_b7.style.writingMode="lr-tb";_b7.style.width=_b7.style.height="auto";_b7.style.maxWidth=_b7.style.maxHeight=_b7.style.styleFloat="none";var _bb=_b7;var _bc=_b7.currentStyle.hasLayout;if(_bc){dom.setInnerHtml(_b7,"
X
X
X
");_bb=_b7.firstChild}else{dom.setInnerHtml(_b7,"X
X
X")}var _bd=_bb.getClientRects();_b8=_bd[1].bottom-_bd[1].top;_b8=Math.ceil(_b8*0.8);if(_bc){dom.setInnerHtml(_b7,"
"+_ba+"
");_bb=_b7.firstChild}else{dom.setInnerHtml(_b7,_ba)}_bd=_bb.getClientRects();_b9=_bd.length;if(_bc){dom.setInnerHtml(_b7,_ba)}_b7.style.visibility=_b7.style.width=_b7.style.height=_b7.style.maxWidth=_b7.style.maxHeight=_b7.style.overflow=_b7.style.styleFloat=_b7.style.position=_b7.style.zoom=_b7.style.writingMode=""}}return {lineHeight:_b8,lines:_b9}}this.replace=function(_be,_bf){if(!ua.supported){return}if(_bf){for(var _c0 in _be){if(typeof (_bf[_c0])=="undefined"){_bf[_c0]=_be[_c0]}}_be=_bf}if(!_4c){return _9b.kwargs.push(_be)}if(_66.synchronizer.isBlocked){return _96.kwargs.push(_be)}var _c1=_be.elements;if(!_c1&&parseSelector){_c1=parseSelector(_be.selector)}if(_c1.length==0){return}this.setFlashClass();var src=getSource(_be.src);var css=_72.convertCssArg(_be.css);var _c4=getFilters(_be.filters);var _c5=(_be.forceClear==null)?_3b.forceClear:_be.forceClear;var _c6=(_be.fitExactly==null)?_3b.fitExactly:_be.fitExactly;var _c7=_c6||(_be.forceWidth==null?_3b.forceWidth:_be.forceWidth);var _c8=parseInt(_72.extractFromCss(css,".sIFR-root","leading"))||0;var _c9=_72.extractFromCss(css,".sIFR-root","font-size",true)||0;var _ca=_72.extractFromCss(css,".sIFR-root","background-color",true)||"#FFFFFF";var _cb=_72.extractFromCss(css,".sIFR-root","kerning",true)||"";var _cc=_be.gridFitType||_72.extractFromCss(css,".sIFR-root","text-align")=="right"?"subpixel":"pixel";var _cd=_3b.forceTextTransform?_72.extractFromCss(css,".sIFR-root","text-transform",true)||"none":"none";var _ce=_72.extractFromCss(css,".sIFR-root","opacity",true)||"100";var _cf=_be.pixelFont||false;var _d0=_be.ratios||_48;if(parseInt(_c9).toString()!=_c9&&_c9.indexOf("px")==-1){_c9=0}else{_c9=parseInt(_c9)}if(parseFloat(_ce)<1){_ce=100*parseFloat(_ce)}var _d1=null;var _d2="";if(_c6){_72.extractFromCss(css,".sIFR-root","text-align",true)}if(!_be.modifyCss){_d2=_72.cssToString(css);_d1=_3b.fixHover&&_d2.indexOf("%3Ahover")>-1}var _d3=!ua.opera&&_3b.delayCss;var _d4=_be.wmode||"";if(!_d4){if(_be.transparent){_d4="transparent"}else{if(_be.opaque){_d4="opaque"}}}if(_d4=="transparent"){if(!ua.transparencySupport){_d4="opaque"}else{_ca="transparent"}}for(var i=0;i<_c1.length;i++){var _d6=_c1[i];if(!ua.verifiedKonqueror){if(dom.getComputedStyle(_d6,"lineHeight").match(/e\+08px/)){ua.supported=_3b.isEnabled=false;this.removeFlashClass();return}ua.verifiedKonqueror=true}if(dom.hasOneOfClassses([_3d,_3e,_40,_41],_d6)){continue}var _d7=_d6.offsetHeight;var _d8=_d6.offsetWidth;var _d9=dom.getComputedStyle(_d6,"display");if(!_d7||!_d8||_d9==null||_d9=="none"){continue}if(_c5&&ua.gecko){_d6.style.clear="both"}var _da=null;if(_3b.fixWrap&&ua.ie&&_d9=="block"){_da=_d6.innerHTML;dom.setInnerHtml(_d6,"X")}_d8=dom.getStyleAsInt(_d6,"width",ua.ie);if(_d8==0){var _db=dom.getStyleAsInt(_d6,"paddingRight",true);var _dc=dom.getStyleAsInt(_d6,"paddingLeft",true);var _dd=dom.getStyleAsInt(_d6,"borderRightWidth",true);var _de=dom.getStyleAsInt(_d6,"borderLeftWidth",true);_d8=_d6.offsetWidth-_dc-_db-_de-_dd}if(_da&&_3b.fixWrap&&ua.ie){dom.setInnerHtml(_d6,_da)}var _df,_e0;if(!_c9){var _e1=calculate(_d6);_df=Math.min(_45,Math.max(_44,_e1.lineHeight));if(_cf){_df=Math.max(8,8*Math.round(_df/8))}_e0=_e1.lines;if(isNaN(_e0)||!isFinite(_e0)||_e0==0){_e0=1}if(_e0>1&&_c8){_d7+=Math.round((_e0-1)*_c8)}}else{_df=_c9;_e0=1}_d7=Math.round(_e0*_df);if(_c5&&ua.gecko){_d6.style.clear=""}var _e2=dom.create("span");_e2.className=_41;var _e3=_d6.cloneNode(true);for(var j=0,l=_e3.childNodes.length;j-1}var _e6=handleContent(_e3,_cd);if(_be.modifyContentString){_e6=_be.modifyContentString(_e6,_be.selector)}if(_e6==""){continue}var _e7=["content="+_e6,"width="+_d8,"height="+_d7,"fitexactly="+(_c6?"true":""),"tunewidth="+(_be.tuneWidth||""),"tuneheight="+(_be.tuneHeight||""),"offsetleft="+(_be.offsetLeft||""),"offsettop="+(_be.offsetTop||""),"thickness="+(_be.thickness||""),"sharpness="+(_be.sharpness||""),"kerning="+_cb,"gridfittype="+_cc,"zoomsupport="+ua.zoomSupport,"flashfilters="+_c4,"opacity="+_ce,"blendmode="+(_be.blendMode||""),"size="+_df,"zoom="+dom.getZoom(),"css="+_d2,"selectable="+(_be.selectable==null?"true":_be.selectable),"lines="+_e0];var _e8=encodeURI(_e7.join("&"));var _e9="sIFR_callback_"+_4a++;var _ea=new CallbackInfo(_e9,_e7,_be.onReplacement,_d1);window[_e9+"_DoFSCommand"]=(function(_eb){return function(_ec,arg){_eb.handle(_ec,arg)}})(_ea);_d7=Math.round(_e0*getRatio(_df,_d0)*_df)+_49;var _ee=_c7?_d8:"100%";var _ef;if(ua.ie){_ef=["","","","","","","","","","",_e9,"_DoFSCommand(info, args);",""].join("")}else{_ef=[""].join("")}dom.setInnerHtml(_d6,_ef);_ea.flashNode=_d6.firstChild;_ea.html=_ef;_3b.callbacks.push(_ea);if(_be.selector){if(!_3b.callbacks[_be.selector]){_3b.callbacks[_be.selector]=[_ea]}else{_3b.callbacks[_be.selector].push(_ea)}}_d6.appendChild(_e2);dom.addClass(_d3?_3e:_3d,_d6);_ea.setupFixHover()}_66.fragmentIdentifier.restore()};this.getCallbackByFlashElement=function(_f0){for(var i=0;i<_3b.callbacks.length;i++){if(_3b.callbacks[i].id==_f0.getAttribute("id")){return _3b.callbacks[i]}}};function handleContent(_f2,_f3){var _f4=[],_f5=[];var _f6=_f2.childNodes;var i=0;while(i<_f6.length){var _f8=_f6[i];if(_f8.nodeType==3){var _f9=_72.normalize(_f8.nodeValue);_f9=_72.textTransform(_f3,_f9);_f5.push(_f9.replace(/\%/g,"%25").replace(/\&/g,"%26").replace(/\,/g,"%2C").replace(/\+/g,"%2B"))}if(_f8.nodeType==1){var _fa=[];var _fb=_f8.nodeName.toLowerCase();var _fc=_f8.className||"";if(/\s+/.test(_fc)){if(_fc.indexOf(_42)>-1){_fc=_fc.match("(\\s|^)"+_42+"-([^\\s$]*)(\\s|$)")[2]}else{_fc=_fc.match(/^([^\s]+)/)[1]}}if(_fc!=""){_fa.push("class=\""+_fc+"\"")}if(_fb=="a"){var _fd=_f8.getAttribute("href")||"";var _fe=_f8.getAttribute("target")||"";_fa.push("href=\""+_fd+"\"","target=\""+_fe+"\"")}_f5.push("<"+_fb+(_fa.length>0?" ":"")+escape(_fa.join(" "))+">");if(_f8.hasChildNodes()){_f4.push(i);i=0;_f6=_f8.childNodes;continue}else{if(!/^(br|img)$/i.test(_f8.nodeName)){_f5.push("")}}}if(_f4.length>0&&!_f8.nextSibling){do{i=_f4.pop();_f6=_f8.parentNode.parentNode.childNodes;_f8=_f6[i];if(_f8){_f5.push("")}}while(i==_f6.length-1&&_f4.length>0)}i++}return _f5.join("").replace(/\n|\r/g,"")}function CallbackInfo(id,vars,_101,_102){this.id=id;this.vars=vars;this._replacementHandler=_101;this._firedReplacementEvent=!(this._replacementHandler!=null);this._fixHover=_102;this._setClasses=!_3b.delayCss;this.html="";this._pings=0}CallbackInfo.prototype.getFlashElement=function(){return document.getElementById(this.id)};CallbackInfo.prototype.handle=function(info,arg){if(/(FSCommand\:)?resize/.test(info)){var _105=this.getFlashElement();var $=arg.split(/\:|,/);_105.setAttribute($[0],$[1]);if($.length>2){_105.setAttribute($[2],$[3])}if(!this._setClasses){if(!ua.ie&&!ua.opera){dom.addClass(_3f,_105)}dom.removeClass(_3e,_105.parentNode);dom.addClass(_3d,_105.parentNode);this._setClasses=true}if(ua.khtml){var _107=_105.offsetHeight}if(!this._firedReplacementEvent){this._replacementHandler(this);this._firedReplacementEvent=true}}else{if(/(FSCommand\:)?resetmovie/.test(info)){this.resetMovie()}else{if(/(FSCommand\:)?ping/.test(info)){if(this._pings>0){this.setupFixHover()}this._pings++}else{if(this.debugHandler&&/(FSCommand\:)?debug/.test(info)){this.debugHandler(info,arg)}}}}};CallbackInfo.prototype.call=function(type,_109){var _10a=this.getFlashElement();if(!_10a){return}_10a.SetVariable("callbackType",type);_10a.SetVariable("callbackValue",_109);_10a.SetVariable("callbackTrigger",true)};CallbackInfo.prototype.replaceText=function(_10b){_10b=escape(_10b);this.call("replacetext",_10b);this.vars[0]="content="+_10b;this.html=this.html.replace(/(flashvars(=|\"\svalue=)\")[^\"]+/,"$1"+encodeURI(this.vars.join("&")))};CallbackInfo.prototype.resetMovie=function(){var _10c=this.getFlashElement();var node=_10c.parentNode;node.replaceChild(dom.nodeFromHtml(this.html),_10c);this.setupFixHover()};CallbackInfo.prototype.setupFixHover=function(){var _10e=this.getFlashElement();if(!this._fixHover||!_10e){return}var node=_10e.parentNode;if(node.addEventListener){node.addEventListener("mouseout",_72.bind(this,"fixHover"),false)}else{if(node.attachEvent){node.attachEvent("onmouseout",_72.bind(this,"fixHover"))}}};CallbackInfo.prototype.fixHover=function(){this.call("resettext")}}; \ No newline at end of file diff --git a/library/simplepie/demo/for_the_demo/simplepie.css b/library/simplepie/demo/for_the_demo/simplepie.css deleted file mode 100644 index 3753cb96d..000000000 --- a/library/simplepie/demo/for_the_demo/simplepie.css +++ /dev/null @@ -1,397 +0,0 @@ -/* -Theme Name: SimplePie -Theme URI: http://simplepie.org -Description: A simple, yet beautiful theme inspired by several cleanly designed websites. -Version: 1.4 -Author: Ryan Parman -Author URI: http://skyzyx.com -Updated: 21 June 2007 -*/ - - -/********************************************* -HYPERLINK STYLES -*********************************************/ -a { - color:#369; - text-decoration:underline; - padding:0 1px; -} - -a:hover { - color:#fff !important; - background-color:#333; - text-decoration:none; - padding:0 1px; -} - -a.nohover { - text-decoration:none; - border:none; -} - -a.nohover:hover { - background-color:transparent; - border:none; -} - -a.namelink { - padding:0; - margin:0; - overflow:hidden; - height:1px; -} - -h4 a, -.sample_feeds a { - color:#000; -} - - -/********************************************* -GENERAL STYLES -*********************************************/ -body { - /*font:12px/18px Verdana, sans-serif;*/ - font:14px/1.5em "Lucida Grande", Tahoma, sans-serif; - letter-spacing:0px; - color:#333; - background-color:#fff; - margin:0; - padding:0; -} - -div#site { - width:600px; - margin:50px auto 0 auto; -} - -h1#logo { - margin:0; - padding:0; - text-align:center; -} - -h1#logo a, -h1#logo a:hover { - background-color:transparent; - text-decoration:none; - padding:0; -} - -h2.image { - margin:0; - padding:0; - text-align:center; -} - -h3 { - margin:20px 0 0 0; - padding:0; - font-size:1.5em; -} - -h4 { - margin:20px 0 0 0; - padding:0; - font-size:1.2em; - letter-spacing:-1px; -} - -h5 { - margin:10px 0 0 0; - padding:0; - font-size:1em; - font-weight:bold; -} - -em { - font-style:normal; - background-color:#ffc; -} - -p { - margin:0; - padding:5px 0; -} - -ul, ol { - margin:10px 0 10px 20px; - padding:0 0 0 15px; -} - -ul li, ol li { - margin:0 0 7px 0; - padding:0 0 0 3px; -} - -form { - margin:0; - padding:0; -} - -code { - font-size:1em; - background-color:#f3f3ff; - color:#000; -} - -div#site pre { - background-color:#f3f3ff; - color:#000080; - border:1px dotted #000080; - overflow:auto; - padding:3px 5px; -} - -blockquote { - font-size:1em; - color:#666; - border-left:4px solid #666; - margin:10px 0 10px 30px; - padding:0 5px 0 10px; - background:#f3f3f3 url(background_blockquote.png) repeat top left; -} - -input, select, textarea { - font-size:12px; - line-height:1.2em; - padding:2px; -} - -input[type=text], select, textarea { - background-color:#e9f5ff; - border:1px solid #333; -} - -input[type=text]:focus, select:focus, textarea:focus { - background-color:#ffe; -} - -.clearLeft {clear:left;} -.clearRight {clear:right;} -.clearBoth {clear:both;} -.hide {display:none;} - - -/********************************************* -NAVIGATION STYLES -*********************************************/ -div#header { - background:#fff url(top_gradient.gif) repeat-x top left; - margin:0; - padding:0; -} - -div#header form { - margin:0; - padding:0; -} - -div#header div#headerInner { - margin:0; - padding:0; -} - -div#header div#headerInner div#logoContainer {} - -div#header div#headerInner div#logoContainerInner { - width:550px; - margin:0 auto; - padding:20px; -} - -div#header div#headerInner div#logoContainer div#logo { - float:left; - width:200px; -} - -div#header div#headerInner div#logoContainer div#logo a, -div#header div#headerInner div#logoContainer div#logo a:hover { - border:none; - background:none; -} - -div#header div#headerInner div#logoContainer div#feed { - float:right; - width:300px; - text-align:right; - padding:10px 0 0 0; -} - -div#header div#headerInner div#logoContainer div#feed input.text { - width:60%; -} - -div#header div#headerInner div#menu { - background:#eee url(background_menuitem_shadow.gif) repeat-x top left; - border-top:2px solid #ccc; - border-bottom:1px solid #ddd; - text-align:center; -} - -div#header div#headerInner div#menu table { - width:auto; - margin:0 auto; -} - -div#header div#headerInner div#menu ul { - display:block; - width:100%; - margin:0 auto; - padding:0; - font-size:12px; -} - -div#header div#headerInner div#menu ul li { - display:block; - float:left; -} - -div#header div#headerInner div#menu ul li a { - display:block; - margin:-2px 0 0 0; - padding:5px 7px 8px 7px; - text-decoration:none; - color:#666 !important; - background-color:transparent; -} - -div#header div#headerInner div#menu ul li a:hover { - display:block; - margin:-2px 0 0 0; - padding:5px 7px 8px 7px; - text-decoration:none; - color:#666; - background:#fff url(background_menuitem_off.gif) no-repeat bottom right; -} - -body#bodydemo div#header div#headerInner div#menu ul li#demo a { - display:block; - margin:-2px 0 0 0; - padding:5px 7px 8px 7px; - text-decoration:none; - color:#333; - font-weight:bold; - background:#fff url(background_menuitem.gif) no-repeat bottom right; -} - - -/********************************************* -CONTENT STYLES -*********************************************/ -div.chunk { - margin:20px 0 0 0; - padding:0 0 10px 0; - border-bottom:1px solid #ccc; -} - -div.topchunk { - margin:0 !important; -} - -.footnote, -.footnote a { - font-size:12px; - line-height:1.3em; - color:#aaa; -} - -.footnote em { - background-color:transparent; - font-style:italic; -} - -.footnote code { - background-color:transparent; - font:11px/14px monospace; - color:#aaa; -} - -p.subscribe { - background-color:#f3f3f3; - font-size:12px; - text-align:center; -} - -p.highlight { - background-color:#ffc; - font-size:12px; - text-align:center; -} - -p.sample_feeds { - font-size:12px; - line-height:1.2em; -} - -div.sp_errors { - background-color:#eee; - padding:5px; - text-align:center; - font-size:12px; -} - -.noborder { - border:none !important; -} - -img.favicon { - margin:0 4px -2px 0; - width:16px; - height:16px; -} - -p.favicons a, -p.favicons a:hover { - border:none; - background-color:transparent; -} - -p.favicons img { - border:none; -} - - -/********************************************* -DEMO STYLES -*********************************************/ -div#sp_input { - background-color:#ffc; - border:2px solid #f90; - padding:5px; - text-align:center; -} - -div#sp_input input.text { - border:1px solid #999; - background:#e9f5ff url(feed.png) no-repeat 4px 50%; - width:75%; - padding:2px 2px 2px 28px; - font:18px/22px "Lucida Grande", Verdana, sans-serif; - font-weight:bold; - letter-spacing:-1px; -} - -form#sp_form { - margin:15px 0; -} - -div.focus { - margin:0; - padding:10px 20px; - background-color:#efe; -} - -p.sample_feeds { - text-align:justify; -} - - -/********************************************* -SIFR STYLES -*********************************************/ -.sIFR-active h3.header { - visibility:hidden; - line-height:1em; -} diff --git a/library/simplepie/demo/for_the_demo/sleight.js b/library/simplepie/demo/for_the_demo/sleight.js deleted file mode 100644 index 4b5058e9a..000000000 --- a/library/simplepie/demo/for_the_demo/sleight.js +++ /dev/null @@ -1,31 +0,0 @@ -/********************************************************** -Sleight -(c) 2001, Aaron Boodman -http://www.youngpup.net -**********************************************************/ - -if (navigator.platform == "Win32" && navigator.appName == "Microsoft Internet Explorer" && window.attachEvent) -{ - document.writeln(''); - window.attachEvent("onload", fnLoadPngs); -} - -function fnLoadPngs() -{ - var rslt = navigator.appVersion.match(/MSIE (\d+\.\d+)/, ''); - var itsAllGood = (rslt != null && Number(rslt[1]) >= 5.5); - - for (var i = document.images.length - 1, img = null; (img = document.images[i]); i--) - { - if (itsAllGood && img.src.match(/\.png$/i) != null) - { - var src = img.src; - var div = document.createElement("DIV"); - div.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizing='scale')" - div.style.width = img.width + "px"; - div.style.height = img.height + "px"; - img.replaceNode(div); - } - img.style.visibility = "visible"; - } -} diff --git a/library/simplepie/demo/for_the_demo/source_files/place_audio_fireworksfile.png b/library/simplepie/demo/for_the_demo/source_files/place_audio_fireworksfile.png deleted file mode 100644 index 2bfd87d0ce14c424fd3b72377b085bb0b1510bd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39177 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 diff --git a/library/simplepie/demo/for_the_demo/source_files/place_video_fireworksfile.png b/library/simplepie/demo/for_the_demo/source_files/place_video_fireworksfile.png deleted file mode 100644 index d0629769cfec742664ec0b739d93ebf4418d15e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115826 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

~kgknkHRvCi+5lr|NL) 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 - - =:history - * IFR: Shaun Inman - * sIFR 1: Mike Davidson, Shaun Inman and Tomas Jogin - * sIFR 2: Mike Davidson, Shaun Inman, Tomas Jogin and Mark Wubben - - =:license - This software is licensed and provided under the CC-GNU LGPL. - See -*/ - -import TextField.StyleSheet; - -class SifrStyleSheet extends TextField.StyleSheet { - public var fontSize; - public var latestLeading = 0; - - public function parseCSS(cssText:String) { - var native = new TextField.StyleSheet(); - var parsed = native.parseCSS(cssText); - - if(!parsed) return false; - - var selectors = native.getStyleNames(); - for(var i = selectors.length - 1; i >= 0; i--) { - var selector = selectors[i]; - var nativeStyle = native.getStyle(selector); - var style = this.getStyle(selector) || nativeStyle; - if(style != nativeStyle) { - for(var property in nativeStyle) style[property] = nativeStyle[property]; - } - this.setStyle(selector, style); - } - - return true; - } - - // Apply leading to the textFormat. Much thanks to . - private function applyLeading(format, leading) { - this.latestLeading = leading; - - if(leading >= 0) { - format.leading = leading; - return format; - } - - // Workaround for negative leading, which is ignored otherwise. - var newFormat = new TextFormat(null, null, null, null, null, null, null, null, null, null, null, null, leading); - for(var property in format) if(property != 'leading') newFormat[property] = format[property]; - - return newFormat; - } - - public function transform(style) { - var format = super.transform(style); - if(style.leading) format = applyLeading(format, style.leading); - if(style.letterSpacing) format.letterSpacing = style.letterSpacing; - // Support font sizes relative to the size of .sIFR-root. - if(this.fontSize && style.fontSize && style.fontSize.indexOf('%')) { - format.size = this.fontSize * parseInt(style.fontSize) / 100; - } - format.kerning = _root.kerning == 'true' || !(_root.kerning == 'false') || sIFR.defaultKerning; - return format; - } -} \ No newline at end of file diff --git a/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/_README_.txt b/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/_README_.txt deleted file mode 100644 index 2b9d32d20..000000000 --- a/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/_README_.txt +++ /dev/null @@ -1,12 +0,0 @@ -This is a pre-release nightly of sIFR 3 (r245 to be exact). We (the SimplePie team) will be updating the -sIFR code and font files from time to time as new releases of sIFR 3 are made available. - -In this folder you'll find a few Flash 8 files. The only one of you might want to mess with is sifr.fla. - * Open it up - * Double-click the rectangle in the middle - * Select all - * Change the font - -More information about sIFR 3 can be found here: - * http://dev.novemberborn.net/sifr3/ - * http://wiki.novemberborn.net/sifr3/ \ No newline at end of file diff --git a/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/options.as b/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/options.as deleted file mode 100644 index 4d371954b..000000000 --- a/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/options.as +++ /dev/null @@ -1,12 +0,0 @@ -// MTASC only parses as-files with class definitions, so here goes... -class Options { - public static function apply() { - sIFR.fromLocal = true; - sIFR.domains = ['*']; - - // Parsing `p.foo` might not work, see: - // Appearantly you have to use hex color codes as well, names are not supported! - - sIFR.styles.parseCSS('.foo { text-decoration: underline; }'); - } -} diff --git a/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/sIFR.as b/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/sIFR.as deleted file mode 100644 index 4902e003f..000000000 --- a/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/sIFR.as +++ /dev/null @@ -1,359 +0,0 @@ -/*=:project - scalable Inman Flash Replacement (sIFR) version 3. - - =:file - Copyright: 2006 Mark Wubben. - Author: Mark Wubben, - - =:history - * IFR: Shaun Inman - * sIFR 1: Mike Davidson, Shaun Inman and Tomas Jogin - * sIFR 2: Mike Davidson, Shaun Inman, Tomas Jogin and Mark Wubben - - =:license - This software is licensed and provided under the CC-GNU LGPL. - See -*/ - -import SifrStyleSheet; - -class sIFR { - public static var DEFAULT_TEXT = 'Rendered with sIFR 3, revision 245'; - public static var CSS_ROOT_CLASS = 'sIFR-root'; - public static var DEFAULT_WIDTH = 300; - public static var DEFAULT_HEIGHT = 100; - public static var DEFAULT_ANTI_ALIAS_TYPE = 'advanced'; - public static var MARGIN_LEFT = -3; - public static var PADDING_BOTTOM = 5; // Extra padding to make sure the movie is high enough in most cases. - public static var LEADING_REMAINDER = 2; // Flash uses the specified leading minus 2 as the applied leading. - - public static var MAX_FONT_SIZE = 126; - public static var ALIASING_MAX_FONT_SIZE = 48; - - //= Holds CSS properties and other rendering properties for the Flash movie. - // *Don't overwrite!* - public static var styles:SifrStyleSheet = new SifrStyleSheet(); - //= Allow sIFR to be run from localhost - public static var fromLocal:Boolean = true; - //= Array containing domains for which sIFR may render text. Used to prevent - // hotlinking. Use `*` to allow all domains. - public static var domains:Array = []; - //= Whether kerning is enabled by default. This can be overriden from the client side. - // See also . - public static var defaultKerning:Boolean = true; - //= Default value which can be overriden from the client side. - // See also . - public static var defaultSharpness:Number = 0; - //= Default value which can be overriden from the client side. - // See also . - public static var defaultThickness:Number = 0; - //= Default value which can be overriden from the client side. - // See also . - public static var defaultOpacity:Number = -1; // Use client settings - //= Default value which can be overriden from the client side. - // See also . - public static var defaultBlendMode:Number = -1; // Use cliest settings - //= Overrides the grid fit type as defined on the client side. - // See also . - public static var enforcedGridFitType:String = null; - //= If `true` sIFR won't override the anti aliasing set in the Flash IDE when exporting. - // Thickness and sharpness won't be affected either. - public static var preserveAntiAlias:Boolean = false; - //= If `true` sIFR will disable anti-aliasing if the font size is larger than `ALIASING_MAX_FONT_SIZE`. - // This setting is *independent* from `preserveAntiAlias`. - public static var conditionalAntiAlias:Boolean = true; - //= Sets the anti alias type. By default it's `DEFAULT_ANTI_ALIAS_TYPE`. - // See also . - public static var antiAliasType:String = null; - //= Flash filters can be added to this array and will be applied to the text field. - public static var filters:Array = []; - //= A mapping from the names of the filters to their actual objecs, used when transforming - // filters defined on the client. You can add additional filters here so they'll be supported - // when defined on the client. - public static var filterMap:Object = { - DisplacementMapFilter : flash.filters.DisplacementMapFilter, - ColorMatrixFilter : flash.filters.ColorMatrixFilter, - ConvolutionFilter : flash.filters.ConvolutionFilter, - GradientBevelFilter : flash.filters.GradientBevelFilter, - GradientGlowFilter : flash.filters.GradientGlowFilter, - BevelFilter : flash.filters.BevelFilter, - GlowFilter : flash.filters.GlowFilter, - BlurFilter : flash.filters.BlurFilter, - DropShadowFilter : flash.filters.DropShadowFilter - }; - - private static var instance; - - private var textField; - private var content; - private var realHeight; - private var originalHeight; - private var currentHeight; - private var fontSize; - private var tuneWidth; - private var tuneHeight; - - - - //= Sets the default styles for `sIFR.styles`. This method is called - // directly in `sifr.fla`, before options are applied. - public static function setDefaultStyles() { - sIFR.styles.parseCSS([ - '.', CSS_ROOT_CLASS, ' { color: #000000; }', - 'strong { display: inline; font-weight: bold; } ', - 'em { display: inline; font-style: italic; }', - 'a { color: #0000FF; text-decoration: underline; }', - 'a:hover { color: #0000FF; text-decoration: none; }' - ].join('')); - } - - //= Validates the domain sIFR is being used on. - // Returns `true` if the domain is valid, `false` otherwise. - public static function checkDomain():Boolean { - if(sIFR.domains.length == 0) return true; - - var domain = (new LocalConnection()).domain(); - if(sIFR.fromLocal) sIFR.domains.push('localhost'); - - for(var i = 0; i < sIFR.domains.length; i++) { - var match = sIFR.domains[i]; - if(match == '*' || match == domain) return true; - - var wildcard = match.lastIndexOf('*'); - if(wildcard > -1) { - match = match.substr(wildcard + 1); - var matchPosition = domain.lastIndexOf(match); - if(matchPosition > -1 && (matchPosition + match.length) == domain.length) return true; - } - } - - return false; - } - - //= Runs sIFR. Called automatically. - public static function run() { - var holder = _root.holder; - var content = checkDomain() ? unescape(_root.content) : DEFAULT_TEXT - if(content == 'undefined' || content == '') { - content = DEFAULT_TEXT; - fscommand('resetmovie', ''); - } else fscommand('ping', ''); - - // Sets stage parameters - Stage.scaleMode = 'noscale'; - Stage.align = 'TL'; - Stage.showMenu = false; - - // Other parameters - var opacity = parseInt(_root.opacity); - if(!isNaN(opacity)) holder._alpha = sIFR.defaultOpacity == -1 ? opacity : sIFR.defaultOpacity; - else holder._alpha = 100; - _root.blendMode = sIFR.defaultBlendMode == -1 ? _root.blendmode : sIFR.defaultBlendMode; - - sIFR.instance = new sIFR(holder.txtF, content); - // This should ignore resizes from the callback. Disabled for now. -/* if(_root.zoomsupport == 'true') Stage.addListener({onResize: function() { sIFR.instance.scale() }});*/ - - // Setup callbacks - _root.watch('callbackTrigger', function() { - sIFR.callback(); - return false; - }); - } - - private static function eval(str) { - var as; - - if(str.charAt(0) == '{') { // Ah, we need to create an object - as = {}; - str = str.substring(1, str.length - 1); - var $ = str.split(','); - for(var i = 0; i < $.length; i++) { - var $1 = $[i].split(':'); - as[$1[0]] = sIFR.eval($1[1]); - } - } else if(str.charAt(0) == '"') { // String - as = str.substring(1, str.length - 1); - } else if(str == 'true' || str == 'false') { // Boolean - as = str == 'true'; - } else { // Float - as = parseFloat(str); - } - - return as; - } - - private function applyFilters() { - var $filters = this.textField.filters; - $filters = $filters.concat(sIFR.filters); - - var $ = _root.flashfilters.split(';'); // name,prop:value,...; - for(var i = 0; i < $.length; i++) { - var $1 = $[i].split(','); - - var newFilter = new sIFR.filterMap[$1[0]](); - for(var j = 1; j < $1.length; j++) { - var $2 = $1[j].split(':'); - newFilter[$2[0]] = sIFR.eval(unescape($2[1])); - } - - $filters.push(newFilter); - } - - this.textField.filters = $filters; - } - - private function sIFR(textField, content) { - this.textField = textField; - this.content = content; - - var offsetLeft = parseInt(_root.offsetleft); - textField._x = MARGIN_LEFT + (isNaN(offsetLeft) ? 0 : offsetLeft); - var offsetTop = parseInt(_root.offsettop); - if(!isNaN(offsetTop)) textField._y += offsetTop; - - tuneWidth = parseInt(_root.tunewidth); - if(isNaN(tuneWidth)) tuneWidth = 0; - tuneHeight = parseInt(_root.tuneheight); - if(isNaN(tuneHeight)) tuneHeight = 0; - - textField._width = tuneWidth + (isNaN(parseInt(_root.width)) ? DEFAULT_WIDTH : parseInt(_root.width)); - textField._height = tuneHeight + (isNaN(parseInt(_root.height)) ? DEFAULT_HEIGHT : parseInt(_root.height)); - textField.wordWrap = true; - textField.selectable = _root.selectable == 'true'; - textField.gridFitType = sIFR.enforcedGridFitType || _root.gridfittype; - this.applyFilters(); - - // Determine font-size and the number of lines - this.fontSize = parseInt(_root.size); - if(isNaN(this.fontSize)) this.fontSize = 26; - styles.fontSize = this.fontSize; - - if(!sIFR.preserveAntiAlias && (sIFR.conditionalAntiAlias && this.fontSize < ALIASING_MAX_FONT_SIZE - || !sIFR.conditionalAntiAlias)) { - textField.antiAliasType = sIFR.antiAliasType || DEFAULT_ANTI_ALIAS_TYPE; - } - - if(!sIFR.preserveAntiAlias || !isNaN(parseInt(_root.sharpness))) { - textField.sharpness = parseInt(_root.sharpness); - } - if(isNaN(textField.sharpness)) textField.sharpness = sIFR.defaultSharpness; - - if(!sIFR.preserveAntiAlias || !isNaN(parseInt(_root.thickness))) { - textField.thickness = parseInt(_root.thickness); - } - if(isNaN(textField.thickness)) textField.thickness = sIFR.defaultThickness; - - // Set font-size and other styles - sIFR.styles.parseCSS(unescape(_root.css)); - - var rootStyle = styles.getStyle('.sIFR-root') || {}; - rootStyle.fontSize = this.fontSize; // won't go higher than 126! - styles.setStyle('.sIFR-root', rootStyle); - textField.styleSheet = styles; - - this.write(content); - this.repaint(); - } - - private function repaint() { - var leadingFix = this.isSingleLine() ? sIFR.styles.latestLeading : 0; - if(leadingFix > 0) leadingFix -= LEADING_REMAINDER; - - // Flash wants to scroll the movie by one line, by adding the fontSize to the - // textField height this is no longer happens. We also add the absolute tuneHeight, - // to prevent a negative value from triggering the bug. We won't send the fake - // value to the JavaScript side, though. - textField._height = textField.textHeight + PADDING_BOTTOM + this.fontSize + Math.abs(tuneHeight) + tuneHeight - leadingFix; - this.realHeight = textField._height - this.fontSize - Math.abs(tuneHeight); - var arg = 'height:' + this.realHeight; - if(_root.fitexactly == 'true') arg += ',width:' + (textField.textWidth + tuneWidth); - fscommand('resize', arg); - - this.originalHeight = textField._height; - this.currentHeight = Stage.height; - - textField._xscale = textField._yscale = parseInt(_root.zoom); - } - - private function write(content) { - this.textField.htmlText = ['

', - content, '

' - ].join(''); - } - - private function isSingleLine() { - return Math.round((this.textField.textHeight - sIFR.styles.latestLeading) / this.fontSize) == 1; - } - - //= Scales the text field to the new scale of the Flash movie itself. - public function scale() { - this.currentHeight = Stage.height; - var scale = 100 * Math.round(this.currentHeight / this.originalHeight); - textField._xscale = textField._yscale = scale; - } - - private function calculateRatios() { - var strings = ['X', 'X
X', 'X
X
X', 'X
X
X
X']; - var results = {}; - - for(var i = 1; i <= strings.length; i++) { - var size = 6; - - this.write(strings[i - 1]); - while(size < MAX_FONT_SIZE) { - var rootStyle = sIFR.styles.getStyle('.sIFR-root') || {}; - rootStyle.fontSize = size; - sIFR.styles.setStyle('.sIFR-root', rootStyle); - this.textField.styleSheet = sIFR.styles; - this.repaint(); - var ratio = (this.realHeight - PADDING_BOTTOM) / i / size; - if(!results[size]) results[size] = ratio; - else results[size] = ((i - 1) * results[size] + ratio) / i; - size++; - } - } - - var sizes = [], ratios = []; - var ratiosToSizes = {}, sizesToRatios = {}; - - for(var size in results) { - if(results[size] == Object.prototype[size]) continue; - var ratio = results[size]; - ratiosToSizes[ratio] = Math.max(ratio, parseInt(size)); - } - - for(var ratio in ratiosToSizes) { - if(ratiosToSizes[ratio] == Object.prototype[ratio]) continue; - sizesToRatios[ratiosToSizes[ratio]] = roundDecimals(ratio, 2); - sizes.push(ratiosToSizes[ratio]); - } - - sizes.sort(function(a, b) { return a - b; }); - for(var j = 0; j < sizes.length - 1; j++) ratios.push(sizes[j], sizesToRatios[sizes[j]]); - ratios.push(sizesToRatios[sizes[sizes.length - 1]]); - - fscommand('debug:ratios', '[' + ratios.join(',') + ']'); - } - - private function roundDecimals(value, decimals) { - return Math.round(value * Math.pow(10, decimals)) / Math.pow(10, decimals); - } - - public static function callback() { - switch(_root.callbackType) { - case 'replacetext': - sIFR.instance.content = _root.callbackValue; - sIFR.instance.write(_root.callbackValue); - sIFR.instance.repaint(); - break; - case 'resettext': - sIFR.instance.write(''); - sIFR.instance.write(sIFR.instance.content); - break; - case 'ratios': - sIFR.instance.calculateRatios(); - break; - } - } -} diff --git a/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/sifr.fla b/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/sifr.fla deleted file mode 100644 index 2aa3f647f4902e189eba92767e211ed0ee15d8b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47104 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 INr#WW0e?>J6951J diff --git a/library/simplepie/demo/for_the_demo/top_gradient.gif b/library/simplepie/demo/for_the_demo/top_gradient.gif deleted file mode 100644 index f77bd38f97bb39339a19d79a31dbdb97c279b5b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1378 zcmd6lc~6rE0Eep}#c47U9WWK`hEW7OG8bTRe`s)sfNseg;G)pYMapGdJW#VuCek9{ zqE-vxtPb1Kavv>F4iP9vfudE~(w4rx-lOf?`!2N8Z?PxO2Y8a-@6_p(q;G!t3iA^N z#9;jXz`EbRw(j?>`#o#x-nDhNZ_VXhb9#LakI(M$+1y^M+iP)o%r1|~A0a_edi$iU;Ys_|)$)+^f0FzB&v;s!kDr%LZR;j@vGgwyi zW{J)$)|o_zX&EuShmG$(2%$m*NsmB@?| znFe4U08c5PNd+{afL^ac^z6N|`{hJZ#e>SK>W2@`JbL_u{PY>6hMZnk-_Y39 zOnu&%(ejc;XS6a|^t6u7uI`@RzW(mh1A{}{;gQiX?y1)klT*Cunc1n-`GrNn(wnzJ zLCUg7ELoAt7kQGli6am*&UW-x5w-I@PvTxe(0{$F6ww$=(g~! zue+X4kiw$V8r)$OQ&o{i3uH6hmw0<{$(6fK_q5ECqyJ=FnC*GVuQ_swZ8*_OTc}UE zrjy+!lLXDj%RY%p>mw{hrIKSW&h@nl>FGC88`Juk?^)TsnG56nEKw(ZqB6?&8A;Mh z5Hc_F*~Ke6uLjg}jp>{YIrmyIEa!7N6=S7ATXts*Tm^PiY>Ug8ALv$3SLLTRWeoOc z`L##0n#KovApteHYWMniA|hn`$jVt5x}l5gy2Nif!)2q=-duQffy*%|UX{6sCx!KSre?q9NU8?^Lqdh^+lJN9sKZ=qswgzGX%&sXgEestJlgM~G@Fa@uEm;^G^|9tDLRfirAIiPuTGCW`NIJuIl2|US2 zKs4kZQY3pr&t>LopJiWe)l#yEfVKutJOI}IM)@4X5@@YpT@f1r>kIGTpoZ(q`B396 z@O&Qj4<`aOmxjc`)Vo*k@bij&O!!50LR}2@QA#Y*@-(vmc}XsyBD98^I)qLouH=Wb zPzrRd3>s6%r2h)&SY5nWeOur14*jM9kg4w&cIxz<+@EoVuF3F1L-))+mZ4`pp+0`o zQc4`!_b#&#?H6WJQMT-+9_0W;X?w7SQfM56X)NOqbQUmj&Ad3%uzh*w;b1q&GL5b| z^`k#${j*ll)Ag``@F~fyZfB)=kqz|JRaw9{yFDyn#cR$ zn%8>0uIqYT*Y$k8UsD+Hw*zcrfE)@eL;(3`j{fVfzkqu?R}1nb#TEGAh>aBmjs!$l z1nl>X42f`whz$ui0{*@sA%4F8!PMBW0QmLI)i)$E;9qs&L4kn*;jk+#BIr=)5%3KQ z3yFpB$WX}V2X6RZ|9C+r9}T=HibOsJc+tFEvYfw||MeG(1=;`6ntQD^57PQS$Ka(% zz+a+a+5jjxiQ;t)2;b)$>I>oU8_a?r$`DnJ%0-uOeZXL_f!MoPDefKIuG|N>=^VZrn@gBm~O;l+RKaSEyCQD}^haQ@X44my(jQt@4U8 zk4lqDu<9Ar@2dQ2a%!8@tkt~KPN~(aJyXLG-HC<7yF?fDBkJeW_iEH?2!pWTZ^C8o z6aLhv43F#YI-a3!A46dBpZ^J5O+2!#4GYJ1(sPkU^K$aVM}K!}mk7AK<#*?u-~4@1 zv1DeTTmo|sf78sR1m>0B8ygr%!w)aD+~ZZ9UtLOxX-$| zsbykyb;9xPmS`EJGp3}u7j&Up;n5QP-%W|S9C|)lI=8fQy~wM)`*91D(}$aFH#F+X zez$&B*Z(!Df+11eer@x(o8!-Uzi7WJrs=z*$jFq7;zpP0z+G5n(NXW1+|ib$X1d2~ zSmk1q5Nme(^Q_KKEVB>y`rg$&w+}O>$@KhCX5>?I``phlT3=8fguTddk=`8f=Y-fp zhv5j_3L|sr5Y~X>5F5}UR1n+4lDOtUHEPeV&xv|bRN8Dx5p=$XG7I6Ju_@kgGF{1w zO`ggjR(TYX4v`vNy6WwgI$g%^XW?+e%ngYWLZanLMkTOMKv<&Sx9)-$hj76@dN(j> zMK7%Y&07MIc^0CjRACEl{sm!)O4938Yq)y8Gr}d-aAoPMY;{A0ZJdAY)oPO$POvA0 zqpSIC?EYXthhD|l;l5$)_*($onGIZri>&IyJhuS$iaKEPQ^m>@CsbH}aQH>3V`hiw z6u4*sccv9S;;MAZj+I` zG+Gk3CY?)=c16Iz53rHOz#ZL&_l`6K;QxyP%3(hmsb|?@`x^oT^fmsXQn!z;FGzCM z@}MevSn|1gtv@M|$Jc5}{aQl>%{&6SO!V$n8;zz^e}1Y%F(%0?kHQ;;egs&X2;d2k z6YKPyD$5ukraTraZ?qxX^q@Q_AQX7aV&t2JL*+W!<~fWz*GbnNA^a%rTjUQCf7`)} znK^TobOuUwbFUET9maUX?AFqf%8Ae>RGd_rS1yD9MJFo#Q1IAParZ`5#K=s6W9i>!TojaJcZxkzS0yJG9Xgkgg zzrX+fLVdH?MTl) z{tYJ;kSS(=>W?5MeY5>h?$Byi?me=idXw5q!xfFhi`pqCoR9jURCkYBj0d1+C^UXc z8^BZ}wx&BgQtM_$X&c!+>WL4KcE}JL9_%)#HWKU}d(V0Z>7~QUdX4v#b%0-}7nx(h zM7t(#!ew)GG4_?|iEEt`=j)cReA}WgP79h$eCdl0U0LZIY+Chln)dE&n8SJf6{-55 zUn%;JB>&FFv{f%>kISZmA{g110!bWy^TEiV;i$USM@mvt^(BLb7+0?s?q{+3UBNyJ zw5qgRIb2Xw^%TM%r35K?|FN|A*m9Cmdz2IZ?AMu=)BZdhH%HJtLI)oA`GG+;Tf)v>=y|Qo z7Iusrt9B|uISfeWOQ6kBfHiKs$)=&HR;KSkTlrAO^E?KcL;_wvye*wcBQme)q?Ntx z>o0yy&pC3kpae+tDX>2AXSD*)qigHR%ARlCVY?f5k{G~1jWv+H^Ug>Z_yF52{;HJg zw>|g*z`E{(4KL4*erwNU0FCAYlt-uel%0i?a=g~|2WIoZ(UcF zsAv9-DVKCgqZ~iCJ)+hERBSy-a(S{L)6153s(-yPWydClTB~gO(uxml?8ee4M^1~I zk*-AbsPUYNEjI(KI_GmgeMo1UujA`9&*kN>=8(bMfD8@0Q!b4LJ&va|U2%~q zv^d~Ca_eO5rIg!A7G7+QUB17k=N+`wDl1zNXCtZuLTM$iqi(t{bZW$=qfM$LfVVyOOY{T;B z3xras8TWNS9Zx`a9(1s@thP6MK{NJjpnh0%aQq{G5W?*rJbw^wKyvp1yNxEfjh{1A z?MvGqW!xoYUuyvDr4l&X$R0|k&obL^N1oYtzY;B)_^3|+HXhK6SQ5KMjQ@v<7S6OS zgeFzxsUbn9HhAT>l2MdiK#TH>T3gFu_ids!n~&_nJ11|AP5P`PznuEOJItgD** z3+B+SWviX$wz(1dnT=VT9kh7xnnN7HuC;L@o3(iEd~)1G%g?VN^PhP9hr69cBeqA= znW!U6E`P*~&iuAKVBRJCg`@sCLp3^JQf3rqtCY6RB{#BeC9bxXhOh zdLKwNS2{L5VVmxE=y^;%+;5y@HcS!ZH{%5?aSXH^=WL%ZT6LN^u{SPyYBX{-QR_nu;XIVD}lK(qRRzhy41j(w$>ZNa*&Q9g}pV5g9JKq0OKPM+v1#hu0_ zulw|Zwbib~PcygXrfjY`1BjkvR5Q1&r_MeC<8Eu{9x-LpyEoj0dL5$XpXdNh7*KIL zJ!o^XfjRmoHTb0s?ho5hUObEe$~XhPBqdh2BdbJkK;yf@#+}tpKjcb4^D8g^@X3gu zrG{+&*~i&IX$;I%IZ#5qGSu#tu}o&mE_BF;h8JtTt?z*{YfwPtq%igs^9A*A?`keQ zJN6sk=NYI?Nwb4QIRW?k(zYVW<42X5dwFk7L8&cB39?R^)2%e^IXTC|duDUOOpTYp z>$siG!D8FCD99~Vek&Uf9UbIIi+pto@k(9iF$?t?{R`!Y6faC6j;Mw;ZqmHHt*lTa zq@{npYNulfN`?jeB}DsjW?55EPU{O-W!iY_hOL>jkguBo%cO#+#(fD*k3u7javyN5 zVSr=`V^pX2PvCN+0VyZX4pJG~|_7T<+WIr&Hyu z-~%-*zzAzihcK`4rD_2BBtUQnU3%%T;RChZx>v%7%0oj+Q1K1qwXLB2kmJ0kxoz1g zQtJF7dhD0BL6b`JpSzULya#llF(|86R#M^)&Mb8X$@UCV>@a>hVq#^!myo}bB!O5vc=91^%KfydIx?u_wl)=@bkV8J7e6%` zwx0l4c~{_flHOpESMb@~HXX3GFM&5qizXk|BIz4VJ$$Qub6SAYZ^SGxZR6#C?B*52 z1dY$Pnpv0RO_~iUWs?nR4v*8;N1O+oY6-ebQLU1fG;UiJASRTYNPNdj08JJd-6g$q zcaqK2p6oRI+s#uOs!e*YNdnGM7|gsCa+TkvN~9E{a&UG`bTb3JpW{&OHd}rF-$lJW zojM?!y>IcPk$;t`cgufi@W4uJ^6+xBY15qd&Zd;Rjnivr0|$x;cOQ*Zyf}RJpnw4} zs^-PS)zZny$L2!QiyjR~i>0}Sj09C&)KkUbvw`$WsQ8Z1mdSG`O@l>dZ#TE@0?r`2 z4eXIY)V*HV*9XbBr^UCe^t-ebct4lK*DdbkXz%@27CH#l-94l;6m>6wY%I5xTktiN4gmhMSj!P zCVO^pk+QbrxS!V@MZfY^WK0CN-4Q8ZLn+Vh#6odKg%e6Ks6FV*WEm zkvCd1cftDfnV+(PHZ}(?nmyL1kjj=JZxk@ihiNBi1FonG9*14s0+ers&$vn5%_|1H zdkO3j{y{sOG3*oJQ8rv)Y zUOEdDBwDGb<$8kT1RsCO9e7z{Y)HM18B0y+O+>Hc%Lr`=aVpz? zm!(yhcBVK7aDD(c1Qlvm^%>x4%RrssZof`6xcmA8;GD>y^K$ys2CaRnH5}jf!44pv z@W-p;)NRYv@2~%qI5{q)9k5s7eT+it0{cx_iT4G5`>IQZY^~3?9v6CL+H)+<-bfOO zAI39^lqw|yl5jfd4m$U`uO#am#xEGS`hp(1cTDozQeOiE!AHAo>jWO%r;KDAF88Ds zRFr@$o(!iqqz8_M>K5*0{1(Ebwk28wpO$s5mI(u`d}N3IbhR#lD=kAN8Mw@}mZ9)> zK24XO*QWh>Hy?y>{;jDmQ~l1%fEdqo1^Jl5%xLuvnFCHiX*irQr09^nD}xVJ5YQJ7 zY4SPFKBP65x}5F&^5xHw2lb0Y;8AK{Jn{{#>p}vQ$MIIu=iil<1Z~}?ZWe8#7$NSZ z>jHt3!X9K~(=U*LnJLb?-0sQM@VrLo=E3I`^s8n_wy8`4K5==H4>P%%@w0yZ%21zj z$)s(*XDp&>Vk84~lzZMSY@ZXFmA6GZTW7gKNXTDb&vcJLuaa|wpXkg%N6OP@=K@@! z+OUkbxnn{$HVo`0ccA#LIH(ZvomE{zvY%dvphX;hiXagx;Fk4xJZw%y*!T)jE@bO1 z$%)myzSoA>@-nDvdD${&?yR?WTJaK8K4@;^DL;0aOaA#}S}5a3k9l}8#z>1%Qh82L z9X23&MQ8^A$1#1l(3pVW5nkimKvE;Ikm&xB)H$77*Nb6wVnodm{ayWl=nt1peZznX z^g&84pKqVYNqgSNQ(p%089ldp!2A?1|FbZ^mrNk?$Jh7OzP%nC^MZ6Rf3kTpyf*i{ zx*7;sADqv=l08F30D#j*5nINGJ7+wpNuEwy-F2N-e8Rx_)>`_!mjMZ+Z*c=pzfhH* zx2)qc?4;tS?wqGT+M@Dc@d!`SzP}N~f)(@3QRQumuIH1akdo!%y8{`SgK3<8E?&=D zI6iLa>UB4I?}<|vUY}z5pZv5R(CxW^{_OUp?z7uGV8Yb_Q=GLDpY~`a?j2H5aUBUK z!t=R=lTFc zqDIhZOShdeJ)k`50}i@7)3$o-Oxscd;1mkH(Tiq$zi+r4cu>Vu?fwg=L)@)hd)heM zy=6eW0_x2so|C5D8jqqZxSncV_3zn2vt4#Cy2TE?&4}wDap34xL?BwLQBQ9+>dLiU z?9}-9!gHO4nJmj`q4_q;y{^AMs+uE^xkE+#HX)IAMAqp{E5&1Il>C#7a(R3^B0Q`hba?5W6DyXp2sOVi7;;eSo#x zRR(%<%y7XtY3X@ojB&+0lA<7{5(;osGwXB2iiB*q)cP%yp9?8GHC_n2F)iIQ_NfQD zMEpM6DtdXlO(t-Zu;7kh8g*_&FAFg|tfhMHZc|qV=OiP&2jmcajSGFQzNt2mSNXZR z|Cx7nSEu5&_Y$7H;ty5Mn0UQ?G}zK560#CO<;*OG_$5WD4<;v1?4tg0F^9ZzrgrLV zbW`OZwfm4;lo8kHuoI`*U%D}f%ZbwwPO@DVPGqhkYX1YcP!dn;Q4;q6a|%)Wv9lkK z;U0cW2;>5E+n;~}Yf>#(6M*Xk0stF=GiYjkHNvyQPN)5r!F`2{a=)0Dmb<{LPSTt) z#*Mh%pK7 - -
- -
- -
-
-
- - - -

 

- - -
-
- - - error()) - { - // If so, start a
element with a classname so we can style it. - echo '
' . "\r\n"; - - // ... and display it. - echo '

' . htmlspecialchars($feed->error()) . "

\r\n"; - - // Close the
element we opened. - echo '
' . "\r\n"; - } - ?> - - -

Or try one of the following: - 詹姆斯.com, - adult swim, - Afterdawn, - Ajaxian, - Andy Budd, - Ask a Ninja, - AtomEnabled.org, - BBC News, - BBC Arabic, - BBC China, - BBC Russia, - Brent Simmons, - Channel Frederator, - CNN, - Digg, - Diggnation, - Flickr, - Google News, - Google Video, - Harvard Law, - Hebrew Language, - InfoWorld, - iTunes, - Japanese Language, - Korean Language, - mir.aculo.us, - Movie Trailers, - Newspond, - Nick Bradbury, - OK/Cancel, - OS News, - Phil Ringnalda, - Photoshop Videocast, - Romanian Language, - Russian Language, - Traditional Chinese Language, - Technorati, - Tim Bray, - TUAW, - TVgasm, - UNEASYsilence, - Web 2.0 Show, - Windows Vista Blog, - XKCD, - Yahoo! News, - You Tube, - Zeldman

- -
- -
- - - -
- - -

get_link()) echo ''; echo $feed->get_title(); if ($feed->get_link()) echo ''; ?>

- - - get_description(); ?> - -
- - - - - - - get_items() as $item): ?> -
- - get_favicon()) - { - $favicon = './for_the_demo/favicons/alternate.png'; - } - ?> - - -

Faviconget_permalink()) echo ''; echo $item->get_title(); if ($item->get_permalink()) echo ''; ?> get_date('j M Y, g:i a'); ?>

- - - get_content(); ?> - - get_enclosure(0)) - { - // Use the embed() method to embed the enclosure into the page inline. - echo '
'; - echo '

' . $enclosure->embed(array( - 'audio' => './for_the_demo/place_audio.png', - 'video' => './for_the_demo/place_video.png', - 'mediaplayer' => './for_the_demo/mediaplayer.swf', - 'altclass' => 'download' - )) . '

'; - - if ($enclosure->get_link() && $enclosure->get_type()) - { - echo '

(' . $enclosure->get_type(); - if ($enclosure->get_size()) - { - echo '; ' . $enclosure->get_size() . ' MB'; - } - echo ')

'; - } - if ($enclosure->get_thumbnail()) - { - echo '
'; - } - echo '
'; - } - ?> - - -

- Blinklist - Blogmarks - del.icio.us - Digg - Ma.gnolia - My Web 2.0 - Newsvine - Reddit - Segnalo - Simpy - Spurl - Wists - Technorati -

- -
- - - - - - - -
- -
- -

Page processed in seconds.

- - -

Powered by . Run the SimplePie Compatibility Test. SimplePie is © 2004–, Ryan Parman and Geoffrey Sneddon, and licensed under the BSD License.

-
- -
- -
- - - diff --git a/library/simplepie/demo/minimalistic.php b/library/simplepie/demo/minimalistic.php deleted file mode 100644 index 56509c00c..000000000 --- a/library/simplepie/demo/minimalistic.php +++ /dev/null @@ -1,137 +0,0 @@ -=')) - { - return microtime(true); - } - else - { - list($usec, $sec) = explode(' ', microtime()); - return ((float) $usec + (float) $sec); - } -} - -$start = microtime_float(); - -include('../simplepie.inc'); - -// Parse it -$feed = new SimplePie(); -if (!empty($_GET['feed'])) -{ - if (get_magic_quotes_gpc()) - { - $_GET['feed'] = stripslashes($_GET['feed']); - } - $feed->set_feed_url($_GET['feed']); - $feed->init(); -} -$feed->handle_content_type(); - -?> - - - -<?php echo (empty($_GET['feed'])) ? 'SimplePie' : 'SimplePie: ' . $feed->get_title(); ?> - - - - - - - - - - -

get_title(); ?>

- -
-

 

-
- -
- data): ?> - get_items(); ?> -

Displaying get_item_quantity(); ?> most recent entries.

- -
-

get_title(); ?> get_date('j M Y'); ?>

- get_content(); ?> - get_enclosure(0)) - echo '

Podcast

'; - ?> -
- -
- -
- - - - diff --git a/library/simplepie/demo/multifeeds.php b/library/simplepie/demo/multifeeds.php deleted file mode 100644 index b23d792a2..000000000 --- a/library/simplepie/demo/multifeeds.php +++ /dev/null @@ -1,108 +0,0 @@ -set_feed_url(array( - 'http://rss.news.yahoo.com/rss/topstories', - 'http://news.google.com/?output=atom', - 'http://rss.cnn.com/rss/cnn_topstories.rss' -)); - -// When we set these, we need to make sure that the handler_image.php file is also trying to read from the same cache directory that we are. -$feed->set_favicon_handler('./handler_image.php'); -$feed->set_image_handler('./handler_image.php'); - -// Initialize the feed. -$feed->init(); - -// Make sure the page is being served with the UTF-8 headers. -$feed->handle_content_type(); - -// Begin the (X)HTML page. -?> - - - Multifeeds Test page - - - - -
- - error): ?> -

error()?>

- - -
-

Quick-n-Dirty Multifeeds Demo

-
- - get_items() as $item): - - // Let's give ourselves a reference to the parent $feed object for this particular item. - $feed = $item->get_feed(); - ?> - -
-

get_title(), ENT_QUOTES, 'UTF-8'); ?>

- - - get_content(); ?> - - get_enclosure()): ?> -
- native_embed(array( - // New 'mediaplayer' attribute shows off Flash-based MP3 and FLV playback. - 'mediaplayer' => '../demo/for_the_demo/mediaplayer.swf' - )); ?> -
- - -

Source: get_title(); ?> | get_date('j M Y | g:i a'); ?>

-
- - - -

This is a test of the emergency broadcast system. This is only a test… beeeeeeeeeeeeeeeeeeeeeeeeeep!

- -
- - \ No newline at end of file diff --git a/library/simplepie/demo/test.php b/library/simplepie/demo/test.php deleted file mode 100644 index 5b9943abb..000000000 --- a/library/simplepie/demo/test.php +++ /dev/null @@ -1,62 +0,0 @@ -set_feed_url($_GET['feed']); - $feed->enable_cache(false); - $starttime = explode(' ', microtime()); - $starttime = $starttime[1] + $starttime[0]; - $feed->init(); - $endtime = explode(' ', microtime()); - $endtime = $endtime[1] + $endtime[0]; - $time = $endtime - $starttime; -} -else -{ - $time = 'null'; -} - -$feed->handle_content_type(); - -?> - -SimplePie Test -
-
-
\ No newline at end of file diff --git a/library/simplepie/idn/LICENCE b/library/simplepie/idn/LICENCE deleted file mode 100644 index 25a1d22df..000000000 --- a/library/simplepie/idn/LICENCE +++ /dev/null @@ -1,502 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/library/simplepie/idn/ReadMe.txt b/library/simplepie/idn/ReadMe.txt deleted file mode 100644 index 7ca8c7e6d..000000000 --- a/library/simplepie/idn/ReadMe.txt +++ /dev/null @@ -1,123 +0,0 @@ -******************************************************************************* -* * -* IDNA Convert (idna_convert.class.php) * -* * -* http://idnaconv.phlymail.de mailto:phlymail@phlylabs.de * -******************************************************************************* -* (c) 2004-2007 phlyLabs, Berlin * -* This file is encoded in UTF-8 * -******************************************************************************* - -Introduction ------------- - -The class idna_convert allows to convert internationalized domain names -(see RFC 3490, 3491, 3492 and 3454 for detials) as they can be used with various -registries worldwide to be translated between their original (localized) form -and their encoded form as it will be used in the DNS (Domain Name System). - -The class provides two public methods, encode() and decode(), which do exactly -what you would expect them to do. You are allowed to use complete domain names, -simple strings and complete email addresses as well. That means, that you might -use any of the following notations: - -- www.nörgler.com -- xn--nrgler-wxa -- xn--brse-5qa.xn--knrz-1ra.info - -Errors, incorrectly encoded or invalid strings will lead to either a FALSE -response (when in strict mode) or to only partially converted strings. -You can query the occured error by calling the method get_last_error(). - -Unicode strings are expected to be either UTF-8 strings, UCS-4 strings or UCS-4 -arrays. The default format is UTF-8. For setting different encodings, you can -call the method setParams() - please see the inline documentation for details. -ACE strings (the Punycode form) are always 7bit ASCII strings. - -ATTENTION: We no longer supply the PHP5 version of the class. It is not -necessary for achieving a successfull conversion, since the supplied PHP code is -compatible with both PHP4 and PHP5. We expect to see no compatibility issues -with the upcoming PHP6, too. - - -Files ------ - -idna_convert.class.php - The actual class -idna_convert.create.npdata.php - Useful for (re)creating the NPData file -npdata.ser - Serialized data for NamePrep -example.php - An example web page for converting -ReadMe.txt - This file -LICENCE - The LGPL licence file - -The class is contained in idna_convert.class.php. -MAKE SURE to copy the npdata.ser file into the same folder as the class file -itself! - - -Examples --------- - -1. Say we wish to encode the domain name nörgler.com: - -// Include the class -include_once('idna_convert.class.php'); -// Instantiate it * -$IDN = new idna_convert(); -// The input string, if input is not UTF-8 or UCS-4, it must be converted before -$input = utf8_encode('nörgler.com'); -// Encode it to its punycode presentation -$output = $IDN->encode($input); -// Output, what we got now -echo $output; // This will read: xn--nrgler-wxa.com - - -2. We received an email from a punycoded domain and are willing to learn, how - the domain name reads originally - -// Include the class -include_once('idna_convert.class.php'); -// Instantiate it (depending on the version you are using) with -$IDN = new idna_convert(); -// The input string -$input = 'andre@xn--brse-5qa.xn--knrz-1ra.info'; -// Encode it to its punycode presentation -$output = $IDN->decode($input); -// Output, what we got now, if output should be in a format different to UTF-8 -// or UCS-4, you will have to convert it before outputting it -echo utf8_decode($output); // This will read: andre@börse.knörz.info - - -3. The input is read from a UCS-4 coded file and encoded line by line. By - appending the optional second parameter we tell enode() about the input - format to be used - -// Include the class -include_once('idna_convert.class.php'); -// Instantiate it -$IDN = new dinca_convert(); -// Iterate through the input file line by line -foreach (file('ucs4-domains.txt') as $line) { - echo $IDN->encode(trim($line), 'ucs4_string'); - echo "\n"; -} - - -NPData ------- - -Should you need to recreate the npdata.ser file, which holds all necessary translation -tables in a serialized format, you can run the file idna_convert.create.npdata.php, which -creates the file for you and stores it in the same folder, where it is placed. -Should you need to do changes to the tables you can do so, but beware of the consequences. - - -Contact us ----------- - -In case of errors, bugs, questions, wishes, please don't hesitate to contact us -under the email address above. - -The team of phlyLabs -http://phlylabs.de -mailto:phlymail@phlylabs.de \ No newline at end of file diff --git a/library/simplepie/idn/idna_convert.class.php b/library/simplepie/idn/idna_convert.class.php deleted file mode 100644 index ed2bae26d..000000000 --- a/library/simplepie/idn/idna_convert.class.php +++ /dev/null @@ -1,969 +0,0 @@ - - * @copyright 2004-2007 phlyLabs Berlin, http://phlylabs.de - * @version 0.5.1 - * - */ -class idna_convert -{ - /** - * Holds all relevant mapping tables, loaded from a seperate file on construct - * See RFC3454 for details - * - * @var array - * @access private - */ - var $NP = array(); - - // Internal settings, do not mess with them - var $_punycode_prefix = 'xn--'; - var $_invalid_ucs = 0x80000000; - var $_max_ucs = 0x10FFFF; - var $_base = 36; - var $_tmin = 1; - var $_tmax = 26; - var $_skew = 38; - var $_damp = 700; - var $_initial_bias = 72; - var $_initial_n = 0x80; - var $_sbase = 0xAC00; - var $_lbase = 0x1100; - var $_vbase = 0x1161; - var $_tbase = 0x11A7; - var $_lcount = 19; - var $_vcount = 21; - var $_tcount = 28; - var $_ncount = 588; // _vcount * _tcount - var $_scount = 11172; // _lcount * _tcount * _vcount - var $_error = false; - - // See {@link set_paramter()} for details of how to change the following - // settings from within your script / application - var $_api_encoding = 'utf8'; // Default input charset is UTF-8 - var $_allow_overlong = false; // Overlong UTF-8 encodings are forbidden - var $_strict_mode = false; // Behave strict or not - - // The constructor - function idna_convert($options = false) - { - $this->slast = $this->_sbase + $this->_lcount * $this->_vcount * $this->_tcount; - if (function_exists('file_get_contents')) { - $this->NP = unserialize(file_get_contents(dirname(__FILE__).'/npdata.ser')); - } else { - $this->NP = unserialize(join('', file(dirname(__FILE__).'/npdata.ser'))); - } - // If parameters are given, pass these to the respective method - if (is_array($options)) { - return $this->set_parameter($options); - } - return true; - } - - /** - * Sets a new option value. Available options and values: - * [encoding - Use either UTF-8, UCS4 as array or UCS4 as string as input ('utf8' for UTF-8, - * 'ucs4_string' and 'ucs4_array' respectively for UCS4); The output is always UTF-8] - * [overlong - Unicode does not allow unnecessarily long encodings of chars, - * to allow this, set this parameter to true, else to false; - * default is false.] - * [strict - true: strict mode, good for registration purposes - Causes errors - * on failures; false: loose mode, ideal for "wildlife" applications - * by silently ignoring errors and returning the original input instead - * - * @param mixed Parameter to set (string: single parameter; array of Parameter => Value pairs) - * @param string Value to use (if parameter 1 is a string) - * @return boolean true on success, false otherwise - * @access public - */ - function set_parameter($option, $value = false) - { - if (!is_array($option)) { - $option = array($option => $value); - } - foreach ($option as $k => $v) { - switch ($k) { - case 'encoding': - switch ($v) { - case 'utf8': - case 'ucs4_string': - case 'ucs4_array': - $this->_api_encoding = $v; - break; - default: - $this->_error('Set Parameter: Unknown parameter '.$v.' for option '.$k); - return false; - } - break; - case 'overlong': - $this->_allow_overlong = ($v) ? true : false; - break; - case 'strict': - $this->_strict_mode = ($v) ? true : false; - break; - default: - $this->_error('Set Parameter: Unknown option '.$k); - return false; - } - } - return true; - } - - /** - * Decode a given ACE domain name - * @param string Domain name (ACE string) - * [@param string Desired output encoding, see {@link set_parameter}] - * @return string Decoded Domain name (UTF-8 or UCS-4) - * @access public - */ - function decode($input, $one_time_encoding = false) - { - // Optionally set - if ($one_time_encoding) { - switch ($one_time_encoding) { - case 'utf8': - case 'ucs4_string': - case 'ucs4_array': - break; - default: - $this->_error('Unknown encoding '.$one_time_encoding); - return false; - } - } - // Make sure to drop any newline characters around - $input = trim($input); - - // Negotiate input and try to determine, whether it is a plain string, - // an email address or something like a complete URL - if (strpos($input, '@')) { // Maybe it is an email address - // No no in strict mode - if ($this->_strict_mode) { - $this->_error('Only simple domain name parts can be handled in strict mode'); - return false; - } - list ($email_pref, $input) = explode('@', $input, 2); - $arr = explode('.', $input); - foreach ($arr as $k => $v) { - if (preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $v)) { - $conv = $this->_decode($v); - if ($conv) $arr[$k] = $conv; - } - } - $input = join('.', $arr); - $arr = explode('.', $email_pref); - foreach ($arr as $k => $v) { - if (preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $v)) { - $conv = $this->_decode($v); - if ($conv) $arr[$k] = $conv; - } - } - $email_pref = join('.', $arr); - $return = $email_pref . '@' . $input; - } elseif (preg_match('![:\./]!', $input)) { // Or a complete domain name (with or without paths / parameters) - // No no in strict mode - if ($this->_strict_mode) { - $this->_error('Only simple domain name parts can be handled in strict mode'); - return false; - } - $parsed = parse_url($input); - if (isset($parsed['host'])) { - $arr = explode('.', $parsed['host']); - foreach ($arr as $k => $v) { - $conv = $this->_decode($v); - if ($conv) $arr[$k] = $conv; - } - $parsed['host'] = join('.', $arr); - $return = - (empty($parsed['scheme']) ? '' : $parsed['scheme'].(strtolower($parsed['scheme']) == 'mailto' ? ':' : '://')) - .(empty($parsed['user']) ? '' : $parsed['user'].(empty($parsed['pass']) ? '' : ':'.$parsed['pass']).'@') - .$parsed['host'] - .(empty($parsed['port']) ? '' : ':'.$parsed['port']) - .(empty($parsed['path']) ? '' : $parsed['path']) - .(empty($parsed['query']) ? '' : '?'.$parsed['query']) - .(empty($parsed['fragment']) ? '' : '#'.$parsed['fragment']); - } else { // parse_url seems to have failed, try without it - $arr = explode('.', $input); - foreach ($arr as $k => $v) { - $conv = $this->_decode($v); - $arr[$k] = ($conv) ? $conv : $v; - } - $return = join('.', $arr); - } - } else { // Otherwise we consider it being a pure domain name string - $return = $this->_decode($input); - if (!$return) $return = $input; - } - // The output is UTF-8 by default, other output formats need conversion here - // If one time encoding is given, use this, else the objects property - switch (($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) { - case 'utf8': - return $return; - break; - case 'ucs4_string': - return $this->_ucs4_to_ucs4_string($this->_utf8_to_ucs4($return)); - break; - case 'ucs4_array': - return $this->_utf8_to_ucs4($return); - break; - default: - $this->_error('Unsupported output format'); - return false; - } - } - - /** - * Encode a given UTF-8 domain name - * @param string Domain name (UTF-8 or UCS-4) - * [@param string Desired input encoding, see {@link set_parameter}] - * @return string Encoded Domain name (ACE string) - * @access public - */ - function encode($decoded, $one_time_encoding = false) - { - // Forcing conversion of input to UCS4 array - // If one time encoding is given, use this, else the objects property - switch ($one_time_encoding ? $one_time_encoding : $this->_api_encoding) { - case 'utf8': - $decoded = $this->_utf8_to_ucs4($decoded); - break; - case 'ucs4_string': - $decoded = $this->_ucs4_string_to_ucs4($decoded); - case 'ucs4_array': - break; - default: - $this->_error('Unsupported input format: '.($one_time_encoding ? $one_time_encoding : $this->_api_encoding)); - return false; - } - - // No input, no output, what else did you expect? - if (empty($decoded)) return ''; - - // Anchors for iteration - $last_begin = 0; - // Output string - $output = ''; - foreach ($decoded as $k => $v) { - // Make sure to use just the plain dot - switch($v) { - case 0x3002: - case 0xFF0E: - case 0xFF61: - $decoded[$k] = 0x2E; - // Right, no break here, the above are converted to dots anyway - // Stumbling across an anchoring character - case 0x2E: - case 0x2F: - case 0x3A: - case 0x3F: - case 0x40: - // Neither email addresses nor URLs allowed in strict mode - if ($this->_strict_mode) { - $this->_error('Neither email addresses nor URLs are allowed in strict mode.'); - return false; - } else { - // Skip first char - if ($k) { - $encoded = ''; - $encoded = $this->_encode(array_slice($decoded, $last_begin, (($k)-$last_begin))); - if ($encoded) { - $output .= $encoded; - } else { - $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($k)-$last_begin))); - } - $output .= chr($decoded[$k]); - } - $last_begin = $k + 1; - } - } - } - // Catch the rest of the string - if ($last_begin) { - $inp_len = sizeof($decoded); - $encoded = ''; - $encoded = $this->_encode(array_slice($decoded, $last_begin, (($inp_len)-$last_begin))); - if ($encoded) { - $output .= $encoded; - } else { - $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($inp_len)-$last_begin))); - } - return $output; - } else { - if ($output = $this->_encode($decoded)) { - return $output; - } else { - return $this->_ucs4_to_utf8($decoded); - } - } - } - - /** - * Use this method to get the last error ocurred - * @param void - * @return string The last error, that occured - * @access public - */ - function get_last_error() - { - return $this->_error; - } - - /** - * The actual decoding algorithm - * @access private - */ - function _decode($encoded) - { - // We do need to find the Punycode prefix - if (!preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $encoded)) { - $this->_error('This is not a punycode string'); - return false; - } - $encode_test = preg_replace('!^'.preg_quote($this->_punycode_prefix, '!').'!', '', $encoded); - // If nothing left after removing the prefix, it is hopeless - if (!$encode_test) { - $this->_error('The given encoded string was empty'); - return false; - } - // Find last occurence of the delimiter - $delim_pos = strrpos($encoded, '-'); - if ($delim_pos > strlen($this->_punycode_prefix)) { - for ($k = strlen($this->_punycode_prefix); $k < $delim_pos; ++$k) { - $decoded[] = ord($encoded{$k}); - } - } else { - $decoded = array(); - } - $deco_len = count($decoded); - $enco_len = strlen($encoded); - - // Wandering through the strings; init - $is_first = true; - $bias = $this->_initial_bias; - $idx = 0; - $char = $this->_initial_n; - - for ($enco_idx = ($delim_pos) ? ($delim_pos + 1) : 0; $enco_idx < $enco_len; ++$deco_len) { - for ($old_idx = $idx, $w = 1, $k = $this->_base; 1 ; $k += $this->_base) { - $digit = $this->_decode_digit($encoded{$enco_idx++}); - $idx += $digit * $w; - $t = ($k <= $bias) ? $this->_tmin : - (($k >= $bias + $this->_tmax) ? $this->_tmax : ($k - $bias)); - if ($digit < $t) break; - $w = (int) ($w * ($this->_base - $t)); - } - $bias = $this->_adapt($idx - $old_idx, $deco_len + 1, $is_first); - $is_first = false; - $char += (int) ($idx / ($deco_len + 1)); - $idx %= ($deco_len + 1); - if ($deco_len > 0) { - // Make room for the decoded char - for ($i = $deco_len; $i > $idx; $i--) { - $decoded[$i] = $decoded[($i - 1)]; - } - } - $decoded[$idx++] = $char; - } - return $this->_ucs4_to_utf8($decoded); - } - - /** - * The actual encoding algorithm - * @access private - */ - function _encode($decoded) - { - // We cannot encode a domain name containing the Punycode prefix - $extract = strlen($this->_punycode_prefix); - $check_pref = $this->_utf8_to_ucs4($this->_punycode_prefix); - $check_deco = array_slice($decoded, 0, $extract); - - if ($check_pref == $check_deco) { - $this->_error('This is already a punycode string'); - return false; - } - // We will not try to encode strings consisting of basic code points only - $encodable = false; - foreach ($decoded as $k => $v) { - if ($v > 0x7a) { - $encodable = true; - break; - } - } - if (!$encodable) { - $this->_error('The given string does not contain encodable chars'); - return false; - } - - // Do NAMEPREP - $decoded = $this->_nameprep($decoded); - if (!$decoded || !is_array($decoded)) return false; // NAMEPREP failed - - $deco_len = count($decoded); - if (!$deco_len) return false; // Empty array - - $codecount = 0; // How many chars have been consumed - - $encoded = ''; - // Copy all basic code points to output - for ($i = 0; $i < $deco_len; ++$i) { - $test = $decoded[$i]; - // Will match [-0-9a-zA-Z] - if ((0x2F < $test && $test < 0x40) || (0x40 < $test && $test < 0x5B) - || (0x60 < $test && $test <= 0x7B) || (0x2D == $test)) { - $encoded .= chr($decoded[$i]); - $codecount++; - } - } - if ($codecount == $deco_len) return $encoded; // All codepoints were basic ones - - // Start with the prefix; copy it to output - $encoded = $this->_punycode_prefix.$encoded; - - // If we have basic code points in output, add an hyphen to the end - if ($codecount) $encoded .= '-'; - - // Now find and encode all non-basic code points - $is_first = true; - $cur_code = $this->_initial_n; - $bias = $this->_initial_bias; - $delta = 0; - while ($codecount < $deco_len) { - // Find the smallest code point >= the current code point and - // remember the last ouccrence of it in the input - for ($i = 0, $next_code = $this->_max_ucs; $i < $deco_len; $i++) { - if ($decoded[$i] >= $cur_code && $decoded[$i] <= $next_code) { - $next_code = $decoded[$i]; - } - } - - $delta += ($next_code - $cur_code) * ($codecount + 1); - $cur_code = $next_code; - - // Scan input again and encode all characters whose code point is $cur_code - for ($i = 0; $i < $deco_len; $i++) { - if ($decoded[$i] < $cur_code) { - $delta++; - } elseif ($decoded[$i] == $cur_code) { - for ($q = $delta, $k = $this->_base; 1; $k += $this->_base) { - $t = ($k <= $bias) ? $this->_tmin : - (($k >= $bias + $this->_tmax) ? $this->_tmax : $k - $bias); - if ($q < $t) break; - $encoded .= $this->_encode_digit(intval($t + (($q - $t) % ($this->_base - $t)))); //v0.4.5 Changed from ceil() to intval() - $q = (int) (($q - $t) / ($this->_base - $t)); - } - $encoded .= $this->_encode_digit($q); - $bias = $this->_adapt($delta, $codecount+1, $is_first); - $codecount++; - $delta = 0; - $is_first = false; - } - } - $delta++; - $cur_code++; - } - return $encoded; - } - - /** - * Adapt the bias according to the current code point and position - * @access private - */ - function _adapt($delta, $npoints, $is_first) - { - $delta = intval($is_first ? ($delta / $this->_damp) : ($delta / 2)); - $delta += intval($delta / $npoints); - for ($k = 0; $delta > (($this->_base - $this->_tmin) * $this->_tmax) / 2; $k += $this->_base) { - $delta = intval($delta / ($this->_base - $this->_tmin)); - } - return intval($k + ($this->_base - $this->_tmin + 1) * $delta / ($delta + $this->_skew)); - } - - /** - * Encoding a certain digit - * @access private - */ - function _encode_digit($d) - { - return chr($d + 22 + 75 * ($d < 26)); - } - - /** - * Decode a certain digit - * @access private - */ - function _decode_digit($cp) - { - $cp = ord($cp); - return ($cp - 48 < 10) ? $cp - 22 : (($cp - 65 < 26) ? $cp - 65 : (($cp - 97 < 26) ? $cp - 97 : $this->_base)); - } - - /** - * Internal error handling method - * @access private - */ - function _error($error = '') - { - $this->_error = $error; - } - - /** - * Do Nameprep according to RFC3491 and RFC3454 - * @param array Unicode Characters - * @return string Unicode Characters, Nameprep'd - * @access private - */ - function _nameprep($input) - { - $output = array(); - $error = false; - // - // Mapping - // Walking through the input array, performing the required steps on each of - // the input chars and putting the result into the output array - // While mapping required chars we apply the cannonical ordering - foreach ($input as $v) { - // Map to nothing == skip that code point - if (in_array($v, $this->NP['map_nothing'])) continue; - - // Try to find prohibited input - if (in_array($v, $this->NP['prohibit']) || in_array($v, $this->NP['general_prohibited'])) { - $this->_error('NAMEPREP: Prohibited input U+'.sprintf('%08X', $v)); - return false; - } - foreach ($this->NP['prohibit_ranges'] as $range) { - if ($range[0] <= $v && $v <= $range[1]) { - $this->_error('NAMEPREP: Prohibited input U+'.sprintf('%08X', $v)); - return false; - } - } - // - // Hangul syllable decomposition - if (0xAC00 <= $v && $v <= 0xD7AF) { - foreach ($this->_hangul_decompose($v) as $out) { - $output[] = (int) $out; - } - // There's a decomposition mapping for that code point - } elseif (isset($this->NP['replacemaps'][$v])) { - foreach ($this->_apply_cannonical_ordering($this->NP['replacemaps'][$v]) as $out) { - $output[] = (int) $out; - } - } else { - $output[] = (int) $v; - } - } - // Before applying any Combining, try to rearrange any Hangul syllables - $output = $this->_hangul_compose($output); - // - // Combine code points - // - $last_class = 0; - $last_starter = 0; - $out_len = count($output); - for ($i = 0; $i < $out_len; ++$i) { - $class = $this->_get_combining_class($output[$i]); - if ((!$last_class || $last_class > $class) && $class) { - // Try to match - $seq_len = $i - $last_starter; - $out = $this->_combine(array_slice($output, $last_starter, $seq_len)); - // On match: Replace the last starter with the composed character and remove - // the now redundant non-starter(s) - if ($out) { - $output[$last_starter] = $out; - if (count($out) != $seq_len) { - for ($j = $i+1; $j < $out_len; ++$j) { - $output[$j-1] = $output[$j]; - } - unset($output[$out_len]); - } - // Rewind the for loop by one, since there can be more possible compositions - $i--; - $out_len--; - $last_class = ($i == $last_starter) ? 0 : $this->_get_combining_class($output[$i-1]); - continue; - } - } - // The current class is 0 - if (!$class) $last_starter = $i; - $last_class = $class; - } - return $output; - } - - /** - * Decomposes a Hangul syllable - * (see http://www.unicode.org/unicode/reports/tr15/#Hangul - * @param integer 32bit UCS4 code point - * @return array Either Hangul Syllable decomposed or original 32bit value as one value array - * @access private - */ - function _hangul_decompose($char) - { - $sindex = (int) $char - $this->_sbase; - if ($sindex < 0 || $sindex >= $this->_scount) { - return array($char); - } - $result = array(); - $result[] = (int) $this->_lbase + $sindex / $this->_ncount; - $result[] = (int) $this->_vbase + ($sindex % $this->_ncount) / $this->_tcount; - $T = intval($this->_tbase + $sindex % $this->_tcount); - if ($T != $this->_tbase) $result[] = $T; - return $result; - } - /** - * Ccomposes a Hangul syllable - * (see http://www.unicode.org/unicode/reports/tr15/#Hangul - * @param array Decomposed UCS4 sequence - * @return array UCS4 sequence with syllables composed - * @access private - */ - function _hangul_compose($input) - { - $inp_len = count($input); - if (!$inp_len) return array(); - $result = array(); - $last = (int) $input[0]; - $result[] = $last; // copy first char from input to output - - for ($i = 1; $i < $inp_len; ++$i) { - $char = (int) $input[$i]; - $sindex = $last - $this->_sbase; - $lindex = $last - $this->_lbase; - $vindex = $char - $this->_vbase; - $tindex = $char - $this->_tbase; - // Find out, whether two current characters are LV and T - if (0 <= $sindex && $sindex < $this->_scount && ($sindex % $this->_tcount == 0) - && 0 <= $tindex && $tindex <= $this->_tcount) { - // create syllable of form LVT - $last += $tindex; - $result[(count($result) - 1)] = $last; // reset last - continue; // discard char - } - // Find out, whether two current characters form L and V - if (0 <= $lindex && $lindex < $this->_lcount && 0 <= $vindex && $vindex < $this->_vcount) { - // create syllable of form LV - $last = (int) $this->_sbase + ($lindex * $this->_vcount + $vindex) * $this->_tcount; - $result[(count($result) - 1)] = $last; // reset last - continue; // discard char - } - // if neither case was true, just add the character - $last = $char; - $result[] = $char; - } - return $result; - } - - /** - * Returns the combining class of a certain wide char - * @param integer Wide char to check (32bit integer) - * @return integer Combining class if found, else 0 - * @access private - */ - function _get_combining_class($char) - { - return isset($this->NP['norm_combcls'][$char]) ? $this->NP['norm_combcls'][$char] : 0; - } - - /** - * Apllies the cannonical ordering of a decomposed UCS4 sequence - * @param array Decomposed UCS4 sequence - * @return array Ordered USC4 sequence - * @access private - */ - function _apply_cannonical_ordering($input) - { - $swap = true; - $size = count($input); - while ($swap) { - $swap = false; - $last = $this->_get_combining_class(intval($input[0])); - for ($i = 0; $i < $size-1; ++$i) { - $next = $this->_get_combining_class(intval($input[$i+1])); - if ($next != 0 && $last > $next) { - // Move item leftward until it fits - for ($j = $i + 1; $j > 0; --$j) { - if ($this->_get_combining_class(intval($input[$j-1])) <= $next) break; - $t = intval($input[$j]); - $input[$j] = intval($input[$j-1]); - $input[$j-1] = $t; - $swap = true; - } - // Reentering the loop looking at the old character again - $next = $last; - } - $last = $next; - } - } - return $input; - } - - /** - * Do composition of a sequence of starter and non-starter - * @param array UCS4 Decomposed sequence - * @return array Ordered USC4 sequence - * @access private - */ - function _combine($input) - { - $inp_len = count($input); - foreach ($this->NP['replacemaps'] as $np_src => $np_target) { - if ($np_target[0] != $input[0]) continue; - if (count($np_target) != $inp_len) continue; - $hit = false; - foreach ($input as $k2 => $v2) { - if ($v2 == $np_target[$k2]) { - $hit = true; - } else { - $hit = false; - break; - } - } - if ($hit) return $np_src; - } - return false; - } - - /** - * This converts an UTF-8 encoded string to its UCS-4 representation - * By talking about UCS-4 "strings" we mean arrays of 32bit integers representing - * each of the "chars". This is due to PHP not being able to handle strings with - * bit depth different from 8. This apllies to the reverse method _ucs4_to_utf8(), too. - * The following UTF-8 encodings are supported: - * bytes bits representation - * 1 7 0xxxxxxx - * 2 11 110xxxxx 10xxxxxx - * 3 16 1110xxxx 10xxxxxx 10xxxxxx - * 4 21 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - * 5 26 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - * 6 31 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - * Each x represents a bit that can be used to store character data. - * The five and six byte sequences are part of Annex D of ISO/IEC 10646-1:2000 - * @access private - */ - function _utf8_to_ucs4($input) - { - $output = array(); - $out_len = 0; - $inp_len = strlen($input); - $mode = 'next'; - $test = 'none'; - for ($k = 0; $k < $inp_len; ++$k) { - $v = ord($input{$k}); // Extract byte from input string - - if ($v < 128) { // We found an ASCII char - put into stirng as is - $output[$out_len] = $v; - ++$out_len; - if ('add' == $mode) { - $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k); - return false; - } - continue; - } - if ('next' == $mode) { // Try to find the next start byte; determine the width of the Unicode char - $start_byte = $v; - $mode = 'add'; - $test = 'range'; - if ($v >> 5 == 6) { // &110xxxxx 10xxxxx - $next_byte = 0; // Tells, how many times subsequent bitmasks must rotate 6bits to the left - $v = ($v - 192) << 6; - } elseif ($v >> 4 == 14) { // &1110xxxx 10xxxxxx 10xxxxxx - $next_byte = 1; - $v = ($v - 224) << 12; - } elseif ($v >> 3 == 30) { // &11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - $next_byte = 2; - $v = ($v - 240) << 18; - } elseif ($v >> 2 == 62) { // &111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - $next_byte = 3; - $v = ($v - 248) << 24; - } elseif ($v >> 1 == 126) { // &1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - $next_byte = 4; - $v = ($v - 252) << 30; - } else { - $this->_error('This might be UTF-8, but I don\'t understand it at byte '.$k); - return false; - } - if ('add' == $mode) { - $output[$out_len] = (int) $v; - ++$out_len; - continue; - } - } - if ('add' == $mode) { - if (!$this->_allow_overlong && $test == 'range') { - $test = 'none'; - if (($v < 0xA0 && $start_byte == 0xE0) || ($v < 0x90 && $start_byte == 0xF0) || ($v > 0x8F && $start_byte == 0xF4)) { - $this->_error('Bogus UTF-8 character detected (out of legal range) at byte '.$k); - return false; - } - } - if ($v >> 6 == 2) { // Bit mask must be 10xxxxxx - $v = ($v - 128) << ($next_byte * 6); - $output[($out_len - 1)] += $v; - --$next_byte; - } else { - $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k); - return false; - } - if ($next_byte < 0) { - $mode = 'next'; - } - } - } // for - return $output; - } - - /** - * Convert UCS-4 string into UTF-8 string - * See _utf8_to_ucs4() for details - * @access private - */ - function _ucs4_to_utf8($input) - { - $output = ''; - $k = 0; - foreach ($input as $v) { - ++$k; - // $v = ord($v); - if ($v < 128) { // 7bit are transferred literally - $output .= chr($v); - } elseif ($v < (1 << 11)) { // 2 bytes - $output .= chr(192 + ($v >> 6)) . chr(128 + ($v & 63)); - } elseif ($v < (1 << 16)) { // 3 bytes - $output .= chr(224 + ($v >> 12)) . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63)); - } elseif ($v < (1 << 21)) { // 4 bytes - $output .= chr(240 + ($v >> 18)) . chr(128 + (($v >> 12) & 63)) - . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63)); - } elseif ($v < (1 << 26)) { // 5 bytes - $output .= chr(248 + ($v >> 24)) . chr(128 + (($v >> 18) & 63)) - . chr(128 + (($v >> 12) & 63)) . chr(128 + (($v >> 6) & 63)) - . chr(128 + ($v & 63)); - } elseif ($v < (1 << 31)) { // 6 bytes - $output .= chr(252 + ($v >> 30)) . chr(128 + (($v >> 24) & 63)) - . chr(128 + (($v >> 18) & 63)) . chr(128 + (($v >> 12) & 63)) - . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63)); - } else { - $this->_error('Conversion from UCS-4 to UTF-8 failed: malformed input at byte '.$k); - return false; - } - } - return $output; - } - - /** - * Convert UCS-4 array into UCS-4 string - * - * @access private - */ - function _ucs4_to_ucs4_string($input) - { - $output = ''; - // Take array values and split output to 4 bytes per value - // The bit mask is 255, which reads &11111111 - foreach ($input as $v) { - $output .= chr(($v >> 24) & 255).chr(($v >> 16) & 255).chr(($v >> 8) & 255).chr($v & 255); - } - return $output; - } - - /** - * Convert UCS-4 strin into UCS-4 garray - * - * @access private - */ - function _ucs4_string_to_ucs4($input) - { - $output = array(); - $inp_len = strlen($input); - // Input length must be dividable by 4 - if ($inp_len % 4) { - $this->_error('Input UCS4 string is broken'); - return false; - } - // Empty input - return empty output - if (!$inp_len) return $output; - for ($i = 0, $out_len = -1; $i < $inp_len; ++$i) { - // Increment output position every 4 input bytes - if (!($i % 4)) { - $out_len++; - $output[$out_len] = 0; - } - $output[$out_len] += ord($input{$i}) << (8 * (3 - ($i % 4) ) ); - } - return $output; - } -} - -/** -* Adapter class for aligning the API of idna_convert with that of Net_IDNA -* @author Matthias Sommerfeld -*/ -class Net_IDNA_php4 extends idna_convert -{ - /** - * Sets a new option value. Available options and values: - * [encoding - Use either UTF-8, UCS4 as array or UCS4 as string as input ('utf8' for UTF-8, - * 'ucs4_string' and 'ucs4_array' respectively for UCS4); The output is always UTF-8] - * [overlong - Unicode does not allow unnecessarily long encodings of chars, - * to allow this, set this parameter to true, else to false; - * default is false.] - * [strict - true: strict mode, good for registration purposes - Causes errors - * on failures; false: loose mode, ideal for "wildlife" applications - * by silently ignoring errors and returning the original input instead - * - * @param mixed Parameter to set (string: single parameter; array of Parameter => Value pairs) - * @param string Value to use (if parameter 1 is a string) - * @return boolean true on success, false otherwise - * @access public - */ - function setParams($option, $param = false) - { - return $this->IC->set_parameters($option, $param); - } -} - -?> \ No newline at end of file diff --git a/library/simplepie/idn/npdata.ser b/library/simplepie/idn/npdata.ser deleted file mode 100644 index d7ce6d03f..000000000 --- a/library/simplepie/idn/npdata.ser +++ /dev/null @@ -1 +0,0 @@ -a:6:{s:11:"map_nothing";a:27:{i:0;i:173;i:1;i:847;i:2;i:6150;i:3;i:6155;i:4;i:6156;i:5;i:6157;i:6;i:8203;i:7;i:8204;i:8;i:8205;i:9;i:8288;i:10;i:65024;i:11;i:65025;i:12;i:65026;i:13;i:65027;i:14;i:65028;i:15;i:65029;i:16;i:65030;i:17;i:65031;i:18;i:65032;i:19;i:65033;i:20;i:65034;i:21;i:65035;i:22;i:65036;i:23;i:65037;i:24;i:65038;i:25;i:65039;i:26;i:65279;}s:18:"general_prohibited";a:64:{i:0;i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:5;i:5;i:6;i:6;i:7;i:7;i:8;i:8;i:9;i:9;i:10;i:10;i:11;i:11;i:12;i:12;i:13;i:13;i:14;i:14;i:15;i:15;i:16;i:16;i:17;i:17;i:18;i:18;i:19;i:19;i:20;i:20;i:21;i:21;i:22;i:22;i:23;i:23;i:24;i:24;i:25;i:25;i:26;i:26;i:27;i:27;i:28;i:28;i:29;i:29;i:30;i:30;i:31;i:31;i:32;i:32;i:33;i:33;i:34;i:34;i:35;i:35;i:36;i:36;i:37;i:37;i:38;i:38;i:39;i:39;i:40;i:40;i:41;i:41;i:42;i:42;i:43;i:43;i:44;i:44;i:45;i:47;i:46;i:59;i:47;i:60;i:48;i:61;i:49;i:62;i:50;i:63;i:51;i:64;i:52;i:91;i:53;i:92;i:54;i:93;i:55;i:94;i:56;i:95;i:57;i:96;i:58;i:123;i:59;i:124;i:60;i:125;i:61;i:126;i:62;i:127;i:63;i:12290;}s:8:"prohibit";a:84:{i:0;i:160;i:1;i:5760;i:2;i:8192;i:3;i:8193;i:4;i:8194;i:5;i:8195;i:6;i:8196;i:7;i:8197;i:8;i:8198;i:9;i:8199;i:10;i:8200;i:11;i:8201;i:12;i:8202;i:13;i:8203;i:14;i:8239;i:15;i:8287;i:16;i:12288;i:17;i:1757;i:18;i:1807;i:19;i:6158;i:20;i:8204;i:21;i:8205;i:22;i:8232;i:23;i:8233;i:24;i:65279;i:25;i:65529;i:26;i:65530;i:27;i:65531;i:28;i:65532;i:29;i:65534;i:30;i:65535;i:31;i:131070;i:32;i:131071;i:33;i:196606;i:34;i:196607;i:35;i:262142;i:36;i:262143;i:37;i:327678;i:38;i:327679;i:39;i:393214;i:40;i:393215;i:41;i:458750;i:42;i:458751;i:43;i:524286;i:44;i:524287;i:45;i:589822;i:46;i:589823;i:47;i:655358;i:48;i:655359;i:49;i:720894;i:50;i:720895;i:51;i:786430;i:52;i:786431;i:53;i:851966;i:54;i:851967;i:55;i:917502;i:56;i:917503;i:57;i:983038;i:58;i:983039;i:59;i:1048574;i:60;i:1048575;i:61;i:1114110;i:62;i:1114111;i:63;i:65529;i:64;i:65530;i:65;i:65531;i:66;i:65532;i:67;i:65533;i:68;i:832;i:69;i:833;i:70;i:8206;i:71;i:8207;i:72;i:8234;i:73;i:8235;i:74;i:8236;i:75;i:8237;i:76;i:8238;i:77;i:8298;i:78;i:8299;i:79;i:8300;i:80;i:8301;i:81;i:8302;i:82;i:8303;i:83;i:917505;}s:15:"prohibit_ranges";a:10:{i:0;a:2:{i:0;i:128;i:1;i:159;}i:1;a:2:{i:0;i:8288;i:1;i:8303;}i:2;a:2:{i:0;i:119155;i:1;i:119162;}i:3;a:2:{i:0;i:57344;i:1;i:63743;}i:4;a:2:{i:0;i:983040;i:1;i:1048573;}i:5;a:2:{i:0;i:1048576;i:1;i:1114109;}i:6;a:2:{i:0;i:64976;i:1;i:65007;}i:7;a:2:{i:0;i:55296;i:1;i:57343;}i:8;a:2:{i:0;i:12272;i:1;i:12283;}i:9;a:2:{i:0;i:917536;i:1;i:917631;}}s:11:"replacemaps";a:1401:{i:65;a:1:{i:0;i:97;}i:66;a:1:{i:0;i:98;}i:67;a:1:{i:0;i:99;}i:68;a:1:{i:0;i:100;}i:69;a:1:{i:0;i:101;}i:70;a:1:{i:0;i:102;}i:71;a:1:{i:0;i:103;}i:72;a:1:{i:0;i:104;}i:73;a:1:{i:0;i:105;}i:74;a:1:{i:0;i:106;}i:75;a:1:{i:0;i:107;}i:76;a:1:{i:0;i:108;}i:77;a:1:{i:0;i:109;}i:78;a:1:{i:0;i:110;}i:79;a:1:{i:0;i:111;}i:80;a:1:{i:0;i:112;}i:81;a:1:{i:0;i:113;}i:82;a:1:{i:0;i:114;}i:83;a:1:{i:0;i:115;}i:84;a:1:{i:0;i:116;}i:85;a:1:{i:0;i:117;}i:86;a:1:{i:0;i:118;}i:87;a:1:{i:0;i:119;}i:88;a:1:{i:0;i:120;}i:89;a:1:{i:0;i:121;}i:90;a:1:{i:0;i:122;}i:181;a:1:{i:0;i:956;}i:192;a:1:{i:0;i:224;}i:193;a:1:{i:0;i:225;}i:194;a:1:{i:0;i:226;}i:195;a:1:{i:0;i:227;}i:196;a:1:{i:0;i:228;}i:197;a:1:{i:0;i:229;}i:198;a:1:{i:0;i:230;}i:199;a:1:{i:0;i:231;}i:200;a:1:{i:0;i:232;}i:201;a:1:{i:0;i:233;}i:202;a:1:{i:0;i:234;}i:203;a:1:{i:0;i:235;}i:204;a:1:{i:0;i:236;}i:205;a:1:{i:0;i:237;}i:206;a:1:{i:0;i:238;}i:207;a:1:{i:0;i:239;}i:208;a:1:{i:0;i:240;}i:209;a:1:{i:0;i:241;}i:210;a:1:{i:0;i:242;}i:211;a:1:{i:0;i:243;}i:212;a:1:{i:0;i:244;}i:213;a:1:{i:0;i:245;}i:214;a:1:{i:0;i:246;}i:216;a:1:{i:0;i:248;}i:217;a:1:{i:0;i:249;}i:218;a:1:{i:0;i:250;}i:219;a:1:{i:0;i:251;}i:220;a:1:{i:0;i:252;}i:221;a:1:{i:0;i:253;}i:222;a:1:{i:0;i:254;}i:223;a:2:{i:0;i:115;i:1;i:115;}i:256;a:1:{i:0;i:257;}i:258;a:1:{i:0;i:259;}i:260;a:1:{i:0;i:261;}i:262;a:1:{i:0;i:263;}i:264;a:1:{i:0;i:265;}i:266;a:1:{i:0;i:267;}i:268;a:1:{i:0;i:269;}i:270;a:1:{i:0;i:271;}i:272;a:1:{i:0;i:273;}i:274;a:1:{i:0;i:275;}i:276;a:1:{i:0;i:277;}i:278;a:1:{i:0;i:279;}i:280;a:1:{i:0;i:281;}i:282;a:1:{i:0;i:283;}i:284;a:1:{i:0;i:285;}i:286;a:1:{i:0;i:287;}i:288;a:1:{i:0;i:289;}i:290;a:1:{i:0;i:291;}i:292;a:1:{i:0;i:293;}i:294;a:1:{i:0;i:295;}i:296;a:1:{i:0;i:297;}i:298;a:1:{i:0;i:299;}i:300;a:1:{i:0;i:301;}i:302;a:1:{i:0;i:303;}i:304;a:2:{i:0;i:105;i:1;i:775;}i:306;a:1:{i:0;i:307;}i:308;a:1:{i:0;i:309;}i:310;a:1:{i:0;i:311;}i:313;a:1:{i:0;i:314;}i:315;a:1:{i:0;i:316;}i:317;a:1:{i:0;i:318;}i:319;a:1:{i:0;i:320;}i:321;a:1:{i:0;i:322;}i:323;a:1:{i:0;i:324;}i:325;a:1:{i:0;i:326;}i:327;a:1:{i:0;i:328;}i:329;a:2:{i:0;i:700;i:1;i:110;}i:330;a:1:{i:0;i:331;}i:332;a:1:{i:0;i:333;}i:334;a:1:{i:0;i:335;}i:336;a:1:{i:0;i:337;}i:338;a:1:{i:0;i:339;}i:340;a:1:{i:0;i:341;}i:342;a:1:{i:0;i:343;}i:344;a:1:{i:0;i:345;}i:346;a:1:{i:0;i:347;}i:348;a:1:{i:0;i:349;}i:350;a:1:{i:0;i:351;}i:352;a:1:{i:0;i:353;}i:354;a:1:{i:0;i:355;}i:356;a:1:{i:0;i:357;}i:358;a:1:{i:0;i:359;}i:360;a:1:{i:0;i:361;}i:362;a:1:{i:0;i:363;}i:364;a:1:{i:0;i:365;}i:366;a:1:{i:0;i:367;}i:368;a:1:{i:0;i:369;}i:370;a:1:{i:0;i:371;}i:372;a:1:{i:0;i:373;}i:374;a:1:{i:0;i:375;}i:376;a:1:{i:0;i:255;}i:377;a:1:{i:0;i:378;}i:379;a:1:{i:0;i:380;}i:381;a:1:{i:0;i:382;}i:383;a:1:{i:0;i:115;}i:385;a:1:{i:0;i:595;}i:386;a:1:{i:0;i:387;}i:388;a:1:{i:0;i:389;}i:390;a:1:{i:0;i:596;}i:391;a:1:{i:0;i:392;}i:393;a:1:{i:0;i:598;}i:394;a:1:{i:0;i:599;}i:395;a:1:{i:0;i:396;}i:398;a:1:{i:0;i:477;}i:399;a:1:{i:0;i:601;}i:400;a:1:{i:0;i:603;}i:401;a:1:{i:0;i:402;}i:403;a:1:{i:0;i:608;}i:404;a:1:{i:0;i:611;}i:406;a:1:{i:0;i:617;}i:407;a:1:{i:0;i:616;}i:408;a:1:{i:0;i:409;}i:412;a:1:{i:0;i:623;}i:413;a:1:{i:0;i:626;}i:415;a:1:{i:0;i:629;}i:416;a:1:{i:0;i:417;}i:418;a:1:{i:0;i:419;}i:420;a:1:{i:0;i:421;}i:422;a:1:{i:0;i:640;}i:423;a:1:{i:0;i:424;}i:425;a:1:{i:0;i:643;}i:428;a:1:{i:0;i:429;}i:430;a:1:{i:0;i:648;}i:431;a:1:{i:0;i:432;}i:433;a:1:{i:0;i:650;}i:434;a:1:{i:0;i:651;}i:435;a:1:{i:0;i:436;}i:437;a:1:{i:0;i:438;}i:439;a:1:{i:0;i:658;}i:440;a:1:{i:0;i:441;}i:444;a:1:{i:0;i:445;}i:452;a:1:{i:0;i:454;}i:453;a:1:{i:0;i:454;}i:455;a:1:{i:0;i:457;}i:456;a:1:{i:0;i:457;}i:458;a:1:{i:0;i:460;}i:459;a:1:{i:0;i:460;}i:461;a:1:{i:0;i:462;}i:463;a:1:{i:0;i:464;}i:465;a:1:{i:0;i:466;}i:467;a:1:{i:0;i:468;}i:469;a:1:{i:0;i:470;}i:471;a:1:{i:0;i:472;}i:473;a:1:{i:0;i:474;}i:475;a:1:{i:0;i:476;}i:478;a:1:{i:0;i:479;}i:480;a:1:{i:0;i:481;}i:482;a:1:{i:0;i:483;}i:484;a:1:{i:0;i:485;}i:486;a:1:{i:0;i:487;}i:488;a:1:{i:0;i:489;}i:490;a:1:{i:0;i:491;}i:492;a:1:{i:0;i:493;}i:494;a:1:{i:0;i:495;}i:496;a:2:{i:0;i:106;i:1;i:780;}i:497;a:1:{i:0;i:499;}i:498;a:1:{i:0;i:499;}i:500;a:1:{i:0;i:501;}i:502;a:1:{i:0;i:405;}i:503;a:1:{i:0;i:447;}i:504;a:1:{i:0;i:505;}i:506;a:1:{i:0;i:507;}i:508;a:1:{i:0;i:509;}i:510;a:1:{i:0;i:511;}i:512;a:1:{i:0;i:513;}i:514;a:1:{i:0;i:515;}i:516;a:1:{i:0;i:517;}i:518;a:1:{i:0;i:519;}i:520;a:1:{i:0;i:521;}i:522;a:1:{i:0;i:523;}i:524;a:1:{i:0;i:525;}i:526;a:1:{i:0;i:527;}i:528;a:1:{i:0;i:529;}i:530;a:1:{i:0;i:531;}i:532;a:1:{i:0;i:533;}i:534;a:1:{i:0;i:535;}i:536;a:1:{i:0;i:537;}i:538;a:1:{i:0;i:539;}i:540;a:1:{i:0;i:541;}i:542;a:1:{i:0;i:543;}i:544;a:1:{i:0;i:414;}i:546;a:1:{i:0;i:547;}i:548;a:1:{i:0;i:549;}i:550;a:1:{i:0;i:551;}i:552;a:1:{i:0;i:553;}i:554;a:1:{i:0;i:555;}i:556;a:1:{i:0;i:557;}i:558;a:1:{i:0;i:559;}i:560;a:1:{i:0;i:561;}i:562;a:1:{i:0;i:563;}i:837;a:1:{i:0;i:953;}i:890;a:2:{i:0;i:32;i:1;i:953;}i:902;a:1:{i:0;i:940;}i:904;a:1:{i:0;i:941;}i:905;a:1:{i:0;i:942;}i:906;a:1:{i:0;i:943;}i:908;a:1:{i:0;i:972;}i:910;a:1:{i:0;i:973;}i:911;a:1:{i:0;i:974;}i:912;a:3:{i:0;i:953;i:1;i:776;i:2;i:769;}i:913;a:1:{i:0;i:945;}i:914;a:1:{i:0;i:946;}i:915;a:1:{i:0;i:947;}i:916;a:1:{i:0;i:948;}i:917;a:1:{i:0;i:949;}i:918;a:1:{i:0;i:950;}i:919;a:1:{i:0;i:951;}i:920;a:1:{i:0;i:952;}i:921;a:1:{i:0;i:953;}i:922;a:1:{i:0;i:954;}i:923;a:1:{i:0;i:955;}i:924;a:1:{i:0;i:956;}i:925;a:1:{i:0;i:957;}i:926;a:1:{i:0;i:958;}i:927;a:1:{i:0;i:959;}i:928;a:1:{i:0;i:960;}i:929;a:1:{i:0;i:961;}i:931;a:1:{i:0;i:963;}i:932;a:1:{i:0;i:964;}i:933;a:1:{i:0;i:965;}i:934;a:1:{i:0;i:966;}i:935;a:1:{i:0;i:967;}i:936;a:1:{i:0;i:968;}i:937;a:1:{i:0;i:969;}i:938;a:1:{i:0;i:970;}i:939;a:1:{i:0;i:971;}i:944;a:3:{i:0;i:965;i:1;i:776;i:2;i:769;}i:962;a:1:{i:0;i:963;}i:976;a:1:{i:0;i:946;}i:977;a:1:{i:0;i:952;}i:978;a:1:{i:0;i:965;}i:979;a:1:{i:0;i:973;}i:980;a:1:{i:0;i:971;}i:981;a:1:{i:0;i:966;}i:982;a:1:{i:0;i:960;}i:984;a:1:{i:0;i:985;}i:986;a:1:{i:0;i:987;}i:988;a:1:{i:0;i:989;}i:990;a:1:{i:0;i:991;}i:992;a:1:{i:0;i:993;}i:994;a:1:{i:0;i:995;}i:996;a:1:{i:0;i:997;}i:998;a:1:{i:0;i:999;}i:1000;a:1:{i:0;i:1001;}i:1002;a:1:{i:0;i:1003;}i:1004;a:1:{i:0;i:1005;}i:1006;a:1:{i:0;i:1007;}i:1008;a:1:{i:0;i:954;}i:1009;a:1:{i:0;i:961;}i:1010;a:1:{i:0;i:963;}i:1012;a:1:{i:0;i:952;}i:1013;a:1:{i:0;i:949;}i:1024;a:1:{i:0;i:1104;}i:1025;a:1:{i:0;i:1105;}i:1026;a:1:{i:0;i:1106;}i:1027;a:1:{i:0;i:1107;}i:1028;a:1:{i:0;i:1108;}i:1029;a:1:{i:0;i:1109;}i:1030;a:1:{i:0;i:1110;}i:1031;a:1:{i:0;i:1111;}i:1032;a:1:{i:0;i:1112;}i:1033;a:1:{i:0;i:1113;}i:1034;a:1:{i:0;i:1114;}i:1035;a:1:{i:0;i:1115;}i:1036;a:1:{i:0;i:1116;}i:1037;a:1:{i:0;i:1117;}i:1038;a:1:{i:0;i:1118;}i:1039;a:1:{i:0;i:1119;}i:1040;a:1:{i:0;i:1072;}i:1041;a:1:{i:0;i:1073;}i:1042;a:1:{i:0;i:1074;}i:1043;a:1:{i:0;i:1075;}i:1044;a:1:{i:0;i:1076;}i:1045;a:1:{i:0;i:1077;}i:1046;a:1:{i:0;i:1078;}i:1047;a:1:{i:0;i:1079;}i:1048;a:1:{i:0;i:1080;}i:1049;a:1:{i:0;i:1081;}i:1050;a:1:{i:0;i:1082;}i:1051;a:1:{i:0;i:1083;}i:1052;a:1:{i:0;i:1084;}i:1053;a:1:{i:0;i:1085;}i:1054;a:1:{i:0;i:1086;}i:1055;a:1:{i:0;i:1087;}i:1056;a:1:{i:0;i:1088;}i:1057;a:1:{i:0;i:1089;}i:1058;a:1:{i:0;i:1090;}i:1059;a:1:{i:0;i:1091;}i:1060;a:1:{i:0;i:1092;}i:1061;a:1:{i:0;i:1093;}i:1062;a:1:{i:0;i:1094;}i:1063;a:1:{i:0;i:1095;}i:1064;a:1:{i:0;i:1096;}i:1065;a:1:{i:0;i:1097;}i:1066;a:1:{i:0;i:1098;}i:1067;a:1:{i:0;i:1099;}i:1068;a:1:{i:0;i:1100;}i:1069;a:1:{i:0;i:1101;}i:1070;a:1:{i:0;i:1102;}i:1071;a:1:{i:0;i:1103;}i:1120;a:1:{i:0;i:1121;}i:1122;a:1:{i:0;i:1123;}i:1124;a:1:{i:0;i:1125;}i:1126;a:1:{i:0;i:1127;}i:1128;a:1:{i:0;i:1129;}i:1130;a:1:{i:0;i:1131;}i:1132;a:1:{i:0;i:1133;}i:1134;a:1:{i:0;i:1135;}i:1136;a:1:{i:0;i:1137;}i:1138;a:1:{i:0;i:1139;}i:1140;a:1:{i:0;i:1141;}i:1142;a:1:{i:0;i:1143;}i:1144;a:1:{i:0;i:1145;}i:1146;a:1:{i:0;i:1147;}i:1148;a:1:{i:0;i:1149;}i:1150;a:1:{i:0;i:1151;}i:1152;a:1:{i:0;i:1153;}i:1162;a:1:{i:0;i:1163;}i:1164;a:1:{i:0;i:1165;}i:1166;a:1:{i:0;i:1167;}i:1168;a:1:{i:0;i:1169;}i:1170;a:1:{i:0;i:1171;}i:1172;a:1:{i:0;i:1173;}i:1174;a:1:{i:0;i:1175;}i:1176;a:1:{i:0;i:1177;}i:1178;a:1:{i:0;i:1179;}i:1180;a:1:{i:0;i:1181;}i:1182;a:1:{i:0;i:1183;}i:1184;a:1:{i:0;i:1185;}i:1186;a:1:{i:0;i:1187;}i:1188;a:1:{i:0;i:1189;}i:1190;a:1:{i:0;i:1191;}i:1192;a:1:{i:0;i:1193;}i:1194;a:1:{i:0;i:1195;}i:1196;a:1:{i:0;i:1197;}i:1198;a:1:{i:0;i:1199;}i:1200;a:1:{i:0;i:1201;}i:1202;a:1:{i:0;i:1203;}i:1204;a:1:{i:0;i:1205;}i:1206;a:1:{i:0;i:1207;}i:1208;a:1:{i:0;i:1209;}i:1210;a:1:{i:0;i:1211;}i:1212;a:1:{i:0;i:1213;}i:1214;a:1:{i:0;i:1215;}i:1217;a:1:{i:0;i:1218;}i:1219;a:1:{i:0;i:1220;}i:1221;a:1:{i:0;i:1222;}i:1223;a:1:{i:0;i:1224;}i:1225;a:1:{i:0;i:1226;}i:1227;a:1:{i:0;i:1228;}i:1229;a:1:{i:0;i:1230;}i:1232;a:1:{i:0;i:1233;}i:1234;a:1:{i:0;i:1235;}i:1236;a:1:{i:0;i:1237;}i:1238;a:1:{i:0;i:1239;}i:1240;a:1:{i:0;i:1241;}i:1242;a:1:{i:0;i:1243;}i:1244;a:1:{i:0;i:1245;}i:1246;a:1:{i:0;i:1247;}i:1248;a:1:{i:0;i:1249;}i:1250;a:1:{i:0;i:1251;}i:1252;a:1:{i:0;i:1253;}i:1254;a:1:{i:0;i:1255;}i:1256;a:1:{i:0;i:1257;}i:1258;a:1:{i:0;i:1259;}i:1260;a:1:{i:0;i:1261;}i:1262;a:1:{i:0;i:1263;}i:1264;a:1:{i:0;i:1265;}i:1266;a:1:{i:0;i:1267;}i:1268;a:1:{i:0;i:1269;}i:1272;a:1:{i:0;i:1273;}i:1280;a:1:{i:0;i:1281;}i:1282;a:1:{i:0;i:1283;}i:1284;a:1:{i:0;i:1285;}i:1286;a:1:{i:0;i:1287;}i:1288;a:1:{i:0;i:1289;}i:1290;a:1:{i:0;i:1291;}i:1292;a:1:{i:0;i:1293;}i:1294;a:1:{i:0;i:1295;}i:1329;a:1:{i:0;i:1377;}i:1330;a:1:{i:0;i:1378;}i:1331;a:1:{i:0;i:1379;}i:1332;a:1:{i:0;i:1380;}i:1333;a:1:{i:0;i:1381;}i:1334;a:1:{i:0;i:1382;}i:1335;a:1:{i:0;i:1383;}i:1336;a:1:{i:0;i:1384;}i:1337;a:1:{i:0;i:1385;}i:1338;a:1:{i:0;i:1386;}i:1339;a:1:{i:0;i:1387;}i:1340;a:1:{i:0;i:1388;}i:1341;a:1:{i:0;i:1389;}i:1342;a:1:{i:0;i:1390;}i:1343;a:1:{i:0;i:1391;}i:1344;a:1:{i:0;i:1392;}i:1345;a:1:{i:0;i:1393;}i:1346;a:1:{i:0;i:1394;}i:1347;a:1:{i:0;i:1395;}i:1348;a:1:{i:0;i:1396;}i:1349;a:1:{i:0;i:1397;}i:1350;a:1:{i:0;i:1398;}i:1351;a:1:{i:0;i:1399;}i:1352;a:1:{i:0;i:1400;}i:1353;a:1:{i:0;i:1401;}i:1354;a:1:{i:0;i:1402;}i:1355;a:1:{i:0;i:1403;}i:1356;a:1:{i:0;i:1404;}i:1357;a:1:{i:0;i:1405;}i:1358;a:1:{i:0;i:1406;}i:1359;a:1:{i:0;i:1407;}i:1360;a:1:{i:0;i:1408;}i:1361;a:1:{i:0;i:1409;}i:1362;a:1:{i:0;i:1410;}i:1363;a:1:{i:0;i:1411;}i:1364;a:1:{i:0;i:1412;}i:1365;a:1:{i:0;i:1413;}i:1366;a:1:{i:0;i:1414;}i:1415;a:2:{i:0;i:1381;i:1;i:1410;}i:7680;a:1:{i:0;i:7681;}i:7682;a:1:{i:0;i:7683;}i:7684;a:1:{i:0;i:7685;}i:7686;a:1:{i:0;i:7687;}i:7688;a:1:{i:0;i:7689;}i:7690;a:1:{i:0;i:7691;}i:7692;a:1:{i:0;i:7693;}i:7694;a:1:{i:0;i:7695;}i:7696;a:1:{i:0;i:7697;}i:7698;a:1:{i:0;i:7699;}i:7700;a:1:{i:0;i:7701;}i:7702;a:1:{i:0;i:7703;}i:7704;a:1:{i:0;i:7705;}i:7706;a:1:{i:0;i:7707;}i:7708;a:1:{i:0;i:7709;}i:7710;a:1:{i:0;i:7711;}i:7712;a:1:{i:0;i:7713;}i:7714;a:1:{i:0;i:7715;}i:7716;a:1:{i:0;i:7717;}i:7718;a:1:{i:0;i:7719;}i:7720;a:1:{i:0;i:7721;}i:7722;a:1:{i:0;i:7723;}i:7724;a:1:{i:0;i:7725;}i:7726;a:1:{i:0;i:7727;}i:7728;a:1:{i:0;i:7729;}i:7730;a:1:{i:0;i:7731;}i:7732;a:1:{i:0;i:7733;}i:7734;a:1:{i:0;i:7735;}i:7736;a:1:{i:0;i:7737;}i:7738;a:1:{i:0;i:7739;}i:7740;a:1:{i:0;i:7741;}i:7742;a:1:{i:0;i:7743;}i:7744;a:1:{i:0;i:7745;}i:7746;a:1:{i:0;i:7747;}i:7748;a:1:{i:0;i:7749;}i:7750;a:1:{i:0;i:7751;}i:7752;a:1:{i:0;i:7753;}i:7754;a:1:{i:0;i:7755;}i:7756;a:1:{i:0;i:7757;}i:7758;a:1:{i:0;i:7759;}i:7760;a:1:{i:0;i:7761;}i:7762;a:1:{i:0;i:7763;}i:7764;a:1:{i:0;i:7765;}i:7766;a:1:{i:0;i:7767;}i:7768;a:1:{i:0;i:7769;}i:7770;a:1:{i:0;i:7771;}i:7772;a:1:{i:0;i:7773;}i:7774;a:1:{i:0;i:7775;}i:7776;a:1:{i:0;i:7777;}i:7778;a:1:{i:0;i:7779;}i:7780;a:1:{i:0;i:7781;}i:7782;a:1:{i:0;i:7783;}i:7784;a:1:{i:0;i:7785;}i:7786;a:1:{i:0;i:7787;}i:7788;a:1:{i:0;i:7789;}i:7790;a:1:{i:0;i:7791;}i:7792;a:1:{i:0;i:7793;}i:7794;a:1:{i:0;i:7795;}i:7796;a:1:{i:0;i:7797;}i:7798;a:1:{i:0;i:7799;}i:7800;a:1:{i:0;i:7801;}i:7802;a:1:{i:0;i:7803;}i:7804;a:1:{i:0;i:7805;}i:7806;a:1:{i:0;i:7807;}i:7808;a:1:{i:0;i:7809;}i:7810;a:1:{i:0;i:7811;}i:7812;a:1:{i:0;i:7813;}i:7814;a:1:{i:0;i:7815;}i:7816;a:1:{i:0;i:7817;}i:7818;a:1:{i:0;i:7819;}i:7820;a:1:{i:0;i:7821;}i:7822;a:1:{i:0;i:7823;}i:7824;a:1:{i:0;i:7825;}i:7826;a:1:{i:0;i:7827;}i:7828;a:1:{i:0;i:7829;}i:7830;a:2:{i:0;i:104;i:1;i:817;}i:7831;a:2:{i:0;i:116;i:1;i:776;}i:7832;a:2:{i:0;i:119;i:1;i:778;}i:7833;a:2:{i:0;i:121;i:1;i:778;}i:7834;a:2:{i:0;i:97;i:1;i:702;}i:7835;a:1:{i:0;i:7777;}i:7840;a:1:{i:0;i:7841;}i:7842;a:1:{i:0;i:7843;}i:7844;a:1:{i:0;i:7845;}i:7846;a:1:{i:0;i:7847;}i:7848;a:1:{i:0;i:7849;}i:7850;a:1:{i:0;i:7851;}i:7852;a:1:{i:0;i:7853;}i:7854;a:1:{i:0;i:7855;}i:7856;a:1:{i:0;i:7857;}i:7858;a:1:{i:0;i:7859;}i:7860;a:1:{i:0;i:7861;}i:7862;a:1:{i:0;i:7863;}i:7864;a:1:{i:0;i:7865;}i:7866;a:1:{i:0;i:7867;}i:7868;a:1:{i:0;i:7869;}i:7870;a:1:{i:0;i:7871;}i:7872;a:1:{i:0;i:7873;}i:7874;a:1:{i:0;i:7875;}i:7876;a:1:{i:0;i:7877;}i:7878;a:1:{i:0;i:7879;}i:7880;a:1:{i:0;i:7881;}i:7882;a:1:{i:0;i:7883;}i:7884;a:1:{i:0;i:7885;}i:7886;a:1:{i:0;i:7887;}i:7888;a:1:{i:0;i:7889;}i:7890;a:1:{i:0;i:7891;}i:7892;a:1:{i:0;i:7893;}i:7894;a:1:{i:0;i:7895;}i:7896;a:1:{i:0;i:7897;}i:7898;a:1:{i:0;i:7899;}i:7900;a:1:{i:0;i:7901;}i:7902;a:1:{i:0;i:7903;}i:7904;a:1:{i:0;i:7905;}i:7906;a:1:{i:0;i:7907;}i:7908;a:1:{i:0;i:7909;}i:7910;a:1:{i:0;i:7911;}i:7912;a:1:{i:0;i:7913;}i:7914;a:1:{i:0;i:7915;}i:7916;a:1:{i:0;i:7917;}i:7918;a:1:{i:0;i:7919;}i:7920;a:1:{i:0;i:7921;}i:7922;a:1:{i:0;i:7923;}i:7924;a:1:{i:0;i:7925;}i:7926;a:1:{i:0;i:7927;}i:7928;a:1:{i:0;i:7929;}i:7944;a:1:{i:0;i:7936;}i:7945;a:1:{i:0;i:7937;}i:7946;a:1:{i:0;i:7938;}i:7947;a:1:{i:0;i:7939;}i:7948;a:1:{i:0;i:7940;}i:7949;a:1:{i:0;i:7941;}i:7950;a:1:{i:0;i:7942;}i:7951;a:1:{i:0;i:7943;}i:7960;a:1:{i:0;i:7952;}i:7961;a:1:{i:0;i:7953;}i:7962;a:1:{i:0;i:7954;}i:7963;a:1:{i:0;i:7955;}i:7964;a:1:{i:0;i:7956;}i:7965;a:1:{i:0;i:7957;}i:7976;a:1:{i:0;i:7968;}i:7977;a:1:{i:0;i:7969;}i:7978;a:1:{i:0;i:7970;}i:7979;a:1:{i:0;i:7971;}i:7980;a:1:{i:0;i:7972;}i:7981;a:1:{i:0;i:7973;}i:7982;a:1:{i:0;i:7974;}i:7983;a:1:{i:0;i:7975;}i:7992;a:1:{i:0;i:7984;}i:7993;a:1:{i:0;i:7985;}i:7994;a:1:{i:0;i:7986;}i:7995;a:1:{i:0;i:7987;}i:7996;a:1:{i:0;i:7988;}i:7997;a:1:{i:0;i:7989;}i:7998;a:1:{i:0;i:7990;}i:7999;a:1:{i:0;i:7991;}i:8008;a:1:{i:0;i:8000;}i:8009;a:1:{i:0;i:8001;}i:8010;a:1:{i:0;i:8002;}i:8011;a:1:{i:0;i:8003;}i:8012;a:1:{i:0;i:8004;}i:8013;a:1:{i:0;i:8005;}i:8016;a:2:{i:0;i:965;i:1;i:787;}i:8018;a:3:{i:0;i:965;i:1;i:787;i:2;i:768;}i:8020;a:3:{i:0;i:965;i:1;i:787;i:2;i:769;}i:8022;a:3:{i:0;i:965;i:1;i:787;i:2;i:834;}i:8025;a:1:{i:0;i:8017;}i:8027;a:1:{i:0;i:8019;}i:8029;a:1:{i:0;i:8021;}i:8031;a:1:{i:0;i:8023;}i:8040;a:1:{i:0;i:8032;}i:8041;a:1:{i:0;i:8033;}i:8042;a:1:{i:0;i:8034;}i:8043;a:1:{i:0;i:8035;}i:8044;a:1:{i:0;i:8036;}i:8045;a:1:{i:0;i:8037;}i:8046;a:1:{i:0;i:8038;}i:8047;a:1:{i:0;i:8039;}i:8064;a:2:{i:0;i:7936;i:1;i:953;}i:8065;a:2:{i:0;i:7937;i:1;i:953;}i:8066;a:2:{i:0;i:7938;i:1;i:953;}i:8067;a:2:{i:0;i:7939;i:1;i:953;}i:8068;a:2:{i:0;i:7940;i:1;i:953;}i:8069;a:2:{i:0;i:7941;i:1;i:953;}i:8070;a:2:{i:0;i:7942;i:1;i:953;}i:8071;a:2:{i:0;i:7943;i:1;i:953;}i:8072;a:2:{i:0;i:7936;i:1;i:953;}i:8073;a:2:{i:0;i:7937;i:1;i:953;}i:8074;a:2:{i:0;i:7938;i:1;i:953;}i:8075;a:2:{i:0;i:7939;i:1;i:953;}i:8076;a:2:{i:0;i:7940;i:1;i:953;}i:8077;a:2:{i:0;i:7941;i:1;i:953;}i:8078;a:2:{i:0;i:7942;i:1;i:953;}i:8079;a:2:{i:0;i:7943;i:1;i:953;}i:8080;a:2:{i:0;i:7968;i:1;i:953;}i:8081;a:2:{i:0;i:7969;i:1;i:953;}i:8082;a:2:{i:0;i:7970;i:1;i:953;}i:8083;a:2:{i:0;i:7971;i:1;i:953;}i:8084;a:2:{i:0;i:7972;i:1;i:953;}i:8085;a:2:{i:0;i:7973;i:1;i:953;}i:8086;a:2:{i:0;i:7974;i:1;i:953;}i:8087;a:2:{i:0;i:7975;i:1;i:953;}i:8088;a:2:{i:0;i:7968;i:1;i:953;}i:8089;a:2:{i:0;i:7969;i:1;i:953;}i:8090;a:2:{i:0;i:7970;i:1;i:953;}i:8091;a:2:{i:0;i:7971;i:1;i:953;}i:8092;a:2:{i:0;i:7972;i:1;i:953;}i:8093;a:2:{i:0;i:7973;i:1;i:953;}i:8094;a:2:{i:0;i:7974;i:1;i:953;}i:8095;a:2:{i:0;i:7975;i:1;i:953;}i:8096;a:2:{i:0;i:8032;i:1;i:953;}i:8097;a:2:{i:0;i:8033;i:1;i:953;}i:8098;a:2:{i:0;i:8034;i:1;i:953;}i:8099;a:2:{i:0;i:8035;i:1;i:953;}i:8100;a:2:{i:0;i:8036;i:1;i:953;}i:8101;a:2:{i:0;i:8037;i:1;i:953;}i:8102;a:2:{i:0;i:8038;i:1;i:953;}i:8103;a:2:{i:0;i:8039;i:1;i:953;}i:8104;a:2:{i:0;i:8032;i:1;i:953;}i:8105;a:2:{i:0;i:8033;i:1;i:953;}i:8106;a:2:{i:0;i:8034;i:1;i:953;}i:8107;a:2:{i:0;i:8035;i:1;i:953;}i:8108;a:2:{i:0;i:8036;i:1;i:953;}i:8109;a:2:{i:0;i:8037;i:1;i:953;}i:8110;a:2:{i:0;i:8038;i:1;i:953;}i:8111;a:2:{i:0;i:8039;i:1;i:953;}i:8114;a:2:{i:0;i:8048;i:1;i:953;}i:8115;a:2:{i:0;i:945;i:1;i:953;}i:8116;a:2:{i:0;i:940;i:1;i:953;}i:8118;a:2:{i:0;i:945;i:1;i:834;}i:8119;a:3:{i:0;i:945;i:1;i:834;i:2;i:953;}i:8120;a:1:{i:0;i:8112;}i:8121;a:1:{i:0;i:8113;}i:8122;a:1:{i:0;i:8048;}i:8123;a:1:{i:0;i:8049;}i:8124;a:2:{i:0;i:945;i:1;i:953;}i:8126;a:1:{i:0;i:953;}i:8130;a:2:{i:0;i:8052;i:1;i:953;}i:8131;a:2:{i:0;i:951;i:1;i:953;}i:8132;a:2:{i:0;i:942;i:1;i:953;}i:8134;a:2:{i:0;i:951;i:1;i:834;}i:8135;a:3:{i:0;i:951;i:1;i:834;i:2;i:953;}i:8136;a:1:{i:0;i:8050;}i:8137;a:1:{i:0;i:8051;}i:8138;a:1:{i:0;i:8052;}i:8139;a:1:{i:0;i:8053;}i:8140;a:2:{i:0;i:951;i:1;i:953;}i:8146;a:3:{i:0;i:953;i:1;i:776;i:2;i:768;}i:8147;a:3:{i:0;i:953;i:1;i:776;i:2;i:769;}i:8150;a:2:{i:0;i:953;i:1;i:834;}i:8151;a:3:{i:0;i:953;i:1;i:776;i:2;i:834;}i:8152;a:1:{i:0;i:8144;}i:8153;a:1:{i:0;i:8145;}i:8154;a:1:{i:0;i:8054;}i:8155;a:1:{i:0;i:8055;}i:8162;a:3:{i:0;i:965;i:1;i:776;i:2;i:768;}i:8163;a:3:{i:0;i:965;i:1;i:776;i:2;i:769;}i:8164;a:2:{i:0;i:961;i:1;i:787;}i:8166;a:2:{i:0;i:965;i:1;i:834;}i:8167;a:3:{i:0;i:965;i:1;i:776;i:2;i:834;}i:8168;a:1:{i:0;i:8160;}i:8169;a:1:{i:0;i:8161;}i:8170;a:1:{i:0;i:8058;}i:8171;a:1:{i:0;i:8059;}i:8172;a:1:{i:0;i:8165;}i:8178;a:2:{i:0;i:8060;i:1;i:953;}i:8179;a:2:{i:0;i:969;i:1;i:953;}i:8180;a:2:{i:0;i:974;i:1;i:953;}i:8182;a:2:{i:0;i:969;i:1;i:834;}i:8183;a:3:{i:0;i:969;i:1;i:834;i:2;i:953;}i:8184;a:1:{i:0;i:8056;}i:8185;a:1:{i:0;i:8057;}i:8186;a:1:{i:0;i:8060;}i:8187;a:1:{i:0;i:8061;}i:8188;a:2:{i:0;i:969;i:1;i:953;}i:8360;a:2:{i:0;i:114;i:1;i:115;}i:8450;a:1:{i:0;i:99;}i:8451;a:2:{i:0;i:176;i:1;i:99;}i:8455;a:1:{i:0;i:603;}i:8457;a:2:{i:0;i:176;i:1;i:102;}i:8459;a:1:{i:0;i:104;}i:8460;a:1:{i:0;i:104;}i:8461;a:1:{i:0;i:104;}i:8464;a:1:{i:0;i:105;}i:8465;a:1:{i:0;i:105;}i:8466;a:1:{i:0;i:108;}i:8469;a:1:{i:0;i:110;}i:8470;a:2:{i:0;i:110;i:1;i:111;}i:8473;a:1:{i:0;i:112;}i:8474;a:1:{i:0;i:113;}i:8475;a:1:{i:0;i:114;}i:8476;a:1:{i:0;i:114;}i:8477;a:1:{i:0;i:114;}i:8480;a:2:{i:0;i:115;i:1;i:109;}i:8481;a:3:{i:0;i:116;i:1;i:101;i:2;i:108;}i:8482;a:2:{i:0;i:116;i:1;i:109;}i:8484;a:1:{i:0;i:122;}i:8486;a:1:{i:0;i:969;}i:8488;a:1:{i:0;i:122;}i:8490;a:1:{i:0;i:107;}i:8491;a:1:{i:0;i:229;}i:8492;a:1:{i:0;i:98;}i:8493;a:1:{i:0;i:99;}i:8496;a:1:{i:0;i:101;}i:8497;a:1:{i:0;i:102;}i:8499;a:1:{i:0;i:109;}i:8510;a:1:{i:0;i:947;}i:8511;a:1:{i:0;i:960;}i:8517;a:1:{i:0;i:100;}i:8544;a:1:{i:0;i:8560;}i:8545;a:1:{i:0;i:8561;}i:8546;a:1:{i:0;i:8562;}i:8547;a:1:{i:0;i:8563;}i:8548;a:1:{i:0;i:8564;}i:8549;a:1:{i:0;i:8565;}i:8550;a:1:{i:0;i:8566;}i:8551;a:1:{i:0;i:8567;}i:8552;a:1:{i:0;i:8568;}i:8553;a:1:{i:0;i:8569;}i:8554;a:1:{i:0;i:8570;}i:8555;a:1:{i:0;i:8571;}i:8556;a:1:{i:0;i:8572;}i:8557;a:1:{i:0;i:8573;}i:8558;a:1:{i:0;i:8574;}i:8559;a:1:{i:0;i:8575;}i:9398;a:1:{i:0;i:9424;}i:9399;a:1:{i:0;i:9425;}i:9400;a:1:{i:0;i:9426;}i:9401;a:1:{i:0;i:9427;}i:9402;a:1:{i:0;i:9428;}i:9403;a:1:{i:0;i:9429;}i:9404;a:1:{i:0;i:9430;}i:9405;a:1:{i:0;i:9431;}i:9406;a:1:{i:0;i:9432;}i:9407;a:1:{i:0;i:9433;}i:9408;a:1:{i:0;i:9434;}i:9409;a:1:{i:0;i:9435;}i:9410;a:1:{i:0;i:9436;}i:9411;a:1:{i:0;i:9437;}i:9412;a:1:{i:0;i:9438;}i:9413;a:1:{i:0;i:9439;}i:9414;a:1:{i:0;i:9440;}i:9415;a:1:{i:0;i:9441;}i:9416;a:1:{i:0;i:9442;}i:9417;a:1:{i:0;i:9443;}i:9418;a:1:{i:0;i:9444;}i:9419;a:1:{i:0;i:9445;}i:9420;a:1:{i:0;i:9446;}i:9421;a:1:{i:0;i:9447;}i:9422;a:1:{i:0;i:9448;}i:9423;a:1:{i:0;i:9449;}i:13169;a:3:{i:0;i:104;i:1;i:112;i:2;i:97;}i:13171;a:2:{i:0;i:97;i:1;i:117;}i:13173;a:2:{i:0;i:111;i:1;i:118;}i:13184;a:2:{i:0;i:112;i:1;i:97;}i:13185;a:2:{i:0;i:110;i:1;i:97;}i:13186;a:2:{i:0;i:956;i:1;i:97;}i:13187;a:2:{i:0;i:109;i:1;i:97;}i:13188;a:2:{i:0;i:107;i:1;i:97;}i:13189;a:2:{i:0;i:107;i:1;i:98;}i:13190;a:2:{i:0;i:109;i:1;i:98;}i:13191;a:2:{i:0;i:103;i:1;i:98;}i:13194;a:2:{i:0;i:112;i:1;i:102;}i:13195;a:2:{i:0;i:110;i:1;i:102;}i:13196;a:2:{i:0;i:956;i:1;i:102;}i:13200;a:2:{i:0;i:104;i:1;i:122;}i:13201;a:3:{i:0;i:107;i:1;i:104;i:2;i:122;}i:13202;a:3:{i:0;i:109;i:1;i:104;i:2;i:122;}i:13203;a:3:{i:0;i:103;i:1;i:104;i:2;i:122;}i:13204;a:3:{i:0;i:116;i:1;i:104;i:2;i:122;}i:13225;a:2:{i:0;i:112;i:1;i:97;}i:13226;a:3:{i:0;i:107;i:1;i:112;i:2;i:97;}i:13227;a:3:{i:0;i:109;i:1;i:112;i:2;i:97;}i:13228;a:3:{i:0;i:103;i:1;i:112;i:2;i:97;}i:13236;a:2:{i:0;i:112;i:1;i:118;}i:13237;a:2:{i:0;i:110;i:1;i:118;}i:13238;a:2:{i:0;i:956;i:1;i:118;}i:13239;a:2:{i:0;i:109;i:1;i:118;}i:13240;a:2:{i:0;i:107;i:1;i:118;}i:13241;a:2:{i:0;i:109;i:1;i:118;}i:13242;a:2:{i:0;i:112;i:1;i:119;}i:13243;a:2:{i:0;i:110;i:1;i:119;}i:13244;a:2:{i:0;i:956;i:1;i:119;}i:13245;a:2:{i:0;i:109;i:1;i:119;}i:13246;a:2:{i:0;i:107;i:1;i:119;}i:13247;a:2:{i:0;i:109;i:1;i:119;}i:13248;a:2:{i:0;i:107;i:1;i:969;}i:13249;a:2:{i:0;i:109;i:1;i:969;}i:13251;a:2:{i:0;i:98;i:1;i:113;}i:13254;a:4:{i:0;i:99;i:1;i:8725;i:2;i:107;i:3;i:103;}i:13255;a:3:{i:0;i:99;i:1;i:111;i:2;i:46;}i:13256;a:2:{i:0;i:100;i:1;i:98;}i:13257;a:2:{i:0;i:103;i:1;i:121;}i:13259;a:2:{i:0;i:104;i:1;i:112;}i:13261;a:2:{i:0;i:107;i:1;i:107;}i:13262;a:2:{i:0;i:107;i:1;i:109;}i:13271;a:2:{i:0;i:112;i:1;i:104;}i:13273;a:3:{i:0;i:112;i:1;i:112;i:2;i:109;}i:13274;a:2:{i:0;i:112;i:1;i:114;}i:13276;a:2:{i:0;i:115;i:1;i:118;}i:13277;a:2:{i:0;i:119;i:1;i:98;}i:64256;a:2:{i:0;i:102;i:1;i:102;}i:64257;a:2:{i:0;i:102;i:1;i:105;}i:64258;a:2:{i:0;i:102;i:1;i:108;}i:64259;a:3:{i:0;i:102;i:1;i:102;i:2;i:105;}i:64260;a:3:{i:0;i:102;i:1;i:102;i:2;i:108;}i:64261;a:2:{i:0;i:115;i:1;i:116;}i:64262;a:2:{i:0;i:115;i:1;i:116;}i:64275;a:2:{i:0;i:1396;i:1;i:1398;}i:64276;a:2:{i:0;i:1396;i:1;i:1381;}i:64277;a:2:{i:0;i:1396;i:1;i:1387;}i:64278;a:2:{i:0;i:1406;i:1;i:1398;}i:64279;a:2:{i:0;i:1396;i:1;i:1389;}i:65313;a:1:{i:0;i:65345;}i:65314;a:1:{i:0;i:65346;}i:65315;a:1:{i:0;i:65347;}i:65316;a:1:{i:0;i:65348;}i:65317;a:1:{i:0;i:65349;}i:65318;a:1:{i:0;i:65350;}i:65319;a:1:{i:0;i:65351;}i:65320;a:1:{i:0;i:65352;}i:65321;a:1:{i:0;i:65353;}i:65322;a:1:{i:0;i:65354;}i:65323;a:1:{i:0;i:65355;}i:65324;a:1:{i:0;i:65356;}i:65325;a:1:{i:0;i:65357;}i:65326;a:1:{i:0;i:65358;}i:65327;a:1:{i:0;i:65359;}i:65328;a:1:{i:0;i:65360;}i:65329;a:1:{i:0;i:65361;}i:65330;a:1:{i:0;i:65362;}i:65331;a:1:{i:0;i:65363;}i:65332;a:1:{i:0;i:65364;}i:65333;a:1:{i:0;i:65365;}i:65334;a:1:{i:0;i:65366;}i:65335;a:1:{i:0;i:65367;}i:65336;a:1:{i:0;i:65368;}i:65337;a:1:{i:0;i:65369;}i:65338;a:1:{i:0;i:65370;}i:66560;a:1:{i:0;i:66600;}i:66561;a:1:{i:0;i:66601;}i:66562;a:1:{i:0;i:66602;}i:66563;a:1:{i:0;i:66603;}i:66564;a:1:{i:0;i:66604;}i:66565;a:1:{i:0;i:66605;}i:66566;a:1:{i:0;i:66606;}i:66567;a:1:{i:0;i:66607;}i:66568;a:1:{i:0;i:66608;}i:66569;a:1:{i:0;i:66609;}i:66570;a:1:{i:0;i:66610;}i:66571;a:1:{i:0;i:66611;}i:66572;a:1:{i:0;i:66612;}i:66573;a:1:{i:0;i:66613;}i:66574;a:1:{i:0;i:66614;}i:66575;a:1:{i:0;i:66615;}i:66576;a:1:{i:0;i:66616;}i:66577;a:1:{i:0;i:66617;}i:66578;a:1:{i:0;i:66618;}i:66579;a:1:{i:0;i:66619;}i:66580;a:1:{i:0;i:66620;}i:66581;a:1:{i:0;i:66621;}i:66582;a:1:{i:0;i:66622;}i:66583;a:1:{i:0;i:66623;}i:66584;a:1:{i:0;i:66624;}i:66585;a:1:{i:0;i:66625;}i:66586;a:1:{i:0;i:66626;}i:66587;a:1:{i:0;i:66627;}i:66588;a:1:{i:0;i:66628;}i:66589;a:1:{i:0;i:66629;}i:66590;a:1:{i:0;i:66630;}i:66591;a:1:{i:0;i:66631;}i:66592;a:1:{i:0;i:66632;}i:66593;a:1:{i:0;i:66633;}i:66594;a:1:{i:0;i:66634;}i:66595;a:1:{i:0;i:66635;}i:66596;a:1:{i:0;i:66636;}i:66597;a:1:{i:0;i:66637;}i:119808;a:1:{i:0;i:97;}i:119809;a:1:{i:0;i:98;}i:119810;a:1:{i:0;i:99;}i:119811;a:1:{i:0;i:100;}i:119812;a:1:{i:0;i:101;}i:119813;a:1:{i:0;i:102;}i:119814;a:1:{i:0;i:103;}i:119815;a:1:{i:0;i:104;}i:119816;a:1:{i:0;i:105;}i:119817;a:1:{i:0;i:106;}i:119818;a:1:{i:0;i:107;}i:119819;a:1:{i:0;i:108;}i:119820;a:1:{i:0;i:109;}i:119821;a:1:{i:0;i:110;}i:119822;a:1:{i:0;i:111;}i:119823;a:1:{i:0;i:112;}i:119824;a:1:{i:0;i:113;}i:119825;a:1:{i:0;i:114;}i:119826;a:1:{i:0;i:115;}i:119827;a:1:{i:0;i:116;}i:119828;a:1:{i:0;i:117;}i:119829;a:1:{i:0;i:118;}i:119830;a:1:{i:0;i:119;}i:119831;a:1:{i:0;i:120;}i:119832;a:1:{i:0;i:121;}i:119833;a:1:{i:0;i:122;}i:119860;a:1:{i:0;i:97;}i:119861;a:1:{i:0;i:98;}i:119862;a:1:{i:0;i:99;}i:119863;a:1:{i:0;i:100;}i:119864;a:1:{i:0;i:101;}i:119865;a:1:{i:0;i:102;}i:119866;a:1:{i:0;i:103;}i:119867;a:1:{i:0;i:104;}i:119868;a:1:{i:0;i:105;}i:119869;a:1:{i:0;i:106;}i:119870;a:1:{i:0;i:107;}i:119871;a:1:{i:0;i:108;}i:119872;a:1:{i:0;i:109;}i:119873;a:1:{i:0;i:110;}i:119874;a:1:{i:0;i:111;}i:119875;a:1:{i:0;i:112;}i:119876;a:1:{i:0;i:113;}i:119877;a:1:{i:0;i:114;}i:119878;a:1:{i:0;i:115;}i:119879;a:1:{i:0;i:116;}i:119880;a:1:{i:0;i:117;}i:119881;a:1:{i:0;i:118;}i:119882;a:1:{i:0;i:119;}i:119883;a:1:{i:0;i:120;}i:119884;a:1:{i:0;i:121;}i:119885;a:1:{i:0;i:122;}i:119912;a:1:{i:0;i:97;}i:119913;a:1:{i:0;i:98;}i:119914;a:1:{i:0;i:99;}i:119915;a:1:{i:0;i:100;}i:119916;a:1:{i:0;i:101;}i:119917;a:1:{i:0;i:102;}i:119918;a:1:{i:0;i:103;}i:119919;a:1:{i:0;i:104;}i:119920;a:1:{i:0;i:105;}i:119921;a:1:{i:0;i:106;}i:119922;a:1:{i:0;i:107;}i:119923;a:1:{i:0;i:108;}i:119924;a:1:{i:0;i:109;}i:119925;a:1:{i:0;i:110;}i:119926;a:1:{i:0;i:111;}i:119927;a:1:{i:0;i:112;}i:119928;a:1:{i:0;i:113;}i:119929;a:1:{i:0;i:114;}i:119930;a:1:{i:0;i:115;}i:119931;a:1:{i:0;i:116;}i:119932;a:1:{i:0;i:117;}i:119933;a:1:{i:0;i:118;}i:119934;a:1:{i:0;i:119;}i:119935;a:1:{i:0;i:120;}i:119936;a:1:{i:0;i:121;}i:119937;a:1:{i:0;i:122;}i:119964;a:1:{i:0;i:97;}i:119966;a:1:{i:0;i:99;}i:119967;a:1:{i:0;i:100;}i:119970;a:1:{i:0;i:103;}i:119973;a:1:{i:0;i:106;}i:119974;a:1:{i:0;i:107;}i:119977;a:1:{i:0;i:110;}i:119978;a:1:{i:0;i:111;}i:119979;a:1:{i:0;i:112;}i:119980;a:1:{i:0;i:113;}i:119982;a:1:{i:0;i:115;}i:119983;a:1:{i:0;i:116;}i:119984;a:1:{i:0;i:117;}i:119985;a:1:{i:0;i:118;}i:119986;a:1:{i:0;i:119;}i:119987;a:1:{i:0;i:120;}i:119988;a:1:{i:0;i:121;}i:119989;a:1:{i:0;i:122;}i:120016;a:1:{i:0;i:97;}i:120017;a:1:{i:0;i:98;}i:120018;a:1:{i:0;i:99;}i:120019;a:1:{i:0;i:100;}i:120020;a:1:{i:0;i:101;}i:120021;a:1:{i:0;i:102;}i:120022;a:1:{i:0;i:103;}i:120023;a:1:{i:0;i:104;}i:120024;a:1:{i:0;i:105;}i:120025;a:1:{i:0;i:106;}i:120026;a:1:{i:0;i:107;}i:120027;a:1:{i:0;i:108;}i:120028;a:1:{i:0;i:109;}i:120029;a:1:{i:0;i:110;}i:120030;a:1:{i:0;i:111;}i:120031;a:1:{i:0;i:112;}i:120032;a:1:{i:0;i:113;}i:120033;a:1:{i:0;i:114;}i:120034;a:1:{i:0;i:115;}i:120035;a:1:{i:0;i:116;}i:120036;a:1:{i:0;i:117;}i:120037;a:1:{i:0;i:118;}i:120038;a:1:{i:0;i:119;}i:120039;a:1:{i:0;i:120;}i:120040;a:1:{i:0;i:121;}i:120041;a:1:{i:0;i:122;}i:120068;a:1:{i:0;i:97;}i:120069;a:1:{i:0;i:98;}i:120071;a:1:{i:0;i:100;}i:120072;a:1:{i:0;i:101;}i:120073;a:1:{i:0;i:102;}i:120074;a:1:{i:0;i:103;}i:120077;a:1:{i:0;i:106;}i:120078;a:1:{i:0;i:107;}i:120079;a:1:{i:0;i:108;}i:120080;a:1:{i:0;i:109;}i:120081;a:1:{i:0;i:110;}i:120082;a:1:{i:0;i:111;}i:120083;a:1:{i:0;i:112;}i:120084;a:1:{i:0;i:113;}i:120086;a:1:{i:0;i:115;}i:120087;a:1:{i:0;i:116;}i:120088;a:1:{i:0;i:117;}i:120089;a:1:{i:0;i:118;}i:120090;a:1:{i:0;i:119;}i:120091;a:1:{i:0;i:120;}i:120092;a:1:{i:0;i:121;}i:120120;a:1:{i:0;i:97;}i:120121;a:1:{i:0;i:98;}i:120123;a:1:{i:0;i:100;}i:120124;a:1:{i:0;i:101;}i:120125;a:1:{i:0;i:102;}i:120126;a:1:{i:0;i:103;}i:120128;a:1:{i:0;i:105;}i:120129;a:1:{i:0;i:106;}i:120130;a:1:{i:0;i:107;}i:120131;a:1:{i:0;i:108;}i:120132;a:1:{i:0;i:109;}i:120134;a:1:{i:0;i:111;}i:120138;a:1:{i:0;i:115;}i:120139;a:1:{i:0;i:116;}i:120140;a:1:{i:0;i:117;}i:120141;a:1:{i:0;i:118;}i:120142;a:1:{i:0;i:119;}i:120143;a:1:{i:0;i:120;}i:120144;a:1:{i:0;i:121;}i:120172;a:1:{i:0;i:97;}i:120173;a:1:{i:0;i:98;}i:120174;a:1:{i:0;i:99;}i:120175;a:1:{i:0;i:100;}i:120176;a:1:{i:0;i:101;}i:120177;a:1:{i:0;i:102;}i:120178;a:1:{i:0;i:103;}i:120179;a:1:{i:0;i:104;}i:120180;a:1:{i:0;i:105;}i:120181;a:1:{i:0;i:106;}i:120182;a:1:{i:0;i:107;}i:120183;a:1:{i:0;i:108;}i:120184;a:1:{i:0;i:109;}i:120185;a:1:{i:0;i:110;}i:120186;a:1:{i:0;i:111;}i:120187;a:1:{i:0;i:112;}i:120188;a:1:{i:0;i:113;}i:120189;a:1:{i:0;i:114;}i:120190;a:1:{i:0;i:115;}i:120191;a:1:{i:0;i:116;}i:120192;a:1:{i:0;i:117;}i:120193;a:1:{i:0;i:118;}i:120194;a:1:{i:0;i:119;}i:120195;a:1:{i:0;i:120;}i:120196;a:1:{i:0;i:121;}i:120197;a:1:{i:0;i:122;}i:120224;a:1:{i:0;i:97;}i:120225;a:1:{i:0;i:98;}i:120226;a:1:{i:0;i:99;}i:120227;a:1:{i:0;i:100;}i:120228;a:1:{i:0;i:101;}i:120229;a:1:{i:0;i:102;}i:120230;a:1:{i:0;i:103;}i:120231;a:1:{i:0;i:104;}i:120232;a:1:{i:0;i:105;}i:120233;a:1:{i:0;i:106;}i:120234;a:1:{i:0;i:107;}i:120235;a:1:{i:0;i:108;}i:120236;a:1:{i:0;i:109;}i:120237;a:1:{i:0;i:110;}i:120238;a:1:{i:0;i:111;}i:120239;a:1:{i:0;i:112;}i:120240;a:1:{i:0;i:113;}i:120241;a:1:{i:0;i:114;}i:120242;a:1:{i:0;i:115;}i:120243;a:1:{i:0;i:116;}i:120244;a:1:{i:0;i:117;}i:120245;a:1:{i:0;i:118;}i:120246;a:1:{i:0;i:119;}i:120247;a:1:{i:0;i:120;}i:120248;a:1:{i:0;i:121;}i:120249;a:1:{i:0;i:122;}i:120276;a:1:{i:0;i:97;}i:120277;a:1:{i:0;i:98;}i:120278;a:1:{i:0;i:99;}i:120279;a:1:{i:0;i:100;}i:120280;a:1:{i:0;i:101;}i:120281;a:1:{i:0;i:102;}i:120282;a:1:{i:0;i:103;}i:120283;a:1:{i:0;i:104;}i:120284;a:1:{i:0;i:105;}i:120285;a:1:{i:0;i:106;}i:120286;a:1:{i:0;i:107;}i:120287;a:1:{i:0;i:108;}i:120288;a:1:{i:0;i:109;}i:120289;a:1:{i:0;i:110;}i:120290;a:1:{i:0;i:111;}i:120291;a:1:{i:0;i:112;}i:120292;a:1:{i:0;i:113;}i:120293;a:1:{i:0;i:114;}i:120294;a:1:{i:0;i:115;}i:120295;a:1:{i:0;i:116;}i:120296;a:1:{i:0;i:117;}i:120297;a:1:{i:0;i:118;}i:120298;a:1:{i:0;i:119;}i:120299;a:1:{i:0;i:120;}i:120300;a:1:{i:0;i:121;}i:120301;a:1:{i:0;i:122;}i:120328;a:1:{i:0;i:97;}i:120329;a:1:{i:0;i:98;}i:120330;a:1:{i:0;i:99;}i:120331;a:1:{i:0;i:100;}i:120332;a:1:{i:0;i:101;}i:120333;a:1:{i:0;i:102;}i:120334;a:1:{i:0;i:103;}i:120335;a:1:{i:0;i:104;}i:120336;a:1:{i:0;i:105;}i:120337;a:1:{i:0;i:106;}i:120338;a:1:{i:0;i:107;}i:120339;a:1:{i:0;i:108;}i:120340;a:1:{i:0;i:109;}i:120341;a:1:{i:0;i:110;}i:120342;a:1:{i:0;i:111;}i:120343;a:1:{i:0;i:112;}i:120344;a:1:{i:0;i:113;}i:120345;a:1:{i:0;i:114;}i:120346;a:1:{i:0;i:115;}i:120347;a:1:{i:0;i:116;}i:120348;a:1:{i:0;i:117;}i:120349;a:1:{i:0;i:118;}i:120350;a:1:{i:0;i:119;}i:120351;a:1:{i:0;i:120;}i:120352;a:1:{i:0;i:121;}i:120353;a:1:{i:0;i:122;}i:120380;a:1:{i:0;i:97;}i:120381;a:1:{i:0;i:98;}i:120382;a:1:{i:0;i:99;}i:120383;a:1:{i:0;i:100;}i:120384;a:1:{i:0;i:101;}i:120385;a:1:{i:0;i:102;}i:120386;a:1:{i:0;i:103;}i:120387;a:1:{i:0;i:104;}i:120388;a:1:{i:0;i:105;}i:120389;a:1:{i:0;i:106;}i:120390;a:1:{i:0;i:107;}i:120391;a:1:{i:0;i:108;}i:120392;a:1:{i:0;i:109;}i:120393;a:1:{i:0;i:110;}i:120394;a:1:{i:0;i:111;}i:120395;a:1:{i:0;i:112;}i:120396;a:1:{i:0;i:113;}i:120397;a:1:{i:0;i:114;}i:120398;a:1:{i:0;i:115;}i:120399;a:1:{i:0;i:116;}i:120400;a:1:{i:0;i:117;}i:120401;a:1:{i:0;i:118;}i:120402;a:1:{i:0;i:119;}i:120403;a:1:{i:0;i:120;}i:120404;a:1:{i:0;i:121;}i:120405;a:1:{i:0;i:122;}i:120432;a:1:{i:0;i:97;}i:120433;a:1:{i:0;i:98;}i:120434;a:1:{i:0;i:99;}i:120435;a:1:{i:0;i:100;}i:120436;a:1:{i:0;i:101;}i:120437;a:1:{i:0;i:102;}i:120438;a:1:{i:0;i:103;}i:120439;a:1:{i:0;i:104;}i:120440;a:1:{i:0;i:105;}i:120441;a:1:{i:0;i:106;}i:120442;a:1:{i:0;i:107;}i:120443;a:1:{i:0;i:108;}i:120444;a:1:{i:0;i:109;}i:120445;a:1:{i:0;i:110;}i:120446;a:1:{i:0;i:111;}i:120447;a:1:{i:0;i:112;}i:120448;a:1:{i:0;i:113;}i:120449;a:1:{i:0;i:114;}i:120450;a:1:{i:0;i:115;}i:120451;a:1:{i:0;i:116;}i:120452;a:1:{i:0;i:117;}i:120453;a:1:{i:0;i:118;}i:120454;a:1:{i:0;i:119;}i:120455;a:1:{i:0;i:120;}i:120456;a:1:{i:0;i:121;}i:120457;a:1:{i:0;i:122;}i:120488;a:1:{i:0;i:945;}i:120489;a:1:{i:0;i:946;}i:120490;a:1:{i:0;i:947;}i:120491;a:1:{i:0;i:948;}i:120492;a:1:{i:0;i:949;}i:120493;a:1:{i:0;i:950;}i:120494;a:1:{i:0;i:951;}i:120495;a:1:{i:0;i:952;}i:120496;a:1:{i:0;i:953;}i:120497;a:1:{i:0;i:954;}i:120498;a:1:{i:0;i:955;}i:120499;a:1:{i:0;i:956;}i:120500;a:1:{i:0;i:957;}i:120501;a:1:{i:0;i:958;}i:120502;a:1:{i:0;i:959;}i:120503;a:1:{i:0;i:960;}i:120504;a:1:{i:0;i:961;}i:120505;a:1:{i:0;i:952;}i:120506;a:1:{i:0;i:963;}i:120507;a:1:{i:0;i:964;}i:120508;a:1:{i:0;i:965;}i:120509;a:1:{i:0;i:966;}i:120510;a:1:{i:0;i:967;}i:120511;a:1:{i:0;i:968;}i:120512;a:1:{i:0;i:969;}i:120531;a:1:{i:0;i:963;}i:120546;a:1:{i:0;i:945;}i:120547;a:1:{i:0;i:946;}i:120548;a:1:{i:0;i:947;}i:120549;a:1:{i:0;i:948;}i:120550;a:1:{i:0;i:949;}i:120551;a:1:{i:0;i:950;}i:120552;a:1:{i:0;i:951;}i:120553;a:1:{i:0;i:952;}i:120554;a:1:{i:0;i:953;}i:120555;a:1:{i:0;i:954;}i:120556;a:1:{i:0;i:955;}i:120557;a:1:{i:0;i:956;}i:120558;a:1:{i:0;i:957;}i:120559;a:1:{i:0;i:958;}i:120560;a:1:{i:0;i:959;}i:120561;a:1:{i:0;i:960;}i:120562;a:1:{i:0;i:961;}i:120563;a:1:{i:0;i:952;}i:120564;a:1:{i:0;i:963;}i:120565;a:1:{i:0;i:964;}i:120566;a:1:{i:0;i:965;}i:120567;a:1:{i:0;i:966;}i:120568;a:1:{i:0;i:967;}i:120569;a:1:{i:0;i:968;}i:120570;a:1:{i:0;i:969;}i:120589;a:1:{i:0;i:963;}i:120604;a:1:{i:0;i:945;}i:120605;a:1:{i:0;i:946;}i:120606;a:1:{i:0;i:947;}i:120607;a:1:{i:0;i:948;}i:120608;a:1:{i:0;i:949;}i:120609;a:1:{i:0;i:950;}i:120610;a:1:{i:0;i:951;}i:120611;a:1:{i:0;i:952;}i:120612;a:1:{i:0;i:953;}i:120613;a:1:{i:0;i:954;}i:120614;a:1:{i:0;i:955;}i:120615;a:1:{i:0;i:956;}i:120616;a:1:{i:0;i:957;}i:120617;a:1:{i:0;i:958;}i:120618;a:1:{i:0;i:959;}i:120619;a:1:{i:0;i:960;}i:120620;a:1:{i:0;i:961;}i:120621;a:1:{i:0;i:952;}i:120622;a:1:{i:0;i:963;}i:120623;a:1:{i:0;i:964;}i:120624;a:1:{i:0;i:965;}i:120625;a:1:{i:0;i:966;}i:120626;a:1:{i:0;i:967;}i:120627;a:1:{i:0;i:968;}i:120628;a:1:{i:0;i:969;}i:120647;a:1:{i:0;i:963;}i:120662;a:1:{i:0;i:945;}i:120663;a:1:{i:0;i:946;}i:120664;a:1:{i:0;i:947;}i:120665;a:1:{i:0;i:948;}i:120666;a:1:{i:0;i:949;}i:120667;a:1:{i:0;i:950;}i:120668;a:1:{i:0;i:951;}i:120669;a:1:{i:0;i:952;}i:120670;a:1:{i:0;i:953;}i:120671;a:1:{i:0;i:954;}i:120672;a:1:{i:0;i:955;}i:120673;a:1:{i:0;i:956;}i:120674;a:1:{i:0;i:957;}i:120675;a:1:{i:0;i:958;}i:120676;a:1:{i:0;i:959;}i:120677;a:1:{i:0;i:960;}i:120678;a:1:{i:0;i:961;}i:120679;a:1:{i:0;i:952;}i:120680;a:1:{i:0;i:963;}i:120681;a:1:{i:0;i:964;}i:120682;a:1:{i:0;i:965;}i:120683;a:1:{i:0;i:966;}i:120684;a:1:{i:0;i:967;}i:120685;a:1:{i:0;i:968;}i:120686;a:1:{i:0;i:969;}i:120705;a:1:{i:0;i:963;}i:120720;a:1:{i:0;i:945;}i:120721;a:1:{i:0;i:946;}i:120722;a:1:{i:0;i:947;}i:120723;a:1:{i:0;i:948;}i:120724;a:1:{i:0;i:949;}i:120725;a:1:{i:0;i:950;}i:120726;a:1:{i:0;i:951;}i:120727;a:1:{i:0;i:952;}i:120728;a:1:{i:0;i:953;}i:120729;a:1:{i:0;i:954;}i:120730;a:1:{i:0;i:955;}i:120731;a:1:{i:0;i:956;}i:120732;a:1:{i:0;i:957;}i:120733;a:1:{i:0;i:958;}i:120734;a:1:{i:0;i:959;}i:120735;a:1:{i:0;i:960;}i:120736;a:1:{i:0;i:961;}i:120737;a:1:{i:0;i:952;}i:120738;a:1:{i:0;i:963;}i:120739;a:1:{i:0;i:964;}i:120740;a:1:{i:0;i:965;}i:120741;a:1:{i:0;i:966;}i:120742;a:1:{i:0;i:967;}i:120743;a:1:{i:0;i:968;}i:120744;a:1:{i:0;i:969;}i:120763;a:1:{i:0;i:963;}i:1017;a:1:{i:0;i:963;}i:7468;a:1:{i:0;i:97;}i:7469;a:1:{i:0;i:230;}i:7470;a:1:{i:0;i:98;}i:7472;a:1:{i:0;i:100;}i:7473;a:1:{i:0;i:101;}i:7474;a:1:{i:0;i:477;}i:7475;a:1:{i:0;i:103;}i:7476;a:1:{i:0;i:104;}i:7477;a:1:{i:0;i:105;}i:7478;a:1:{i:0;i:106;}i:7479;a:1:{i:0;i:107;}i:7480;a:1:{i:0;i:108;}i:7481;a:1:{i:0;i:109;}i:7482;a:1:{i:0;i:110;}i:7484;a:1:{i:0;i:111;}i:7485;a:1:{i:0;i:547;}i:7486;a:1:{i:0;i:112;}i:7487;a:1:{i:0;i:114;}i:7488;a:1:{i:0;i:116;}i:7489;a:1:{i:0;i:117;}i:7490;a:1:{i:0;i:119;}i:8507;a:3:{i:0;i:102;i:1;i:97;i:2;i:120;}i:12880;a:3:{i:0;i:112;i:1;i:116;i:2;i:101;}i:13004;a:2:{i:0;i:104;i:1;i:103;}i:13006;a:2:{i:0;i:101;i:1;i:118;}i:13007;a:3:{i:0;i:108;i:1;i:116;i:2;i:100;}i:13178;a:2:{i:0;i:105;i:1;i:117;}i:13278;a:3:{i:0;i:118;i:1;i:8725;i:2;i:109;}i:13279;a:3:{i:0;i:97;i:1;i:8725;i:2;i:109;}}s:12:"norm_combcls";a:341:{i:820;i:1;i:821;i:1;i:822;i:1;i:823;i:1;i:824;i:1;i:2364;i:7;i:2492;i:7;i:2620;i:7;i:2748;i:7;i:2876;i:7;i:3260;i:7;i:4151;i:7;i:12441;i:8;i:12442;i:8;i:2381;i:9;i:2509;i:9;i:2637;i:9;i:2765;i:9;i:2893;i:9;i:3021;i:9;i:3149;i:9;i:3277;i:9;i:3405;i:9;i:3530;i:9;i:3642;i:9;i:3972;i:9;i:4153;i:9;i:5908;i:9;i:5940;i:9;i:6098;i:9;i:1456;i:10;i:1457;i:11;i:1458;i:12;i:1459;i:13;i:1460;i:14;i:1461;i:15;i:1462;i:16;i:1463;i:17;i:1464;i:18;i:1465;i:19;i:1467;i:20;i:1468;i:21;i:1469;i:22;i:1471;i:23;i:1473;i:24;i:1474;i:25;i:64286;i:26;i:1611;i:27;i:1612;i:28;i:1613;i:29;i:1614;i:30;i:1615;i:31;i:1616;i:32;i:1617;i:33;i:1618;i:34;i:1648;i:35;i:1809;i:36;i:3157;i:84;i:3158;i:91;i:3640;i:103;i:3641;i:103;i:3656;i:107;i:3657;i:107;i:3658;i:107;i:3659;i:107;i:3768;i:118;i:3769;i:118;i:3784;i:122;i:3785;i:122;i:3786;i:122;i:3787;i:122;i:3953;i:129;i:3954;i:130;i:3962;i:130;i:3963;i:130;i:3964;i:130;i:3965;i:130;i:3968;i:130;i:3956;i:132;i:801;i:202;i:802;i:202;i:807;i:202;i:808;i:202;i:795;i:216;i:3897;i:216;i:119141;i:216;i:119142;i:216;i:119150;i:216;i:119151;i:216;i:119152;i:216;i:119153;i:216;i:119154;i:216;i:12330;i:218;i:790;i:220;i:791;i:220;i:792;i:220;i:793;i:220;i:796;i:220;i:797;i:220;i:798;i:220;i:799;i:220;i:800;i:220;i:803;i:220;i:804;i:220;i:805;i:220;i:806;i:220;i:809;i:220;i:810;i:220;i:811;i:220;i:812;i:220;i:813;i:220;i:814;i:220;i:815;i:220;i:816;i:220;i:817;i:220;i:818;i:220;i:819;i:220;i:825;i:220;i:826;i:220;i:827;i:220;i:828;i:220;i:839;i:220;i:840;i:220;i:841;i:220;i:845;i:220;i:846;i:220;i:851;i:220;i:852;i:220;i:853;i:220;i:854;i:220;i:1425;i:220;i:1430;i:220;i:1435;i:220;i:1443;i:220;i:1444;i:220;i:1445;i:220;i:1446;i:220;i:1447;i:220;i:1450;i:220;i:1621;i:220;i:1622;i:220;i:1763;i:220;i:1770;i:220;i:1773;i:220;i:1841;i:220;i:1844;i:220;i:1847;i:220;i:1848;i:220;i:1849;i:220;i:1851;i:220;i:1852;i:220;i:1854;i:220;i:1858;i:220;i:1860;i:220;i:1862;i:220;i:1864;i:220;i:2386;i:220;i:3864;i:220;i:3865;i:220;i:3893;i:220;i:3895;i:220;i:4038;i:220;i:6459;i:220;i:8424;i:220;i:119163;i:220;i:119164;i:220;i:119165;i:220;i:119166;i:220;i:119167;i:220;i:119168;i:220;i:119169;i:220;i:119170;i:220;i:119178;i:220;i:119179;i:220;i:1434;i:222;i:1453;i:222;i:6441;i:222;i:12333;i:222;i:12334;i:224;i:12335;i:224;i:119149;i:226;i:1454;i:228;i:6313;i:228;i:12331;i:228;i:768;i:230;i:769;i:230;i:770;i:230;i:771;i:230;i:772;i:230;i:773;i:230;i:774;i:230;i:775;i:230;i:776;i:230;i:777;i:230;i:778;i:230;i:779;i:230;i:780;i:230;i:781;i:230;i:782;i:230;i:783;i:230;i:784;i:230;i:785;i:230;i:786;i:230;i:787;i:230;i:788;i:230;i:829;i:230;i:830;i:230;i:831;i:230;i:832;i:230;i:833;i:230;i:834;i:230;i:835;i:230;i:836;i:230;i:838;i:230;i:842;i:230;i:843;i:230;i:844;i:230;i:848;i:230;i:849;i:230;i:850;i:230;i:855;i:230;i:867;i:230;i:868;i:230;i:869;i:230;i:870;i:230;i:871;i:230;i:872;i:230;i:873;i:230;i:874;i:230;i:875;i:230;i:876;i:230;i:877;i:230;i:878;i:230;i:879;i:230;i:1155;i:230;i:1156;i:230;i:1157;i:230;i:1158;i:230;i:1426;i:230;i:1427;i:230;i:1428;i:230;i:1429;i:230;i:1431;i:230;i:1432;i:230;i:1433;i:230;i:1436;i:230;i:1437;i:230;i:1438;i:230;i:1439;i:230;i:1440;i:230;i:1441;i:230;i:1448;i:230;i:1449;i:230;i:1451;i:230;i:1452;i:230;i:1455;i:230;i:1476;i:230;i:1552;i:230;i:1553;i:230;i:1554;i:230;i:1555;i:230;i:1556;i:230;i:1557;i:230;i:1619;i:230;i:1620;i:230;i:1623;i:230;i:1624;i:230;i:1750;i:230;i:1751;i:230;i:1752;i:230;i:1753;i:230;i:1754;i:230;i:1755;i:230;i:1756;i:230;i:1759;i:230;i:1760;i:230;i:1761;i:230;i:1762;i:230;i:1764;i:230;i:1767;i:230;i:1768;i:230;i:1771;i:230;i:1772;i:230;i:1840;i:230;i:1842;i:230;i:1843;i:230;i:1845;i:230;i:1846;i:230;i:1850;i:230;i:1853;i:230;i:1855;i:230;i:1856;i:230;i:1857;i:230;i:1859;i:230;i:1861;i:230;i:1863;i:230;i:1865;i:230;i:1866;i:230;i:2385;i:230;i:2387;i:230;i:2388;i:230;i:3970;i:230;i:3971;i:230;i:3974;i:230;i:3975;i:230;i:5901;i:230;i:6458;i:230;i:8400;i:230;i:8401;i:230;i:8404;i:230;i:8405;i:230;i:8406;i:230;i:8407;i:230;i:8411;i:230;i:8412;i:230;i:8417;i:230;i:8423;i:230;i:8425;i:230;i:65056;i:230;i:65057;i:230;i:65058;i:230;i:65059;i:230;i:119173;i:230;i:119174;i:230;i:119175;i:230;i:119177;i:230;i:119176;i:230;i:119210;i:230;i:119211;i:230;i:119212;i:230;i:119213;i:230;i:789;i:232;i:794;i:232;i:12332;i:232;i:863;i:233;i:866;i:233;i:861;i:234;i:862;i:234;i:864;i:234;i:865;i:234;i:837;i:240;}} \ No newline at end of file diff --git a/library/simplepie/simplepie.inc b/library/simplepie/simplepie.inc deleted file mode 100644 index 96ad06678..000000000 --- a/library/simplepie/simplepie.inc +++ /dev/null @@ -1,15150 +0,0 @@ -' . SIMPLEPIE_NAME . ''); - -/** - * No Autodiscovery - * @see SimplePie::set_autodiscovery_level() - */ -define('SIMPLEPIE_LOCATOR_NONE', 0); - -/** - * Feed Link Element Autodiscovery - * @see SimplePie::set_autodiscovery_level() - */ -define('SIMPLEPIE_LOCATOR_AUTODISCOVERY', 1); - -/** - * Local Feed Extension Autodiscovery - * @see SimplePie::set_autodiscovery_level() - */ -define('SIMPLEPIE_LOCATOR_LOCAL_EXTENSION', 2); - -/** - * Local Feed Body Autodiscovery - * @see SimplePie::set_autodiscovery_level() - */ -define('SIMPLEPIE_LOCATOR_LOCAL_BODY', 4); - -/** - * Remote Feed Extension Autodiscovery - * @see SimplePie::set_autodiscovery_level() - */ -define('SIMPLEPIE_LOCATOR_REMOTE_EXTENSION', 8); - -/** - * Remote Feed Body Autodiscovery - * @see SimplePie::set_autodiscovery_level() - */ -define('SIMPLEPIE_LOCATOR_REMOTE_BODY', 16); - -/** - * All Feed Autodiscovery - * @see SimplePie::set_autodiscovery_level() - */ -define('SIMPLEPIE_LOCATOR_ALL', 31); - -/** - * No known feed type - */ -define('SIMPLEPIE_TYPE_NONE', 0); - -/** - * RSS 0.90 - */ -define('SIMPLEPIE_TYPE_RSS_090', 1); - -/** - * RSS 0.91 (Netscape) - */ -define('SIMPLEPIE_TYPE_RSS_091_NETSCAPE', 2); - -/** - * RSS 0.91 (Userland) - */ -define('SIMPLEPIE_TYPE_RSS_091_USERLAND', 4); - -/** - * RSS 0.91 (both Netscape and Userland) - */ -define('SIMPLEPIE_TYPE_RSS_091', 6); - -/** - * RSS 0.92 - */ -define('SIMPLEPIE_TYPE_RSS_092', 8); - -/** - * RSS 0.93 - */ -define('SIMPLEPIE_TYPE_RSS_093', 16); - -/** - * RSS 0.94 - */ -define('SIMPLEPIE_TYPE_RSS_094', 32); - -/** - * RSS 1.0 - */ -define('SIMPLEPIE_TYPE_RSS_10', 64); - -/** - * RSS 2.0 - */ -define('SIMPLEPIE_TYPE_RSS_20', 128); - -/** - * RDF-based RSS - */ -define('SIMPLEPIE_TYPE_RSS_RDF', 65); - -/** - * Non-RDF-based RSS (truly intended as syndication format) - */ -define('SIMPLEPIE_TYPE_RSS_SYNDICATION', 190); - -/** - * All RSS - */ -define('SIMPLEPIE_TYPE_RSS_ALL', 255); - -/** - * Atom 0.3 - */ -define('SIMPLEPIE_TYPE_ATOM_03', 256); - -/** - * Atom 1.0 - */ -define('SIMPLEPIE_TYPE_ATOM_10', 512); - -/** - * All Atom - */ -define('SIMPLEPIE_TYPE_ATOM_ALL', 768); - -/** - * All feed types - */ -define('SIMPLEPIE_TYPE_ALL', 1023); - -/** - * No construct - */ -define('SIMPLEPIE_CONSTRUCT_NONE', 0); - -/** - * Text construct - */ -define('SIMPLEPIE_CONSTRUCT_TEXT', 1); - -/** - * HTML construct - */ -define('SIMPLEPIE_CONSTRUCT_HTML', 2); - -/** - * XHTML construct - */ -define('SIMPLEPIE_CONSTRUCT_XHTML', 4); - -/** - * base64-encoded construct - */ -define('SIMPLEPIE_CONSTRUCT_BASE64', 8); - -/** - * IRI construct - */ -define('SIMPLEPIE_CONSTRUCT_IRI', 16); - -/** - * A construct that might be HTML - */ -define('SIMPLEPIE_CONSTRUCT_MAYBE_HTML', 32); - -/** - * All constructs - */ -define('SIMPLEPIE_CONSTRUCT_ALL', 63); - -/** - * Don't change case - */ -define('SIMPLEPIE_SAME_CASE', 1); - -/** - * Change to lowercase - */ -define('SIMPLEPIE_LOWERCASE', 2); - -/** - * Change to uppercase - */ -define('SIMPLEPIE_UPPERCASE', 4); - -/** - * PCRE for HTML attributes - */ -define('SIMPLEPIE_PCRE_HTML_ATTRIBUTE', '((?:[\x09\x0A\x0B\x0C\x0D\x20]+[^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3D\x3E]*(?:[\x09\x0A\x0B\x0C\x0D\x20]*=[\x09\x0A\x0B\x0C\x0D\x20]*(?:"(?:[^"]*)"|\'(?:[^\']*)\'|(?:[^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?)*)[\x09\x0A\x0B\x0C\x0D\x20]*'); - -/** - * PCRE for XML attributes - */ -define('SIMPLEPIE_PCRE_XML_ATTRIBUTE', '((?:\s+(?:(?:[^\s:]+:)?[^\s:]+)\s*=\s*(?:"(?:[^"]*)"|\'(?:[^\']*)\'))*)\s*'); - -/** - * XML Namespace - */ -define('SIMPLEPIE_NAMESPACE_XML', 'http://www.w3.org/XML/1998/namespace'); - -/** - * Atom 1.0 Namespace - */ -define('SIMPLEPIE_NAMESPACE_ATOM_10', 'http://www.w3.org/2005/Atom'); - -/** - * Atom 0.3 Namespace - */ -define('SIMPLEPIE_NAMESPACE_ATOM_03', 'http://purl.org/atom/ns#'); - -/** - * RDF Namespace - */ -define('SIMPLEPIE_NAMESPACE_RDF', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'); - -/** - * RSS 0.90 Namespace - */ -define('SIMPLEPIE_NAMESPACE_RSS_090', 'http://my.netscape.com/rdf/simple/0.9/'); - -/** - * RSS 1.0 Namespace - */ -define('SIMPLEPIE_NAMESPACE_RSS_10', 'http://purl.org/rss/1.0/'); - -/** - * RSS 1.0 Content Module Namespace - */ -define('SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT', 'http://purl.org/rss/1.0/modules/content/'); - -/** - * RSS 2.0 Namespace - * (Stupid, I know, but I'm certain it will confuse people less with support.) - */ -define('SIMPLEPIE_NAMESPACE_RSS_20', ''); - -/** - * DC 1.0 Namespace - */ -define('SIMPLEPIE_NAMESPACE_DC_10', 'http://purl.org/dc/elements/1.0/'); - -/** - * DC 1.1 Namespace - */ -define('SIMPLEPIE_NAMESPACE_DC_11', 'http://purl.org/dc/elements/1.1/'); - -/** - * W3C Basic Geo (WGS84 lat/long) Vocabulary Namespace - */ -define('SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO', 'http://www.w3.org/2003/01/geo/wgs84_pos#'); - -/** - * GeoRSS Namespace - */ -define('SIMPLEPIE_NAMESPACE_GEORSS', 'http://www.georss.org/georss'); - -/** - * Media RSS Namespace - */ -define('SIMPLEPIE_NAMESPACE_MEDIARSS', 'http://search.yahoo.com/mrss/'); - -/** - * Wrong Media RSS Namespace - */ -define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG', 'http://search.yahoo.com/mrss'); - -/** - * iTunes RSS Namespace - */ -define('SIMPLEPIE_NAMESPACE_ITUNES', 'http://www.itunes.com/dtds/podcast-1.0.dtd'); - -/** - * XHTML Namespace - */ -define('SIMPLEPIE_NAMESPACE_XHTML', 'http://www.w3.org/1999/xhtml'); - -/** - * IANA Link Relations Registry - */ -define('SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY', 'http://www.iana.org/assignments/relation/'); - -/** - * Whether we're running on PHP5 - */ -define('SIMPLEPIE_PHP5', version_compare(PHP_VERSION, '5.0.0', '>=')); - -/** - * No file source - */ -define('SIMPLEPIE_FILE_SOURCE_NONE', 0); - -/** - * Remote file source - */ -define('SIMPLEPIE_FILE_SOURCE_REMOTE', 1); - -/** - * Local file source - */ -define('SIMPLEPIE_FILE_SOURCE_LOCAL', 2); - -/** - * fsockopen() file source - */ -define('SIMPLEPIE_FILE_SOURCE_FSOCKOPEN', 4); - -/** - * cURL file source - */ -define('SIMPLEPIE_FILE_SOURCE_CURL', 8); - -/** - * file_get_contents() file source - */ -define('SIMPLEPIE_FILE_SOURCE_FILE_GET_CONTENTS', 16); - -/** - * SimplePie - * - * @package SimplePie - */ -class SimplePie -{ - /** - * @var array Raw data - * @access private - */ - var $data = array(); - - /** - * @var mixed Error string - * @access private - */ - var $error; - - /** - * @var object Instance of SimplePie_Sanitize (or other class) - * @see SimplePie::set_sanitize_class() - * @access private - */ - var $sanitize; - - /** - * @var string SimplePie Useragent - * @see SimplePie::set_useragent() - * @access private - */ - var $useragent = SIMPLEPIE_USERAGENT; - - /** - * @var string Feed URL - * @see SimplePie::set_feed_url() - * @access private - */ - var $feed_url; - - /** - * @var object Instance of SimplePie_File to use as a feed - * @see SimplePie::set_file() - * @access private - */ - var $file; - - /** - * @var string Raw feed data - * @see SimplePie::set_raw_data() - * @access private - */ - var $raw_data; - - /** - * @var int Timeout for fetching remote files - * @see SimplePie::set_timeout() - * @access private - */ - var $timeout = 10; - - /** - * @var bool Forces fsockopen() to be used for remote files instead - * of cURL, even if a new enough version is installed - * @see SimplePie::force_fsockopen() - * @access private - */ - var $force_fsockopen = false; - - /** - * @var bool Force the given data/URL to be treated as a feed no matter what - * it appears like - * @see SimplePie::force_feed() - * @access private - */ - var $force_feed = false; - - /** - * @var bool Enable/Disable XML dump - * @see SimplePie::enable_xml_dump() - * @access private - */ - var $xml_dump = false; - - /** - * @var bool Enable/Disable Caching - * @see SimplePie::enable_cache() - * @access private - */ - var $cache = true; - - /** - * @var int Cache duration (in seconds) - * @see SimplePie::set_cache_duration() - * @access private - */ - var $cache_duration = 3600; - - /** - * @var int Auto-discovery cache duration (in seconds) - * @see SimplePie::set_autodiscovery_cache_duration() - * @access private - */ - var $autodiscovery_cache_duration = 604800; // 7 Days. - - /** - * @var string Cache location (relative to executing script) - * @see SimplePie::set_cache_location() - * @access private - */ - var $cache_location = './cache'; - - /** - * @var string Function that creates the cache filename - * @see SimplePie::set_cache_name_function() - * @access private - */ - var $cache_name_function = 'md5'; - - /** - * @var bool Reorder feed by date descending - * @see SimplePie::enable_order_by_date() - * @access private - */ - var $order_by_date = true; - - /** - * @var mixed Force input encoding to be set to the follow value - * (false, or anything type-cast to false, disables this feature) - * @see SimplePie::set_input_encoding() - * @access private - */ - var $input_encoding = false; - - /** - * @var int Feed Autodiscovery Level - * @see SimplePie::set_autodiscovery_level() - * @access private - */ - var $autodiscovery = SIMPLEPIE_LOCATOR_ALL; - - /** - * @var string Class used for caching feeds - * @see SimplePie::set_cache_class() - * @access private - */ - var $cache_class = 'SimplePie_Cache'; - - /** - * @var string Class used for locating feeds - * @see SimplePie::set_locator_class() - * @access private - */ - var $locator_class = 'SimplePie_Locator'; - - /** - * @var string Class used for parsing feeds - * @see SimplePie::set_parser_class() - * @access private - */ - var $parser_class = 'SimplePie_Parser'; - - /** - * @var string Class used for fetching feeds - * @see SimplePie::set_file_class() - * @access private - */ - var $file_class = 'SimplePie_File'; - - /** - * @var string Class used for items - * @see SimplePie::set_item_class() - * @access private - */ - var $item_class = 'SimplePie_Item'; - - /** - * @var string Class used for authors - * @see SimplePie::set_author_class() - * @access private - */ - var $author_class = 'SimplePie_Author'; - - /** - * @var string Class used for categories - * @see SimplePie::set_category_class() - * @access private - */ - var $category_class = 'SimplePie_Category'; - - /** - * @var string Class used for enclosures - * @see SimplePie::set_enclosures_class() - * @access private - */ - var $enclosure_class = 'SimplePie_Enclosure'; - - /** - * @var string Class used for Media RSS captions - * @see SimplePie::set_caption_class() - * @access private - */ - var $caption_class = 'SimplePie_Caption'; - - /** - * @var string Class used for Media RSS - * @see SimplePie::set_copyright_class() - * @access private - */ - var $copyright_class = 'SimplePie_Copyright'; - - /** - * @var string Class used for Media RSS - * @see SimplePie::set_credit_class() - * @access private - */ - var $credit_class = 'SimplePie_Credit'; - - /** - * @var string Class used for Media RSS - * @see SimplePie::set_rating_class() - * @access private - */ - var $rating_class = 'SimplePie_Rating'; - - /** - * @var string Class used for Media RSS - * @see SimplePie::set_restriction_class() - * @access private - */ - var $restriction_class = 'SimplePie_Restriction'; - - /** - * @var string Class used for content-type sniffing - * @see SimplePie::set_content_type_sniffer_class() - * @access private - */ - var $content_type_sniffer_class = 'SimplePie_Content_Type_Sniffer'; - - /** - * @var string Class used for item sources. - * @see SimplePie::set_source_class() - * @access private - */ - var $source_class = 'SimplePie_Source'; - - /** - * @var mixed Set javascript query string parameter (false, or - * anything type-cast to false, disables this feature) - * @see SimplePie::set_javascript() - * @access private - */ - var $javascript = 'js'; - - /** - * @var int Maximum number of feeds to check with autodiscovery - * @see SimplePie::set_max_checked_feeds() - * @access private - */ - var $max_checked_feeds = 10; - - /** - * @var array All the feeds found during the autodiscovery process - * @see SimplePie::get_all_discovered_feeds() - * @access private - */ - var $all_discovered_feeds = array(); - - /** - * @var string Web-accessible path to the handler_favicon.php file. - * @see SimplePie::set_favicon_handler() - * @access private - */ - var $favicon_handler = ''; - - /** - * @var string Web-accessible path to the handler_image.php file. - * @see SimplePie::set_image_handler() - * @access private - */ - var $image_handler = ''; - - /** - * @var array Stores the URLs when multiple feeds are being initialized. - * @see SimplePie::set_feed_url() - * @access private - */ - var $multifeed_url = array(); - - /** - * @var array Stores SimplePie objects when multiple feeds initialized. - * @access private - */ - var $multifeed_objects = array(); - - /** - * @var array Stores the get_object_vars() array for use with multifeeds. - * @see SimplePie::set_feed_url() - * @access private - */ - var $config_settings = null; - - /** - * @var integer Stores the number of items to return per-feed with multifeeds. - * @see SimplePie::set_item_limit() - * @access private - */ - var $item_limit = 0; - - /** - * @var array Stores the default attributes to be stripped by strip_attributes(). - * @see SimplePie::strip_attributes() - * @access private - */ - var $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'); - - /** - * @var array Stores the default tags to be stripped by strip_htmltags(). - * @see SimplePie::strip_htmltags() - * @access private - */ - var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'); - - /** - * The SimplePie class contains feed level data and options - * - * There are two ways that you can create a new SimplePie object. The first - * is by passing a feed URL as a parameter to the SimplePie constructor - * (as well as optionally setting the cache location and cache expiry). This - * will initialise the whole feed with all of the default settings, and you - * can begin accessing methods and properties immediately. - * - * The second way is to create the SimplePie object with no parameters - * at all. This will enable you to set configuration options. After setting - * them, you must initialise the feed using $feed->init(). At that point the - * object's methods and properties will be available to you. This format is - * what is used throughout this documentation. - * - * @access public - * @since 1.0 Preview Release - * @param string $feed_url This is the URL you want to parse. - * @param string $cache_location This is where you want the cache to be stored. - * @param int $cache_duration This is the number of seconds that you want to store the cache file for. - */ - function SimplePie($feed_url = null, $cache_location = null, $cache_duration = null) - { - // Other objects, instances created here so we can set options on them - $this->sanitize = new SimplePie_Sanitize; - - // Set options if they're passed to the constructor - if ($cache_location !== null) - { - $this->set_cache_location($cache_location); - } - - if ($cache_duration !== null) - { - $this->set_cache_duration($cache_duration); - } - - // Only init the script if we're passed a feed URL - if ($feed_url !== null) - { - $this->set_feed_url($feed_url); - $this->init(); - } - } - - /** - * Used for converting object to a string - */ - function __toString() - { - return md5(serialize($this->data)); - } - - /** - * Remove items that link back to this before destroying this object - */ - function __destruct() - { - if ((version_compare(PHP_VERSION, '5.3', '<') || !gc_enabled()) && !ini_get('zend.ze1_compatibility_mode')) - { - if (!empty($this->data['items'])) - { - foreach ($this->data['items'] as $item) - { - $item->__destruct(); - } - unset($item, $this->data['items']); - } - if (!empty($this->data['ordered_items'])) - { - foreach ($this->data['ordered_items'] as $item) - { - $item->__destruct(); - } - unset($item, $this->data['ordered_items']); - } - } - } - - /** - * Force the given data/URL to be treated as a feed no matter what it - * appears like - * - * @access public - * @since 1.1 - * @param bool $enable Force the given data/URL to be treated as a feed - */ - function force_feed($enable = false) - { - $this->force_feed = (bool) $enable; - } - - /** - * This is the URL of the feed you want to parse. - * - * This allows you to enter the URL of the feed you want to parse, or the - * website you want to try to use auto-discovery on. This takes priority - * over any set raw data. - * - * You can set multiple feeds to mash together by passing an array instead - * of a string for the $url. Remember that with each additional feed comes - * additional processing and resources. - * - * @access public - * @since 1.0 Preview Release - * @param mixed $url This is the URL (or array of URLs) that you want to parse. - * @see SimplePie::set_raw_data() - */ - function set_feed_url($url) - { - if (is_array($url)) - { - $this->multifeed_url = array(); - foreach ($url as $value) - { - $this->multifeed_url[] = SimplePie_Misc::fix_protocol($value, 1); - } - } - else - { - $this->feed_url = SimplePie_Misc::fix_protocol($url, 1); - } - } - - /** - * Provides an instance of SimplePie_File to use as a feed - * - * @access public - * @param object &$file Instance of SimplePie_File (or subclass) - * @return bool True on success, false on failure - */ - function set_file(&$file) - { - if (is_a($file, 'SimplePie_File')) - { - $this->feed_url = $file->url; - $this->file =& $file; - return true; - } - return false; - } - - /** - * Allows you to use a string of RSS/Atom data instead of a remote feed. - * - * If you have a feed available as a string in PHP, you can tell SimplePie - * to parse that data string instead of a remote feed. Any set feed URL - * takes precedence. - * - * @access public - * @since 1.0 Beta 3 - * @param string $data RSS or Atom data as a string. - * @see SimplePie::set_feed_url() - */ - function set_raw_data($data) - { - $this->raw_data = $data; - } - - /** - * Allows you to override the default timeout for fetching remote feeds. - * - * This allows you to change the maximum time the feed's server to respond - * and send the feed back. - * - * @access public - * @since 1.0 Beta 3 - * @param int $timeout The maximum number of seconds to spend waiting to retrieve a feed. - */ - function set_timeout($timeout = 10) - { - $this->timeout = (int) $timeout; - } - - /** - * Forces SimplePie to use fsockopen() instead of the preferred cURL - * functions. - * - * @access public - * @since 1.0 Beta 3 - * @param bool $enable Force fsockopen() to be used - */ - function force_fsockopen($enable = false) - { - $this->force_fsockopen = (bool) $enable; - } - - /** - * Outputs the raw XML content of the feed, after it has gone through - * SimplePie's filters. - * - * Used only for debugging, this function will output the XML content as - * text/xml. When SimplePie reads in a feed, it does a bit of cleaning up - * before trying to parse it. Many parts of the feed are re-written in - * memory, and in the end, you have a parsable feed. XML dump shows you the - * actual XML that SimplePie tries to parse, which may or may not be very - * different from the original feed. - * - * @access public - * @since 1.0 Preview Release - * @param bool $enable Enable XML dump - */ - function enable_xml_dump($enable = false) - { - $this->xml_dump = (bool) $enable; - } - - /** - * Enables/disables caching in SimplePie. - * - * This option allows you to disable caching all-together in SimplePie. - * However, disabling the cache can lead to longer load times. - * - * @access public - * @since 1.0 Preview Release - * @param bool $enable Enable caching - */ - function enable_cache($enable = true) - { - $this->cache = (bool) $enable; - } - - /** - * Set the length of time (in seconds) that the contents of a feed - * will be cached. - * - * @access public - * @param int $seconds The feed content cache duration. - */ - function set_cache_duration($seconds = 3600) - { - $this->cache_duration = (int) $seconds; - } - - /** - * Set the length of time (in seconds) that the autodiscovered feed - * URL will be cached. - * - * @access public - * @param int $seconds The autodiscovered feed URL cache duration. - */ - function set_autodiscovery_cache_duration($seconds = 604800) - { - $this->autodiscovery_cache_duration = (int) $seconds; - } - - /** - * Set the file system location where the cached files should be stored. - * - * @access public - * @param string $location The file system location. - */ - function set_cache_location($location = './cache') - { - $this->cache_location = (string) $location; - } - - /** - * Determines whether feed items should be sorted into reverse chronological order. - * - * @access public - * @param bool $enable Sort as reverse chronological order. - */ - function enable_order_by_date($enable = true) - { - $this->order_by_date = (bool) $enable; - } - - /** - * Allows you to override the character encoding reported by the feed. - * - * @access public - * @param string $encoding Character encoding. - */ - function set_input_encoding($encoding = false) - { - if ($encoding) - { - $this->input_encoding = (string) $encoding; - } - else - { - $this->input_encoding = false; - } - } - - /** - * Set how much feed autodiscovery to do - * - * @access public - * @see SIMPLEPIE_LOCATOR_NONE - * @see SIMPLEPIE_LOCATOR_AUTODISCOVERY - * @see SIMPLEPIE_LOCATOR_LOCAL_EXTENSION - * @see SIMPLEPIE_LOCATOR_LOCAL_BODY - * @see SIMPLEPIE_LOCATOR_REMOTE_EXTENSION - * @see SIMPLEPIE_LOCATOR_REMOTE_BODY - * @see SIMPLEPIE_LOCATOR_ALL - * @param int $level Feed Autodiscovery Level (level can be a - * combination of the above constants, see bitwise OR operator) - */ - function set_autodiscovery_level($level = SIMPLEPIE_LOCATOR_ALL) - { - $this->autodiscovery = (int) $level; - } - - /** - * Allows you to change which class SimplePie uses for caching. - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_cache_class($class = 'SimplePie_Cache') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Cache')) - { - $this->cache_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for auto-discovery. - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_locator_class($class = 'SimplePie_Locator') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Locator')) - { - $this->locator_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for XML parsing. - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_parser_class($class = 'SimplePie_Parser') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Parser')) - { - $this->parser_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for remote file fetching. - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_file_class($class = 'SimplePie_File') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_File')) - { - $this->file_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for data sanitization. - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_sanitize_class($class = 'SimplePie_Sanitize') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Sanitize')) - { - $this->sanitize = new $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for handling feed items. - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_item_class($class = 'SimplePie_Item') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Item')) - { - $this->item_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for handling author data. - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_author_class($class = 'SimplePie_Author') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Author')) - { - $this->author_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for handling category data. - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_category_class($class = 'SimplePie_Category') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Category')) - { - $this->category_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for feed enclosures. - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_enclosure_class($class = 'SimplePie_Enclosure') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Enclosure')) - { - $this->enclosure_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for captions - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_caption_class($class = 'SimplePie_Caption') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Caption')) - { - $this->caption_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_copyright_class($class = 'SimplePie_Copyright') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Copyright')) - { - $this->copyright_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_credit_class($class = 'SimplePie_Credit') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Credit')) - { - $this->credit_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_rating_class($class = 'SimplePie_Rating') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Rating')) - { - $this->rating_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_restriction_class($class = 'SimplePie_Restriction') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Restriction')) - { - $this->restriction_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses for content-type sniffing. - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_content_type_sniffer_class($class = 'SimplePie_Content_Type_Sniffer') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Content_Type_Sniffer')) - { - $this->content_type_sniffer_class = $class; - return true; - } - return false; - } - - /** - * Allows you to change which class SimplePie uses item sources. - * Useful when you are overloading or extending SimplePie's default classes. - * - * @access public - * @param string $class Name of custom class. - * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation - * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation - */ - function set_source_class($class = 'SimplePie_Source') - { - if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Source')) - { - $this->source_class = $class; - return true; - } - return false; - } - - /** - * Allows you to override the default user agent string. - * - * @access public - * @param string $ua New user agent string. - */ - function set_useragent($ua = SIMPLEPIE_USERAGENT) - { - $this->useragent = (string) $ua; - } - - /** - * Set callback function to create cache filename with - * - * @access public - * @param mixed $function Callback function - */ - function set_cache_name_function($function = 'md5') - { - if (is_callable($function)) - { - $this->cache_name_function = $function; - } - } - - /** - * Set javascript query string parameter - * - * @access public - * @param mixed $get Javascript query string parameter - */ - function set_javascript($get = 'js') - { - if ($get) - { - $this->javascript = (string) $get; - } - else - { - $this->javascript = false; - } - } - - /** - * Set options to make SP as fast as possible. Forgoes a - * substantial amount of data sanitization in favor of speed. - * - * @access public - * @param bool $set Whether to set them or not - */ - function set_stupidly_fast($set = false) - { - if ($set) - { - $this->enable_order_by_date(false); - $this->remove_div(false); - $this->strip_comments(false); - $this->strip_htmltags(false); - $this->strip_attributes(false); - $this->set_image_handler(false); - } - } - - /** - * Set maximum number of feeds to check with autodiscovery - * - * @access public - * @param int $max Maximum number of feeds to check - */ - function set_max_checked_feeds($max = 10) - { - $this->max_checked_feeds = (int) $max; - } - - function remove_div($enable = true) - { - $this->sanitize->remove_div($enable); - } - - function strip_htmltags($tags = '', $encode = null) - { - if ($tags === '') - { - $tags = $this->strip_htmltags; - } - $this->sanitize->strip_htmltags($tags); - if ($encode !== null) - { - $this->sanitize->encode_instead_of_strip($tags); - } - } - - function encode_instead_of_strip($enable = true) - { - $this->sanitize->encode_instead_of_strip($enable); - } - - function strip_attributes($attribs = '') - { - if ($attribs === '') - { - $attribs = $this->strip_attributes; - } - $this->sanitize->strip_attributes($attribs); - } - - function set_output_encoding($encoding = 'UTF-8') - { - $this->sanitize->set_output_encoding($encoding); - } - - function strip_comments($strip = false) - { - $this->sanitize->strip_comments($strip); - } - - /** - * Set element/attribute key/value pairs of HTML attributes - * containing URLs that need to be resolved relative to the feed - * - * @access public - * @since 1.0 - * @param array $element_attribute Element/attribute key/value pairs - */ - function set_url_replacements($element_attribute = array('a' => 'href', 'area' => 'href', 'blockquote' => 'cite', 'del' => 'cite', 'form' => 'action', 'img' => array('longdesc', 'src'), 'input' => 'src', 'ins' => 'cite', 'q' => 'cite')) - { - $this->sanitize->set_url_replacements($element_attribute); - } - - /** - * Set the handler to enable the display of cached favicons. - * - * @access public - * @param str $page Web-accessible path to the handler_favicon.php file. - * @param str $qs The query string that the value should be passed to. - */ - function set_favicon_handler($page = false, $qs = 'i') - { - if ($page !== false) - { - $this->favicon_handler = $page . '?' . $qs . '='; - } - else - { - $this->favicon_handler = ''; - } - } - - /** - * Set the handler to enable the display of cached images. - * - * @access public - * @param str $page Web-accessible path to the handler_image.php file. - * @param str $qs The query string that the value should be passed to. - */ - function set_image_handler($page = false, $qs = 'i') - { - if ($page !== false) - { - $this->sanitize->set_image_handler($page . '?' . $qs . '='); - } - else - { - $this->image_handler = ''; - } - } - - /** - * Set the limit for items returned per-feed with multifeeds. - * - * @access public - * @param integer $limit The maximum number of items to return. - */ - function set_item_limit($limit = 0) - { - $this->item_limit = (int) $limit; - } - - function init() - { - // Check absolute bare minimum requirements. - if ((function_exists('version_compare') && version_compare(PHP_VERSION, '4.3.0', '<')) || !extension_loaded('xml') || !extension_loaded('pcre')) - { - return false; - } - // Then check the xml extension is sane (i.e., libxml 2.7.x issue on PHP < 5.2.9 and libxml 2.7.0 to 2.7.2 on any version) if we don't have xmlreader. - elseif (!extension_loaded('xmlreader')) - { - static $xml_is_sane = null; - if ($xml_is_sane === null) - { - $parser_check = xml_parser_create(); - xml_parse_into_struct($parser_check, '&', $values); - xml_parser_free($parser_check); - $xml_is_sane = isset($values[0]['value']); - } - if (!$xml_is_sane) - { - return false; - } - } - - if (isset($_GET[$this->javascript])) - { - SimplePie_Misc::output_javascript(); - exit; - } - - // Pass whatever was set with config options over to the sanitizer. - $this->sanitize->pass_cache_data($this->cache, $this->cache_location, $this->cache_name_function, $this->cache_class); - $this->sanitize->pass_file_data($this->file_class, $this->timeout, $this->useragent, $this->force_fsockopen); - - if ($this->feed_url !== null || $this->raw_data !== null) - { - $this->data = array(); - $this->multifeed_objects = array(); - $cache = false; - - if ($this->feed_url !== null) - { - $parsed_feed_url = SimplePie_Misc::parse_url($this->feed_url); - // Decide whether to enable caching - if ($this->cache && $parsed_feed_url['scheme'] !== '') - { - $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, call_user_func($this->cache_name_function, $this->feed_url), 'spc'); - } - // If it's enabled and we don't want an XML dump, use the cache - if ($cache && !$this->xml_dump) - { - // Load the Cache - $this->data = $cache->load(); - if (!empty($this->data)) - { - // If the cache is for an outdated build of SimplePie - if (!isset($this->data['build']) || $this->data['build'] !== SIMPLEPIE_BUILD) - { - $cache->unlink(); - $this->data = array(); - } - // If we've hit a collision just rerun it with caching disabled - elseif (isset($this->data['url']) && $this->data['url'] !== $this->feed_url) - { - $cache = false; - $this->data = array(); - } - // If we've got a non feed_url stored (if the page isn't actually a feed, or is a redirect) use that URL. - elseif (isset($this->data['feed_url'])) - { - // If the autodiscovery cache is still valid use it. - if ($cache->mtime() + $this->autodiscovery_cache_duration > time()) - { - // Do not need to do feed autodiscovery yet. - if ($this->data['feed_url'] === $this->data['url']) - { - $cache->unlink(); - $this->data = array(); - } - else - { - $this->set_feed_url($this->data['feed_url']); - return $this->init(); - } - } - } - // Check if the cache has been updated - elseif ($cache->mtime() + $this->cache_duration < time()) - { - // If we have last-modified and/or etag set - if (isset($this->data['headers']['last-modified']) || isset($this->data['headers']['etag'])) - { - $headers = array(); - if (isset($this->data['headers']['last-modified'])) - { - $headers['if-modified-since'] = $this->data['headers']['last-modified']; - } - if (isset($this->data['headers']['etag'])) - { - $headers['if-none-match'] = '"' . $this->data['headers']['etag'] . '"'; - } - $file = new $this->file_class($this->feed_url, $this->timeout/10, 5, $headers, $this->useragent, $this->force_fsockopen); - if ($file->success) - { - if ($file->status_code === 304) - { - $cache->touch(); - return true; - } - else - { - $headers = $file->headers; - } - } - else - { - unset($file); - } - } - } - // If the cache is still valid, just return true - else - { - return true; - } - } - // If the cache is empty, delete it - else - { - $cache->unlink(); - $this->data = array(); - } - } - // If we don't already have the file (it'll only exist if we've opened it to check if the cache has been modified), open it. - if (!isset($file)) - { - if (is_a($this->file, 'SimplePie_File') && $this->file->url === $this->feed_url) - { - $file =& $this->file; - } - else - { - $file = new $this->file_class($this->feed_url, $this->timeout, 5, null, $this->useragent, $this->force_fsockopen); - } - } - // If the file connection has an error, set SimplePie::error to that and quit - if (!$file->success && !($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300))) - { - $this->error = $file->error; - if (!empty($this->data)) - { - return true; - } - else - { - return false; - } - } - - if (!$this->force_feed) - { - // Check if the supplied URL is a feed, if it isn't, look for it. - $locate = new $this->locator_class($file, $this->timeout, $this->useragent, $this->file_class, $this->max_checked_feeds, $this->content_type_sniffer_class); - if (!$locate->is_feed($file)) - { - // We need to unset this so that if SimplePie::set_file() has been called that object is untouched - unset($file); - if ($file = $locate->find($this->autodiscovery, $this->all_discovered_feeds)) - { - if ($cache) - { - $this->data = array('url' => $this->feed_url, 'feed_url' => $file->url, 'build' => SIMPLEPIE_BUILD); - if (!$cache->save($this)) - { - trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING); - } - $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, call_user_func($this->cache_name_function, $file->url), 'spc'); - } - $this->feed_url = $file->url; - } - else - { - $this->error = "A feed could not be found at $this->feed_url. A feed with an invalid mime type may fall victim to this error, or " . SIMPLEPIE_NAME . " was unable to auto-discover it.. Use force_feed() if you are certain this URL is a real feed."; - SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__); - return false; - } - } - $locate = null; - } - - $headers = $file->headers; - $data = $file->body; - $sniffer = new $this->content_type_sniffer_class($file); - $sniffed = $sniffer->get_type(); - } - else - { - $data = $this->raw_data; - } - - // Set up array of possible encodings - $encodings = array(); - - // First check to see if input has been overridden. - if ($this->input_encoding !== false) - { - $encodings[] = $this->input_encoding; - } - - $application_types = array('application/xml', 'application/xml-dtd', 'application/xml-external-parsed-entity'); - $text_types = array('text/xml', 'text/xml-external-parsed-entity'); - - // RFC 3023 (only applies to sniffed content) - if (isset($sniffed)) - { - if (in_array($sniffed, $application_types) || substr($sniffed, 0, 12) === 'application/' && substr($sniffed, -4) === '+xml') - { - if (isset($headers['content-type']) && preg_match('/;\x20?charset=([^;]*)/i', $headers['content-type'], $charset)) - { - $encodings[] = strtoupper($charset[1]); - } - $encodings = array_merge($encodings, SimplePie_Misc::xml_encoding($data)); - $encodings[] = 'UTF-8'; - } - elseif (in_array($sniffed, $text_types) || substr($sniffed, 0, 5) === 'text/' && substr($sniffed, -4) === '+xml') - { - if (isset($headers['content-type']) && preg_match('/;\x20?charset=([^;]*)/i', $headers['content-type'], $charset)) - { - $encodings[] = $charset[1]; - } - $encodings[] = 'US-ASCII'; - } - // Text MIME-type default - elseif (substr($sniffed, 0, 5) === 'text/') - { - $encodings[] = 'US-ASCII'; - } - } - - // Fallback to XML 1.0 Appendix F.1/UTF-8/ISO-8859-1 - $encodings = array_merge($encodings, SimplePie_Misc::xml_encoding($data)); - $encodings[] = 'UTF-8'; - $encodings[] = 'ISO-8859-1'; - - // There's no point in trying an encoding twice - $encodings = array_unique($encodings); - - // If we want the XML, just output that with the most likely encoding and quit - if ($this->xml_dump) - { - header('Content-type: text/xml; charset=' . $encodings[0]); - echo $data; - exit; - } - - // Loop through each possible encoding, till we return something, or run out of possibilities - foreach ($encodings as $encoding) - { - // Change the encoding to UTF-8 (as we always use UTF-8 internally) - if ($utf8_data = SimplePie_Misc::change_encoding($data, $encoding, 'UTF-8')) - { - // Create new parser - $parser = new $this->parser_class(); - - // If it's parsed fine - if ($parser->parse($utf8_data, 'UTF-8')) - { - $this->data = $parser->get_data(); - if ($this->get_type() & ~SIMPLEPIE_TYPE_NONE) - { - if (isset($headers)) - { - $this->data['headers'] = $headers; - } - $this->data['build'] = SIMPLEPIE_BUILD; - - // Cache the file if caching is enabled - if ($cache && !$cache->save($this)) - { - trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING); - } - return true; - } - else - { - $this->error = "A feed could not be found at $this->feed_url. This does not appear to be a valid RSS or Atom feed."; - SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__); - return false; - } - } - } - } - if (isset($parser)) - { - // We have an error, just set SimplePie_Misc::error to it and quit - $this->error = sprintf('This XML document is invalid, likely due to invalid characters. XML error: %s at line %d, column %d', $parser->get_error_string(), $parser->get_current_line(), $parser->get_current_column()); - } - else - { - $this->error = 'The data could not be converted to UTF-8. You MUST have either the iconv or mbstring extension installed. Upgrading to PHP 5.x (which includes iconv) is highly recommended.'; - } - SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__); - return false; - } - elseif (!empty($this->multifeed_url)) - { - $i = 0; - $success = 0; - $this->multifeed_objects = array(); - foreach ($this->multifeed_url as $url) - { - if (SIMPLEPIE_PHP5) - { - // This keyword needs to defy coding standards for PHP4 compatibility - $this->multifeed_objects[$i] = clone($this); - } - else - { - $this->multifeed_objects[$i] = $this; - } - $this->multifeed_objects[$i]->set_feed_url($url); - $success |= $this->multifeed_objects[$i]->init(); - $i++; - } - return (bool) $success; - } - else - { - return false; - } - } - - /** - * Return the error message for the occured error - * - * @access public - * @return string Error message - */ - function error() - { - return $this->error; - } - - function get_encoding() - { - return $this->sanitize->output_encoding; - } - - function handle_content_type($mime = 'text/html') - { - if (!headers_sent()) - { - $header = "Content-type: $mime;"; - if ($this->get_encoding()) - { - $header .= ' charset=' . $this->get_encoding(); - } - else - { - $header .= ' charset=UTF-8'; - } - header($header); - } - } - - function get_type() - { - if (!isset($this->data['type'])) - { - $this->data['type'] = SIMPLEPIE_TYPE_ALL; - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'])) - { - $this->data['type'] &= SIMPLEPIE_TYPE_ATOM_10; - } - elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'])) - { - $this->data['type'] &= SIMPLEPIE_TYPE_ATOM_03; - } - elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'])) - { - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['channel']) - || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['image']) - || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item']) - || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['textinput'])) - { - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_10; - } - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['channel']) - || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['image']) - || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item']) - || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['textinput'])) - { - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_090; - } - } - elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'])) - { - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_ALL; - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['attribs']['']['version'])) - { - switch (trim($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['attribs']['']['version'])) - { - case '0.91': - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091; - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['skiphours']['hour'][0]['data'])) - { - switch (trim($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['skiphours']['hour'][0]['data'])) - { - case '0': - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091_NETSCAPE; - break; - - case '24': - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091_USERLAND; - break; - } - } - break; - - case '0.92': - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_092; - break; - - case '0.93': - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_093; - break; - - case '0.94': - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_094; - break; - - case '2.0': - $this->data['type'] &= SIMPLEPIE_TYPE_RSS_20; - break; - } - } - } - else - { - $this->data['type'] = SIMPLEPIE_TYPE_NONE; - } - } - return $this->data['type']; - } - - /** - * Returns the URL for the favicon of the feed's website. - * - * @todo Cache atom:icon - * @access public - * @since 1.0 - */ - function get_favicon() - { - if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - elseif (($url = $this->get_link()) !== null && preg_match('/^http(s)?:\/\//i', $url)) - { - $favicon = SimplePie_Misc::absolutize_url('/favicon.ico', $url); - - if ($this->cache && $this->favicon_handler) - { - $favicon_filename = call_user_func($this->cache_name_function, $favicon); - $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, $favicon_filename, 'spi'); - - if ($cache->load()) - { - return $this->sanitize($this->favicon_handler . $favicon_filename, SIMPLEPIE_CONSTRUCT_IRI); - } - else - { - $file = new $this->file_class($favicon, $this->timeout / 10, 5, array('X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']), $this->useragent, $this->force_fsockopen); - - if ($file->success && ($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300)) && strlen($file->body) > 0) - { - $sniffer = new $this->content_type_sniffer_class($file); - if (substr($sniffer->get_type(), 0, 6) === 'image/') - { - if ($cache->save(array('headers' => $file->headers, 'body' => $file->body))) - { - return $this->sanitize($this->favicon_handler . $favicon_filename, SIMPLEPIE_CONSTRUCT_IRI); - } - else - { - trigger_error("$cache->name is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING); - return $this->sanitize($favicon, SIMPLEPIE_CONSTRUCT_IRI); - } - } - // not an image - else - { - return false; - } - } - } - } - else - { - return $this->sanitize($favicon, SIMPLEPIE_CONSTRUCT_IRI); - } - } - return false; - } - - /** - * @todo If we have a perm redirect we should return the new URL - * @todo When we make the above change, let's support as well - * @todo Also, |atom:link|@rel=self - */ - function subscribe_url() - { - if ($this->feed_url !== null) - { - return $this->sanitize($this->feed_url, SIMPLEPIE_CONSTRUCT_IRI); - } - else - { - return null; - } - } - - function subscribe_feed() - { - if ($this->feed_url !== null) - { - return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 2), SIMPLEPIE_CONSTRUCT_IRI); - } - else - { - return null; - } - } - - function subscribe_outlook() - { - if ($this->feed_url !== null) - { - return $this->sanitize('outlook' . SimplePie_Misc::fix_protocol($this->feed_url, 2), SIMPLEPIE_CONSTRUCT_IRI); - } - else - { - return null; - } - } - - function subscribe_podcast() - { - if ($this->feed_url !== null) - { - return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 3), SIMPLEPIE_CONSTRUCT_IRI); - } - else - { - return null; - } - } - - function subscribe_itunes() - { - if ($this->feed_url !== null) - { - return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 4), SIMPLEPIE_CONSTRUCT_IRI); - } - else - { - return null; - } - } - - /** - * Creates the subscribe_* methods' return data - * - * @access private - * @param string $feed_url String to prefix to the feed URL - * @param string $site_url String to prefix to the site URL (and - * suffix to the feed URL) - * @return mixed URL if feed exists, false otherwise - */ - function subscribe_service($feed_url, $site_url = null) - { - if ($this->subscribe_url()) - { - $return = $feed_url . rawurlencode($this->feed_url); - if ($site_url !== null && $this->get_link() !== null) - { - $return .= $site_url . rawurlencode($this->get_link()); - } - return $this->sanitize($return, SIMPLEPIE_CONSTRUCT_IRI); - } - else - { - return null; - } - } - - function subscribe_aol() - { - return $this->subscribe_service('http://feeds.my.aol.com/add.jsp?url='); - } - - function subscribe_bloglines() - { - return $this->subscribe_service('http://www.bloglines.com/sub/'); - } - - function subscribe_eskobo() - { - return $this->subscribe_service('http://www.eskobo.com/?AddToMyPage='); - } - - function subscribe_feedfeeds() - { - return $this->subscribe_service('http://www.feedfeeds.com/add?feed='); - } - - function subscribe_feedster() - { - return $this->subscribe_service('http://www.feedster.com/myfeedster.php?action=addrss&confirm=no&rssurl='); - } - - function subscribe_google() - { - return $this->subscribe_service('http://fusion.google.com/add?feedurl='); - } - - function subscribe_gritwire() - { - return $this->subscribe_service('http://my.gritwire.com/feeds/addExternalFeed.aspx?FeedUrl='); - } - - function subscribe_msn() - { - return $this->subscribe_service('http://my.msn.com/addtomymsn.armx?id=rss&ut=', '&ru='); - } - - function subscribe_netvibes() - { - return $this->subscribe_service('http://www.netvibes.com/subscribe.php?url='); - } - - function subscribe_newsburst() - { - return $this->subscribe_service('http://www.newsburst.com/Source/?add='); - } - - function subscribe_newsgator() - { - return $this->subscribe_service('http://www.newsgator.com/ngs/subscriber/subext.aspx?url='); - } - - function subscribe_odeo() - { - return $this->subscribe_service('http://www.odeo.com/listen/subscribe?feed='); - } - - function subscribe_podnova() - { - return $this->subscribe_service('http://www.podnova.com/index_your_podcasts.srf?action=add&url='); - } - - function subscribe_rojo() - { - return $this->subscribe_service('http://www.rojo.com/add-subscription?resource='); - } - - function subscribe_yahoo() - { - return $this->subscribe_service('http://add.my.yahoo.com/rss?url='); - } - - function get_feed_tags($namespace, $tag) - { - $type = $this->get_type(); - if ($type & SIMPLEPIE_TYPE_ATOM_10) - { - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['child'][$namespace][$tag])) - { - return $this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['child'][$namespace][$tag]; - } - } - if ($type & SIMPLEPIE_TYPE_ATOM_03) - { - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['child'][$namespace][$tag])) - { - return $this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['child'][$namespace][$tag]; - } - } - if ($type & SIMPLEPIE_TYPE_RSS_RDF) - { - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][$namespace][$tag])) - { - return $this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][$namespace][$tag]; - } - } - if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION) - { - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][$namespace][$tag])) - { - return $this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][$namespace][$tag]; - } - } - return null; - } - - function get_channel_tags($namespace, $tag) - { - $type = $this->get_type(); - if ($type & SIMPLEPIE_TYPE_ATOM_ALL) - { - if ($return = $this->get_feed_tags($namespace, $tag)) - { - return $return; - } - } - if ($type & SIMPLEPIE_TYPE_RSS_10) - { - if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'channel')) - { - if (isset($channel[0]['child'][$namespace][$tag])) - { - return $channel[0]['child'][$namespace][$tag]; - } - } - } - if ($type & SIMPLEPIE_TYPE_RSS_090) - { - if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'channel')) - { - if (isset($channel[0]['child'][$namespace][$tag])) - { - return $channel[0]['child'][$namespace][$tag]; - } - } - } - if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION) - { - if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'channel')) - { - if (isset($channel[0]['child'][$namespace][$tag])) - { - return $channel[0]['child'][$namespace][$tag]; - } - } - } - return null; - } - - function get_image_tags($namespace, $tag) - { - $type = $this->get_type(); - if ($type & SIMPLEPIE_TYPE_RSS_10) - { - if ($image = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'image')) - { - if (isset($image[0]['child'][$namespace][$tag])) - { - return $image[0]['child'][$namespace][$tag]; - } - } - } - if ($type & SIMPLEPIE_TYPE_RSS_090) - { - if ($image = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'image')) - { - if (isset($image[0]['child'][$namespace][$tag])) - { - return $image[0]['child'][$namespace][$tag]; - } - } - } - if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION) - { - if ($image = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'image')) - { - if (isset($image[0]['child'][$namespace][$tag])) - { - return $image[0]['child'][$namespace][$tag]; - } - } - } - return null; - } - - function get_base($element = array()) - { - if (!($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION) && !empty($element['xml_base_explicit']) && isset($element['xml_base'])) - { - return $element['xml_base']; - } - elseif ($this->get_link() !== null) - { - return $this->get_link(); - } - else - { - return $this->subscribe_url(); - } - } - - function sanitize($data, $type, $base = '') - { - return $this->sanitize->sanitize($data, $type, $base); - } - - function get_title() - { - if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - return null; - } - } - - function get_category($key = 0) - { - $categories = $this->get_categories(); - if (isset($categories[$key])) - { - return $categories[$key]; - } - else - { - return null; - } - } - - function get_categories() - { - $categories = array(); - - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category) - { - $term = null; - $scheme = null; - $label = null; - if (isset($category['attribs']['']['term'])) - { - $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['scheme'])) - { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['label'])) - { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories[] = new $this->category_class($term, $scheme, $label); - } - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category) - { - // This is really the label, but keep this as the term also for BC. - // Label will also work on retrieving because that falls back to term. - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); - if (isset($category['attribs']['']['domain'])) - { - $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $scheme = null; - } - $categories[] = new $this->category_class($term, $scheme, null); - } - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category) - { - $categories[] = new $this->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category) - { - $categories[] = new $this->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - - if (!empty($categories)) - { - return SimplePie_Misc::array_unique($categories); - } - else - { - return null; - } - } - - function get_author($key = 0) - { - $authors = $this->get_authors(); - if (isset($authors[$key])) - { - return $authors[$key]; - } - else - { - return null; - } - } - - function get_authors() - { - $authors = array(); - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author) - { - $name = null; - $uri = null; - $email = null; - $avatar = null; - $name_date = null; - $uri_date = null; - $avatar_date = null; - - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) - { - $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) - { - $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); - } - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) - { - $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar'][0]['data'])) - { - $avatar = $this->sanitize($author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar'][0])); - } - if (isset($author['child']['http://purl.org/macgirvin/dfrn/1.0']['name-updated'][0]['data'])) - { - $name_date = $author['child']['http://purl.org/macgirvin/dfrn/1.0']['name-updated'][0]['data']; - } - if (isset($author['child']['http://purl.org/macgirvin/dfrn/1.0']['uri-updated'][0]['data'])) - { - $uri_date = $author['child']['http://purl.org/macgirvin/dfrn/1.0']['uri-updated'][0]['data']; - } - if (isset($author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar-updated'][0]['data'])) - { - $avatar_date = $author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar-updated'][0]['data']; - } - - if ($name !== null || $email !== null || $uri !== null || $avatar !== null || $name_date !== null || $uri_date !== null || $avatar_date !== null ) - { - $authors[] = new $this->author_class($name, $uri, $email, $avatar, $name_date, $uri_date, $avatar_date); - } - } - if ($author = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author')) - { - $name = null; - $url = null; - $email = null; - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) - { - $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) - { - $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); - } - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) - { - $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $url !== null) - { - $authors[] = new $this->author_class($name, $url, $email); - } - } - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author) - { - $authors[] = new $this->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author) - { - $authors[] = new $this->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author) - { - $authors[] = new $this->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - - if (!empty($authors)) - { - return SimplePie_Misc::array_unique($authors); - } - else - { - return null; - } - } - - function get_contributor($key = 0) - { - $contributors = $this->get_contributors(); - if (isset($contributors[$key])) - { - return $contributors[$key]; - } - else - { - return null; - } - } - - function get_contributors() - { - $contributors = array(); - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor) - { - $name = null; - $uri = null; - $email = null; - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) - { - $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) - { - $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) - { - $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $uri !== null) - { - $contributors[] = new $this->author_class($name, $uri, $email); - } - } - foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor) - { - $name = null; - $url = null; - $email = null; - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) - { - $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) - { - $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) - { - $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $url !== null) - { - $contributors[] = new $this->author_class($name, $url, $email); - } - } - - if (!empty($contributors)) - { - return SimplePie_Misc::array_unique($contributors); - } - else - { - return null; - } - } - - function get_link($key = 0, $rel = 'alternate') - { - $links = $this->get_links($rel); - if (isset($links[$key])) - { - return $links[$key]; - } - else - { - return null; - } - } - - /** - * Added for parity between the parent-level and the item/entry-level. - */ - function get_permalink() - { - return $this->get_link(0); - } - - function get_links($rel = 'alternate') - { - if (!isset($this->data['links'])) - { - $this->data['links'] = array(); - if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link')) - { - foreach ($links as $link) - { - if (isset($link['attribs']['']['href'])) - { - $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; - $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); - } - } - } - if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link')) - { - foreach ($links as $link) - { - if (isset($link['attribs']['']['href'])) - { - $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; - $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); - - } - } - } - if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - - $keys = array_keys($this->data['links']); - foreach ($keys as $key) - { - if (SimplePie_Misc::is_isegment_nz_nc($key)) - { - if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key])) - { - $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]); - $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]; - } - else - { - $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key]; - } - } - elseif (substr($key, 0, 41) === SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY) - { - $this->data['links'][substr($key, 41)] =& $this->data['links'][$key]; - } - $this->data['links'][$key] = array_unique($this->data['links'][$key]); - } - } - - if (isset($this->data['links'][$rel])) - { - return $this->data['links'][$rel]; - } - else - { - return null; - } - } - - function get_all_discovered_feeds() - { - return $this->all_discovered_feeds; - } - - function get_description() - { - if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'subtitle')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'tagline')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); - } - else - { - return null; - } - } - - function get_copyright() - { - if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'copyright')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'copyright')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - return null; - } - } - - function get_language() - { - if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'language')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'language')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'language')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['xml_lang'])) - { - return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['xml_lang'])) - { - return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['xml_lang'])) - { - return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (isset($this->data['headers']['content-language'])) - { - return $this->sanitize($this->data['headers']['content-language'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - return null; - } - } - - function get_latitude() - { - - if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat')) - { - return (float) $return[0]['data']; - } - elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) - { - return (float) $match[1]; - } - else - { - return null; - } - } - - function get_longitude() - { - if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long')) - { - return (float) $return[0]['data']; - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon')) - { - return (float) $return[0]['data']; - } - elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) - { - return (float) $match[2]; - } - else - { - return null; - } - } - - function get_image_title() - { - if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - return null; - } - } - - function get_image_url() - { - if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'image')) - { - return $this->sanitize($return[0]['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'logo')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'url')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'url')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'url')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - else - { - return null; - } - } - - function get_image_link() - { - if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - else - { - return null; - } - } - - function get_image_width() - { - if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'width')) - { - return round($return[0]['data']); - } - elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'url')) - { - return 88.0; - } - else - { - return null; - } - } - - function get_image_height() - { - if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'height')) - { - return round($return[0]['data']); - } - elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'url')) - { - return 31.0; - } - else - { - return null; - } - } - - function get_item_quantity($max = 0) - { - $max = (int) $max; - $qty = count($this->get_items()); - if ($max === 0) - { - return $qty; - } - else - { - return ($qty > $max) ? $max : $qty; - } - } - - function get_item($key = 0) - { - $items = $this->get_items(); - if (isset($items[$key])) - { - return $items[$key]; - } - else - { - return null; - } - } - - function get_items($start = 0, $end = 0) - { - if (!isset($this->data['items'])) - { - if (!empty($this->multifeed_objects)) - { - $this->data['items'] = SimplePie::merge_items($this->multifeed_objects, $start, $end, $this->item_limit); - } - else - { - $this->data['items'] = array(); - if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'entry')) - { - $keys = array_keys($items); - foreach ($keys as $key) - { - $this->data['items'][] = new $this->item_class($this, $items[$key]); - } - } - if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'entry')) - { - $keys = array_keys($items); - foreach ($keys as $key) - { - $this->data['items'][] = new $this->item_class($this, $items[$key]); - } - } - if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'item')) - { - $keys = array_keys($items); - foreach ($keys as $key) - { - $this->data['items'][] = new $this->item_class($this, $items[$key]); - } - } - if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'item')) - { - $keys = array_keys($items); - foreach ($keys as $key) - { - $this->data['items'][] = new $this->item_class($this, $items[$key]); - } - } - if ($items = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'item')) - { - $keys = array_keys($items); - foreach ($keys as $key) - { - $this->data['items'][] = new $this->item_class($this, $items[$key]); - } - } - } - } - - if (!empty($this->data['items'])) - { - // If we want to order it by date, check if all items have a date, and then sort it - if ($this->order_by_date && empty($this->multifeed_objects)) - { - if (!isset($this->data['ordered_items'])) - { - $do_sort = true; - foreach ($this->data['items'] as $item) - { - if (!$item->get_date('U')) - { - $do_sort = false; - break; - } - } - $item = null; - $this->data['ordered_items'] = $this->data['items']; - if ($do_sort) - { - usort($this->data['ordered_items'], array(&$this, 'sort_items')); - } - } - $items = $this->data['ordered_items']; - } - else - { - $items = $this->data['items']; - } - - // Slice the data as desired - if ($end === 0) - { - return array_slice($items, $start); - } - else - { - return array_slice($items, $start, $end); - } - } - else - { - return array(); - } - } - - /** - * @static - */ - function sort_items($a, $b) - { - return $a->get_date('U') <= $b->get_date('U'); - } - - /** - * @static - */ - function merge_items($urls, $start = 0, $end = 0, $limit = 0) - { - if (is_array($urls) && sizeof($urls) > 0) - { - $items = array(); - foreach ($urls as $arg) - { - if (is_a($arg, 'SimplePie')) - { - $items = array_merge($items, $arg->get_items(0, $limit)); - } - else - { - trigger_error('Arguments must be SimplePie objects', E_USER_WARNING); - } - } - - $do_sort = true; - foreach ($items as $item) - { - if (!$item->get_date('U')) - { - $do_sort = false; - break; - } - } - $item = null; - if ($do_sort) - { - usort($items, array('SimplePie', 'sort_items')); - } - - if ($end === 0) - { - return array_slice($items, $start); - } - else - { - return array_slice($items, $start, $end); - } - } - else - { - trigger_error('Cannot merge zero SimplePie objects', E_USER_WARNING); - return array(); - } - } -} - -class SimplePie_Item -{ - var $feed; - var $data = array(); - - function SimplePie_Item($feed, $data) - { - $this->feed = $feed; - $this->data = $data; - } - - function __toString() - { - return md5(serialize($this->data)); - } - - /** - * Remove items that link back to this before destroying this object - */ - function __destruct() - { - if ((version_compare(PHP_VERSION, '5.3', '<') || !gc_enabled()) && !ini_get('zend.ze1_compatibility_mode')) - { - unset($this->feed); - } - } - - function get_item_tags($namespace, $tag) - { - if (isset($this->data['child'][$namespace][$tag])) - { - return $this->data['child'][$namespace][$tag]; - } - else - { - return null; - } - } - - function get_base($element = array()) - { - return $this->feed->get_base($element); - } - - function sanitize($data, $type, $base = '') - { - return $this->feed->sanitize($data, $type, $base); - } - - function get_feed() - { - return $this->feed; - } - - function get_id($hash = false) - { - if (!$hash) - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'id')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'id')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'guid')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'identifier')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'identifier')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (($return = $this->get_permalink()) !== null) - { - return $return; - } - elseif (($return = $this->get_title()) !== null) - { - return $return; - } - } - if ($this->get_permalink() !== null || $this->get_title() !== null) - { - return md5($this->get_permalink() . $this->get_title()); - } - else - { - return md5(serialize($this->data)); - } - } - - function get_title() - { - if (!isset($this->data['title'])) - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title')) - { - $this->data['title'] = $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title')) - { - $this->data['title'] = $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title')) - { - $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title')) - { - $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title')) - { - $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title')) - { - $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title')) - { - $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $this->data['title'] = null; - } - } - return $this->data['title']; - } - - function get_description($description_only = false) - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'summary')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'summary')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (!$description_only) - { - return $this->get_content(true); - } - else - { - return null; - } - } - - function get_content($content_only = false) - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'content')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_content_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'content')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT, 'encoded')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); - } - elseif (!$content_only) - { - return $this->get_description(true); - } - else - { - return null; - } - } - - function get_category($key = 0) - { - $categories = $this->get_categories(); - if (isset($categories[$key])) - { - return $categories[$key]; - } - else - { - return null; - } - } - - function get_categories() - { - $categories = array(); - - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category) - { - $term = null; - $scheme = null; - $label = null; - if (isset($category['attribs']['']['term'])) - { - $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['scheme'])) - { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['label'])) - { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories[] = new $this->feed->category_class($term, $scheme, $label); - } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category) - { - // This is really the label, but keep this as the term also for BC. - // Label will also work on retrieving because that falls back to term. - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); - if (isset($category['attribs']['']['domain'])) - { - $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $scheme = null; - } - $categories[] = new $this->feed->category_class($term, $scheme, null); - } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category) - { - $categories[] = new $this->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category) - { - $categories[] = new $this->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - - if (!empty($categories)) - { - return SimplePie_Misc::array_unique($categories); - } - else - { - return null; - } - } - - function get_author($key = 0) - { - $authors = $this->get_authors(); - if (isset($authors[$key])) - { - return $authors[$key]; - } - else - { - return null; - } - } - - function get_contributor($key = 0) - { - $contributors = $this->get_contributors(); - if (isset($contributors[$key])) - { - return $contributors[$key]; - } - else - { - return null; - } - } - - function get_contributors() - { - $contributors = array(); - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor) - { - $name = null; - $uri = null; - $email = null; - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) - { - $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) - { - $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) - { - $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $uri !== null) - { - $contributors[] = new $this->feed->author_class($name, $uri, $email); - } - } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor) - { - $name = null; - $url = null; - $email = null; - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) - { - $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) - { - $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) - { - $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $url !== null) - { - $contributors[] = new $this->feed->author_class($name, $url, $email); - } - } - - if (!empty($contributors)) - { - return SimplePie_Misc::array_unique($contributors); - } - else - { - return null; - } - } - - function get_authors() - { - $authors = array(); - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author) - { - $name = null; - $uri = null; - $email = null; - $avatar = null; - $name_date = null; - $uri_date = null; - $avatar_date = null; - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) - { - $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) - { - $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); - } - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) - { - $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar'][0]['data'])) - { - $avatar = $this->sanitize($author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar'][0])); - } - if (isset($author['child']['http://purl.org/macgirvin/dfrn/1.0']['name-updated'][0]['data'])) - { - $name_date = $author['child']['http://purl.org/macgirvin/dfrn/1.0']['name-updated'][0]['data']; - } - if (isset($author['child']['http://purl.org/macgirvin/dfrn/1.0']['uri-updated'][0]['data'])) - { - $uri_date = $author['child']['http://purl.org/macgirvin/dfrn/1.0']['uri-updated'][0]['data']; - } - if (isset($author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar-updated'][0]['data'])) - { - $avatar_date = $author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar-updated'][0]['data']; - } - - if ($name !== null || $email !== null || $uri !== null || $avatar !== null || $name_date !== null || $uri_date !== null || $avatar_date !== null ) - { - $authors[] = new $this->feed->author_class($name, $uri, $email, $avatar, $name_date, $uri_date, $avatar_date); - } - } - if ($author = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author')) - { - $name = null; - $url = null; - $email = null; - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) - { - $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) - { - $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); - } - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) - { - $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $url !== null) - { - $authors[] = new $this->feed->author_class($name, $url, $email); - } - } - if ($author = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'author')) - { - $authors[] = new $this->feed->author_class(null, null, $this->sanitize($author[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author) - { - $authors[] = new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author) - { - $authors[] = new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author) - { - $authors[] = new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - - if (!empty($authors)) - { - return SimplePie_Misc::array_unique($authors); - } - elseif (($source = $this->get_source()) && ($authors = $source->get_authors())) - { - return $authors; - } - elseif ($authors = $this->feed->get_authors()) - { - return $authors; - } - else - { - return null; - } - } - - function get_copyright() - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - return null; - } - } - - function get_date($date_format = 'j F Y, g:i a') - { - if (!isset($this->data['date'])) - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'published')) - { - $this->data['date']['raw'] = $return[0]['data']; - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'updated')) - { - $this->data['date']['raw'] = $return[0]['data']; - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'issued')) - { - $this->data['date']['raw'] = $return[0]['data']; - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'created')) - { - $this->data['date']['raw'] = $return[0]['data']; - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'modified')) - { - $this->data['date']['raw'] = $return[0]['data']; - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'pubDate')) - { - $this->data['date']['raw'] = $return[0]['data']; - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'date')) - { - $this->data['date']['raw'] = $return[0]['data']; - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'date')) - { - $this->data['date']['raw'] = $return[0]['data']; - } - - if (!empty($this->data['date']['raw'])) - { - $parser = SimplePie_Parse_Date::get(); - $this->data['date']['parsed'] = $parser->parse($this->data['date']['raw']); - } - else - { - $this->data['date'] = null; - } - } - if ($this->data['date']) - { - $date_format = (string) $date_format; - switch ($date_format) - { - case '': - return $this->sanitize($this->data['date']['raw'], SIMPLEPIE_CONSTRUCT_TEXT); - - case 'U': - return $this->data['date']['parsed']; - - default: - return date($date_format, $this->data['date']['parsed']); - } - } - else - { - return null; - } - } - - function get_local_date($date_format = '%c') - { - if (!$date_format) - { - return $this->sanitize($this->get_date(''), SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (($date = $this->get_date('U')) !== null) - { - return strftime($date_format, $date); - } - else - { - return null; - } - } - - function get_permalink() - { - $link = $this->get_link(); - $enclosure = $this->get_enclosure(0); - if ($link !== null) - { - return $link; - } - elseif ($enclosure !== null) - { - return $enclosure->get_link(); - } - else - { - return null; - } - } - - function get_link($key = 0, $rel = 'alternate') - { - $links = $this->get_links($rel); - if ($links[$key] !== null) - { - return $links[$key]; - } - else - { - return null; - } - } - - function get_links($rel = 'alternate') - { - if (!isset($this->data['links'])) - { - $this->data['links'] = array(); - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link) - { - if (isset($link['attribs']['']['href'])) - { - $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; - $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); - - } - } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link) - { - if (isset($link['attribs']['']['href'])) - { - $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; - $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); - } - } - if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'guid')) - { - if (!isset($links[0]['attribs']['']['isPermaLink']) || strtolower(trim($links[0]['attribs']['']['isPermaLink'])) === 'true') - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - } - - $keys = array_keys($this->data['links']); - foreach ($keys as $key) - { - if (SimplePie_Misc::is_isegment_nz_nc($key)) - { - if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key])) - { - $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]); - $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]; - } - else - { - $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key]; - } - } - elseif (substr($key, 0, 41) === SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY) - { - $this->data['links'][substr($key, 41)] =& $this->data['links'][$key]; - } - $this->data['links'][$key] = array_unique($this->data['links'][$key]); - } - } - if (isset($this->data['links'][$rel])) - { - return $this->data['links'][$rel]; - } - else - { - return null; - } - } - - /** - * @todo Add ability to prefer one type of content over another (in a media group). - */ - function get_enclosure($key = 0, $prefer = null) - { - $enclosures = $this->get_enclosures(); - if (isset($enclosures[$key])) - { - return $enclosures[$key]; - } - else - { - return null; - } - } - - /** - * Grabs all available enclosures (podcasts, etc.) - * - * Supports the RSS tag, as well as Media RSS and iTunes RSS. - * - * At this point, we're pretty much assuming that all enclosures for an item are the same content. Anything else is too complicated to properly support. - * - * @todo Add support for end-user defined sorting of enclosures by type/handler (so we can prefer the faster-loading FLV over MP4). - * @todo If an element exists at a level, but it's value is empty, we should fall back to the value from the parent (if it exists). - */ - function get_enclosures() - { - if (!isset($this->data['enclosures'])) - { - $this->data['enclosures'] = array(); - - // Elements - $captions_parent = null; - $categories_parent = null; - $copyrights_parent = null; - $credits_parent = null; - $description_parent = null; - $duration_parent = null; - $hashes_parent = null; - $keywords_parent = null; - $player_parent = null; - $ratings_parent = null; - $restrictions_parent = null; - $thumbnails_parent = null; - $title_parent = null; - - // Let's do the channel and item-level ones first, and just re-use them if we need to. - $parent = $this->get_feed(); - - // CAPTIONS - if ($captions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text')) - { - foreach ($captions as $caption) - { - $caption_type = null; - $caption_lang = null; - $caption_startTime = null; - $caption_endTime = null; - $caption_text = null; - if (isset($caption['attribs']['']['type'])) - { - $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['lang'])) - { - $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['start'])) - { - $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['end'])) - { - $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['data'])) - { - $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $captions_parent[] = new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text); - } - } - elseif ($captions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text')) - { - foreach ($captions as $caption) - { - $caption_type = null; - $caption_lang = null; - $caption_startTime = null; - $caption_endTime = null; - $caption_text = null; - if (isset($caption['attribs']['']['type'])) - { - $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['lang'])) - { - $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['start'])) - { - $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['end'])) - { - $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['data'])) - { - $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $captions_parent[] = new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text); - } - } - if (is_array($captions_parent)) - { - $captions_parent = array_values(SimplePie_Misc::array_unique($captions_parent)); - } - - // CATEGORIES - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category) - { - $term = null; - $scheme = null; - $label = null; - if (isset($category['data'])) - { - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['scheme'])) - { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $scheme = 'http://search.yahoo.com/mrss/category_schema'; - } - if (isset($category['attribs']['']['label'])) - { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories_parent[] = new $this->feed->category_class($term, $scheme, $label); - } - foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category) - { - $term = null; - $scheme = null; - $label = null; - if (isset($category['data'])) - { - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['scheme'])) - { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $scheme = 'http://search.yahoo.com/mrss/category_schema'; - } - if (isset($category['attribs']['']['label'])) - { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories_parent[] = new $this->feed->category_class($term, $scheme, $label); - } - foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'category') as $category) - { - $term = null; - $scheme = 'http://www.itunes.com/dtds/podcast-1.0.dtd'; - $label = null; - if (isset($category['attribs']['']['text'])) - { - $label = $this->sanitize($category['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories_parent[] = new $this->feed->category_class($term, $scheme, $label); - - if (isset($category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category'])) - { - foreach ((array) $category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category'] as $subcategory) - { - if (isset($subcategory['attribs']['']['text'])) - { - $label = $this->sanitize($subcategory['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories_parent[] = new $this->feed->category_class($term, $scheme, $label); - } - } - } - if (is_array($categories_parent)) - { - $categories_parent = array_values(SimplePie_Misc::array_unique($categories_parent)); - } - - // COPYRIGHT - if ($copyright = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright')) - { - $copyright_url = null; - $copyright_label = null; - if (isset($copyright[0]['attribs']['']['url'])) - { - $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($copyright[0]['data'])) - { - $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $copyrights_parent = new $this->feed->copyright_class($copyright_url, $copyright_label); - } - elseif ($copyright = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright')) - { - $copyright_url = null; - $copyright_label = null; - if (isset($copyright[0]['attribs']['']['url'])) - { - $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($copyright[0]['data'])) - { - $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $copyrights_parent = new $this->feed->copyright_class($copyright_url, $copyright_label); - } - - // CREDITS - if ($credits = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit')) - { - foreach ($credits as $credit) - { - $credit_role = null; - $credit_scheme = null; - $credit_name = null; - if (isset($credit['attribs']['']['role'])) - { - $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($credit['attribs']['']['scheme'])) - { - $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $credit_scheme = 'urn:ebu'; - } - if (isset($credit['data'])) - { - $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $credits_parent[] = new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name); - } - } - elseif ($credits = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit')) - { - foreach ($credits as $credit) - { - $credit_role = null; - $credit_scheme = null; - $credit_name = null; - if (isset($credit['attribs']['']['role'])) - { - $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($credit['attribs']['']['scheme'])) - { - $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $credit_scheme = 'urn:ebu'; - } - if (isset($credit['data'])) - { - $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $credits_parent[] = new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name); - } - } - if (is_array($credits_parent)) - { - $credits_parent = array_values(SimplePie_Misc::array_unique($credits_parent)); - } - - // DESCRIPTION - if ($description_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description')) - { - if (isset($description_parent[0]['data'])) - { - $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - } - elseif ($description_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description')) - { - if (isset($description_parent[0]['data'])) - { - $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - } - - // DURATION - if ($duration_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'duration')) - { - $seconds = null; - $minutes = null; - $hours = null; - if (isset($duration_parent[0]['data'])) - { - $temp = explode(':', $this->sanitize($duration_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - if (sizeof($temp) > 0) - { - (int) $seconds = array_pop($temp); - } - if (sizeof($temp) > 0) - { - (int) $minutes = array_pop($temp); - $seconds += $minutes * 60; - } - if (sizeof($temp) > 0) - { - (int) $hours = array_pop($temp); - $seconds += $hours * 3600; - } - unset($temp); - $duration_parent = $seconds; - } - } - - // HASHES - if ($hashes_iterator = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash')) - { - foreach ($hashes_iterator as $hash) - { - $value = null; - $algo = null; - if (isset($hash['data'])) - { - $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($hash['attribs']['']['algo'])) - { - $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $algo = 'md5'; - } - $hashes_parent[] = $algo.':'.$value; - } - } - elseif ($hashes_iterator = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash')) - { - foreach ($hashes_iterator as $hash) - { - $value = null; - $algo = null; - if (isset($hash['data'])) - { - $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($hash['attribs']['']['algo'])) - { - $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $algo = 'md5'; - } - $hashes_parent[] = $algo.':'.$value; - } - } - if (is_array($hashes_parent)) - { - $hashes_parent = array_values(SimplePie_Misc::array_unique($hashes_parent)); - } - - // KEYWORDS - if ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords')) - { - if (isset($keywords[0]['data'])) - { - $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - foreach ($temp as $word) - { - $keywords_parent[] = trim($word); - } - } - unset($temp); - } - elseif ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords')) - { - if (isset($keywords[0]['data'])) - { - $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - foreach ($temp as $word) - { - $keywords_parent[] = trim($word); - } - } - unset($temp); - } - elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords')) - { - if (isset($keywords[0]['data'])) - { - $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - foreach ($temp as $word) - { - $keywords_parent[] = trim($word); - } - } - unset($temp); - } - elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords')) - { - if (isset($keywords[0]['data'])) - { - $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - foreach ($temp as $word) - { - $keywords_parent[] = trim($word); - } - } - unset($temp); - } - if (is_array($keywords_parent)) - { - $keywords_parent = array_values(SimplePie_Misc::array_unique($keywords_parent)); - } - - // PLAYER - if ($player_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player')) - { - if (isset($player_parent[0]['attribs']['']['url'])) - { - $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - } - elseif ($player_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player')) - { - if (isset($player_parent[0]['attribs']['']['url'])) - { - $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - } - - // RATINGS - if ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating')) - { - foreach ($ratings as $rating) - { - $rating_scheme = null; - $rating_value = null; - if (isset($rating['attribs']['']['scheme'])) - { - $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $rating_scheme = 'urn:simple'; - } - if (isset($rating['data'])) - { - $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $ratings_parent[] = new $this->feed->rating_class($rating_scheme, $rating_value); - } - } - elseif ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit')) - { - foreach ($ratings as $rating) - { - $rating_scheme = 'urn:itunes'; - $rating_value = null; - if (isset($rating['data'])) - { - $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $ratings_parent[] = new $this->feed->rating_class($rating_scheme, $rating_value); - } - } - elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating')) - { - foreach ($ratings as $rating) - { - $rating_scheme = null; - $rating_value = null; - if (isset($rating['attribs']['']['scheme'])) - { - $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $rating_scheme = 'urn:simple'; - } - if (isset($rating['data'])) - { - $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $ratings_parent[] = new $this->feed->rating_class($rating_scheme, $rating_value); - } - } - elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit')) - { - foreach ($ratings as $rating) - { - $rating_scheme = 'urn:itunes'; - $rating_value = null; - if (isset($rating['data'])) - { - $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $ratings_parent[] = new $this->feed->rating_class($rating_scheme, $rating_value); - } - } - if (is_array($ratings_parent)) - { - $ratings_parent = array_values(SimplePie_Misc::array_unique($ratings_parent)); - } - - // RESTRICTIONS - if ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction')) - { - foreach ($restrictions as $restriction) - { - $restriction_relationship = null; - $restriction_type = null; - $restriction_value = null; - if (isset($restriction['attribs']['']['relationship'])) - { - $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['attribs']['']['type'])) - { - $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['data'])) - { - $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $restrictions_parent[] = new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); - } - } - elseif ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block')) - { - foreach ($restrictions as $restriction) - { - $restriction_relationship = 'allow'; - $restriction_type = null; - $restriction_value = 'itunes'; - if (isset($restriction['data']) && strtolower($restriction['data']) === 'yes') - { - $restriction_relationship = 'deny'; - } - $restrictions_parent[] = new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); - } - } - elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction')) - { - foreach ($restrictions as $restriction) - { - $restriction_relationship = null; - $restriction_type = null; - $restriction_value = null; - if (isset($restriction['attribs']['']['relationship'])) - { - $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['attribs']['']['type'])) - { - $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['data'])) - { - $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $restrictions_parent[] = new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); - } - } - elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block')) - { - foreach ($restrictions as $restriction) - { - $restriction_relationship = 'allow'; - $restriction_type = null; - $restriction_value = 'itunes'; - if (isset($restriction['data']) && strtolower($restriction['data']) === 'yes') - { - $restriction_relationship = 'deny'; - } - $restrictions_parent[] = new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); - } - } - if (is_array($restrictions_parent)) - { - $restrictions_parent = array_values(SimplePie_Misc::array_unique($restrictions_parent)); - } - - // THUMBNAILS - if ($thumbnails = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail')) - { - foreach ($thumbnails as $thumbnail) - { - if (isset($thumbnail['attribs']['']['url'])) - { - $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - } - } - elseif ($thumbnails = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail')) - { - foreach ($thumbnails as $thumbnail) - { - if (isset($thumbnail['attribs']['']['url'])) - { - $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - } - } - - // TITLES - if ($title_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title')) - { - if (isset($title_parent[0]['data'])) - { - $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - } - elseif ($title_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title')) - { - if (isset($title_parent[0]['data'])) - { - $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - } - - // Clear the memory - unset($parent); - - // Attributes - $bitrate = null; - $channels = null; - $duration = null; - $expression = null; - $framerate = null; - $height = null; - $javascript = null; - $lang = null; - $length = null; - $medium = null; - $samplingrate = null; - $type = null; - $url = null; - $width = null; - - // Elements - $captions = null; - $categories = null; - $copyrights = null; - $credits = null; - $description = null; - $hashes = null; - $keywords = null; - $player = null; - $ratings = null; - $restrictions = null; - $thumbnails = null; - $title = null; - - // If we have media:group tags, loop through them. - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'group') as $group) - { - if(isset($group['child']) && isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'])) - { - // If we have media:content tags, loop through them. - foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content) - { - if (isset($content['attribs']['']['url'])) - { - // Attributes - $bitrate = null; - $channels = null; - $duration = null; - $expression = null; - $framerate = null; - $height = null; - $javascript = null; - $lang = null; - $length = null; - $medium = null; - $samplingrate = null; - $type = null; - $url = null; - $width = null; - - // Elements - $captions = null; - $categories = null; - $copyrights = null; - $credits = null; - $description = null; - $hashes = null; - $keywords = null; - $player = null; - $ratings = null; - $restrictions = null; - $thumbnails = null; - $title = null; - - // Start checking the attributes of media:content - if (isset($content['attribs']['']['bitrate'])) - { - $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['channels'])) - { - $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['duration'])) - { - $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $duration = $duration_parent; - } - if (isset($content['attribs']['']['expression'])) - { - $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['framerate'])) - { - $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['height'])) - { - $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['lang'])) - { - $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['fileSize'])) - { - $length = ceil($content['attribs']['']['fileSize']); - } - if (isset($content['attribs']['']['medium'])) - { - $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['samplingrate'])) - { - $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['type'])) - { - $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['width'])) - { - $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - - // Checking the other optional media: elements. Priority: media:content, media:group, item, channel - - // CAPTIONS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption) - { - $caption_type = null; - $caption_lang = null; - $caption_startTime = null; - $caption_endTime = null; - $caption_text = null; - if (isset($caption['attribs']['']['type'])) - { - $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['lang'])) - { - $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['start'])) - { - $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['end'])) - { - $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['data'])) - { - $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $captions[] = new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text); - } - if (is_array($captions)) - { - $captions = array_values(SimplePie_Misc::array_unique($captions)); - } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'])) - { - foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption) - { - $caption_type = null; - $caption_lang = null; - $caption_startTime = null; - $caption_endTime = null; - $caption_text = null; - if (isset($caption['attribs']['']['type'])) - { - $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['lang'])) - { - $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['start'])) - { - $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['end'])) - { - $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['data'])) - { - $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $captions[] = new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text); - } - if (is_array($captions)) - { - $captions = array_values(SimplePie_Misc::array_unique($captions)); - } - } - else - { - $captions = $captions_parent; - } - - // CATEGORIES - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'])) - { - foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category) - { - $term = null; - $scheme = null; - $label = null; - if (isset($category['data'])) - { - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['scheme'])) - { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $scheme = 'http://search.yahoo.com/mrss/category_schema'; - } - if (isset($category['attribs']['']['label'])) - { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories[] = new $this->feed->category_class($term, $scheme, $label); - } - } - if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'])) - { - foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category) - { - $term = null; - $scheme = null; - $label = null; - if (isset($category['data'])) - { - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['scheme'])) - { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $scheme = 'http://search.yahoo.com/mrss/category_schema'; - } - if (isset($category['attribs']['']['label'])) - { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories[] = new $this->feed->category_class($term, $scheme, $label); - } - } - if (is_array($categories) && is_array($categories_parent)) - { - $categories = array_values(SimplePie_Misc::array_unique(array_merge($categories, $categories_parent))); - } - elseif (is_array($categories)) - { - $categories = array_values(SimplePie_Misc::array_unique($categories)); - } - elseif (is_array($categories_parent)) - { - $categories = array_values(SimplePie_Misc::array_unique($categories_parent)); - } - - // COPYRIGHTS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'])) - { - $copyright_url = null; - $copyright_label = null; - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) - { - $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'])) - { - $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $copyrights = new $this->feed->copyright_class($copyright_url, $copyright_label); - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'])) - { - $copyright_url = null; - $copyright_label = null; - if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) - { - $copyright_url = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'])) - { - $copyright_label = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $copyrights = new $this->feed->copyright_class($copyright_url, $copyright_label); - } - else - { - $copyrights = $copyrights_parent; - } - - // CREDITS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit) - { - $credit_role = null; - $credit_scheme = null; - $credit_name = null; - if (isset($credit['attribs']['']['role'])) - { - $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($credit['attribs']['']['scheme'])) - { - $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $credit_scheme = 'urn:ebu'; - } - if (isset($credit['data'])) - { - $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $credits[] = new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name); - } - if (is_array($credits)) - { - $credits = array_values(SimplePie_Misc::array_unique($credits)); - } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'])) - { - foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit) - { - $credit_role = null; - $credit_scheme = null; - $credit_name = null; - if (isset($credit['attribs']['']['role'])) - { - $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($credit['attribs']['']['scheme'])) - { - $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $credit_scheme = 'urn:ebu'; - } - if (isset($credit['data'])) - { - $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $credits[] = new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name); - } - if (is_array($credits)) - { - $credits = array_values(SimplePie_Misc::array_unique($credits)); - } - } - else - { - $credits = $credits_parent; - } - - // DESCRIPTION - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'])) - { - $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'])) - { - $description = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $description = $description_parent; - } - - // HASHES - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash) - { - $value = null; - $algo = null; - if (isset($hash['data'])) - { - $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($hash['attribs']['']['algo'])) - { - $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $algo = 'md5'; - } - $hashes[] = $algo.':'.$value; - } - if (is_array($hashes)) - { - $hashes = array_values(SimplePie_Misc::array_unique($hashes)); - } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'])) - { - foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash) - { - $value = null; - $algo = null; - if (isset($hash['data'])) - { - $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($hash['attribs']['']['algo'])) - { - $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $algo = 'md5'; - } - $hashes[] = $algo.':'.$value; - } - if (is_array($hashes)) - { - $hashes = array_values(SimplePie_Misc::array_unique($hashes)); - } - } - else - { - $hashes = $hashes_parent; - } - - // KEYWORDS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'])) - { - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'])) - { - $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - foreach ($temp as $word) - { - $keywords[] = trim($word); - } - unset($temp); - } - if (is_array($keywords)) - { - $keywords = array_values(SimplePie_Misc::array_unique($keywords)); - } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'])) - { - if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'])) - { - $temp = explode(',', $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - foreach ($temp as $word) - { - $keywords[] = trim($word); - } - unset($temp); - } - if (is_array($keywords)) - { - $keywords = array_values(SimplePie_Misc::array_unique($keywords)); - } - } - else - { - $keywords = $keywords_parent; - } - - // PLAYER - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'])) - { - $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'])) - { - $player = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - else - { - $player = $player_parent; - } - - // RATINGS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating) - { - $rating_scheme = null; - $rating_value = null; - if (isset($rating['attribs']['']['scheme'])) - { - $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $rating_scheme = 'urn:simple'; - } - if (isset($rating['data'])) - { - $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $ratings[] = new $this->feed->rating_class($rating_scheme, $rating_value); - } - if (is_array($ratings)) - { - $ratings = array_values(SimplePie_Misc::array_unique($ratings)); - } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'])) - { - foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating) - { - $rating_scheme = null; - $rating_value = null; - if (isset($rating['attribs']['']['scheme'])) - { - $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $rating_scheme = 'urn:simple'; - } - if (isset($rating['data'])) - { - $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $ratings[] = new $this->feed->rating_class($rating_scheme, $rating_value); - } - if (is_array($ratings)) - { - $ratings = array_values(SimplePie_Misc::array_unique($ratings)); - } - } - else - { - $ratings = $ratings_parent; - } - - // RESTRICTIONS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction) - { - $restriction_relationship = null; - $restriction_type = null; - $restriction_value = null; - if (isset($restriction['attribs']['']['relationship'])) - { - $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['attribs']['']['type'])) - { - $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['data'])) - { - $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $restrictions[] = new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); - } - if (is_array($restrictions)) - { - $restrictions = array_values(SimplePie_Misc::array_unique($restrictions)); - } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'])) - { - foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction) - { - $restriction_relationship = null; - $restriction_type = null; - $restriction_value = null; - if (isset($restriction['attribs']['']['relationship'])) - { - $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['attribs']['']['type'])) - { - $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['data'])) - { - $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $restrictions[] = new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); - } - if (is_array($restrictions)) - { - $restrictions = array_values(SimplePie_Misc::array_unique($restrictions)); - } - } - else - { - $restrictions = $restrictions_parent; - } - - // THUMBNAILS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) - { - $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - if (is_array($thumbnails)) - { - $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails)); - } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'])) - { - foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) - { - $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - if (is_array($thumbnails)) - { - $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails)); - } - } - else - { - $thumbnails = $thumbnails_parent; - } - - // TITLES - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'])) - { - $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'])) - { - $title = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $title = $title_parent; - } - - $this->data['enclosures'][] = new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width); - } - } - } - } - - // If we have standalone media:content tags, loop through them. - if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'])) - { - foreach ((array) $this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content) - { - if (isset($content['attribs']['']['url'])) - { - // Attributes - $bitrate = null; - $channels = null; - $duration = null; - $expression = null; - $framerate = null; - $height = null; - $javascript = null; - $lang = null; - $length = null; - $medium = null; - $samplingrate = null; - $type = null; - $url = null; - $width = null; - - // Elements - $captions = null; - $categories = null; - $copyrights = null; - $credits = null; - $description = null; - $hashes = null; - $keywords = null; - $player = null; - $ratings = null; - $restrictions = null; - $thumbnails = null; - $title = null; - - // Start checking the attributes of media:content - if (isset($content['attribs']['']['bitrate'])) - { - $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['channels'])) - { - $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['duration'])) - { - $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $duration = $duration_parent; - } - if (isset($content['attribs']['']['expression'])) - { - $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['framerate'])) - { - $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['height'])) - { - $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['lang'])) - { - $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['fileSize'])) - { - $length = ceil($content['attribs']['']['fileSize']); - } - if (isset($content['attribs']['']['medium'])) - { - $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['samplingrate'])) - { - $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['type'])) - { - $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['width'])) - { - $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - - // Checking the other optional media: elements. Priority: media:content, media:group, item, channel - - // CAPTIONS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption) - { - $caption_type = null; - $caption_lang = null; - $caption_startTime = null; - $caption_endTime = null; - $caption_text = null; - if (isset($caption['attribs']['']['type'])) - { - $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['lang'])) - { - $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['start'])) - { - $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['end'])) - { - $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['data'])) - { - $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $captions[] = new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text); - } - if (is_array($captions)) - { - $captions = array_values(SimplePie_Misc::array_unique($captions)); - } - } - else - { - $captions = $captions_parent; - } - - // CATEGORIES - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'])) - { - foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category) - { - $term = null; - $scheme = null; - $label = null; - if (isset($category['data'])) - { - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['scheme'])) - { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $scheme = 'http://search.yahoo.com/mrss/category_schema'; - } - if (isset($category['attribs']['']['label'])) - { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories[] = new $this->feed->category_class($term, $scheme, $label); - } - } - if (is_array($categories) && is_array($categories_parent)) - { - $categories = array_values(SimplePie_Misc::array_unique(array_merge($categories, $categories_parent))); - } - elseif (is_array($categories)) - { - $categories = array_values(SimplePie_Misc::array_unique($categories)); - } - elseif (is_array($categories_parent)) - { - $categories = array_values(SimplePie_Misc::array_unique($categories_parent)); - } - else - { - $categories = null; - } - - // COPYRIGHTS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'])) - { - $copyright_url = null; - $copyright_label = null; - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) - { - $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'])) - { - $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $copyrights = new $this->feed->copyright_class($copyright_url, $copyright_label); - } - else - { - $copyrights = $copyrights_parent; - } - - // CREDITS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit) - { - $credit_role = null; - $credit_scheme = null; - $credit_name = null; - if (isset($credit['attribs']['']['role'])) - { - $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($credit['attribs']['']['scheme'])) - { - $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $credit_scheme = 'urn:ebu'; - } - if (isset($credit['data'])) - { - $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $credits[] = new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name); - } - if (is_array($credits)) - { - $credits = array_values(SimplePie_Misc::array_unique($credits)); - } - } - else - { - $credits = $credits_parent; - } - - // DESCRIPTION - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'])) - { - $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $description = $description_parent; - } - - // HASHES - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash) - { - $value = null; - $algo = null; - if (isset($hash['data'])) - { - $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($hash['attribs']['']['algo'])) - { - $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $algo = 'md5'; - } - $hashes[] = $algo.':'.$value; - } - if (is_array($hashes)) - { - $hashes = array_values(SimplePie_Misc::array_unique($hashes)); - } - } - else - { - $hashes = $hashes_parent; - } - - // KEYWORDS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'])) - { - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'])) - { - $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - foreach ($temp as $word) - { - $keywords[] = trim($word); - } - unset($temp); - } - if (is_array($keywords)) - { - $keywords = array_values(SimplePie_Misc::array_unique($keywords)); - } - } - else - { - $keywords = $keywords_parent; - } - - // PLAYER - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'])) - { - $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - else - { - $player = $player_parent; - } - - // RATINGS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating) - { - $rating_scheme = null; - $rating_value = null; - if (isset($rating['attribs']['']['scheme'])) - { - $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $rating_scheme = 'urn:simple'; - } - if (isset($rating['data'])) - { - $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $ratings[] = new $this->feed->rating_class($rating_scheme, $rating_value); - } - if (is_array($ratings)) - { - $ratings = array_values(SimplePie_Misc::array_unique($ratings)); - } - } - else - { - $ratings = $ratings_parent; - } - - // RESTRICTIONS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction) - { - $restriction_relationship = null; - $restriction_type = null; - $restriction_value = null; - if (isset($restriction['attribs']['']['relationship'])) - { - $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['attribs']['']['type'])) - { - $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($restriction['data'])) - { - $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $restrictions[] = new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); - } - if (is_array($restrictions)) - { - $restrictions = array_values(SimplePie_Misc::array_unique($restrictions)); - } - } - else - { - $restrictions = $restrictions_parent; - } - - // THUMBNAILS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) - { - $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - if (is_array($thumbnails)) - { - $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails)); - } - } - else - { - $thumbnails = $thumbnails_parent; - } - - // TITLES - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'])) - { - $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $title = $title_parent; - } - - $this->data['enclosures'][] = new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width); - } - } - } - - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link) - { - if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] === 'enclosure') - { - // Attributes - $bitrate = null; - $channels = null; - $duration = null; - $expression = null; - $framerate = null; - $height = null; - $javascript = null; - $lang = null; - $length = null; - $medium = null; - $samplingrate = null; - $type = null; - $url = null; - $width = null; - $title = $title_parent; - - $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); - if (isset($link['attribs']['']['type'])) - { - $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($link['attribs']['']['length'])) - { - $length = ceil($link['attribs']['']['length']); - } - if (isset($link['attribs']['']['title'])) - { - $title = $this->sanitize($link['attribs']['']['title'], SIMPLEPIE_CONSTRUCT_TEXT); - } - - // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor - $this->data['enclosures'][] = new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title, $width); - } - } - - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link) - { - if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] === 'enclosure') - { - // Attributes - $bitrate = null; - $channels = null; - $duration = null; - $expression = null; - $framerate = null; - $height = null; - $javascript = null; - $lang = null; - $length = null; - $medium = null; - $samplingrate = null; - $type = null; - $url = null; - $width = null; - - $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); - if (isset($link['attribs']['']['type'])) - { - $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($link['attribs']['']['length'])) - { - $length = ceil($link['attribs']['']['length']); - } - - // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor - $this->data['enclosures'][] = new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width); - } - } - - if ($enclosure = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'enclosure')) - { - if (isset($enclosure[0]['attribs']['']['url'])) - { - // Attributes - $bitrate = null; - $channels = null; - $duration = null; - $expression = null; - $framerate = null; - $height = null; - $javascript = null; - $lang = null; - $length = null; - $medium = null; - $samplingrate = null; - $type = null; - $url = null; - $width = null; - - $url = $this->sanitize($enclosure[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($enclosure[0])); - if (isset($enclosure[0]['attribs']['']['type'])) - { - $type = $this->sanitize($enclosure[0]['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($enclosure[0]['attribs']['']['length'])) - { - $length = ceil($enclosure[0]['attribs']['']['length']); - } - - // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor - $this->data['enclosures'][] = new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width); - } - } - - if (sizeof($this->data['enclosures']) === 0 && ($url || $type || $length || $bitrate || $captions_parent || $categories_parent || $channels || $copyrights_parent || $credits_parent || $description_parent || $duration_parent || $expression || $framerate || $hashes_parent || $height || $keywords_parent || $lang || $medium || $player_parent || $ratings_parent || $restrictions_parent || $samplingrate || $thumbnails_parent || $title_parent || $width)) - { - // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor - $this->data['enclosures'][] = new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width); - } - - $this->data['enclosures'] = array_values(SimplePie_Misc::array_unique($this->data['enclosures'])); - } - if (!empty($this->data['enclosures'])) - { - return $this->data['enclosures']; - } - else - { - return null; - } - } - - function get_latitude() - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat')) - { - return (float) $return[0]['data']; - } - elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) - { - return (float) $match[1]; - } - else - { - return null; - } - } - - function get_longitude() - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long')) - { - return (float) $return[0]['data']; - } - elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon')) - { - return (float) $return[0]['data']; - } - elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) - { - return (float) $match[2]; - } - else - { - return null; - } - } - - function get_source() - { - if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'source')) - { - return new $this->feed->source_class($this, $return[0]); - } - else - { - return null; - } - } - - /** - * Creates the add_to_* methods' return data - * - * @access private - * @param string $item_url String to prefix to the item permalink - * @param string $title_url String to prefix to the item title - * (and suffix to the item permalink) - * @return mixed URL if feed exists, false otherwise - */ - function add_to_service($item_url, $title_url = null, $summary_url = null) - { - if ($this->get_permalink() !== null) - { - $return = $item_url . rawurlencode($this->get_permalink()); - if ($title_url !== null && $this->get_title() !== null) - { - $return .= $title_url . rawurlencode($this->get_title()); - } - if ($summary_url !== null && $this->get_description() !== null) - { - $return .= $summary_url . rawurlencode($this->get_description()); - } - return $this->sanitize($return, SIMPLEPIE_CONSTRUCT_IRI); - } - else - { - return null; - } - } - - function add_to_blinklist() - { - return $this->add_to_service('http://www.blinklist.com/index.php?Action=Blink/addblink.php&Description=&Url=', '&Title='); - } - - function add_to_blogmarks() - { - return $this->add_to_service('http://blogmarks.net/my/new.php?mini=1&simple=1&url=', '&title='); - } - - function add_to_delicious() - { - return $this->add_to_service('http://del.icio.us/post/?v=4&url=', '&title='); - } - - function add_to_digg() - { - return $this->add_to_service('http://digg.com/submit?url=', '&title=', '&bodytext='); - } - - function add_to_furl() - { - return $this->add_to_service('http://www.furl.net/storeIt.jsp?u=', '&t='); - } - - function add_to_magnolia() - { - return $this->add_to_service('http://ma.gnolia.com/bookmarklet/add?url=', '&title='); - } - - function add_to_myweb20() - { - return $this->add_to_service('http://myweb2.search.yahoo.com/myresults/bookmarklet?u=', '&t='); - } - - function add_to_newsvine() - { - return $this->add_to_service('http://www.newsvine.com/_wine/save?u=', '&h='); - } - - function add_to_reddit() - { - return $this->add_to_service('http://reddit.com/submit?url=', '&title='); - } - - function add_to_segnalo() - { - return $this->add_to_service('http://segnalo.com/post.html.php?url=', '&title='); - } - - function add_to_simpy() - { - return $this->add_to_service('http://www.simpy.com/simpy/LinkAdd.do?href=', '&title='); - } - - function add_to_spurl() - { - return $this->add_to_service('http://www.spurl.net/spurl.php?v=3&url=', '&title='); - } - - function add_to_wists() - { - return $this->add_to_service('http://wists.com/r.php?c=&r=', '&title='); - } - - function search_technorati() - { - return $this->add_to_service('http://www.technorati.com/search/'); - } -} - -class SimplePie_Source -{ - var $item; - var $data = array(); - - function SimplePie_Source($item, $data) - { - $this->item = $item; - $this->data = $data; - } - - function __toString() - { - return md5(serialize($this->data)); - } - - function get_source_tags($namespace, $tag) - { - if (isset($this->data['child'][$namespace][$tag])) - { - return $this->data['child'][$namespace][$tag]; - } - else - { - return null; - } - } - - function get_base($element = array()) - { - return $this->item->get_base($element); - } - - function sanitize($data, $type, $base = '') - { - return $this->item->sanitize($data, $type, $base); - } - - function get_item() - { - return $this->item; - } - - function get_title() - { - if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - return null; - } - } - - function get_category($key = 0) - { - $categories = $this->get_categories(); - if (isset($categories[$key])) - { - return $categories[$key]; - } - else - { - return null; - } - } - - function get_categories() - { - $categories = array(); - - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category) - { - $term = null; - $scheme = null; - $label = null; - if (isset($category['attribs']['']['term'])) - { - $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['scheme'])) - { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['label'])) - { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories[] = new $this->item->feed->category_class($term, $scheme, $label); - } - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category) - { - // This is really the label, but keep this as the term also for BC. - // Label will also work on retrieving because that falls back to term. - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); - if (isset($category['attribs']['']['domain'])) - { - $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $scheme = null; - } - $categories[] = new $this->item->feed->category_class($term, $scheme, null); - } - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category) - { - $categories[] = new $this->item->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category) - { - $categories[] = new $this->item->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - - if (!empty($categories)) - { - return SimplePie_Misc::array_unique($categories); - } - else - { - return null; - } - } - - function get_author($key = 0) - { - $authors = $this->get_authors(); - if (isset($authors[$key])) - { - return $authors[$key]; - } - else - { - return null; - } - } - - function get_authors() - { - $authors = array(); - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author) - { - $name = null; - $uri = null; - $email = null; - $avatar = null; - $name_date = null; - $uri_date = null; - $avatar_date = null; - - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) - { - $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) - { - $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); - } - if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) - { - $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar'][0]['data'])) - { - $avatar = $this->sanitize($author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar'][0])); - } - if (isset($author['child']['http://purl.org/macgirvin/dfrn/1.0']['name-updated'][0]['data'])) - { - $name_date = $author['child']['http://purl.org/macgirvin/dfrn/1.0']['name-updated'][0]['data']; - } - if (isset($author['child']['http://purl.org/macgirvin/dfrn/1.0']['uri-updated'][0]['data'])) - { - $uri_date = $author['child']['http://purl.org/macgirvin/dfrn/1.0']['uri-updated'][0]['data']; - } - if (isset($author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar-updated'][0]['data'])) - { - $avatar_date = $author['child']['http://purl.org/macgirvin/dfrn/1.0']['avatar-updated'][0]['data']; - } - - if ($name !== null || $email !== null || $uri !== null || $avatar !== null || $name_date !== null || $uri_date !== null || $avatar_date !== null ) - { - $authors[] = new $this->item->feed->author_class($name, $uri, $email, $avatar, $name_date, $uri_date, $avatar_date); - } - } - if ($author = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author')) - { - $name = null; - $url = null; - $email = null; - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) - { - $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) - { - $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); - } - if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) - { - $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $url !== null) - { - $authors[] = new $this->item->feed->author_class($name, $url, $email); - } - } - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author) - { - $authors[] = new $this->item->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author) - { - $authors[] = new $this->item->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author) - { - $authors[] = new $this->item->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); - } - - if (!empty($authors)) - { - return SimplePie_Misc::array_unique($authors); - } - else - { - return null; - } - } - - function get_contributor($key = 0) - { - $contributors = $this->get_contributors(); - if (isset($contributors[$key])) - { - return $contributors[$key]; - } - else - { - return null; - } - } - - function get_contributors() - { - $contributors = array(); - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor) - { - $name = null; - $uri = null; - $email = null; - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) - { - $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) - { - $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) - { - $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $uri !== null) - { - $contributors[] = new $this->item->feed->author_class($name, $uri, $email); - } - } - foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor) - { - $name = null; - $url = null; - $email = null; - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) - { - $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) - { - $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); - } - if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) - { - $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if ($name !== null || $email !== null || $url !== null) - { - $contributors[] = new $this->item->feed->author_class($name, $url, $email); - } - } - - if (!empty($contributors)) - { - return SimplePie_Misc::array_unique($contributors); - } - else - { - return null; - } - } - - function get_link($key = 0, $rel = 'alternate') - { - $links = $this->get_links($rel); - if (isset($links[$key])) - { - return $links[$key]; - } - else - { - return null; - } - } - - /** - * Added for parity between the parent-level and the item/entry-level. - */ - function get_permalink() - { - return $this->get_link(0); - } - - function get_links($rel = 'alternate') - { - if (!isset($this->data['links'])) - { - $this->data['links'] = array(); - if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link')) - { - foreach ($links as $link) - { - if (isset($link['attribs']['']['href'])) - { - $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; - $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); - } - } - } - if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link')) - { - foreach ($links as $link) - { - if (isset($link['attribs']['']['href'])) - { - $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; - $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); - - } - } - } - if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link')) - { - $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); - } - - $keys = array_keys($this->data['links']); - foreach ($keys as $key) - { - if (SimplePie_Misc::is_isegment_nz_nc($key)) - { - if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key])) - { - $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]); - $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]; - } - else - { - $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key]; - } - } - elseif (substr($key, 0, 41) === SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY) - { - $this->data['links'][substr($key, 41)] =& $this->data['links'][$key]; - } - $this->data['links'][$key] = array_unique($this->data['links'][$key]); - } - } - - if (isset($this->data['links'][$rel])) - { - return $this->data['links'][$rel]; - } - else - { - return null; - } - } - - function get_description() - { - if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'subtitle')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'tagline')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); - } - else - { - return null; - } - } - - function get_copyright() - { - if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'copyright')) - { - return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'copyright')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - return null; - } - } - - function get_language() - { - if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'language')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'language')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'language')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (isset($this->data['xml_lang'])) - { - return $this->sanitize($this->data['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - return null; - } - } - - function get_latitude() - { - if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat')) - { - return (float) $return[0]['data']; - } - elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) - { - return (float) $match[1]; - } - else - { - return null; - } - } - - function get_longitude() - { - if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long')) - { - return (float) $return[0]['data']; - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon')) - { - return (float) $return[0]['data']; - } - elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) - { - return (float) $match[2]; - } - else - { - return null; - } - } - - function get_image_url() - { - if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'image')) - { - return $this->sanitize($return[0]['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'logo')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon')) - { - return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); - } - else - { - return null; - } - } -} - -class SimplePie_Author -{ - var $name; - var $link; - var $email; - var $avatar; - var $name_date; - var $uri_date; - var $avatar_date; - - // Constructor, used to input the data - function SimplePie_Author($name = null, $link = null, $email = null, $avatar = null, $name_date = null, $uri_date = null, $avatar_date = null) - { - $this->name = $name; - $this->link = $link; - $this->email = $email; - $this->avatar = $avatar; - $this->name_date = $name_date; - $this->uri_date = $uri_date; - $this->avatar_date = $avatar_date; - } - - function __toString() - { - // There is no $this->data here - return md5(serialize($this)); - } - - function get_name() - { - if ($this->name !== null) - { - return $this->name; - } - else - { - return null; - } - } - - function get_link() - { - if ($this->link !== null) - { - return $this->link; - } - else - { - return null; - } - } - - function get_email() - { - if ($this->email !== null) - { - return $this->email; - } - else - { - return null; - } - } - - function get_avatar() - { - if ($this->avatar !== null) - { - return $this->avatar; - } - else - { - return null; - } - } - - function get_name_date() - { - if ($this->name_date !== null) - { - return $this->name_date; - } - else - { - return null; - } - } - function get_uri_date() - { - if ($this->uri_date !== null) - { - return $this->uri_date; - } - else - { - return null; - } - } - function get_avatar_date() - { - if ($this->avatar_date !== null) - { - return $this->avatar_date; - } - else - { - return null; - } - } - - -} - -class SimplePie_Category -{ - var $term; - var $scheme; - var $label; - - // Constructor, used to input the data - function SimplePie_Category($term = null, $scheme = null, $label = null) - { - $this->term = $term; - $this->scheme = $scheme; - $this->label = $label; - } - - function __toString() - { - // There is no $this->data here - return md5(serialize($this)); - } - - function get_term() - { - if ($this->term !== null) - { - return $this->term; - } - else - { - return null; - } - } - - function get_scheme() - { - if ($this->scheme !== null) - { - return $this->scheme; - } - else - { - return null; - } - } - - function get_label() - { - if ($this->label !== null) - { - return $this->label; - } - else - { - return $this->get_term(); - } - } -} - -class SimplePie_Enclosure -{ - var $bitrate; - var $captions; - var $categories; - var $channels; - var $copyright; - var $credits; - var $description; - var $duration; - var $expression; - var $framerate; - var $handler; - var $hashes; - var $height; - var $javascript; - var $keywords; - var $lang; - var $length; - var $link; - var $medium; - var $player; - var $ratings; - var $restrictions; - var $samplingrate; - var $thumbnails; - var $title; - var $type; - var $width; - - // Constructor, used to input the data - function SimplePie_Enclosure($link = null, $type = null, $length = null, $javascript = null, $bitrate = null, $captions = null, $categories = null, $channels = null, $copyright = null, $credits = null, $description = null, $duration = null, $expression = null, $framerate = null, $hashes = null, $height = null, $keywords = null, $lang = null, $medium = null, $player = null, $ratings = null, $restrictions = null, $samplingrate = null, $thumbnails = null, $title = null, $width = null) - { - $this->bitrate = $bitrate; - $this->captions = $captions; - $this->categories = $categories; - $this->channels = $channels; - $this->copyright = $copyright; - $this->credits = $credits; - $this->description = $description; - $this->duration = $duration; - $this->expression = $expression; - $this->framerate = $framerate; - $this->hashes = $hashes; - $this->height = $height; - $this->javascript = $javascript; - $this->keywords = $keywords; - $this->lang = $lang; - $this->length = $length; - $this->link = $link; - $this->medium = $medium; - $this->player = $player; - $this->ratings = $ratings; - $this->restrictions = $restrictions; - $this->samplingrate = $samplingrate; - $this->thumbnails = $thumbnails; - $this->title = $title; - $this->type = $type; - $this->width = $width; - if (class_exists('idna_convert')) - { - $idn = new idna_convert; - $parsed = SimplePie_Misc::parse_url($link); - $this->link = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']); - } - $this->handler = $this->get_handler(); // Needs to load last - } - - function __toString() - { - // There is no $this->data here - return md5(serialize($this)); - } - - function get_bitrate() - { - if ($this->bitrate !== null) - { - return $this->bitrate; - } - else - { - return null; - } - } - - function get_caption($key = 0) - { - $captions = $this->get_captions(); - if (isset($captions[$key])) - { - return $captions[$key]; - } - else - { - return null; - } - } - - function get_captions() - { - if ($this->captions !== null) - { - return $this->captions; - } - else - { - return null; - } - } - - function get_category($key = 0) - { - $categories = $this->get_categories(); - if (isset($categories[$key])) - { - return $categories[$key]; - } - else - { - return null; - } - } - - function get_categories() - { - if ($this->categories !== null) - { - return $this->categories; - } - else - { - return null; - } - } - - function get_channels() - { - if ($this->channels !== null) - { - return $this->channels; - } - else - { - return null; - } - } - - function get_copyright() - { - if ($this->copyright !== null) - { - return $this->copyright; - } - else - { - return null; - } - } - - function get_credit($key = 0) - { - $credits = $this->get_credits(); - if (isset($credits[$key])) - { - return $credits[$key]; - } - else - { - return null; - } - } - - function get_credits() - { - if ($this->credits !== null) - { - return $this->credits; - } - else - { - return null; - } - } - - function get_description() - { - if ($this->description !== null) - { - return $this->description; - } - else - { - return null; - } - } - - function get_duration($convert = false) - { - if ($this->duration !== null) - { - if ($convert) - { - $time = SimplePie_Misc::time_hms($this->duration); - return $time; - } - else - { - return $this->duration; - } - } - else - { - return null; - } - } - - function get_expression() - { - if ($this->expression !== null) - { - return $this->expression; - } - else - { - return 'full'; - } - } - - function get_extension() - { - if ($this->link !== null) - { - $url = SimplePie_Misc::parse_url($this->link); - if ($url['path'] !== '') - { - return pathinfo($url['path'], PATHINFO_EXTENSION); - } - } - return null; - } - - function get_framerate() - { - if ($this->framerate !== null) - { - return $this->framerate; - } - else - { - return null; - } - } - - function get_handler() - { - return $this->get_real_type(true); - } - - function get_hash($key = 0) - { - $hashes = $this->get_hashes(); - if (isset($hashes[$key])) - { - return $hashes[$key]; - } - else - { - return null; - } - } - - function get_hashes() - { - if ($this->hashes !== null) - { - return $this->hashes; - } - else - { - return null; - } - } - - function get_height() - { - if ($this->height !== null) - { - return $this->height; - } - else - { - return null; - } - } - - function get_language() - { - if ($this->lang !== null) - { - return $this->lang; - } - else - { - return null; - } - } - - function get_keyword($key = 0) - { - $keywords = $this->get_keywords(); - if (isset($keywords[$key])) - { - return $keywords[$key]; - } - else - { - return null; - } - } - - function get_keywords() - { - if ($this->keywords !== null) - { - return $this->keywords; - } - else - { - return null; - } - } - - function get_length() - { - if ($this->length !== null) - { - return $this->length; - } - else - { - return null; - } - } - - function get_link() - { - if ($this->link !== null) - { - return urldecode($this->link); - } - else - { - return null; - } - } - - function get_medium() - { - if ($this->medium !== null) - { - return $this->medium; - } - else - { - return null; - } - } - - function get_player() - { - if ($this->player !== null) - { - return $this->player; - } - else - { - return null; - } - } - - function get_rating($key = 0) - { - $ratings = $this->get_ratings(); - if (isset($ratings[$key])) - { - return $ratings[$key]; - } - else - { - return null; - } - } - - function get_ratings() - { - if ($this->ratings !== null) - { - return $this->ratings; - } - else - { - return null; - } - } - - function get_restriction($key = 0) - { - $restrictions = $this->get_restrictions(); - if (isset($restrictions[$key])) - { - return $restrictions[$key]; - } - else - { - return null; - } - } - - function get_restrictions() - { - if ($this->restrictions !== null) - { - return $this->restrictions; - } - else - { - return null; - } - } - - function get_sampling_rate() - { - if ($this->samplingrate !== null) - { - return $this->samplingrate; - } - else - { - return null; - } - } - - function get_size() - { - $length = $this->get_length(); - if ($length !== null) - { - return round($length/1048576, 2); - } - else - { - return null; - } - } - - function get_thumbnail($key = 0) - { - $thumbnails = $this->get_thumbnails(); - if (isset($thumbnails[$key])) - { - return $thumbnails[$key]; - } - else - { - return null; - } - } - - function get_thumbnails() - { - if ($this->thumbnails !== null) - { - return $this->thumbnails; - } - else - { - return null; - } - } - - function get_title() - { - if ($this->title !== null) - { - return $this->title; - } - else - { - return null; - } - } - - function get_type() - { - if ($this->type !== null) - { - return $this->type; - } - else - { - return null; - } - } - - function get_width() - { - if ($this->width !== null) - { - return $this->width; - } - else - { - return null; - } - } - - function native_embed($options='') - { - return $this->embed($options, true); - } - - /** - * @todo If the dimensions for media:content are defined, use them when width/height are set to 'auto'. - */ - function embed($options = '', $native = false) - { - // Set up defaults - $audio = ''; - $video = ''; - $alt = ''; - $altclass = ''; - $loop = 'false'; - $width = 'auto'; - $height = 'auto'; - $bgcolor = '#ffffff'; - $mediaplayer = ''; - $widescreen = false; - $handler = $this->get_handler(); - $type = $this->get_real_type(); - - // Process options and reassign values as necessary - if (is_array($options)) - { - extract($options); - } - else - { - $options = explode(',', $options); - foreach($options as $option) - { - $opt = explode(':', $option, 2); - if (isset($opt[0], $opt[1])) - { - $opt[0] = trim($opt[0]); - $opt[1] = trim($opt[1]); - switch ($opt[0]) - { - case 'audio': - $audio = $opt[1]; - break; - - case 'video': - $video = $opt[1]; - break; - - case 'alt': - $alt = $opt[1]; - break; - - case 'altclass': - $altclass = $opt[1]; - break; - - case 'loop': - $loop = $opt[1]; - break; - - case 'width': - $width = $opt[1]; - break; - - case 'height': - $height = $opt[1]; - break; - - case 'bgcolor': - $bgcolor = $opt[1]; - break; - - case 'mediaplayer': - $mediaplayer = $opt[1]; - break; - - case 'widescreen': - $widescreen = $opt[1]; - break; - } - } - } - } - - $mime = explode('/', $type, 2); - $mime = $mime[0]; - - // Process values for 'auto' - if ($width === 'auto') - { - if ($mime === 'video') - { - if ($height === 'auto') - { - $width = 480; - } - elseif ($widescreen) - { - $width = round((intval($height)/9)*16); - } - else - { - $width = round((intval($height)/3)*4); - } - } - else - { - $width = '100%'; - } - } - - if ($height === 'auto') - { - if ($mime === 'audio') - { - $height = 0; - } - elseif ($mime === 'video') - { - if ($width === 'auto') - { - if ($widescreen) - { - $height = 270; - } - else - { - $height = 360; - } - } - elseif ($widescreen) - { - $height = round((intval($width)/16)*9); - } - else - { - $height = round((intval($width)/4)*3); - } - } - else - { - $height = 376; - } - } - elseif ($mime === 'audio') - { - $height = 0; - } - - // Set proper placeholder value - if ($mime === 'audio') - { - $placeholder = $audio; - } - elseif ($mime === 'video') - { - $placeholder = $video; - } - - $embed = ''; - - // Make sure the JS library is included - if (!$native) - { - static $javascript_outputted = null; - if (!$javascript_outputted && $this->javascript) - { - $embed .= ''; - $javascript_outputted = true; - } - } - - // Odeo Feed MP3's - if ($handler === 'odeo') - { - if ($native) - { - $embed .= ''; - } - else - { - $embed .= ''; - } - } - - // Flash - elseif ($handler === 'flash') - { - if ($native) - { - $embed .= "get_link() . "\" pluginspage=\"http://adobe.com/go/getflashplayer\" type=\"$type\" quality=\"high\" width=\"$width\" height=\"$height\" bgcolor=\"$bgcolor\" loop=\"$loop\">"; - } - else - { - $embed .= ""; - } - } - - // Flash Media Player file types. - // Preferred handler for MP3 file types. - elseif ($handler === 'fmedia' || ($handler === 'mp3' && $mediaplayer !== '')) - { - $height += 20; - if ($native) - { - $embed .= "get_link().'?file_extension=.'.$this->get_extension()) . "&autostart=false&repeat=$loop&showdigits=true&showfsbutton=false\">"; - } - else - { - $embed .= ""; - } - } - - // QuickTime 7 file types. Need to test with QuickTime 6. - // Only handle MP3's if the Flash Media Player is not present. - elseif ($handler === 'quicktime' || ($handler === 'mp3' && $mediaplayer === '')) - { - $height += 16; - if ($native) - { - if ($placeholder !== '') - { - $embed .= "get_link() . "\" src=\"$placeholder\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"false\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\">"; - } - else - { - $embed .= "get_link() . "\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"true\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\">"; - } - } - else - { - $embed .= ""; - } - } - - // Windows Media - elseif ($handler === 'wmedia') - { - $height += 45; - if ($native) - { - $embed .= "get_link() . "\" autosize=\"1\" width=\"$width\" height=\"$height\" showcontrols=\"1\" showstatusbar=\"0\" showdisplay=\"0\" autostart=\"0\">"; - } - else - { - $embed .= ""; - } - } - - // Everything else - else $embed .= '' . $alt . ''; - - return $embed; - } - - function get_real_type($find_handler = false) - { - // If it's Odeo, let's get it out of the way. - if (substr(strtolower($this->get_link()), 0, 15) === 'http://odeo.com') - { - return 'odeo'; - } - - // Mime-types by handler. - $types_flash = array('application/x-shockwave-flash', 'application/futuresplash'); // Flash - $types_fmedia = array('video/flv', 'video/x-flv','flv-application/octet-stream'); // Flash Media Player - $types_quicktime = array('audio/3gpp', 'audio/3gpp2', 'audio/aac', 'audio/x-aac', 'audio/aiff', 'audio/x-aiff', 'audio/mid', 'audio/midi', 'audio/x-midi', 'audio/mp4', 'audio/m4a', 'audio/x-m4a', 'audio/wav', 'audio/x-wav', 'video/3gpp', 'video/3gpp2', 'video/m4v', 'video/x-m4v', 'video/mp4', 'video/mpeg', 'video/x-mpeg', 'video/quicktime', 'video/sd-video'); // QuickTime - $types_wmedia = array('application/asx', 'application/x-mplayer2', 'audio/x-ms-wma', 'audio/x-ms-wax', 'video/x-ms-asf-plugin', 'video/x-ms-asf', 'video/x-ms-wm', 'video/x-ms-wmv', 'video/x-ms-wvx'); // Windows Media - $types_mp3 = array('audio/mp3', 'audio/x-mp3', 'audio/mpeg', 'audio/x-mpeg'); // MP3 - - if ($this->get_type() !== null) - { - $type = strtolower($this->type); - } - else - { - $type = null; - } - - // If we encounter an unsupported mime-type, check the file extension and guess intelligently. - if (!in_array($type, array_merge($types_flash, $types_fmedia, $types_quicktime, $types_wmedia, $types_mp3))) - { - switch (strtolower($this->get_extension())) - { - // Audio mime-types - case 'aac': - case 'adts': - $type = 'audio/acc'; - break; - - case 'aif': - case 'aifc': - case 'aiff': - case 'cdda': - $type = 'audio/aiff'; - break; - - case 'bwf': - $type = 'audio/wav'; - break; - - case 'kar': - case 'mid': - case 'midi': - case 'smf': - $type = 'audio/midi'; - break; - - case 'm4a': - $type = 'audio/x-m4a'; - break; - - case 'mp3': - case 'swa': - $type = 'audio/mp3'; - break; - - case 'wav': - $type = 'audio/wav'; - break; - - case 'wax': - $type = 'audio/x-ms-wax'; - break; - - case 'wma': - $type = 'audio/x-ms-wma'; - break; - - // Video mime-types - case '3gp': - case '3gpp': - $type = 'video/3gpp'; - break; - - case '3g2': - case '3gp2': - $type = 'video/3gpp2'; - break; - - case 'asf': - $type = 'video/x-ms-asf'; - break; - - case 'flv': - $type = 'video/x-flv'; - break; - - case 'm1a': - case 'm1s': - case 'm1v': - case 'm15': - case 'm75': - case 'mp2': - case 'mpa': - case 'mpeg': - case 'mpg': - case 'mpm': - case 'mpv': - $type = 'video/mpeg'; - break; - - case 'm4v': - $type = 'video/x-m4v'; - break; - - case 'mov': - case 'qt': - $type = 'video/quicktime'; - break; - - case 'mp4': - case 'mpg4': - $type = 'video/mp4'; - break; - - case 'sdv': - $type = 'video/sd-video'; - break; - - case 'wm': - $type = 'video/x-ms-wm'; - break; - - case 'wmv': - $type = 'video/x-ms-wmv'; - break; - - case 'wvx': - $type = 'video/x-ms-wvx'; - break; - - // Flash mime-types - case 'spl': - $type = 'application/futuresplash'; - break; - - case 'swf': - $type = 'application/x-shockwave-flash'; - break; - } - } - - if ($find_handler) - { - if (in_array($type, $types_flash)) - { - return 'flash'; - } - elseif (in_array($type, $types_fmedia)) - { - return 'fmedia'; - } - elseif (in_array($type, $types_quicktime)) - { - return 'quicktime'; - } - elseif (in_array($type, $types_wmedia)) - { - return 'wmedia'; - } - elseif (in_array($type, $types_mp3)) - { - return 'mp3'; - } - else - { - return null; - } - } - else - { - return $type; - } - } -} - -class SimplePie_Caption -{ - var $type; - var $lang; - var $startTime; - var $endTime; - var $text; - - // Constructor, used to input the data - function SimplePie_Caption($type = null, $lang = null, $startTime = null, $endTime = null, $text = null) - { - $this->type = $type; - $this->lang = $lang; - $this->startTime = $startTime; - $this->endTime = $endTime; - $this->text = $text; - } - - function __toString() - { - // There is no $this->data here - return md5(serialize($this)); - } - - function get_endtime() - { - if ($this->endTime !== null) - { - return $this->endTime; - } - else - { - return null; - } - } - - function get_language() - { - if ($this->lang !== null) - { - return $this->lang; - } - else - { - return null; - } - } - - function get_starttime() - { - if ($this->startTime !== null) - { - return $this->startTime; - } - else - { - return null; - } - } - - function get_text() - { - if ($this->text !== null) - { - return $this->text; - } - else - { - return null; - } - } - - function get_type() - { - if ($this->type !== null) - { - return $this->type; - } - else - { - return null; - } - } -} - -class SimplePie_Credit -{ - var $role; - var $scheme; - var $name; - - // Constructor, used to input the data - function SimplePie_Credit($role = null, $scheme = null, $name = null) - { - $this->role = $role; - $this->scheme = $scheme; - $this->name = $name; - } - - function __toString() - { - // There is no $this->data here - return md5(serialize($this)); - } - - function get_role() - { - if ($this->role !== null) - { - return $this->role; - } - else - { - return null; - } - } - - function get_scheme() - { - if ($this->scheme !== null) - { - return $this->scheme; - } - else - { - return null; - } - } - - function get_name() - { - if ($this->name !== null) - { - return $this->name; - } - else - { - return null; - } - } -} - -class SimplePie_Copyright -{ - var $url; - var $label; - - // Constructor, used to input the data - function SimplePie_Copyright($url = null, $label = null) - { - $this->url = $url; - $this->label = $label; - } - - function __toString() - { - // There is no $this->data here - return md5(serialize($this)); - } - - function get_url() - { - if ($this->url !== null) - { - return $this->url; - } - else - { - return null; - } - } - - function get_attribution() - { - if ($this->label !== null) - { - return $this->label; - } - else - { - return null; - } - } -} - -class SimplePie_Rating -{ - var $scheme; - var $value; - - // Constructor, used to input the data - function SimplePie_Rating($scheme = null, $value = null) - { - $this->scheme = $scheme; - $this->value = $value; - } - - function __toString() - { - // There is no $this->data here - return md5(serialize($this)); - } - - function get_scheme() - { - if ($this->scheme !== null) - { - return $this->scheme; - } - else - { - return null; - } - } - - function get_value() - { - if ($this->value !== null) - { - return $this->value; - } - else - { - return null; - } - } -} - -class SimplePie_Restriction -{ - var $relationship; - var $type; - var $value; - - // Constructor, used to input the data - function SimplePie_Restriction($relationship = null, $type = null, $value = null) - { - $this->relationship = $relationship; - $this->type = $type; - $this->value = $value; - } - - function __toString() - { - // There is no $this->data here - return md5(serialize($this)); - } - - function get_relationship() - { - if ($this->relationship !== null) - { - return $this->relationship; - } - else - { - return null; - } - } - - function get_type() - { - if ($this->type !== null) - { - return $this->type; - } - else - { - return null; - } - } - - function get_value() - { - if ($this->value !== null) - { - return $this->value; - } - else - { - return null; - } - } -} - -/** - * @todo Move to properly supporting RFC2616 (HTTP/1.1) - */ -class SimplePie_File -{ - var $url; - var $useragent; - var $success = true; - var $headers = array(); - var $body; - var $status_code; - var $redirects = 0; - var $error; - var $method = SIMPLEPIE_FILE_SOURCE_NONE; - - function SimplePie_File($url, $timeout = 10, $redirects = 5, $headers = null, $useragent = null, $force_fsockopen = false) - { - if (class_exists('idna_convert')) - { - $idn = new idna_convert; - $parsed = SimplePie_Misc::parse_url($url); - $url = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']); - } - $this->url = $url; - $this->useragent = $useragent; - if (preg_match('/^http(s)?:\/\//i', $url)) - { - if ($useragent === null) - { - $useragent = ini_get('user_agent'); - $this->useragent = $useragent; - } - if (!is_array($headers)) - { - $headers = array(); - } - if (!$force_fsockopen && function_exists('curl_exec')) - { - $this->method = SIMPLEPIE_FILE_SOURCE_REMOTE | SIMPLEPIE_FILE_SOURCE_CURL; - $fp = curl_init(); - $headers2 = array(); - foreach ($headers as $key => $value) - { - $headers2[] = "$key: $value"; - } - if (version_compare(SimplePie_Misc::get_curl_version(), '7.10.5', '>=')) - { - curl_setopt($fp, CURLOPT_ENCODING, ''); - } - curl_setopt($fp, CURLOPT_URL, $url); - curl_setopt($fp, CURLOPT_HEADER, 1); - curl_setopt($fp, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($fp, CURLOPT_TIMEOUT, $timeout); - curl_setopt($fp, CURLOPT_CONNECTTIMEOUT, $timeout); - curl_setopt($fp, CURLOPT_REFERER, $url); - curl_setopt($fp, CURLOPT_USERAGENT, $useragent); - curl_setopt($fp, CURLOPT_HTTPHEADER, $headers2); - if (!ini_get('open_basedir') && !ini_get('safe_mode') && version_compare(SimplePie_Misc::get_curl_version(), '7.15.2', '>=')) - { - curl_setopt($fp, CURLOPT_FOLLOWLOCATION, 1); - curl_setopt($fp, CURLOPT_MAXREDIRS, $redirects); - } - - $this->headers = curl_exec($fp); - if (curl_errno($fp) === 23 || curl_errno($fp) === 61) - { - curl_setopt($fp, CURLOPT_ENCODING, 'none'); - $this->headers = curl_exec($fp); - } - if (curl_errno($fp)) - { - $this->error = 'cURL error ' . curl_errno($fp) . ': ' . curl_error($fp); - $this->success = false; - } - else - { - $info = curl_getinfo($fp); - curl_close($fp); - $this->headers = explode("\r\n\r\n", $this->headers, $info['redirect_count'] + 1); - $this->headers = array_pop($this->headers); - $parser = new SimplePie_HTTP_Parser($this->headers); - if ($parser->parse()) - { - $this->headers = $parser->headers; - $this->body = $parser->body; - $this->status_code = $parser->status_code; - if ((in_array($this->status_code, array(300, 301, 302, 303, 307)) || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects) - { - $this->redirects++; - $location = SimplePie_Misc::absolutize_url($this->headers['location'], $url); - return $this->SimplePie_File($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen); - } - } - } - } - else - { - $this->method = SIMPLEPIE_FILE_SOURCE_REMOTE | SIMPLEPIE_FILE_SOURCE_FSOCKOPEN; - $url_parts = parse_url($url); - if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) === 'https') - { - $url_parts['host'] = "ssl://$url_parts[host]"; - $url_parts['port'] = 443; - } - if (!isset($url_parts['port'])) - { - $url_parts['port'] = 80; - } - $fp = @fsockopen($url_parts['host'], $url_parts['port'], $errno, $errstr, $timeout); - if (!$fp) - { - $this->error = 'fsockopen error: ' . $errstr; - $this->success = false; - } - else - { - stream_set_timeout($fp, $timeout); - if (isset($url_parts['path'])) - { - if (isset($url_parts['query'])) - { - $get = "$url_parts[path]?$url_parts[query]"; - } - else - { - $get = $url_parts['path']; - } - } - else - { - $get = '/'; - } - $out = "GET $get HTTP/1.0\r\n"; - $out .= "Host: $url_parts[host]\r\n"; - $out .= "User-Agent: $useragent\r\n"; - if (extension_loaded('zlib')) - { - $out .= "Accept-Encoding: x-gzip,gzip,deflate\r\n"; - } - - if (isset($url_parts['user']) && isset($url_parts['pass'])) - { - $out .= "Authorization: Basic " . base64_encode("$url_parts[user]:$url_parts[pass]") . "\r\n"; - } - foreach ($headers as $key => $value) - { - $out .= "$key: $value\r\n"; - } - $out .= "Connection: Close\r\n\r\n"; - fwrite($fp, $out); - - $info = stream_get_meta_data($fp); - - $this->headers = ''; - while (!$info['eof'] && !$info['timed_out']) - { - $this->headers .= fread($fp, 1160); - $info = stream_get_meta_data($fp); - } - if (!$info['timed_out']) - { - $parser = new SimplePie_HTTP_Parser($this->headers); - if ($parser->parse()) - { - $this->headers = $parser->headers; - $this->body = $parser->body; - $this->status_code = $parser->status_code; - if ((in_array($this->status_code, array(300, 301, 302, 303, 307)) || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects) - { - $this->redirects++; - $location = SimplePie_Misc::absolutize_url($this->headers['location'], $url); - return $this->SimplePie_File($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen); - } - if (isset($this->headers['content-encoding'])) - { - // Hey, we act dumb elsewhere, so let's do that here too - switch (strtolower(trim($this->headers['content-encoding'], "\x09\x0A\x0D\x20"))) - { - case 'gzip': - case 'x-gzip': - $decoder = new SimplePie_gzdecode($this->body); - if (!$decoder->parse()) - { - $this->error = 'Unable to decode HTTP "gzip" stream'; - $this->success = false; - } - else - { - $this->body = $decoder->data; - } - break; - - case 'deflate': - if (($body = gzuncompress($this->body)) === false) - { - if (($body = gzinflate($this->body)) === false) - { - $this->error = 'Unable to decode HTTP "deflate" stream'; - $this->success = false; - } - } - $this->body = $body; - break; - - default: - $this->error = 'Unknown content coding'; - $this->success = false; - } - } - } - } - else - { - $this->error = 'fsocket timed out'; - $this->success = false; - } - fclose($fp); - } - } - } - else - { - $this->method = SIMPLEPIE_FILE_SOURCE_LOCAL | SIMPLEPIE_FILE_SOURCE_FILE_GET_CONTENTS; - if (!$this->body = file_get_contents($url)) - { - $this->error = 'file_get_contents could not read the file'; - $this->success = false; - } - } - } -} - -/** - * HTTP Response Parser - * - * @package SimplePie - */ -class SimplePie_HTTP_Parser -{ - /** - * HTTP Version - * - * @access public - * @var float - */ - var $http_version = 0.0; - - /** - * Status code - * - * @access public - * @var int - */ - var $status_code = 0; - - /** - * Reason phrase - * - * @access public - * @var string - */ - var $reason = ''; - - /** - * Key/value pairs of the headers - * - * @access public - * @var array - */ - var $headers = array(); - - /** - * Body of the response - * - * @access public - * @var string - */ - var $body = ''; - - /** - * Current state of the state machine - * - * @access private - * @var string - */ - var $state = 'http_version'; - - /** - * Input data - * - * @access private - * @var string - */ - var $data = ''; - - /** - * Input data length (to avoid calling strlen() everytime this is needed) - * - * @access private - * @var int - */ - var $data_length = 0; - - /** - * Current position of the pointer - * - * @var int - * @access private - */ - var $position = 0; - - /** - * Name of the hedaer currently being parsed - * - * @access private - * @var string - */ - var $name = ''; - - /** - * Value of the hedaer currently being parsed - * - * @access private - * @var string - */ - var $value = ''; - - /** - * Create an instance of the class with the input data - * - * @access public - * @param string $data Input data - */ - function SimplePie_HTTP_Parser($data) - { - $this->data = $data; - $this->data_length = strlen($this->data); - } - - /** - * Parse the input data - * - * @access public - * @return bool true on success, false on failure - */ - function parse() - { - while ($this->state && $this->state !== 'emit' && $this->has_data()) - { - $state = $this->state; - $this->$state(); - } - $this->data = ''; - if ($this->state === 'emit' || $this->state === 'body') - { - return true; - } - else - { - $this->http_version = ''; - $this->status_code = ''; - $this->reason = ''; - $this->headers = array(); - $this->body = ''; - return false; - } - } - - /** - * Check whether there is data beyond the pointer - * - * @access private - * @return bool true if there is further data, false if not - */ - function has_data() - { - return (bool) ($this->position < $this->data_length); - } - - /** - * See if the next character is LWS - * - * @access private - * @return bool true if the next character is LWS, false if not - */ - function is_linear_whitespace() - { - return (bool) ($this->data[$this->position] === "\x09" - || $this->data[$this->position] === "\x20" - || ($this->data[$this->position] === "\x0A" - && isset($this->data[$this->position + 1]) - && ($this->data[$this->position + 1] === "\x09" || $this->data[$this->position + 1] === "\x20"))); - } - - /** - * Parse the HTTP version - * - * @access private - */ - function http_version() - { - if (strpos($this->data, "\x0A") !== false && strtoupper(substr($this->data, 0, 5)) === 'HTTP/') - { - $len = strspn($this->data, '0123456789.', 5); - $this->http_version = substr($this->data, 5, $len); - $this->position += 5 + $len; - if (substr_count($this->http_version, '.') <= 1) - { - $this->http_version = (float) $this->http_version; - $this->position += strspn($this->data, "\x09\x20", $this->position); - $this->state = 'status'; - } - else - { - $this->state = false; - } - } - else - { - $this->state = false; - } - } - - /** - * Parse the status code - * - * @access private - */ - function status() - { - if ($len = strspn($this->data, '0123456789', $this->position)) - { - $this->status_code = (int) substr($this->data, $this->position, $len); - $this->position += $len; - $this->state = 'reason'; - } - else - { - $this->state = false; - } - } - - /** - * Parse the reason phrase - * - * @access private - */ - function reason() - { - $len = strcspn($this->data, "\x0A", $this->position); - $this->reason = trim(substr($this->data, $this->position, $len), "\x09\x0D\x20"); - $this->position += $len + 1; - $this->state = 'new_line'; - } - - /** - * Deal with a new line, shifting data around as needed - * - * @access private - */ - function new_line() - { - $this->value = trim($this->value, "\x0D\x20"); - if ($this->name !== '' && $this->value !== '') - { - $this->name = strtolower($this->name); - if (isset($this->headers[$this->name])) - { - $this->headers[$this->name] .= ', ' . $this->value; - } - else - { - $this->headers[$this->name] = $this->value; - } - } - $this->name = ''; - $this->value = ''; - if (substr($this->data[$this->position], 0, 2) === "\x0D\x0A") - { - $this->position += 2; - $this->state = 'body'; - } - elseif ($this->data[$this->position] === "\x0A") - { - $this->position++; - $this->state = 'body'; - } - else - { - $this->state = 'name'; - } - } - - /** - * Parse a header name - * - * @access private - */ - function name() - { - $len = strcspn($this->data, "\x0A:", $this->position); - if (isset($this->data[$this->position + $len])) - { - if ($this->data[$this->position + $len] === "\x0A") - { - $this->position += $len; - $this->state = 'new_line'; - } - else - { - $this->name = substr($this->data, $this->position, $len); - $this->position += $len + 1; - $this->state = 'value'; - } - } - else - { - $this->state = false; - } - } - - /** - * Parse LWS, replacing consecutive LWS characters with a single space - * - * @access private - */ - function linear_whitespace() - { - do - { - if (substr($this->data, $this->position, 2) === "\x0D\x0A") - { - $this->position += 2; - } - elseif ($this->data[$this->position] === "\x0A") - { - $this->position++; - } - $this->position += strspn($this->data, "\x09\x20", $this->position); - } while ($this->has_data() && $this->is_linear_whitespace()); - $this->value .= "\x20"; - } - - /** - * See what state to move to while within non-quoted header values - * - * @access private - */ - function value() - { - if ($this->is_linear_whitespace()) - { - $this->linear_whitespace(); - } - else - { - switch ($this->data[$this->position]) - { - case '"': - $this->position++; - $this->state = 'quote'; - break; - - case "\x0A": - $this->position++; - $this->state = 'new_line'; - break; - - default: - $this->state = 'value_char'; - break; - } - } - } - - /** - * Parse a header value while outside quotes - * - * @access private - */ - function value_char() - { - $len = strcspn($this->data, "\x09\x20\x0A\"", $this->position); - $this->value .= substr($this->data, $this->position, $len); - $this->position += $len; - $this->state = 'value'; - } - - /** - * See what state to move to while within quoted header values - * - * @access private - */ - function quote() - { - if ($this->is_linear_whitespace()) - { - $this->linear_whitespace(); - } - else - { - switch ($this->data[$this->position]) - { - case '"': - $this->position++; - $this->state = 'value'; - break; - - case "\x0A": - $this->position++; - $this->state = 'new_line'; - break; - - case '\\': - $this->position++; - $this->state = 'quote_escaped'; - break; - - default: - $this->state = 'quote_char'; - break; - } - } - } - - /** - * Parse a header value while within quotes - * - * @access private - */ - function quote_char() - { - $len = strcspn($this->data, "\x09\x20\x0A\"\\", $this->position); - $this->value .= substr($this->data, $this->position, $len); - $this->position += $len; - $this->state = 'value'; - } - - /** - * Parse an escaped character within quotes - * - * @access private - */ - function quote_escaped() - { - $this->value .= $this->data[$this->position]; - $this->position++; - $this->state = 'quote'; - } - - /** - * Parse the body - * - * @access private - */ - function body() - { - $this->body = substr($this->data, $this->position); - $this->state = 'emit'; - } -} - -/** - * gzdecode - * - * @package SimplePie - */ -class SimplePie_gzdecode -{ - /** - * Compressed data - * - * @access private - * @see gzdecode::$data - */ - var $compressed_data; - - /** - * Size of compressed data - * - * @access private - */ - var $compressed_size; - - /** - * Minimum size of a valid gzip string - * - * @access private - */ - var $min_compressed_size = 18; - - /** - * Current position of pointer - * - * @access private - */ - var $position = 0; - - /** - * Flags (FLG) - * - * @access private - */ - var $flags; - - /** - * Uncompressed data - * - * @access public - * @see gzdecode::$compressed_data - */ - var $data; - - /** - * Modified time - * - * @access public - */ - var $MTIME; - - /** - * Extra Flags - * - * @access public - */ - var $XFL; - - /** - * Operating System - * - * @access public - */ - var $OS; - - /** - * Subfield ID 1 - * - * @access public - * @see gzdecode::$extra_field - * @see gzdecode::$SI2 - */ - var $SI1; - - /** - * Subfield ID 2 - * - * @access public - * @see gzdecode::$extra_field - * @see gzdecode::$SI1 - */ - var $SI2; - - /** - * Extra field content - * - * @access public - * @see gzdecode::$SI1 - * @see gzdecode::$SI2 - */ - var $extra_field; - - /** - * Original filename - * - * @access public - */ - var $filename; - - /** - * Human readable comment - * - * @access public - */ - var $comment; - - /** - * Don't allow anything to be set - * - * @access public - */ - function __set($name, $value) - { - trigger_error("Cannot write property $name", E_USER_ERROR); - } - - /** - * Set the compressed string and related properties - * - * @access public - */ - function SimplePie_gzdecode($data) - { - $this->compressed_data = $data; - $this->compressed_size = strlen($data); - } - - /** - * Decode the GZIP stream - * - * @access public - */ - function parse() - { - if ($this->compressed_size >= $this->min_compressed_size) - { - // Check ID1, ID2, and CM - if (substr($this->compressed_data, 0, 3) !== "\x1F\x8B\x08") - { - return false; - } - - // Get the FLG (FLaGs) - $this->flags = ord($this->compressed_data[3]); - - // FLG bits above (1 << 4) are reserved - if ($this->flags > 0x1F) - { - return false; - } - - // Advance the pointer after the above - $this->position += 4; - - // MTIME - $mtime = substr($this->compressed_data, $this->position, 4); - // Reverse the string if we're on a big-endian arch because l is the only signed long and is machine endianness - if (current(unpack('S', "\x00\x01")) === 1) - { - $mtime = strrev($mtime); - } - $this->MTIME = current(unpack('l', $mtime)); - $this->position += 4; - - // Get the XFL (eXtra FLags) - $this->XFL = ord($this->compressed_data[$this->position++]); - - // Get the OS (Operating System) - $this->OS = ord($this->compressed_data[$this->position++]); - - // Parse the FEXTRA - if ($this->flags & 4) - { - // Read subfield IDs - $this->SI1 = $this->compressed_data[$this->position++]; - $this->SI2 = $this->compressed_data[$this->position++]; - - // SI2 set to zero is reserved for future use - if ($this->SI2 === "\x00") - { - return false; - } - - // Get the length of the extra field - $len = current(unpack('v', substr($this->compressed_data, $this->position, 2))); - $position += 2; - - // Check the length of the string is still valid - $this->min_compressed_size += $len + 4; - if ($this->compressed_size >= $this->min_compressed_size) - { - // Set the extra field to the given data - $this->extra_field = substr($this->compressed_data, $this->position, $len); - $this->position += $len; - } - else - { - return false; - } - } - - // Parse the FNAME - if ($this->flags & 8) - { - // Get the length of the filename - $len = strcspn($this->compressed_data, "\x00", $this->position); - - // Check the length of the string is still valid - $this->min_compressed_size += $len + 1; - if ($this->compressed_size >= $this->min_compressed_size) - { - // Set the original filename to the given string - $this->filename = substr($this->compressed_data, $this->position, $len); - $this->position += $len + 1; - } - else - { - return false; - } - } - - // Parse the FCOMMENT - if ($this->flags & 16) - { - // Get the length of the comment - $len = strcspn($this->compressed_data, "\x00", $this->position); - - // Check the length of the string is still valid - $this->min_compressed_size += $len + 1; - if ($this->compressed_size >= $this->min_compressed_size) - { - // Set the original comment to the given string - $this->comment = substr($this->compressed_data, $this->position, $len); - $this->position += $len + 1; - } - else - { - return false; - } - } - - // Parse the FHCRC - if ($this->flags & 2) - { - // Check the length of the string is still valid - $this->min_compressed_size += $len + 2; - if ($this->compressed_size >= $this->min_compressed_size) - { - // Read the CRC - $crc = current(unpack('v', substr($this->compressed_data, $this->position, 2))); - - // Check the CRC matches - if ((crc32(substr($this->compressed_data, 0, $this->position)) & 0xFFFF) === $crc) - { - $this->position += 2; - } - else - { - return false; - } - } - else - { - return false; - } - } - - // Decompress the actual data - if (($this->data = gzinflate(substr($this->compressed_data, $this->position, -8))) === false) - { - return false; - } - else - { - $this->position = $this->compressed_size - 8; - } - - // Check CRC of data - $crc = current(unpack('V', substr($this->compressed_data, $this->position, 4))); - $this->position += 4; - /*if (extension_loaded('hash') && sprintf('%u', current(unpack('V', hash('crc32b', $this->data)))) !== sprintf('%u', $crc)) - { - return false; - }*/ - - // Check ISIZE of data - $isize = current(unpack('V', substr($this->compressed_data, $this->position, 4))); - $this->position += 4; - if (sprintf('%u', strlen($this->data) & 0xFFFFFFFF) !== sprintf('%u', $isize)) - { - return false; - } - - // Wow, against all odds, we've actually got a valid gzip string - return true; - } - else - { - return false; - } - } -} - -class SimplePie_Cache -{ - /** - * Don't call the constructor. Please. - * - * @access private - */ - function SimplePie_Cache() - { - trigger_error('Please call SimplePie_Cache::create() instead of the constructor', E_USER_ERROR); - } - - /** - * Create a new SimplePie_Cache object - * - * @static - * @access public - */ - function create($location, $filename, $extension) - { - $location_iri = new SimplePie_IRI($location); - switch ($location_iri->get_scheme()) - { - case 'mysql': - if (extension_loaded('mysql')) - { - return new SimplePie_Cache_MySQL($location_iri, $filename, $extension); - } - break; - - default: - return new SimplePie_Cache_File($location, $filename, $extension); - } - } -} - -class SimplePie_Cache_File -{ - var $location; - var $filename; - var $extension; - var $name; - - function SimplePie_Cache_File($location, $filename, $extension) - { - $this->location = $location; - $this->filename = $filename; - $this->extension = $extension; - $this->name = "$this->location/$this->filename.$this->extension"; - } - - function save($data) - { - if (file_exists($this->name) && is_writeable($this->name) || file_exists($this->location) && is_writeable($this->location)) - { - if (is_a($data, 'SimplePie')) - { - $data = $data->data; - } - - $data = serialize($data); - - if (function_exists('file_put_contents')) - { - return (bool) file_put_contents($this->name, $data); - } - else - { - $fp = fopen($this->name, 'wb'); - if ($fp) - { - fwrite($fp, $data); - fclose($fp); - return true; - } - } - } - return false; - } - - function load() - { - if (file_exists($this->name) && is_readable($this->name)) - { - return unserialize(file_get_contents($this->name)); - } - return false; - } - - function mtime() - { - if (file_exists($this->name)) - { - return filemtime($this->name); - } - return false; - } - - function touch() - { - if (file_exists($this->name)) - { - return touch($this->name); - } - return false; - } - - function unlink() - { - if (file_exists($this->name)) - { - return unlink($this->name); - } - return false; - } -} - -class SimplePie_Cache_DB -{ - function prepare_simplepie_object_for_cache($data) - { - $items = $data->get_items(); - $items_by_id = array(); - - if (!empty($items)) - { - foreach ($items as $item) - { - $items_by_id[$item->get_id()] = $item; - } - - if (count($items_by_id) !== count($items)) - { - $items_by_id = array(); - foreach ($items as $item) - { - $items_by_id[$item->get_id(true)] = $item; - } - } - - if (isset($data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0])) - { - $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]; - } - elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0])) - { - $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]; - } - elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0])) - { - $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]; - } - elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['channel'][0])) - { - $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['channel'][0]; - } - else - { - $channel = null; - } - - if ($channel !== null) - { - if (isset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['entry'])) - { - unset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['entry']); - } - if (isset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['entry'])) - { - unset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['entry']); - } - if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item'])) - { - unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item']); - } - if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item'])) - { - unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item']); - } - if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_20]['item'])) - { - unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_20]['item']); - } - } - if (isset($data->data['items'])) - { - unset($data->data['items']); - } - if (isset($data->data['ordered_items'])) - { - unset($data->data['ordered_items']); - } - } - return array(serialize($data->data), $items_by_id); - } -} - -class SimplePie_Cache_MySQL extends SimplePie_Cache_DB -{ - var $mysql; - var $options; - var $id; - - function SimplePie_Cache_MySQL($mysql_location, $name, $extension) - { - $host = $mysql_location->get_host(); - if (SimplePie_Misc::stripos($host, 'unix(') === 0 && substr($host, -1) === ')') - { - $server = ':' . substr($host, 5, -1); - } - else - { - $server = $host; - if ($mysql_location->get_port() !== null) - { - $server .= ':' . $mysql_location->get_port(); - } - } - - if (strpos($mysql_location->get_userinfo(), ':') !== false) - { - list($username, $password) = explode(':', $mysql_location->get_userinfo(), 2); - } - else - { - $username = $mysql_location->get_userinfo(); - $password = null; - } - - if ($this->mysql = mysql_connect($server, $username, $password)) - { - $this->id = $name . $extension; - $this->options = SimplePie_Misc::parse_str($mysql_location->get_query()); - if (!isset($this->options['prefix'][0])) - { - $this->options['prefix'][0] = ''; - } - - if (mysql_select_db(ltrim($mysql_location->get_path(), '/')) - && mysql_query('SET NAMES utf8') - && ($query = mysql_unbuffered_query('SHOW TABLES'))) - { - $db = array(); - while ($row = mysql_fetch_row($query)) - { - $db[] = $row[0]; - } - - if (!in_array($this->options['prefix'][0] . 'cache_data', $db)) - { - if (!mysql_query('CREATE TABLE `' . $this->options['prefix'][0] . 'cache_data` (`id` TEXT CHARACTER SET utf8 NOT NULL, `items` SMALLINT NOT NULL DEFAULT 0, `data` BLOB NOT NULL, `mtime` INT UNSIGNED NOT NULL, UNIQUE (`id`(125)))')) - { - $this->mysql = null; - } - } - - if (!in_array($this->options['prefix'][0] . 'items', $db)) - { - if (!mysql_query('CREATE TABLE `' . $this->options['prefix'][0] . 'items` (`feed_id` TEXT CHARACTER SET utf8 NOT NULL, `id` TEXT CHARACTER SET utf8 NOT NULL, `data` TEXT CHARACTER SET utf8 NOT NULL, `posted` INT UNSIGNED NOT NULL, INDEX `feed_id` (`feed_id`(125)))')) - { - $this->mysql = null; - } - } - } - else - { - $this->mysql = null; - } - } - } - - function save($data) - { - if ($this->mysql) - { - $feed_id = "'" . mysql_real_escape_string($this->id) . "'"; - - if (is_a($data, 'SimplePie')) - { - if (SIMPLEPIE_PHP5) - { - // This keyword needs to defy coding standards for PHP4 compatibility - $data = clone($data); - } - - $prepared = $this->prepare_simplepie_object_for_cache($data); - - if ($query = mysql_query('SELECT `id` FROM `' . $this->options['prefix'][0] . 'cache_data` WHERE `id` = ' . $feed_id, $this->mysql)) - { - if (mysql_num_rows($query)) - { - $items = count($prepared[1]); - if ($items) - { - $sql = 'UPDATE `' . $this->options['prefix'][0] . 'cache_data` SET `items` = ' . $items . ', `data` = \'' . mysql_real_escape_string($prepared[0]) . '\', `mtime` = ' . time() . ' WHERE `id` = ' . $feed_id; - } - else - { - $sql = 'UPDATE `' . $this->options['prefix'][0] . 'cache_data` SET `data` = \'' . mysql_real_escape_string($prepared[0]) . '\', `mtime` = ' . time() . ' WHERE `id` = ' . $feed_id; - } - - if (!mysql_query($sql, $this->mysql)) - { - return false; - } - } - elseif (!mysql_query('INSERT INTO `' . $this->options['prefix'][0] . 'cache_data` (`id`, `items`, `data`, `mtime`) VALUES(' . $feed_id . ', ' . count($prepared[1]) . ', \'' . mysql_real_escape_string($prepared[0]) . '\', ' . time() . ')', $this->mysql)) - { - return false; - } - - $ids = array_keys($prepared[1]); - if (!empty($ids)) - { - foreach ($ids as $id) - { - $database_ids[] = mysql_real_escape_string($id); - } - - if ($query = mysql_unbuffered_query('SELECT `id` FROM `' . $this->options['prefix'][0] . 'items` WHERE `id` = \'' . implode('\' OR `id` = \'', $database_ids) . '\' AND `feed_id` = ' . $feed_id, $this->mysql)) - { - $existing_ids = array(); - while ($row = mysql_fetch_row($query)) - { - $existing_ids[] = $row[0]; - } - - $new_ids = array_diff($ids, $existing_ids); - - foreach ($new_ids as $new_id) - { - if (!($date = $prepared[1][$new_id]->get_date('U'))) - { - $date = time(); - } - - if (!mysql_query('INSERT INTO `' . $this->options['prefix'][0] . 'items` (`feed_id`, `id`, `data`, `posted`) VALUES(' . $feed_id . ', \'' . mysql_real_escape_string($new_id) . '\', \'' . mysql_real_escape_string(serialize($prepared[1][$new_id]->data)) . '\', ' . $date . ')', $this->mysql)) - { - return false; - } - } - return true; - } - } - else - { - return true; - } - } - } - elseif ($query = mysql_query('SELECT `id` FROM `' . $this->options['prefix'][0] . 'cache_data` WHERE `id` = ' . $feed_id, $this->mysql)) - { - if (mysql_num_rows($query)) - { - if (mysql_query('UPDATE `' . $this->options['prefix'][0] . 'cache_data` SET `items` = 0, `data` = \'' . mysql_real_escape_string(serialize($data)) . '\', `mtime` = ' . time() . ' WHERE `id` = ' . $feed_id, $this->mysql)) - { - return true; - } - } - elseif (mysql_query('INSERT INTO `' . $this->options['prefix'][0] . 'cache_data` (`id`, `items`, `data`, `mtime`) VALUES(\'' . mysql_real_escape_string($this->id) . '\', 0, \'' . mysql_real_escape_string(serialize($data)) . '\', ' . time() . ')', $this->mysql)) - { - return true; - } - } - } - return false; - } - - function load() - { - if ($this->mysql && ($query = mysql_query('SELECT `items`, `data` FROM `' . $this->options['prefix'][0] . 'cache_data` WHERE `id` = \'' . mysql_real_escape_string($this->id) . "'", $this->mysql)) && ($row = mysql_fetch_row($query))) - { - $data = unserialize($row[1]); - - if (isset($this->options['items'][0])) - { - $items = (int) $this->options['items'][0]; - } - else - { - $items = (int) $row[0]; - } - - if ($items !== 0) - { - if (isset($data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0])) - { - $feed =& $data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]; - } - elseif (isset($data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0])) - { - $feed =& $data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]; - } - elseif (isset($data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0])) - { - $feed =& $data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]; - } - elseif (isset($data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0])) - { - $feed =& $data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]; - } - else - { - $feed = null; - } - - if ($feed !== null) - { - $sql = 'SELECT `data` FROM `' . $this->options['prefix'][0] . 'items` WHERE `feed_id` = \'' . mysql_real_escape_string($this->id) . '\' ORDER BY `posted` DESC'; - if ($items > 0) - { - $sql .= ' LIMIT ' . $items; - } - - if ($query = mysql_unbuffered_query($sql, $this->mysql)) - { - while ($row = mysql_fetch_row($query)) - { - $feed['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['entry'][] = unserialize($row[0]); - } - } - else - { - return false; - } - } - } - return $data; - } - return false; - } - - function mtime() - { - if ($this->mysql && ($query = mysql_query('SELECT `mtime` FROM `' . $this->options['prefix'][0] . 'cache_data` WHERE `id` = \'' . mysql_real_escape_string($this->id) . "'", $this->mysql)) && ($row = mysql_fetch_row($query))) - { - return $row[0]; - } - else - { - return false; - } - } - - function touch() - { - if ($this->mysql && ($query = mysql_query('UPDATE `' . $this->options['prefix'][0] . 'cache_data` SET `mtime` = ' . time() . ' WHERE `id` = \'' . mysql_real_escape_string($this->id) . "'", $this->mysql)) && mysql_affected_rows($this->mysql)) - { - return true; - } - else - { - return false; - } - } - - function unlink() - { - if ($this->mysql && ($query = mysql_query('DELETE FROM `' . $this->options['prefix'][0] . 'cache_data` WHERE `id` = \'' . mysql_real_escape_string($this->id) . "'", $this->mysql)) && ($query2 = mysql_query('DELETE FROM `' . $this->options['prefix'][0] . 'items` WHERE `feed_id` = \'' . mysql_real_escape_string($this->id) . "'", $this->mysql))) - { - return true; - } - else - { - return false; - } - } -} - -class SimplePie_Misc -{ - function time_hms($seconds) - { - $time = ''; - - $hours = floor($seconds / 3600); - $remainder = $seconds % 3600; - if ($hours > 0) - { - $time .= $hours.':'; - } - - $minutes = floor($remainder / 60); - $seconds = $remainder % 60; - if ($minutes < 10 && $hours > 0) - { - $minutes = '0' . $minutes; - } - if ($seconds < 10) - { - $seconds = '0' . $seconds; - } - - $time .= $minutes.':'; - $time .= $seconds; - - return $time; - } - - function absolutize_url($relative, $base) - { -return $relative; - $iri = SimplePie_IRI::absolutize(new SimplePie_IRI($base), $relative); - return $iri->get_iri(); - } - - function remove_dot_segments($input) - { - $output = ''; - while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input === '.' || $input === '..') - { - // A: If the input buffer begins with a prefix of "../" or "./", then remove that prefix from the input buffer; otherwise, - if (strpos($input, '../') === 0) - { - $input = substr($input, 3); - } - elseif (strpos($input, './') === 0) - { - $input = substr($input, 2); - } - // B: if the input buffer begins with a prefix of "/./" or "/.", where "." is a complete path segment, then replace that prefix with "/" in the input buffer; otherwise, - elseif (strpos($input, '/./') === 0) - { - $input = substr_replace($input, '/', 0, 3); - } - elseif ($input === '/.') - { - $input = '/'; - } - // C: if the input buffer begins with a prefix of "/../" or "/..", where ".." is a complete path segment, then replace that prefix with "/" in the input buffer and remove the last segment and its preceding "/" (if any) from the output buffer; otherwise, - elseif (strpos($input, '/../') === 0) - { - $input = substr_replace($input, '/', 0, 4); - $output = substr_replace($output, '', strrpos($output, '/')); - } - elseif ($input === '/..') - { - $input = '/'; - $output = substr_replace($output, '', strrpos($output, '/')); - } - // D: if the input buffer consists only of "." or "..", then remove that from the input buffer; otherwise, - elseif ($input === '.' || $input === '..') - { - $input = ''; - } - // E: move the first path segment in the input buffer to the end of the output buffer, including the initial "/" character (if any) and any subsequent characters up to, but not including, the next "/" character or the end of the input buffer - elseif (($pos = strpos($input, '/', 1)) !== false) - { - $output .= substr($input, 0, $pos); - $input = substr_replace($input, '', 0, $pos); - } - else - { - $output .= $input; - $input = ''; - } - } - return $output . $input; - } - - function get_element($realname, $string) - { - $return = array(); - $name = preg_quote($realname, '/'); - if (preg_match_all("/<($name)" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . "(>(.*)<\/$name>|(\/)?>)/siU", $string, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE)) - { - for ($i = 0, $total_matches = count($matches); $i < $total_matches; $i++) - { - $return[$i]['tag'] = $realname; - $return[$i]['full'] = $matches[$i][0][0]; - $return[$i]['offset'] = $matches[$i][0][1]; - if (strlen($matches[$i][3][0]) <= 2) - { - $return[$i]['self_closing'] = true; - } - else - { - $return[$i]['self_closing'] = false; - $return[$i]['content'] = $matches[$i][4][0]; - } - $return[$i]['attribs'] = array(); - if (isset($matches[$i][2][0]) && preg_match_all('/[\x09\x0A\x0B\x0C\x0D\x20]+([^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3D\x3E]*)(?:[\x09\x0A\x0B\x0C\x0D\x20]*=[\x09\x0A\x0B\x0C\x0D\x20]*(?:"([^"]*)"|\'([^\']*)\'|([^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?/', ' ' . $matches[$i][2][0] . ' ', $attribs, PREG_SET_ORDER)) - { - for ($j = 0, $total_attribs = count($attribs); $j < $total_attribs; $j++) - { - if (count($attribs[$j]) === 2) - { - $attribs[$j][2] = $attribs[$j][1]; - } - $return[$i]['attribs'][strtolower($attribs[$j][1])]['data'] = SimplePie_Misc::entities_decode(end($attribs[$j]), 'UTF-8'); - } - } - } - } - return $return; - } - - function element_implode($element) - { - $full = "<$element[tag]"; - foreach ($element['attribs'] as $key => $value) - { - $key = strtolower($key); - $full .= " $key=\"" . htmlspecialchars($value['data']) . '"'; - } - if ($element['self_closing']) - { - $full .= ' />'; - } - else - { - $full .= ">$element[content]"; - } - return $full; - } - - function error($message, $level, $file, $line) - { - if ((ini_get('error_reporting') & $level) > 0) - { - switch ($level) - { - case E_USER_ERROR: - $note = 'PHP Error'; - break; - case E_USER_WARNING: - $note = 'PHP Warning'; - break; - case E_USER_NOTICE: - $note = 'PHP Notice'; - break; - default: - $note = 'Unknown Error'; - break; - } - - $log_error = true; - if (!function_exists('error_log')) - { - $log_error = false; - } - - $log_file = @ini_get('error_log'); - if (!empty($log_file) && ('syslog' != $log_file) && !@is_writable($log_file)) - { - $log_error = false; - } - - if ($log_error) - { - @error_log("$note: $message in $file on line $line", 0); - } - } - - return $message; - } - - /** - * If a file has been cached, retrieve and display it. - * - * This is most useful for caching images (get_favicon(), etc.), - * however it works for all cached files. This WILL NOT display ANY - * file/image/page/whatever, but rather only display what has already - * been cached by SimplePie. - * - * @access public - * @see SimplePie::get_favicon() - * @param str $identifier_url URL that is used to identify the content. - * This may or may not be the actual URL of the live content. - * @param str $cache_location Location of SimplePie's cache. Defaults - * to './cache'. - * @param str $cache_extension The file extension that the file was - * cached with. Defaults to 'spc'. - * @param str $cache_class Name of the cache-handling class being used - * in SimplePie. Defaults to 'SimplePie_Cache', and should be left - * as-is unless you've overloaded the class. - * @param str $cache_name_function Obsolete. Exists for backwards - * compatibility reasons only. - */ - function display_cached_file($identifier_url, $cache_location = './cache', $cache_extension = 'spc', $cache_class = 'SimplePie_Cache', $cache_name_function = 'md5') - { - $cache = call_user_func(array($cache_class, 'create'), $cache_location, $identifier_url, $cache_extension); - - if ($file = $cache->load()) - { - if (isset($file['headers']['content-type'])) - { - header('Content-type:' . $file['headers']['content-type']); - } - else - { - header('Content-type: application/octet-stream'); - } - header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days - echo $file['body']; - exit; - } - - die('Cached file for ' . $identifier_url . ' cannot be found.'); - } - - function fix_protocol($url, $http = 1) - { - $url = SimplePie_Misc::normalize_url($url); - $parsed = SimplePie_Misc::parse_url($url); - if ($parsed['scheme'] !== '' && $parsed['scheme'] !== 'http' && $parsed['scheme'] !== 'https') - { - return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['authority'], $parsed['path'], $parsed['query'], $parsed['fragment']), $http); - } - - if ($parsed['scheme'] === '' && $parsed['authority'] === '' && !file_exists($url)) - { - return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['path'], '', $parsed['query'], $parsed['fragment']), $http); - } - - if ($http === 2 && $parsed['scheme'] !== '') - { - return "feed:$url"; - } - elseif ($http === 3 && strtolower($parsed['scheme']) === 'http') - { - return substr_replace($url, 'podcast', 0, 4); - } - elseif ($http === 4 && strtolower($parsed['scheme']) === 'http') - { - return substr_replace($url, 'itpc', 0, 4); - } - else - { - return $url; - } - } - - function parse_url($url) - { - $iri = new SimplePie_IRI($url); - return array( - 'scheme' => (string) $iri->get_scheme(), - 'authority' => (string) $iri->get_authority(), - 'path' => (string) $iri->get_path(), - 'query' => (string) $iri->get_query(), - 'fragment' => (string) $iri->get_fragment() - ); - } - - function compress_parse_url($scheme = '', $authority = '', $path = '', $query = '', $fragment = '') - { - $iri = new SimplePie_IRI(''); - $iri->set_scheme($scheme); - $iri->set_authority($authority); - $iri->set_path($path); - $iri->set_query($query); - $iri->set_fragment($fragment); - return $iri->get_iri(); - } - - function normalize_url($url) - { - $iri = new SimplePie_IRI($url); - return $iri->get_iri(); - } - - function percent_encoding_normalization($match) - { - $integer = hexdec($match[1]); - if ($integer >= 0x41 && $integer <= 0x5A || $integer >= 0x61 && $integer <= 0x7A || $integer >= 0x30 && $integer <= 0x39 || $integer === 0x2D || $integer === 0x2E || $integer === 0x5F || $integer === 0x7E) - { - return chr($integer); - } - else - { - return strtoupper($match[0]); - } - } - - /** - * Remove bad UTF-8 bytes - * - * PCRE Pattern to locate bad bytes in a UTF-8 string comes from W3C - * FAQ: Multilingual Forms (modified to include full ASCII range) - * - * @author Geoffrey Sneddon - * @see http://www.w3.org/International/questions/qa-forms-utf-8 - * @param string $str String to remove bad UTF-8 bytes from - * @return string UTF-8 string - */ - function utf8_bad_replace($str) - { - if (function_exists('iconv') && ($return = @iconv('UTF-8', 'UTF-8//IGNORE', $str))) - { - return $return; - } - elseif (function_exists('mb_convert_encoding') && ($return = @mb_convert_encoding($str, 'UTF-8', 'UTF-8'))) - { - return $return; - } - elseif (preg_match_all('/(?:[\x00-\x7F]|[\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF]{2}|[\xF1-\xF3][\x80-\xBF]{3}|\xF4[\x80-\x8F][\x80-\xBF]{2})+/', $str, $matches)) - { - return implode("\xEF\xBF\xBD", $matches[0]); - } - elseif ($str !== '') - { - return "\xEF\xBF\xBD"; - } - else - { - return ''; - } - } - - /** - * Converts a Windows-1252 encoded string to a UTF-8 encoded string - * - * @static - * @access public - * @param string $string Windows-1252 encoded string - * @return string UTF-8 encoded string - */ - function windows_1252_to_utf8($string) - { - static $convert_table = array("\x80" => "\xE2\x82\xAC", "\x81" => "\xEF\xBF\xBD", "\x82" => "\xE2\x80\x9A", "\x83" => "\xC6\x92", "\x84" => "\xE2\x80\x9E", "\x85" => "\xE2\x80\xA6", "\x86" => "\xE2\x80\xA0", "\x87" => "\xE2\x80\xA1", "\x88" => "\xCB\x86", "\x89" => "\xE2\x80\xB0", "\x8A" => "\xC5\xA0", "\x8B" => "\xE2\x80\xB9", "\x8C" => "\xC5\x92", "\x8D" => "\xEF\xBF\xBD", "\x8E" => "\xC5\xBD", "\x8F" => "\xEF\xBF\xBD", "\x90" => "\xEF\xBF\xBD", "\x91" => "\xE2\x80\x98", "\x92" => "\xE2\x80\x99", "\x93" => "\xE2\x80\x9C", "\x94" => "\xE2\x80\x9D", "\x95" => "\xE2\x80\xA2", "\x96" => "\xE2\x80\x93", "\x97" => "\xE2\x80\x94", "\x98" => "\xCB\x9C", "\x99" => "\xE2\x84\xA2", "\x9A" => "\xC5\xA1", "\x9B" => "\xE2\x80\xBA", "\x9C" => "\xC5\x93", "\x9D" => "\xEF\xBF\xBD", "\x9E" => "\xC5\xBE", "\x9F" => "\xC5\xB8", "\xA0" => "\xC2\xA0", "\xA1" => "\xC2\xA1", "\xA2" => "\xC2\xA2", "\xA3" => "\xC2\xA3", "\xA4" => "\xC2\xA4", "\xA5" => "\xC2\xA5", "\xA6" => "\xC2\xA6", "\xA7" => "\xC2\xA7", "\xA8" => "\xC2\xA8", "\xA9" => "\xC2\xA9", "\xAA" => "\xC2\xAA", "\xAB" => "\xC2\xAB", "\xAC" => "\xC2\xAC", "\xAD" => "\xC2\xAD", "\xAE" => "\xC2\xAE", "\xAF" => "\xC2\xAF", "\xB0" => "\xC2\xB0", "\xB1" => "\xC2\xB1", "\xB2" => "\xC2\xB2", "\xB3" => "\xC2\xB3", "\xB4" => "\xC2\xB4", "\xB5" => "\xC2\xB5", "\xB6" => "\xC2\xB6", "\xB7" => "\xC2\xB7", "\xB8" => "\xC2\xB8", "\xB9" => "\xC2\xB9", "\xBA" => "\xC2\xBA", "\xBB" => "\xC2\xBB", "\xBC" => "\xC2\xBC", "\xBD" => "\xC2\xBD", "\xBE" => "\xC2\xBE", "\xBF" => "\xC2\xBF", "\xC0" => "\xC3\x80", "\xC1" => "\xC3\x81", "\xC2" => "\xC3\x82", "\xC3" => "\xC3\x83", "\xC4" => "\xC3\x84", "\xC5" => "\xC3\x85", "\xC6" => "\xC3\x86", "\xC7" => "\xC3\x87", "\xC8" => "\xC3\x88", "\xC9" => "\xC3\x89", "\xCA" => "\xC3\x8A", "\xCB" => "\xC3\x8B", "\xCC" => "\xC3\x8C", "\xCD" => "\xC3\x8D", "\xCE" => "\xC3\x8E", "\xCF" => "\xC3\x8F", "\xD0" => "\xC3\x90", "\xD1" => "\xC3\x91", "\xD2" => "\xC3\x92", "\xD3" => "\xC3\x93", "\xD4" => "\xC3\x94", "\xD5" => "\xC3\x95", "\xD6" => "\xC3\x96", "\xD7" => "\xC3\x97", "\xD8" => "\xC3\x98", "\xD9" => "\xC3\x99", "\xDA" => "\xC3\x9A", "\xDB" => "\xC3\x9B", "\xDC" => "\xC3\x9C", "\xDD" => "\xC3\x9D", "\xDE" => "\xC3\x9E", "\xDF" => "\xC3\x9F", "\xE0" => "\xC3\xA0", "\xE1" => "\xC3\xA1", "\xE2" => "\xC3\xA2", "\xE3" => "\xC3\xA3", "\xE4" => "\xC3\xA4", "\xE5" => "\xC3\xA5", "\xE6" => "\xC3\xA6", "\xE7" => "\xC3\xA7", "\xE8" => "\xC3\xA8", "\xE9" => "\xC3\xA9", "\xEA" => "\xC3\xAA", "\xEB" => "\xC3\xAB", "\xEC" => "\xC3\xAC", "\xED" => "\xC3\xAD", "\xEE" => "\xC3\xAE", "\xEF" => "\xC3\xAF", "\xF0" => "\xC3\xB0", "\xF1" => "\xC3\xB1", "\xF2" => "\xC3\xB2", "\xF3" => "\xC3\xB3", "\xF4" => "\xC3\xB4", "\xF5" => "\xC3\xB5", "\xF6" => "\xC3\xB6", "\xF7" => "\xC3\xB7", "\xF8" => "\xC3\xB8", "\xF9" => "\xC3\xB9", "\xFA" => "\xC3\xBA", "\xFB" => "\xC3\xBB", "\xFC" => "\xC3\xBC", "\xFD" => "\xC3\xBD", "\xFE" => "\xC3\xBE", "\xFF" => "\xC3\xBF"); - - return strtr($string, $convert_table); - } - - function change_encoding($data, $input, $output) - { - $input = SimplePie_Misc::encoding($input); - $output = SimplePie_Misc::encoding($output); - - // We fail to fail on non US-ASCII bytes - if ($input === 'US-ASCII') - { - static $non_ascii_octects = ''; - if (!$non_ascii_octects) - { - for ($i = 0x80; $i <= 0xFF; $i++) - { - $non_ascii_octects .= chr($i); - } - } - $data = substr($data, 0, strcspn($data, $non_ascii_octects)); - } - - // This is first, as behaviour of this is completely predictable - if ($input === 'Windows-1252' && $output === 'UTF-8') - { - return SimplePie_Misc::windows_1252_to_utf8($data); - } - // This is second, as behaviour of this varies only with PHP version (the middle part of this expression checks the encoding is supported). - elseif (function_exists('mb_convert_encoding') && @mb_convert_encoding("\x80", 'UTF-16BE', $input) !== "\x00\x80" && ($return = @mb_convert_encoding($data, $output, $input))) - { - return $return; - } - // This is last, as behaviour of this varies with OS userland and PHP version - elseif (function_exists('iconv') && ($return = @iconv($input, $output, $data))) - { - return $return; - } - // If we can't do anything, just fail - else - { - return false; - } - } - - function encoding($charset) - { - // Normalization from UTS #22 - switch (strtolower(preg_replace('/(?:[^a-zA-Z0-9]+|([^0-9])0+)/', '\1', $charset))) - { - case 'adobestandardencoding': - case 'csadobestandardencoding': - return 'Adobe-Standard-Encoding'; - - case 'adobesymbolencoding': - case 'cshppsmath': - return 'Adobe-Symbol-Encoding'; - - case 'ami1251': - case 'amiga1251': - return 'Amiga-1251'; - - case 'ansix31101983': - case 'csat5001983': - case 'csiso99naplps': - case 'isoir99': - case 'naplps': - return 'ANSI_X3.110-1983'; - - case 'arabic7': - case 'asmo449': - case 'csiso89asmo449': - case 'iso9036': - case 'isoir89': - return 'ASMO_449'; - - case 'big5': - case 'csbig5': - case 'xxbig5': - return 'Big5'; - - case 'big5hkscs': - return 'Big5-HKSCS'; - - case 'bocu1': - case 'csbocu1': - return 'BOCU-1'; - - case 'brf': - case 'csbrf': - return 'BRF'; - - case 'bs4730': - case 'csiso4unitedkingdom': - case 'gb': - case 'iso646gb': - case 'isoir4': - case 'uk': - return 'BS_4730'; - - case 'bsviewdata': - case 'csiso47bsviewdata': - case 'isoir47': - return 'BS_viewdata'; - - case 'cesu8': - case 'cscesu8': - return 'CESU-8'; - - case 'ca': - case 'csa71': - case 'csaz243419851': - case 'csiso121canadian1': - case 'iso646ca': - case 'isoir121': - return 'CSA_Z243.4-1985-1'; - - case 'csa72': - case 'csaz243419852': - case 'csiso122canadian2': - case 'iso646ca2': - case 'isoir122': - return 'CSA_Z243.4-1985-2'; - - case 'csaz24341985gr': - case 'csiso123csaz24341985gr': - case 'isoir123': - return 'CSA_Z243.4-1985-gr'; - - case 'csiso139csn369103': - case 'csn369103': - case 'isoir139': - return 'CSN_369103'; - - case 'csdecmcs': - case 'dec': - case 'decmcs': - return 'DEC-MCS'; - - case 'csiso21german': - case 'de': - case 'din66003': - case 'iso646de': - case 'isoir21': - return 'DIN_66003'; - - case 'csdkus': - case 'dkus': - return 'dk-us'; - - case 'csiso646danish': - case 'dk': - case 'ds2089': - case 'iso646dk': - return 'DS_2089'; - - case 'csibmebcdicatde': - case 'ebcdicatde': - return 'EBCDIC-AT-DE'; - - case 'csebcdicatdea': - case 'ebcdicatdea': - return 'EBCDIC-AT-DE-A'; - - case 'csebcdiccafr': - case 'ebcdiccafr': - return 'EBCDIC-CA-FR'; - - case 'csebcdicdkno': - case 'ebcdicdkno': - return 'EBCDIC-DK-NO'; - - case 'csebcdicdknoa': - case 'ebcdicdknoa': - return 'EBCDIC-DK-NO-A'; - - case 'csebcdices': - case 'ebcdices': - return 'EBCDIC-ES'; - - case 'csebcdicesa': - case 'ebcdicesa': - return 'EBCDIC-ES-A'; - - case 'csebcdicess': - case 'ebcdicess': - return 'EBCDIC-ES-S'; - - case 'csebcdicfise': - case 'ebcdicfise': - return 'EBCDIC-FI-SE'; - - case 'csebcdicfisea': - case 'ebcdicfisea': - return 'EBCDIC-FI-SE-A'; - - case 'csebcdicfr': - case 'ebcdicfr': - return 'EBCDIC-FR'; - - case 'csebcdicit': - case 'ebcdicit': - return 'EBCDIC-IT'; - - case 'csebcdicpt': - case 'ebcdicpt': - return 'EBCDIC-PT'; - - case 'csebcdicuk': - case 'ebcdicuk': - return 'EBCDIC-UK'; - - case 'csebcdicus': - case 'ebcdicus': - return 'EBCDIC-US'; - - case 'csiso111ecmacyrillic': - case 'ecmacyrillic': - case 'isoir111': - case 'koi8e': - return 'ECMA-cyrillic'; - - case 'csiso17spanish': - case 'es': - case 'iso646es': - case 'isoir17': - return 'ES'; - - case 'csiso85spanish2': - case 'es2': - case 'iso646es2': - case 'isoir85': - return 'ES2'; - - case 'cseucfixwidjapanese': - case 'extendedunixcodefixedwidthforjapanese': - return 'Extended_UNIX_Code_Fixed_Width_for_Japanese'; - - case 'cseucpkdfmtjapanese': - case 'eucjp': - case 'extendedunixcodepackedformatforjapanese': - return 'Extended_UNIX_Code_Packed_Format_for_Japanese'; - - case 'gb18030': - return 'GB18030'; - - case 'chinese': - case 'cp936': - case 'csgb2312': - case 'csiso58gb231280': - case 'gb2312': - case 'gb231280': - case 'gbk': - case 'isoir58': - case 'ms936': - case 'windows936': - return 'GBK'; - - case 'cn': - case 'csiso57gb1988': - case 'gb198880': - case 'iso646cn': - case 'isoir57': - return 'GB_1988-80'; - - case 'csiso153gost1976874': - case 'gost1976874': - case 'isoir153': - case 'stsev35888': - return 'GOST_19768-74'; - - case 'csiso150': - case 'csiso150greekccitt': - case 'greekccitt': - case 'isoir150': - return 'greek-ccitt'; - - case 'csiso88greek7': - case 'greek7': - case 'isoir88': - return 'greek7'; - - case 'csiso18greek7old': - case 'greek7old': - case 'isoir18': - return 'greek7-old'; - - case 'cshpdesktop': - case 'hpdesktop': - return 'HP-DeskTop'; - - case 'cshplegal': - case 'hplegal': - return 'HP-Legal'; - - case 'cshpmath8': - case 'hpmath8': - return 'HP-Math8'; - - case 'cshppifont': - case 'hppifont': - return 'HP-Pi-font'; - - case 'cshproman8': - case 'hproman8': - case 'r8': - case 'roman8': - return 'hp-roman8'; - - case 'hzgb2312': - return 'HZ-GB-2312'; - - case 'csibmsymbols': - case 'ibmsymbols': - return 'IBM-Symbols'; - - case 'csibmthai': - case 'ibmthai': - return 'IBM-Thai'; - - case 'ccsid858': - case 'cp858': - case 'ibm858': - case 'pcmultilingual850euro': - return 'IBM00858'; - - case 'ccsid924': - case 'cp924': - case 'ebcdiclatin9euro': - case 'ibm924': - return 'IBM00924'; - - case 'ccsid1140': - case 'cp1140': - case 'ebcdicus37euro': - case 'ibm1140': - return 'IBM01140'; - - case 'ccsid1141': - case 'cp1141': - case 'ebcdicde273euro': - case 'ibm1141': - return 'IBM01141'; - - case 'ccsid1142': - case 'cp1142': - case 'ebcdicdk277euro': - case 'ebcdicno277euro': - case 'ibm1142': - return 'IBM01142'; - - case 'ccsid1143': - case 'cp1143': - case 'ebcdicfi278euro': - case 'ebcdicse278euro': - case 'ibm1143': - return 'IBM01143'; - - case 'ccsid1144': - case 'cp1144': - case 'ebcdicit280euro': - case 'ibm1144': - return 'IBM01144'; - - case 'ccsid1145': - case 'cp1145': - case 'ebcdices284euro': - case 'ibm1145': - return 'IBM01145'; - - case 'ccsid1146': - case 'cp1146': - case 'ebcdicgb285euro': - case 'ibm1146': - return 'IBM01146'; - - case 'ccsid1147': - case 'cp1147': - case 'ebcdicfr297euro': - case 'ibm1147': - return 'IBM01147'; - - case 'ccsid1148': - case 'cp1148': - case 'ebcdicinternational500euro': - case 'ibm1148': - return 'IBM01148'; - - case 'ccsid1149': - case 'cp1149': - case 'ebcdicis871euro': - case 'ibm1149': - return 'IBM01149'; - - case 'cp37': - case 'csibm37': - case 'ebcdiccpca': - case 'ebcdiccpnl': - case 'ebcdiccpus': - case 'ebcdiccpwt': - case 'ibm37': - return 'IBM037'; - - case 'cp38': - case 'csibm38': - case 'ebcdicint': - case 'ibm38': - return 'IBM038'; - - case 'cp273': - case 'csibm273': - case 'ibm273': - return 'IBM273'; - - case 'cp274': - case 'csibm274': - case 'ebcdicbe': - case 'ibm274': - return 'IBM274'; - - case 'cp275': - case 'csibm275': - case 'ebcdicbr': - case 'ibm275': - return 'IBM275'; - - case 'csibm277': - case 'ebcdiccpdk': - case 'ebcdiccpno': - case 'ibm277': - return 'IBM277'; - - case 'cp278': - case 'csibm278': - case 'ebcdiccpfi': - case 'ebcdiccpse': - case 'ibm278': - return 'IBM278'; - - case 'cp280': - case 'csibm280': - case 'ebcdiccpit': - case 'ibm280': - return 'IBM280'; - - case 'cp281': - case 'csibm281': - case 'ebcdicjpe': - case 'ibm281': - return 'IBM281'; - - case 'cp284': - case 'csibm284': - case 'ebcdiccpes': - case 'ibm284': - return 'IBM284'; - - case 'cp285': - case 'csibm285': - case 'ebcdiccpgb': - case 'ibm285': - return 'IBM285'; - - case 'cp290': - case 'csibm290': - case 'ebcdicjpkana': - case 'ibm290': - return 'IBM290'; - - case 'cp297': - case 'csibm297': - case 'ebcdiccpfr': - case 'ibm297': - return 'IBM297'; - - case 'cp420': - case 'csibm420': - case 'ebcdiccpar1': - case 'ibm420': - return 'IBM420'; - - case 'cp423': - case 'csibm423': - case 'ebcdiccpgr': - case 'ibm423': - return 'IBM423'; - - case 'cp424': - case 'csibm424': - case 'ebcdiccphe': - case 'ibm424': - return 'IBM424'; - - case '437': - case 'cp437': - case 'cspc8codepage437': - case 'ibm437': - return 'IBM437'; - - case 'cp500': - case 'csibm500': - case 'ebcdiccpbe': - case 'ebcdiccpch': - case 'ibm500': - return 'IBM500'; - - case 'cp775': - case 'cspc775baltic': - case 'ibm775': - return 'IBM775'; - - case '850': - case 'cp850': - case 'cspc850multilingual': - case 'ibm850': - return 'IBM850'; - - case '851': - case 'cp851': - case 'csibm851': - case 'ibm851': - return 'IBM851'; - - case '852': - case 'cp852': - case 'cspcp852': - case 'ibm852': - return 'IBM852'; - - case '855': - case 'cp855': - case 'csibm855': - case 'ibm855': - return 'IBM855'; - - case '857': - case 'cp857': - case 'csibm857': - case 'ibm857': - return 'IBM857'; - - case '860': - case 'cp860': - case 'csibm860': - case 'ibm860': - return 'IBM860'; - - case '861': - case 'cp861': - case 'cpis': - case 'csibm861': - case 'ibm861': - return 'IBM861'; - - case '862': - case 'cp862': - case 'cspc862latinhebrew': - case 'ibm862': - return 'IBM862'; - - case '863': - case 'cp863': - case 'csibm863': - case 'ibm863': - return 'IBM863'; - - case 'cp864': - case 'csibm864': - case 'ibm864': - return 'IBM864'; - - case '865': - case 'cp865': - case 'csibm865': - case 'ibm865': - return 'IBM865'; - - case '866': - case 'cp866': - case 'csibm866': - case 'ibm866': - return 'IBM866'; - - case 'cp868': - case 'cpar': - case 'csibm868': - case 'ibm868': - return 'IBM868'; - - case '869': - case 'cp869': - case 'cpgr': - case 'csibm869': - case 'ibm869': - return 'IBM869'; - - case 'cp870': - case 'csibm870': - case 'ebcdiccproece': - case 'ebcdiccpyu': - case 'ibm870': - return 'IBM870'; - - case 'cp871': - case 'csibm871': - case 'ebcdiccpis': - case 'ibm871': - return 'IBM871'; - - case 'cp880': - case 'csibm880': - case 'ebcdiccyrillic': - case 'ibm880': - return 'IBM880'; - - case 'cp891': - case 'csibm891': - case 'ibm891': - return 'IBM891'; - - case 'cp903': - case 'csibm903': - case 'ibm903': - return 'IBM903'; - - case '904': - case 'cp904': - case 'csibbm904': - case 'ibm904': - return 'IBM904'; - - case 'cp905': - case 'csibm905': - case 'ebcdiccptr': - case 'ibm905': - return 'IBM905'; - - case 'cp918': - case 'csibm918': - case 'ebcdiccpar2': - case 'ibm918': - return 'IBM918'; - - case 'cp1026': - case 'csibm1026': - case 'ibm1026': - return 'IBM1026'; - - case 'ibm1047': - return 'IBM1047'; - - case 'csiso143iecp271': - case 'iecp271': - case 'isoir143': - return 'IEC_P27-1'; - - case 'csiso49inis': - case 'inis': - case 'isoir49': - return 'INIS'; - - case 'csiso50inis8': - case 'inis8': - case 'isoir50': - return 'INIS-8'; - - case 'csiso51iniscyrillic': - case 'iniscyrillic': - case 'isoir51': - return 'INIS-cyrillic'; - - case 'csinvariant': - case 'invariant': - return 'INVARIANT'; - - case 'iso2022cn': - return 'ISO-2022-CN'; - - case 'iso2022cnext': - return 'ISO-2022-CN-EXT'; - - case 'csiso2022jp': - case 'iso2022jp': - return 'ISO-2022-JP'; - - case 'csiso2022jp2': - case 'iso2022jp2': - return 'ISO-2022-JP-2'; - - case 'csiso2022kr': - case 'iso2022kr': - return 'ISO-2022-KR'; - - case 'cswindows30latin1': - case 'iso88591windows30latin1': - return 'ISO-8859-1-Windows-3.0-Latin-1'; - - case 'cswindows31latin1': - case 'iso88591windows31latin1': - return 'ISO-8859-1-Windows-3.1-Latin-1'; - - case 'csisolatin2': - case 'iso88592': - case 'iso885921987': - case 'isoir101': - case 'l2': - case 'latin2': - return 'ISO-8859-2'; - - case 'cswindows31latin2': - case 'iso88592windowslatin2': - return 'ISO-8859-2-Windows-Latin-2'; - - case 'csisolatin3': - case 'iso88593': - case 'iso885931988': - case 'isoir109': - case 'l3': - case 'latin3': - return 'ISO-8859-3'; - - case 'csisolatin4': - case 'iso88594': - case 'iso885941988': - case 'isoir110': - case 'l4': - case 'latin4': - return 'ISO-8859-4'; - - case 'csisolatincyrillic': - case 'cyrillic': - case 'iso88595': - case 'iso885951988': - case 'isoir144': - return 'ISO-8859-5'; - - case 'arabic': - case 'asmo708': - case 'csisolatinarabic': - case 'ecma114': - case 'iso88596': - case 'iso885961987': - case 'isoir127': - return 'ISO-8859-6'; - - case 'csiso88596e': - case 'iso88596e': - return 'ISO-8859-6-E'; - - case 'csiso88596i': - case 'iso88596i': - return 'ISO-8859-6-I'; - - case 'csisolatingreek': - case 'ecma118': - case 'elot928': - case 'greek': - case 'greek8': - case 'iso88597': - case 'iso885971987': - case 'isoir126': - return 'ISO-8859-7'; - - case 'csisolatinhebrew': - case 'hebrew': - case 'iso88598': - case 'iso885981988': - case 'isoir138': - return 'ISO-8859-8'; - - case 'csiso88598e': - case 'iso88598e': - return 'ISO-8859-8-E'; - - case 'csiso88598i': - case 'iso88598i': - return 'ISO-8859-8-I'; - - case 'cswindows31latin5': - case 'iso88599windowslatin5': - return 'ISO-8859-9-Windows-Latin-5'; - - case 'csisolatin6': - case 'iso885910': - case 'iso8859101992': - case 'isoir157': - case 'l6': - case 'latin6': - return 'ISO-8859-10'; - - case 'iso885913': - return 'ISO-8859-13'; - - case 'iso885914': - case 'iso8859141998': - case 'isoceltic': - case 'isoir199': - case 'l8': - case 'latin8': - return 'ISO-8859-14'; - - case 'iso885915': - case 'latin9': - return 'ISO-8859-15'; - - case 'iso885916': - case 'iso8859162001': - case 'isoir226': - case 'l10': - case 'latin10': - return 'ISO-8859-16'; - - case 'iso10646j1': - return 'ISO-10646-J-1'; - - case 'csunicode': - case 'iso10646ucs2': - return 'ISO-10646-UCS-2'; - - case 'csucs4': - case 'iso10646ucs4': - return 'ISO-10646-UCS-4'; - - case 'csunicodeascii': - case 'iso10646ucsbasic': - return 'ISO-10646-UCS-Basic'; - - case 'csunicodelatin1': - case 'iso10646': - case 'iso10646unicodelatin1': - return 'ISO-10646-Unicode-Latin1'; - - case 'csiso10646utf1': - case 'iso10646utf1': - return 'ISO-10646-UTF-1'; - - case 'csiso115481': - case 'iso115481': - case 'isotr115481': - return 'ISO-11548-1'; - - case 'csiso90': - case 'isoir90': - return 'iso-ir-90'; - - case 'csunicodeibm1261': - case 'isounicodeibm1261': - return 'ISO-Unicode-IBM-1261'; - - case 'csunicodeibm1264': - case 'isounicodeibm1264': - return 'ISO-Unicode-IBM-1264'; - - case 'csunicodeibm1265': - case 'isounicodeibm1265': - return 'ISO-Unicode-IBM-1265'; - - case 'csunicodeibm1268': - case 'isounicodeibm1268': - return 'ISO-Unicode-IBM-1268'; - - case 'csunicodeibm1276': - case 'isounicodeibm1276': - return 'ISO-Unicode-IBM-1276'; - - case 'csiso646basic1983': - case 'iso646basic1983': - case 'ref': - return 'ISO_646.basic:1983'; - - case 'csiso2intlrefversion': - case 'irv': - case 'iso646irv1983': - case 'isoir2': - return 'ISO_646.irv:1983'; - - case 'csiso2033': - case 'e13b': - case 'iso20331983': - case 'isoir98': - return 'ISO_2033-1983'; - - case 'csiso5427cyrillic': - case 'iso5427': - case 'isoir37': - return 'ISO_5427'; - - case 'iso5427cyrillic1981': - case 'iso54271981': - case 'isoir54': - return 'ISO_5427:1981'; - - case 'csiso5428greek': - case 'iso54281980': - case 'isoir55': - return 'ISO_5428:1980'; - - case 'csiso6937add': - case 'iso6937225': - case 'isoir152': - return 'ISO_6937-2-25'; - - case 'csisotextcomm': - case 'iso69372add': - case 'isoir142': - return 'ISO_6937-2-add'; - - case 'csiso8859supp': - case 'iso8859supp': - case 'isoir154': - case 'latin125': - return 'ISO_8859-supp'; - - case 'csiso10367box': - case 'iso10367box': - case 'isoir155': - return 'ISO_10367-box'; - - case 'csiso15italian': - case 'iso646it': - case 'isoir15': - case 'it': - return 'IT'; - - case 'csiso13jisc6220jp': - case 'isoir13': - case 'jisc62201969': - case 'jisc62201969jp': - case 'katakana': - case 'x2017': - return 'JIS_C6220-1969-jp'; - - case 'csiso14jisc6220ro': - case 'iso646jp': - case 'isoir14': - case 'jisc62201969ro': - case 'jp': - return 'JIS_C6220-1969-ro'; - - case 'csiso42jisc62261978': - case 'isoir42': - case 'jisc62261978': - return 'JIS_C6226-1978'; - - case 'csiso87jisx208': - case 'isoir87': - case 'jisc62261983': - case 'jisx2081983': - case 'x208': - return 'JIS_C6226-1983'; - - case 'csiso91jisc62291984a': - case 'isoir91': - case 'jisc62291984a': - case 'jpocra': - return 'JIS_C6229-1984-a'; - - case 'csiso92jisc62991984b': - case 'iso646jpocrb': - case 'isoir92': - case 'jisc62291984b': - case 'jpocrb': - return 'JIS_C6229-1984-b'; - - case 'csiso93jis62291984badd': - case 'isoir93': - case 'jisc62291984badd': - case 'jpocrbadd': - return 'JIS_C6229-1984-b-add'; - - case 'csiso94jis62291984hand': - case 'isoir94': - case 'jisc62291984hand': - case 'jpocrhand': - return 'JIS_C6229-1984-hand'; - - case 'csiso95jis62291984handadd': - case 'isoir95': - case 'jisc62291984handadd': - case 'jpocrhandadd': - return 'JIS_C6229-1984-hand-add'; - - case 'csiso96jisc62291984kana': - case 'isoir96': - case 'jisc62291984kana': - return 'JIS_C6229-1984-kana'; - - case 'csjisencoding': - case 'jisencoding': - return 'JIS_Encoding'; - - case 'cshalfwidthkatakana': - case 'jisx201': - case 'x201': - return 'JIS_X0201'; - - case 'csiso159jisx2121990': - case 'isoir159': - case 'jisx2121990': - case 'x212': - return 'JIS_X0212-1990'; - - case 'csiso141jusib1002': - case 'iso646yu': - case 'isoir141': - case 'js': - case 'jusib1002': - case 'yu': - return 'JUS_I.B1.002'; - - case 'csiso147macedonian': - case 'isoir147': - case 'jusib1003mac': - case 'macedonian': - return 'JUS_I.B1.003-mac'; - - case 'csiso146serbian': - case 'isoir146': - case 'jusib1003serb': - case 'serbian': - return 'JUS_I.B1.003-serb'; - - case 'koi7switched': - return 'KOI7-switched'; - - case 'cskoi8r': - case 'koi8r': - return 'KOI8-R'; - - case 'koi8u': - return 'KOI8-U'; - - case 'csksc5636': - case 'iso646kr': - case 'ksc5636': - return 'KSC5636'; - - case 'cskz1048': - case 'kz1048': - case 'rk1048': - case 'strk10482002': - return 'KZ-1048'; - - case 'csiso19latingreek': - case 'isoir19': - case 'latingreek': - return 'latin-greek'; - - case 'csiso27latingreek1': - case 'isoir27': - case 'latingreek1': - return 'Latin-greek-1'; - - case 'csiso158lap': - case 'isoir158': - case 'lap': - case 'latinlap': - return 'latin-lap'; - - case 'csmacintosh': - case 'mac': - case 'macintosh': - return 'macintosh'; - - case 'csmicrosoftpublishing': - case 'microsoftpublishing': - return 'Microsoft-Publishing'; - - case 'csmnem': - case 'mnem': - return 'MNEM'; - - case 'csmnemonic': - case 'mnemonic': - return 'MNEMONIC'; - - case 'csiso86hungarian': - case 'hu': - case 'iso646hu': - case 'isoir86': - case 'msz77953': - return 'MSZ_7795.3'; - - case 'csnatsdano': - case 'isoir91': - case 'natsdano': - return 'NATS-DANO'; - - case 'csnatsdanoadd': - case 'isoir92': - case 'natsdanoadd': - return 'NATS-DANO-ADD'; - - case 'csnatssefi': - case 'isoir81': - case 'natssefi': - return 'NATS-SEFI'; - - case 'csnatssefiadd': - case 'isoir82': - case 'natssefiadd': - return 'NATS-SEFI-ADD'; - - case 'csiso151cuba': - case 'cuba': - case 'iso646cu': - case 'isoir151': - case 'ncnc1081': - return 'NC_NC00-10:81'; - - case 'csiso69french': - case 'fr': - case 'iso646fr': - case 'isoir69': - case 'nfz62010': - return 'NF_Z_62-010'; - - case 'csiso25french': - case 'iso646fr1': - case 'isoir25': - case 'nfz620101973': - return 'NF_Z_62-010_(1973)'; - - case 'csiso60danishnorwegian': - case 'csiso60norwegian1': - case 'iso646no': - case 'isoir60': - case 'no': - case 'ns45511': - return 'NS_4551-1'; - - case 'csiso61norwegian2': - case 'iso646no2': - case 'isoir61': - case 'no2': - case 'ns45512': - return 'NS_4551-2'; - - case 'osdebcdicdf3irv': - return 'OSD_EBCDIC_DF03_IRV'; - - case 'osdebcdicdf41': - return 'OSD_EBCDIC_DF04_1'; - - case 'osdebcdicdf415': - return 'OSD_EBCDIC_DF04_15'; - - case 'cspc8danishnorwegian': - case 'pc8danishnorwegian': - return 'PC8-Danish-Norwegian'; - - case 'cspc8turkish': - case 'pc8turkish': - return 'PC8-Turkish'; - - case 'csiso16portuguese': - case 'iso646pt': - case 'isoir16': - case 'pt': - return 'PT'; - - case 'csiso84portuguese2': - case 'iso646pt2': - case 'isoir84': - case 'pt2': - return 'PT2'; - - case 'cp154': - case 'csptcp154': - case 'cyrillicasian': - case 'pt154': - case 'ptcp154': - return 'PTCP154'; - - case 'scsu': - return 'SCSU'; - - case 'csiso10swedish': - case 'fi': - case 'iso646fi': - case 'iso646se': - case 'isoir10': - case 'se': - case 'sen850200b': - return 'SEN_850200_B'; - - case 'csiso11swedishfornames': - case 'iso646se2': - case 'isoir11': - case 'se2': - case 'sen850200c': - return 'SEN_850200_C'; - - case 'csshiftjis': - case 'mskanji': - case 'shiftjis': - return 'Shift_JIS'; - - case 'csiso102t617bit': - case 'isoir102': - case 't617bit': - return 'T.61-7bit'; - - case 'csiso103t618bit': - case 'isoir103': - case 't61': - case 't618bit': - return 'T.61-8bit'; - - case 'csiso128t101g2': - case 'isoir128': - case 't101g2': - return 'T.101-G2'; - - case 'cstscii': - case 'tscii': - return 'TSCII'; - - case 'csunicode11': - case 'unicode11': - return 'UNICODE-1-1'; - - case 'csunicode11utf7': - case 'unicode11utf7': - return 'UNICODE-1-1-UTF-7'; - - case 'csunknown8bit': - case 'unknown8bit': - return 'UNKNOWN-8BIT'; - - case 'ansix341968': - case 'ansix341986': - case 'ascii': - case 'cp367': - case 'csascii': - case 'ibm367': - case 'iso646irv1991': - case 'iso646us': - case 'isoir6': - case 'us': - case 'usascii': - return 'US-ASCII'; - - case 'csusdk': - case 'usdk': - return 'us-dk'; - - case 'utf7': - return 'UTF-7'; - - case 'utf8': - return 'UTF-8'; - - case 'utf16': - return 'UTF-16'; - - case 'utf16be': - return 'UTF-16BE'; - - case 'utf16le': - return 'UTF-16LE'; - - case 'utf32': - return 'UTF-32'; - - case 'utf32be': - return 'UTF-32BE'; - - case 'utf32le': - return 'UTF-32LE'; - - case 'csventurainternational': - case 'venturainternational': - return 'Ventura-International'; - - case 'csventuramath': - case 'venturamath': - return 'Ventura-Math'; - - case 'csventuraus': - case 'venturaus': - return 'Ventura-US'; - - case 'csiso70videotexsupp1': - case 'isoir70': - case 'videotexsuppl': - return 'videotex-suppl'; - - case 'csviqr': - case 'viqr': - return 'VIQR'; - - case 'csviscii': - case 'viscii': - return 'VISCII'; - - case 'cswindows31j': - case 'windows31j': - return 'Windows-31J'; - - case 'iso885911': - case 'tis620': - return 'windows-874'; - - case 'cseuckr': - case 'csksc56011987': - case 'euckr': - case 'isoir149': - case 'korean': - case 'ksc5601': - case 'ksc56011987': - case 'ksc56011989': - case 'windows949': - return 'windows-949'; - - case 'windows1250': - return 'windows-1250'; - - case 'windows1251': - return 'windows-1251'; - - case 'cp819': - case 'csisolatin1': - case 'ibm819': - case 'iso88591': - case 'iso885911987': - case 'isoir100': - case 'l1': - case 'latin1': - case 'windows1252': - return 'windows-1252'; - - case 'windows1253': - return 'windows-1253'; - - case 'csisolatin5': - case 'iso88599': - case 'iso885991989': - case 'isoir148': - case 'l5': - case 'latin5': - case 'windows1254': - return 'windows-1254'; - - case 'windows1255': - return 'windows-1255'; - - case 'windows1256': - return 'windows-1256'; - - case 'windows1257': - return 'windows-1257'; - - case 'windows1258': - return 'windows-1258'; - - default: - return $charset; - } - } - - function get_curl_version() - { - if (is_array($curl = curl_version())) - { - $curl = $curl['version']; - } - elseif (substr($curl, 0, 5) === 'curl/') - { - $curl = substr($curl, 5, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 5)); - } - elseif (substr($curl, 0, 8) === 'libcurl/') - { - $curl = substr($curl, 8, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 8)); - } - else - { - $curl = 0; - } - return $curl; - } - - function is_subclass_of($class1, $class2) - { - if (func_num_args() !== 2) - { - trigger_error('Wrong parameter count for SimplePie_Misc::is_subclass_of()', E_USER_WARNING); - } - elseif (version_compare(PHP_VERSION, '5.0.3', '>=') || is_object($class1)) - { - return is_subclass_of($class1, $class2); - } - elseif (is_string($class1) && is_string($class2)) - { - if (class_exists($class1)) - { - if (class_exists($class2)) - { - $class2 = strtolower($class2); - while ($class1 = strtolower(get_parent_class($class1))) - { - if ($class1 === $class2) - { - return true; - } - } - } - } - else - { - trigger_error('Unknown class passed as parameter', E_USER_WARNNG); - } - } - return false; - } - - /** - * Strip HTML comments - * - * @access public - * @param string $data Data to strip comments from - * @return string Comment stripped string - */ - function strip_comments($data) - { - $output = ''; - while (($start = strpos($data, '', $start)) !== false) - { - $data = substr_replace($data, '', 0, $end + 3); - } - else - { - $data = ''; - } - } - return $output . $data; - } - - function parse_date($dt) - { - $parser = SimplePie_Parse_Date::get(); - return $parser->parse($dt); - } - - /** - * Decode HTML entities - * - * @static - * @access public - * @param string $data Input data - * @return string Output data - */ - function entities_decode($data) - { - $decoder = new SimplePie_Decode_HTML_Entities($data); - return $decoder->parse(); - } - - /** - * Remove RFC822 comments - * - * @access public - * @param string $data Data to strip comments from - * @return string Comment stripped string - */ - function uncomment_rfc822($string) - { - $string = (string) $string; - $position = 0; - $length = strlen($string); - $depth = 0; - - $output = ''; - - while ($position < $length && ($pos = strpos($string, '(', $position)) !== false) - { - $output .= substr($string, $position, $pos - $position); - $position = $pos + 1; - if ($string[$pos - 1] !== '\\') - { - $depth++; - while ($depth && $position < $length) - { - $position += strcspn($string, '()', $position); - if ($string[$position - 1] === '\\') - { - $position++; - continue; - } - elseif (isset($string[$position])) - { - switch ($string[$position]) - { - case '(': - $depth++; - break; - - case ')': - $depth--; - break; - } - $position++; - } - else - { - break; - } - } - } - else - { - $output .= '('; - } - } - $output .= substr($string, $position); - - return $output; - } - - function parse_mime($mime) - { - if (($pos = strpos($mime, ';')) === false) - { - return trim($mime); - } - else - { - return trim(substr($mime, 0, $pos)); - } - } - - function htmlspecialchars_decode($string, $quote_style) - { - if (function_exists('htmlspecialchars_decode')) - { - return htmlspecialchars_decode($string, $quote_style); - } - else - { - return strtr($string, array_flip(get_html_translation_table(HTML_SPECIALCHARS, $quote_style))); - } - } - - function atom_03_construct_type($attribs) - { - if (isset($attribs['']['mode']) && strtolower(trim($attribs['']['mode']) === 'base64')) - { - $mode = SIMPLEPIE_CONSTRUCT_BASE64; - } - else - { - $mode = SIMPLEPIE_CONSTRUCT_NONE; - } - if (isset($attribs['']['type'])) - { - switch (strtolower(trim($attribs['']['type']))) - { - case 'text': - case 'text/plain': - return SIMPLEPIE_CONSTRUCT_TEXT | $mode; - - case 'html': - case 'text/html': - return SIMPLEPIE_CONSTRUCT_HTML | $mode; - - case 'xhtml': - case 'application/xhtml+xml': - return SIMPLEPIE_CONSTRUCT_XHTML | $mode; - - default: - return SIMPLEPIE_CONSTRUCT_NONE | $mode; - } - } - else - { - return SIMPLEPIE_CONSTRUCT_TEXT | $mode; - } - } - - function atom_10_construct_type($attribs) - { - if (isset($attribs['']['type'])) - { - switch (strtolower(trim($attribs['']['type']))) - { - case 'text': - return SIMPLEPIE_CONSTRUCT_TEXT; - - case 'html': - return SIMPLEPIE_CONSTRUCT_HTML; - - case 'xhtml': - return SIMPLEPIE_CONSTRUCT_XHTML; - - default: - return SIMPLEPIE_CONSTRUCT_NONE; - } - } - return SIMPLEPIE_CONSTRUCT_TEXT; - } - - function atom_10_content_construct_type($attribs) - { - if (isset($attribs['']['type'])) - { - $type = strtolower(trim($attribs['']['type'])); - switch ($type) - { - case 'text': - return SIMPLEPIE_CONSTRUCT_TEXT; - - case 'html': - return SIMPLEPIE_CONSTRUCT_HTML; - - case 'xhtml': - return SIMPLEPIE_CONSTRUCT_XHTML; - } - if (in_array(substr($type, -4), array('+xml', '/xml')) || substr($type, 0, 5) === 'text/') - { - return SIMPLEPIE_CONSTRUCT_NONE; - } - else - { - return SIMPLEPIE_CONSTRUCT_BASE64; - } - } - else - { - return SIMPLEPIE_CONSTRUCT_TEXT; - } - } - - function is_isegment_nz_nc($string) - { - return (bool) preg_match('/^([A-Za-z0-9\-._~\x{A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}\x{10000}-\x{1FFFD}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}\x{40000}-\x{4FFFD}\x{50000}-\x{5FFFD}\x{60000}-\x{6FFFD}\x{70000}-\x{7FFFD}\x{80000}-\x{8FFFD}\x{90000}-\x{9FFFD}\x{A0000}-\x{AFFFD}\x{B0000}-\x{BFFFD}\x{C0000}-\x{CFFFD}\x{D0000}-\x{DFFFD}\x{E1000}-\x{EFFFD}!$&\'()*+,;=@]|(%[0-9ABCDEF]{2}))+$/u', $string); - } - - function space_seperated_tokens($string) - { - $space_characters = "\x20\x09\x0A\x0B\x0C\x0D"; - $string_length = strlen($string); - - $position = strspn($string, $space_characters); - $tokens = array(); - - while ($position < $string_length) - { - $len = strcspn($string, $space_characters, $position); - $tokens[] = substr($string, $position, $len); - $position += $len; - $position += strspn($string, $space_characters, $position); - } - - return $tokens; - } - - function array_unique($array) - { - if (version_compare(PHP_VERSION, '5.2', '>=')) - { - return array_unique($array); - } - else - { - $array = (array) $array; - $new_array = array(); - $new_array_strings = array(); - foreach ($array as $key => $value) - { - if (is_object($value)) - { - if (method_exists($value, '__toString')) - { - $cmp = $value->__toString(); - } - else - { - trigger_error('Object of class ' . get_class($value) . ' could not be converted to string', E_USER_ERROR); - } - } - elseif (is_array($value)) - { - $cmp = (string) reset($value); - } - else - { - $cmp = (string) $value; - } - if (!in_array($cmp, $new_array_strings)) - { - $new_array[$key] = $value; - $new_array_strings[] = $cmp; - } - } - return $new_array; - } - } - - /** - * Converts a unicode codepoint to a UTF-8 character - * - * @static - * @access public - * @param int $codepoint Unicode codepoint - * @return string UTF-8 character - */ - function codepoint_to_utf8($codepoint) - { - $codepoint = (int) $codepoint; - if ($codepoint < 0) - { - return false; - } - else if ($codepoint <= 0x7f) - { - return chr($codepoint); - } - else if ($codepoint <= 0x7ff) - { - return chr(0xc0 | ($codepoint >> 6)) . chr(0x80 | ($codepoint & 0x3f)); - } - else if ($codepoint <= 0xffff) - { - return chr(0xe0 | ($codepoint >> 12)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f)); - } - else if ($codepoint <= 0x10ffff) - { - return chr(0xf0 | ($codepoint >> 18)) . chr(0x80 | (($codepoint >> 12) & 0x3f)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f)); - } - else - { - // U+FFFD REPLACEMENT CHARACTER - return "\xEF\xBF\xBD"; - } - } - - /** - * Re-implementation of PHP 5's stripos() - * - * Returns the numeric position of the first occurrence of needle in the - * haystack string. - * - * @static - * @access string - * @param object $haystack - * @param string $needle Note that the needle may be a string of one or more - * characters. If needle is not a string, it is converted to an integer - * and applied as the ordinal value of a character. - * @param int $offset The optional offset parameter allows you to specify which - * character in haystack to start searching. The position returned is still - * relative to the beginning of haystack. - * @return bool If needle is not found, stripos() will return boolean false. - */ - function stripos($haystack, $needle, $offset = 0) - { - if (function_exists('stripos')) - { - return stripos($haystack, $needle, $offset); - } - else - { - if (is_string($needle)) - { - $needle = strtolower($needle); - } - elseif (is_int($needle) || is_bool($needle) || is_double($needle)) - { - $needle = strtolower(chr($needle)); - } - else - { - trigger_error('needle is not a string or an integer', E_USER_WARNING); - return false; - } - - return strpos(strtolower($haystack), $needle, $offset); - } - } - - /** - * Similar to parse_str() - * - * Returns an associative array of name/value pairs, where the value is an - * array of values that have used the same name - * - * @static - * @access string - * @param string $str The input string. - * @return array - */ - function parse_str($str) - { - $return = array(); - $str = explode('&', $str); - - foreach ($str as $section) - { - if (strpos($section, '=') !== false) - { - list($name, $value) = explode('=', $section, 2); - $return[urldecode($name)][] = urldecode($value); - } - else - { - $return[urldecode($section)][] = null; - } - } - - return $return; - } - - /** - * Detect XML encoding, as per XML 1.0 Appendix F.1 - * - * @todo Add support for EBCDIC - * @param string $data XML data - * @return array Possible encodings - */ - function xml_encoding($data) - { - // UTF-32 Big Endian BOM - if (substr($data, 0, 4) === "\x00\x00\xFE\xFF") - { - $encoding[] = 'UTF-32BE'; - } - // UTF-32 Little Endian BOM - elseif (substr($data, 0, 4) === "\xFF\xFE\x00\x00") - { - $encoding[] = 'UTF-32LE'; - } - // UTF-16 Big Endian BOM - elseif (substr($data, 0, 2) === "\xFE\xFF") - { - $encoding[] = 'UTF-16BE'; - } - // UTF-16 Little Endian BOM - elseif (substr($data, 0, 2) === "\xFF\xFE") - { - $encoding[] = 'UTF-16LE'; - } - // UTF-8 BOM - elseif (substr($data, 0, 3) === "\xEF\xBB\xBF") - { - $encoding[] = 'UTF-8'; - } - // UTF-32 Big Endian Without BOM - elseif (substr($data, 0, 20) === "\x00\x00\x00\x3C\x00\x00\x00\x3F\x00\x00\x00\x78\x00\x00\x00\x6D\x00\x00\x00\x6C") - { - if ($pos = strpos($data, "\x00\x00\x00\x3F\x00\x00\x00\x3E")) - { - $parser = new SimplePie_XML_Declaration_Parser(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32BE', 'UTF-8')); - if ($parser->parse()) - { - $encoding[] = $parser->encoding; - } - } - $encoding[] = 'UTF-32BE'; - } - // UTF-32 Little Endian Without BOM - elseif (substr($data, 0, 20) === "\x3C\x00\x00\x00\x3F\x00\x00\x00\x78\x00\x00\x00\x6D\x00\x00\x00\x6C\x00\x00\x00") - { - if ($pos = strpos($data, "\x3F\x00\x00\x00\x3E\x00\x00\x00")) - { - $parser = new SimplePie_XML_Declaration_Parser(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32LE', 'UTF-8')); - if ($parser->parse()) - { - $encoding[] = $parser->encoding; - } - } - $encoding[] = 'UTF-32LE'; - } - // UTF-16 Big Endian Without BOM - elseif (substr($data, 0, 10) === "\x00\x3C\x00\x3F\x00\x78\x00\x6D\x00\x6C") - { - if ($pos = strpos($data, "\x00\x3F\x00\x3E")) - { - $parser = new SimplePie_XML_Declaration_Parser(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16BE', 'UTF-8')); - if ($parser->parse()) - { - $encoding[] = $parser->encoding; - } - } - $encoding[] = 'UTF-16BE'; - } - // UTF-16 Little Endian Without BOM - elseif (substr($data, 0, 10) === "\x3C\x00\x3F\x00\x78\x00\x6D\x00\x6C\x00") - { - if ($pos = strpos($data, "\x3F\x00\x3E\x00")) - { - $parser = new SimplePie_XML_Declaration_Parser(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16LE', 'UTF-8')); - if ($parser->parse()) - { - $encoding[] = $parser->encoding; - } - } - $encoding[] = 'UTF-16LE'; - } - // US-ASCII (or superset) - elseif (substr($data, 0, 5) === "\x3C\x3F\x78\x6D\x6C") - { - if ($pos = strpos($data, "\x3F\x3E")) - { - $parser = new SimplePie_XML_Declaration_Parser(substr($data, 5, $pos - 5)); - if ($parser->parse()) - { - $encoding[] = $parser->encoding; - } - } - $encoding[] = 'UTF-8'; - } - // Fallback to UTF-8 - else - { - $encoding[] = 'UTF-8'; - } - return $encoding; - } - - function output_javascript() - { - if (function_exists('ob_gzhandler')) - { - ob_start('ob_gzhandler'); - } - header('Content-type: text/javascript; charset: UTF-8'); - header('Cache-Control: must-revalidate'); - header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days - ?> -function embed_odeo(link) { - document.writeln(''); -} - -function embed_quicktime(type, bgcolor, width, height, link, placeholder, loop) { - if (placeholder != '') { - document.writeln(''); - } - else { - document.writeln(''); - } -} - -function embed_flash(bgcolor, width, height, link, loop, type) { - document.writeln(''); -} - -function embed_flv(width, height, link, placeholder, loop, player) { - document.writeln(''); -} - -function embed_wmedia(width, height, link) { - document.writeln(''); -} - data = $data; - } - - /** - * Parse the input data - * - * @access public - * @return string Output data - */ - function parse() - { - while (($this->position = strpos($this->data, '&', $this->position)) !== false) - { - $this->consume(); - $this->entity(); - $this->consumed = ''; - } - return $this->data; - } - - /** - * Consume the next byte - * - * @access private - * @return mixed The next byte, or false, if there is no more data - */ - function consume() - { - if (isset($this->data[$this->position])) - { - $this->consumed .= $this->data[$this->position]; - return $this->data[$this->position++]; - } - else - { - return false; - } - } - - /** - * Consume a range of characters - * - * @access private - * @param string $chars Characters to consume - * @return mixed A series of characters that match the range, or false - */ - function consume_range($chars) - { - if ($len = strspn($this->data, $chars, $this->position)) - { - $data = substr($this->data, $this->position, $len); - $this->consumed .= $data; - $this->position += $len; - return $data; - } - else - { - return false; - } - } - - /** - * Unconsume one byte - * - * @access private - */ - function unconsume() - { - $this->consumed = substr($this->consumed, 0, -1); - $this->position--; - } - - /** - * Decode an entity - * - * @access private - */ - function entity() - { - switch ($this->consume()) - { - case "\x09": - case "\x0A": - case "\x0B": - case "\x0B": - case "\x0C": - case "\x20": - case "\x3C": - case "\x26": - case false: - break; - - case "\x23": - switch ($this->consume()) - { - case "\x78": - case "\x58": - $range = '0123456789ABCDEFabcdef'; - $hex = true; - break; - - default: - $range = '0123456789'; - $hex = false; - $this->unconsume(); - break; - } - - if ($codepoint = $this->consume_range($range)) - { - static $windows_1252_specials = array(0x0D => "\x0A", 0x80 => "\xE2\x82\xAC", 0x81 => "\xEF\xBF\xBD", 0x82 => "\xE2\x80\x9A", 0x83 => "\xC6\x92", 0x84 => "\xE2\x80\x9E", 0x85 => "\xE2\x80\xA6", 0x86 => "\xE2\x80\xA0", 0x87 => "\xE2\x80\xA1", 0x88 => "\xCB\x86", 0x89 => "\xE2\x80\xB0", 0x8A => "\xC5\xA0", 0x8B => "\xE2\x80\xB9", 0x8C => "\xC5\x92", 0x8D => "\xEF\xBF\xBD", 0x8E => "\xC5\xBD", 0x8F => "\xEF\xBF\xBD", 0x90 => "\xEF\xBF\xBD", 0x91 => "\xE2\x80\x98", 0x92 => "\xE2\x80\x99", 0x93 => "\xE2\x80\x9C", 0x94 => "\xE2\x80\x9D", 0x95 => "\xE2\x80\xA2", 0x96 => "\xE2\x80\x93", 0x97 => "\xE2\x80\x94", 0x98 => "\xCB\x9C", 0x99 => "\xE2\x84\xA2", 0x9A => "\xC5\xA1", 0x9B => "\xE2\x80\xBA", 0x9C => "\xC5\x93", 0x9D => "\xEF\xBF\xBD", 0x9E => "\xC5\xBE", 0x9F => "\xC5\xB8"); - - if ($hex) - { - $codepoint = hexdec($codepoint); - } - else - { - $codepoint = intval($codepoint); - } - - if (isset($windows_1252_specials[$codepoint])) - { - $replacement = $windows_1252_specials[$codepoint]; - } - else - { - $replacement = SimplePie_Misc::codepoint_to_utf8($codepoint); - } - - if (!in_array($this->consume(), array(';', false), true)) - { - $this->unconsume(); - } - - $consumed_length = strlen($this->consumed); - $this->data = substr_replace($this->data, $replacement, $this->position - $consumed_length, $consumed_length); - $this->position += strlen($replacement) - $consumed_length; - } - break; - - default: - static $entities = array('Aacute' => "\xC3\x81", 'aacute' => "\xC3\xA1", 'Aacute;' => "\xC3\x81", 'aacute;' => "\xC3\xA1", 'Acirc' => "\xC3\x82", 'acirc' => "\xC3\xA2", 'Acirc;' => "\xC3\x82", 'acirc;' => "\xC3\xA2", 'acute' => "\xC2\xB4", 'acute;' => "\xC2\xB4", 'AElig' => "\xC3\x86", 'aelig' => "\xC3\xA6", 'AElig;' => "\xC3\x86", 'aelig;' => "\xC3\xA6", 'Agrave' => "\xC3\x80", 'agrave' => "\xC3\xA0", 'Agrave;' => "\xC3\x80", 'agrave;' => "\xC3\xA0", 'alefsym;' => "\xE2\x84\xB5", 'Alpha;' => "\xCE\x91", 'alpha;' => "\xCE\xB1", 'AMP' => "\x26", 'amp' => "\x26", 'AMP;' => "\x26", 'amp;' => "\x26", 'and;' => "\xE2\x88\xA7", 'ang;' => "\xE2\x88\xA0", 'apos;' => "\x27", 'Aring' => "\xC3\x85", 'aring' => "\xC3\xA5", 'Aring;' => "\xC3\x85", 'aring;' => "\xC3\xA5", 'asymp;' => "\xE2\x89\x88", 'Atilde' => "\xC3\x83", 'atilde' => "\xC3\xA3", 'Atilde;' => "\xC3\x83", 'atilde;' => "\xC3\xA3", 'Auml' => "\xC3\x84", 'auml' => "\xC3\xA4", 'Auml;' => "\xC3\x84", 'auml;' => "\xC3\xA4", 'bdquo;' => "\xE2\x80\x9E", 'Beta;' => "\xCE\x92", 'beta;' => "\xCE\xB2", 'brvbar' => "\xC2\xA6", 'brvbar;' => "\xC2\xA6", 'bull;' => "\xE2\x80\xA2", 'cap;' => "\xE2\x88\xA9", 'Ccedil' => "\xC3\x87", 'ccedil' => "\xC3\xA7", 'Ccedil;' => "\xC3\x87", 'ccedil;' => "\xC3\xA7", 'cedil' => "\xC2\xB8", 'cedil;' => "\xC2\xB8", 'cent' => "\xC2\xA2", 'cent;' => "\xC2\xA2", 'Chi;' => "\xCE\xA7", 'chi;' => "\xCF\x87", 'circ;' => "\xCB\x86", 'clubs;' => "\xE2\x99\xA3", 'cong;' => "\xE2\x89\x85", 'COPY' => "\xC2\xA9", 'copy' => "\xC2\xA9", 'COPY;' => "\xC2\xA9", 'copy;' => "\xC2\xA9", 'crarr;' => "\xE2\x86\xB5", 'cup;' => "\xE2\x88\xAA", 'curren' => "\xC2\xA4", 'curren;' => "\xC2\xA4", 'Dagger;' => "\xE2\x80\xA1", 'dagger;' => "\xE2\x80\xA0", 'dArr;' => "\xE2\x87\x93", 'darr;' => "\xE2\x86\x93", 'deg' => "\xC2\xB0", 'deg;' => "\xC2\xB0", 'Delta;' => "\xCE\x94", 'delta;' => "\xCE\xB4", 'diams;' => "\xE2\x99\xA6", 'divide' => "\xC3\xB7", 'divide;' => "\xC3\xB7", 'Eacute' => "\xC3\x89", 'eacute' => "\xC3\xA9", 'Eacute;' => "\xC3\x89", 'eacute;' => "\xC3\xA9", 'Ecirc' => "\xC3\x8A", 'ecirc' => "\xC3\xAA", 'Ecirc;' => "\xC3\x8A", 'ecirc;' => "\xC3\xAA", 'Egrave' => "\xC3\x88", 'egrave' => "\xC3\xA8", 'Egrave;' => "\xC3\x88", 'egrave;' => "\xC3\xA8", 'empty;' => "\xE2\x88\x85", 'emsp;' => "\xE2\x80\x83", 'ensp;' => "\xE2\x80\x82", 'Epsilon;' => "\xCE\x95", 'epsilon;' => "\xCE\xB5", 'equiv;' => "\xE2\x89\xA1", 'Eta;' => "\xCE\x97", 'eta;' => "\xCE\xB7", 'ETH' => "\xC3\x90", 'eth' => "\xC3\xB0", 'ETH;' => "\xC3\x90", 'eth;' => "\xC3\xB0", 'Euml' => "\xC3\x8B", 'euml' => "\xC3\xAB", 'Euml;' => "\xC3\x8B", 'euml;' => "\xC3\xAB", 'euro;' => "\xE2\x82\xAC", 'exist;' => "\xE2\x88\x83", 'fnof;' => "\xC6\x92", 'forall;' => "\xE2\x88\x80", 'frac12' => "\xC2\xBD", 'frac12;' => "\xC2\xBD", 'frac14' => "\xC2\xBC", 'frac14;' => "\xC2\xBC", 'frac34' => "\xC2\xBE", 'frac34;' => "\xC2\xBE", 'frasl;' => "\xE2\x81\x84", 'Gamma;' => "\xCE\x93", 'gamma;' => "\xCE\xB3", 'ge;' => "\xE2\x89\xA5", 'GT' => "\x3E", 'gt' => "\x3E", 'GT;' => "\x3E", 'gt;' => "\x3E", 'hArr;' => "\xE2\x87\x94", 'harr;' => "\xE2\x86\x94", 'hearts;' => "\xE2\x99\xA5", 'hellip;' => "\xE2\x80\xA6", 'Iacute' => "\xC3\x8D", 'iacute' => "\xC3\xAD", 'Iacute;' => "\xC3\x8D", 'iacute;' => "\xC3\xAD", 'Icirc' => "\xC3\x8E", 'icirc' => "\xC3\xAE", 'Icirc;' => "\xC3\x8E", 'icirc;' => "\xC3\xAE", 'iexcl' => "\xC2\xA1", 'iexcl;' => "\xC2\xA1", 'Igrave' => "\xC3\x8C", 'igrave' => "\xC3\xAC", 'Igrave;' => "\xC3\x8C", 'igrave;' => "\xC3\xAC", 'image;' => "\xE2\x84\x91", 'infin;' => "\xE2\x88\x9E", 'int;' => "\xE2\x88\xAB", 'Iota;' => "\xCE\x99", 'iota;' => "\xCE\xB9", 'iquest' => "\xC2\xBF", 'iquest;' => "\xC2\xBF", 'isin;' => "\xE2\x88\x88", 'Iuml' => "\xC3\x8F", 'iuml' => "\xC3\xAF", 'Iuml;' => "\xC3\x8F", 'iuml;' => "\xC3\xAF", 'Kappa;' => "\xCE\x9A", 'kappa;' => "\xCE\xBA", 'Lambda;' => "\xCE\x9B", 'lambda;' => "\xCE\xBB", 'lang;' => "\xE3\x80\x88", 'laquo' => "\xC2\xAB", 'laquo;' => "\xC2\xAB", 'lArr;' => "\xE2\x87\x90", 'larr;' => "\xE2\x86\x90", 'lceil;' => "\xE2\x8C\x88", 'ldquo;' => "\xE2\x80\x9C", 'le;' => "\xE2\x89\xA4", 'lfloor;' => "\xE2\x8C\x8A", 'lowast;' => "\xE2\x88\x97", 'loz;' => "\xE2\x97\x8A", 'lrm;' => "\xE2\x80\x8E", 'lsaquo;' => "\xE2\x80\xB9", 'lsquo;' => "\xE2\x80\x98", 'LT' => "\x3C", 'lt' => "\x3C", 'LT;' => "\x3C", 'lt;' => "\x3C", 'macr' => "\xC2\xAF", 'macr;' => "\xC2\xAF", 'mdash;' => "\xE2\x80\x94", 'micro' => "\xC2\xB5", 'micro;' => "\xC2\xB5", 'middot' => "\xC2\xB7", 'middot;' => "\xC2\xB7", 'minus;' => "\xE2\x88\x92", 'Mu;' => "\xCE\x9C", 'mu;' => "\xCE\xBC", 'nabla;' => "\xE2\x88\x87", 'nbsp' => "\xC2\xA0", 'nbsp;' => "\xC2\xA0", 'ndash;' => "\xE2\x80\x93", 'ne;' => "\xE2\x89\xA0", 'ni;' => "\xE2\x88\x8B", 'not' => "\xC2\xAC", 'not;' => "\xC2\xAC", 'notin;' => "\xE2\x88\x89", 'nsub;' => "\xE2\x8A\x84", 'Ntilde' => "\xC3\x91", 'ntilde' => "\xC3\xB1", 'Ntilde;' => "\xC3\x91", 'ntilde;' => "\xC3\xB1", 'Nu;' => "\xCE\x9D", 'nu;' => "\xCE\xBD", 'Oacute' => "\xC3\x93", 'oacute' => "\xC3\xB3", 'Oacute;' => "\xC3\x93", 'oacute;' => "\xC3\xB3", 'Ocirc' => "\xC3\x94", 'ocirc' => "\xC3\xB4", 'Ocirc;' => "\xC3\x94", 'ocirc;' => "\xC3\xB4", 'OElig;' => "\xC5\x92", 'oelig;' => "\xC5\x93", 'Ograve' => "\xC3\x92", 'ograve' => "\xC3\xB2", 'Ograve;' => "\xC3\x92", 'ograve;' => "\xC3\xB2", 'oline;' => "\xE2\x80\xBE", 'Omega;' => "\xCE\xA9", 'omega;' => "\xCF\x89", 'Omicron;' => "\xCE\x9F", 'omicron;' => "\xCE\xBF", 'oplus;' => "\xE2\x8A\x95", 'or;' => "\xE2\x88\xA8", 'ordf' => "\xC2\xAA", 'ordf;' => "\xC2\xAA", 'ordm' => "\xC2\xBA", 'ordm;' => "\xC2\xBA", 'Oslash' => "\xC3\x98", 'oslash' => "\xC3\xB8", 'Oslash;' => "\xC3\x98", 'oslash;' => "\xC3\xB8", 'Otilde' => "\xC3\x95", 'otilde' => "\xC3\xB5", 'Otilde;' => "\xC3\x95", 'otilde;' => "\xC3\xB5", 'otimes;' => "\xE2\x8A\x97", 'Ouml' => "\xC3\x96", 'ouml' => "\xC3\xB6", 'Ouml;' => "\xC3\x96", 'ouml;' => "\xC3\xB6", 'para' => "\xC2\xB6", 'para;' => "\xC2\xB6", 'part;' => "\xE2\x88\x82", 'permil;' => "\xE2\x80\xB0", 'perp;' => "\xE2\x8A\xA5", 'Phi;' => "\xCE\xA6", 'phi;' => "\xCF\x86", 'Pi;' => "\xCE\xA0", 'pi;' => "\xCF\x80", 'piv;' => "\xCF\x96", 'plusmn' => "\xC2\xB1", 'plusmn;' => "\xC2\xB1", 'pound' => "\xC2\xA3", 'pound;' => "\xC2\xA3", 'Prime;' => "\xE2\x80\xB3", 'prime;' => "\xE2\x80\xB2", 'prod;' => "\xE2\x88\x8F", 'prop;' => "\xE2\x88\x9D", 'Psi;' => "\xCE\xA8", 'psi;' => "\xCF\x88", 'QUOT' => "\x22", 'quot' => "\x22", 'QUOT;' => "\x22", 'quot;' => "\x22", 'radic;' => "\xE2\x88\x9A", 'rang;' => "\xE3\x80\x89", 'raquo' => "\xC2\xBB", 'raquo;' => "\xC2\xBB", 'rArr;' => "\xE2\x87\x92", 'rarr;' => "\xE2\x86\x92", 'rceil;' => "\xE2\x8C\x89", 'rdquo;' => "\xE2\x80\x9D", 'real;' => "\xE2\x84\x9C", 'REG' => "\xC2\xAE", 'reg' => "\xC2\xAE", 'REG;' => "\xC2\xAE", 'reg;' => "\xC2\xAE", 'rfloor;' => "\xE2\x8C\x8B", 'Rho;' => "\xCE\xA1", 'rho;' => "\xCF\x81", 'rlm;' => "\xE2\x80\x8F", 'rsaquo;' => "\xE2\x80\xBA", 'rsquo;' => "\xE2\x80\x99", 'sbquo;' => "\xE2\x80\x9A", 'Scaron;' => "\xC5\xA0", 'scaron;' => "\xC5\xA1", 'sdot;' => "\xE2\x8B\x85", 'sect' => "\xC2\xA7", 'sect;' => "\xC2\xA7", 'shy' => "\xC2\xAD", 'shy;' => "\xC2\xAD", 'Sigma;' => "\xCE\xA3", 'sigma;' => "\xCF\x83", 'sigmaf;' => "\xCF\x82", 'sim;' => "\xE2\x88\xBC", 'spades;' => "\xE2\x99\xA0", 'sub;' => "\xE2\x8A\x82", 'sube;' => "\xE2\x8A\x86", 'sum;' => "\xE2\x88\x91", 'sup;' => "\xE2\x8A\x83", 'sup1' => "\xC2\xB9", 'sup1;' => "\xC2\xB9", 'sup2' => "\xC2\xB2", 'sup2;' => "\xC2\xB2", 'sup3' => "\xC2\xB3", 'sup3;' => "\xC2\xB3", 'supe;' => "\xE2\x8A\x87", 'szlig' => "\xC3\x9F", 'szlig;' => "\xC3\x9F", 'Tau;' => "\xCE\xA4", 'tau;' => "\xCF\x84", 'there4;' => "\xE2\x88\xB4", 'Theta;' => "\xCE\x98", 'theta;' => "\xCE\xB8", 'thetasym;' => "\xCF\x91", 'thinsp;' => "\xE2\x80\x89", 'THORN' => "\xC3\x9E", 'thorn' => "\xC3\xBE", 'THORN;' => "\xC3\x9E", 'thorn;' => "\xC3\xBE", 'tilde;' => "\xCB\x9C", 'times' => "\xC3\x97", 'times;' => "\xC3\x97", 'TRADE;' => "\xE2\x84\xA2", 'trade;' => "\xE2\x84\xA2", 'Uacute' => "\xC3\x9A", 'uacute' => "\xC3\xBA", 'Uacute;' => "\xC3\x9A", 'uacute;' => "\xC3\xBA", 'uArr;' => "\xE2\x87\x91", 'uarr;' => "\xE2\x86\x91", 'Ucirc' => "\xC3\x9B", 'ucirc' => "\xC3\xBB", 'Ucirc;' => "\xC3\x9B", 'ucirc;' => "\xC3\xBB", 'Ugrave' => "\xC3\x99", 'ugrave' => "\xC3\xB9", 'Ugrave;' => "\xC3\x99", 'ugrave;' => "\xC3\xB9", 'uml' => "\xC2\xA8", 'uml;' => "\xC2\xA8", 'upsih;' => "\xCF\x92", 'Upsilon;' => "\xCE\xA5", 'upsilon;' => "\xCF\x85", 'Uuml' => "\xC3\x9C", 'uuml' => "\xC3\xBC", 'Uuml;' => "\xC3\x9C", 'uuml;' => "\xC3\xBC", 'weierp;' => "\xE2\x84\x98", 'Xi;' => "\xCE\x9E", 'xi;' => "\xCE\xBE", 'Yacute' => "\xC3\x9D", 'yacute' => "\xC3\xBD", 'Yacute;' => "\xC3\x9D", 'yacute;' => "\xC3\xBD", 'yen' => "\xC2\xA5", 'yen;' => "\xC2\xA5", 'yuml' => "\xC3\xBF", 'Yuml;' => "\xC5\xB8", 'yuml;' => "\xC3\xBF", 'Zeta;' => "\xCE\x96", 'zeta;' => "\xCE\xB6", 'zwj;' => "\xE2\x80\x8D", 'zwnj;' => "\xE2\x80\x8C"); - - for ($i = 0, $match = null; $i < 9 && $this->consume() !== false; $i++) - { - $consumed = substr($this->consumed, 1); - if (isset($entities[$consumed])) - { - $match = $consumed; - } - } - - if ($match !== null) - { - $this->data = substr_replace($this->data, $entities[$match], $this->position - strlen($consumed) - 1, strlen($match) + 1); - $this->position += strlen($entities[$match]) - strlen($consumed) - 1; - } - break; - } - } -} - -/** - * IRI parser/serialiser - * - * @package SimplePie - */ -class SimplePie_IRI -{ - /** - * Scheme - * - * @access private - * @var string - */ - var $scheme; - - /** - * User Information - * - * @access private - * @var string - */ - var $userinfo; - - /** - * Host - * - * @access private - * @var string - */ - var $host; - - /** - * Port - * - * @access private - * @var string - */ - var $port; - - /** - * Path - * - * @access private - * @var string - */ - var $path; - - /** - * Query - * - * @access private - * @var string - */ - var $query; - - /** - * Fragment - * - * @access private - * @var string - */ - var $fragment; - - /** - * Whether the object represents a valid IRI - * - * @access private - * @var array - */ - var $valid = array(); - - /** - * Return the entire IRI when you try and read the object as a string - * - * @access public - * @return string - */ - function __toString() - { - return $this->get_iri(); - } - - /** - * Create a new IRI object, from a specified string - * - * @access public - * @param string $iri - * @return SimplePie_IRI - */ - function SimplePie_IRI($iri) - { - $iri = (string) $iri; - if ($iri !== '') - { - $parsed = $this->parse_iri($iri); - $this->set_scheme($parsed['scheme']); - $this->set_authority($parsed['authority']); - $this->set_path($parsed['path']); - $this->set_query($parsed['query']); - $this->set_fragment($parsed['fragment']); - } - } - - /** - * Create a new IRI object by resolving a relative IRI - * - * @static - * @access public - * @param SimplePie_IRI $base Base IRI - * @param string $relative Relative IRI - * @return SimplePie_IRI - */ - function absolutize($base, $relative) - { - $relative = (string) $relative; - if ($relative !== '') - { - $relative = new SimplePie_IRI($relative); - if ($relative->get_scheme() !== null) - { - $target = $relative; - } - elseif ($base->get_iri() !== null) - { - if ($relative->get_authority() !== null) - { - $target = $relative; - $target->set_scheme($base->get_scheme()); - } - else - { - $target = new SimplePie_IRI(''); - $target->set_scheme($base->get_scheme()); - $target->set_userinfo($base->get_userinfo()); - $target->set_host($base->get_host()); - $target->set_port($base->get_port()); - if ($relative->get_path() !== null) - { - if (strpos($relative->get_path(), '/') === 0) - { - $target->set_path($relative->get_path()); - } - elseif (($base->get_userinfo() !== null || $base->get_host() !== null || $base->get_port() !== null) && $base->get_path() === null) - { - $target->set_path('/' . $relative->get_path()); - } - elseif (($last_segment = strrpos($base->get_path(), '/')) !== false) - { - $target->set_path(substr($base->get_path(), 0, $last_segment + 1) . $relative->get_path()); - } - else - { - $target->set_path($relative->get_path()); - } - $target->set_query($relative->get_query()); - } - else - { - $target->set_path($base->get_path()); - if ($relative->get_query() !== null) - { - $target->set_query($relative->get_query()); - } - elseif ($base->get_query() !== null) - { - $target->set_query($base->get_query()); - } - } - } - $target->set_fragment($relative->get_fragment()); - } - else - { - // No base URL, just return the relative URL - $target = $relative; - } - } - else - { - $target = $base; - } - return $target; - } - - /** - * Parse an IRI into scheme/authority/path/query/fragment segments - * - * @access private - * @param string $iri - * @return array - */ - function parse_iri($iri) - { - preg_match('/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/', $iri, $match); - for ($i = count($match); $i <= 9; $i++) - { - $match[$i] = ''; - } - return array('scheme' => $match[2], 'authority' => $match[4], 'path' => $match[5], 'query' => $match[7], 'fragment' => $match[9]); - } - - /** - * Remove dot segments from a path - * - * @access private - * @param string $input - * @return string - */ - function remove_dot_segments($input) - { - $output = ''; - while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input === '.' || $input === '..') - { - // A: If the input buffer begins with a prefix of "../" or "./", then remove that prefix from the input buffer; otherwise, - if (strpos($input, '../') === 0) - { - $input = substr($input, 3); - } - elseif (strpos($input, './') === 0) - { - $input = substr($input, 2); - } - // B: if the input buffer begins with a prefix of "/./" or "/.", where "." is a complete path segment, then replace that prefix with "/" in the input buffer; otherwise, - elseif (strpos($input, '/./') === 0) - { - $input = substr_replace($input, '/', 0, 3); - } - elseif ($input === '/.') - { - $input = '/'; - } - // C: if the input buffer begins with a prefix of "/../" or "/..", where ".." is a complete path segment, then replace that prefix with "/" in the input buffer and remove the last segment and its preceding "/" (if any) from the output buffer; otherwise, - elseif (strpos($input, '/../') === 0) - { - $input = substr_replace($input, '/', 0, 4); - $output = substr_replace($output, '', strrpos($output, '/')); - } - elseif ($input === '/..') - { - $input = '/'; - $output = substr_replace($output, '', strrpos($output, '/')); - } - // D: if the input buffer consists only of "." or "..", then remove that from the input buffer; otherwise, - elseif ($input === '.' || $input === '..') - { - $input = ''; - } - // E: move the first path segment in the input buffer to the end of the output buffer, including the initial "/" character (if any) and any subsequent characters up to, but not including, the next "/" character or the end of the input buffer - elseif (($pos = strpos($input, '/', 1)) !== false) - { - $output .= substr($input, 0, $pos); - $input = substr_replace($input, '', 0, $pos); - } - else - { - $output .= $input; - $input = ''; - } - } - return $output . $input; - } - - /** - * Replace invalid character with percent encoding - * - * @access private - * @param string $string Input string - * @param string $valid_chars Valid characters - * @param int $case Normalise case - * @return string - */ - function replace_invalid_with_pct_encoding($string, $valid_chars, $case = SIMPLEPIE_SAME_CASE) - { - // Normalise case - if ($case & SIMPLEPIE_LOWERCASE) - { - $string = strtolower($string); - } - elseif ($case & SIMPLEPIE_UPPERCASE) - { - $string = strtoupper($string); - } - - // Store position and string length (to avoid constantly recalculating this) - $position = 0; - $strlen = strlen($string); - - // Loop as long as we have invalid characters, advancing the position to the next invalid character - while (($position += strspn($string, $valid_chars, $position)) < $strlen) - { - // If we have a % character - if ($string[$position] === '%') - { - // If we have a pct-encoded section - if ($position + 2 < $strlen && strspn($string, '0123456789ABCDEFabcdef', $position + 1, 2) === 2) - { - // Get the the represented character - $chr = chr(hexdec(substr($string, $position + 1, 2))); - - // If the character is valid, replace the pct-encoded with the actual character while normalising case - if (strpos($valid_chars, $chr) !== false) - { - if ($case & SIMPLEPIE_LOWERCASE) - { - $chr = strtolower($chr); - } - elseif ($case & SIMPLEPIE_UPPERCASE) - { - $chr = strtoupper($chr); - } - $string = substr_replace($string, $chr, $position, 3); - $strlen -= 2; - $position++; - } - - // Otherwise just normalise the pct-encoded to uppercase - else - { - $string = substr_replace($string, strtoupper(substr($string, $position + 1, 2)), $position + 1, 2); - $position += 3; - } - } - // If we don't have a pct-encoded section, just replace the % with its own esccaped form - else - { - $string = substr_replace($string, '%25', $position, 1); - $strlen += 2; - $position += 3; - } - } - // If we have an invalid character, change into its pct-encoded form - else - { - $replacement = sprintf("%%%02X", ord($string[$position])); - $string = str_replace($string[$position], $replacement, $string); - $strlen = strlen($string); - } - } - return $string; - } - - /** - * Check if the object represents a valid IRI - * - * @access public - * @return bool - */ - function is_valid() - { - return array_sum($this->valid) === count($this->valid); - } - - /** - * Set the scheme. Returns true on success, false on failure (if there are - * any invalid characters). - * - * @access public - * @param string $scheme - * @return bool - */ - function set_scheme($scheme) - { - if ($scheme === null || $scheme === '') - { - $this->scheme = null; - } - else - { - $len = strlen($scheme); - switch (true) - { - case $len > 1: - if (!strspn($scheme, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-.', 1)) - { - $this->scheme = null; - $this->valid[__FUNCTION__] = false; - return false; - } - - case $len > 0: - if (!strspn($scheme, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', 0, 1)) - { - $this->scheme = null; - $this->valid[__FUNCTION__] = false; - return false; - } - } - $this->scheme = strtolower($scheme); - } - $this->valid[__FUNCTION__] = true; - return true; - } - - /** - * Set the authority. Returns true on success, false on failure (if there are - * any invalid characters). - * - * @access public - * @param string $authority - * @return bool - */ - function set_authority($authority) - { - if (($userinfo_end = strrpos($authority, '@')) !== false) - { - $userinfo = substr($authority, 0, $userinfo_end); - $authority = substr($authority, $userinfo_end + 1); - } - else - { - $userinfo = null; - } - - if (($port_start = strpos($authority, ':')) !== false) - { - $port = substr($authority, $port_start + 1); - $authority = substr($authority, 0, $port_start); - } - else - { - $port = null; - } - - return $this->set_userinfo($userinfo) && $this->set_host($authority) && $this->set_port($port); - } - - /** - * Set the userinfo. - * - * @access public - * @param string $userinfo - * @return bool - */ - function set_userinfo($userinfo) - { - if ($userinfo === null || $userinfo === '') - { - $this->userinfo = null; - } - else - { - $this->userinfo = $this->replace_invalid_with_pct_encoding($userinfo, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$&\'()*+,;=:'); - } - $this->valid[__FUNCTION__] = true; - return true; - } - - /** - * Set the host. Returns true on success, false on failure (if there are - * any invalid characters). - * - * @access public - * @param string $host - * @return bool - */ - function set_host($host) - { - if ($host === null || $host === '') - { - $this->host = null; - $this->valid[__FUNCTION__] = true; - return true; - } - elseif ($host[0] === '[' && substr($host, -1) === ']') - { - if (Net_IPv6::checkIPv6(substr($host, 1, -1))) - { - $this->host = $host; - $this->valid[__FUNCTION__] = true; - return true; - } - else - { - $this->host = null; - $this->valid[__FUNCTION__] = false; - return false; - } - } - else - { - $this->host = $this->replace_invalid_with_pct_encoding($host, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$&\'()*+,;=', SIMPLEPIE_LOWERCASE); - $this->valid[__FUNCTION__] = true; - return true; - } - } - - /** - * Set the port. Returns true on success, false on failure (if there are - * any invalid characters). - * - * @access public - * @param string $port - * @return bool - */ - function set_port($port) - { - if ($port === null || $port === '') - { - $this->port = null; - $this->valid[__FUNCTION__] = true; - return true; - } - elseif (strspn($port, '0123456789') === strlen($port)) - { - $this->port = (int) $port; - $this->valid[__FUNCTION__] = true; - return true; - } - else - { - $this->port = null; - $this->valid[__FUNCTION__] = false; - return false; - } - } - - /** - * Set the path. - * - * @access public - * @param string $path - * @return bool - */ - function set_path($path) - { - if ($path === null || $path === '') - { - $this->path = null; - $this->valid[__FUNCTION__] = true; - return true; - } - elseif (substr($path, 0, 2) === '//' && $this->userinfo === null && $this->host === null && $this->port === null) - { - $this->path = null; - $this->valid[__FUNCTION__] = false; - return false; - } - else - { - $this->path = $this->replace_invalid_with_pct_encoding($path, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$&\'()*+,;=@/'); - if ($this->scheme !== null) - { - $this->path = $this->remove_dot_segments($this->path); - } - $this->valid[__FUNCTION__] = true; - return true; - } - } - - /** - * Set the query. - * - * @access public - * @param string $query - * @return bool - */ - function set_query($query) - { - if ($query === null || $query === '') - { - $this->query = null; - } - else - { - $this->query = $this->replace_invalid_with_pct_encoding($query, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$\'()*+,;:@/?'); - } - $this->valid[__FUNCTION__] = true; - return true; - } - - /** - * Set the fragment. - * - * @access public - * @param string $fragment - * @return bool - */ - function set_fragment($fragment) - { - if ($fragment === null || $fragment === '') - { - $this->fragment = null; - } - else - { - $this->fragment = $this->replace_invalid_with_pct_encoding($fragment, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$&\'()*+,;=:@/?'); - } - $this->valid[__FUNCTION__] = true; - return true; - } - - /** - * Get the complete IRI - * - * @access public - * @return string - */ - function get_iri() - { - $iri = ''; - if ($this->scheme !== null) - { - $iri .= $this->scheme . ':'; - } - if (($authority = $this->get_authority()) !== null) - { - $iri .= '//' . $authority; - } - if ($this->path !== null) - { - $iri .= $this->path; - } - if ($this->query !== null) - { - $iri .= '?' . $this->query; - } - if ($this->fragment !== null) - { - $iri .= '#' . $this->fragment; - } - - if ($iri !== '') - { - return $iri; - } - else - { - return null; - } - } - - /** - * Get the scheme - * - * @access public - * @return string - */ - function get_scheme() - { - return $this->scheme; - } - - /** - * Get the complete authority - * - * @access public - * @return string - */ - function get_authority() - { - $authority = ''; - if ($this->userinfo !== null) - { - $authority .= $this->userinfo . '@'; - } - if ($this->host !== null) - { - $authority .= $this->host; - } - if ($this->port !== null) - { - $authority .= ':' . $this->port; - } - - if ($authority !== '') - { - return $authority; - } - else - { - return null; - } - } - - /** - * Get the user information - * - * @access public - * @return string - */ - function get_userinfo() - { - return $this->userinfo; - } - - /** - * Get the host - * - * @access public - * @return string - */ - function get_host() - { - return $this->host; - } - - /** - * Get the port - * - * @access public - * @return string - */ - function get_port() - { - return $this->port; - } - - /** - * Get the path - * - * @access public - * @return string - */ - function get_path() - { - return $this->path; - } - - /** - * Get the query - * - * @access public - * @return string - */ - function get_query() - { - return $this->query; - } - - /** - * Get the fragment - * - * @access public - * @return string - */ - function get_fragment() - { - return $this->fragment; - } -} - -/** - * Class to validate and to work with IPv6 addresses. - * - * @package SimplePie - * @copyright 2003-2005 The PHP Group - * @license http://www.opensource.org/licenses/bsd-license.php - * @link http://pear.php.net/package/Net_IPv6 - * @author Alexander Merz - * @author elfrink at introweb dot nl - * @author Josh Peck - * @author Geoffrey Sneddon - */ -class SimplePie_Net_IPv6 -{ - /** - * Removes a possible existing netmask specification of an IP address. - * - * @param string $ip the (compressed) IP as Hex representation - * @return string the IP the without netmask - * @since 1.1.0 - * @access public - * @static - */ - function removeNetmaskSpec($ip) - { - if (strpos($ip, '/') !== false) - { - list($addr, $nm) = explode('/', $ip); - } - else - { - $addr = $ip; - } - return $addr; - } - - /** - * Uncompresses an IPv6 address - * - * RFC 2373 allows you to compress zeros in an address to '::'. This - * function expects an valid IPv6 address and expands the '::' to - * the required zeros. - * - * Example: FF01::101 -> FF01:0:0:0:0:0:0:101 - * ::1 -> 0:0:0:0:0:0:0:1 - * - * @access public - * @static - * @param string $ip a valid IPv6-address (hex format) - * @return string the uncompressed IPv6-address (hex format) - */ - function Uncompress($ip) - { - $uip = SimplePie_Net_IPv6::removeNetmaskSpec($ip); - $c1 = -1; - $c2 = -1; - if (strpos($ip, '::') !== false) - { - list($ip1, $ip2) = explode('::', $ip); - if ($ip1 === '') - { - $c1 = -1; - } - else - { - $pos = 0; - if (($pos = substr_count($ip1, ':')) > 0) - { - $c1 = $pos; - } - else - { - $c1 = 0; - } - } - if ($ip2 === '') - { - $c2 = -1; - } - else - { - $pos = 0; - if (($pos = substr_count($ip2, ':')) > 0) - { - $c2 = $pos; - } - else - { - $c2 = 0; - } - } - if (strstr($ip2, '.')) - { - $c2++; - } - // :: - if ($c1 === -1 && $c2 === -1) - { - $uip = '0:0:0:0:0:0:0:0'; - } - // ::xxx - else if ($c1 === -1) - { - $fill = str_repeat('0:', 7 - $c2); - $uip = str_replace('::', $fill, $uip); - } - // xxx:: - else if ($c2 === -1) - { - $fill = str_repeat(':0', 7 - $c1); - $uip = str_replace('::', $fill, $uip); - } - // xxx::xxx - else - { - $fill = str_repeat(':0:', 6 - $c2 - $c1); - $uip = str_replace('::', $fill, $uip); - $uip = str_replace('::', ':', $uip); - } - } - return $uip; - } - - /** - * Splits an IPv6 address into the IPv6 and a possible IPv4 part - * - * RFC 2373 allows you to note the last two parts of an IPv6 address as - * an IPv4 compatible address - * - * Example: 0:0:0:0:0:0:13.1.68.3 - * 0:0:0:0:0:FFFF:129.144.52.38 - * - * @access public - * @static - * @param string $ip a valid IPv6-address (hex format) - * @return array [0] contains the IPv6 part, [1] the IPv4 part (hex format) - */ - function SplitV64($ip) - { - $ip = SimplePie_Net_IPv6::Uncompress($ip); - if (strstr($ip, '.')) - { - $pos = strrpos($ip, ':'); - $ip[$pos] = '_'; - $ipPart = explode('_', $ip); - return $ipPart; - } - else - { - return array($ip, ''); - } - } - - /** - * Checks an IPv6 address - * - * Checks if the given IP is IPv6-compatible - * - * @access public - * @static - * @param string $ip a valid IPv6-address - * @return bool true if $ip is an IPv6 address - */ - function checkIPv6($ip) - { - $ipPart = SimplePie_Net_IPv6::SplitV64($ip); - $count = 0; - if (!empty($ipPart[0])) - { - $ipv6 = explode(':', $ipPart[0]); - for ($i = 0; $i < count($ipv6); $i++) - { - $dec = hexdec($ipv6[$i]); - $hex = strtoupper(preg_replace('/^[0]{1,3}(.*[0-9a-fA-F])$/', '\\1', $ipv6[$i])); - if ($ipv6[$i] >= 0 && $dec <= 65535 && $hex === strtoupper(dechex($dec))) - { - $count++; - } - } - if ($count === 8) - { - return true; - } - elseif ($count === 6 && !empty($ipPart[1])) - { - $ipv4 = explode('.', $ipPart[1]); - $count = 0; - foreach ($ipv4 as $ipv4_part) - { - if ($ipv4_part >= 0 && $ipv4_part <= 255 && preg_match('/^\d{1,3}$/', $ipv4_part)) - { - $count++; - } - } - if ($count === 4) - { - return true; - } - } - else - { - return false; - } - - } - else - { - return false; - } - } -} - -/** - * Date Parser - * - * @package SimplePie - */ -class SimplePie_Parse_Date -{ - /** - * Input data - * - * @access protected - * @var string - */ - var $date; - - /** - * List of days, calendar day name => ordinal day number in the week - * - * @access protected - * @var array - */ - var $day = array( - // English - 'mon' => 1, - 'monday' => 1, - 'tue' => 2, - 'tuesday' => 2, - 'wed' => 3, - 'wednesday' => 3, - 'thu' => 4, - 'thursday' => 4, - 'fri' => 5, - 'friday' => 5, - 'sat' => 6, - 'saturday' => 6, - 'sun' => 7, - 'sunday' => 7, - // Dutch - 'maandag' => 1, - 'dinsdag' => 2, - 'woensdag' => 3, - 'donderdag' => 4, - 'vrijdag' => 5, - 'zaterdag' => 6, - 'zondag' => 7, - // French - 'lundi' => 1, - 'mardi' => 2, - 'mercredi' => 3, - 'jeudi' => 4, - 'vendredi' => 5, - 'samedi' => 6, - 'dimanche' => 7, - // German - 'montag' => 1, - 'dienstag' => 2, - 'mittwoch' => 3, - 'donnerstag' => 4, - 'freitag' => 5, - 'samstag' => 6, - 'sonnabend' => 6, - 'sonntag' => 7, - // Italian - 'lunedì' => 1, - 'martedì' => 2, - 'mercoledì' => 3, - 'giovedì' => 4, - 'venerdì' => 5, - 'sabato' => 6, - 'domenica' => 7, - // Spanish - 'lunes' => 1, - 'martes' => 2, - 'miércoles' => 3, - 'jueves' => 4, - 'viernes' => 5, - 'sábado' => 6, - 'domingo' => 7, - // Finnish - 'maanantai' => 1, - 'tiistai' => 2, - 'keskiviikko' => 3, - 'torstai' => 4, - 'perjantai' => 5, - 'lauantai' => 6, - 'sunnuntai' => 7, - // Hungarian - 'hétfő' => 1, - 'kedd' => 2, - 'szerda' => 3, - 'csütörtok' => 4, - 'péntek' => 5, - 'szombat' => 6, - 'vasárnap' => 7, - // Greek - 'Δευ' => 1, - 'Τρι' => 2, - 'Τετ' => 3, - 'Πεμ' => 4, - 'Παρ' => 5, - 'Σαβ' => 6, - 'Κυρ' => 7, - ); - - /** - * List of months, calendar month name => calendar month number - * - * @access protected - * @var array - */ - var $month = array( - // English - 'jan' => 1, - 'january' => 1, - 'feb' => 2, - 'february' => 2, - 'mar' => 3, - 'march' => 3, - 'apr' => 4, - 'april' => 4, - 'may' => 5, - // No long form of May - 'jun' => 6, - 'june' => 6, - 'jul' => 7, - 'july' => 7, - 'aug' => 8, - 'august' => 8, - 'sep' => 9, - 'september' => 8, - 'oct' => 10, - 'october' => 10, - 'nov' => 11, - 'november' => 11, - 'dec' => 12, - 'december' => 12, - // Dutch - 'januari' => 1, - 'februari' => 2, - 'maart' => 3, - 'april' => 4, - 'mei' => 5, - 'juni' => 6, - 'juli' => 7, - 'augustus' => 8, - 'september' => 9, - 'oktober' => 10, - 'november' => 11, - 'december' => 12, - // French - 'janvier' => 1, - 'février' => 2, - 'mars' => 3, - 'avril' => 4, - 'mai' => 5, - 'juin' => 6, - 'juillet' => 7, - 'août' => 8, - 'septembre' => 9, - 'octobre' => 10, - 'novembre' => 11, - 'décembre' => 12, - // German - 'januar' => 1, - 'februar' => 2, - 'märz' => 3, - 'april' => 4, - 'mai' => 5, - 'juni' => 6, - 'juli' => 7, - 'august' => 8, - 'september' => 9, - 'oktober' => 10, - 'november' => 11, - 'dezember' => 12, - // Italian - 'gennaio' => 1, - 'febbraio' => 2, - 'marzo' => 3, - 'aprile' => 4, - 'maggio' => 5, - 'giugno' => 6, - 'luglio' => 7, - 'agosto' => 8, - 'settembre' => 9, - 'ottobre' => 10, - 'novembre' => 11, - 'dicembre' => 12, - // Spanish - 'enero' => 1, - 'febrero' => 2, - 'marzo' => 3, - 'abril' => 4, - 'mayo' => 5, - 'junio' => 6, - 'julio' => 7, - 'agosto' => 8, - 'septiembre' => 9, - 'setiembre' => 9, - 'octubre' => 10, - 'noviembre' => 11, - 'diciembre' => 12, - // Finnish - 'tammikuu' => 1, - 'helmikuu' => 2, - 'maaliskuu' => 3, - 'huhtikuu' => 4, - 'toukokuu' => 5, - 'kesäkuu' => 6, - 'heinäkuu' => 7, - 'elokuu' => 8, - 'suuskuu' => 9, - 'lokakuu' => 10, - 'marras' => 11, - 'joulukuu' => 12, - // Hungarian - 'január' => 1, - 'február' => 2, - 'március' => 3, - 'április' => 4, - 'május' => 5, - 'június' => 6, - 'július' => 7, - 'augusztus' => 8, - 'szeptember' => 9, - 'október' => 10, - 'november' => 11, - 'december' => 12, - // Greek - 'Ιαν' => 1, - 'Φεβ' => 2, - 'Μάώ' => 3, - 'Μαώ' => 3, - 'Απρ' => 4, - 'Μάι' => 5, - 'Μαϊ' => 5, - 'Μαι' => 5, - 'Ιούν' => 6, - 'Ιον' => 6, - 'Ιούλ' => 7, - 'Ιολ' => 7, - 'Αύγ' => 8, - 'Αυγ' => 8, - 'Σεπ' => 9, - 'Οκτ' => 10, - 'Νοέ' => 11, - 'Δεκ' => 12, - ); - - /** - * List of timezones, abbreviation => offset from UTC - * - * @access protected - * @var array - */ - var $timezone = array( - 'ACDT' => 37800, - 'ACIT' => 28800, - 'ACST' => 34200, - 'ACT' => -18000, - 'ACWDT' => 35100, - 'ACWST' => 31500, - 'AEDT' => 39600, - 'AEST' => 36000, - 'AFT' => 16200, - 'AKDT' => -28800, - 'AKST' => -32400, - 'AMDT' => 18000, - 'AMT' => -14400, - 'ANAST' => 46800, - 'ANAT' => 43200, - 'ART' => -10800, - 'AZOST' => -3600, - 'AZST' => 18000, - 'AZT' => 14400, - 'BIOT' => 21600, - 'BIT' => -43200, - 'BOT' => -14400, - 'BRST' => -7200, - 'BRT' => -10800, - 'BST' => 3600, - 'BTT' => 21600, - 'CAST' => 18000, - 'CAT' => 7200, - 'CCT' => 23400, - 'CDT' => -18000, - 'CEDT' => 7200, - 'CET' => 3600, - 'CGST' => -7200, - 'CGT' => -10800, - 'CHADT' => 49500, - 'CHAST' => 45900, - 'CIST' => -28800, - 'CKT' => -36000, - 'CLDT' => -10800, - 'CLST' => -14400, - 'COT' => -18000, - 'CST' => -21600, - 'CVT' => -3600, - 'CXT' => 25200, - 'DAVT' => 25200, - 'DTAT' => 36000, - 'EADT' => -18000, - 'EAST' => -21600, - 'EAT' => 10800, - 'ECT' => -18000, - 'EDT' => -14400, - 'EEST' => 10800, - 'EET' => 7200, - 'EGT' => -3600, - 'EKST' => 21600, - 'EST' => -18000, - 'FJT' => 43200, - 'FKDT' => -10800, - 'FKST' => -14400, - 'FNT' => -7200, - 'GALT' => -21600, - 'GEDT' => 14400, - 'GEST' => 10800, - 'GFT' => -10800, - 'GILT' => 43200, - 'GIT' => -32400, - 'GST' => 14400, - 'GST' => -7200, - 'GYT' => -14400, - 'HAA' => -10800, - 'HAC' => -18000, - 'HADT' => -32400, - 'HAE' => -14400, - 'HAP' => -25200, - 'HAR' => -21600, - 'HAST' => -36000, - 'HAT' => -9000, - 'HAY' => -28800, - 'HKST' => 28800, - 'HMT' => 18000, - 'HNA' => -14400, - 'HNC' => -21600, - 'HNE' => -18000, - 'HNP' => -28800, - 'HNR' => -25200, - 'HNT' => -12600, - 'HNY' => -32400, - 'IRDT' => 16200, - 'IRKST' => 32400, - 'IRKT' => 28800, - 'IRST' => 12600, - 'JFDT' => -10800, - 'JFST' => -14400, - 'JST' => 32400, - 'KGST' => 21600, - 'KGT' => 18000, - 'KOST' => 39600, - 'KOVST' => 28800, - 'KOVT' => 25200, - 'KRAST' => 28800, - 'KRAT' => 25200, - 'KST' => 32400, - 'LHDT' => 39600, - 'LHST' => 37800, - 'LINT' => 50400, - 'LKT' => 21600, - 'MAGST' => 43200, - 'MAGT' => 39600, - 'MAWT' => 21600, - 'MDT' => -21600, - 'MESZ' => 7200, - 'MEZ' => 3600, - 'MHT' => 43200, - 'MIT' => -34200, - 'MNST' => 32400, - 'MSDT' => 14400, - 'MSST' => 10800, - 'MST' => -25200, - 'MUT' => 14400, - 'MVT' => 18000, - 'MYT' => 28800, - 'NCT' => 39600, - 'NDT' => -9000, - 'NFT' => 41400, - 'NMIT' => 36000, - 'NOVST' => 25200, - 'NOVT' => 21600, - 'NPT' => 20700, - 'NRT' => 43200, - 'NST' => -12600, - 'NUT' => -39600, - 'NZDT' => 46800, - 'NZST' => 43200, - 'OMSST' => 25200, - 'OMST' => 21600, - 'PDT' => -25200, - 'PET' => -18000, - 'PETST' => 46800, - 'PETT' => 43200, - 'PGT' => 36000, - 'PHOT' => 46800, - 'PHT' => 28800, - 'PKT' => 18000, - 'PMDT' => -7200, - 'PMST' => -10800, - 'PONT' => 39600, - 'PST' => -28800, - 'PWT' => 32400, - 'PYST' => -10800, - 'PYT' => -14400, - 'RET' => 14400, - 'ROTT' => -10800, - 'SAMST' => 18000, - 'SAMT' => 14400, - 'SAST' => 7200, - 'SBT' => 39600, - 'SCDT' => 46800, - 'SCST' => 43200, - 'SCT' => 14400, - 'SEST' => 3600, - 'SGT' => 28800, - 'SIT' => 28800, - 'SRT' => -10800, - 'SST' => -39600, - 'SYST' => 10800, - 'SYT' => 7200, - 'TFT' => 18000, - 'THAT' => -36000, - 'TJT' => 18000, - 'TKT' => -36000, - 'TMT' => 18000, - 'TOT' => 46800, - 'TPT' => 32400, - 'TRUT' => 36000, - 'TVT' => 43200, - 'TWT' => 28800, - 'UYST' => -7200, - 'UYT' => -10800, - 'UZT' => 18000, - 'VET' => -14400, - 'VLAST' => 39600, - 'VLAT' => 36000, - 'VOST' => 21600, - 'VUT' => 39600, - 'WAST' => 7200, - 'WAT' => 3600, - 'WDT' => 32400, - 'WEST' => 3600, - 'WFT' => 43200, - 'WIB' => 25200, - 'WIT' => 32400, - 'WITA' => 28800, - 'WKST' => 18000, - 'WST' => 28800, - 'YAKST' => 36000, - 'YAKT' => 32400, - 'YAPT' => 36000, - 'YEKST' => 21600, - 'YEKT' => 18000, - ); - - /** - * Cached PCRE for SimplePie_Parse_Date::$day - * - * @access protected - * @var string - */ - var $day_pcre; - - /** - * Cached PCRE for SimplePie_Parse_Date::$month - * - * @access protected - * @var string - */ - var $month_pcre; - - /** - * Array of user-added callback methods - * - * @access private - * @var array - */ - var $built_in = array(); - - /** - * Array of user-added callback methods - * - * @access private - * @var array - */ - var $user = array(); - - /** - * Create new SimplePie_Parse_Date object, and set self::day_pcre, - * self::month_pcre, and self::built_in - * - * @access private - */ - function SimplePie_Parse_Date() - { - $this->day_pcre = '(' . implode(array_keys($this->day), '|') . ')'; - $this->month_pcre = '(' . implode(array_keys($this->month), '|') . ')'; - - static $cache; - if (!isset($cache[get_class($this)])) - { - $all_methods = get_class_methods($this); - - foreach ($all_methods as $method) - { - if (strtolower(substr($method, 0, 5)) === 'date_') - { - $cache[get_class($this)][] = $method; - } - } - } - - foreach ($cache[get_class($this)] as $method) - { - $this->built_in[] = $method; - } - } - - /** - * Get the object - * - * @access public - */ - function get() - { - static $object; - if (!$object) - { - $object = new SimplePie_Parse_Date; - } - return $object; - } - - /** - * Parse a date - * - * @final - * @access public - * @param string $date Date to parse - * @return int Timestamp corresponding to date string, or false on failure - */ - function parse($date) - { - foreach ($this->user as $method) - { - if (($returned = call_user_func($method, $date)) !== false) - { - return $returned; - } - } - - foreach ($this->built_in as $method) - { - if (($returned = call_user_func(array(&$this, $method), $date)) !== false) - { - return $returned; - } - } - - return false; - } - - /** - * Add a callback method to parse a date - * - * @final - * @access public - * @param callback $callback - */ - function add_callback($callback) - { - if (is_callable($callback)) - { - $this->user[] = $callback; - } - else - { - trigger_error('User-supplied function must be a valid callback', E_USER_WARNING); - } - } - - /** - * Parse a superset of W3C-DTF (allows hyphens and colons to be omitted, as - * well as allowing any of upper or lower case "T", horizontal tabs, or - * spaces to be used as the time seperator (including more than one)) - * - * @access protected - * @return int Timestamp - */ - function date_w3cdtf($date) - { - static $pcre; - if (!$pcre) - { - $year = '([0-9]{4})'; - $month = $day = $hour = $minute = $second = '([0-9]{2})'; - $decimal = '([0-9]*)'; - $zone = '(?:(Z)|([+\-])([0-9]{1,2}):?([0-9]{1,2}))'; - $pcre = '/^' . $year . '(?:-?' . $month . '(?:-?' . $day . '(?:[Tt\x09\x20]+' . $hour . '(?::?' . $minute . '(?::?' . $second . '(?:.' . $decimal . ')?)?)?' . $zone . ')?)?)?$/'; - } - if (preg_match($pcre, $date, $match)) - { - /* - Capturing subpatterns: - 1: Year - 2: Month - 3: Day - 4: Hour - 5: Minute - 6: Second - 7: Decimal fraction of a second - 8: Zulu - 9: Timezone ± - 10: Timezone hours - 11: Timezone minutes - */ - - // Fill in empty matches - for ($i = count($match); $i <= 3; $i++) - { - $match[$i] = '1'; - } - - for ($i = count($match); $i <= 7; $i++) - { - $match[$i] = '0'; - } - - // Numeric timezone - if (isset($match[9]) && $match[9] !== '') - { - $timezone = $match[10] * 3600; - $timezone += $match[11] * 60; - if ($match[9] === '-') - { - $timezone = 0 - $timezone; - } - } - else - { - $timezone = 0; - } - - // Convert the number of seconds to an integer, taking decimals into account - $second = round($match[6] + $match[7] / pow(10, strlen($match[7]))); - - return gmmktime($match[4], $match[5], $second, $match[2], $match[3], $match[1]) - $timezone; - } - else - { - return false; - } - } - - /** - * Remove RFC822 comments - * - * @access protected - * @param string $data Data to strip comments from - * @return string Comment stripped string - */ - function remove_rfc2822_comments($string) - { - $string = (string) $string; - $position = 0; - $length = strlen($string); - $depth = 0; - - $output = ''; - - while ($position < $length && ($pos = strpos($string, '(', $position)) !== false) - { - $output .= substr($string, $position, $pos - $position); - $position = $pos + 1; - if ($string[$pos - 1] !== '\\') - { - $depth++; - while ($depth && $position < $length) - { - $position += strcspn($string, '()', $position); - if ($string[$position - 1] === '\\') - { - $position++; - continue; - } - elseif (isset($string[$position])) - { - switch ($string[$position]) - { - case '(': - $depth++; - break; - - case ')': - $depth--; - break; - } - $position++; - } - else - { - break; - } - } - } - else - { - $output .= '('; - } - } - $output .= substr($string, $position); - - return $output; - } - - /** - * Parse RFC2822's date format - * - * @access protected - * @return int Timestamp - */ - function date_rfc2822($date) - { - static $pcre; - if (!$pcre) - { - $wsp = '[\x09\x20]'; - $fws = '(?:' . $wsp . '+|' . $wsp . '*(?:\x0D\x0A' . $wsp . '+)+)'; - $optional_fws = $fws . '?'; - $day_name = $this->day_pcre; - $month = $this->month_pcre; - $day = '([0-9]{1,2})'; - $hour = $minute = $second = '([0-9]{2})'; - $year = '([0-9]{2,4})'; - $num_zone = '([+\-])([0-9]{2})([0-9]{2})'; - $character_zone = '([A-Z]{1,5})'; - $zone = '(?:' . $num_zone . '|' . $character_zone . ')'; - $pcre = '/(?:' . $optional_fws . $day_name . $optional_fws . ',)?' . $optional_fws . $day . $fws . $month . $fws . $year . $fws . $hour . $optional_fws . ':' . $optional_fws . $minute . '(?:' . $optional_fws . ':' . $optional_fws . $second . ')?' . $fws . $zone . '/i'; - } - if (preg_match($pcre, $this->remove_rfc2822_comments($date), $match)) - { - /* - Capturing subpatterns: - 1: Day name - 2: Day - 3: Month - 4: Year - 5: Hour - 6: Minute - 7: Second - 8: Timezone ± - 9: Timezone hours - 10: Timezone minutes - 11: Alphabetic timezone - */ - - // Find the month number - $month = $this->month[strtolower($match[3])]; - - // Numeric timezone - if ($match[8] !== '') - { - $timezone = $match[9] * 3600; - $timezone += $match[10] * 60; - if ($match[8] === '-') - { - $timezone = 0 - $timezone; - } - } - // Character timezone - elseif (isset($this->timezone[strtoupper($match[11])])) - { - $timezone = $this->timezone[strtoupper($match[11])]; - } - // Assume everything else to be -0000 - else - { - $timezone = 0; - } - - // Deal with 2/3 digit years - if ($match[4] < 50) - { - $match[4] += 2000; - } - elseif ($match[4] < 1000) - { - $match[4] += 1900; - } - - // Second is optional, if it is empty set it to zero - if ($match[7] !== '') - { - $second = $match[7]; - } - else - { - $second = 0; - } - - return gmmktime($match[5], $match[6], $second, $month, $match[2], $match[4]) - $timezone; - } - else - { - return false; - } - } - - /** - * Parse RFC850's date format - * - * @access protected - * @return int Timestamp - */ - function date_rfc850($date) - { - static $pcre; - if (!$pcre) - { - $space = '[\x09\x20]+'; - $day_name = $this->day_pcre; - $month = $this->month_pcre; - $day = '([0-9]{1,2})'; - $year = $hour = $minute = $second = '([0-9]{2})'; - $zone = '([A-Z]{1,5})'; - $pcre = '/^' . $day_name . ',' . $space . $day . '-' . $month . '-' . $year . $space . $hour . ':' . $minute . ':' . $second . $space . $zone . '$/i'; - } - if (preg_match($pcre, $date, $match)) - { - /* - Capturing subpatterns: - 1: Day name - 2: Day - 3: Month - 4: Year - 5: Hour - 6: Minute - 7: Second - 8: Timezone - */ - - // Month - $month = $this->month[strtolower($match[3])]; - - // Character timezone - if (isset($this->timezone[strtoupper($match[8])])) - { - $timezone = $this->timezone[strtoupper($match[8])]; - } - // Assume everything else to be -0000 - else - { - $timezone = 0; - } - - // Deal with 2 digit year - if ($match[4] < 50) - { - $match[4] += 2000; - } - else - { - $match[4] += 1900; - } - - return gmmktime($match[5], $match[6], $match[7], $month, $match[2], $match[4]) - $timezone; - } - else - { - return false; - } - } - - /** - * Parse C99's asctime()'s date format - * - * @access protected - * @return int Timestamp - */ - function date_asctime($date) - { - static $pcre; - if (!$pcre) - { - $space = '[\x09\x20]+'; - $wday_name = $this->day_pcre; - $mon_name = $this->month_pcre; - $day = '([0-9]{1,2})'; - $hour = $sec = $min = '([0-9]{2})'; - $year = '([0-9]{4})'; - $terminator = '\x0A?\x00?'; - $pcre = '/^' . $wday_name . $space . $mon_name . $space . $day . $space . $hour . ':' . $min . ':' . $sec . $space . $year . $terminator . '$/i'; - } - if (preg_match($pcre, $date, $match)) - { - /* - Capturing subpatterns: - 1: Day name - 2: Month - 3: Day - 4: Hour - 5: Minute - 6: Second - 7: Year - */ - - $month = $this->month[strtolower($match[2])]; - return gmmktime($match[4], $match[5], $match[6], $month, $match[3], $match[7]); - } - else - { - return false; - } - } - - /** - * Parse dates using strtotime() - * - * @access protected - * @return int Timestamp - */ - function date_strtotime($date) - { - $strtotime = strtotime($date); - if ($strtotime === -1 || $strtotime === false) - { - return false; - } - else - { - return $strtotime; - } - } -} - -/** - * Content-type sniffing - * - * @package SimplePie - */ -class SimplePie_Content_Type_Sniffer -{ - /** - * File object - * - * @var SimplePie_File - * @access private - */ - var $file; - - /** - * Create an instance of the class with the input file - * - * @access public - * @param SimplePie_Content_Type_Sniffer $file Input file - */ - function SimplePie_Content_Type_Sniffer($file) - { - $this->file = $file; - } - - /** - * Get the Content-Type of the specified file - * - * @access public - * @return string Actual Content-Type - */ - function get_type() - { - if (isset($this->file->headers['content-type'])) - { - if (!isset($this->file->headers['content-encoding']) - && ($this->file->headers['content-type'] === 'text/plain' - || $this->file->headers['content-type'] === 'text/plain; charset=ISO-8859-1' - || $this->file->headers['content-type'] === 'text/plain; charset=iso-8859-1')) - { - return $this->text_or_binary(); - } - - if (($pos = strpos($this->file->headers['content-type'], ';')) !== false) - { - $official = substr($this->file->headers['content-type'], 0, $pos); - } - else - { - $official = $this->file->headers['content-type']; - } - $official = strtolower($official); - - if ($official === 'unknown/unknown' - || $official === 'application/unknown') - { - return $this->unknown(); - } - elseif (substr($official, -4) === '+xml' - || $official === 'text/xml' - || $official === 'application/xml') - { - return $official; - } - elseif (substr($official, 0, 6) === 'image/') - { - if ($return = $this->image()) - { - return $return; - } - else - { - return $official; - } - } - elseif ($official === 'text/html') - { - return $this->feed_or_html(); - } - else - { - return $official; - } - } - else - { - return $this->unknown(); - } - } - - /** - * Sniff text or binary - * - * @access private - * @return string Actual Content-Type - */ - function text_or_binary() - { - if (substr($this->file->body, 0, 2) === "\xFE\xFF" - || substr($this->file->body, 0, 2) === "\xFF\xFE" - || substr($this->file->body, 0, 4) === "\x00\x00\xFE\xFF" - || substr($this->file->body, 0, 3) === "\xEF\xBB\xBF") - { - return 'text/plain'; - } - elseif (preg_match('/[\x00-\x08\x0E-\x1A\x1C-\x1F]/', $this->file->body)) - { - return 'application/octect-stream'; - } - else - { - return 'text/plain'; - } - } - - /** - * Sniff unknown - * - * @access private - * @return string Actual Content-Type - */ - function unknown() - { - $ws = strspn($this->file->body, "\x09\x0A\x0B\x0C\x0D\x20"); - if (strtolower(substr($this->file->body, $ws, 14)) === 'file->body, $ws, 5)) === 'file->body, $ws, 7)) === 'file->body, 0, 5) === '%PDF-') - { - return 'application/pdf'; - } - elseif (substr($this->file->body, 0, 11) === '%!PS-Adobe-') - { - return 'application/postscript'; - } - elseif (substr($this->file->body, 0, 6) === 'GIF87a' - || substr($this->file->body, 0, 6) === 'GIF89a') - { - return 'image/gif'; - } - elseif (substr($this->file->body, 0, 8) === "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A") - { - return 'image/png'; - } - elseif (substr($this->file->body, 0, 3) === "\xFF\xD8\xFF") - { - return 'image/jpeg'; - } - elseif (substr($this->file->body, 0, 2) === "\x42\x4D") - { - return 'image/bmp'; - } - else - { - return $this->text_or_binary(); - } - } - - /** - * Sniff images - * - * @access private - * @return string Actual Content-Type - */ - function image() - { - if (substr($this->file->body, 0, 6) === 'GIF87a' - || substr($this->file->body, 0, 6) === 'GIF89a') - { - return 'image/gif'; - } - elseif (substr($this->file->body, 0, 8) === "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A") - { - return 'image/png'; - } - elseif (substr($this->file->body, 0, 3) === "\xFF\xD8\xFF") - { - return 'image/jpeg'; - } - elseif (substr($this->file->body, 0, 2) === "\x42\x4D") - { - return 'image/bmp'; - } - else - { - return false; - } - } - - /** - * Sniff HTML - * - * @access private - * @return string Actual Content-Type - */ - function feed_or_html() - { - $len = strlen($this->file->body); - $pos = strspn($this->file->body, "\x09\x0A\x0D\x20"); - - while ($pos < $len) - { - switch ($this->file->body[$pos]) - { - case "\x09": - case "\x0A": - case "\x0D": - case "\x20": - $pos += strspn($this->file->body, "\x09\x0A\x0D\x20", $pos); - continue 2; - - case '<': - $pos++; - break; - - default: - return 'text/html'; - } - - if (substr($this->file->body, $pos, 3) === '!--') - { - $pos += 3; - if ($pos < $len && ($pos = strpos($this->file->body, '-->', $pos)) !== false) - { - $pos += 3; - } - else - { - return 'text/html'; - } - } - elseif (substr($this->file->body, $pos, 1) === '!') - { - if ($pos < $len && ($pos = strpos($this->file->body, '>', $pos)) !== false) - { - $pos++; - } - else - { - return 'text/html'; - } - } - elseif (substr($this->file->body, $pos, 1) === '?') - { - if ($pos < $len && ($pos = strpos($this->file->body, '?>', $pos)) !== false) - { - $pos += 2; - } - else - { - return 'text/html'; - } - } - elseif (substr($this->file->body, $pos, 3) === 'rss' - || substr($this->file->body, $pos, 7) === 'rdf:RDF') - { - return 'application/rss+xml'; - } - elseif (substr($this->file->body, $pos, 4) === 'feed') - { - return 'application/atom+xml'; - } - else - { - return 'text/html'; - } - } - - return 'text/html'; - } -} - -/** - * Parses the XML Declaration - * - * @package SimplePie - */ -class SimplePie_XML_Declaration_Parser -{ - /** - * XML Version - * - * @access public - * @var string - */ - var $version = '1.0'; - - /** - * Encoding - * - * @access public - * @var string - */ - var $encoding = 'UTF-8'; - - /** - * Standalone - * - * @access public - * @var bool - */ - var $standalone = false; - - /** - * Current state of the state machine - * - * @access private - * @var string - */ - var $state = 'before_version_name'; - - /** - * Input data - * - * @access private - * @var string - */ - var $data = ''; - - /** - * Input data length (to avoid calling strlen() everytime this is needed) - * - * @access private - * @var int - */ - var $data_length = 0; - - /** - * Current position of the pointer - * - * @var int - * @access private - */ - var $position = 0; - - /** - * Create an instance of the class with the input data - * - * @access public - * @param string $data Input data - */ - function SimplePie_XML_Declaration_Parser($data) - { - $this->data = $data; - $this->data_length = strlen($this->data); - } - - /** - * Parse the input data - * - * @access public - * @return bool true on success, false on failure - */ - function parse() - { - while ($this->state && $this->state !== 'emit' && $this->has_data()) - { - $state = $this->state; - $this->$state(); - } - $this->data = ''; - if ($this->state === 'emit') - { - return true; - } - else - { - $this->version = ''; - $this->encoding = ''; - $this->standalone = ''; - return false; - } - } - - /** - * Check whether there is data beyond the pointer - * - * @access private - * @return bool true if there is further data, false if not - */ - function has_data() - { - return (bool) ($this->position < $this->data_length); - } - - /** - * Advance past any whitespace - * - * @return int Number of whitespace characters passed - */ - function skip_whitespace() - { - $whitespace = strspn($this->data, "\x09\x0A\x0D\x20", $this->position); - $this->position += $whitespace; - return $whitespace; - } - - /** - * Read value - */ - function get_value() - { - $quote = substr($this->data, $this->position, 1); - if ($quote === '"' || $quote === "'") - { - $this->position++; - $len = strcspn($this->data, $quote, $this->position); - if ($this->has_data()) - { - $value = substr($this->data, $this->position, $len); - $this->position += $len + 1; - return $value; - } - } - return false; - } - - function before_version_name() - { - if ($this->skip_whitespace()) - { - $this->state = 'version_name'; - } - else - { - $this->state = false; - } - } - - function version_name() - { - if (substr($this->data, $this->position, 7) === 'version') - { - $this->position += 7; - $this->skip_whitespace(); - $this->state = 'version_equals'; - } - else - { - $this->state = false; - } - } - - function version_equals() - { - if (substr($this->data, $this->position, 1) === '=') - { - $this->position++; - $this->skip_whitespace(); - $this->state = 'version_value'; - } - else - { - $this->state = false; - } - } - - function version_value() - { - if ($this->version = $this->get_value()) - { - $this->skip_whitespace(); - if ($this->has_data()) - { - $this->state = 'encoding_name'; - } - else - { - $this->state = 'emit'; - } - } - else - { - $this->state = false; - } - } - - function encoding_name() - { - if (substr($this->data, $this->position, 8) === 'encoding') - { - $this->position += 8; - $this->skip_whitespace(); - $this->state = 'encoding_equals'; - } - else - { - $this->state = 'standalone_name'; - } - } - - function encoding_equals() - { - if (substr($this->data, $this->position, 1) === '=') - { - $this->position++; - $this->skip_whitespace(); - $this->state = 'encoding_value'; - } - else - { - $this->state = false; - } - } - - function encoding_value() - { - if ($this->encoding = $this->get_value()) - { - $this->skip_whitespace(); - if ($this->has_data()) - { - $this->state = 'standalone_name'; - } - else - { - $this->state = 'emit'; - } - } - else - { - $this->state = false; - } - } - - function standalone_name() - { - if (substr($this->data, $this->position, 10) === 'standalone') - { - $this->position += 10; - $this->skip_whitespace(); - $this->state = 'standalone_equals'; - } - else - { - $this->state = false; - } - } - - function standalone_equals() - { - if (substr($this->data, $this->position, 1) === '=') - { - $this->position++; - $this->skip_whitespace(); - $this->state = 'standalone_value'; - } - else - { - $this->state = false; - } - } - - function standalone_value() - { - if ($standalone = $this->get_value()) - { - switch ($standalone) - { - case 'yes': - $this->standalone = true; - break; - - case 'no': - $this->standalone = false; - break; - - default: - $this->state = false; - return; - } - - $this->skip_whitespace(); - if ($this->has_data()) - { - $this->state = false; - } - else - { - $this->state = 'emit'; - } - } - else - { - $this->state = false; - } - } -} - -class SimplePie_Locator -{ - var $useragent; - var $timeout; - var $file; - var $local = array(); - var $elsewhere = array(); - var $file_class = 'SimplePie_File'; - var $cached_entities = array(); - var $http_base; - var $base; - var $base_location = 0; - var $checked_feeds = 0; - var $max_checked_feeds = 10; - var $content_type_sniffer_class = 'SimplePie_Content_Type_Sniffer'; - - function SimplePie_Locator(&$file, $timeout = 10, $useragent = null, $file_class = 'SimplePie_File', $max_checked_feeds = 10, $content_type_sniffer_class = 'SimplePie_Content_Type_Sniffer') - { - $this->file =& $file; - $this->file_class = $file_class; - $this->useragent = $useragent; - $this->timeout = $timeout; - $this->max_checked_feeds = $max_checked_feeds; - $this->content_type_sniffer_class = $content_type_sniffer_class; - } - - function find($type = SIMPLEPIE_LOCATOR_ALL, &$working) - { - if ($this->is_feed($this->file)) - { - return $this->file; - } - - if ($this->file->method & SIMPLEPIE_FILE_SOURCE_REMOTE) - { - $sniffer = new $this->content_type_sniffer_class($this->file); - if ($sniffer->get_type() !== 'text/html') - { - return null; - } - } - - if ($type & ~SIMPLEPIE_LOCATOR_NONE) - { - $this->get_base(); - } - - if ($type & SIMPLEPIE_LOCATOR_AUTODISCOVERY && $working = $this->autodiscovery()) - { - return $working[0]; - } - - if ($type & (SIMPLEPIE_LOCATOR_LOCAL_EXTENSION | SIMPLEPIE_LOCATOR_LOCAL_BODY | SIMPLEPIE_LOCATOR_REMOTE_EXTENSION | SIMPLEPIE_LOCATOR_REMOTE_BODY) && $this->get_links()) - { - if ($type & SIMPLEPIE_LOCATOR_LOCAL_EXTENSION && $working = $this->extension($this->local)) - { - return $working; - } - - if ($type & SIMPLEPIE_LOCATOR_LOCAL_BODY && $working = $this->body($this->local)) - { - return $working; - } - - if ($type & SIMPLEPIE_LOCATOR_REMOTE_EXTENSION && $working = $this->extension($this->elsewhere)) - { - return $working; - } - - if ($type & SIMPLEPIE_LOCATOR_REMOTE_BODY && $working = $this->body($this->elsewhere)) - { - return $working; - } - } - return null; - } - - function is_feed(&$file) - { - if ($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE) - { - $sniffer = new $this->content_type_sniffer_class($file); - $sniffed = $sniffer->get_type(); - if (in_array($sniffed, array('application/rss+xml', 'application/rdf+xml', 'text/rdf', 'application/atom+xml', 'text/xml', 'application/xml'))) - { - return true; - } - else - { - return false; - } - } - elseif ($file->method & SIMPLEPIE_FILE_SOURCE_LOCAL) - { - return true; - } - else - { - return false; - } - } - - function get_base() - { - $this->http_base = $this->file->url; - $this->base = $this->http_base; - $elements = SimplePie_Misc::get_element('base', $this->file->body); - foreach ($elements as $element) - { - if ($element['attribs']['href']['data'] !== '') - { - $this->base = SimplePie_Misc::absolutize_url(trim($element['attribs']['href']['data']), $this->http_base); - $this->base_location = $element['offset']; - break; - } - } - } - - function autodiscovery() - { - $links = array_merge(SimplePie_Misc::get_element('link', $this->file->body), SimplePie_Misc::get_element('a', $this->file->body), SimplePie_Misc::get_element('area', $this->file->body)); - $done = array(); - $feeds = array(); - foreach ($links as $link) - { - if ($this->checked_feeds === $this->max_checked_feeds) - { - break; - } - if (isset($link['attribs']['href']['data']) && isset($link['attribs']['rel']['data'])) - { - $rel = array_unique(SimplePie_Misc::space_seperated_tokens(strtolower($link['attribs']['rel']['data']))); - - if ($this->base_location < $link['offset']) - { - $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->base); - } - else - { - $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->http_base); - } - - if (!in_array($href, $done) && in_array('feed', $rel) || (in_array('alternate', $rel) && !empty($link['attribs']['type']['data']) && in_array(strtolower(SimplePie_Misc::parse_mime($link['attribs']['type']['data'])), array('application/rss+xml', 'application/atom+xml'))) && !isset($feeds[$href])) - { - $this->checked_feeds++; - $feed = new $this->file_class($href, $this->timeout, 5, null, $this->useragent); - if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed)) - { - $feeds[$href] = $feed; - } - } - $done[] = $href; - } - } - - if (!empty($feeds)) - { - return array_values($feeds); - } - else { - return null; - } - } - - function get_links() - { - $links = SimplePie_Misc::get_element('a', $this->file->body); - foreach ($links as $link) - { - if (isset($link['attribs']['href']['data'])) - { - $href = trim($link['attribs']['href']['data']); - $parsed = SimplePie_Misc::parse_url($href); - if ($parsed['scheme'] === '' || preg_match('/^(http(s)|feed)?$/i', $parsed['scheme'])) - { - if ($this->base_location < $link['offset']) - { - $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->base); - } - else - { - $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->http_base); - } - - $current = SimplePie_Misc::parse_url($this->file->url); - - if ($parsed['authority'] === '' || $parsed['authority'] === $current['authority']) - { - $this->local[] = $href; - } - else - { - $this->elsewhere[] = $href; - } - } - } - } - $this->local = array_unique($this->local); - $this->elsewhere = array_unique($this->elsewhere); - if (!empty($this->local) || !empty($this->elsewhere)) - { - return true; - } - return null; - } - - function extension(&$array) - { - foreach ($array as $key => $value) - { - if ($this->checked_feeds === $this->max_checked_feeds) - { - break; - } - if (in_array(strtolower(strrchr($value, '.')), array('.rss', '.rdf', '.atom', '.xml'))) - { - $this->checked_feeds++; - $feed = new $this->file_class($value, $this->timeout, 5, null, $this->useragent); - if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed)) - { - return $feed; - } - else - { - unset($array[$key]); - } - } - } - return null; - } - - function body(&$array) - { - foreach ($array as $key => $value) - { - if ($this->checked_feeds === $this->max_checked_feeds) - { - break; - } - if (preg_match('/(rss|rdf|atom|xml)/i', $value)) - { - $this->checked_feeds++; - $feed = new $this->file_class($value, $this->timeout, 5, null, $this->useragent); - if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed)) - { - return $feed; - } - else - { - unset($array[$key]); - } - } - } - return null; - } -} - -class SimplePie_Parser -{ - var $error_code; - var $error_string; - var $current_line; - var $current_column; - var $current_byte; - var $separator = ' '; - var $namespace = array(''); - var $element = array(''); - var $xml_base = array(''); - var $xml_base_explicit = array(false); - var $xml_lang = array(''); - var $data = array(); - var $datas = array(array()); - var $current_xhtml_construct = -1; - var $encoding; - - function parse(&$data, $encoding) - { - // Use UTF-8 if we get passed US-ASCII, as every US-ASCII character is a UTF-8 character - if (strtoupper($encoding) === 'US-ASCII') - { - $this->encoding = 'UTF-8'; - } - else - { - $this->encoding = $encoding; - } - - // Strip BOM: - // UTF-32 Big Endian BOM - if (substr($data, 0, 4) === "\x00\x00\xFE\xFF") - { - $data = substr($data, 4); - } - // UTF-32 Little Endian BOM - elseif (substr($data, 0, 4) === "\xFF\xFE\x00\x00") - { - $data = substr($data, 4); - } - // UTF-16 Big Endian BOM - elseif (substr($data, 0, 2) === "\xFE\xFF") - { - $data = substr($data, 2); - } - // UTF-16 Little Endian BOM - elseif (substr($data, 0, 2) === "\xFF\xFE") - { - $data = substr($data, 2); - } - // UTF-8 BOM - elseif (substr($data, 0, 3) === "\xEF\xBB\xBF") - { - $data = substr($data, 3); - } - - if (substr($data, 0, 5) === '')) !== false) - { - $declaration = new SimplePie_XML_Declaration_Parser(substr($data, 5, $pos - 5)); - if ($declaration->parse()) - { - $data = substr($data, $pos + 2); - $data = 'version . '" encoding="' . $encoding . '" standalone="' . (($declaration->standalone) ? 'yes' : 'no') . '"?>' . $data; - } - else - { - $this->error_string = 'SimplePie bug! Please report this!'; - return false; - } - } - - $return = true; - - static $xml_is_sane = null; - if ($xml_is_sane === null) - { - $parser_check = xml_parser_create(); - xml_parse_into_struct($parser_check, '&', $values); - xml_parser_free($parser_check); - $xml_is_sane = isset($values[0]['value']); - } - - // Create the parser - if ($xml_is_sane) - { - $xml = xml_parser_create_ns($this->encoding, $this->separator); - xml_parser_set_option($xml, XML_OPTION_SKIP_WHITE, 1); - xml_parser_set_option($xml, XML_OPTION_CASE_FOLDING, 0); - xml_set_object($xml, $this); - xml_set_character_data_handler($xml, 'cdata'); - xml_set_element_handler($xml, 'tag_open', 'tag_close'); - - // Parse! - if (!xml_parse($xml, $data, true)) - { - $this->error_code = xml_get_error_code($xml); - $this->error_string = xml_error_string($this->error_code); - $return = false; - } - $this->current_line = xml_get_current_line_number($xml); - $this->current_column = xml_get_current_column_number($xml); - $this->current_byte = xml_get_current_byte_index($xml); - xml_parser_free($xml); - return $return; - } - else - { - libxml_clear_errors(); - $xml = new XMLReader(); - $xml->xml($data); - while (@$xml->read()) - { - switch ($xml->nodeType) - { - - case constant('XMLReader::END_ELEMENT'): - if ($xml->namespaceURI !== '') - { - $tagName = "{$xml->namespaceURI}{$this->separator}{$xml->localName}"; - } - else - { - $tagName = $xml->localName; - } - $this->tag_close(null, $tagName); - break; - case constant('XMLReader::ELEMENT'): - $empty = $xml->isEmptyElement; - if ($xml->namespaceURI !== '') - { - $tagName = "{$xml->namespaceURI}{$this->separator}{$xml->localName}"; - } - else - { - $tagName = $xml->localName; - } - $attributes = array(); - while ($xml->moveToNextAttribute()) - { - if ($xml->namespaceURI !== '') - { - $attrName = "{$xml->namespaceURI}{$this->separator}{$xml->localName}"; - } - else - { - $attrName = $xml->localName; - } - $attributes[$attrName] = $xml->value; - } - $this->tag_open(null, $tagName, $attributes); - if ($empty) - { - $this->tag_close(null, $tagName); - } - break; - case constant('XMLReader::TEXT'): - - case constant('XMLReader::CDATA'): - $this->cdata(null, $xml->value); - break; - } - } - if ($error = libxml_get_last_error()) - { - $this->error_code = $error->code; - $this->error_string = $error->message; - $this->current_line = $error->line; - $this->current_column = $error->column; - return false; - } - else - { - return true; - } - } - } - - function get_error_code() - { - return $this->error_code; - } - - function get_error_string() - { - return $this->error_string; - } - - function get_current_line() - { - return $this->current_line; - } - - function get_current_column() - { - return $this->current_column; - } - - function get_current_byte() - { - return $this->current_byte; - } - - function get_data() - { - return $this->data; - } - - function tag_open($parser, $tag, $attributes) - { - list($this->namespace[], $this->element[]) = $this->split_ns($tag); - - $attribs = array(); - foreach ($attributes as $name => $value) - { - list($attrib_namespace, $attribute) = $this->split_ns($name); - $attribs[$attrib_namespace][$attribute] = $value; - } - - if (isset($attribs[SIMPLEPIE_NAMESPACE_XML]['base'])) - { - $this->xml_base[] = SimplePie_Misc::absolutize_url($attribs[SIMPLEPIE_NAMESPACE_XML]['base'], end($this->xml_base)); - $this->xml_base_explicit[] = true; - } - else - { - $this->xml_base[] = end($this->xml_base); - $this->xml_base_explicit[] = end($this->xml_base_explicit); - } - - if (isset($attribs[SIMPLEPIE_NAMESPACE_XML]['lang'])) - { - $this->xml_lang[] = $attribs[SIMPLEPIE_NAMESPACE_XML]['lang']; - } - else - { - $this->xml_lang[] = end($this->xml_lang); - } - - if ($this->current_xhtml_construct >= 0) - { - $this->current_xhtml_construct++; - if (end($this->namespace) === SIMPLEPIE_NAMESPACE_XHTML) - { - $this->data['data'] .= '<' . end($this->element); - if (isset($attribs[''])) - { - foreach ($attribs[''] as $name => $value) - { - $this->data['data'] .= ' ' . $name . '="' . htmlspecialchars($value, ENT_COMPAT, $this->encoding) . '"'; - } - } - $this->data['data'] .= '>'; - } - } - else - { - $this->datas[] =& $this->data; - $this->data =& $this->data['child'][end($this->namespace)][end($this->element)][]; - $this->data = array('data' => '', 'attribs' => $attribs, 'xml_base' => end($this->xml_base), 'xml_base_explicit' => end($this->xml_base_explicit), 'xml_lang' => end($this->xml_lang)); - if ((end($this->namespace) === SIMPLEPIE_NAMESPACE_ATOM_03 && in_array(end($this->element), array('title', 'tagline', 'copyright', 'info', 'summary', 'content')) && isset($attribs['']['mode']) && $attribs['']['mode'] === 'xml') - || (end($this->namespace) === SIMPLEPIE_NAMESPACE_ATOM_10 && in_array(end($this->element), array('rights', 'subtitle', 'summary', 'info', 'title', 'content')) && isset($attribs['']['type']) && $attribs['']['type'] === 'xhtml')) - { - $this->current_xhtml_construct = 0; - } - } - } - - function cdata($parser, $cdata) - { - if ($this->current_xhtml_construct >= 0) - { - $this->data['data'] .= htmlspecialchars($cdata, ENT_QUOTES, $this->encoding); - } - else - { - $this->data['data'] .= $cdata; - } - } - - function tag_close($parser, $tag) - { - if ($this->current_xhtml_construct >= 0) - { - $this->current_xhtml_construct--; - if (end($this->namespace) === SIMPLEPIE_NAMESPACE_XHTML && !in_array(end($this->element), array('area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', 'img', 'input', 'isindex', 'link', 'meta', 'param'))) - { - $this->data['data'] .= 'element) . '>'; - } - } - if ($this->current_xhtml_construct === -1) - { - $this->data =& $this->datas[count($this->datas) - 1]; - array_pop($this->datas); - } - - array_pop($this->element); - array_pop($this->namespace); - array_pop($this->xml_base); - array_pop($this->xml_base_explicit); - array_pop($this->xml_lang); - } - - function split_ns($string) - { - static $cache = array(); - if (!isset($cache[$string])) - { - if ($pos = strpos($string, $this->separator)) - { - static $separator_length; - if (!$separator_length) - { - $separator_length = strlen($this->separator); - } - $namespace = substr($string, 0, $pos); - $local_name = substr($string, $pos + $separator_length); - if (strtolower($namespace) === SIMPLEPIE_NAMESPACE_ITUNES) - { - $namespace = SIMPLEPIE_NAMESPACE_ITUNES; - } - - // Normalize the Media RSS namespaces - if ($namespace === SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG) - { - $namespace = SIMPLEPIE_NAMESPACE_MEDIARSS; - } - $cache[$string] = array($namespace, $local_name); - } - else - { - $cache[$string] = array('', $string); - } - } - return $cache[$string]; - } -} - -/** - * @todo Move to using an actual HTML parser (this will allow tags to be properly stripped, and to switch between HTML and XHTML), this will also make it easier to shorten a string while preserving HTML tags - */ -class SimplePie_Sanitize -{ - // Private vars - var $base; - - // Options - var $remove_div = true; - var $image_handler = ''; - var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'); - var $encode_instead_of_strip = false; - var $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'); - var $strip_comments = false; - var $output_encoding = 'UTF-8'; - var $enable_cache = true; - var $cache_location = './cache'; - var $cache_name_function = 'md5'; - var $cache_class = 'SimplePie_Cache'; - var $file_class = 'SimplePie_File'; - var $timeout = 10; - var $useragent = ''; - var $force_fsockopen = false; - - var $replace_url_attributes = array( - 'a' => 'href', - 'area' => 'href', - 'blockquote' => 'cite', - 'del' => 'cite', - 'form' => 'action', - 'img' => array('longdesc', 'src'), - 'input' => 'src', - 'ins' => 'cite', - 'q' => 'cite' - ); - - function remove_div($enable = true) - { - $this->remove_div = (bool) $enable; - } - - function set_image_handler($page = false) - { - if ($page) - { - $this->image_handler = (string) $page; - } - else - { - $this->image_handler = false; - } - } - - function pass_cache_data($enable_cache = true, $cache_location = './cache', $cache_name_function = 'md5', $cache_class = 'SimplePie_Cache') - { - if (isset($enable_cache)) - { - $this->enable_cache = (bool) $enable_cache; - } - - if ($cache_location) - { - $this->cache_location = (string) $cache_location; - } - - if ($cache_name_function) - { - $this->cache_name_function = (string) $cache_name_function; - } - - if ($cache_class) - { - $this->cache_class = (string) $cache_class; - } - } - - function pass_file_data($file_class = 'SimplePie_File', $timeout = 10, $useragent = '', $force_fsockopen = false) - { - if ($file_class) - { - $this->file_class = (string) $file_class; - } - - if ($timeout) - { - $this->timeout = (string) $timeout; - } - - if ($useragent) - { - $this->useragent = (string) $useragent; - } - - if ($force_fsockopen) - { - $this->force_fsockopen = (string) $force_fsockopen; - } - } - - function strip_htmltags($tags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style')) - { - if ($tags) - { - if (is_array($tags)) - { - $this->strip_htmltags = $tags; - } - else - { - $this->strip_htmltags = explode(',', $tags); - } - } - else - { - $this->strip_htmltags = false; - } - } - - function encode_instead_of_strip($encode = false) - { - $this->encode_instead_of_strip = (bool) $encode; - } - - function strip_attributes($attribs = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc')) - { - if ($attribs) - { - if (is_array($attribs)) - { - $this->strip_attributes = $attribs; - } - else - { - $this->strip_attributes = explode(',', $attribs); - } - } - else - { - $this->strip_attributes = false; - } - } - - function strip_comments($strip = false) - { - $this->strip_comments = (bool) $strip; - } - - function set_output_encoding($encoding = 'UTF-8') - { - $this->output_encoding = (string) $encoding; - } - - /** - * Set element/attribute key/value pairs of HTML attributes - * containing URLs that need to be resolved relative to the feed - * - * @access public - * @since 1.0 - * @param array $element_attribute Element/attribute key/value pairs - */ - function set_url_replacements($element_attribute = array('a' => 'href', 'area' => 'href', 'blockquote' => 'cite', 'del' => 'cite', 'form' => 'action', 'img' => array('longdesc', 'src'), 'input' => 'src', 'ins' => 'cite', 'q' => 'cite')) - { - $this->replace_url_attributes = (array) $element_attribute; - } - - function sanitize($data, $type, $base = '') - { - $data = trim($data); - if ($data !== '' || $type & SIMPLEPIE_CONSTRUCT_IRI) - { - if ($type & SIMPLEPIE_CONSTRUCT_MAYBE_HTML) - { - if (preg_match('/(&(#(x[0-9a-fA-F]+|[0-9]+)|[a-zA-Z0-9]+)|<\/[A-Za-z][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E]*' . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>)/', $data)) - { - $type |= SIMPLEPIE_CONSTRUCT_HTML; - } - else - { - $type |= SIMPLEPIE_CONSTRUCT_TEXT; - } - } - - if ($type & SIMPLEPIE_CONSTRUCT_BASE64) - { - $data = base64_decode($data); - } - - if ($type & SIMPLEPIE_CONSTRUCT_XHTML) - { - if ($this->remove_div) - { - $data = preg_replace('/^/', '', $data); - $data = preg_replace('/<\/div>$/', '', $data); - } - else - { - $data = preg_replace('/^/', '
', $data); - } - } - - if ($type & (SIMPLEPIE_CONSTRUCT_HTML | SIMPLEPIE_CONSTRUCT_XHTML)) - { - // Strip comments - if ($this->strip_comments) - { - $data = SimplePie_Misc::strip_comments($data); - } - - // Strip out HTML tags and attributes that might cause various security problems. - // Based on recommendations by Mark Pilgrim at: - // http://diveintomark.org/archives/2003/06/12/how_to_consume_rss_safely - if ($this->strip_htmltags) - { - foreach ($this->strip_htmltags as $tag) - { - $pcre = "/<($tag)" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . "(>(.*)<\/$tag" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>|(\/)?>)/siU'; - while (preg_match($pcre, $data)) - { - $data = preg_replace_callback($pcre, array(&$this, 'do_strip_htmltags'), $data); - } - } - } - - if ($this->strip_attributes) - { - foreach ($this->strip_attributes as $attrib) - { - $data = preg_replace('/(<[A-Za-z][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E]*)' . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . trim($attrib) . '(?:\s*=\s*(?:"(?:[^"]*)"|\'(?:[^\']*)\'|(?:[^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?' . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>/', '\1\2\3>', $data); - } - } - - // Replace relative URLs - $this->base = $base; - foreach ($this->replace_url_attributes as $element => $attributes) - { - $data = $this->replace_urls($data, $element, $attributes); - } - - // If image handling (caching, etc.) is enabled, cache and rewrite all the image tags. - if (isset($this->image_handler) && ((string) $this->image_handler) !== '' && $this->enable_cache) - { - $images = SimplePie_Misc::get_element('img', $data); - foreach ($images as $img) - { - if (isset($img['attribs']['src']['data'])) - { - $image_url = call_user_func($this->cache_name_function, $img['attribs']['src']['data']); - $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, $image_url, 'spi'); - - if ($cache->load()) - { - $img['attribs']['src']['data'] = $this->image_handler . $image_url; - $data = str_replace($img['full'], SimplePie_Misc::element_implode($img), $data); - } - else - { - $file = new $this->file_class($img['attribs']['src']['data'], $this->timeout, 5, array('X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']), $this->useragent, $this->force_fsockopen); - $headers = $file->headers; - - if ($file->success && ($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300))) - { - if ($cache->save(array('headers' => $file->headers, 'body' => $file->body))) - { - $img['attribs']['src']['data'] = $this->image_handler . $image_url; - $data = str_replace($img['full'], SimplePie_Misc::element_implode($img), $data); - } - else - { - trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING); - } - } - } - } - } - } - - // Having (possibly) taken stuff out, there may now be whitespace at the beginning/end of the data - $data = trim($data); - } - - if ($type & SIMPLEPIE_CONSTRUCT_IRI) - { - $data = SimplePie_Misc::absolutize_url($data, $base); - } - - if ($type & (SIMPLEPIE_CONSTRUCT_TEXT | SIMPLEPIE_CONSTRUCT_IRI)) - { - $data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8'); - } - - if ($this->output_encoding !== 'UTF-8') - { - $data = SimplePie_Misc::change_encoding($data, 'UTF-8', $this->output_encoding); - } - } - return $data; - } - - function replace_urls($data, $tag, $attributes) - { - if (!is_array($this->strip_htmltags) || !in_array($tag, $this->strip_htmltags)) - { - $elements = SimplePie_Misc::get_element($tag, $data); - foreach ($elements as $element) - { - if (is_array($attributes)) - { - foreach ($attributes as $attribute) - { - if (isset($element['attribs'][$attribute]['data'])) - { - $element['attribs'][$attribute]['data'] = SimplePie_Misc::absolutize_url($element['attribs'][$attribute]['data'], $this->base); - $new_element = SimplePie_Misc::element_implode($element); - $data = str_replace($element['full'], $new_element, $data); - $element['full'] = $new_element; - } - } - } - elseif (isset($element['attribs'][$attributes]['data'])) - { - $element['attribs'][$attributes]['data'] = SimplePie_Misc::absolutize_url($element['attribs'][$attributes]['data'], $this->base); - $data = str_replace($element['full'], SimplePie_Misc::element_implode($element), $data); - } - } - } - return $data; - } - - function do_strip_htmltags($match) - { - if ($this->encode_instead_of_strip) - { - if (isset($match[4]) && !in_array(strtolower($match[1]), array('script', 'style'))) - { - $match[1] = htmlspecialchars($match[1], ENT_COMPAT, 'UTF-8'); - $match[2] = htmlspecialchars($match[2], ENT_COMPAT, 'UTF-8'); - return "<$match[1]$match[2]>$match[3]</$match[1]>"; - } - else - { - return htmlspecialchars($match[0], ENT_COMPAT, 'UTF-8'); - } - } - elseif (isset($match[4]) && !in_array(strtolower($match[1]), array('script', 'style'))) - { - return $match[4]; - } - else - { - return ''; - } - } -} - -?> diff --git a/util/README b/util/README index 20a539215..fad1270d4 100644 --- a/util/README +++ b/util/README @@ -10,7 +10,7 @@ Internationalisation extract.php - extracts translatable strings from our project files. It currently doesn't pick up strings in other libraries we might be using such as -tinymce, simplepie, and the HTML parsers. +tinymce and the HTML parsers. In order for extract to do its job, every use of the t() translation function must be preceded by one space. The string also can not contain parentheses. If

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 diff --git a/library/simplepie/demo/for_the_demo/yanone-kaffeesatz-bold.swf b/library/simplepie/demo/for_the_demo/yanone-kaffeesatz-bold.swf deleted file mode 100644 index c812a79dcf951f14f4332e8b98ad9dd2b903a179..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76780 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�D@5klsu(RUKw!RLXp<@L$za8>kC3N>qct( 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 aqNdr=v`Hb- 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 KVan(Gss9a8mXT%v diff --git a/library/simplepie/demo/handler_image.php b/library/simplepie/demo/handler_image.php deleted file mode 100644 index 49c3ec89b..000000000 --- a/library/simplepie/demo/handler_image.php +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/library/simplepie/demo/index.php b/library/simplepie/demo/index.php deleted file mode 100644 index 1481ba917..000000000 --- a/library/simplepie/demo/index.php +++ /dev/null @@ -1,295 +0,0 @@ -force_fsockopen(true); - -// Make sure that page is getting passed a URL -if (isset($_GET['feed']) && $_GET['feed'] !== '') -{ - // Strip slashes if magic quotes is enabled (which automatically escapes certain characters) - if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) - { - $_GET['feed'] = stripslashes($_GET['feed']); - } - - // Use the URL that was passed to the page in SimplePie - $feed->set_feed_url($_GET['feed']); - - // XML dump - $feed->enable_xml_dump(isset($_GET['xmldump']) ? true : false); -} - -// Allow us to change the input encoding from the URL string if we want to. (optional) -if (!empty($_GET['input'])) -{ - $feed->set_input_encoding($_GET['input']); -} - -// Allow us to choose to not re-order the items by date. (optional) -if (!empty($_GET['orderbydate']) && $_GET['orderbydate'] == 'false') -{ - $feed->enable_order_by_date(false); -} - -// Allow us to cache images in feeds. This will also bypass any hotlink blocking put in place by the website. -if (!empty($_GET['image']) && $_GET['image'] == 'true') -{ - $feed->set_image_handler('./handler_image.php'); -} - -// We'll enable the discovering and caching of favicons. -$feed->set_favicon_handler('./handler_image.php'); - -// Initialize the whole SimplePie object. Read the feed, process it, parse it, cache it, and -// all that other good stuff. The feed's information will not be available to SimplePie before -// this is called. -$success = $feed->init(); - -// We'll make sure that the right content type and character encoding gets set automatically. -// This function will grab the proper character encoding, as well as set the content type to text/html. -$feed->handle_content_type(); - -// When we end our PHP block, we want to make sure our DOCTYPE is on the top line to make -// sure that the browser snaps into Standards Mode. -?> - - - -SimplePie: Demo - - - - - - - - - - - - - -