static public function decodeQualifiedValues( $qualifiedValues, $sortByLength = FALSE ){
		$pattern	= '/^(\S+)(?:;\s*q=(0(?:\.[0-9]{1,3})?|1(?:\.0{1,3})?))?$/iU';
		$parts		= preg_split( '/,\s*/', $qualifiedValues );
		$codes		= array();
		foreach( $parts as $part )
			if( preg_match ( $pattern, $part, $matches ) )
				$codes[$matches[1]]	= isset( $matches[2] ) ? (float) $matches[2] : 1.0;
		$map	= array();
		foreach( $codes as $code => $quality ){
			if( !isset( $map[(string)$quality] ) )
				$map[(string)$quality]	= array();
			$map[(string)$quality][strlen( $code)]	= $code;
			if( $sortByLength )
				krsort( $map[(string)$quality] );													//  sort inner list by code length
		}
		krsort( $map );																				//  sort outer list by quality
		$list	= array();
		foreach( $map as $quality => $codes )														//  reduce map to list
			foreach( $codes as $code )
				$list[$code]	= (float) $quality;
		return $list;
	}