diff options
Diffstat (limited to 'apps/files_external/3rdparty/aws-sdk-php/Guzzle')
90 files changed, 2223 insertions, 994 deletions
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Batch/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Batch/composer.json new file mode 100644 index 00000000000..12404d381e9 --- /dev/null +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Batch/composer.json @@ -0,0 +1,31 @@ +{ + "name": "guzzle/batch", + "description": "Guzzle batch component for batching requests, commands, or custom transfers", + "homepage": "http://guzzlephp.org/", + "keywords": ["batch", "HTTP", "REST", "guzzle"], + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "require": { + "php": ">=5.3.2", + "guzzle/common": "self.version" + }, + "autoload": { + "psr-0": { "Guzzle\\Batch": "" } + }, + "suggest": { + "guzzle/http": "self.version", + "guzzle/service": "self.version" + }, + "target-dir": "Guzzle/Batch", + "extra": { + "branch-alias": { + "dev-master": "3.7-dev" + } + } +} diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Cache/CacheAdapterFactory.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Cache/CacheAdapterFactory.php index d02219a6929..94e623463b4 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Cache/CacheAdapterFactory.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Cache/CacheAdapterFactory.php @@ -5,6 +5,7 @@ namespace Guzzle\Cache; use Doctrine\Common\Cache\Cache; use Guzzle\Common\Version; use Guzzle\Common\Exception\InvalidArgumentException; +use Guzzle\Common\Exception\RuntimeException; use Guzzle\Common\FromConfigInterface; use Zend\Cache\Storage\StorageInterface; diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Cache/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Cache/composer.json new file mode 100644 index 00000000000..a5d999bd6d2 --- /dev/null +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Cache/composer.json @@ -0,0 +1,27 @@ +{ + "name": "guzzle/cache", + "description": "Guzzle cache adapter component", + "homepage": "http://guzzlephp.org/", + "keywords": ["cache", "adapter", "zf", "doctrine", "guzzle"], + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "require": { + "php": ">=5.3.2", + "guzzle/common": "self.version" + }, + "autoload": { + "psr-0": { "Guzzle\\Cache": "" } + }, + "target-dir": "Guzzle/Cache", + "extra": { + "branch-alias": { + "dev-master": "3.7-dev" + } + } +} diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/AbstractHasDispatcher.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/AbstractHasDispatcher.php index 9c6874fb4e4..d1e842b1cf5 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/AbstractHasDispatcher.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/AbstractHasDispatcher.php @@ -37,7 +37,7 @@ class AbstractHasDispatcher implements HasDispatcherInterface public function dispatch($eventName, array $context = array()) { - $this->getEventDispatcher()->dispatch($eventName, new Event($context)); + return $this->getEventDispatcher()->dispatch($eventName, new Event($context)); } public function addSubscriber(EventSubscriberInterface $subscriber) diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/Exception/ExceptionCollection.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/Exception/ExceptionCollection.php index 185d05cddac..750e4839eea 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/Exception/ExceptionCollection.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/Exception/ExceptionCollection.php @@ -10,6 +10,15 @@ class ExceptionCollection extends \Exception implements GuzzleException, \Iterat /** @var array Array of Exceptions */ protected $exceptions = array(); + /** @var string Succinct exception message not including sub-exceptions */ + private $shortMessage; + + public function __construct($message = '', $code = 0, \Exception $previous = null) + { + parent::__construct($message, $code, $previous); + $this->shortMessage = $message; + } + /** * Set all of the exceptions * @@ -36,19 +45,12 @@ class ExceptionCollection extends \Exception implements GuzzleException, \Iterat */ public function add($e) { + $this->exceptions[] = $e; if ($this->message) { $this->message .= "\n"; } - if ($e instanceof self) { - $this->message .= '(' . get_class($e) . ")"; - foreach (explode("\n", $e->getMessage()) as $message) { - $this->message .= "\n {$message}"; - } - } elseif ($e instanceof \Exception) { - $this->exceptions[] = $e; - $this->message .= '(' . get_class($e) . ') ' . $e->getMessage(); - } + $this->message .= $this->getExceptionMessage($e, 0); return $this; } @@ -82,4 +84,25 @@ class ExceptionCollection extends \Exception implements GuzzleException, \Iterat { return $this->exceptions ? $this->exceptions[0] : null; } + + private function getExceptionMessage(\Exception $e, $depth = 0) + { + static $sp = ' '; + $prefix = $depth ? str_repeat($sp, $depth) : ''; + $message = "{$prefix}(" . get_class($e) . ') ' . $e->getFile() . ' line ' . $e->getLine() . "\n"; + + if ($e instanceof self) { + if ($e->shortMessage) { + $message .= "\n{$prefix}{$sp}" . str_replace("\n", "\n{$prefix}{$sp}", $e->shortMessage) . "\n"; + } + foreach ($e as $ee) { + $message .= "\n" . $this->getExceptionMessage($ee, $depth + 1); + } + } else { + $message .= "\n{$prefix}{$sp}" . str_replace("\n", "\n{$prefix}{$sp}", $e->getMessage()) . "\n"; + $message .= "\n{$prefix}{$sp}" . str_replace("\n", "\n{$prefix}{$sp}", $e->getTraceAsString()) . "\n"; + } + + return str_replace(getcwd(), '.', $message); + } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/HasDispatcherInterface.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/HasDispatcherInterface.php index 75727ed9e25..806759806c8 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/HasDispatcherInterface.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/HasDispatcherInterface.php @@ -38,6 +38,8 @@ interface HasDispatcherInterface * * @param string $eventName Name of the event to dispatch * @param array $context Context of the event + * + * @return Event Returns the created event object */ public function dispatch($eventName, array $context = array()); diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/Version.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/Version.php index 9e394659b71..d018c1e1253 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/Version.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/Version.php @@ -7,7 +7,7 @@ namespace Guzzle\Common; */ class Version { - const VERSION = '3.7.0'; + const VERSION = '3.9.2'; /** * @var bool Set this value to true to enable warnings for deprecated functionality use. This should be on in your diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/composer.json new file mode 100644 index 00000000000..c02fa690102 --- /dev/null +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Common/composer.json @@ -0,0 +1,20 @@ +{ + "name": "guzzle/common", + "homepage": "http://guzzlephp.org/", + "description": "Common libraries used by Guzzle", + "keywords": ["common", "event", "exception", "collection"], + "license": "MIT", + "require": { + "php": ">=5.3.2", + "symfony/event-dispatcher": ">=2.1" + }, + "autoload": { + "psr-0": { "Guzzle\\Common": "" } + }, + "target-dir": "Guzzle/Common", + "extra": { + "branch-alias": { + "dev-master": "3.7-dev" + } + } +} diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Client.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Client.php index 1f34203acf8..3d7298dcdf2 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Client.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Client.php @@ -30,6 +30,8 @@ class Client extends AbstractHasDispatcher implements ClientInterface const CURL_OPTIONS = 'curl.options'; const SSL_CERT_AUTHORITY = 'ssl.certificate_authority'; const DISABLE_REDIRECTS = RedirectPlugin::DISABLE; + const DEFAULT_SELECT_TIMEOUT = 1.0; + const MAX_HANDLES = 3; /** @var Collection Default HTTP headers to set on each request */ protected $defaultHeaders; @@ -109,11 +111,8 @@ class Client extends AbstractHasDispatcher implements ClientInterface */ public function setDefaultOption($keyOrPath, $value) { - if (strpos($keyOrPath, '/')) { - $this->config->setPath($keyOrPath, $value); - } else { - $this->config[$keyOrPath] = $value; - } + $keyOrPath = self::REQUEST_OPTIONS . '/' . $keyOrPath; + $this->config->setPath($keyOrPath, $value); return $this; } @@ -127,7 +126,9 @@ class Client extends AbstractHasDispatcher implements ClientInterface */ public function getDefaultOption($keyOrPath) { - return strpos($keyOrPath, '/') ? $this->config->getPath($keyOrPath) : $this->config[$keyOrPath]; + $keyOrPath = self::REQUEST_OPTIONS . '/' . $keyOrPath; + + return $this->config->getPath($keyOrPath); } final public function setSslVerification($certificateAuthority = true, $verifyPeer = true, $verifyHost = 2) @@ -142,7 +143,7 @@ class Client extends AbstractHasDispatcher implements ClientInterface } elseif ($certificateAuthority === false) { unset($opts[CURLOPT_CAINFO]); $opts[CURLOPT_SSL_VERIFYPEER] = false; - $opts[CURLOPT_SSL_VERIFYHOST] = 2; + $opts[CURLOPT_SSL_VERIFYHOST] = 0; } elseif ($verifyPeer !== true && $verifyPeer !== false && $verifyPeer !== 1 && $verifyPeer !== 0) { throw new InvalidArgumentException('verifyPeer must be 1, 0 or boolean'); } elseif ($verifyHost !== 0 && $verifyHost !== 1 && $verifyHost !== 2) { @@ -178,7 +179,7 @@ class Client extends AbstractHasDispatcher implements ClientInterface } else { list($uri, $templateVars) = $uri; } - if (substr($uri, 0, 4) === 'http') { + if (strpos($uri, '://')) { // Use absolute URLs as-is $url = $this->expandTemplate($uri, $templateVars); } else { @@ -244,7 +245,7 @@ class Client extends AbstractHasDispatcher implements ClientInterface public function head($uri = null, $headers = null, array $options = array()) { - return $this->createRequest('HEAD', $uri, $headers, $options); + return $this->createRequest('HEAD', $uri, $headers, null, $options); } public function delete($uri = null, $headers = null, $body = null, array $options = array()) @@ -307,7 +308,10 @@ class Client extends AbstractHasDispatcher implements ClientInterface public function getCurlMulti() { if (!$this->curlMulti) { - $this->curlMulti = new CurlMultiProxy(); + $this->curlMulti = new CurlMultiProxy( + self::MAX_HANDLES, + $this->getConfig('select_timeout') ?: self::DEFAULT_SELECT_TIMEOUT + ); } return $this->curlMulti; @@ -335,31 +339,6 @@ class Client extends AbstractHasDispatcher implements ClientInterface } /** - * Copy the cacert.pem file from the phar if it is not in the temp folder and validate the MD5 checksum - * - * @param bool $md5Check Set to false to not perform the MD5 validation - * - * @return string Returns the path to the extracted cacert - * @throws RuntimeException if the file cannot be copied or there is a MD5 mismatch - */ - public function preparePharCacert($md5Check = true) - { - $from = __DIR__ . '/Resources/cacert.pem'; - $certFile = sys_get_temp_dir() . '/guzzle-cacert.pem'; - if (!file_exists($certFile) && !copy($from, $certFile)) { - throw new RuntimeException("Could not copy {$from} to {$certFile}: " . var_export(error_get_last(), true)); - } elseif ($md5Check) { - $actualMd5 = md5_file($certFile); - $expectedMd5 = trim(file_get_contents("{$from}.md5")); - if ($actualMd5 != $expectedMd5) { - throw new RuntimeException("{$certFile} MD5 mismatch: expected {$expectedMd5} but got {$actualMd5}"); - } - } - - return $certFile; - } - - /** * Expand a URI template while merging client config settings into the template variables * * @param string $template Template to expand @@ -458,7 +437,9 @@ class Client extends AbstractHasDispatcher implements ClientInterface */ protected function initSsl() { - if ('system' == ($authority = $this->config[self::SSL_CERT_AUTHORITY])) { + $authority = $this->config[self::SSL_CERT_AUTHORITY]; + + if ($authority === 'system') { return; } @@ -467,13 +448,7 @@ class Client extends AbstractHasDispatcher implements ClientInterface } if ($authority === true && substr(__FILE__, 0, 7) == 'phar://') { - $authority = $this->preparePharCacert(); - $that = $this; - $this->getEventDispatcher()->addListener('request.before_send', function ($event) use ($authority, $that) { - if ($authority == $event['request']->getCurlOptions()->get(CURLOPT_CAINFO)) { - $that->preparePharCacert(false); - } - }); + $authority = self::extractPharCacert(__DIR__ . '/Resources/cacert.pem'); } $this->setSslVerification($authority); @@ -504,4 +479,46 @@ class Client extends AbstractHasDispatcher implements ClientInterface return $this; } + + /** + * @deprecated + */ + public function preparePharCacert($md5Check = true) + { + return sys_get_temp_dir() . '/guzzle-cacert.pem'; + } + + /** + * Copies the phar cacert from a phar into the temp directory. + * + * @param string $pharCacertPath Path to the phar cacert. For example: + * 'phar://aws.phar/Guzzle/Http/Resources/cacert.pem' + * + * @return string Returns the path to the extracted cacert file. + * @throws \RuntimeException Throws if the phar cacert cannot be found or + * the file cannot be copied to the temp dir. + */ + public static function extractPharCacert($pharCacertPath) + { + // Copy the cacert.pem file from the phar if it is not in the temp + // folder. + $certFile = sys_get_temp_dir() . '/guzzle-cacert.pem'; + + if (!file_exists($pharCacertPath)) { + throw new \RuntimeException("Could not find $pharCacertPath"); + } + + if (!file_exists($certFile) || + filesize($certFile) != filesize($pharCacertPath) + ) { + if (!copy($pharCacertPath, $certFile)) { + throw new \RuntimeException( + "Could not copy {$pharCacertPath} to {$certFile}: " + . var_export(error_get_last(), true) + ); + } + } + + return $certFile; + } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlHandle.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlHandle.php index 78f9bde87f6..63c6d4206ba 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlHandle.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlHandle.php @@ -48,9 +48,16 @@ class CurlHandle $method = $request->getMethod(); $bodyAsString = $requestCurlOptions->get(self::BODY_AS_STRING); + // Prepare url + $url = (string)$request->getUrl(); + if(($pos = strpos($url, '#')) !== false ){ + // strip fragment from url + $url = substr($url, 0, $pos); + } + // Array of default cURL options. $curlOptions = array( - CURLOPT_URL => $request->getUrl(), + CURLOPT_URL => $url, CURLOPT_CONNECTTIMEOUT => 150, CURLOPT_RETURNTRANSFER => false, CURLOPT_HEADER => false, @@ -200,6 +207,12 @@ class CurlHandle $curlOptions[CURLOPT_PROGRESSFUNCTION] = function () use ($mediator, $handle) { $args = func_get_args(); $args[] = $handle; + + // PHP 5.5 pushed the handle onto the start of the args + if (is_resource($args[0])) { + array_shift($args); + } + call_user_func_array(array($mediator, 'progress'), $args); }; $curlOptions[CURLOPT_NOPROGRESS] = false; diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlMulti.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlMulti.php index a8c569984d2..9e4e637222d 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlMulti.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlMulti.php @@ -7,6 +7,8 @@ use Guzzle\Common\Event; use Guzzle\Http\Exception\MultiTransferException; use Guzzle\Http\Exception\CurlException; use Guzzle\Http\Message\RequestInterface; +use Guzzle\Http\Message\EntityEnclosingRequestInterface; +use Guzzle\Http\Exception\RequestException; /** * Send {@see RequestInterface} objects in parallel using curl_multi @@ -39,8 +41,12 @@ class CurlMulti extends AbstractHasDispatcher implements CurlMultiInterface CURLM_INTERNAL_ERROR => array('CURLM_INTERNAL_ERROR', 'This can only be returned if libcurl bugs. Please report it to us!') ); - public function __construct() + /** @var float */ + protected $selectTimeout; + + public function __construct($selectTimeout = 1.0) { + $this->selectTimeout = $selectTimeout; $this->multiHandle = curl_multi_init(); // @codeCoverageIgnoreStart if ($this->multiHandle === false) { @@ -76,13 +82,12 @@ class CurlMulti extends AbstractHasDispatcher implements CurlMultiInterface public function remove(RequestInterface $request) { $this->removeHandle($request); - foreach ($this->requests as $i => $r) { - if ($request === $r) { - unset($this->requests[$i]); - $this->requests = array_values($this->requests); - $this->dispatch(self::REMOVE_REQUEST, array('request' => $request)); - return true; - } + if (($index = array_search($request, $this->requests, true)) !== false) { + $request = $this->requests[$index]; + unset($this->requests[$index]); + $this->requests = array_values($this->requests); + $this->dispatch(self::REMOVE_REQUEST, array('request' => $request)); + return true; } return false; @@ -130,8 +135,7 @@ class CurlMulti extends AbstractHasDispatcher implements CurlMultiInterface $multiException = new MultiTransferException('Errors during multi transfer'); while ($e = array_shift($exceptions)) { - $multiException->add($e['exception']); - $multiException->addFailedRequest($e['request']); + $multiException->addFailedRequestWithException($e['request'], $e['exception']); } // Add successful requests @@ -155,10 +159,10 @@ class CurlMulti extends AbstractHasDispatcher implements CurlMultiInterface try { $state = $request->setState(RequestInterface::STATE_TRANSFER); if ($state == RequestInterface::STATE_TRANSFER) { - // Add the request curl handle to the multi handle - $this->checkCurlResult(curl_multi_add_handle($this->multiHandle, $this->createCurlHandle($request)->getHandle())); + $this->addHandle($request); } else { - // Requests might decide they don't need to be sent just before transfer (e.g. CachePlugin) + // Requests might decide they don't need to be sent just before + // transfer (e.g. CachePlugin) $this->remove($request); if ($state == RequestInterface::STATE_COMPLETE) { $this->successful[] = $request; @@ -170,6 +174,14 @@ class CurlMulti extends AbstractHasDispatcher implements CurlMultiInterface } } + private function addHandle(RequestInterface $request) + { + $handle = $this->createCurlHandle($request)->getHandle(); + $this->checkCurlResult( + curl_multi_add_handle($this->multiHandle, $handle) + ); + } + /** * Create a curl handle for a request * @@ -191,18 +203,9 @@ class CurlMulti extends AbstractHasDispatcher implements CurlMultiInterface */ protected function perform() { - if (!$this->requests) { - return; - } - - // Initialize the handles with a very quick select timeout - $active = $mrc = null; - $this->executeHandles($active, $mrc, 0.001); $event = new Event(array('curl_multi' => $this)); - $this->processMessages(); while ($this->requests) { - // Notify each request as polling $blocking = $total = 0; foreach ($this->requests as $request) { @@ -214,33 +217,45 @@ class CurlMulti extends AbstractHasDispatcher implements CurlMultiInterface ++$blocking; } } - if ($blocking == $total) { // Sleep to prevent eating CPU because no requests are actually pending a select call usleep(500); } else { - do { - $this->executeHandles($active, $mrc, 1); - } while ($active); + $this->executeHandles(); } - $this->processMessages(); } } /** + * Execute and select curl handles + */ + private function executeHandles() + { + // The first curl_multi_select often times out no matter what, but is usually required for fast transfers + $selectTimeout = 0.001; + $active = false; + do { + while (($mrc = curl_multi_exec($this->multiHandle, $active)) == CURLM_CALL_MULTI_PERFORM); + $this->checkCurlResult($mrc); + $this->processMessages(); + if ($active && curl_multi_select($this->multiHandle, $selectTimeout) === -1) { + // Perform a usleep if a select returns -1: https://bugs.php.net/bug.php?id=61141 + usleep(150); + } + $selectTimeout = $this->selectTimeout; + } while ($active); + } + + /** * Process any received curl multi messages */ private function processMessages() { - // Get messages from curl handles while ($done = curl_multi_info_read($this->multiHandle)) { + $request = $this->resourceHash[(int) $done['handle']]; try { - $request = $this->resourceHash[(int) $done['handle']]; $this->processResponse($request, $this->handles[$request], $done); $this->successful[] = $request; - } catch (MultiTransferException $e) { - $this->removeErroredRequest($request, $e, false); - throw $e; } catch (\Exception $e) { $this->removeErroredRequest($request, $e); } @@ -248,43 +263,14 @@ class CurlMulti extends AbstractHasDispatcher implements CurlMultiInterface } /** - * Execute and select curl handles until there is activity - * - * @param int $active Active value to update - * @param int $mrc Multi result value to update - * @param int $timeout Select timeout in seconds - */ - private function executeHandles(&$active, &$mrc, $timeout = 1) - { - do { - $mrc = curl_multi_exec($this->multiHandle, $active); - } while ($mrc == CURLM_CALL_MULTI_PERFORM && $active); - $this->checkCurlResult($mrc); - - // @codeCoverageIgnoreStart - // Select the curl handles until there is any activity on any of the open file descriptors - // See https://github.com/php/php-src/blob/master/ext/curl/multi.c#L170 - if ($active && $mrc == CURLM_OK && curl_multi_select($this->multiHandle, $timeout) == -1) { - // Perform a usleep if a previously executed select returned -1 - // @see https://bugs.php.net/bug.php?id=61141 - usleep(100); - } - // @codeCoverageIgnoreEnd - } - - /** * Remove a request that encountered an exception * * @param RequestInterface $request Request to remove * @param \Exception $e Exception encountered - * @param bool $buffer Set to false to not buffer the exception */ - protected function removeErroredRequest(RequestInterface $request, \Exception $e = null, $buffer = true) + protected function removeErroredRequest(RequestInterface $request, \Exception $e = null) { - if ($buffer) { - $this->exceptions[] = array('request' => $request, 'exception' => $e); - } - + $this->exceptions[] = array('request' => $request, 'exception' => $e); $this->remove($request); $this->dispatch(self::MULTI_EXCEPTION, array('exception' => $e, 'all_exceptions' => $this->exceptions)); } @@ -310,23 +296,31 @@ class CurlMulti extends AbstractHasDispatcher implements CurlMultiInterface $this->removeHandle($request); if (!$curlException) { - $state = $request->setState(RequestInterface::STATE_COMPLETE, array('handle' => $handle)); - // Only remove the request if it wasn't resent as a result of the state change - if ($state != RequestInterface::STATE_TRANSFER) { - $this->remove($request); - } - } else { - // Set the state of the request to an error - $state = $request->setState(RequestInterface::STATE_ERROR, array('exception' => $curlException)); - // Allow things to ignore the error if possible - if ($state != RequestInterface::STATE_TRANSFER) { - $this->remove($request); - } - // The error was not handled, so fail - if ($state == RequestInterface::STATE_ERROR) { - /** @var CurlException $curlException */ - throw $curlException; + if ($this->validateResponseWasSet($request)) { + $state = $request->setState( + RequestInterface::STATE_COMPLETE, + array('handle' => $handle) + ); + // Only remove the request if it wasn't resent as a result of + // the state change + if ($state != RequestInterface::STATE_TRANSFER) { + $this->remove($request); + } } + return; + } + + // Set the state of the request to an error + $state = $request->setState(RequestInterface::STATE_ERROR, array('exception' => $curlException)); + // Allow things to ignore the error if possible + if ($state != RequestInterface::STATE_TRANSFER) { + $this->remove($request); + } + + // The error was not handled, so fail + if ($state == RequestInterface::STATE_ERROR) { + /** @var CurlException $curlException */ + throw $curlException; } } @@ -339,9 +333,9 @@ class CurlMulti extends AbstractHasDispatcher implements CurlMultiInterface { if (isset($this->handles[$request])) { $handle = $this->handles[$request]; + curl_multi_remove_handle($this->multiHandle, $handle->getHandle()); unset($this->handles[$request]); unset($this->resourceHash[(int) $handle->getHandle()]); - curl_multi_remove_handle($this->multiHandle, $handle->getHandle()); $handle->close(); } } @@ -387,4 +381,43 @@ class CurlMulti extends AbstractHasDispatcher implements CurlMultiInterface ); } } + + /** + * @link https://github.com/guzzle/guzzle/issues/710 + */ + private function validateResponseWasSet(RequestInterface $request) + { + if ($request->getResponse()) { + return true; + } + + $body = $request instanceof EntityEnclosingRequestInterface + ? $request->getBody() + : null; + + if (!$body) { + $rex = new RequestException( + 'No response was received for a request with no body. This' + . ' could mean that you are saturating your network.' + ); + $rex->setRequest($request); + $this->removeErroredRequest($request, $rex); + } elseif (!$body->isSeekable() || !$body->seek(0)) { + // Nothing we can do with this. Sorry! + $rex = new RequestException( + 'The connection was unexpectedly closed. The request would' + . ' have been retried, but attempting to rewind the' + . ' request body failed.' + ); + $rex->setRequest($request); + $this->removeErroredRequest($request, $rex); + } else { + $this->remove($request); + // Add the request back to the batch to retry automatically. + $this->requests[] = $request; + $this->addHandle($request); + } + + return false; + } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlMultiProxy.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlMultiProxy.php index 665f029a79d..c5b80a7f57f 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlMultiProxy.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/CurlMultiProxy.php @@ -15,13 +15,16 @@ class CurlMultiProxy extends AbstractHasDispatcher implements CurlMultiInterface protected $groups = array(); protected $queued = array(); protected $maxHandles; + protected $selectTimeout; /** - * @param int $maxHandles The maximum number of idle CurlMulti handles to allow to remain open + * @param int $maxHandles The maximum number of idle CurlMulti handles to allow to remain open + * @param float $selectTimeout timeout for curl_multi_select */ - public function __construct($maxHandles = 3) + public function __construct($maxHandles = 3, $selectTimeout = 1.0) { $this->maxHandles = $maxHandles; + $this->selectTimeout = $selectTimeout; // You can get some weird "Too many open files" errors when sending a large amount of requests in parallel. // These two statements autoload classes before a system runs out of file descriptors so that you can get back // valuable error messages if you run out. @@ -122,7 +125,7 @@ class CurlMultiProxy extends AbstractHasDispatcher implements CurlMultiInterface } // All are claimed, so create one - $handle = new CurlMulti(); + $handle = new CurlMulti($this->selectTimeout); $handle->setEventDispatcher($this->getEventDispatcher()); $this->handles[] = $handle; diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/RequestMediator.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/RequestMediator.php index 0a70c626bf0..5d1a0cd8724 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/RequestMediator.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Curl/RequestMediator.php @@ -114,7 +114,12 @@ class RequestMediator )); } - return $this->request->getResponse()->getBody()->write($write); + if ($response = $this->request->getResponse()) { + return $response->getBody()->write($write); + } else { + // Unexpected data received before response headers - abort transfer + return 0; + } } /** @@ -128,18 +133,15 @@ class RequestMediator */ public function readRequestBody($ch, $fd, $length) { - $read = ''; - - if ($this->request->getBody()) { - $read = $this->request->getBody()->read($length); - if ($this->emitIo) { - $this->request->dispatch('curl.callback.read', array( - 'request' => $this->request, - 'read' => $read - )); - } + if (!($body = $this->request->getBody())) { + return ''; + } + + $read = (string) $body->read($length); + if ($this->emitIo) { + $this->request->dispatch('curl.callback.read', array('request' => $this->request, 'read' => $read)); } - return !$read ? '' : $read; + return $read; } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/EntityBody.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/EntityBody.php index 625be6ee173..b60d170f02a 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/EntityBody.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/EntityBody.php @@ -126,9 +126,11 @@ class EntityBody extends Stream implements EntityBodyInterface public function getContentMd5($rawOutput = false, $base64Encode = false) { - $hash = self::getHash($this, 'md5', $rawOutput); - - return $hash && $base64Encode ? base64_encode($hash) : $hash; + if ($hash = self::getHash($this, 'md5', $rawOutput)) { + return $hash && $base64Encode ? base64_encode($hash) : $hash; + } else { + return false; + } } /** diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Exception/BadResponseException.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Exception/BadResponseException.php index 9b98a8642ba..0ed0b47c254 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Exception/BadResponseException.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Exception/BadResponseException.php @@ -32,7 +32,6 @@ class BadResponseException extends RequestException } else { $label = 'Unsuccessful response'; $class = __CLASS__; - $e = new self(); } $message = $label . PHP_EOL . implode(PHP_EOL, array( diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Exception/MultiTransferException.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Exception/MultiTransferException.php index 5bea80f3337..91e384daee4 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Exception/MultiTransferException.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Exception/MultiTransferException.php @@ -12,6 +12,7 @@ class MultiTransferException extends ExceptionCollection { protected $successfulRequests = array(); protected $failedRequests = array(); + protected $exceptionForRequest = array(); /** * Get all of the requests in the transfer @@ -52,6 +53,37 @@ class MultiTransferException extends ExceptionCollection } /** + * Add to the array of failed requests and associate with exceptions + * + * @param RequestInterface $request Failed request + * @param \Exception $exception Exception to add and associate with + * + * @return self + */ + public function addFailedRequestWithException(RequestInterface $request, \Exception $exception) + { + $this->add($exception) + ->addFailedRequest($request) + ->exceptionForRequest[spl_object_hash($request)] = $exception; + + return $this; + } + + /** + * Get the Exception that caused the given $request to fail + * + * @param RequestInterface $request Failed command + * + * @return \Exception|null + */ + public function getExceptionForFailedRequest(RequestInterface $request) + { + $oid = spl_object_hash($request); + + return isset($this->exceptionForRequest[$oid]) ? $this->exceptionForRequest[$oid] : null; + } + + /** * Set all of the successful requests * * @param array Array of requests diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/IoEmittingEntityBody.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/IoEmittingEntityBody.php index ae32dee9057..4cc17a835ae 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/IoEmittingEntityBody.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/IoEmittingEntityBody.php @@ -43,7 +43,7 @@ class IoEmittingEntityBody extends AbstractEntityBodyDecorator implements HasDis public function dispatch($eventName, array $context = array()) { - $this->getEventDispatcher()->dispatch($eventName, new Event($context)); + return $this->getEventDispatcher()->dispatch($eventName, new Event($context)); } /** diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/EntityEnclosingRequest.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/EntityEnclosingRequest.php index d9c83d815be..212850a254a 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/EntityEnclosingRequest.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/EntityEnclosingRequest.php @@ -7,7 +7,6 @@ use Guzzle\Http\EntityBodyInterface; use Guzzle\Http\QueryString; use Guzzle\Http\RedirectPlugin; use Guzzle\Http\Exception\RequestException; -use Guzzle\Http\Mimetypes; /** * HTTP request that sends an entity-body in the request message (POST, PUT, PATCH, DELETE) @@ -61,7 +60,7 @@ class EntityEnclosingRequest extends Request implements EntityEnclosingRequestIn // Auto detect the Content-Type from the path of the request if possible if ($contentType === null && !$this->hasHeader('Content-Type')) { - $contentType = $this->body->getContentType() ?: Mimetypes::getInstance()->fromFilename($this->getPath()); + $contentType = $this->body->getContentType(); } if ($contentType) { @@ -181,7 +180,7 @@ class EntityEnclosingRequest extends Request implements EntityEnclosingRequestIn return $this; } - public function addPostFile($field, $filename = null, $contentType = null) + public function addPostFile($field, $filename = null, $contentType = null, $postname = null) { $data = null; @@ -197,7 +196,7 @@ class EntityEnclosingRequest extends Request implements EntityEnclosingRequestIn throw new RequestException('The path to a file must be a string'); } elseif (!empty($filename)) { // Adding an empty file will cause cURL to error out - $data = new PostFile($field, $filename, $contentType); + $data = new PostFile($field, $filename, $contentType, $postname); } if ($data) { diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/EntityEnclosingRequestInterface.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/EntityEnclosingRequestInterface.php index d9c037de683..49ad4595d6f 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/EntityEnclosingRequestInterface.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/EntityEnclosingRequestInterface.php @@ -108,9 +108,10 @@ interface EntityEnclosingRequestInterface extends RequestInterface * @param string $filename Full path to the file. Do not include the @ symbol. * @param string $contentType Optional Content-Type to add to the Content-Disposition. * Default behavior is to guess. Set to false to not specify. + * @param string $postname The name of the file, when posted. (e.g. rename the file) * @return self */ - public function addPostFile($field, $filename = null, $contentType = null); + public function addPostFile($field, $filename = null, $contentType = null, $postname = null); /** * Add POST files to use in the upload diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Header.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Header.php index 3e82176a895..50597b2a698 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Header.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Header.php @@ -81,7 +81,8 @@ class Header implements HeaderInterface for ($i = 0, $total = count($values); $i < $total; $i++) { if (strpos($values[$i], $this->glue) !== false) { - foreach (explode($this->glue, $values[$i]) as $v) { + // Explode on glue when the glue is not inside of a comma + foreach (preg_split('/' . preg_quote($this->glue) . '(?=([^"]*"[^"]*")*[^"]*$)/', $values[$i]) as $v) { $values[] = trim($v); } unset($values[$i]); @@ -122,23 +123,24 @@ class Header implements HeaderInterface return new \ArrayIterator($this->toArray()); } - /** - * {@inheritdoc} - * @todo Do not split semicolons when enclosed in quotes (e.g. foo="baz;bar") - */ public function parseParams() { - $params = array(); + $params = $matches = array(); $callback = array($this, 'trimHeader'); // Normalize the header into a single array and iterate over all values foreach ($this->normalize()->toArray() as $val) { $part = array(); - foreach (explode(';', $val) as $kvp) { - $pieces = array_map($callback, explode('=', $kvp, 2)); + foreach (preg_split('/;(?=([^"]*"[^"]*")*[^"]*$)/', $val) as $kvp) { + if (!preg_match_all('/<[^>]+>|[^=]+/', $kvp, $matches)) { + continue; + } + $pieces = array_map($callback, $matches[0]); $part[$pieces[0]] = isset($pieces[1]) ? $pieces[1] : ''; } - $params[] = $part; + if ($part) { + $params[] = $part; + } } return $params; diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Header/HeaderCollection.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Header/HeaderCollection.php index ec282d9a911..8c7f6aefba0 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Header/HeaderCollection.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Header/HeaderCollection.php @@ -2,7 +2,6 @@ namespace Guzzle\Http\Message\Header; -use Guzzle\Common\Collection; use Guzzle\Common\ToArrayInterface; /** diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/PostFile.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/PostFile.php index 0beb7a7ce6b..141e66d7ed6 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/PostFile.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/PostFile.php @@ -14,16 +14,19 @@ class PostFile implements PostFileInterface protected $fieldName; protected $contentType; protected $filename; + protected $postname; /** * @param string $fieldName Name of the field - * @param string $filename Path to the file + * @param string $filename Local path to the file + * @param string $postname Remote post file name * @param string $contentType Content-Type of the upload */ - public function __construct($fieldName, $filename, $contentType = null) + public function __construct($fieldName, $filename, $contentType = null, $postname = null) { $this->fieldName = $fieldName; $this->setFilename($filename); + $this->postname = $postname ? $postname : basename($filename); $this->contentType = $contentType ?: $this->guessContentType(); } @@ -55,11 +58,23 @@ class PostFile implements PostFileInterface return $this; } + public function setPostname($postname) + { + $this->postname = $postname; + + return $this; + } + public function getFilename() { return $this->filename; } + public function getPostname() + { + return $this->postname; + } + public function setContentType($type) { $this->contentType = $type; @@ -77,11 +92,11 @@ class PostFile implements PostFileInterface // PHP 5.5 introduced a CurlFile object that deprecates the old @filename syntax // See: https://wiki.php.net/rfc/curl-file-upload if (function_exists('curl_file_create')) { - return curl_file_create($this->filename, $this->contentType, basename($this->filename)); + return curl_file_create($this->filename, $this->contentType, $this->postname); } // Use the old style if using an older version of PHP - $value = "@{$this->filename};filename=" . basename($this->filename); + $value = "@{$this->filename};filename=" . $this->postname; if ($this->contentType) { $value .= ';type=' . $this->contentType; } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/PostFileInterface.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/PostFileInterface.php index 99dc706946f..7f0779d1e85 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/PostFileInterface.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/PostFileInterface.php @@ -36,6 +36,15 @@ interface PostFileInterface public function setFilename($path); /** + * Set the post name of the file + * + * @param string $name The new name of the file + * + * @return self + */ + public function setPostname($name); + + /** * Get the full path to the file * * @return string @@ -43,6 +52,13 @@ interface PostFileInterface public function getFilename(); /** + * Get the post name of the file + * + * @return string + */ + public function getPostname(); + + /** * Set the Content-Type of the file * * @param string $type Content type diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Request.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Request.php index 1fb9a01e165..f218cd5ce90 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Request.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Request.php @@ -275,7 +275,7 @@ class Request extends AbstractMessage implements RequestInterface // Include the port in the Host header if it is not the default port for the scheme of the URL $scheme = $this->url->getScheme(); - if (($scheme == 'http' && $port != 80) || ($scheme == 'https' && $port != 443)) { + if ($port && (($scheme == 'http' && $port != 80) || ($scheme == 'https' && $port != 443))) { $this->headers['host'] = $this->headerFactory->createHeader('Host', $this->url->getHost() . ':' . $port); } else { $this->headers['host'] = $this->headerFactory->createHeader('Host', $this->url->getHost()); @@ -532,7 +532,8 @@ class Request extends AbstractMessage implements RequestInterface public function dispatch($eventName, array $context = array()) { $context['request'] = $this; - $this->getEventDispatcher()->dispatch($eventName, new Event($context)); + + return $this->getEventDispatcher()->dispatch($eventName, new Event($context)); } public function addSubscriber(EventSubscriberInterface $subscriber) @@ -543,21 +544,6 @@ class Request extends AbstractMessage implements RequestInterface } /** - * {@inheritdoc} - * Adds a check for Host header changes - */ - public function addHeader($header, $value) - { - parent::addHeader($header, $value); - - if ($header == 'host' || $header == 'Host') { - $this->setHost((string) $this->getHeader('Host')); - } - - return $this; - } - - /** * Get an array containing the request and response for event notifications * * @return array diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/RequestFactory.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/RequestFactory.php index f14d0879c36..ba00a767614 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/RequestFactory.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/RequestFactory.php @@ -7,7 +7,6 @@ use Guzzle\Common\Exception\InvalidArgumentException; use Guzzle\Http\RedirectPlugin; use Guzzle\Http\Url; use Guzzle\Parser\ParserRegistry; -use Guzzle\Plugin\Log\LogPlugin; /** * Default HTTP request factory used to create the default {@see Request} and {@see EntityEnclosingRequest} objects. @@ -85,7 +84,7 @@ class RequestFactory implements RequestFactoryInterface { $method = strtoupper($method); - if ($method == 'GET' || $method == 'HEAD' || $method == 'TRACE' || $method == 'OPTIONS') { + if ($method == 'GET' || $method == 'HEAD' || $method == 'TRACE') { // Handle non-entity-enclosing request methods $request = new $this->requestClass($method, $url, $headers); if ($body) { @@ -98,7 +97,7 @@ class RequestFactory implements RequestFactoryInterface } else { // Create an entity enclosing request by default $request = new $this->entityEnclosingRequestClass($method, $url, $headers); - if ($body) { + if ($body || $body === '0') { // Add POST fields and files to an entity enclosing request if an array is used if (is_array($body) || $body instanceof Collection) { // Normalize PHP style cURL uploads with a leading '@' symbol @@ -139,7 +138,7 @@ class RequestFactory implements RequestFactoryInterface public function cloneRequestWithMethod(RequestInterface $request, $method) { // Create the request with the same client if possible - if ($client = $request->getClient()) { + if ($request->getClient()) { $cloned = $request->getClient()->createRequest($method, $request->getUrl(), $request->getHeaders()); } else { $cloned = $this->create($method, $request->getUrl(), $request->getHeaders()); @@ -270,7 +269,7 @@ class RequestFactory implements RequestFactoryInterface if ($value === false || $value === 0) { $dispatcher = $request->getEventDispatcher(); foreach ($dispatcher->getListeners('request.error') as $listener) { - if ($listener[0] == 'Guzzle\Http\Message\Request' && $listener[1] = 'onRequestError') { + if (is_array($listener) && $listener[0] == 'Guzzle\Http\Message\Request' && $listener[1] = 'onRequestError') { $dispatcher->removeListener('request.error', $listener); break; } @@ -294,22 +293,26 @@ class RequestFactory implements RequestFactoryInterface protected function visit_timeout(RequestInterface $request, $value, $flags) { - $request->getCurlOptions()->set(CURLOPT_TIMEOUT_MS, $value * 1000); + if (defined('CURLOPT_TIMEOUT_MS')) { + $request->getCurlOptions()->set(CURLOPT_TIMEOUT_MS, $value * 1000); + } else { + $request->getCurlOptions()->set(CURLOPT_TIMEOUT, $value); + } } protected function visit_connect_timeout(RequestInterface $request, $value, $flags) { - $request->getCurlOptions()->set(CURLOPT_CONNECTTIMEOUT_MS, $value * 1000); + if (defined('CURLOPT_CONNECTTIMEOUT_MS')) { + $request->getCurlOptions()->set(CURLOPT_CONNECTTIMEOUT_MS, $value * 1000); + } else { + $request->getCurlOptions()->set(CURLOPT_CONNECTTIMEOUT, $value); + } } protected function visit_debug(RequestInterface $request, $value, $flags) { - if (class_exists('Guzzle\Plugin\Log\LogPlugin')) { - $request->addSubscriber(LogPlugin::getDebugPlugin()); - } else { - // @codeCoverageIgnoreStart + if ($value) { $request->getCurlOptions()->set(CURLOPT_VERBOSE, true); - // @codeCoverageIgnoreEnd } } @@ -333,4 +336,24 @@ class RequestFactory implements RequestFactoryInterface { $request->getCurlOptions()->set(CURLOPT_PROXY, $value, $flags); } + + protected function visit_cert(RequestInterface $request, $value, $flags) + { + if (is_array($value)) { + $request->getCurlOptions()->set(CURLOPT_SSLCERT, $value[0]); + $request->getCurlOptions()->set(CURLOPT_SSLCERTPASSWD, $value[1]); + } else { + $request->getCurlOptions()->set(CURLOPT_SSLCERT, $value); + } + } + + protected function visit_ssl_key(RequestInterface $request, $value, $flags) + { + if (is_array($value)) { + $request->getCurlOptions()->set(CURLOPT_SSLKEY, $value[0]); + $request->getCurlOptions()->set(CURLOPT_SSLKEYPASSWD, $value[1]); + } else { + $request->getCurlOptions()->set(CURLOPT_SSLKEY, $value); + } + } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/RequestFactoryInterface.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/RequestFactoryInterface.php index 5f31b5060be..6088f10e994 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/RequestFactoryInterface.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/RequestFactoryInterface.php @@ -88,6 +88,12 @@ interface RequestFactoryInterface * indefinitely. * "verify": Set to true to enable SSL cert validation (the default), false to disable, or supply the path * to a CA bundle to enable verification using a custom certificate. + * "cert": Set to a string to specify the path to a file containing a PEM formatted certificate. If a + * password is required, then set an array containing the path to the PEM file followed by the the + * password required for the certificate. + * "ssl_key": Specify the path to a file containing a private SSL key in PEM format. If a password is + * required, then set an array containing the path to the SSL key followed by the password required for + * the certificate. * "proxy": Specify an HTTP proxy (e.g. "http://username:password@192.168.16.1:10") * "debug": Set to true to display all data sent over the wire * @param int $flags Bitwise flags to apply when applying the options to the request. Defaults to no special diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Response.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Response.php index 654ea761ff3..153e2dd9636 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Response.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Message/Response.php @@ -865,18 +865,38 @@ class Response extends AbstractMessage implements \Serializable } /** - * Parse the XML response body and return a SimpleXMLElement + * Parse the XML response body and return a \SimpleXMLElement. + * + * In order to prevent XXE attacks, this method disables loading external + * entities. If you rely on external entities, then you must parse the + * XML response manually by accessing the response body directly. * * @return \SimpleXMLElement * @throws RuntimeException if the response body is not in XML format + * @link http://websec.io/2012/08/27/Preventing-XXE-in-PHP.html */ public function xml() { + $errorMessage = null; + $internalErrors = libxml_use_internal_errors(true); + $disableEntities = libxml_disable_entity_loader(true); + libxml_clear_errors(); + try { - // Allow XML to be retrieved even if there is no response body - $xml = new \SimpleXMLElement((string) $this->body ?: '<root />'); + $xml = new \SimpleXMLElement((string) $this->body ?: '<root />', LIBXML_NONET); + if ($error = libxml_get_last_error()) { + $errorMessage = $error->message; + } } catch (\Exception $e) { - throw new RuntimeException('Unable to parse response body into XML: ' . $e->getMessage()); + $errorMessage = $e->getMessage(); + } + + libxml_clear_errors(); + libxml_use_internal_errors($internalErrors); + libxml_disable_entity_loader($disableEntities); + + if ($errorMessage) { + throw new RuntimeException('Unable to parse response body into XML: ' . $errorMessage); } return $xml; diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Mimetypes.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Mimetypes.php index 15af061f6f3..d71586a05b3 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Mimetypes.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Mimetypes.php @@ -943,6 +943,8 @@ class Mimetypes */ public function fromExtension($extension) { + $extension = strtolower($extension); + return isset($this->mimetypes[$extension]) ? $this->mimetypes[$extension] : null; } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/QueryString.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/QueryString.php index 62bdfa8c7ae..38a26407382 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/QueryString.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/QueryString.php @@ -3,6 +3,8 @@ namespace Guzzle\Http; use Guzzle\Common\Collection; +use Guzzle\Common\Exception\RuntimeException; +use Guzzle\Http\QueryAggregator\DuplicateAggregator; use Guzzle\Http\QueryAggregator\QueryAggregatorInterface; use Guzzle\Http\QueryAggregator\PhpAggregator; @@ -33,7 +35,7 @@ class QueryString extends Collection protected $aggregator; /** @var array Cached PHP aggregator */ - protected static $defaultAggregator = null; + private static $defaultAggregator = null; /** * Parse a query string into a QueryString object @@ -45,31 +47,40 @@ class QueryString extends Collection public static function fromString($query) { $q = new static(); + if ($query === '') { + return $q; + } - if ($query || $query === '0') { - if ($query[0] == '?') { - $query = substr($query, 1); - } - foreach (explode('&', $query) as $kvp) { - $parts = explode('=', $kvp, 2); - $key = rawurldecode($parts[0]); - - if ($paramIsPhpStyleArray = substr($key, -2) == '[]') { - $key = substr($key, 0, -2); - } + $foundDuplicates = $foundPhpStyle = false; - if (isset($parts[1])) { - $value = rawurldecode(str_replace('+', '%20', $parts[1])); - if ($paramIsPhpStyleArray && !$q->hasKey($key)) { - $value = array($value); - } + foreach (explode('&', $query) as $kvp) { + $parts = explode('=', $kvp, 2); + $key = rawurldecode($parts[0]); + if ($paramIsPhpStyleArray = substr($key, -2) == '[]') { + $foundPhpStyle = true; + $key = substr($key, 0, -2); + } + if (isset($parts[1])) { + $value = rawurldecode(str_replace('+', '%20', $parts[1])); + if (isset($q[$key])) { $q->add($key, $value); + $foundDuplicates = true; + } elseif ($paramIsPhpStyleArray) { + $q[$key] = array($value); } else { - $q->add($key, null); + $q[$key] = $value; } + } else { + // Uses false by default to represent keys with no trailing "=" sign. + $q->add($key, false); } } + // Use the duplicate aggregator if duplicates were found and not using PHP style arrays + if ($foundDuplicates && !$foundPhpStyle) { + $q->setAggregator(new DuplicateAggregator()); + } + return $q; } @@ -77,6 +88,7 @@ class QueryString extends Collection * Convert the query string parameters to a query string string * * @return string + * @throws RuntimeException */ public function __toString() { @@ -84,21 +96,12 @@ class QueryString extends Collection return ''; } - $queryString = ''; - + $queryList = array(); foreach ($this->prepareData($this->data) as $name => $value) { - foreach ((array) $value as $v) { - if ($queryString) { - $queryString .= $this->fieldSeparator; - } - $queryString .= $name; - if ($v !== self::BLANK) { - $queryString .= $this->valueSeparator . $v; - } - } + $queryList[] = $this->convertKvp($name, $value); } - return $queryString; + return implode($this->fieldSeparator, $queryList); } /** @@ -255,7 +258,10 @@ class QueryString extends Collection $temp = array(); foreach ($data as $key => $value) { - if (is_array($value)) { + if ($value === false || $value === null) { + // False and null will not include the "=". Use an empty string to include the "=". + $temp[$this->encodeValue($key)] = $value; + } elseif (is_array($value)) { $temp = array_merge($temp, $this->aggregator->aggregate($key, $value, $this)); } else { $temp[$this->encodeValue($key)] = $this->encodeValue($value); @@ -264,4 +270,28 @@ class QueryString extends Collection return $temp; } + + /** + * Converts a key value pair that can contain strings, nulls, false, or arrays + * into a single string. + * + * @param string $name Name of the field + * @param mixed $value Value of the field + * @return string + */ + private function convertKvp($name, $value) + { + if ($value === self::BLANK || $value === null || $value === false) { + return $name; + } elseif (!is_array($value)) { + return $name . $this->valueSeparator . $value; + } + + $result = ''; + foreach ($value as $v) { + $result .= $this->convertKvp($name, $v) . $this->fieldSeparator; + } + + return rtrim($result, $this->fieldSeparator); + } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/ReadLimitEntityBody.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/ReadLimitEntityBody.php index d0bc867e3aa..a34893a661e 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/ReadLimitEntityBody.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/ReadLimitEntityBody.php @@ -22,7 +22,6 @@ class ReadLimitEntityBody extends AbstractEntityBodyDecorator { parent::__construct($body); $this->setLimit($limit)->setOffset($offset); - $this->body->seek($offset); } /** @@ -36,7 +35,8 @@ class ReadLimitEntityBody extends AbstractEntityBodyDecorator public function isConsumed() { - return (($this->offset + $this->limit) - $this->body->ftell()) <= 0; + return $this->body->isConsumed() || + ($this->body->ftell() >= $this->offset + $this->limit); } /** diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/RedirectPlugin.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/RedirectPlugin.php index 391edb152b7..1a824b8b76d 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/RedirectPlugin.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/RedirectPlugin.php @@ -68,7 +68,7 @@ class RedirectPlugin implements EventSubscriberInterface // Trace the original request based on parameter history $original = $this->getOriginalRequest($request); - // Terminating condition to set the effective repsonse on the original request + // Terminating condition to set the effective response on the original request if (!$response->isRedirect() || !$response->hasHeader('Location')) { if ($request !== $original) { // This is a terminating redirect response, so set it on the original request @@ -123,9 +123,9 @@ class RedirectPlugin implements EventSubscriberInterface $redirectRequest = null; $strict = $original->getParams()->get(self::STRICT_REDIRECTS); - // Use a GET request if this is an entity enclosing request and we are not forcing RFC compliance, but rather - // emulating what all browsers would do - if ($request instanceof EntityEnclosingRequestInterface && !$strict && $statusCode <= 302) { + // Switch method to GET for 303 redirects. 301 and 302 redirects also switch to GET unless we are forcing RFC + // compliance to emulate what most browsers do. NOTE: IE only switches methods on 301/302 when coming from a POST. + if ($request instanceof EntityEnclosingRequestInterface && ($statusCode == 303 || (!$strict && $statusCode <= 302))) { $redirectRequest = RequestFactory::getInstance()->cloneRequestWithMethod($request, 'GET'); } else { $redirectRequest = clone $request; @@ -141,7 +141,7 @@ class RedirectPlugin implements EventSubscriberInterface $originalUrl = $redirectRequest->getUrl(true); // Remove query string parameters and just take what is present on the redirect Location header $originalUrl->getQuery()->clear(); - $location = $originalUrl->combine((string) $location); + $location = $originalUrl->combine((string) $location, true); } $redirectRequest->setUrl($location); @@ -174,7 +174,7 @@ class RedirectPlugin implements EventSubscriberInterface /** * Prepare the request for redirection and enforce the maximum number of allowed redirects per client * - * @param RequestInterface $original Origina request + * @param RequestInterface $original Original request * @param RequestInterface $request Request to prepare and validate * @param Response $response The current response * diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Resources/cacert.pem b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Resources/cacert.pem index 99b310bce91..9794dfb70f4 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Resources/cacert.pem +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Resources/cacert.pem @@ -1,12 +1,12 @@ ## ## ca-bundle.crt -- Bundle of CA Root Certificates ## -## Certificate data from Mozilla as of: Sat Dec 29 20:03:40 2012 +## Certificate data from Mozilla as of: Tue Apr 22 08:29:31 2014 ## ## This is a bundle of X.509 certificates of public Certificate Authorities ## (CA). These were automatically extracted from Mozilla's root certificates ## file (certdata.txt). This file can be found in the mozilla source tree: -## http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1 +## http://mxr.mozilla.org/mozilla-release/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1 ## ## It contains the certificates in PEM format and therefore ## can be directly used with curl / libcurl / php_curl, or with @@ -14,7 +14,6 @@ ## Just configure this file as the SSLCACertificateFile. ## -# @(#) $RCSfile: certdata.txt,v $ $Revision: 1.87 $ $Date: 2012/12/29 16:32:45 $ GTE CyberTrust Global Root ========================== @@ -91,46 +90,6 @@ BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95 70+sB3c4 -----END CERTIFICATE----- -Digital Signature Trust Co. Global CA 1 -======================================= ------BEGIN CERTIFICATE----- -MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE -ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy -MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs -IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA -A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE -NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i -o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo -BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0 -dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw -IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY -MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM -BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB -ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq -kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4 -RbyhkwS7hp86W0N6w4pl ------END CERTIFICATE----- - -Digital Signature Trust Co. Global CA 3 -======================================= ------BEGIN CERTIFICATE----- -MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE -ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy -MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs -IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA -A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD -VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS -xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo -BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0 -dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw -IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY -MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM -BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB -AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi -up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1 -mPnHfxsb1gYgAlihw6ID ------END CERTIFICATE----- - Verisign Class 3 Public Primary Certification Authority ======================================================= -----BEGIN CERTIFICATE----- @@ -147,44 +106,6 @@ WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf Tqj/ZA1k -----END CERTIFICATE----- -Verisign Class 1 Public Primary Certification Authority - G2 -============================================================ ------BEGIN CERTIFICATE----- -MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT -MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz -dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT -MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz -dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgd -k4xWArzZbxpvUjZudVYKVdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIq -WpDBucSmFc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQIDAQAB -MA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0Jh9ZrbWB85a7FkCMM -XErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2uluIncrKTdcu1OofdPvAbT6shkdHvC -lUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68DzFc6PLZ ------END CERTIFICATE----- - -Verisign Class 2 Public Primary Certification Authority - G2 -============================================================ ------BEGIN CERTIFICATE----- -MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h -cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp -Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 -c3QgTmV0d29yazAeFw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h -cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp -Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 -c3QgTmV0d29yazCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjx -nNuX6Zr8wgQGE75fUsjMHiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRC -wiNPStjwDqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cCAwEA -ATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9jinb3/7aHmZuovCfTK -1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAXrXfMSTWqz9iP0b63GJZHc2pUIjRk -LbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnInjBJ7xUS0rg== ------END CERTIFICATE----- - Verisign Class 3 Public Primary Certification Authority - G2 ============================================================ -----BEGIN CERTIFICATE----- @@ -304,54 +225,6 @@ V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r on+jjBXu -----END CERTIFICATE----- -Verisign Class 1 Public Primary Certification Authority - G3 -============================================================ ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv -cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy -dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAN2E1Lm0+afY8wR4nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/E -bRrsC+MO8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjVojYJ -rKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjbPG7PoBMAGrgnoeS+ -Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP26KbqxzcSXKMpHgLZ2x87tNcPVkeB -FQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vrn5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA -q2aN17O6x5q25lXQBfGfMY1aqtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/N -y9Sn2WCVhDr4wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3 -ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrspSCAaWihT37h -a88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4E1Z5T21Q6huwtVexN2ZYI/Pc -D98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g== ------END CERTIFICATE----- - -Verisign Class 2 Public Primary Certification Authority - G3 -============================================================ ------BEGIN CERTIFICATE----- -MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJBgNVBAYTAlVT -MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29y -azE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ug -b25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0 -aW9uIEF1dGhvcml0eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 -c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y -aXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEArwoNwtUs22e5LeWUJ92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6 -tW8UvxDOJxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUYwZF7 -C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9okoqQHgiBVrKtaaNS -0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjNqWm6o+sdDZykIKbBoMXRRkwXbdKs -Zj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/ESrg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0 -JhU8wI1NQ0kdvekhktdmnLfexbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf -0xwLRtxyID+u7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU -sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RIsH/7NiXaldDx -JBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTPcjnhsUPgKM+351psE2tJs//j -GHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q ------END CERTIFICATE----- - Verisign Class 3 Public Primary Certification Authority - G3 ============================================================ -----BEGIN CERTIFICATE----- @@ -430,11 +303,11 @@ n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= Entrust.net Premium 2048 Secure Server CA ========================================= -----BEGIN CERTIFICATE----- -MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u +MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx -NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 +NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A @@ -442,14 +315,13 @@ MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi -VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC -AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER -gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B -AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo -oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS -o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z -2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX -OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ== +VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ +KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy +T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf +zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT +J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e +nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE= -----END CERTIFICATE----- Baltimore CyberTrust Root @@ -507,26 +379,6 @@ lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+ KpYrtWKmpj29f5JZzVoqgrI3eQ== -----END CERTIFICATE----- -Equifax Secure eBusiness CA 2 -============================= ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE -ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y -MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT -DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB -nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn -2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5 -BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG -A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx -JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG -A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e -uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB -Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1 -jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia -78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm -V+GRMOrN ------END CERTIFICATE----- - AddTrust Low-Value Services Root ================================ -----BEGIN CERTIFICATE----- @@ -772,31 +624,6 @@ gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS -----END CERTIFICATE----- -UTN-USER First-Network Applications -=================================== ------BEGIN CERTIFICATE----- -MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCBozELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzAp -BgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5 -WhcNMTkwNzA5MTg1NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5T -YWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBB -cHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+5Gh5DZVhawGNFug -mliy+LUPBXeDrjKxdpJo7CNKyXY/45y2N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4Cj -DUeJT1FxL+78P/m4FoCHiZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXu -Ozr0hAReYFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1axwi -P8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6gyN7igEL66S/ozjIE -j3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8w -HQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPhahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9j -cmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0G -CSqGSIb3DQEBBQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y -IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6LzsQCv4AdRWOOTK -RIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4ZSfP1FMa8Kxun08FDAOBp4Qp -xFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qMYEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAq -DbUMo2s/rn9X9R+WfN9v3YIwLGUbQErNaLly7HF27FSOH4UMAWr6pjisH8SE ------END CERTIFICATE----- - America Online Root Certification Authority 1 ============================================= -----BEGIN CERTIFICATE----- @@ -1084,26 +911,6 @@ s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ FL39vmwLAw== -----END CERTIFICATE----- -Sonera Class 1 Root CA -====================== ------BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG -U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAxMDQwNjEwNDkxM1oXDTIxMDQw -NjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh -IENsYXNzMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H88 -7dF+2rDNbS82rDTG29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9 -EJUkoVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk3w0LBUXl -0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBLqdReLjVQCfOAl/QMF645 -2F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIINnvmLVz5MxxftLItyM19yejhW1ebZrgUa -HXVFsculJRwSVzb9IjcCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZT -iFIwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE9 -28Jj2VuXZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0HDjxV -yhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VOTzF2nBBhjrZTOqMR -vq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2UvkVrCqIexVmiUefkl98HVrhq4uz2P -qYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4wzMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9Z -IRlXvVWa ------END CERTIFICATE----- - Sonera Class 2 Root CA ====================== -----BEGIN CERTIFICATE----- @@ -1170,34 +977,6 @@ O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l -----END CERTIFICATE----- -TDC OCES Root CA -================ ------BEGIN CERTIFICATE----- -MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJESzEMMAoGA1UE -ChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEwODM5MzBaFw0zNzAyMTEwOTA5 -MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIB -IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuH -nEz9pPPEXyG9VhDr2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0 -zY0s2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItUGBxIYXvV -iGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKjdGqPqcNiKXEx5TukYBde -dObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+rTpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO -3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB -5DCB4TCB3gYIKoFQgSkBAQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5k -ay9yZXBvc2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRlciBm -cmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4xLiBDZXJ0aWZp -Y2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4x -LjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1UdHwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEM -MAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYm -aHR0cDovL2NybC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy -MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZJ2cdUBVLc647 -+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6 -NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACromJkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4 -A9G28kNBKWKnctj7fAXmMXAnVBhOinxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYsc -A+UYyAFMP8uXBV2YcaaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9 -AOoBmbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQYqbsFbS1 -AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9BKNDLdr8C2LqL19iUw== ------END CERTIFICATE----- - UTN DATACorp SGC Root CA ======================== -----BEGIN CERTIFICATE----- @@ -1223,32 +1002,6 @@ EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI -----END CERTIFICATE----- -UTN USERFirst Email Root CA -=========================== ------BEGIN CERTIFICATE----- -MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0 -BgNVBAMTLVVUTi1VU0VSRmlyc3QtQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05 -OTA3MDkxNzI4NTBaFw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQx -FzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsx -ITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJz -dC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3BYHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIx -B8dOtINknS4p1aJkxIW9hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8 -om+rWV6lL8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLmSGHG -TPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM1tZUOt4KpLoDd7Nl -yP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws6wIDAQABo4G5MIG2MAsGA1UdDwQE -AwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNV -HR8EUTBPME2gS6BJhkdodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGll -bnRBdXRoZW50aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH -AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u7mFVbwQ+zzne -xRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0xtcgBEXkzYABurorbs6q15L+ -5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQrfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarV -NZ1yQAOJujEdxRBoUp7fooXFXAimeOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZ -w7JHpsIyYdfHb0gkUSeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ= ------END CERTIFICATE----- - UTN USERFirst Hardware Root CA ============================== -----BEGIN CERTIFICATE----- @@ -1275,31 +1028,6 @@ iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67 nfhmqA== -----END CERTIFICATE----- -UTN USERFirst Object Root CA -============================ ------BEGIN CERTIFICATE----- -MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAb -BgNVBAMTFFVUTi1VU0VSRmlyc3QtT2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAz -NlowgZUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx -HjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2Vy -dHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicPHxzfOpuCaDDASmEd8S8O+r5596Uj71VR -loTN2+O5bj4x2AogZ8f02b+U60cEPgLOKqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQ -w5ujm9M89RKZd7G3CeBo5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vu -lBe3/IW+pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehbkkj7 -RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUCAwEAAaOBrzCBrDAL -BgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU2u1kdBScFDyr3ZmpvVsoTYs8 -ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmly -c3QtT2JqZWN0LmNybDApBgNVHSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQw -DQYJKoZIhvcNAQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw -NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXBmMiKVl0+7kNO -PmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU4U3GDZlDAQ0Slox4nb9QorFE -qmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK581OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCG -hU3IfdeLA/5u1fedFqySLKAj5ZyRUh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g= ------END CERTIFICATE----- - Camerfirma Chambers of Commerce Root ==================================== -----BEGIN CERTIFICATE----- @@ -1354,42 +1082,6 @@ IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== -----END CERTIFICATE----- -NetLock Qualified (Class QA) Root -================================= ------BEGIN CERTIFICATE----- -MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUxETAPBgNVBAcT -CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV -BAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQDEzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVn -eXpvaSAoQ2xhc3MgUUEpIFRhbnVzaXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0 -bG9jay5odTAeFw0wMzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTER -MA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNhZ2kgS2Z0 -LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5ldExvY2sgTWlub3NpdGV0 -dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZhbnlraWFkbzEeMBwGCSqGSIb3DQEJARYP -aW5mb0BuZXRsb2NrLmh1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRV -CacbvWy5FPSKAtt2/GoqeKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e -8ia6AFQer7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO53Lhb -m+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWdvLrqOU+L73Sa58XQ -0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0lmT+1fMptsK6ZmfoIYOcZwvK9UdPM -0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4ICwDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV -HQ8BAf8EBAMCAQYwggJ1BglghkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2 -YW55IGEgTmV0TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh -biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQgZWxla3Ryb25p -a3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywgdmFsYW1pbnQgZWxmb2dhZGFz -YW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwg -YXogQWx0YWxhbm9zIFN6ZXJ6b2Rlc2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kg -ZWxqYXJhcyBtZWd0ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczov -L3d3dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0BuZXRsb2Nr -Lm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0 -aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMg -YXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0 -IGluZm9AbmV0bG9jay5uZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3 -DQEBBQUAA4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQMznN -wNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+NFAwLvt/MpqNPfMg -W/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCRVCHnpgu0mfVRQdzNo0ci2ccBgcTc -R08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR -5qq5aKrN9p2QdRLqOBrKROi3macqaJVmlaut74nLYKkGEsaUR+ko ------END CERTIFICATE----- - NetLock Notary (Class A) Root ============================= -----BEGIN CERTIFICATE----- @@ -1626,54 +1318,6 @@ CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy +fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS -----END CERTIFICATE----- -Firmaprofesional Root CA -======================== ------BEGIN CERTIFICATE----- -MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT -GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp -Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA -ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL -MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT -OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2 -ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB -AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V -j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH -lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf -3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8 -NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww -KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG -AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud -DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD -ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq -u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf -wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm -7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG -VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA= ------END CERTIFICATE----- - -Wells Fargo Root CA -=================== ------BEGIN CERTIFICATE----- -MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV -BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv -cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN -MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl -bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv -MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX -x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3 -E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5 -OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j -sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj -YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF -BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD -ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv -m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R -OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx -x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023 -tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s= ------END CERTIFICATE----- - Swisscom Root CA 1 ================== -----BEGIN CERTIFICATE----- @@ -1886,37 +1530,6 @@ hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P UrbnBEI= -----END CERTIFICATE----- -SwissSign Platinum CA - G2 -========================== ------BEGIN CERTIFICATE----- -MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UEBhMCQ0gxFTAT -BgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWduIFBsYXRpbnVtIENBIC0gRzIw -HhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAwWjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMM -U3dpc3NTaWduIEFHMSMwIQYDVQQDExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu -669yIIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2HtnIuJpX+UF -eNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+6ixuEFGSzH7VozPY1kne -WCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5objM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIo -j5+saCB9bzuohTEJfwvH6GXp43gOCWcwizSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/6 -8++QHkwFix7qepF6w9fl+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34T -aNhxKFrYzt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaPpZjy -domyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtFKwH3HBqi7Ri6Cr2D -+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuWae5ogObnmLo2t/5u7Su9IPhlGdpV -CX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMBAAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCv -zAeHFUdvOMW0ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW -IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUAA4ICAQAIhab1 -Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0uMoI3LQwnkAHFmtllXcBrqS3 -NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4 -U99REJNi54Av4tHgvI42Rncz7Lj7jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8 -KV2LwUvJ4ooTHbG/u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl -9x8DYSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1puEa+S1B -aYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXaicYwu+uPyyIIoK6q8QNs -OktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbGDI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSY -Mdp08YSTcU1f+2BY0fvEwW2JorsgH51xkcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAci -IfNAChs0B0QTwoRqjt8ZWr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g== ------END CERTIFICATE----- - SwissSign Gold CA - G2 ====================== -----BEGIN CERTIFICATE----- @@ -2254,32 +1867,6 @@ hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0= -----END CERTIFICATE----- -S-TRUST Authentication and Encryption Root CA 2005 PN -===================================================== ------BEGIN CERTIFICATE----- -MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE -BhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcpMRIwEAYDVQQHEwlTdHV0dGdh -cnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fzc2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVT -LVRSVVNUIEF1dGhlbnRpY2F0aW9uIGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0w -NTA2MjIwMDAwMDBaFw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFk -ZW4tV3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMgRGV1dHNj -aGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJVU1QgQXV0aGVudGljYXRp -b24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBOMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob -4QSwI7+Vio5bG0F/WsPoTUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXL -g3KSwlOyggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1Xgqf -eN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteFhy+S8dF2g08LOlk3 -KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm7QIDAQABo4GSMIGPMBIGA1UdEwEB -/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJv -bmxpbmUxLTIwNDgtNTAdBgNVHQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAU -D8oeXHngovMpttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD -pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFoLtU96G7m1R08 -P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersFiXOMy6ZNwPv2AtawB6MDwidA -nwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0yh9WUUpY6RsZxlj33mA6ykaqP2vROJAA5Veit -F7nTNCtKqUDMFypVZUF0Qn71wK/Ik63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8b -Hz2eBIPdltkdOpQ= ------END CERTIFICATE----- - Microsec e-Szigno Root CA ========================= -----BEGIN CERTIFICATE----- @@ -2475,28 +2062,6 @@ dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU Cm26OWMohpLzGITY+9HPBVZkVw== -----END CERTIFICATE----- -ComSign CA -========== ------BEGIN CERTIFICATE----- -MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0MRMwEQYDVQQD -EwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTMy -MThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMTCkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNp -Z24xCzAJBgNVBAYTAklMMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49q -ROR+WCf4C9DklBKK8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTy -P2Q298CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb2CEJKHxN -GGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxCejVb7Us6eva1jsz/D3zk -YDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7KpiXd3DTKaCQeQzC6zJMw9kglcq/QytNuEM -rkvF7zuZ2SOzW120V+x0cAwqTwIDAQABo4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAy -oDCgLoYsaHR0cDovL2ZlZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0P -AQH/BAQDAgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRLAZs+ -VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWdfoPPbrxHbvUanlR2 -QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0McXS6hMTXcpuEfDhOZAYnKuGntewI -mbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb -/627HOkthIDYIb6FUtnUdLlphbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VG -zT2ouvDzuFYkRes3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U -AGegcQCCSA== ------END CERTIFICATE----- - ComSign Secured CA ================== -----BEGIN CERTIFICATE----- @@ -3045,22 +2610,6 @@ MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA== -----END CERTIFICATE----- -Verisign Class 1 Public Primary Certification Authority -======================================================= ------BEGIN CERTIFICATE----- -MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx -FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmltYXJ5 -IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow -XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAx -IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA -A4GNADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0fzGVuDLDQ -VoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHiTkVWaR94AoDa3EeRKbs2 -yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFgVKTk8d6Pa -XCUDfGD67gmZPCcQcMgMCeazh88K4hiWNWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n -0a3hUKw8fGJLj7qE1xIVGx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZ -RjXZ+Hxb ------END CERTIFICATE----- - Verisign Class 3 Public Primary Certification Authority ======================================================= -----BEGIN CERTIFICATE----- @@ -3144,29 +2693,6 @@ YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r kpeDMdmztcpHWD9f -----END CERTIFICATE----- -TC TrustCenter Universal CA III -=============================== ------BEGIN CERTIFICATE----- -MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMC -REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy -IFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAe -Fw0wOTA5MDkwODE1MjdaFw0yOTEyMzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNU -QyBUcnVzdENlbnRlciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0Ex -KDAmBgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqGSIb3DQEB -AQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF5+cvAqBNLaT6hdqbJYUt -QCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYvDIRlzg9uwliT6CwLOunBjvvya8o84pxO -juT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8vzArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+Eut -CHnNaYlAJ/Uqwa1D7KRTyGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1 -M4BDj5yjdipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBhMB8G -A1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI4jANBgkqhkiG9w0BAQUFAAOCAQEA -g8ev6n9NCjw5sWi+e22JLumzCecYV42FmhfzdkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+ -KGwWaODIl0YgoGhnYIg5IFHYaAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhK -BgePxLcHsU0GDeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV -CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPHLQNjO9Po5KIq -woIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg== ------END CERTIFICATE----- - Autoridad de Certificacion Firmaprofesional CIF A62634068 ========================================================= -----BEGIN CERTIFICATE----- @@ -3893,3 +3419,448 @@ uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU 3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM dcGWxZ0= -----END CERTIFICATE----- + +TURKTRUST Certificate Services Provider Root 2007 +================================================= +-----BEGIN CERTIFICATE----- +MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP +MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg +QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X +DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl +a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN +BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp +bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N +YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv +KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya +KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT +rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC +AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s +Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I +aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO +Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb +BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK +poRq0Tl9 +-----END CERTIFICATE----- + +D-TRUST Root Class 3 CA 2 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe +Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE +LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD +ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA +BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv +KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z +p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC +AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ +4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y +eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw +MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G +PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw +OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm +2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV +dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph +X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I= +-----END CERTIFICATE----- + +D-TRUST Root Class 3 CA 2 EV 2009 +================================= +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw +OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw +OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS +egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh +zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T +7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60 +sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35 +11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv +cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v +ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El +MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp +b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh +c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+ +PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 +nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX +ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA +NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv +w9y4AyHqnxbxLFS1 +-----END CERTIFICATE----- + +PSCProcert +========== +-----BEGIN CERTIFICATE----- +MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1dG9yaWRhZCBk +ZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9sYW5vMQswCQYDVQQGEwJWRTEQ +MA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlzdHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lz +dGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBl +cmludGVuZGVuY2lhIGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUw +IwYJKoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEwMFoXDTIw +MTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHByb2NlcnQubmV0LnZlMQ8w +DQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGExKjAoBgNVBAsTIVByb3ZlZWRvciBkZSBD +ZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZp +Y2FjaW9uIEVsZWN0cm9uaWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo97BVC +wfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74BCXfgI8Qhd19L3uA +3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38GieU89RLAu9MLmV+QfI4tL3czkkoh +RqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmO +EO8GqQKJ/+MMbpfg353bIdD0PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG2 +0qCZyFSTXai20b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH +0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/6mnbVSKVUyqU +td+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1mv6JpIzi4mWCZDlZTOpx+FIyw +Bm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvp +r2uKGcfLFFb14dq12fy/czja+eevbqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/ +AgEBMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAz +Ni0wMB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFDgBStuyId +xuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0b3JpZGFkIGRlIENlcnRp +ZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQH +EwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5h +Y2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5k +ZW5jaWEgZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG +9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQDAgEGME0GA1UdEQRG +MESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0wMDAwMDKgGwYFYIZeAgKgEgwQUklG +LUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEagRKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52 +ZS9sY3IvQ0VSVElGSUNBRE8tUkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNy +YWl6LnN1c2NlcnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v +Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsGAQUFBwIBFh5o +dHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcNAQELBQADggIBACtZ6yKZu4Sq +T96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmN +g7+mvTV+LFwxNG9s2/NkAZiqlCxB3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4q +uxtxj7mkoP3YldmvWb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1 +n8GhHVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHmpHmJWhSn +FFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXzsOfIt+FTvZLm8wyWuevo +5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bEqCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq +3TNWOByyrYDT13K9mmyZY+gAu0F2BbdbmRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5 +poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y +eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km +-----END CERTIFICATE----- + +China Internet Network Information Center EV Certificates Root +============================================================== +-----BEGIN CERTIFICATE----- +MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCQ04xMjAwBgNV +BAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyMUcwRQYDVQQDDD5D +aGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMg +Um9vdDAeFw0xMDA4MzEwNzExMjVaFw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAG +A1UECgwpQ2hpbmEgSW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMM +PkNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRpZmljYXRl +cyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z7r07eKpkQ0H1UN+U8i6y +jUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV +98YPjUesWgbdYavi7NifFy2cyjw1l1VxzUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2H +klY0bBoQCxfVWhyXWIQ8hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23 +KzhmBsUs4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54ugQEC +7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oYNJKiyoOCWTAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUfHJLOcfA22KlT5uqGDSSosqD +glkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd5 +0XPFtQO3WKwMVC/GVhMPMdoG52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM +7+czV0I664zBechNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws +ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrIzo9uoV1/A3U0 +5K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATywy39FCqQmbkHzJ8= +-----END CERTIFICATE----- + +Swisscom Root CA 2 +================== +-----BEGIN CERTIFICATE----- +MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBkMQswCQYDVQQG +EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy +dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMjAeFw0xMTA2MjQwODM4MTRaFw0zMTA2 +MjUwNzM4MTRaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln +aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAyMIIC +IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvErjw0DzpPM +LgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J2HzFZ++r0rk0X2s682Q2zsKwzxNo +ysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJ +wDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVPACu/obvLP+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpH +Wrumnf2U5NGKpV+GY3aFy6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1a +SgJA/MTAtukxGggo5WDDH8SQjhBiYEQN7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL6yxS +NLCK/RJOlrDrcH+eOfdmQrGrrFLadkBXeyq96G4DsguAhYidDMfCd7Camlf0uPoTXGiTOmekl9Ab +mbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrALacywlKinh/LTSlDcX3KwFnUey7QY +Ypqwpzmqm59m2I2mbJYV4+by+PGDYmy7Velhk6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3 +qPyZ7iVNTA6z00yPhOgpD/0QVAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw +HQYDVR0hBBYwFDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0O +BBYEFE0mICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqhb97iEoHF8Twu +MA0GCSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4RfbgZPnm3qKhyN2abGu2sEzsO +v2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2lejjQ +82YqZh6NM4OKb3xuqFp1mrjX2lhIREeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX+Ave5XLz +o9v/tdhZsnPdTSpxsrpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4DooqzgB53MBfGWcs +a0vvaGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/Ps/8XciATwoCqISxx +OQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99nBjx8Oto0QuFmtEYE3saW +mA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5Wt6NlUe07qxS/TFED6F+KBZvuim6c779o ++sjaC+NCydAXFJy3SuCvkychVSa1ZC+N8f+mQAWFBVzKBxlcCxMoTFh/wqXvRdpg065lYZ1Tg3TC +rvJcwhbtkj6EPnNgiLx29CzP0H1907he0ZESEOnN3col49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX +5OfNeOI5wSsSnqaeG8XmDtkx2Q== +-----END CERTIFICATE----- + +Swisscom Root EV CA 2 +===================== +-----BEGIN CERTIFICATE----- +MIIF4DCCA8igAwIBAgIRAPL6ZOJ0Y9ON/RAdBB92ylgwDQYJKoZIhvcNAQELBQAwZzELMAkGA1UE +BhMCY2gxETAPBgNVBAoTCFN3aXNzY29tMSUwIwYDVQQLExxEaWdpdGFsIENlcnRpZmljYXRlIFNl +cnZpY2VzMR4wHAYDVQQDExVTd2lzc2NvbSBSb290IEVWIENBIDIwHhcNMTEwNjI0MDk0NTA4WhcN +MzEwNjI1MDg0NTA4WjBnMQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsT +HERpZ2l0YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxHjAcBgNVBAMTFVN3aXNzY29tIFJvb3QgRVYg +Q0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMT3HS9X6lds93BdY7BxUglgRCgz +o3pOCvrY6myLURYaVa5UJsTMRQdBTxB5f3HSek4/OE6zAMaVylvNwSqD1ycfMQ4jFrclyxy0uYAy +Xhqdk/HoPGAsp15XGVhRXrwsVgu42O+LgrQ8uMIkqBPHoCE2G3pXKSinLr9xJZDzRINpUKTk4Rti +GZQJo/PDvO/0vezbE53PnUgJUmfANykRHvvSEaeFGHR55E+FFOtSN+KxRdjMDUN/rhPSays/p8Li +qG12W0OfvrSdsyaGOx9/5fLoZigWJdBLlzin5M8J0TbDC77aO0RYjb7xnglrPvMyxyuHxuxenPaH +Za0zKcQvidm5y8kDnftslFGXEBuGCxobP/YCfnvUxVFkKJ3106yDgYjTdLRZncHrYTNaRdHLOdAG +alNgHa/2+2m8atwBz735j9m9W8E6X47aD0upm50qKGsaCnw8qyIL5XctcfaCNYGu+HuB5ur+rPQa +m3Rc6I8k9l2dRsQs0h4rIWqDJ2dVSqTjyDKXZpBy2uPUZC5f46Fq9mDU5zXNysRojddxyNMkM3Ox +bPlq4SjbX8Y96L5V5jcb7STZDxmPX2MYWFCBUWVv8p9+agTnNCRxunZLWB4ZvRVgRaoMEkABnRDi +xzgHcgplwLa7JSnaFp6LNYth7eVxV4O1PHGf40+/fh6Bn0GXAgMBAAGjgYYwgYMwDgYDVR0PAQH/ +BAQDAgGGMB0GA1UdIQQWMBQwEgYHYIV0AVMCAgYHYIV0AVMCAjASBgNVHRMBAf8ECDAGAQH/AgED +MB0GA1UdDgQWBBRF2aWBbj2ITY1x0kbBbkUe88SAnTAfBgNVHSMEGDAWgBRF2aWBbj2ITY1x0kbB +bkUe88SAnTANBgkqhkiG9w0BAQsFAAOCAgEAlDpzBp9SSzBc1P6xXCX5145v9Ydkn+0UjrgEjihL +j6p7jjm02Vj2e6E1CqGdivdj5eu9OYLU43otb98TPLr+flaYC/NUn81ETm484T4VvwYmneTwkLbU +wp4wLh/vx3rEUMfqe9pQy3omywC0Wqu1kx+AiYQElY2NfwmTv9SoqORjbdlk5LgpWgi/UOGED1V7 +XwgiG/W9mR4U9s70WBCCswo9GcG/W6uqmdjyMb3lOGbcWAXH7WMaLgqXfIeTK7KK4/HsGOV1timH +59yLGn602MnTihdsfSlEvoqq9X46Lmgxk7lq2prg2+kupYTNHAq4Sgj5nPFhJpiTt3tm7JFe3VE/ +23MPrQRYCd0EApUKPtN236YQHoA96M2kZNEzx5LH4k5E4wnJTsJdhw4Snr8PyQUQ3nqjsTzyP6Wq +J3mtMX0f/fwZacXduT98zca0wjAefm6S139hdlqP65VNvBFuIXxZN5nQBrz5Bm0yFqXZaajh3DyA +HmBR3NdUIR7KYndP+tiPsys6DXhyyWhBWkdKwqPrGtcKqzwyVcgKEZzfdNbwQBUdyLmPtTbFr/gi +uMod89a2GQ+fYWVq6nTIfI/DT11lgh/ZDYnadXL77/FHZxOzyNEZiCcmmpl5fx7kLD977vHeTYuW +l8PVP3wbI+2ksx0WckNLIOFZfsLorSa/ovc= +-----END CERTIFICATE----- + +CA Disig Root R1 +================ +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNVBAYTAlNLMRMw +EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp +ZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQyMDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sx +EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp +c2lnIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy +3QRkD2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/oOI7bm+V8 +u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3AfQ+lekLZWnDZv6fXARz2 +m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJeIgpFy4QxTaz+29FHuvlglzmxZcfe+5nk +CiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8noc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTa +YVKvJrT1cU/J19IG32PK/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6 +vpmumwKjrckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD3AjL +LhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE7cderVC6xkGbrPAX +ZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkCyC2fg69naQanMVXVz0tv/wQFx1is +XxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLdqvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ +04IwDQYJKoZIhvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR +xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaASfX8MPWbTx9B +LxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXoHqJPYNcHKfyyo6SdbhWSVhlM +CrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpBemOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5Gfb +VSUZP/3oNn6z4eGBrxEWi1CXYBmCAMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85 +YmLLW1AL14FABZyb7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKS +ds+xDzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvkF7mGnjix +lAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqFa3qdnom2piiZk4hA9z7N +UaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsTQ6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJ +a7+h89n07eLw4+1knj0vllJPgFOL +-----END CERTIFICATE----- + +CA Disig Root R2 +================ +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw +EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp +ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx +EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp +c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC +w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia +xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7 +A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S +GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV +g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa +5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE +koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A +Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i +Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u +Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM +tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV +sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je +dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8 +1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx +mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01 +utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0 +sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg +UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV +7+ZtsH8tZ/3zbBt1RqPlShfppNcL +-----END CERTIFICATE----- + +ACCVRAIZ1 +========= +-----BEGIN CERTIFICATE----- +MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB +SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1 +MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH +UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM +jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0 +RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD +aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ +0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG +WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7 +8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR +5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J +9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK +Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw +Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu +Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 +VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM +Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA +QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh +AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA +YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj +AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA +IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk +aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0 +dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2 +MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI +hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E +R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN +YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49 +nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ +TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3 +sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h +I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg +Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd +3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p +EfbRD0tVNEYqi4Y7 +-----END CERTIFICATE----- + +TWCA Global Root CA +=================== +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT +CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD +QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK +EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg +Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C +nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV +r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR +Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV +tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W +KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99 +sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p +yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn +kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI +zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g +cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn +LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M +8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg +/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg +lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP +A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m +i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8 +EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3 +zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0= +-----END CERTIFICATE----- + +TeliaSonera Root CA v1 +====================== +-----BEGIN CERTIFICATE----- +MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE +CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4 +MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW +VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+ +6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA +3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k +B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn +Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH +oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3 +F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ +oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7 +gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc +TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB +AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW +DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm +zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx +0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW +pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV +G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc +c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT +JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2 +qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6 +Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems +WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= +-----END CERTIFICATE----- + +E-Tugra Certification Authority +=============================== +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w +DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls +ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN +ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw +NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx +QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl +cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD +DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd +hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K +CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g +ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ +BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0 +E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz +rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq +jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn +rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5 +dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB +/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG +MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK +kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO +XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807 +VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo +a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc +dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV +KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT +Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0 +8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G +C7TbO6Orb1wdtn7os4I07QZcJA== +-----END CERTIFICATE----- + +T-TeleSec GlobalRoot Class 2 +============================ +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM +IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU +cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx +MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz +dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD +ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ +SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F +vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970 +2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV +WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy +YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4 +r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf +vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR +3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg== +-----END CERTIFICATE----- + +Atos TrustedRoot 2011 +===================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU +cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4 +MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG +A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV +hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr +54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+ +DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320 +HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR +z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R +l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ +bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB +CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h +k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh +TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9 +61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G +3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed +-----END CERTIFICATE----- diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Resources/cacert.pem.md5 b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Resources/cacert.pem.md5 deleted file mode 100644 index 56f626a9348..00000000000 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Resources/cacert.pem.md5 +++ /dev/null @@ -1 +0,0 @@ -47961e7ef15667c93cd99be01b51f00a diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Url.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Url.php index e7fe6284460..6a4e7724514 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Url.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/Url.php @@ -3,7 +3,6 @@ namespace Guzzle\Http; use Guzzle\Common\Exception\InvalidArgumentException; -use Guzzle\Parser\ParserRegistry; /** * Parses and generates URLs based on URL parts. In favor of performance, URL parts are not validated. @@ -27,20 +26,25 @@ class Url * @param string $url Full URL used to create a Url object * * @return Url + * @throws InvalidArgumentException */ public static function factory($url) { static $defaults = array('scheme' => null, 'host' => null, 'path' => null, 'port' => null, 'query' => null, 'user' => null, 'pass' => null, 'fragment' => null); - $parts = parse_url($url) + $defaults; + if (false === ($parts = parse_url($url))) { + throw new InvalidArgumentException('Was unable to parse malformed url: ' . $url); + } + + $parts += $defaults; // Convert the query string into a QueryString object if ($parts['query'] || 0 !== strlen($parts['query'])) { $parts['query'] = QueryString::fromString($parts['query']); } - return new self($parts['scheme'], $parts['host'], $parts['user'], + return new static($parts['scheme'], $parts['host'], $parts['user'], $parts['pass'], $parts['port'], $parts['path'], $parts['query'], $parts['fragment']); } @@ -156,6 +160,8 @@ class Url */ public function getParts() { + $query = (string) $this->query; + return array( 'scheme' => $this->scheme, 'user' => $this->username, @@ -163,7 +169,7 @@ class Url 'host' => $this->host, 'port' => $this->port, 'path' => $this->getPath(), - 'query' => (string) $this->query ?: null, + 'query' => $query !== '' ? $query : null, 'fragment' => $this->fragment, ); } @@ -207,6 +213,12 @@ class Url */ public function setScheme($scheme) { + if ($this->scheme == 'http' && $this->port == 80) { + $this->port = null; + } elseif ($this->scheme == 'https' && $this->port == 443) { + $this->port = null; + } + $this->scheme = $scheme; return $this; @@ -263,12 +275,13 @@ class Url */ public function setPath($path) { + static $pathReplace = array(' ' => '%20', '?' => '%3F'); if (is_array($path)) { - $this->path = '/' . implode('/', $path); - } else { - $this->path = (string) $path; + $path = '/' . implode('/', $path); } + $this->path = strtr($path, $pathReplace); + return $this; } @@ -283,42 +296,29 @@ class Url return $this; } - // Replace // and /./ with / - $this->path = str_replace(array('/./', '//'), '/', $this->path); - - // Remove dot segments - if (strpos($this->path, '..') !== false) { - - // Remove trailing relative paths if possible - $segments = $this->getPathSegments(); - $last = end($segments); - $trailingSlash = false; - if ($last === '') { - array_pop($segments); - $trailingSlash = true; + $results = array(); + $segments = $this->getPathSegments(); + foreach ($segments as $segment) { + if ($segment == '..') { + array_pop($results); + } elseif ($segment != '.' && $segment != '') { + $results[] = $segment; } + } - while ($last == '..' || $last == '.') { - if ($last == '..') { - array_pop($segments); - $last = array_pop($segments); - } - if ($last == '.' || $last == '') { - $last = array_pop($segments); - } - } + // Combine the normalized parts and add the leading slash if needed + $this->path = ($this->path[0] == '/' ? '/' : '') . implode('/', $results); - $this->path = implode('/', $segments); - if ($trailingSlash) { - $this->path .= '/'; - } + // Add the trailing slash if necessary + if ($this->path != '/' && end($segments) == '') { + $this->path .= '/'; } return $this; } /** - * Add a relative path to the currently set path + * Add a relative path to the currently set path. * * @param string $relativePath Relative path to add * @@ -326,16 +326,15 @@ class Url */ public function addPath($relativePath) { - if (!$relativePath || $relativePath == '/') { - return $this; - } - - // Add a leading slash if needed - if ($relativePath[0] != '/') { - $relativePath = '/' . $relativePath; + if ($relativePath != '/' && is_string($relativePath) && strlen($relativePath) > 0) { + // Add a leading slash if needed + if ($relativePath[0] != '/') { + $relativePath = '/' . $relativePath; + } + $this->setPath(str_replace('//', '/', $this->path . $relativePath)); } - return $this->setPath(str_replace('//', '/', $this->getPath() . $relativePath)); + return $this; } /** @@ -475,13 +474,18 @@ class Url /** * Combine the URL with another URL. Follows the rules specific in RFC 3986 section 5.4. * - * @param string $url Relative URL to combine with - * + * @param string $url Relative URL to combine with + * @param bool $strictRfc3986 Set to true to use strict RFC 3986 compliance when merging paths. When first + * released, Guzzle used an incorrect algorithm for combining relative URL paths. In + * order to not break users, we introduced this flag to allow the merging of URLs based + * on strict RFC 3986 section 5.4.1. This means that "http://a.com/foo/baz" merged with + * "bar" would become "http://a.com/foo/bar". When this value is set to false, it would + * become "http://a.com/foo/baz/bar". * @return Url * @throws InvalidArgumentException * @link http://tools.ietf.org/html/rfc3986#section-5.4 */ - public function combine($url) + public function combine($url, $strictRfc3986 = false) { $url = self::factory($url); @@ -510,6 +514,7 @@ class Url $this->username = $url->getUsername(); $this->password = $url->getPassword(); $this->path = $url->getPath(); + $this->query = $url->getQuery(); $this->fragment = $url->getFragment(); return $this; } @@ -519,20 +524,31 @@ class Url if (!$path) { if (count($query)) { - $this->query = $query; + $this->addQuery($query, $strictRfc3986); } } else { if ($path[0] == '/') { $this->path = $path; + } elseif ($strictRfc3986) { + $this->path .= '/../' . $path; } else { $this->path .= '/' . $path; } $this->normalizePath(); - $this->query = $query; + $this->addQuery($query, $strictRfc3986); } $this->fragment = $url->getFragment(); return $this; } + + private function addQuery(QueryString $new, $strictRfc386) + { + if (!$strictRfc386) { + $new->merge($this->query); + } + + $this->query = $new; + } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/composer.json new file mode 100644 index 00000000000..9384a5bf918 --- /dev/null +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Http/composer.json @@ -0,0 +1,32 @@ +{ + "name": "guzzle/http", + "description": "HTTP libraries used by Guzzle", + "homepage": "http://guzzlephp.org/", + "keywords": ["http client", "http", "client", "Guzzle", "curl"], + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "require": { + "php": ">=5.3.2", + "guzzle/common": "self.version", + "guzzle/parser": "self.version", + "guzzle/stream": "self.version" + }, + "suggest": { + "ext-curl": "*" + }, + "autoload": { + "psr-0": { "Guzzle\\Http": "" } + }, + "target-dir": "Guzzle/Http", + "extra": { + "branch-alias": { + "dev-master": "3.7-dev" + } + } +} diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Inflection/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Inflection/composer.json new file mode 100644 index 00000000000..93f9e7b725b --- /dev/null +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Inflection/composer.json @@ -0,0 +1,26 @@ +{ + "name": "guzzle/inflection", + "description": "Guzzle inflection component", + "homepage": "http://guzzlephp.org/", + "keywords": ["inflection", "guzzle"], + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "require": { + "php": ">=5.3.2" + }, + "autoload": { + "psr-0": { "Guzzle\\Inflection": "" } + }, + "target-dir": "Guzzle/Inflection", + "extra": { + "branch-alias": { + "dev-master": "3.7-dev" + } + } +} diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/ChunkedIterator.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/ChunkedIterator.php index 1807b23e97a..d76cdd439ff 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/ChunkedIterator.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/ChunkedIterator.php @@ -16,25 +16,31 @@ class ChunkedIterator extends \IteratorIterator /** * @param \Traversable $iterator Traversable iterator * @param int $chunkSize Size to make each chunk + * @throws \InvalidArgumentException */ public function __construct(\Traversable $iterator, $chunkSize) { + $chunkSize = (int) $chunkSize; + if ($chunkSize < 0 ) { + throw new \InvalidArgumentException("The chunk size must be equal or greater than zero; $chunkSize given"); + } + parent::__construct($iterator); $this->chunkSize = $chunkSize; } public function rewind() { + parent::rewind(); $this->next(); } public function next() { $this->chunk = array(); - $inner = $this->getInnerIterator(); - for ($i = 0; $i < $this->chunkSize && $inner->valid(); $i++) { - $this->chunk[] = $inner->current(); - $inner->next(); + for ($i = 0; $i < $this->chunkSize && parent::valid(); $i++) { + $this->chunk[] = parent::current(); + parent::next(); } } @@ -45,6 +51,6 @@ class ChunkedIterator extends \IteratorIterator public function valid() { - return !empty($this->chunk); + return (bool) $this->chunk; } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/FilterIterator.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/FilterIterator.php index 82b978284be..b103367b6ea 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/FilterIterator.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/FilterIterator.php @@ -15,12 +15,12 @@ class FilterIterator extends \FilterIterator protected $callback; /** - * @param \Traversable $iterator Traversable iterator + * @param \Iterator $iterator Traversable iterator * @param array|\Closure $callback Callback used for filtering. Return true to keep or false to filter. * * @throws InvalidArgumentException if the callback if not callable */ - public function __construct(\Traversable $iterator, $callback) + public function __construct(\Iterator $iterator, $callback) { parent::__construct($iterator); if (!is_callable($callback)) { diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/README.md b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/README.md new file mode 100644 index 00000000000..8bb7e08e26b --- /dev/null +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/README.md @@ -0,0 +1,25 @@ +Guzzle Iterator +=============== + +Provides useful Iterators and Iterator decorators + +- ChunkedIterator: Pulls out chunks from an inner iterator and yields the chunks as arrays +- FilterIterator: Used when PHP 5.4's CallbackFilterIterator is not available +- MapIterator: Maps values before yielding +- MethodProxyIterator: Proxies missing method calls to the innermost iterator + +### Installing via Composer + +```bash +# Install Composer +curl -sS https://getcomposer.org/installer | php + +# Add Guzzle as a dependency +php composer.phar require guzzle/iterator:~3.0 +``` + +After installing, you need to require Composer's autoloader: + +```php +require 'vendor/autoload.php'; +``` diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/composer.json new file mode 100644 index 00000000000..ee1737987bb --- /dev/null +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Iterator/composer.json @@ -0,0 +1,27 @@ +{ + "name": "guzzle/iterator", + "description": "Provides helpful iterators and iterator decorators", + "keywords": ["iterator", "guzzle"], + "homepage": "http://guzzlephp.org/", + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "require": { + "php": ">=5.3.2", + "guzzle/common": ">=2.8.0" + }, + "autoload": { + "psr-0": { "Guzzle\\Iterator": "/" } + }, + "target-dir": "Guzzle/Iterator", + "extra": { + "branch-alias": { + "dev-master": "3.7-dev" + } + } +} diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Log/MonologLogAdapter.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Log/MonologLogAdapter.php index 8c74a45dce8..6afe7b62af1 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Log/MonologLogAdapter.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Log/MonologLogAdapter.php @@ -29,6 +29,6 @@ class MonologLogAdapter extends AbstractLogAdapter public function log($message, $priority = LOG_INFO, $extras = array()) { - $this->log->addRecord(self::$mapping[$priority], $message); + $this->log->addRecord(self::$mapping[$priority], $message, $extras); } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Log/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Log/composer.json new file mode 100644 index 00000000000..a8213e8b451 --- /dev/null +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Log/composer.json @@ -0,0 +1,29 @@ +{ + "name": "guzzle/log", + "description": "Guzzle log adapter component", + "homepage": "http://guzzlephp.org/", + "keywords": ["log", "adapter", "guzzle"], + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "require": { + "php": ">=5.3.2" + }, + "autoload": { + "psr-0": { "Guzzle\\Log": "" } + }, + "suggest": { + "guzzle/http": "self.version" + }, + "target-dir": "Guzzle/Log", + "extra": { + "branch-alias": { + "dev-master": "3.7-dev" + } + } +} diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Parser/Cookie/CookieParser.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Parser/Cookie/CookieParser.php index 8e825f9bdea..4349eeb38bf 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Parser/Cookie/CookieParser.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Parser/Cookie/CookieParser.php @@ -36,7 +36,7 @@ class CookieParser implements CookieParserInterface $data = array_merge(array_fill_keys(array_keys(self::$cookieParts), null), array( 'cookies' => array(), 'data' => array(), - 'path' => $path ?: '/', + 'path' => null, 'http_only' => false, 'discard' => false, 'domain' => $host @@ -81,6 +81,51 @@ class CookieParser implements CookieParserInterface $data['expires'] = time() + (int) $data['max_age']; } + // Check path attribute according RFC6265 http://tools.ietf.org/search/rfc6265#section-5.2.4 + // "If the attribute-value is empty or if the first character of the + // attribute-value is not %x2F ("/"): + // Let cookie-path be the default-path. + // Otherwise: + // Let cookie-path be the attribute-value." + if (!$data['path'] || substr($data['path'], 0, 1) !== '/') { + $data['path'] = $this->getDefaultPath($path); + } + return $data; } + + /** + * Get default cookie path according to RFC 6265 + * http://tools.ietf.org/search/rfc6265#section-5.1.4 Paths and Path-Match + * + * @param string $path Request uri-path + * + * @return string + */ + protected function getDefaultPath($path) { + // "The user agent MUST use an algorithm equivalent to the following algorithm + // to compute the default-path of a cookie:" + + // "2. If the uri-path is empty or if the first character of the uri-path is not + // a %x2F ("/") character, output %x2F ("/") and skip the remaining steps. + if (empty($path) || substr($path, 0, 1) !== '/') { + return '/'; + } + + // "3. If the uri-path contains no more than one %x2F ("/") character, output + // %x2F ("/") and skip the remaining step." + if ($path === "/") { + return $path; + } + + $rightSlashPos = strrpos($path, '/'); + if ($rightSlashPos === 0) { + return "/"; + } + + // "4. Output the characters of the uri-path from the first character up to, + // but not including, the right-most %x2F ("/")." + return substr($path, 0, $rightSlashPos); + + } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Parser/UriTemplate/UriTemplate.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Parser/UriTemplate/UriTemplate.php index 2044810b5d4..0df032f0ff8 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Parser/UriTemplate/UriTemplate.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Parser/UriTemplate/UriTemplate.php @@ -9,6 +9,8 @@ namespace Guzzle\Parser\UriTemplate; */ class UriTemplate implements UriTemplateInterface { + const DEFAULT_PATTERN = '/\{([^\}]+)\}/'; + /** @var string URI template */ private $template; @@ -16,7 +18,7 @@ class UriTemplate implements UriTemplateInterface private $variables; /** @var string Regex used to parse expressions */ - private static $regex = '/\{([^\}]+)\}/'; + private $regex = self::DEFAULT_PATTERN; /** @var array Hash for quick operator lookups */ private static $operatorHash = array( @@ -36,15 +38,24 @@ class UriTemplate implements UriTemplateInterface public function expand($template, array $variables) { + if ($this->regex == self::DEFAULT_PATTERN && false === strpos($template, '{')) { + return $template; + } + $this->template = $template; $this->variables = $variables; - // Check to ensure that the preg_* function is needed - if (false === strpos($this->template, '{')) { - return $this->template; - } + return preg_replace_callback($this->regex, array($this, 'expandMatch'), $this->template); + } - return preg_replace_callback(self::$regex, array($this, 'expandMatch'), $this->template); + /** + * Set the regex patten used to expand URI templates + * + * @param string $regexPattern + */ + public function setRegex($regexPattern) + { + $this->regex = $regexPattern; } /** diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Parser/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Parser/composer.json new file mode 100644 index 00000000000..378b281971a --- /dev/null +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Parser/composer.json @@ -0,0 +1,19 @@ +{ + "name": "guzzle/parser", + "homepage": "http://guzzlephp.org/", + "description": "Interchangeable parsers used by Guzzle", + "keywords": ["HTTP", "message", "cookie", "URL", "URI Template"], + "license": "MIT", + "require": { + "php": ">=5.3.2" + }, + "autoload": { + "psr-0": { "Guzzle\\Parser": "" } + }, + "target-dir": "Guzzle/Parser", + "extra": { + "branch-alias": { + "dev-master": "3.7-dev" + } + } +} diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Async/AsyncPlugin.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Async/AsyncPlugin.php index 534901baa42..ae594187346 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Async/AsyncPlugin.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Async/AsyncPlugin.php @@ -43,12 +43,16 @@ class AsyncPlugin implements EventSubscriberInterface public function onCurlProgress(Event $event) { if ($event['handle'] && - ($event['downloaded'] || ($event['uploaded'] && $event['upload_size'] === $event['uploaded'])) + ($event['downloaded'] || (isset($event['uploaded']) && $event['upload_size'] === $event['uploaded'])) ) { // Timeout after 1ms curl_setopt($event['handle'], CURLOPT_TIMEOUT_MS, 1); - // Even if the response is quick, tell curl not to download the body - curl_setopt($event['handle'], CURLOPT_NOBODY, true); + // Even if the response is quick, tell curl not to download the body. + // - Note that we can only perform this shortcut if the request transmitted a body so as to ensure that the + // request method is not converted to a HEAD request before the request was sent via curl. + if ($event['uploaded']) { + curl_setopt($event['handle'], CURLOPT_NOBODY, true); + } } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Async/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Async/composer.json new file mode 100644 index 00000000000..dc3fc5bf882 --- /dev/null +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Async/composer.json @@ -0,0 +1,27 @@ +{ + "name": "guzzle/plugin-async", + "description": "Guzzle async request plugin", + "homepage": "http://guzzlephp.org/", + "keywords": ["plugin", "guzzle"], + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "require": { + "php": ">=5.3.2", + "guzzle/http": "self.version" + }, + "autoload": { + "psr-0": { "Guzzle\\Plugin\\Async": "" } + }, + "target-dir": "Guzzle/Plugin/Async", + "extra": { + "branch-alias": { + "dev-master": "3.7-dev" + } + } +} diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Backoff/BackoffPlugin.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Backoff/BackoffPlugin.php index b2b84c266df..99ace053826 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Backoff/BackoffPlugin.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Backoff/BackoffPlugin.php @@ -6,8 +6,8 @@ use Guzzle\Common\Event; use Guzzle\Common\AbstractHasDispatcher; use Guzzle\Http\Message\EntityEnclosingRequestInterface; use Guzzle\Http\Message\RequestInterface; -use Guzzle\Http\Message\Response; use Guzzle\Http\Curl\CurlMultiInterface; +use Guzzle\Http\Exception\CurlException; use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** @@ -92,7 +92,7 @@ class BackoffPlugin extends AbstractHasDispatcher implements EventSubscriberInte $this->dispatch(self::RETRY_EVENT, array( 'request' => $request, 'response' => $response, - 'handle' => $exception ? $exception->getCurlHandle() : null, + 'handle' => ($exception && $exception instanceof CurlException) ? $exception->getCurlHandle() : null, 'retries' => $retries, 'delay' => $delay )); diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Backoff/CurlBackoffStrategy.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Backoff/CurlBackoffStrategy.php index d1d70f65c53..a584ed4a2be 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Backoff/CurlBackoffStrategy.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Backoff/CurlBackoffStrategy.php @@ -14,7 +14,7 @@ class CurlBackoffStrategy extends AbstractErrorCodeBackoffStrategy { /** @var array Default cURL errors to retry */ protected static $defaultErrorCodes = array( - CURLE_COULDNT_RESOLVE_HOST, CURLE_COULDNT_CONNECT, CURLE_WRITE_ERROR, CURLE_READ_ERROR, + CURLE_COULDNT_RESOLVE_HOST, CURLE_COULDNT_CONNECT, CURLE_PARTIAL_FILE, CURLE_WRITE_ERROR, CURLE_READ_ERROR, CURLE_OPERATION_TIMEOUTED, CURLE_SSL_CONNECT_ERROR, CURLE_HTTP_PORT_FAILED, CURLE_GOT_NOTHING, CURLE_SEND_ERROR, CURLE_RECV_ERROR ); diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Backoff/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Backoff/composer.json new file mode 100644 index 00000000000..91c122cb43a --- /dev/null +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Backoff/composer.json @@ -0,0 +1,28 @@ +{ + "name": "guzzle/plugin-backoff", + "description": "Guzzle backoff retry plugins", + "homepage": "http://guzzlephp.org/", + "keywords": ["plugin", "guzzle"], + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "require": { + "php": ">=5.3.2", + "guzzle/http": "self.version", + "guzzle/log": "self.version" + }, + "autoload": { + "psr-0": { "Guzzle\\Plugin\\Backoff": "" } + }, + "target-dir": "Guzzle/Plugin/Backoff", + "extra": { + "branch-alias": { + "dev-master": "3.7-dev" + } + } +} diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cache/CallbackCanCacheStrategy.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cache/CallbackCanCacheStrategy.php index 7109fa429b0..2d271e31eec 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cache/CallbackCanCacheStrategy.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cache/CallbackCanCacheStrategy.php @@ -41,7 +41,7 @@ class CallbackCanCacheStrategy extends DefaultCanCacheStrategy { return $this->requestCallback ? call_user_func($this->requestCallback, $request) - : parent::canCache($request); + : parent::canCacheRequest($request); } public function canCacheResponse(Response $response) diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cache/DefaultRevalidation.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cache/DefaultRevalidation.php index 1bbaa1ad0fc..af33234eef8 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cache/DefaultRevalidation.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cache/DefaultRevalidation.php @@ -60,7 +60,7 @@ class DefaultRevalidation implements RevalidationInterface ($resCache && ($resCache->hasDirective('no-cache') || $resCache->hasDirective('must-revalidate'))); // Use the strong ETag validator if available and the response contains no Cache-Control directive - if (!$revalidate && !$reqCache && $response->hasHeader('ETag')) { + if (!$revalidate && !$resCache && $response->hasHeader('ETag')) { $revalidate = true; } @@ -95,19 +95,21 @@ class DefaultRevalidation implements RevalidationInterface protected function createRevalidationRequest(RequestInterface $request, Response $response) { $revalidate = clone $request; - $revalidate->removeHeader('Pragma') - ->removeHeader('Cache-Control') - ->setHeader('If-Modified-Since', $response->getLastModified() ?: $response->getDate()); + $revalidate->removeHeader('Pragma')->removeHeader('Cache-Control'); + + if ($response->getLastModified()) { + $revalidate->setHeader('If-Modified-Since', $response->getLastModified()); + } if ($response->getEtag()) { - $revalidate->setHeader('If-None-Match', '"' . $response->getEtag() . '"'); + $revalidate->setHeader('If-None-Match', $response->getEtag()); } // Remove any cache plugins that might be on the request to prevent infinite recursive revalidations $dispatcher = $revalidate->getEventDispatcher(); foreach ($dispatcher->getListeners() as $eventName => $listeners) { foreach ($listeners as $listener) { - if ($listener[0] instanceof CachePlugin) { + if (is_array($listener) && $listener[0] instanceof CachePlugin) { $dispatcher->removeListener($eventName, $listener); } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cache/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cache/composer.json new file mode 100644 index 00000000000..674d8c497e2 --- /dev/null +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cache/composer.json @@ -0,0 +1,28 @@ +{ + "name": "guzzle/plugin-cache", + "description": "Guzzle HTTP cache plugin", + "homepage": "http://guzzlephp.org/", + "keywords": ["plugin", "guzzle"], + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "require": { + "php": ">=5.3.2", + "guzzle/http": "self.version", + "guzzle/cache": "self.version" + }, + "autoload": { + "psr-0": { "Guzzle\\Plugin\\Cache": "" } + }, + "target-dir": "Guzzle/Plugin/Cache", + "extra": { + "branch-alias": { + "dev-master": "3.7-dev" + } + } +} diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cookie/Cookie.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cookie/Cookie.php index bf81125ff77..5218e5f0e42 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cookie/Cookie.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cookie/Cookie.php @@ -412,7 +412,32 @@ class Cookie implements ToArrayInterface */ public function matchesPath($path) { - return !$this->getPath() || 0 === stripos($path, $this->getPath()); + // RFC6265 http://tools.ietf.org/search/rfc6265#section-5.1.4 + // A request-path path-matches a given cookie-path if at least one of + // the following conditions holds: + + // o The cookie-path and the request-path are identical. + if ($path == $this->getPath()) { + return true; + } + + $pos = stripos($path, $this->getPath()); + if ($pos === 0) { + // o The cookie-path is a prefix of the request-path, and the last + // character of the cookie-path is %x2F ("/"). + if (substr($this->getPath(), -1, 1) === "/") { + return true; + } + + // o The cookie-path is a prefix of the request-path, and the first + // character of the request-path that is not included in the cookie- + // path is a %x2F ("/") character. + if (substr($path, strlen($this->getPath()), 1) === "/") { + return true; + } + } + + return false; } /** @@ -424,30 +449,20 @@ class Cookie implements ToArrayInterface */ public function matchesDomain($domain) { - $cookieDomain = $this->getDomain(); + // Remove the leading '.' as per spec in RFC 6265: http://tools.ietf.org/html/rfc6265#section-5.2.3 + $cookieDomain = ltrim($this->getDomain(), '.'); // Domain not set or exact match. if (!$cookieDomain || !strcasecmp($domain, $cookieDomain)) { return true; } - // . prefix match. - if (strpos($cookieDomain, '.') === 0) { - $realDomain = substr($cookieDomain, 1); - - // Root domains don't match except for .local. - if (!substr_count($realDomain, '.') && strcasecmp($realDomain, 'local')) { - return false; - } - - if (substr($domain, -strlen($realDomain)) === $realDomain) { - // Match exact or 1 deep subdomain. - return !strcasecmp($domain, $realDomain) || - substr_count(substr($domain, 0, -strlen($realDomain)), '.') === 1; - } + // Matching the subdomain according to RFC 6265: http://tools.ietf.org/html/rfc6265#section-5.1.3 + if (filter_var($domain, FILTER_VALIDATE_IP)) { + return false; } - return false; + return (bool) preg_match('/\.' . preg_quote($cookieDomain, '/') . '$/i', $domain); } /** diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cookie/CookieJar/ArrayCookieJar.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cookie/CookieJar/ArrayCookieJar.php index 68d5be7e633..6b675039faf 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cookie/CookieJar/ArrayCookieJar.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cookie/CookieJar/ArrayCookieJar.php @@ -93,6 +93,7 @@ class ArrayCookieJar implements CookieJarInterface, \Serializable if ($this->strictMode) { throw new InvalidCookieException($result); } else { + $this->removeCookieIfEmpty($cookie); return false; } } @@ -219,4 +220,18 @@ class ArrayCookieJar implements CookieJarInterface, \Serializable return $cookies; } + + /** + * If a cookie already exists and the server asks to set it again with a null value, the + * cookie must be deleted. + * + * @param \Guzzle\Plugin\Cookie\Cookie $cookie + */ + private function removeCookieIfEmpty(Cookie $cookie) + { + $cookieValue = $cookie->getValue(); + if ($cookieValue === null || $cookieValue === '') { + $this->remove($cookie->getDomain(), $cookie->getPath(), $cookie->getName()); + } + } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cookie/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cookie/composer.json new file mode 100644 index 00000000000..f0b52308d23 --- /dev/null +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Cookie/composer.json @@ -0,0 +1,27 @@ +{ + "name": "guzzle/plugin-cookie", + "description": "Guzzle cookie plugin", + "homepage": "http://guzzlephp.org/", + "keywords": ["plugin", "guzzle"], + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "require": { + "php": ">=5.3.2", + "guzzle/http": "self.version" + }, + "autoload": { + "psr-0": { "Guzzle\\Plugin\\Cookie": "" } + }, + "target-dir": "Guzzle/Plugin/Cookie", + "extra": { + "branch-alias": { + "dev-master": "3.7-dev" + } + } +} diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/CurlAuth/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/CurlAuth/composer.json new file mode 100644 index 00000000000..edc8b24e501 --- /dev/null +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/CurlAuth/composer.json @@ -0,0 +1,27 @@ +{ + "name": "guzzle/plugin-curlauth", + "description": "Guzzle cURL authorization plugin", + "homepage": "http://guzzlephp.org/", + "keywords": ["plugin", "curl", "guzzle"], + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "require": { + "php": ">=5.3.2", + "guzzle/http": "self.version" + }, + "autoload": { + "psr-0": { "Guzzle\\Plugin\\CurlAuth": "" } + }, + "target-dir": "Guzzle/Plugin/CurlAuth", + "extra": { + "branch-alias": { + "dev-master": "3.7-dev" + } + } +} diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/ErrorResponse/ErrorResponsePlugin.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/ErrorResponse/ErrorResponsePlugin.php index a687fd7f120..588b9c3e376 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/ErrorResponse/ErrorResponsePlugin.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/ErrorResponse/ErrorResponsePlugin.php @@ -61,8 +61,8 @@ class ErrorResponsePlugin implements EventSubscriberInterface $className = $error['class']; $errorClassInterface = __NAMESPACE__ . '\\ErrorResponseExceptionInterface'; if (!class_exists($className)) { - throw new ErrorResponseException("{$className} does not exist");; - } elseif (!is_subclass_of($className, $errorClassInterface)) { + throw new ErrorResponseException("{$className} does not exist"); + } elseif (!(in_array($errorClassInterface, class_implements($className)))) { throw new ErrorResponseException("{$className} must implement {$errorClassInterface}"); } throw $className::fromCommand($command, $response); diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/ErrorResponse/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/ErrorResponse/composer.json new file mode 100644 index 00000000000..607e86137ba --- /dev/null +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/ErrorResponse/composer.json @@ -0,0 +1,27 @@ +{ + "name": "guzzle/plugin-error-response", + "description": "Guzzle errorResponse plugin for creating error exceptions based on a service description", + "homepage": "http://guzzlephp.org/", + "keywords": ["plugin", "guzzle"], + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "require": { + "php": ">=5.3.2", + "guzzle/service": "self.version" + }, + "autoload": { + "psr-0": { "Guzzle\\Plugin\\ErrorResponse": "" } + }, + "target-dir": "Guzzle/Plugin/ErrorResponse", + "extra": { + "branch-alias": { + "dev-master": "3.7-dev" + } + } +} diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/History/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/History/composer.json new file mode 100644 index 00000000000..ba0bf2c4d17 --- /dev/null +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/History/composer.json @@ -0,0 +1,27 @@ +{ + "name": "guzzle/plugin-history", + "description": "Guzzle history plugin", + "homepage": "http://guzzlephp.org/", + "keywords": ["plugin", "guzzle"], + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "require": { + "php": ">=5.3.2", + "guzzle/http": "self.version" + }, + "autoload": { + "psr-0": { "Guzzle\\Plugin\\History": "" } + }, + "target-dir": "Guzzle/Plugin/History", + "extra": { + "branch-alias": { + "dev-master": "3.7-dev" + } + } +} diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Log/LogPlugin.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Log/LogPlugin.php index 1a8e8a00b1c..cabdea854a9 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Log/LogPlugin.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Log/LogPlugin.php @@ -8,7 +8,6 @@ use Guzzle\Log\MessageFormatter; use Guzzle\Log\ClosureLogAdapter; use Guzzle\Http\EntityBody; use Guzzle\Http\Message\EntityEnclosingRequestInterface; -use Guzzle\Http\Message\Response; use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** @@ -21,7 +20,7 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface; class LogPlugin implements EventSubscriberInterface { /** @var LogAdapterInterface Adapter responsible for writing log data */ - private $logAdapter; + protected $logAdapter; /** @var MessageFormatter Formatter used to format messages before logging */ protected $formatter; diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Log/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Log/composer.json new file mode 100644 index 00000000000..130e6da0ad9 --- /dev/null +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Log/composer.json @@ -0,0 +1,28 @@ +{ + "name": "guzzle/plugin-log", + "description": "Guzzle log plugin for over the wire logging", + "homepage": "http://guzzlephp.org/", + "keywords": ["plugin", "log", "guzzle"], + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "require": { + "php": ">=5.3.2", + "guzzle/http": "self.version", + "guzzle/log": "self.version" + }, + "autoload": { + "psr-0": { "Guzzle\\Plugin\\Log": "" } + }, + "target-dir": "Guzzle/Plugin/Log", + "extra": { + "branch-alias": { + "dev-master": "3.7-dev" + } + } +} diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Md5/CommandContentMd5Plugin.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Md5/CommandContentMd5Plugin.php index 08d635cf3fa..85124243309 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Md5/CommandContentMd5Plugin.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Md5/CommandContentMd5Plugin.php @@ -43,7 +43,9 @@ class CommandContentMd5Plugin implements EventSubscriberInterface && $command->getOperation()->hasParam($this->contentMd5Param)) { // Check if an MD5 checksum value should be passed along to the request if ($command[$this->contentMd5Param] === true) { - $request->setHeader('Content-MD5', $request->getBody()->getContentMd5(true, true)); + if (false !== ($md5 = $request->getBody()->getContentMd5(true, true))) { + $request->setHeader('Content-MD5', $md5); + } } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Md5/Md5ValidatorPlugin.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Md5/Md5ValidatorPlugin.php index 9c70f4dcec8..5d7a3785e49 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Md5/Md5ValidatorPlugin.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Md5/Md5ValidatorPlugin.php @@ -4,7 +4,6 @@ namespace Guzzle\Plugin\Md5; use Guzzle\Common\Event; use Guzzle\Common\Exception\UnexpectedValueException; -use Guzzle\Http\Message\Response; use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Md5/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Md5/composer.json new file mode 100644 index 00000000000..0602d060902 --- /dev/null +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Md5/composer.json @@ -0,0 +1,27 @@ +{ + "name": "guzzle/plugin-md5", + "description": "Guzzle MD5 plugins", + "homepage": "http://guzzlephp.org/", + "keywords": ["plugin", "guzzle"], + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "require": { + "php": ">=5.3.2", + "guzzle/http": "self.version" + }, + "autoload": { + "psr-0": { "Guzzle\\Plugin\\Md5": "" } + }, + "target-dir": "Guzzle/Plugin/Md5", + "extra": { + "branch-alias": { + "dev-master": "3.7-dev" + } + } +} diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Mock/MockPlugin.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Mock/MockPlugin.php index ab7833cee2c..2440578cf08 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Mock/MockPlugin.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Mock/MockPlugin.php @@ -226,17 +226,20 @@ class MockPlugin extends AbstractHasDispatcher implements EventSubscriberInterfa * Called when a request is about to be sent * * @param Event $event + * @throws \OutOfBoundsException When queue is empty */ public function onRequestBeforeSend(Event $event) { - if ($this->queue) { - $request = $event['request']; - $this->received[] = $request; - // Detach the filter from the client so it's a one-time use - if ($this->temporary && count($this->queue) == 1 && $request->getClient()) { - $request->getClient()->getEventDispatcher()->removeSubscriber($this); - } - $this->dequeue($request); + if (!$this->queue) { + throw new \OutOfBoundsException('Mock queue is empty'); + } + + $request = $event['request']; + $this->received[] = $request; + // Detach the filter from the client so it's a one-time use + if ($this->temporary && count($this->queue) == 1 && $request->getClient()) { + $request->getClient()->getEventDispatcher()->removeSubscriber($this); } + $this->dequeue($request); } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Mock/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Mock/composer.json new file mode 100644 index 00000000000..f8201e31fee --- /dev/null +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Mock/composer.json @@ -0,0 +1,27 @@ +{ + "name": "guzzle/plugin-mock", + "description": "Guzzle Mock plugin", + "homepage": "http://guzzlephp.org/", + "keywords": ["mock", "plugin", "guzzle"], + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "require": { + "php": ">=5.3.2", + "guzzle/http": "self.version" + }, + "autoload": { + "psr-0": { "Guzzle\\Plugin\\Mock": "" } + }, + "target-dir": "Guzzle/Plugin/Mock", + "extra": { + "branch-alias": { + "dev-master": "3.7-dev" + } + } +} diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Oauth/OauthPlugin.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Oauth/OauthPlugin.php index 14961a0bc89..95e0c3e4a84 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Oauth/OauthPlugin.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Oauth/OauthPlugin.php @@ -16,6 +16,12 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface; */ class OauthPlugin implements EventSubscriberInterface { + /** + * Consumer request method constants. See http://oauth.net/core/1.0/#consumer_req_param + */ + const REQUEST_METHOD_HEADER = 'header'; + const REQUEST_METHOD_QUERY = 'query'; + /** @var Collection Configuration settings */ protected $config; @@ -23,6 +29,7 @@ class OauthPlugin implements EventSubscriberInterface * Create a new OAuth 1.0 plugin * * @param array $config Configuration array containing these parameters: + * - string 'request_method' Consumer request method. Use the class constants. * - string 'callback' OAuth callback * - string 'consumer_key' Consumer key * - string 'consumer_secret' Consumer secret @@ -38,6 +45,7 @@ class OauthPlugin implements EventSubscriberInterface { $this->config = Collection::fromConfig($config, array( 'version' => '1.0', + 'request_method' => self::REQUEST_METHOD_HEADER, 'consumer_key' => 'anonymous', 'consumer_secret' => 'anonymous', 'signature_method' => 'HMAC-SHA1', @@ -62,29 +70,34 @@ class OauthPlugin implements EventSubscriberInterface * * @param Event $event Event received * @return array + * @throws \InvalidArgumentException */ public function onRequestBeforeSend(Event $event) { $timestamp = $this->getTimestamp($event); $request = $event['request']; $nonce = $this->generateNonce($request); + $authorizationParams = $this->getOauthParams($timestamp, $nonce); + $authorizationParams['oauth_signature'] = $this->getSignature($request, $timestamp, $nonce); - $authorizationParams = array( - 'oauth_callback' => $this->config['callback'], - 'oauth_consumer_key' => $this->config['consumer_key'], - 'oauth_nonce' => $nonce, - 'oauth_signature' => $this->getSignature($request, $timestamp, $nonce), - 'oauth_signature_method' => $this->config['signature_method'], - 'oauth_timestamp' => $timestamp, - 'oauth_token' => $this->config['token'], - 'oauth_verifier' => $this->config['verifier'], - 'oauth_version' => $this->config['version'], - ); - - $request->setHeader( - 'Authorization', - $this->buildAuthorizationHeader($authorizationParams) - ); + switch ($this->config['request_method']) { + case self::REQUEST_METHOD_HEADER: + $request->setHeader( + 'Authorization', + $this->buildAuthorizationHeader($authorizationParams) + ); + break; + case self::REQUEST_METHOD_QUERY: + foreach ($authorizationParams as $key => $value) { + $request->getQuery()->set($key, $value); + } + break; + default: + throw new \InvalidArgumentException(sprintf( + 'Invalid consumer method "%s"', + $this->config['request_method'] + )); + } return $authorizationParams; } @@ -142,7 +155,8 @@ class OauthPlugin implements EventSubscriberInterface $params = $this->prepareParameters($params); // Build signing string from combined params - $parameterString = new QueryString($params); + $parameterString = clone $request->getQuery(); + $parameterString->replace($params); $url = Url::factory($request->getUrl())->setQuery('')->setFragment(null); @@ -152,27 +166,55 @@ class OauthPlugin implements EventSubscriberInterface } /** - * Parameters sorted and filtered in order to properly sign a request + * Get the oauth parameters as named by the oauth spec * - * @param RequestInterface $request Request to generate a signature for - * @param integer $timestamp Timestamp to use for nonce - * @param string $nonce - * - * @return array + * @param $timestamp + * @param $nonce + * @return Collection */ - public function getParamsToSign(RequestInterface $request, $timestamp, $nonce) + protected function getOauthParams($timestamp, $nonce) { $params = new Collection(array( - 'oauth_callback' => $this->config['callback'], 'oauth_consumer_key' => $this->config['consumer_key'], 'oauth_nonce' => $nonce, 'oauth_signature_method' => $this->config['signature_method'], 'oauth_timestamp' => $timestamp, - 'oauth_token' => $this->config['token'], - 'oauth_verifier' => $this->config['verifier'], - 'oauth_version' => $this->config['version'] )); + // Optional parameters should not be set if they have not been set in the config as + // the parameter may be considered invalid by the Oauth service. + $optionalParams = array( + 'callback' => 'oauth_callback', + 'token' => 'oauth_token', + 'verifier' => 'oauth_verifier', + 'version' => 'oauth_version' + ); + + foreach ($optionalParams as $optionName => $oauthName) { + if (isset($this->config[$optionName]) == true) { + $params[$oauthName] = $this->config[$optionName]; + } + } + + return $params; + } + + /** + * Get all of the parameters required to sign a request including: + * * The oauth params + * * The request GET params + * * The params passed in the POST body (with a content-type of application/x-www-form-urlencoded) + * + * @param RequestInterface $request Request to generate a signature for + * @param integer $timestamp Timestamp to use for nonce + * @param string $nonce + * + * @return array + */ + public function getParamsToSign(RequestInterface $request, $timestamp, $nonce) + { + $params = $this->getOauthParams($timestamp, $nonce); + // Add query string parameters $params->merge($request->getQuery()); @@ -184,7 +226,7 @@ class OauthPlugin implements EventSubscriberInterface // Sort params $params = $params->toArray(); - ksort($params); + uksort($params, 'strcmp'); return $params; } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Oauth/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Oauth/composer.json new file mode 100644 index 00000000000..c9766ba16e8 --- /dev/null +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/Oauth/composer.json @@ -0,0 +1,27 @@ +{ + "name": "guzzle/plugin-oauth", + "description": "Guzzle OAuth plugin", + "homepage": "http://guzzlephp.org/", + "keywords": ["oauth", "plugin", "guzzle"], + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "require": { + "php": ">=5.3.2", + "guzzle/http": "self.version" + }, + "autoload": { + "psr-0": { "Guzzle\\Plugin\\Oauth": "" } + }, + "target-dir": "Guzzle/Plugin/Oauth", + "extra": { + "branch-alias": { + "dev-master": "3.7-dev" + } + } +} diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/composer.json new file mode 100644 index 00000000000..2bbe64cc5e5 --- /dev/null +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Plugin/composer.json @@ -0,0 +1,44 @@ +{ + "name": "guzzle/plugin", + "description": "Guzzle plugin component containing all Guzzle HTTP plugins", + "homepage": "http://guzzlephp.org/", + "keywords": ["http", "client", "plugin", "extension", "guzzle"], + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "require": { + "php": ">=5.3.2", + "guzzle/http": "self.version" + }, + "suggest": { + "guzzle/cache": "self.version", + "guzzle/log": "self.version" + }, + "autoload": { + "psr-0": { "Guzzle\\Plugin": "" } + }, + "target-dir": "Guzzle/Plugin", + "replace": { + "guzzle/plugin-async": "self.version", + "guzzle/plugin-backoff": "self.version", + "guzzle/plugin-cache": "self.version", + "guzzle/plugin-cookie": "self.version", + "guzzle/plugin-curlauth": "self.version", + "guzzle/plugin-error-response": "self.version", + "guzzle/plugin-history": "self.version", + "guzzle/plugin-log": "self.version", + "guzzle/plugin-md5": "self.version", + "guzzle/plugin-mock": "self.version", + "guzzle/plugin-oauth": "self.version" + }, + "extra": { + "branch-alias": { + "dev-master": "3.7-dev" + } + } +} diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Client.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Client.php index 944d994f77f..3e5f8e53da1 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Client.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Client.php @@ -57,7 +57,8 @@ class Client extends HttpClient implements ClientInterface 'command.before_prepare', 'command.after_prepare', 'command.before_send', - 'command.after_send' + 'command.after_send', + 'command.parse_response' )); } @@ -146,6 +147,10 @@ class Client extends HttpClient implements ClientInterface { $this->serviceDescription = $service; + if ($this->getCommandFactory() && $this->getCommandFactory() instanceof CompositeFactory) { + $this->commandFactory->add(new Command\Factory\ServiceDescriptionFactory($service)); + } + // If a baseUrl was set on the description, then update the client if ($baseUrl = $service->getBaseUrl()) { $this->setBaseUrl($baseUrl); diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/AbstractCommand.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/AbstractCommand.php index e54f51ace56..e42ff90215e 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/AbstractCommand.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/AbstractCommand.php @@ -4,7 +4,6 @@ namespace Guzzle\Service\Command; use Guzzle\Common\Collection; use Guzzle\Common\Exception\InvalidArgumentException; -use Guzzle\Http\Message\Response; use Guzzle\Http\Message\RequestInterface; use Guzzle\Http\Curl\CurlHandle; use Guzzle\Service\Client; @@ -375,4 +374,17 @@ abstract class AbstractCommand extends Collection implements CommandInterface return $this->validator; } + + /** + * Get array of any validation errors + * If no validator has been set then return false + */ + public function getValidationErrors() + { + if (!$this->validator) { + return false; + } + + return $this->validator->getErrors(); + } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/CreateResponseClassEvent.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/CreateResponseClassEvent.php new file mode 100644 index 00000000000..e05067841c9 --- /dev/null +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/CreateResponseClassEvent.php @@ -0,0 +1,32 @@ +<?php + +namespace Guzzle\Service\Command; + +use Guzzle\Common\Event; + +/** + * Event class emitted with the operation.parse_class event + */ +class CreateResponseClassEvent extends Event +{ + /** + * Set the result of the object creation + * + * @param mixed $result Result value to set + */ + public function setResult($result) + { + $this['result'] = $result; + $this->stopPropagation(); + } + + /** + * Get the created object + * + * @return mixed + */ + public function getResult() + { + return $this['result']; + } +} diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/DefaultRequestSerializer.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/DefaultRequestSerializer.php index dfca2e1038d..2dc4acd3788 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/DefaultRequestSerializer.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/DefaultRequestSerializer.php @@ -3,7 +3,6 @@ namespace Guzzle\Service\Command; use Guzzle\Http\Message\RequestInterface; -use Guzzle\Http\Url; use Guzzle\Service\Command\LocationVisitor\Request\RequestVisitorInterface; use Guzzle\Service\Command\LocationVisitor\VisitorFlyweight; use Guzzle\Service\Description\OperationInterface; diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/DefaultResponseParser.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/DefaultResponseParser.php index da26caff9c2..4fe380376a4 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/DefaultResponseParser.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/DefaultResponseParser.php @@ -45,7 +45,7 @@ class DefaultResponseParser implements ResponseParserInterface if ($result->getBody()) { if (stripos($contentType, 'json') !== false) { $result = $result->json(); - } if (stripos($contentType, 'xml') !== false) { + } elseif (stripos($contentType, 'xml') !== false) { $result = $result->xml(); } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Request/JsonVisitor.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Request/JsonVisitor.php index db0b00468e8..757e1c520ce 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Request/JsonVisitor.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Request/JsonVisitor.php @@ -51,12 +51,13 @@ class JsonVisitor extends AbstractRequestVisitor public function after(CommandInterface $command, RequestInterface $request) { if (isset($this->data[$command])) { - $request->setBody(json_encode($this->data[$command])); - unset($this->data[$command]); // Don't overwrite the Content-Type if one is set if ($this->jsonContentType && !$request->hasHeader('Content-Type')) { $request->setHeader('Content-Type', $this->jsonContentType); } + + $request->setBody(json_encode($this->data[$command])); + unset($this->data[$command]); } } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Request/XmlVisitor.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Request/XmlVisitor.php index 01f42da65c4..5b714878708 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Request/XmlVisitor.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Request/XmlVisitor.php @@ -43,6 +43,7 @@ class XmlVisitor extends AbstractRequestVisitor ? $this->data[$command] : $this->createRootElement($param->getParent()); $this->addXml($xml, $param, $value); + $this->data[$command] = $xml; } @@ -52,22 +53,23 @@ class XmlVisitor extends AbstractRequestVisitor // If data was found that needs to be serialized, then do so if (isset($this->data[$command])) { - $xml = $this->data[$command]->asXML(); + $xml = $this->finishDocument($this->data[$command]); unset($this->data[$command]); } else { // Check if XML should always be sent for the command $operation = $command->getOperation(); if ($operation->getData('xmlAllowEmpty')) { - $xml = $this->createRootElement($operation)->asXML(); + $xmlWriter = $this->createRootElement($operation); + $xml = $this->finishDocument($xmlWriter); } } if ($xml) { - $request->setBody($xml); // Don't overwrite the Content-Type if one is set if ($this->contentType && !$request->hasHeader('Content-Type')) { $request->setHeader('Content-Type', $this->contentType); } + $request->setBody($xml); } } @@ -76,42 +78,41 @@ class XmlVisitor extends AbstractRequestVisitor * * @param Operation $operation Operation object * - * @return \SimpleXMLElement + * @return \XMLWriter */ protected function createRootElement(Operation $operation) { static $defaultRoot = array('name' => 'Request'); // If no root element was specified, then just wrap the XML in 'Request' $root = $operation->getData('xmlRoot') ?: $defaultRoot; - // Allow the XML declaration to be customized with xmlEncoding - $declaration = '<?xml version="1.0"'; - if ($encoding = $operation->getData('xmlEncoding')) { - $declaration .= ' encoding="' . $encoding . '"'; - } - $declaration .= "?>"; + $encoding = $operation->getData('xmlEncoding'); + + $xmlWriter = $this->startDocument($encoding); + $xmlWriter->startElement($root['name']); // Create the wrapping element with no namespaces if no namespaces were present - if (empty($root['namespaces'])) { - return new \SimpleXMLElement("{$declaration}\n<{$root['name']}/>"); - } else { + if (!empty($root['namespaces'])) { // Create the wrapping element with an array of one or more namespaces - $xml = "{$declaration}\n<{$root['name']} "; foreach ((array) $root['namespaces'] as $prefix => $uri) { - $xml .= is_numeric($prefix) ? "xmlns=\"{$uri}\" " : "xmlns:{$prefix}=\"{$uri}\" "; + $nsLabel = 'xmlns'; + if (!is_numeric($prefix)) { + $nsLabel .= ':'.$prefix; + } + $xmlWriter->writeAttribute($nsLabel, $uri); } - return new \SimpleXMLElement($xml . "/>"); } + return $xmlWriter; } /** * Recursively build the XML body * - * @param \SimpleXMLElement $xml XML to modify - * @param Parameter $param API Parameter - * @param mixed $value Value to add + * @param \XMLWriter $xmlWriter XML to modify + * @param Parameter $param API Parameter + * @param mixed $value Value to add */ - protected function addXml(\SimpleXMLElement $xml, Parameter $param, $value) + protected function addXml(\XMLWriter $xmlWriter, Parameter $param, $value) { if ($value === null) { return; @@ -119,29 +120,110 @@ class XmlVisitor extends AbstractRequestVisitor $value = $param->filter($value); $type = $param->getType(); + $name = $param->getWireName(); + $prefix = null; + $namespace = $param->getData('xmlNamespace'); + if (false !== strpos($name, ':')) { + list($prefix, $name) = explode(':', $name, 2); + } if ($type == 'object' || $type == 'array') { - $ele = $param->getData('xmlFlattened') ? $xml : $xml->addChild($param->getWireName()); + if (!$param->getData('xmlFlattened')) { + $xmlWriter->startElementNS(null, $name, $namespace); + } if ($param->getType() == 'array') { - $this->addXmlArray($ele, $param, $value, $param->getData('xmlNamespace')); + $this->addXmlArray($xmlWriter, $param, $value); } elseif ($param->getType() == 'object') { - $this->addXmlObject($ele, $param, $value); + $this->addXmlObject($xmlWriter, $param, $value); } - } elseif ($param->getData('xmlAttribute')) { - $xml->addAttribute($param->getWireName(), $value, $param->getData('xmlNamespace')); + if (!$param->getData('xmlFlattened')) { + $xmlWriter->endElement(); + } + return; + } + if ($param->getData('xmlAttribute')) { + $this->writeAttribute($xmlWriter, $prefix, $name, $namespace, $value); } else { - $xml->addChild($param->getWireName(), $value, $param->getData('xmlNamespace')); + $this->writeElement($xmlWriter, $prefix, $name, $namespace, $value); } } /** + * Write an attribute with namespace if used + * + * @param \XMLWriter $xmlWriter XMLWriter instance + * @param string $prefix Namespace prefix if any + * @param string $name Attribute name + * @param string $namespace The uri of the namespace + * @param string $value The attribute content + */ + protected function writeAttribute($xmlWriter, $prefix, $name, $namespace, $value) + { + if (empty($namespace)) { + $xmlWriter->writeAttribute($name, $value); + } else { + $xmlWriter->writeAttributeNS($prefix, $name, $namespace, $value); + } + } + + /** + * Write an element with namespace if used + * + * @param \XMLWriter $xmlWriter XML writer resource + * @param string $prefix Namespace prefix if any + * @param string $name Element name + * @param string $namespace The uri of the namespace + * @param string $value The element content + */ + protected function writeElement(\XMLWriter $xmlWriter, $prefix, $name, $namespace, $value) + { + $xmlWriter->startElementNS($prefix, $name, $namespace); + if (strpbrk($value, '<>&')) { + $xmlWriter->writeCData($value); + } else { + $xmlWriter->writeRaw($value); + } + $xmlWriter->endElement(); + } + + /** + * Create a new xml writer and start a document + * + * @param string $encoding document encoding + * + * @return \XMLWriter the writer resource + */ + protected function startDocument($encoding) + { + $xmlWriter = new \XMLWriter(); + $xmlWriter->openMemory(); + $xmlWriter->startDocument('1.0', $encoding); + + return $xmlWriter; + } + + /** + * End the document and return the output + * + * @param \XMLWriter $xmlWriter + * + * @return \string the writer resource + */ + protected function finishDocument($xmlWriter) + { + $xmlWriter->endDocument(); + + return $xmlWriter->outputMemory(); + } + + /** * Add an array to the XML */ - protected function addXmlArray(\SimpleXMLElement $xml, Parameter $param, &$value) + protected function addXmlArray(\XMLWriter $xmlWriter, Parameter $param, &$value) { if ($items = $param->getItems()) { foreach ($value as $v) { - $this->addXml($xml, $items, $v); + $this->addXml($xmlWriter, $items, $v); } } } @@ -149,12 +231,22 @@ class XmlVisitor extends AbstractRequestVisitor /** * Add an object to the XML */ - protected function addXmlObject(\SimpleXMLElement $xml, Parameter $param, &$value) + protected function addXmlObject(\XMLWriter $xmlWriter, Parameter $param, &$value) { + $noAttributes = array(); + // add values which have attributes foreach ($value as $name => $v) { if ($property = $param->getProperty($name)) { - $this->addXml($xml, $property, $v); + if ($property->getData('xmlAttribute')) { + $this->addXml($xmlWriter, $property, $v); + } else { + $noAttributes[] = array('value' => $v, 'property' => $property); + } } } + // now add values with no attributes + foreach ($noAttributes as $element) { + $this->addXml($xmlWriter, $element['property'], $element['value']); + } } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Response/JsonVisitor.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Response/JsonVisitor.php index b9b35a86d22..a609ebd8ce9 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Response/JsonVisitor.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Response/JsonVisitor.php @@ -60,10 +60,12 @@ class JsonVisitor extends AbstractResponseVisitor } } elseif ($type == 'object' && !isset($value[0])) { // On the above line, we ensure that the array is associative and not numerically indexed + $knownProperties = array(); if ($properties = $param->getProperties()) { foreach ($properties as $property) { $name = $property->getName(); $key = $property->getWireName(); + $knownProperties[$name] = 1; if (isset($value[$key])) { $this->recursiveProcess($property, $value[$key]); if ($key != $name) { @@ -73,6 +75,16 @@ class JsonVisitor extends AbstractResponseVisitor } } } + + // Remove any unknown and potentially unsafe properties + if ($param->getAdditionalProperties() === false) { + $value = array_intersect_key($value, $knownProperties); + } elseif (($additional = $param->getAdditionalProperties()) !== true) { + // Validate and filter additional properties + foreach ($value as &$v) { + $this->recursiveProcess($additional, $v); + } + } } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Response/XmlVisitor.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Response/XmlVisitor.php index ae1c556f980..bb7124be757 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Response/XmlVisitor.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/LocationVisitor/Response/XmlVisitor.php @@ -55,6 +55,8 @@ class XmlVisitor extends AbstractResponseVisitor $this->processObject($param, $value); } elseif ($type == 'array') { $this->processArray($param, $value); + } elseif ($type == 'string' && gettype($value) == 'array') { + $value = ''; } if ($value !== null) { @@ -106,9 +108,11 @@ class XmlVisitor extends AbstractResponseVisitor { // Ensure that the array is associative and not numerically indexed if (!isset($value[0]) && ($properties = $param->getProperties())) { + $knownProperties = array(); foreach ($properties as $property) { $name = $property->getName(); $sentAs = $property->getWireName(); + $knownProperties[$name] = 1; if ($property->getData('xmlAttribute')) { $this->processXmlAttribute($property, $value); } elseif (isset($value[$sentAs])) { @@ -119,6 +123,11 @@ class XmlVisitor extends AbstractResponseVisitor } } } + + // Remove any unknown and potentially unsafe properties + if ($param->getAdditionalProperties() === false) { + $value = array_intersect_key($value, $knownProperties); + } } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/OperationResponseParser.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/OperationResponseParser.php index 0d51296e280..ca00bc06255 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/OperationResponseParser.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Command/OperationResponseParser.php @@ -22,6 +22,9 @@ class OperationResponseParser extends DefaultResponseParser /** @var self */ protected static $instance; + /** @var bool */ + private $schemaInModels; + /** * @return self * @codeCoverageIgnore @@ -36,11 +39,13 @@ class OperationResponseParser extends DefaultResponseParser } /** - * @param VisitorFlyweight $factory Factory to use when creating visitors + * @param VisitorFlyweight $factory Factory to use when creating visitors + * @param bool $schemaInModels Set to true to inject schemas into models */ - public function __construct(VisitorFlyweight $factory) + public function __construct(VisitorFlyweight $factory, $schemaInModels = false) { $this->factory = $factory; + $this->schemaInModels = $schemaInModels; } /** @@ -67,14 +72,7 @@ class OperationResponseParser extends DefaultResponseParser if ($type == OperationInterface::TYPE_MODEL) { $model = $operation->getServiceDescription()->getModel($operation->getResponseClass()); } elseif ($type == OperationInterface::TYPE_CLASS) { - $responseClassInterface = __NAMESPACE__ . '\ResponseClassInterface'; - $className = $operation->getResponseClass(); - if (!class_exists($className)) { - throw new ResponseClassException("{$className} does not exist"); - } elseif (!method_exists($className, 'fromCommand')) { - throw new ResponseClassException("{$className} must implement {$responseClassInterface}"); - } - return $className::fromCommand($command); + return $this->parseClass($command); } if (!$model) { @@ -82,13 +80,39 @@ class OperationResponseParser extends DefaultResponseParser return parent::handleParsing($command, $response, $contentType); } elseif ($command[AbstractCommand::RESPONSE_PROCESSING] != AbstractCommand::TYPE_MODEL) { // Returns a model with no visiting if the command response processing is not model - return new Model(parent::handleParsing($command, $response, $contentType), $model); + return new Model(parent::handleParsing($command, $response, $contentType)); } else { - return new Model($this->visitResult($model, $command, $response), $model); + // Only inject the schema into the model if "schemaInModel" is true + return new Model($this->visitResult($model, $command, $response), $this->schemaInModels ? $model : null); } } /** + * Parse a class object + * + * @param CommandInterface $command Command to parse into an object + * + * @return mixed + * @throws ResponseClassException + */ + protected function parseClass(CommandInterface $command) + { + // Emit the operation.parse_class event. If a listener injects a 'result' property, then that will be the result + $event = new CreateResponseClassEvent(array('command' => $command)); + $command->getClient()->getEventDispatcher()->dispatch('command.parse_response', $event); + if ($result = $event->getResult()) { + return $result; + } + + $className = $command->getOperation()->getResponseClass(); + if (!method_exists($className, 'fromCommand')) { + throw new ResponseClassException("{$className} must exist and implement a static fromCommand() method"); + } + + return $className::fromCommand($command); + } + + /** * Perform transformations on the result array * * @param Parameter $model Model that defines the structure @@ -99,7 +123,7 @@ class OperationResponseParser extends DefaultResponseParser */ protected function visitResult(Parameter $model, CommandInterface $command, Response $response) { - $foundVisitors = $result = array(); + $foundVisitors = $result = $knownProps = array(); $props = $model->getProperties(); foreach ($props as $schema) { @@ -113,39 +137,23 @@ class OperationResponseParser extends DefaultResponseParser } // Visit additional properties when it is an actual schema - if ($additional = $model->getAdditionalProperties()) { - if ($additional instanceof Parameter) { - // Only visit when a location is specified - if ($location = $additional->getLocation()) { - if (!isset($foundVisitors[$location])) { - $foundVisitors[$location] = $this->factory->getResponseVisitor($location); - $foundVisitors[$location]->before($command, $result); - } - // Only traverse if an array was parsed from the before() visitors - if (is_array($result)) { - // Find each additional property - foreach (array_keys($result) as $key) { - // Check if the model actually knows this property. If so, then it is not additional - if (!$model->getProperty($key)) { - // Set the name to the key so that we can parse it with each visitor - $additional->setName($key); - $foundVisitors[$location]->visit($command, $response, $additional, $result); - } - } - // Reset the additionalProperties name to null - $additional->setName(null); - } - } - } + if (($additional = $model->getAdditionalProperties()) instanceof Parameter) { + $this->visitAdditionalProperties($model, $command, $response, $additional, $result, $foundVisitors); } // Apply the parameter value with the location visitor foreach ($props as $schema) { + $knownProps[$schema->getName()] = 1; if ($location = $schema->getLocation()) { $foundVisitors[$location]->visit($command, $response, $schema, $result); } } + // Remove any unknown and potentially unsafe top-level properties + if ($additional === false) { + $result = array_intersect_key($result, $knownProps); + } + // Call the after() method of each found visitor foreach ($foundVisitors as $visitor) { $visitor->after($command); @@ -153,4 +161,35 @@ class OperationResponseParser extends DefaultResponseParser return $result; } + + protected function visitAdditionalProperties( + Parameter $model, + CommandInterface $command, + Response $response, + Parameter $additional, + &$result, + array &$foundVisitors + ) { + // Only visit when a location is specified + if ($location = $additional->getLocation()) { + if (!isset($foundVisitors[$location])) { + $foundVisitors[$location] = $this->factory->getResponseVisitor($location); + $foundVisitors[$location]->before($command, $result); + } + // Only traverse if an array was parsed from the before() visitors + if (is_array($result)) { + // Find each additional property + foreach (array_keys($result) as $key) { + // Check if the model actually knows this property. If so, then it is not additional + if (!$model->getProperty($key)) { + // Set the name to the key so that we can parse it with each visitor + $additional->setName($key); + $foundVisitors[$location]->visit($command, $response, $additional, $result); + } + } + // Reset the additionalProperties name to null + $additional->setName(null); + } + } + } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/Operation.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/Operation.php index 8400ff64e19..b2890be53f1 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/Operation.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/Operation.php @@ -507,7 +507,7 @@ class Operation implements OperationInterface /** * Get the additionalParameters of the operation * - * @return Paramter|null + * @return Parameter|null */ public function getAdditionalParameters() { @@ -535,16 +535,13 @@ class Operation implements OperationInterface */ protected function inferResponseType() { - if (!$this->responseClass || $this->responseClass == 'array' || $this->responseClass == 'string' - || $this->responseClass == 'boolean' || $this->responseClass == 'integer' - ) { + static $primitives = array('array' => 1, 'boolean' => 1, 'string' => 1, 'integer' => 1, '' => 1); + if (isset($primitives[$this->responseClass])) { $this->responseType = self::TYPE_PRIMITIVE; } elseif ($this->description && $this->description->hasModel($this->responseClass)) { $this->responseType = self::TYPE_MODEL; - } elseif (strpos($this->responseClass, '\\') !== false) { - $this->responseType = self::TYPE_CLASS; } else { - $this->responseType = self::TYPE_PRIMITIVE; + $this->responseType = self::TYPE_CLASS; } } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/Parameter.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/Parameter.php index c856a79a5d1..9ed3c30bf2f 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/Parameter.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/Parameter.php @@ -97,12 +97,7 @@ class Parameter if ($description) { if (isset($data['$ref'])) { if ($model = $description->getModel($data['$ref'])) { - // The name of the original parameter should override the ref name if one is available - $name = empty($data['name']) ? null : $data['name']; - $data = $model->toArray(); - if ($name) { - $data['name'] = $name; - } + $data = $model->toArray() + $data; } } elseif (isset($data['extends'])) { // If this parameter extends from another parameter then start with the actual data @@ -138,11 +133,12 @@ class Parameter */ public function toArray() { - $result = array(); - $checks = array('required', 'description', 'static', 'type', 'format', 'instanceOf', 'location', 'sentAs', + static $checks = array('required', 'description', 'static', 'type', 'format', 'instanceOf', 'location', 'sentAs', 'pattern', 'minimum', 'maximum', 'minItems', 'maxItems', 'minLength', 'maxLength', 'data', 'enum', 'filters'); + $result = array(); + // Anything that is in the `Items` attribute of an array *must* include it's name if available if ($this->parent instanceof self && $this->parent->getType() == 'array' && isset($this->name)) { $result['name'] = $this->name; @@ -188,9 +184,11 @@ class Parameter */ public function getValue($value) { - return $this->static || ($this->default !== null && !$value && ($this->type != 'boolean' || $value !== false)) - ? $this->default - : $value; + if ($this->static || ($this->default !== null && $value === null)) { + return $this->default; + } + + return $value; } /** diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/SchemaFormatter.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/SchemaFormatter.php index 3f29550aae3..7f47fc9d70c 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/SchemaFormatter.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/SchemaFormatter.php @@ -109,7 +109,7 @@ class SchemaFormatter */ public static function formatTimestamp($value) { - return self::dateFormatter($value, 'U'); + return (int) self::dateFormatter($value, 'U'); } /** diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/SchemaValidator.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/SchemaValidator.php index 1d15f0fcfb2..b045422d4c7 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/SchemaValidator.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Description/SchemaValidator.php @@ -136,7 +136,7 @@ class SchemaValidator implements ValidatorInterface $current = null; $this->recursiveProcess($property, $current, $path, $depth + 1); // Only set the value if it was populated with something - if ($current) { + if (null !== $current) { $value[$name] = $current; } } @@ -157,8 +157,9 @@ class SchemaValidator implements ValidatorInterface } } else { // if additionalProperties is set to false and there are additionalProperties in the values, then fail - $keys = array_keys($value); - $this->errors[] = sprintf('%s[%s] is not an allowed property', $path, reset($keys)); + foreach ($diff as $prop) { + $this->errors[] = sprintf('%s[%s] is not an allowed property', $path, $prop); + } } } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Exception/CommandTransferException.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Exception/CommandTransferException.php index 1d4929eded0..eabe93d3dbd 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Exception/CommandTransferException.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Exception/CommandTransferException.php @@ -23,10 +23,28 @@ class CommandTransferException extends MultiTransferException public static function fromMultiTransferException(MultiTransferException $e) { $ce = new self($e->getMessage(), $e->getCode(), $e->getPrevious()); + $ce->setSuccessfulRequests($e->getSuccessfulRequests()); - return $ce->setExceptions($e->getIterator()->getArrayCopy()) - ->setSuccessfulRequests($e->getSuccessfulRequests()) - ->setFailedRequests($e->getFailedRequests()); + $alreadyAddedExceptions = array(); + foreach ($e->getFailedRequests() as $request) { + if ($re = $e->getExceptionForFailedRequest($request)) { + $alreadyAddedExceptions[] = $re; + $ce->addFailedRequestWithException($request, $re); + } else { + $ce->addFailedRequest($request); + } + } + + // Add any exceptions that did not map to a request + if (count($alreadyAddedExceptions) < count($e)) { + foreach ($e as $ex) { + if (!in_array($ex, $alreadyAddedExceptions)) { + $ce->add($ex); + } + } + } + + return $ce; } /** @@ -86,4 +104,16 @@ class CommandTransferException extends MultiTransferException { return $this->failedCommands; } + + /** + * Get the Exception that caused the given $command to fail + * + * @param CommandInterface $command Failed command + * + * @return \Exception|null + */ + public function getExceptionForFailedCommand(CommandInterface $command) + { + return $this->getExceptionForFailedRequest($command->getRequest()); + } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Resource/Model.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Resource/Model.php index d146b3ecb32..2322434a543 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Resource/Model.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/Resource/Model.php @@ -20,7 +20,7 @@ class Model extends Collection public function __construct(array $data = array(), Parameter $structure = null) { $this->data = $data; - $this->structure = $structure ?: new Parameter(); + $this->structure = $structure; } /** @@ -30,7 +30,7 @@ class Model extends Collection */ public function getStructure() { - return $this->structure; + return $this->structure ?: new Parameter(); } /** @@ -40,18 +40,25 @@ class Model extends Collection */ public function __toString() { - $output = 'Debug output of ' . ($this->structure->getName() ?: ' the model'); + $output = 'Debug output of '; + if ($this->structure) { + $output .= $this->structure->getName() . ' '; + } + $output .= 'model'; $output = str_repeat('=', strlen($output)) . "\n" . $output . "\n" . str_repeat('=', strlen($output)) . "\n\n"; $output .= "Model data\n-----------\n\n"; $output .= "This data can be retrieved from the model object using the get() method of the model " . "(e.g. \$model->get(\$key)) or accessing the model like an associative array (e.g. \$model['key']).\n\n"; $lines = array_slice(explode("\n", trim(print_r($this->toArray(), true))), 2, -1); - $output .= implode("\n", $lines) . "\n\n"; - $output .= "Model structure\n---------------\n\n"; - $output .= "The following JSON document defines how the model was parsed from an HTTP response into the " - . "associative array strucure you see above.\n\n"; - $output .= ' ' . json_encode($this->structure->toArray()) . "\n\n"; + $output .= implode("\n", $lines); - return $output; + if ($this->structure) { + $output .= "\n\nModel structure\n---------------\n\n"; + $output .= "The following JSON document defines how the model was parsed from an HTTP response into the " + . "associative array structure you see above.\n\n"; + $output .= ' ' . json_encode($this->structure->toArray()) . "\n\n"; + } + + return $output . "\n"; } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/composer.json new file mode 100644 index 00000000000..cb7ace623dc --- /dev/null +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Service/composer.json @@ -0,0 +1,29 @@ +{ + "name": "guzzle/service", + "description": "Guzzle service component for abstracting RESTful web services", + "homepage": "http://guzzlephp.org/", + "keywords": ["web service", "webservice", "REST", "guzzle"], + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "require": { + "php": ">=5.3.2", + "guzzle/cache": "self.version", + "guzzle/http": "self.version", + "guzzle/inflection": "self.version" + }, + "autoload": { + "psr-0": { "Guzzle\\Service": "" } + }, + "target-dir": "Guzzle/Service", + "extra": { + "branch-alias": { + "dev-master": "3.7-dev" + } + } +} diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Stream/PhpStreamRequestFactory.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Stream/PhpStreamRequestFactory.php index 0c2c94f2640..9949e456f5e 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Stream/PhpStreamRequestFactory.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Stream/PhpStreamRequestFactory.php @@ -45,12 +45,6 @@ class PhpStreamRequestFactory implements StreamRequestFactoryInterface throw new InvalidArgumentException('$context must be an array or resource'); } - $this->setUrl($request); - $this->addDefaultContextOptions($request); - $this->addSslOptions($request); - $this->addBodyOptions($request); - $this->addProxyOptions($request); - // Dispatch the before send event $request->dispatch('request.before_send', array( 'request' => $request, @@ -58,6 +52,12 @@ class PhpStreamRequestFactory implements StreamRequestFactoryInterface 'context_options' => $this->contextOptions )); + $this->setUrl($request); + $this->addDefaultContextOptions($request); + $this->addSslOptions($request); + $this->addBodyOptions($request); + $this->addProxyOptions($request); + // Create the file handle but silence errors return $this->createStream($params) ->setCustomData('request', $request) @@ -114,9 +114,15 @@ class PhpStreamRequestFactory implements StreamRequestFactoryInterface protected function addDefaultContextOptions(RequestInterface $request) { $this->setContextValue('http', 'method', $request->getMethod()); - $this->setContextValue('http', 'header', $request->getHeaderLines()); - // Force 1.0 for now until PHP fully support chunked transfer-encoding decoding - $this->setContextValue('http', 'protocol_version', '1.0'); + $headers = $request->getHeaderLines(); + + // "Connection: close" is required to get streams to work in HTTP 1.1 + if (!$request->hasHeader('Connection')) { + $headers[] = 'Connection: close'; + } + + $this->setContextValue('http', 'header', $headers); + $this->setContextValue('http', 'protocol_version', $request->getProtocolVersion()); $this->setContextValue('http', 'ignore_errors', true); } @@ -147,7 +153,7 @@ class PhpStreamRequestFactory implements StreamRequestFactoryInterface */ protected function addSslOptions(RequestInterface $request) { - if ($verify = $request->getCurlOptions()->get(CURLOPT_SSL_VERIFYPEER)) { + if ($request->getCurlOptions()->get(CURLOPT_SSL_VERIFYPEER)) { $this->setContextValue('ssl', 'verify_peer', true, true); if ($cafile = $request->getCurlOptions()->get(CURLOPT_CAINFO)) { $this->setContextValue('ssl', 'cafile', $cafile, true); @@ -235,7 +241,7 @@ class PhpStreamRequestFactory implements StreamRequestFactoryInterface { // Set the size on the stream if it was returned in the response foreach ($this->lastResponseHeaders as $header) { - if (($pos = stripos($header, 'Content-Length:')) === 0) { + if ((stripos($header, 'Content-Length:')) === 0) { $stream->setSize(trim(substr($header, 15))); } } diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Stream/Stream.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Stream/Stream.php index e222e02ebee..12bed268d90 100644 --- a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Stream/Stream.php +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Stream/Stream.php @@ -100,8 +100,8 @@ class Stream implements StreamInterface } $ctx = hash_init($algo); - while ($data = $stream->read(8192)) { - hash_update($ctx, $data); + while (!$stream->feof()) { + hash_update($ctx, $stream->read(8192)); } $out = hash_final($ctx, (bool) $rawOutput); @@ -234,20 +234,15 @@ class Stream implements StreamInterface public function read($length) { - return $this->cache[self::IS_READABLE] ? fread($this->stream, $length) : false; + return fread($this->stream, $length); } public function write($string) { - if (!$this->cache[self::IS_WRITABLE]) { - return 0; - } - - $bytes = fwrite($this->stream, $string); // We can't know the size after writing anything $this->size = null; - return $bytes; + return fwrite($this->stream, $string); } public function ftell() diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Stream/composer.json b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Stream/composer.json new file mode 100644 index 00000000000..9c19d2bd17a --- /dev/null +++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Stream/composer.json @@ -0,0 +1,30 @@ +{ + "name": "guzzle/stream", + "description": "Guzzle stream wrapper component", + "homepage": "http://guzzlephp.org/", + "keywords": ["stream", "component", "guzzle"], + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "require": { + "php": ">=5.3.2", + "guzzle/common": "self.version" + }, + "suggest": { + "guzzle/http": "To convert Guzzle request objects to PHP streams" + }, + "autoload": { + "psr-0": { "Guzzle\\Stream": "" } + }, + "target-dir": "Guzzle/Stream", + "extra": { + "branch-alias": { + "dev-master": "3.7-dev" + } + } +} |