public static function hash($object, $algoOrCtx = 'md5', $raw = FALSE)
	{
		if (is_string($algoOrCtx)) {
			$ctx = hash_init($algoOrCtx);
		} else {
			$ctx = $algoOrCtx;
		}

		if (isset($object->error)) {
			hash_update($ctx, 'error');
			hash_update($ctx, (string)$object->error);
		}

		if (isset($object->file)) {
			hash_update($ctx, 'file');
			foreach ($object->file instanceof \Traversable ? $object->file : (array)$object->file as $v0) {
				FileMeta::hash($v0, $ctx);
			}
		}

		if (is_string($algoOrCtx)) {
			return hash_final($ctx, $raw);
		} else {
			return null;
		}
	}