c2pa-rs

A fork of https://github.com/contentauth/c2pa-rs/
git clone git://archive.git.mtrnord.blog/mtrnords-photography-manager/c2pa-rs.git
Log | Files | Refs | README

commit c2dc4346202ffdced2295dbc56e12f6f4972fb32
parent 603902851ba8b8f74d02c1b76250b6d440193eda
Author: mauricefisher64 <92736594+mauricefisher64@users.noreply.github.com>
Date:   Wed,  5 Apr 2023 11:42:57 -0400

(MINOR) SVG support (#226)


Diffstat:
Msdk/Cargo.toml | 2+-
Msdk/src/asset_handlers/mod.rs | 1+
Asdk/src/asset_handlers/svg_io.rs | 763+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msdk/src/error.rs | 3+++
Msdk/src/jumbf_io.rs | 11++++++++---
Msdk/src/utils/xmp_inmemory_utils.rs | 4++--
Asdk/tests/fixtures/sample1.svg | 10++++++++++
Asdk/tests/fixtures/sample2.svg | 11+++++++++++
Asdk/tests/fixtures/sample3.svg | 11+++++++++++
Asdk/tests/fixtures/sample4.svg | 13+++++++++++++
10 files changed, 823 insertions(+), 6 deletions(-)

diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml @@ -61,6 +61,7 @@ ciborium = "0.2.0" conv = "0.3.3" coset = "0.3.1" extfmt = "0.1.1" +fast-xml = "0.23.1" hex = "0.4.3" img-parts = "0.3.0" log = "0.4.8" @@ -68,7 +69,6 @@ lazy_static = "1.4.0" multibase = "0.9.0" multihash = "0.11.4" png_pong = "0.8.2" -quick-xml = "0.20.0" range-set = "0.0.9" ring = "0.16.20" riff = "1.0.1" diff --git a/sdk/src/asset_handlers/mod.rs b/sdk/src/asset_handlers/mod.rs @@ -16,4 +16,5 @@ pub mod c2pa_io; pub mod jpeg_io; pub mod png_io; pub mod riff_io; +pub mod svg_io; pub mod tiff_io; diff --git a/sdk/src/asset_handlers/svg_io.rs b/sdk/src/asset_handlers/svg_io.rs @@ -0,0 +1,763 @@ +// Copyright 2023 Adobe. All rights reserved. +// This file is licensed to you under the Apache License, +// Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0) +// or the MIT license (http://opensource.org/licenses/MIT), +// at your option. + +// Unless required by applicable law or agreed to in writing, +// this software is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or +// implied. See the LICENSE-MIT and LICENSE-APACHE files for the +// specific language governing permissions and limitations under +// each license. + +use std::{ + fs::{File, OpenOptions}, + io::{BufReader, Cursor, Seek, SeekFrom, Write}, + path::Path, +}; + +use conv::ValueFrom; +use fast_xml::{ + events::{BytesText, Event}, + Reader, Writer, +}; +use tempfile::Builder; + +use crate::{ + asset_io::{ + AssetIO, + AssetPatch, + CAIRead, + CAIReadWrite, + CAIReader, + CAIWriter, //RemoteRefEmbedType, + HashBlockObjectType, + //HashBlockObjectType, + HashObjectPositions, + RemoteRefEmbed, + }, + error::{Error, Result}, +}; + +static SUPPORTED_TYPES: [&str; 7] = [ + "svg", + "application/svg+xml", + "xhtml", + "xml", + "application/xhtml+xml", + "application/xml", + "text/xml", +]; + +const SVG: &str = "svg"; +const METADATA: &str = "metadata"; +const MANIFEST: &str = "c2pa:manifest"; +const MANIFEST_NS: &str = "xmlns:c2pa"; +const MANIFEST_NS_VAL: &str = "http://c2pa.org/manifest"; + +pub struct SvgIO {} + +impl CAIReader for SvgIO { + fn read_cai(&self, reader: &mut dyn CAIRead) -> Result<Vec<u8>> { + let (decoded_manifest_opt, _detected_tag_location, _insertion_point) = + detect_manifest_location(reader)?; + + match decoded_manifest_opt { + Some(decoded_manifest) => { + if !decoded_manifest.is_empty() { + Ok(decoded_manifest) + } else { + Err(Error::JumbfNotFound) + } + } + None => Err(Error::JumbfNotFound), + } + } + + // Get XMP block + fn read_xmp(&self, _asset_reader: &mut dyn CAIRead) -> Option<String> { + None + } +} + +impl AssetIO for SvgIO { + fn new(_asset_type: &str) -> Self { + SvgIO {} + } + + fn get_handler(&self, asset_type: &str) -> Box<dyn AssetIO> { + Box::new(SvgIO::new(asset_type)) + } + + fn get_reader(&self) -> &dyn CAIReader { + self + } + + fn asset_patch_ref(&self) -> Option<&dyn AssetPatch> { + Some(self) + } + + fn get_writer(&self, asset_type: &str) -> Option<Box<dyn CAIWriter>> { + Some(Box::new(SvgIO::new(asset_type))) + } + + fn read_cai_store(&self, asset_path: &Path) -> Result<Vec<u8>> { + let mut f = File::open(asset_path)?; + self.read_cai(&mut f) + } + + fn save_cai_store(&self, asset_path: &std::path::Path, store_bytes: &[u8]) -> Result<()> { + let mut input_stream = std::fs::OpenOptions::new() + .read(true) + .open(asset_path) + .map_err(Error::IoError)?; + + let mut temp_file = Builder::new() + .prefix("c2pa_temp") + .rand_bytes(5) + .tempfile()?; + + self.write_cai(&mut input_stream, &mut temp_file, store_bytes)?; + + // copy temp file to asset + std::fs::rename(temp_file.path(), asset_path) + // if rename fails, try to copy in case we are on different volumes + .or_else(|_| std::fs::copy(temp_file.path(), asset_path).and(Ok(()))) + .map_err(Error::IoError) + } + + fn get_object_locations( + &self, + asset_path: &std::path::Path, + ) -> Result<Vec<HashObjectPositions>> { + let mut input_stream = + std::fs::File::open(asset_path).map_err(|_err| Error::EmbeddingError)?; + + self.get_object_locations_from_stream(&mut input_stream) + } + + fn remove_cai_store(&self, asset_path: &Path) -> Result<()> { + let mut input_file = File::open(asset_path)?; + + let mut temp_file = Builder::new() + .prefix("c2pa_temp") + .rand_bytes(5) + .tempfile()?; + + self.remove_cai_store_from_stream(&mut input_file, &mut temp_file)?; + + // copy temp file to asset + std::fs::rename(temp_file.path(), asset_path) + // if rename fails, try to copy in case we are on different volumes + .or_else(|_| std::fs::copy(temp_file.path(), asset_path).and(Ok(()))) + .map_err(Error::IoError) + } + + fn remote_ref_writer_ref(&self) -> Option<&dyn RemoteRefEmbed> { + None + } + + fn supported_types(&self) -> &[&str] { + &SUPPORTED_TYPES + } +} + +// create manifest entry +fn create_manifest_tag(data: &[u8], with_meta: bool) -> Result<Vec<u8>> { + let mut output: Vec<u8> = Vec::with_capacity(data.len() + 256); + let mut writer = Writer::new(Cursor::new(output)); + + let encoded = base64::encode(data); + + if with_meta { + writer + .create_element(METADATA) + .write_inner_content(|writer| { + writer + .create_element(MANIFEST) + .with_attribute((MANIFEST_NS, MANIFEST_NS_VAL)) + .write_text_content(BytesText::from_plain_str(&encoded))?; + Ok(()) + }) + .map_err(|_e| Error::XmlWriteError)?; + } else { + writer + .create_element(MANIFEST) + .with_attribute((MANIFEST_NS, MANIFEST_NS_VAL)) + .write_text_content(BytesText::from_plain_str(&encoded)) + .map_err(|_e| Error::XmlWriteError)?; + } + + output = writer.into_inner().into_inner(); + + Ok(output) +} + +enum DetectedTagsDepth { + Metadata, + Manifest, + Empty, +} + +// returns tuple of found manifest, where in the XML hierarchy the manifest needs to go, and the manifest insertion point +fn detect_manifest_location( + input_stream: &mut dyn CAIRead, +) -> Result<(Option<Vec<u8>>, DetectedTagsDepth, usize)> { + input_stream.rewind()?; + + let mut buf = Vec::new(); + + let buf_reader = BufReader::new(input_stream); + + let mut xml_reader = Reader::from_reader(buf_reader); + + let mut xml_path: Vec<String> = Vec::new(); + + let mut detected_level = DetectedTagsDepth::Empty; + let mut insertion_point = 0; + + let mut output: Option<Vec<u8>> = None; + + loop { + match xml_reader.read_event(&mut buf) { + Ok(Event::Start(ref e)) => { + let name = String::from_utf8_lossy(e.name()).into_owned(); + xml_path.push(name); + + if xml_path.len() == 2 && xml_path[0] == SVG && xml_path[1] == METADATA { + detected_level = DetectedTagsDepth::Metadata; + insertion_point = xml_reader.buffer_position(); + } + + if xml_path.len() == 3 + && xml_path[0] == SVG + && xml_path[1] == METADATA + && xml_path[2] == MANIFEST + { + detected_level = DetectedTagsDepth::Manifest; + insertion_point = xml_reader.buffer_position(); + + let mut temp_buf = Vec::new(); + let s = xml_reader + .read_text(e.name(), &mut temp_buf) + .map_err(|_e| { + Error::InvalidAsset("XML manifest tag invalid content".to_string()) + })?; + + output = Some(base64::decode(s.into_bytes()).map_err(|_e| { + Error::InvalidAsset("XML bad base64 encoding".to_string()) + })?); + } + + if xml_path.len() == 1 && xml_path[0] == SVG { + detected_level = DetectedTagsDepth::Empty; + insertion_point = xml_reader.buffer_position(); + } + } + Ok(Event::End(_)) => { + let _p = xml_path.pop(); + } + Ok(Event::Eof) => break, + Err(_) => return Err(Error::InvalidAsset("XML invalid".to_string())), + _ => (), + } + } + + Ok((output, detected_level, insertion_point)) +} + +fn add_required_segs_to_stream( + input_stream: &mut dyn CAIRead, + output_stream: &mut dyn CAIReadWrite, +) -> Result<()> { + let (encoded_manifest_opt, _detected_tag_location, _insertion_point) = + detect_manifest_location(input_stream)?; + + let need_manifest = if let Some(encoded_manifest) = encoded_manifest_opt { + encoded_manifest.is_empty() + } else { + true + }; + + if need_manifest { + // add some data + let data: &str = "placeholder manifest"; + + let svg = SvgIO::new("svg"); + let svg_writer = svg.get_writer("svg").ok_or(Error::UnsupportedType)?; + + svg_writer.write_cai(input_stream, output_stream, data.as_bytes())?; + } else { + // just clone + input_stream.rewind()?; + output_stream.rewind()?; + std::io::copy(input_stream, output_stream)?; + } + + Ok(()) +} + +impl CAIWriter for SvgIO { + fn write_cai( + &self, + input_stream: &mut dyn CAIRead, + output_stream: &mut dyn CAIReadWrite, + store_bytes: &[u8], + ) -> Result<()> { + input_stream.rewind()?; + let (_encoded_manifest, detected_tag_location, _insertion_point) = + detect_manifest_location(input_stream)?; + + input_stream.rewind()?; + let buf_reader = BufReader::new(input_stream); + let mut reader = Reader::from_reader(buf_reader); + + output_stream.rewind()?; + let mut writer = Writer::new(output_stream); + + let mut buf = Vec::new(); + let mut xml_path: Vec<String> = Vec::new(); + + match detected_tag_location { + DetectedTagsDepth::Metadata => { + // add manifest case + let manifest_data = create_manifest_tag(store_bytes, false)?; + + loop { + match reader.read_event(&mut buf) { + Ok(Event::Start(e)) => { + let name = String::from_utf8_lossy(e.name()).into_owned(); + xml_path.push(name); + + // writes the event to the writer + writer + .write_event(Event::Start(e)) + .map_err(|_e| Error::XmlWriteError)?; + + // add manifest data + if xml_path.len() == 2 && xml_path[0] == SVG && xml_path[1] == METADATA + { + writer + .write(&manifest_data) + .map_err(|_e| Error::XmlWriteError)?; + } + } + Ok(Event::Eof) => break, + Ok(Event::End(e)) => { + let _p = xml_path.pop(); + writer + .write_event(Event::End(e)) + .map_err(|_e| Error::XmlWriteError)?; + } + Ok(e) => writer.write_event(&e).map_err(|_e| Error::XmlWriteError)?, + Err(_e) => return Err(Error::InvalidAsset("XML invalid".to_string())), + } + buf.clear(); + } + } + DetectedTagsDepth::Manifest => { + // replace manifest case + let encoded = base64::encode(store_bytes); + + loop { + match reader.read_event(&mut buf) { + Ok(Event::Start(e)) => { + let name = String::from_utf8_lossy(e.name()).into_owned(); + xml_path.push(name); + + // writes the event to the writer + writer + .write_event(Event::Start(e)) + .map_err(|_e| Error::XmlWriteError)?; + } + Ok(Event::Text(e)) => { + // add manifest data + if xml_path.len() == 3 + && xml_path[0] == SVG + && xml_path[1] == METADATA + && xml_path[2] == MANIFEST + { + writer + .write(encoded.as_bytes()) + .map_err(|_e| Error::XmlWriteError)?; + } else { + writer + .write_event(Event::Text(e)) + .map_err(|_e| Error::XmlWriteError)?; // pass Event through + } + } + Ok(Event::Eof) => break, + Ok(Event::End(e)) => { + let _p = xml_path.pop(); + writer + .write_event(Event::End(e)) + .map_err(|_e| Error::XmlWriteError)?; + } + Ok(e) => writer.write_event(&e).map_err(|_e| Error::XmlWriteError)?, + Err(_e) => return Err(Error::InvalidAsset("XML invalid".to_string())), + } + buf.clear(); + } + } + DetectedTagsDepth::Empty => { + //add metadata & manifest case + let manifest_data = create_manifest_tag(store_bytes, true)?; + + loop { + match reader.read_event(&mut buf) { + Ok(Event::Start(e)) => { + let name = String::from_utf8_lossy(e.name()).into_owned(); + xml_path.push(name); + + // writes the event to the writer + writer + .write_event(Event::Start(e)) + .map_err(|_e| Error::XmlWriteError)?; + + // add manifest data + if xml_path.len() == 1 && xml_path[0] == SVG { + writer + .write(&manifest_data) + .map_err(|_e| Error::XmlWriteError)?; + } + } + Ok(Event::Eof) => break, + Ok(Event::End(e)) => { + let _p = xml_path.pop(); + writer + .write_event(Event::End(e)) + .map_err(|_e| Error::XmlWriteError)?; + } + Ok(e) => writer.write_event(&e).map_err(|_e| Error::XmlWriteError)?, + Err(_e) => return Err(Error::InvalidAsset("XML invalid".to_string())), + } + buf.clear(); + } + } + } + + Ok(()) + } + + fn get_object_locations_from_stream( + &self, + input_stream: &mut dyn CAIRead, + ) -> Result<Vec<HashObjectPositions>> { + let output: Vec<u8> = Vec::new(); + let mut output_stream = Cursor::new(output); + + add_required_segs_to_stream(input_stream, &mut output_stream)?; + + let mut positions: Vec<HashObjectPositions> = Vec::new(); + + let (decoded_manifest_opt, _detected_tag_location, manifest_pos) = + detect_manifest_location(&mut output_stream)?; + + let decoded_manifest = decoded_manifest_opt.ok_or(Error::JumbfNotFound)?; + let encoded_manifest_len = base64::encode(decoded_manifest).len(); + + positions.push(HashObjectPositions { + offset: manifest_pos, + length: encoded_manifest_len, + htype: HashBlockObjectType::Cai, + }); + + // add hash of chunks before cai + positions.push(HashObjectPositions { + offset: 0, + length: manifest_pos, + htype: HashBlockObjectType::Other, + }); + + // add position from cai to end + let end = manifest_pos + encoded_manifest_len; + let length = usize::value_from(input_stream.seek(SeekFrom::End(0))?) + .map_err(|_err| Error::InvalidAsset("value out of range".to_string()))? + - end; + positions.push(HashObjectPositions { + offset: end, + length, + htype: HashBlockObjectType::Other, + }); + + Ok(positions) + } + + fn remove_cai_store_from_stream( + &self, + input_stream: &mut dyn CAIRead, + output_stream: &mut dyn CAIReadWrite, + ) -> Result<()> { + let buf_reader = BufReader::new(input_stream); + let mut reader = Reader::from_reader(buf_reader); + + output_stream.rewind()?; + let mut writer = Writer::new(output_stream); + + let mut buf = Vec::new(); + let mut xml_path: Vec<String> = Vec::new(); + + loop { + match reader.read_event(&mut buf) { + Ok(Event::Start(e)) => { + let name = String::from_utf8_lossy(e.name()).into_owned(); + xml_path.push(name); + + if xml_path.len() == 3 + && xml_path[0] == SVG + && xml_path[1] == METADATA + && xml_path[2] == MANIFEST + { + // skip the manifest + continue; + } else { + writer + .write_event(Event::Start(e)) + .map_err(|_e| Error::XmlWriteError)?; // pass Event through + } + } + Ok(Event::Text(e)) => { + if xml_path.len() == 3 + && xml_path[0] == SVG + && xml_path[1] == METADATA + && xml_path[2] == MANIFEST + { + // skip the manifest + continue; + } else { + writer + .write_event(Event::Text(e)) + .map_err(|_e| Error::XmlWriteError)?; // pass Event through + } + } + Ok(Event::Eof) => break, + Ok(Event::End(e)) => { + if xml_path.len() == 3 + && xml_path[0] == SVG + && xml_path[1] == METADATA + && xml_path[2] == MANIFEST + { + // skip the manifest + let _p = xml_path.pop(); + continue; + } else { + let _p = xml_path.pop(); + writer + .write_event(Event::End(e)) + .map_err(|_e| Error::XmlWriteError)?; // pass Event through + } + } + Ok(e) => writer.write_event(&e).map_err(|_e| Error::XmlWriteError)?, + Err(_e) => return Err(Error::InvalidAsset("XML invalid".to_string())), + } + buf.clear(); + } + + Ok(()) + } +} + +impl AssetPatch for SvgIO { + fn patch_cai_store(&self, asset_path: &std::path::Path, store_bytes: &[u8]) -> Result<()> { + let mut input_file = OpenOptions::new() + .write(true) + .read(true) + .create(false) + .open(asset_path)?; + + let (asset_manifest_opt, _detected_tag_location, insertion_point) = + detect_manifest_location(&mut input_file)?; + let encoded_store_bytes = base64::encode(store_bytes); + + if let Some(manifest_bytes) = asset_manifest_opt { + // base 64 encode + let encoded_manifest_bytes = base64::encode(manifest_bytes); + // can patch if encoded lengths are == + if encoded_store_bytes.len() == encoded_manifest_bytes.len() { + input_file.seek(SeekFrom::Start(insertion_point as u64))?; + input_file.write_all(encoded_store_bytes.as_bytes())?; + Ok(()) + } else { + Err(Error::InvalidAsset( + "patch_cai_store store size mismatch.".to_string(), + )) + } + } else { + Err(Error::InvalidAsset( + "patch_cai_store store size mismatch.".to_string(), + )) + } + } +} + +#[cfg(test)] +pub mod tests { + #![allow(clippy::expect_used)] + #![allow(clippy::panic)] + #![allow(clippy::unwrap_used)] + + use std::io::Read; + + use tempfile::tempdir; + + use super::*; + use crate::utils::{ + hash_utils::vec_compare, + test::{fixture_path, temp_dir_path}, + }; + + #[test] + fn test_write_svg_no_meta() { + let more_data = "some more test data".as_bytes(); + let source = fixture_path("sample1.svg"); + + let mut success = false; + if let Ok(temp_dir) = tempdir() { + let output = temp_dir_path(&temp_dir, "sample1.svg"); + + if let Ok(_size) = std::fs::copy(source, &output) { + let svg_io = SvgIO::new("svg"); + + if let Ok(()) = svg_io.save_cai_store(&output, more_data) { + if let Ok(read_test_data) = svg_io.read_cai_store(&output) { + assert!(vec_compare(more_data, &read_test_data)); + success = true; + } + } + } + } + assert!(success) + } + + #[test] + fn test_write_svg_with_meta() { + let more_data = "some more test data".as_bytes(); + let source = fixture_path("sample2.svg"); + + let mut success = false; + if let Ok(temp_dir) = tempdir() { + let output = temp_dir_path(&temp_dir, "sample2.svg"); + + if let Ok(_size) = std::fs::copy(source, &output) { + let svg_io = SvgIO::new("svg"); + + if let Ok(()) = svg_io.save_cai_store(&output, more_data) { + if let Ok(read_test_data) = svg_io.read_cai_store(&output) { + assert!(vec_compare(more_data, &read_test_data)); + success = true; + } + } + } + } + assert!(success) + } + + #[test] + fn test_write_svg_with_manifest() { + let more_data = "some more test data into existing manifest".as_bytes(); + let source = fixture_path("sample3.svg"); + + let mut success = false; + if let Ok(temp_dir) = tempdir() { + let output = temp_dir_path(&temp_dir, "sample3.svg"); + + if let Ok(_size) = std::fs::copy(source, &output) { + let svg_io = SvgIO::new("svg"); + + if let Ok(()) = svg_io.save_cai_store(&output, more_data) { + if let Ok(read_test_data) = svg_io.read_cai_store(&output) { + assert!(vec_compare(more_data, &read_test_data)); + success = true; + } + } + } + } + assert!(success) + } + + #[test] + fn test_patch_write_svg() { + let test_data = "some test data".as_bytes(); + let source = fixture_path("sample1.svg"); + + let mut success = false; + if let Ok(temp_dir) = tempdir() { + let output = temp_dir_path(&temp_dir, "sample1.svg"); + + if let Ok(_size) = std::fs::copy(source, &output) { + let svg_io = SvgIO::new("svg"); + + if let Ok(()) = svg_io.save_cai_store(&output, test_data) { + if let Ok(source_data) = svg_io.read_cai_store(&output) { + // create replacement data of same size + let mut new_data = vec![0u8; source_data.len()]; + new_data[..test_data.len()].copy_from_slice(test_data); + svg_io.patch_cai_store(&output, &new_data).unwrap(); + + let replaced = svg_io.read_cai_store(&output).unwrap(); + + assert_eq!(new_data, replaced); + + success = true; + } + } + } + } + assert!(success) + } + + #[test] + fn test_remove_c2pa() { + let source = fixture_path("sample4.svg"); + + let temp_dir = tempdir().unwrap(); + let output = temp_dir_path(&temp_dir, "sample4.svg"); + + std::fs::copy(source, &output).unwrap(); + let svg_io = SvgIO::new("svg"); + + svg_io.remove_cai_store(&output).unwrap(); + + // read back in asset, JumbfNotFound is expected since it was removed + match svg_io.read_cai_store(&output) { + Err(Error::JumbfNotFound) => (), + _ => unreachable!(), + } + } + + #[test] + fn test_get_object_location() { + let more_data = "some more test data into existing manifest".as_bytes(); + let source = fixture_path("sample1.svg"); + + let mut success = false; + if let Ok(temp_dir) = tempdir() { + let output = temp_dir_path(&temp_dir, "sample1.svg"); + + if let Ok(_size) = std::fs::copy(source, &output) { + let svg_io = SvgIO::new("svg"); + + if let Ok(()) = svg_io.save_cai_store(&output, more_data) { + if let Ok(locations) = svg_io.get_object_locations(&output) { + for op in locations { + if op.htype == HashBlockObjectType::Cai { + let mut of = File::open(&output).unwrap(); + + let mut manifests_buf: Vec<u8> = vec![0u8; op.length]; + of.seek(SeekFrom::Start(op.offset as u64)).unwrap(); + of.read_exact(manifests_buf.as_mut_slice()).unwrap(); + + let decoded_data = base64::decode(&manifests_buf).unwrap(); + if vec_compare(more_data, &decoded_data) { + success = true; + } + } + } + } + } + } + } + assert!(success) + } +} diff --git a/sdk/src/error.rs b/sdk/src/error.rs @@ -235,6 +235,9 @@ pub enum Error { #[error("could not parse ECDSA signature")] InvalidEcdsaSignature, + #[error("could not generate XML")] + XmlWriteError, + // --- third-party errors --- #[error(transparent)] IoError(#[from] std::io::Error), diff --git a/sdk/src/jumbf_io.rs b/sdk/src/jumbf_io.rs @@ -23,7 +23,7 @@ use lazy_static::lazy_static; use crate::{ asset_handlers::{ bmff_io::BmffIO, c2pa_io::C2paIO, jpeg_io::JpegIO, png_io::PngIO, riff_io::RiffIO, - tiff_io::TiffIO, + svg_io::SvgIO, tiff_io::TiffIO, }, asset_io::{AssetIO, CAIRead, CAIReadWrite, CAIReader, CAIWriter, HashObjectPositions}, error::{Error, Result}, @@ -33,11 +33,12 @@ use crate::{ lazy_static! { static ref ASSET_HANDLERS: HashMap<String, Box<dyn AssetIO>> = { let handlers: Vec<Box<dyn AssetIO>> = vec![ - Box::new(C2paIO::new("")), Box::new(BmffIO::new("")), + Box::new(C2paIO::new("")), Box::new(JpegIO::new("")), Box::new(PngIO::new("")), Box::new(RiffIO::new("")), + Box::new(SvgIO::new("")), Box::new(TiffIO::new("")), ]; let mut handler_map = HashMap::new(); @@ -58,11 +59,12 @@ lazy_static! { lazy_static! { static ref CAI_WRITERS: HashMap<String, Box<dyn CAIWriter>> = { let handlers: Vec<Box<dyn AssetIO>> = vec![ - Box::new(C2paIO::new("")), Box::new(BmffIO::new("")), + Box::new(C2paIO::new("")), Box::new(JpegIO::new("")), Box::new(PngIO::new("")), Box::new(RiffIO::new("")), + Box::new(SvgIO::new("")), Box::new(TiffIO::new("")), ]; let mut handler_map = HashMap::new(); @@ -304,6 +306,7 @@ pub mod tests { Box::new(PngIO::new("")), Box::new(RiffIO::new("")), Box::new(TiffIO::new("")), + Box::new(SvgIO::new("")), ]; // build handler map @@ -324,6 +327,7 @@ pub mod tests { Box::new(PngIO::new("")), Box::new(RiffIO::new("")), Box::new(TiffIO::new("")), + Box::new(SvgIO::new("")), ]; // build handler map @@ -384,5 +388,6 @@ pub mod tests { assert!(supported.iter().any(|s| s == "tif")); assert!(supported.iter().any(|s| s == "tiff")); assert!(supported.iter().any(|s| s == "dng")); + assert!(supported.iter().any(|s| s == "svg")); } } diff --git a/sdk/src/utils/xmp_inmemory_utils.rs b/sdk/src/utils/xmp_inmemory_utils.rs @@ -13,11 +13,11 @@ use std::io::Cursor; -use log::error; -use quick_xml::{ +use fast_xml::{ events::{BytesEnd, BytesStart, Event}, Reader, Writer, }; +use log::error; use crate::{ asset_io::CAIRead, jumbf_io::get_cailoader_handler, utils::hash_utils::vec_compare, Error, diff --git a/sdk/tests/fixtures/sample1.svg b/sdk/tests/fixtures/sample1.svg @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'> +<svg enable-background="new 0 0 2014 1674.641" version="1.1" viewBox="0 0 2014 1674.641" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"> + <path d="m44.883 1173.3c0 169.58 92.136 317.37 229.08 396.59v-793.53c-136.94 79.216-229.08 227.37-229.08 396.94z"/> + <path d="m1496.5 173.21c-338.54-181.18-640.46-181.19-978.98 0-115.34 61.726-232.1 201.31-232.1 348.66v1048h125.99v-1048c0-100.78 121.24-229.18 225.54-272.38 280.15-116.04 460-116.04 740.11 0 104.3 43.203 225.54 171.6 225.54 272.38v1048h125.99v-1048c0-147.36-116.76-286.94-232.1-348.66z"/> + <path d="m1740 776.38v793.53c136.94-79.214 229.08-227 229.08-396.59 1e-3 -169.57-92.133-317.73-229.08-396.94z"/> + <path d="m541.72 709.03h-70.645c-27.201 0-49.252 22.051-49.252 49.253v829.79c0 27.201 22.05 49.252 49.252 49.252h70.645c27.201 0 49.252-22.051 49.252-49.252v-829.79c0-27.202-22.05-49.253-49.252-49.253z"/> + <path d="m1542 709.03h-70.646c-27.2 0-49.252 22.051-49.252 49.253v829.79c0 27.201 22.052 49.252 49.252 49.252h70.646c27.2 0 49.252-22.051 49.252-49.252v-829.79c-1e-3 -27.202-22.052-49.253-49.252-49.253z"/> + <path d="m595.97 1132.8c4.322-0.219 8.643-0.184 12.965 0 0.197 4.557 3.624 24.404 4.471 95.602 0 1.438 0.298 2.849 0.728 4.225 0.691 13.2-0.668 21.337 0.868 26.298 0.386 12.904 0.053 25.834 0.158 38.746h10.467c10.735-37.493 8.785-86.788 9.941-115.01 1.07-3.103 0.614-6.426 0.868-9.634 0.615-2.041 1.597-9.992 1.753-11.519 0.368 0.377 1.113 1.131 1.481 1.508 0.079 4.827 0.295 5.098 2.007 12.833 0.342 0 1.034-9e-3 1.376-9e-3 0.421-1.771 0.877-3.515 1.315-5.277l0.657-9e-3c0.202 4.611-0.719 9.38 0.684 13.859 0.491 4.374-0.508 8.889 0.85 13.149 0.114 1.683 0.175 3.357 0.263 5.049 0.552-0.92 1.122-1.85 1.692-2.77 0.052-13.129 0.408 0.674 0.894-17.479 0.307 0.552 0.92 1.657 1.227 2.209 0.316 0.018 0.938 0.044 1.245 0.061 2.638-11.892 2.56-18.294 3.647-51.86 8.152-0.21 16.314-0.263 24.466 0.044 0.018 2.314-0.018 4.681 0.78 6.89 0.677 13.255 1.433 10.704 2.016 18.926 1.554 2.913 2.279 3.212 5.295 20.714 0.394 0 1.183 0 1.578 9e-3 0.454-9.931 0.998-1.96 0.964-13.184l0.868 9e-3c0.096 3.734-0.561 7.609 0.684 11.229 0.298 3.498-0.307 7.127 0.868 10.519 0.307 3.498-0.307 7.135 0.877 10.519 0.307 3.498-0.307 7.127 0.877 10.519 0.368 3.787-0.394 7.714 0.868 11.387 0.438 4.085-0.465 8.319 0.877 12.281 0.298 3.498-0.298 7.127 0.868 10.519 0.949 15.108 1.515 17.226 2.858 21.626 0.421-0.412 1.262-1.227 1.692-1.639-0.187-3.823 0.79-9.648 3.98-14.937 0.701 1.157 1.411 2.332 2.13 3.498 0.018 0.412 0.053 1.236 0.07 1.648 0.894 1.657 1.815 3.357 3.261 4.629 0.52-4.824 0.271-3.677 1.525-8.757 0.155-0.87 1.114-8.042 1.552-15.709 1.21-3.691 0.491-7.609 0.85-11.405 1.341-3.962 0.43-8.196 0.877-12.272 0 0 6.76-64.946 7.004-68.375 1.008-2.77 0.728-5.742 0.728-8.617 1.727 0 3.471 0 5.225-9e-3 0 3.173-0.377 6.443 0.701 9.494 0.152 3.522 0.148 41.365 1.753 46.478 0.447 4.076-0.473 8.31 0.877 12.272 0.289 3.498-0.281 7.118 0.85 10.51 0.612 11.986 0.925 9.898 2.016 17.383 0.43 0.403 1.289 1.21 1.718 1.613 0.386-0.395 1.157-1.175 1.543-1.569 1.113-3.427 2.27-6.908 2.06-10.572 0.351 0.377 1.043 1.122 1.394 1.49 0.307 0.982 0.631 1.972 0.982 2.954 9e-3 0.824 0.035 1.648 0.07 2.472 0.736 0.912 1.499 1.841 2.279 2.744 1.695-6.242 1.537-5.465 2.367-9.923 0.394-0.377 1.175-1.122 1.569-1.499-0.026 1.455-0.035 2.928-0.044 4.392 0.43 0.386 1.28 1.148 1.709 1.534 2.593-15.316 1.515-32.185 4.646-59.933h0.517c0.257 2.44 0.455 5.251 2.656 12.053 0.04 1.752 2.071 29.42 6.46 44.391 0.377-0.386 1.131-1.166 1.508-1.56 2.511-20.088 0.17 17.604 5.33-78.561l0.622 9e-3c0.403 1.569 0.842 3.13 1.28 4.699 0.395-0.377 1.175-1.148 1.569-1.534 0.153-5.981 0.067-4.293 1.201-9.362 6.539-0.281 13.079-0.289 19.627-0.018 1.093 6.281 3.062 17.853 3.831 24.948 0.403-0.377 1.219-1.14 1.631-1.525 0.133-3.59 1.852-14.417 2.919-17.453 0.377 0.377 1.14 1.122 1.516 1.499-0.034 12.962 0.097 3.675 0.947 13.657 0.421 9e-3 1.253 9e-3 1.674 9e-3 0-1.762 9e-3 -3.524 0.026-5.277h1.718c0.237 4.602-0.701 9.371 0.71 13.85 0.386 3.787-0.412 7.732 0.877 11.405 0.298 3.498-0.298 7.127 0.859 10.519 0.455 8.447 1.972 19.645 2.595 21.906-0.347 7.057 9.094 35.294 9.888 54.043 0.429-0.395 1.28-1.192 1.709-1.587 0.061-1.42 0.14-2.84 0.263-4.252 0.885-2.831 0.675-5.829 0.85-8.748 1.131-3.401 0.561-7.022 0.859-10.519 1.166-3.393 0.561-7.022 0.876-10.519 1.157-3.392 0.57-7.022 0.877-10.528 0.697-2.038 1.719-16.578 1.78-17.532 0.086-0.331 0.978-5.454 1.788-8.924 2.042-3.033 3.515-6.399 5.26-9.599 0.324 0.368 0.964 1.122 1.289 1.499 2.896 10.614 5.277 40.7 5.277 40.701 1.101 16.794 2.417 23.952 2.866 28.779 0.412 0.394 1.245 1.175 1.657 1.569 0.071-0.869 8.706-77.968 8.959-86.556 0.561-1.779 1.105-3.559 1.727-5.312 0.412 0.394 1.227 1.183 1.639 1.578 9e-3 0.57 0.017 1.701 0.017 2.27 0.403 0 1.219-9e-3 1.622-9e-3 1.24-7.203 1.236-3.14 2.121-13.342 1.017-3.41 0.5-7.013 0.798-10.51 0.666-1.929 0.745-3.971 0.85-5.987 1.981-0.017 3.98-0.017 5.987-0.061 0.738 15.014 3.226 81.388 5.452 98.881 2.794-5.344 3.327-18.194 3.313-23.046 0.526 0.92 1.061 1.841 1.604 2.779 1.005 8.595 1.291 4.766 1.955 12.124 0.412-0.386 1.236-1.166 1.657-1.56 0.07-1.131 0.167-2.253 0.29-3.375 3.077-10.573 4.023-80.044 5.303-85.767 11.203-0.333 22.415-0.307 33.618-0.026 2.519 9.333-0.185 1.64 3.165 10.651 1.008-0.035 2.025-0.07 3.059-0.105 3.706 11.86 4.661 36.592 6.136 41.086 0.237 3.743-0.228 7.618 1.324 11.159 1.832-0.973 3.532-4.164 5.768-2.27 0.311 1.769 1.139 5.743 1.674 7.74 0.096 1.99 0.052 4.006 0.342 5.987 0.955 1.779 3.182 1.078 4.839 1.35 2.515 9.18 4.175 17.629 4.865 22.318 3.942-2.424 4.424-5.052 6.049-11.527 1.105-1.981 2.621-3.682 4.252-5.251-9e-3 -1.131-9e-3 -2.262 9e-3 -3.384 0.386 0.377 1.149 1.131 1.534 1.508 0.333 1.797 0.754 3.577 1.21 5.365 0.359-0.386 1.087-1.166 1.446-1.552 0.649-2.376 1.403-4.716 2.183-7.048 0.316 0.377 0.947 1.148 1.262 1.525 1.645 7.111 0.322 3.568 2.06 21.065 0.429-0.395 1.271-1.175 1.692-1.56 0.026-1.999 0.07-3.997 0.21-5.987 1.481-4.83 0.263-9.949 0.868-14.902 1.639-6.285 0.123-12.877 0.877-19.285 1.683-7.451 0.07-15.218 0.877-22.792 1.674-7.451 0.07-15.227 0.868-22.8 1.219-3.62 0.596-7.495 0.684-11.229h4.979c2.486 11.696-0.075 13.584 1.867 20.004 0.438 4.076-0.456 8.31 0.859 12.281 0.71 13.915 2.152 15.948 2.875 21.74 0.403 0.395 1.201 1.192 1.604 1.587 2.183-6.047-0.403-11.103 3.024-22.283 0.316 0 0.964-9e-3 1.289-9e-3 0.07 1.339 1.748 15.516 3.112 20.688 3.189-6.785 3.21-47.072 3.2-54.051 9.432-0.307 18.882-0.272 28.323 0.026 0.079 1.105 0.202 2.297 0.833 3.27 1.219-0.359 1.613-2.13 1.201-3.226 0.684 0 2.042 0.017 2.726 0.017 0.193 1.701 0.421 3.401 0.912 5.049 0.745 6.11-0.754 12.422 0.877 18.417 0.622 4.944-0.64 10.081 0.885 14.902 0.438 4.076-0.464 8.31 0.859 12.272 0.587 5.786-0.649 11.747 1.157 17.392 0.342 0.359 1.017 1.087 1.35 1.455 0.973-1.806 2.025-3.576 3.296-5.207 2.899 9.94 3.548 20.233 4.146 30.129 2.753-4.301 1.495-7.983 6.198-43.26 1.07-1.122 2.156-2.227 3.261-3.331 1.546-13.203 1.281-18.245 4.804-28.139 0.719 1.183 1.42 2.384 2.139 3.594 6.049 34.545 2.934 63.483 10.432 89.607-0.114 5.067 1.359 9.993 1.052 15.06-0.079 2.016 0.035 4.059 0.719 5.978 0.359 6.487 0.088 12.991 0.131 19.496-0.026 3.813 1.113 7.53 1.017 11.361h1.639c0.973-2.533 1.026-5.233 0.991-7.898-0.096-2.682 0.728-5.26 0.842-7.907 0.149-3.305-0.272-6.627 0.342-9.897 1.052-4.874 0.254-9.879 0.719-14.806 1.306-3.962 0.421-8.188 0.859-12.264 1.069-3.103 0.631-6.426 0.885-9.634 0.71-2.034 0.736-4.199 0.763-6.329 0.535-0.92 1.087-1.841 1.657-2.753 9e-3 0.693 9e-3 2.078 9e-3 2.77 0.421 0.394 1.254 1.192 1.674 1.595 1.881-6.653 1.973-16.337 2.025-17.208 1.324-3.962 0.421-8.188 0.868-12.273 1.508-4.821 0.263-9.949 0.885-14.902 1.534-5.119 0.21-10.537 0.868-15.779 1.438-4.777 0.43-9.836 0.684-14.736l0.579 9e-3c4.58 20.94-1.764 21.194 8.003 57.654 0.035 3.743 0.315 7.477 1.14 11.133 0.771 1.227 1.56 2.446 2.375 3.664 2.187-18.959 0.397-16.093 1.254-24.413 1.525-5.119 0.228-10.537 0.876-15.779 1.525-5.119 0.219-10.537 0.876-15.779 1.482-5.155 0.351-10.607 0.728-15.884 3.781-1.853 5.985-19.261 6.241-23.449 11.896-0.298 23.809-0.289 35.704 0 0.018 2.314-0.044 4.69 0.789 6.899 1.385 15.795 1.043 17.456 1.034 20.679 0.438-0.386 1.297-1.14 1.727-1.525 0.313-2.188-1e-3 -0.959 1.21-4.953h1.157c7.495 34.264 1.885 96.567 10.537 107.57 4.66-9.896 5.508-48.83 5.75-50.764 0.339-1.036 7.792-66.458 7.846-67.323h0.719c0.315 5.479-0.815 11.133 0.701 16.48 0.219 3.217-0.175 6.522 0.833 9.634 0.096 1.35 0.175 2.709 0.263 4.076 1.113 1.78 2.262 3.55 3.349 5.356 0.07 1.85 0.202 3.717 0.806 5.487 0.237 3.208-0.21 6.539 0.877 9.643 0.438 4.076-0.456 8.301 0.868 12.264 0.64 5.233-0.666 10.659 0.868 15.779 0.666 5.531-0.693 11.238 0.877 16.656 0.617 10.342-0.612 22.781 0.868 27.175 0.123 1.99 0.167 3.989 0.21 5.987 0.429 0.394 1.28 1.183 1.7 1.578 3.526-23.595 3.006-33.165 5.417-44.234l0.526 0.026c2.215 9.395 0.757 4.828 3.042 12.623 0.377-0.377 1.14-1.14 1.517-1.516 2.464-9.857 5.395-72.486 5.408-73.354l0.71 9e-3c0.044 0.447 0.131 1.341 0.167 1.779 0.605-0.018 1.814-0.07 2.411-0.088 2.367 8.449 6.032 43.591 6.075 43.725 0.517 4.348-1.026 10.134 3.296 12.982 12.367-46.276 9.589-65.188 12.904-92.683 11.51-0.228 23.028-0.228 34.547-0.018 0.316 1.131 0.649 2.253 1.008 3.375 0 1e-3 5.242 57.934 5.242 57.935 2.528 35.686-1.458 8.139 4.62 49.809 0.412 0.395 1.227 1.175 1.639 1.56 0.117-0.869 4.225-26.319 4.576-34.135 3.883 7.547 1.348 7.067 5.198 13.465 0.955-0.395 1.964-0.64 3.016-0.745 0.631 0.833 1.245 1.701 1.832 2.604 0.465 0.044 1.394 0.131 1.859 0.175 0.631-1.087 1.262-2.165 1.92-3.243 1.331-5.87 3.349-16.952 3.752-22.327l0.71 0.018c0.324 6.355-0.877 12.877 0.666 19.11 0.64 5.242-0.666 10.659 0.885 15.788 0.281 3.498-0.272 7.109 0.842 10.511 0.105 1.525 0.175 3.059 0.263 4.593h1.683c0.03-0.868 2.321-25.659 4.655-35.354 0.359 0.368 1.069 1.113 1.42 1.481 0.018 2.183 0.026 4.409 0.763 6.496 0.184 2.928-0.088 5.943 0.894 8.766 0.257 4.097-0.504 3.463 2.165 21.81 1.771-3.524 1.604-7.469 1.744-11.299 1.411-4.55 0.307-9.362 0.868-14.026 1.604-5.996 0.149-12.299 0.877-18.409 1.63-6.285 0.114-12.877 0.868-19.285 1.587-5.698 0.158-11.711 0.868-17.532 1.56-6.399 0.324-13.114 0.693-19.645 0.429-0.377 1.28-1.14 1.709-1.525-0.026 2.393-0.105 4.856 0.728 7.153 0.193 2.919-0.096 5.943 0.885 8.757 0.456 4.076-0.473 8.319 0.877 12.281 0.447 4.076-0.473 8.31 0.877 12.264 0.368 3.796-0.386 7.723 0.868 11.405 1.036 17.235 1.642 16.652 2.972 21.792 0.43 0.438 1.297 1.306 1.727 1.736 0.815-1.21 1.63-2.419 2.446-3.638 2.923-13.017 5.323-15.63 6.426-33.039 1.186-4.545 6.856-57.745 6.873-58.619 13.114-0.333 26.237-0.298 39.351 0-0.07 25.539-0.242 25.33 0.701 27.92 0.701 5.83-0.737 11.843 0.868 17.541 0.622 4.944-0.64 10.072 0.885 14.902 0.491 4.374-0.517 8.898 0.859 13.158 0.545 12.053 0.783 6.687 1.964 16.629 1.858 1.052 3.901 1.981 5.076 3.892 10.959-1.859 6.983-29.405 13.724-64.092v-42.917c-0.174-0.927-0.341-1.93-0.488-3.102-0.544-0.947-1.069-1.885-1.578-2.823-3.578-19.889-0.465-3.857-2.901-38.229-0.302-0.87-2.483-19.751-2.542-20.46-0.701-0.894-1.359-1.788-2.051-2.665-2.62 8.857-4.816 32.1-4.97 37.869-0.885-1.192-1.736-2.411-2.56-3.62v-1.63c-0.991-1.744-1.946-3.489-2.928-5.216-0.438 0.517-1.306 1.543-1.745 2.06-0.955 0-1.885-9e-3 -2.796-9e-3 -0.71-0.71-1.394-1.42-2.069-2.13-0.827-5.187-0.922-3.934-1.999-19.093-1.271-3.673-0.465-7.609-0.877-11.405-1.201-3.384-0.535-7.013-0.877-10.51-0.824-2.7-0.728-5.54-1.166-8.293-0.21-0.359-0.622-1.078-0.833-1.438-0.622-3.147-0.456-6.373-0.631-9.555-1.056-2.973-1.705-15.787-1.762-16.656-1.704-4.872-1.165-33.567-5.321-44.54l-0.377 9e-3c-0.237 0.579-0.701 1.736-0.938 2.323-0.401 3.921-11.044 109.35-11.711 112.52l-0.71 9e-3c-0.251-7.498 9e-3 -3.82-1.201-9.651h-1.236c-1.98 7.546-1.844 6.61-2.121 9.073-0.254 0.622-0.771 1.867-1.026 2.481-1.078-0.421-2.121-0.85-3.156-1.271-3.451 12.972-2.154 26.149-5.549 58.154-5.163 0.21-10.326 0.272-15.472 9e-3 -2.367-4.585 0.263-10.046-1.674-14.788-5.048-49.685-2.675-22.48-9.038-64.474-0.368 0.368-1.096 1.104-1.464 1.473-3.2 24.397-3.796 53.375-3.866 54.244-0.902 2.444-0.812 2.981-0.71 23.546-4.628 0.21-9.257 0.202-13.877 9e-3 -0.062-1.098-0.753-10.145-3.41-19.96-1.609-6.088-2.241-34.338-5.531-45.399-0.386 0.403-1.157 1.218-1.543 1.622 0 2e-3 -2.428 17.821-2.428 17.821-1.87 7.96-2.043 7.751-2.209 12.123-0.894 1.359-1.823 2.682-2.779 3.989-1.026-0.78-2.016-1.552-3.024-2.297-4.94 16.27-1.404 25.036-3.831 32.049-1.745 9e-3 -3.48 0.018-5.198 0.07-0.149-4.059 0.605-8.249-0.693-12.176-0.596-4.664 0.579-9.494-0.877-14.026-0.543-4.365 0.509-8.897-0.868-13.149-0.245-2.98-0.219-5.97-0.184-8.959h-0.798c-0.097 1.525-0.175 3.051-0.281 4.585-1.043 3.042-0.675 6.285-0.666 9.441h-0.885c-0.454-35.146-2.288-72.71-9.792-140.65-0.693-1.175-1.359-2.332-2.043-3.489-1.043 1.411-2.042 2.84-2.954 4.33-0.744 4.308-0.526 3.106-1.56 7.153-3.447 12.335-8.898 66.727-8.898 66.727-0.359 3.498 0.307 7.135-0.877 10.519-2.297 22.912 0.443 23.804-2.604 35.932-0.184 2.639-0.044 5.347-0.894 7.89-0.228 3.051-0.158 6.101-0.368 9.152-1.499 4.83-0.237 9.949-0.877 14.902-1.569 5.409-0.167 11.124-0.877 16.647-0.517 1.683-0.728 3.427-0.912 5.172-6.645 0.202-13.289 0.254-19.925-0.044 0.064-10.529-0.526-4.443-0.973-12.334l-0.701 9e-3c-0.965 7.442-1.078 2.9-0.973 12.272-1.183-9e-3 -2.349-9e-3 -3.506 0 0.078-9.359-1.521-16.3-2.042-19.811-3.15 1.808-4.963 16.633-5.119 19.899-5.987 0.254-11.974 0.228-17.953-0.035-2.68-8.301 0.155-12.807-1.885-20.022-0.649-4.944 0.631-10.072-0.877-14.902-0.28-3.629-0.088-7.276-0.35-10.905-0.735-2.102-1.517-17.095-2.06-19.715-1.139-4.529-1.144-4.594-1.289-6.811-0.833-1.219-1.674-2.428-2.533-3.62-0.026-0.394-0.088-1.192-0.114-1.587-1.131-2.095-2.358-4.129-3.813-6.005-0.894 0.955-1.762 1.911-2.63 2.875-0.491 0-1.473-9e-3 -1.964-9e-3 -0.281 0.579-0.833 1.744-1.113 2.323-0.044 2.393 0.018 4.839-0.78 7.127-0.517 8.012 0.14 16.051-0.359 24.054-1.709 4.69 0.307 9.827-1.403 14.517-0.175 2.288-0.202 4.585-0.193 6.881-0.43 0.377-1.297 1.131-1.727 1.516 9e-3 -2.682 0.245-5.453-0.71-8.012-0.596-4.655 0.57-9.485-0.877-14.026-0.438-5.382 0.079-10.782-0.359-16.165-1.587-5.698-0.149-11.712-0.876-17.532-1.394-4.251-0.333-8.784-0.868-13.149-0.903-2.358-0.754-4.909-0.728-7.381-0.429-0.368-1.297-1.122-1.727-1.49-0.272 4.699 0.71 9.564-0.701 14.131-0.421 3.787 0.385 7.723-0.877 11.396-0.552 4.366 0.526 8.898-0.877 13.149-0.368 4.506 0.018 9.029-0.35 13.535-1.438 4.769-0.421 9.818-0.701 14.709h-0.868c-9e-3 -2.867 0.289-5.829-0.71-8.573-0.245-3.34-0.123-6.688-0.351-10.028-1.349-3.85-2.513-33.865-5.347-39.938-4.096 0.324-4.685-1.352-7.083-16.191-0.859-3.445-0.482-7.022-0.675-10.528-5.99-19.969-5.779-31.074-8.74-43.006-0.412 0.377-1.236 1.14-1.648 1.516-4.042 68.84-13.256 161-13.438 161.87-6.241 0.263-12.483 0.281-18.724-0.018-2.084-7.236 0.044-0.063-2.472-11.072-1.704 1.184-2.333 2.852-3.27 11.072-6.54 0.281-13.088 0.272-19.627 0.035-0.289-0.605-0.859-1.815-1.148-2.419-0.438-5.567 0.754-11.308-0.745-16.752-0.657-4.953 0.623-10.081-0.885-14.902-0.316-3.918-0.044-7.863-0.351-11.781-1.175-3.384-0.543-7.013-0.868-10.519-1.201-3.375-0.543-7.013-0.877-10.519-1.105-3.094-0.622-6.426-0.885-9.634-0.991-2.823-0.675-5.838-0.885-8.766-0.64-1.823-0.737-3.752-0.807-5.654-0.412-0.377-1.236-1.122-1.648-1.49-0.023 1.517 0.6 9.192-2.016 20.118-2.092-3.749-2.373-11.288-2.568-14.727-0.728-2.095-0.719-4.33-0.728-6.513-0.412-0.377-1.236-1.122-1.648-1.49-0.017 2.384 0.105 4.839-0.745 7.118-1.625 13.049-1.923 57.246-2.113 60.871-1.254 3.524 9e-3 7.513-2.086 10.808-3.055-13.191-3.982-41.883-4.041-42.752-0.195-0.562-2.542-23.345-2.577-24.352h-0.684c-0.074 0.87-1.059 13.181-1.639 14.709-0.324 3.927-0.052 7.863-0.359 11.79-1.806 5.26 0.403 10.993-1.403 16.261-0.333 4.444-0.14 8.906-0.175 13.359l-0.85-0.026c-9e-3 -2.402-0.035-4.804-0.21-7.197-1.955-6.715 0.561-13.929-1.394-20.644-0.421-5.093 0.061-10.212-0.359-15.297-1.534-5.119-0.202-10.546-0.877-15.779-1.341-3.962-0.386-8.196-0.868-12.272-1.473-4.856-0.368-10.02-0.745-15.007-0.281-0.587-0.85-1.753-1.131-2.332l-0.342-0.026c-2.383 6.384-1.846 9.872-4.725 15.043-1.087-0.053-2.156-0.097-3.217-0.14-0.297 2.566-0.568 6.574-3.226 12.614-1.078-0.456-2.139-0.912-3.173-1.385-0.903 1.043-1.753 2.121-2.568 3.226-1.541 14.346-1.612 25.276-6.522 59.863-0.64 1.394-1.613 2.568-2.902 3.384-0.643-9.977-2.268-14.232-2.901-20.381-0.395-0.368-1.192-1.113-1.587-1.482-3.995 25.967-3.614 31.519-5.628 38.86l-0.526 9e-3c-5.004-29.024-4.245-32.066-6.592-40.692-1.964 0.307-3.165 1.56-3.463 3.506-1.455 1.648-2.858 3.34-4.068 5.172-0.113 0.869-5.441 26.261-5.242 38.194-7.206 0.316-14.42 0.281-21.626 0-1.59-6.96-1.588-22.528-4.032-40.043-2.449 4.247-1.567 9.163-3.401 17.199h-0.622c-0.096-1.999-0.167-4.024-0.798-5.943-0.193-2.463-0.228-4.935-0.403-7.398-0.214-0.596-2.541-21.185-2.551-21.389-0.342-0.368-1.034-1.096-1.376-1.464-2.624 7.092-1.98 15.125-3.936 40.762-0.943 2.679-1.212 14.307-2.463 18.251l-0.579-9e-3c-0.263-0.587-0.797-1.762-1.069-2.349-0.044-2.393 0.018-4.839-0.798-7.127-0.482-4.076 0.456-8.31-0.877-12.264-0.543-4.374 0.526-8.906-0.876-13.149-0.272-3.629-0.088-7.276-0.351-10.905-2.209-6.347 1.236-13.623-2.226-19.618-1.659 10.114-0.922 6.007-1.289 12.115-1.324 3.962-0.395 8.196-0.868 12.272-1.648 4.401 0.228 9.24-1.394 13.64-0.263 3.27-0.202 6.557-0.184 9.835l-0.859 9e-3c0-2.7 9e-3 -5.409-0.202-8.091 0 0-1.894-14.814-3.559-26.64-1.025 2.161-2.494 6.353-3.419 11.457-0.71 1.201-1.42 2.411-2.148 3.603-3.406-7.194-4.001-15.55-4.295-17.699-5.625-12.505-4.562-25.342-7.67-33.671h-0.403c-3.503 9.782 0.435 1.884-6.005 38.317-0.184 0.359-0.552 1.087-0.728 1.446-0.324 1.727-0.57 3.463-0.841 5.198-0.947 3.717-0.395 7.583-0.719 11.361-1.289 3.664-0.473 7.6-0.885 11.396-0.594 1.9-1.634 10.122-1.718 10.993-1.122 0.745-2.244 1.473-3.349 2.218-0.386 5.626 0.13 1.269-1.175 7.714-3.953 0.175-7.907 0.175-11.852 0.044-0.105-2.051-0.158-4.129-0.842-6.075-0.412-3.796 0.395-7.732-0.885-11.396-0.333-3.498 0.307-7.127-0.859-10.51-0.491-6.548 0.123-13.123-0.368-19.671 0 0-5.516-54.514-8.845-67.306h-1.473c0.015 4.792-0.944 14.581-1.595 16.463-0.351 3.498 0.307 7.136-0.877 10.519-0.491 4.076 0.465 8.31-0.877 12.272-0.491 4.076 0.456 8.31-0.877 12.272-0.28 3.629-0.079 7.276-0.35 10.905-1.262 3.673-0.465 7.609-0.868 11.396-1.289 3.664-0.473 7.6-0.877 11.396-1.289 3.664-0.482 7.6-0.877 11.387-1.429 4.243-0.351 8.784-0.894 13.149-0.517 1.683-0.728 3.427-0.912 5.163-3.629 0.123-7.249 0.123-10.861 9e-3 -0.359-1.131-0.719-2.253-1.078-3.357-0.554-15.475 0.663-21.354-0.815-25.474-0.498-7.528-0.096-59.18-5.654-78.719-6.429-1.051-3.223-11.691-7.057-21.424l-0.438 0.018c-4.443 43.319-2.365 60.076-3.857 78.211-1.63 4.401 0.21 9.231-1.385 13.64-0.184 2.463-0.219 4.935-0.395 7.399-0.666 2.007-0.736 4.138-0.824 6.241-0.245 0.64-0.745 1.928-0.99 2.568-0.351-0.359-1.061-1.096-1.411-1.455-0.134-6.652-0.225-0.761-1.166-13-1.403-3.839 0.079-8.056-1.359-11.887-0.342-4.436-0.149-8.897-0.184-13.342h-1.622c-0.042 0.869-1.142 13.049-1.709 14.709-0.246 3.34-0.114 6.688-0.351 10.028-1.402 4.243-0.342 8.775-0.877 13.14-1.473 4.541-0.281 9.371-0.885 14.026-0.999 2.761-0.728 5.724-0.71 8.599-0.438-9e-3 -1.297-9e-3 -1.736-0.018-0.091-1.768-2.814-61.555-2.814-61.555-0.038-0.109-5.456-50.812-6.908-56.26-0.359 0.386-1.078 1.148-1.446 1.534-1.054 4.726-0.995 2.579-1.157 9.371-0.298-0.026-0.885-0.07-1.183-0.096-0.938-1.324-1.928-2.612-2.919-3.892-2.823 14.314-4.439 36.549-5.97 44.873-0.184 0.359-0.552 1.078-0.736 1.438-0.281 1.359-0.526 2.735-0.754 4.103h-0.657c0.028-7.733-1.59-17.163-2.849-24.896-0.517 0.877-1.026 1.762-1.516 2.647-0.018 2.972 0.315 6.049-0.71 8.906-0.605 4.655 0.561 9.485-0.876 14.026-0.754 6.11 0.71 12.404-0.868 18.409-0.131 1.63-0.202 3.279-0.254 4.918-0.544 0.938-1.087 1.876-1.613 2.814-0.987 9.186-0.327-1.6-1.14 11.931-1.245 3.673-0.473 7.6-0.859 11.396-1.201 3.34-0.657 6.934-0.701 10.397-6.732 0.254-13.456 0.298-20.179 9e-3 -0.044-3.471 0.473-7.057-0.684-10.405-0.649-4.944 0.622-10.072-0.885-14.894-0.307-3.927-0.052-7.863-0.351-11.782-1.613-5.996-0.149-12.316-0.868-18.435-1.339-5.048-0.518-5.014-3.603-14.981-1.154-4.75-0.731-4.479-2.621-9.59-0.351 0.368-1.069 1.105-1.429 1.473-3.59 28.719-2.637 24.356-5.26 29.112-0.601 4.918-1.642 5.918-2.831 13-0.71 1.183-1.403 2.358-2.113 3.533-0.281-0.684-0.833-2.051-1.113-2.735-0.247-4.495-0.408-4.871-1.166-8.196-0.386 0-1.175 0-1.569-9e-3 -0.044 1.359-0.105 2.717-0.158 4.076-3.067-6.436-0.91-7.799-1.823-18.286-1.446-4.541-0.272-9.371-0.868-14.026-1.026-2.849-0.71-5.908-0.745-8.871-0.289-0.587-0.868-1.744-1.166-2.332h-0.473c-0.83 6.893-1.628 7.466-1.876 15.209-0.421-0.377-1.262-1.131-1.683-1.499-9e-3 -2.306-0.035-4.602-0.193-6.89-1.183-3.384-0.535-7.013-0.877-10.51-1.192-3.384-0.535-7.022-0.868-10.519-1.201-3.384-0.543-7.022-0.885-10.519 0 0-3.515-26.665-3.515-26.666-0.324-0.368-0.982-1.096-1.306-1.455-2.09 10.391-0.875 47.421-5.628 75.94-0.395-0.377-1.175-1.122-1.56-1.499-2.507-9.819-2.672-28.963-2.717-29.831-0.561-0.894-1.113-1.788-1.657-2.682-0.07 2.13-0.053 4.313-0.806 6.347-0.412 3.787 0.395 7.723-0.859 11.396-0.71 5.531 0.675 11.247-0.877 16.656-0.473 5.961 0.096 11.957-0.368 17.918-1.613 5.996-0.123 12.299-0.877 18.409-1.446 4.532-0.281 9.362-0.868 14.017-1.096 3.051-0.701 6.32-0.701 9.485h-5.251c-0.333-5.488 0.78-11.133-0.701-16.489-0.719-5.531 0.692-11.256-0.885-16.656-0.543-4.365 0.508-8.898-0.868-13.149-0.219-3.051-0.158-6.11-0.368-9.152-0.622-2.007-0.771-4.103-0.947-6.171-3.738-17.029-1.37-12.706-7.022-45.645-4.711-15.28-4.495-46.356-6.978-58.128-0.324-0.359-0.964-1.096-1.28-1.464-0.28 1.481-0.544 2.972-0.85 4.444-0.085 0.868-3.823 36.378-5.198 42.901-1.571 7.218-1.593 19.441-2.788 22.87-0.351 3.498 0.307 7.127-0.877 10.51-0.491 4.076 0.465 8.31-0.877 12.272-0.596 4.655 0.579 9.485-0.877 14.026-0.342 4.216-9e-3 8.451-0.351 12.658-1.464 4.541-0.272 9.371-0.885 14.026-0.561 1.727-0.719 3.533-0.868 5.33-0.368-0.351-1.105-1.052-1.473-1.411-3.32 19.616-1.334 18.132-1.867 29.296-13.421 0.193-26.842 0.28-40.254-0.018-0.494-1.729-3.729-21.553-4.655-33.583-1.297-3.559-0.026-7.46-1.359-11.01-0.193-2.761-0.184-5.523-0.368-8.275-1.578-5.707-0.14-11.711-0.877-17.532-0.529-1.612-1.765-12.284-1.858-13.158-1.105-4.006-0.342-8.188-0.763-12.264-1.657-6.566-0.105-13.465-0.885-20.162-1.639-6.566-0.105-13.465-0.877-20.162-1.613-5.987-0.131-12.29-0.877-18.4-1.455-4.541-0.28-9.371-0.868-14.026-0.85-2.288-0.763-4.742-0.789-7.127-0.281-0.587-0.824-1.753-1.096-2.332h-0.403c-0.551 5.654-1.974 21.699-6.867 143.01v84.684c1.97-18.939 4.281-41.148 4.281-41.149 0.855-2.511 0.714-5.184 0.706-7.788z"/> +</svg> diff --git a/sdk/tests/fixtures/sample2.svg b/sdk/tests/fixtures/sample2.svg @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'> +<svg enable-background="new 0 0 2014 1674.641" version="1.1" viewBox="0 0 2014 1674.641" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"> + <metadata></metadata> + <path d="m44.883 1173.3c0 169.58 92.136 317.37 229.08 396.59v-793.53c-136.94 79.216-229.08 227.37-229.08 396.94z"/> + <path d="m1496.5 173.21c-338.54-181.18-640.46-181.19-978.98 0-115.34 61.726-232.1 201.31-232.1 348.66v1048h125.99v-1048c0-100.78 121.24-229.18 225.54-272.38 280.15-116.04 460-116.04 740.11 0 104.3 43.203 225.54 171.6 225.54 272.38v1048h125.99v-1048c0-147.36-116.76-286.94-232.1-348.66z"/> + <path d="m1740 776.38v793.53c136.94-79.214 229.08-227 229.08-396.59 1e-3 -169.57-92.133-317.73-229.08-396.94z"/> + <path d="m541.72 709.03h-70.645c-27.201 0-49.252 22.051-49.252 49.253v829.79c0 27.201 22.05 49.252 49.252 49.252h70.645c27.201 0 49.252-22.051 49.252-49.252v-829.79c0-27.202-22.05-49.253-49.252-49.253z"/> + <path d="m1542 709.03h-70.646c-27.2 0-49.252 22.051-49.252 49.253v829.79c0 27.201 22.052 49.252 49.252 49.252h70.646c27.2 0 49.252-22.051 49.252-49.252v-829.79c-1e-3 -27.202-22.052-49.253-49.252-49.253z"/> + <path d="m595.97 1132.8c4.322-0.219 8.643-0.184 12.965 0 0.197 4.557 3.624 24.404 4.471 95.602 0 1.438 0.298 2.849 0.728 4.225 0.691 13.2-0.668 21.337 0.868 26.298 0.386 12.904 0.053 25.834 0.158 38.746h10.467c10.735-37.493 8.785-86.788 9.941-115.01 1.07-3.103 0.614-6.426 0.868-9.634 0.615-2.041 1.597-9.992 1.753-11.519 0.368 0.377 1.113 1.131 1.481 1.508 0.079 4.827 0.295 5.098 2.007 12.833 0.342 0 1.034-9e-3 1.376-9e-3 0.421-1.771 0.877-3.515 1.315-5.277l0.657-9e-3c0.202 4.611-0.719 9.38 0.684 13.859 0.491 4.374-0.508 8.889 0.85 13.149 0.114 1.683 0.175 3.357 0.263 5.049 0.552-0.92 1.122-1.85 1.692-2.77 0.052-13.129 0.408 0.674 0.894-17.479 0.307 0.552 0.92 1.657 1.227 2.209 0.316 0.018 0.938 0.044 1.245 0.061 2.638-11.892 2.56-18.294 3.647-51.86 8.152-0.21 16.314-0.263 24.466 0.044 0.018 2.314-0.018 4.681 0.78 6.89 0.677 13.255 1.433 10.704 2.016 18.926 1.554 2.913 2.279 3.212 5.295 20.714 0.394 0 1.183 0 1.578 9e-3 0.454-9.931 0.998-1.96 0.964-13.184l0.868 9e-3c0.096 3.734-0.561 7.609 0.684 11.229 0.298 3.498-0.307 7.127 0.868 10.519 0.307 3.498-0.307 7.135 0.877 10.519 0.307 3.498-0.307 7.127 0.877 10.519 0.368 3.787-0.394 7.714 0.868 11.387 0.438 4.085-0.465 8.319 0.877 12.281 0.298 3.498-0.298 7.127 0.868 10.519 0.949 15.108 1.515 17.226 2.858 21.626 0.421-0.412 1.262-1.227 1.692-1.639-0.187-3.823 0.79-9.648 3.98-14.937 0.701 1.157 1.411 2.332 2.13 3.498 0.018 0.412 0.053 1.236 0.07 1.648 0.894 1.657 1.815 3.357 3.261 4.629 0.52-4.824 0.271-3.677 1.525-8.757 0.155-0.87 1.114-8.042 1.552-15.709 1.21-3.691 0.491-7.609 0.85-11.405 1.341-3.962 0.43-8.196 0.877-12.272 0 0 6.76-64.946 7.004-68.375 1.008-2.77 0.728-5.742 0.728-8.617 1.727 0 3.471 0 5.225-9e-3 0 3.173-0.377 6.443 0.701 9.494 0.152 3.522 0.148 41.365 1.753 46.478 0.447 4.076-0.473 8.31 0.877 12.272 0.289 3.498-0.281 7.118 0.85 10.51 0.612 11.986 0.925 9.898 2.016 17.383 0.43 0.403 1.289 1.21 1.718 1.613 0.386-0.395 1.157-1.175 1.543-1.569 1.113-3.427 2.27-6.908 2.06-10.572 0.351 0.377 1.043 1.122 1.394 1.49 0.307 0.982 0.631 1.972 0.982 2.954 9e-3 0.824 0.035 1.648 0.07 2.472 0.736 0.912 1.499 1.841 2.279 2.744 1.695-6.242 1.537-5.465 2.367-9.923 0.394-0.377 1.175-1.122 1.569-1.499-0.026 1.455-0.035 2.928-0.044 4.392 0.43 0.386 1.28 1.148 1.709 1.534 2.593-15.316 1.515-32.185 4.646-59.933h0.517c0.257 2.44 0.455 5.251 2.656 12.053 0.04 1.752 2.071 29.42 6.46 44.391 0.377-0.386 1.131-1.166 1.508-1.56 2.511-20.088 0.17 17.604 5.33-78.561l0.622 9e-3c0.403 1.569 0.842 3.13 1.28 4.699 0.395-0.377 1.175-1.148 1.569-1.534 0.153-5.981 0.067-4.293 1.201-9.362 6.539-0.281 13.079-0.289 19.627-0.018 1.093 6.281 3.062 17.853 3.831 24.948 0.403-0.377 1.219-1.14 1.631-1.525 0.133-3.59 1.852-14.417 2.919-17.453 0.377 0.377 1.14 1.122 1.516 1.499-0.034 12.962 0.097 3.675 0.947 13.657 0.421 9e-3 1.253 9e-3 1.674 9e-3 0-1.762 9e-3 -3.524 0.026-5.277h1.718c0.237 4.602-0.701 9.371 0.71 13.85 0.386 3.787-0.412 7.732 0.877 11.405 0.298 3.498-0.298 7.127 0.859 10.519 0.455 8.447 1.972 19.645 2.595 21.906-0.347 7.057 9.094 35.294 9.888 54.043 0.429-0.395 1.28-1.192 1.709-1.587 0.061-1.42 0.14-2.84 0.263-4.252 0.885-2.831 0.675-5.829 0.85-8.748 1.131-3.401 0.561-7.022 0.859-10.519 1.166-3.393 0.561-7.022 0.876-10.519 1.157-3.392 0.57-7.022 0.877-10.528 0.697-2.038 1.719-16.578 1.78-17.532 0.086-0.331 0.978-5.454 1.788-8.924 2.042-3.033 3.515-6.399 5.26-9.599 0.324 0.368 0.964 1.122 1.289 1.499 2.896 10.614 5.277 40.7 5.277 40.701 1.101 16.794 2.417 23.952 2.866 28.779 0.412 0.394 1.245 1.175 1.657 1.569 0.071-0.869 8.706-77.968 8.959-86.556 0.561-1.779 1.105-3.559 1.727-5.312 0.412 0.394 1.227 1.183 1.639 1.578 9e-3 0.57 0.017 1.701 0.017 2.27 0.403 0 1.219-9e-3 1.622-9e-3 1.24-7.203 1.236-3.14 2.121-13.342 1.017-3.41 0.5-7.013 0.798-10.51 0.666-1.929 0.745-3.971 0.85-5.987 1.981-0.017 3.98-0.017 5.987-0.061 0.738 15.014 3.226 81.388 5.452 98.881 2.794-5.344 3.327-18.194 3.313-23.046 0.526 0.92 1.061 1.841 1.604 2.779 1.005 8.595 1.291 4.766 1.955 12.124 0.412-0.386 1.236-1.166 1.657-1.56 0.07-1.131 0.167-2.253 0.29-3.375 3.077-10.573 4.023-80.044 5.303-85.767 11.203-0.333 22.415-0.307 33.618-0.026 2.519 9.333-0.185 1.64 3.165 10.651 1.008-0.035 2.025-0.07 3.059-0.105 3.706 11.86 4.661 36.592 6.136 41.086 0.237 3.743-0.228 7.618 1.324 11.159 1.832-0.973 3.532-4.164 5.768-2.27 0.311 1.769 1.139 5.743 1.674 7.74 0.096 1.99 0.052 4.006 0.342 5.987 0.955 1.779 3.182 1.078 4.839 1.35 2.515 9.18 4.175 17.629 4.865 22.318 3.942-2.424 4.424-5.052 6.049-11.527 1.105-1.981 2.621-3.682 4.252-5.251-9e-3 -1.131-9e-3 -2.262 9e-3 -3.384 0.386 0.377 1.149 1.131 1.534 1.508 0.333 1.797 0.754 3.577 1.21 5.365 0.359-0.386 1.087-1.166 1.446-1.552 0.649-2.376 1.403-4.716 2.183-7.048 0.316 0.377 0.947 1.148 1.262 1.525 1.645 7.111 0.322 3.568 2.06 21.065 0.429-0.395 1.271-1.175 1.692-1.56 0.026-1.999 0.07-3.997 0.21-5.987 1.481-4.83 0.263-9.949 0.868-14.902 1.639-6.285 0.123-12.877 0.877-19.285 1.683-7.451 0.07-15.218 0.877-22.792 1.674-7.451 0.07-15.227 0.868-22.8 1.219-3.62 0.596-7.495 0.684-11.229h4.979c2.486 11.696-0.075 13.584 1.867 20.004 0.438 4.076-0.456 8.31 0.859 12.281 0.71 13.915 2.152 15.948 2.875 21.74 0.403 0.395 1.201 1.192 1.604 1.587 2.183-6.047-0.403-11.103 3.024-22.283 0.316 0 0.964-9e-3 1.289-9e-3 0.07 1.339 1.748 15.516 3.112 20.688 3.189-6.785 3.21-47.072 3.2-54.051 9.432-0.307 18.882-0.272 28.323 0.026 0.079 1.105 0.202 2.297 0.833 3.27 1.219-0.359 1.613-2.13 1.201-3.226 0.684 0 2.042 0.017 2.726 0.017 0.193 1.701 0.421 3.401 0.912 5.049 0.745 6.11-0.754 12.422 0.877 18.417 0.622 4.944-0.64 10.081 0.885 14.902 0.438 4.076-0.464 8.31 0.859 12.272 0.587 5.786-0.649 11.747 1.157 17.392 0.342 0.359 1.017 1.087 1.35 1.455 0.973-1.806 2.025-3.576 3.296-5.207 2.899 9.94 3.548 20.233 4.146 30.129 2.753-4.301 1.495-7.983 6.198-43.26 1.07-1.122 2.156-2.227 3.261-3.331 1.546-13.203 1.281-18.245 4.804-28.139 0.719 1.183 1.42 2.384 2.139 3.594 6.049 34.545 2.934 63.483 10.432 89.607-0.114 5.067 1.359 9.993 1.052 15.06-0.079 2.016 0.035 4.059 0.719 5.978 0.359 6.487 0.088 12.991 0.131 19.496-0.026 3.813 1.113 7.53 1.017 11.361h1.639c0.973-2.533 1.026-5.233 0.991-7.898-0.096-2.682 0.728-5.26 0.842-7.907 0.149-3.305-0.272-6.627 0.342-9.897 1.052-4.874 0.254-9.879 0.719-14.806 1.306-3.962 0.421-8.188 0.859-12.264 1.069-3.103 0.631-6.426 0.885-9.634 0.71-2.034 0.736-4.199 0.763-6.329 0.535-0.92 1.087-1.841 1.657-2.753 9e-3 0.693 9e-3 2.078 9e-3 2.77 0.421 0.394 1.254 1.192 1.674 1.595 1.881-6.653 1.973-16.337 2.025-17.208 1.324-3.962 0.421-8.188 0.868-12.273 1.508-4.821 0.263-9.949 0.885-14.902 1.534-5.119 0.21-10.537 0.868-15.779 1.438-4.777 0.43-9.836 0.684-14.736l0.579 9e-3c4.58 20.94-1.764 21.194 8.003 57.654 0.035 3.743 0.315 7.477 1.14 11.133 0.771 1.227 1.56 2.446 2.375 3.664 2.187-18.959 0.397-16.093 1.254-24.413 1.525-5.119 0.228-10.537 0.876-15.779 1.525-5.119 0.219-10.537 0.876-15.779 1.482-5.155 0.351-10.607 0.728-15.884 3.781-1.853 5.985-19.261 6.241-23.449 11.896-0.298 23.809-0.289 35.704 0 0.018 2.314-0.044 4.69 0.789 6.899 1.385 15.795 1.043 17.456 1.034 20.679 0.438-0.386 1.297-1.14 1.727-1.525 0.313-2.188-1e-3 -0.959 1.21-4.953h1.157c7.495 34.264 1.885 96.567 10.537 107.57 4.66-9.896 5.508-48.83 5.75-50.764 0.339-1.036 7.792-66.458 7.846-67.323h0.719c0.315 5.479-0.815 11.133 0.701 16.48 0.219 3.217-0.175 6.522 0.833 9.634 0.096 1.35 0.175 2.709 0.263 4.076 1.113 1.78 2.262 3.55 3.349 5.356 0.07 1.85 0.202 3.717 0.806 5.487 0.237 3.208-0.21 6.539 0.877 9.643 0.438 4.076-0.456 8.301 0.868 12.264 0.64 5.233-0.666 10.659 0.868 15.779 0.666 5.531-0.693 11.238 0.877 16.656 0.617 10.342-0.612 22.781 0.868 27.175 0.123 1.99 0.167 3.989 0.21 5.987 0.429 0.394 1.28 1.183 1.7 1.578 3.526-23.595 3.006-33.165 5.417-44.234l0.526 0.026c2.215 9.395 0.757 4.828 3.042 12.623 0.377-0.377 1.14-1.14 1.517-1.516 2.464-9.857 5.395-72.486 5.408-73.354l0.71 9e-3c0.044 0.447 0.131 1.341 0.167 1.779 0.605-0.018 1.814-0.07 2.411-0.088 2.367 8.449 6.032 43.591 6.075 43.725 0.517 4.348-1.026 10.134 3.296 12.982 12.367-46.276 9.589-65.188 12.904-92.683 11.51-0.228 23.028-0.228 34.547-0.018 0.316 1.131 0.649 2.253 1.008 3.375 0 1e-3 5.242 57.934 5.242 57.935 2.528 35.686-1.458 8.139 4.62 49.809 0.412 0.395 1.227 1.175 1.639 1.56 0.117-0.869 4.225-26.319 4.576-34.135 3.883 7.547 1.348 7.067 5.198 13.465 0.955-0.395 1.964-0.64 3.016-0.745 0.631 0.833 1.245 1.701 1.832 2.604 0.465 0.044 1.394 0.131 1.859 0.175 0.631-1.087 1.262-2.165 1.92-3.243 1.331-5.87 3.349-16.952 3.752-22.327l0.71 0.018c0.324 6.355-0.877 12.877 0.666 19.11 0.64 5.242-0.666 10.659 0.885 15.788 0.281 3.498-0.272 7.109 0.842 10.511 0.105 1.525 0.175 3.059 0.263 4.593h1.683c0.03-0.868 2.321-25.659 4.655-35.354 0.359 0.368 1.069 1.113 1.42 1.481 0.018 2.183 0.026 4.409 0.763 6.496 0.184 2.928-0.088 5.943 0.894 8.766 0.257 4.097-0.504 3.463 2.165 21.81 1.771-3.524 1.604-7.469 1.744-11.299 1.411-4.55 0.307-9.362 0.868-14.026 1.604-5.996 0.149-12.299 0.877-18.409 1.63-6.285 0.114-12.877 0.868-19.285 1.587-5.698 0.158-11.711 0.868-17.532 1.56-6.399 0.324-13.114 0.693-19.645 0.429-0.377 1.28-1.14 1.709-1.525-0.026 2.393-0.105 4.856 0.728 7.153 0.193 2.919-0.096 5.943 0.885 8.757 0.456 4.076-0.473 8.319 0.877 12.281 0.447 4.076-0.473 8.31 0.877 12.264 0.368 3.796-0.386 7.723 0.868 11.405 1.036 17.235 1.642 16.652 2.972 21.792 0.43 0.438 1.297 1.306 1.727 1.736 0.815-1.21 1.63-2.419 2.446-3.638 2.923-13.017 5.323-15.63 6.426-33.039 1.186-4.545 6.856-57.745 6.873-58.619 13.114-0.333 26.237-0.298 39.351 0-0.07 25.539-0.242 25.33 0.701 27.92 0.701 5.83-0.737 11.843 0.868 17.541 0.622 4.944-0.64 10.072 0.885 14.902 0.491 4.374-0.517 8.898 0.859 13.158 0.545 12.053 0.783 6.687 1.964 16.629 1.858 1.052 3.901 1.981 5.076 3.892 10.959-1.859 6.983-29.405 13.724-64.092v-42.917c-0.174-0.927-0.341-1.93-0.488-3.102-0.544-0.947-1.069-1.885-1.578-2.823-3.578-19.889-0.465-3.857-2.901-38.229-0.302-0.87-2.483-19.751-2.542-20.46-0.701-0.894-1.359-1.788-2.051-2.665-2.62 8.857-4.816 32.1-4.97 37.869-0.885-1.192-1.736-2.411-2.56-3.62v-1.63c-0.991-1.744-1.946-3.489-2.928-5.216-0.438 0.517-1.306 1.543-1.745 2.06-0.955 0-1.885-9e-3 -2.796-9e-3 -0.71-0.71-1.394-1.42-2.069-2.13-0.827-5.187-0.922-3.934-1.999-19.093-1.271-3.673-0.465-7.609-0.877-11.405-1.201-3.384-0.535-7.013-0.877-10.51-0.824-2.7-0.728-5.54-1.166-8.293-0.21-0.359-0.622-1.078-0.833-1.438-0.622-3.147-0.456-6.373-0.631-9.555-1.056-2.973-1.705-15.787-1.762-16.656-1.704-4.872-1.165-33.567-5.321-44.54l-0.377 9e-3c-0.237 0.579-0.701 1.736-0.938 2.323-0.401 3.921-11.044 109.35-11.711 112.52l-0.71 9e-3c-0.251-7.498 9e-3 -3.82-1.201-9.651h-1.236c-1.98 7.546-1.844 6.61-2.121 9.073-0.254 0.622-0.771 1.867-1.026 2.481-1.078-0.421-2.121-0.85-3.156-1.271-3.451 12.972-2.154 26.149-5.549 58.154-5.163 0.21-10.326 0.272-15.472 9e-3 -2.367-4.585 0.263-10.046-1.674-14.788-5.048-49.685-2.675-22.48-9.038-64.474-0.368 0.368-1.096 1.104-1.464 1.473-3.2 24.397-3.796 53.375-3.866 54.244-0.902 2.444-0.812 2.981-0.71 23.546-4.628 0.21-9.257 0.202-13.877 9e-3 -0.062-1.098-0.753-10.145-3.41-19.96-1.609-6.088-2.241-34.338-5.531-45.399-0.386 0.403-1.157 1.218-1.543 1.622 0 2e-3 -2.428 17.821-2.428 17.821-1.87 7.96-2.043 7.751-2.209 12.123-0.894 1.359-1.823 2.682-2.779 3.989-1.026-0.78-2.016-1.552-3.024-2.297-4.94 16.27-1.404 25.036-3.831 32.049-1.745 9e-3 -3.48 0.018-5.198 0.07-0.149-4.059 0.605-8.249-0.693-12.176-0.596-4.664 0.579-9.494-0.877-14.026-0.543-4.365 0.509-8.897-0.868-13.149-0.245-2.98-0.219-5.97-0.184-8.959h-0.798c-0.097 1.525-0.175 3.051-0.281 4.585-1.043 3.042-0.675 6.285-0.666 9.441h-0.885c-0.454-35.146-2.288-72.71-9.792-140.65-0.693-1.175-1.359-2.332-2.043-3.489-1.043 1.411-2.042 2.84-2.954 4.33-0.744 4.308-0.526 3.106-1.56 7.153-3.447 12.335-8.898 66.727-8.898 66.727-0.359 3.498 0.307 7.135-0.877 10.519-2.297 22.912 0.443 23.804-2.604 35.932-0.184 2.639-0.044 5.347-0.894 7.89-0.228 3.051-0.158 6.101-0.368 9.152-1.499 4.83-0.237 9.949-0.877 14.902-1.569 5.409-0.167 11.124-0.877 16.647-0.517 1.683-0.728 3.427-0.912 5.172-6.645 0.202-13.289 0.254-19.925-0.044 0.064-10.529-0.526-4.443-0.973-12.334l-0.701 9e-3c-0.965 7.442-1.078 2.9-0.973 12.272-1.183-9e-3 -2.349-9e-3 -3.506 0 0.078-9.359-1.521-16.3-2.042-19.811-3.15 1.808-4.963 16.633-5.119 19.899-5.987 0.254-11.974 0.228-17.953-0.035-2.68-8.301 0.155-12.807-1.885-20.022-0.649-4.944 0.631-10.072-0.877-14.902-0.28-3.629-0.088-7.276-0.35-10.905-0.735-2.102-1.517-17.095-2.06-19.715-1.139-4.529-1.144-4.594-1.289-6.811-0.833-1.219-1.674-2.428-2.533-3.62-0.026-0.394-0.088-1.192-0.114-1.587-1.131-2.095-2.358-4.129-3.813-6.005-0.894 0.955-1.762 1.911-2.63 2.875-0.491 0-1.473-9e-3 -1.964-9e-3 -0.281 0.579-0.833 1.744-1.113 2.323-0.044 2.393 0.018 4.839-0.78 7.127-0.517 8.012 0.14 16.051-0.359 24.054-1.709 4.69 0.307 9.827-1.403 14.517-0.175 2.288-0.202 4.585-0.193 6.881-0.43 0.377-1.297 1.131-1.727 1.516 9e-3 -2.682 0.245-5.453-0.71-8.012-0.596-4.655 0.57-9.485-0.877-14.026-0.438-5.382 0.079-10.782-0.359-16.165-1.587-5.698-0.149-11.712-0.876-17.532-1.394-4.251-0.333-8.784-0.868-13.149-0.903-2.358-0.754-4.909-0.728-7.381-0.429-0.368-1.297-1.122-1.727-1.49-0.272 4.699 0.71 9.564-0.701 14.131-0.421 3.787 0.385 7.723-0.877 11.396-0.552 4.366 0.526 8.898-0.877 13.149-0.368 4.506 0.018 9.029-0.35 13.535-1.438 4.769-0.421 9.818-0.701 14.709h-0.868c-9e-3 -2.867 0.289-5.829-0.71-8.573-0.245-3.34-0.123-6.688-0.351-10.028-1.349-3.85-2.513-33.865-5.347-39.938-4.096 0.324-4.685-1.352-7.083-16.191-0.859-3.445-0.482-7.022-0.675-10.528-5.99-19.969-5.779-31.074-8.74-43.006-0.412 0.377-1.236 1.14-1.648 1.516-4.042 68.84-13.256 161-13.438 161.87-6.241 0.263-12.483 0.281-18.724-0.018-2.084-7.236 0.044-0.063-2.472-11.072-1.704 1.184-2.333 2.852-3.27 11.072-6.54 0.281-13.088 0.272-19.627 0.035-0.289-0.605-0.859-1.815-1.148-2.419-0.438-5.567 0.754-11.308-0.745-16.752-0.657-4.953 0.623-10.081-0.885-14.902-0.316-3.918-0.044-7.863-0.351-11.781-1.175-3.384-0.543-7.013-0.868-10.519-1.201-3.375-0.543-7.013-0.877-10.519-1.105-3.094-0.622-6.426-0.885-9.634-0.991-2.823-0.675-5.838-0.885-8.766-0.64-1.823-0.737-3.752-0.807-5.654-0.412-0.377-1.236-1.122-1.648-1.49-0.023 1.517 0.6 9.192-2.016 20.118-2.092-3.749-2.373-11.288-2.568-14.727-0.728-2.095-0.719-4.33-0.728-6.513-0.412-0.377-1.236-1.122-1.648-1.49-0.017 2.384 0.105 4.839-0.745 7.118-1.625 13.049-1.923 57.246-2.113 60.871-1.254 3.524 9e-3 7.513-2.086 10.808-3.055-13.191-3.982-41.883-4.041-42.752-0.195-0.562-2.542-23.345-2.577-24.352h-0.684c-0.074 0.87-1.059 13.181-1.639 14.709-0.324 3.927-0.052 7.863-0.359 11.79-1.806 5.26 0.403 10.993-1.403 16.261-0.333 4.444-0.14 8.906-0.175 13.359l-0.85-0.026c-9e-3 -2.402-0.035-4.804-0.21-7.197-1.955-6.715 0.561-13.929-1.394-20.644-0.421-5.093 0.061-10.212-0.359-15.297-1.534-5.119-0.202-10.546-0.877-15.779-1.341-3.962-0.386-8.196-0.868-12.272-1.473-4.856-0.368-10.02-0.745-15.007-0.281-0.587-0.85-1.753-1.131-2.332l-0.342-0.026c-2.383 6.384-1.846 9.872-4.725 15.043-1.087-0.053-2.156-0.097-3.217-0.14-0.297 2.566-0.568 6.574-3.226 12.614-1.078-0.456-2.139-0.912-3.173-1.385-0.903 1.043-1.753 2.121-2.568 3.226-1.541 14.346-1.612 25.276-6.522 59.863-0.64 1.394-1.613 2.568-2.902 3.384-0.643-9.977-2.268-14.232-2.901-20.381-0.395-0.368-1.192-1.113-1.587-1.482-3.995 25.967-3.614 31.519-5.628 38.86l-0.526 9e-3c-5.004-29.024-4.245-32.066-6.592-40.692-1.964 0.307-3.165 1.56-3.463 3.506-1.455 1.648-2.858 3.34-4.068 5.172-0.113 0.869-5.441 26.261-5.242 38.194-7.206 0.316-14.42 0.281-21.626 0-1.59-6.96-1.588-22.528-4.032-40.043-2.449 4.247-1.567 9.163-3.401 17.199h-0.622c-0.096-1.999-0.167-4.024-0.798-5.943-0.193-2.463-0.228-4.935-0.403-7.398-0.214-0.596-2.541-21.185-2.551-21.389-0.342-0.368-1.034-1.096-1.376-1.464-2.624 7.092-1.98 15.125-3.936 40.762-0.943 2.679-1.212 14.307-2.463 18.251l-0.579-9e-3c-0.263-0.587-0.797-1.762-1.069-2.349-0.044-2.393 0.018-4.839-0.798-7.127-0.482-4.076 0.456-8.31-0.877-12.264-0.543-4.374 0.526-8.906-0.876-13.149-0.272-3.629-0.088-7.276-0.351-10.905-2.209-6.347 1.236-13.623-2.226-19.618-1.659 10.114-0.922 6.007-1.289 12.115-1.324 3.962-0.395 8.196-0.868 12.272-1.648 4.401 0.228 9.24-1.394 13.64-0.263 3.27-0.202 6.557-0.184 9.835l-0.859 9e-3c0-2.7 9e-3 -5.409-0.202-8.091 0 0-1.894-14.814-3.559-26.64-1.025 2.161-2.494 6.353-3.419 11.457-0.71 1.201-1.42 2.411-2.148 3.603-3.406-7.194-4.001-15.55-4.295-17.699-5.625-12.505-4.562-25.342-7.67-33.671h-0.403c-3.503 9.782 0.435 1.884-6.005 38.317-0.184 0.359-0.552 1.087-0.728 1.446-0.324 1.727-0.57 3.463-0.841 5.198-0.947 3.717-0.395 7.583-0.719 11.361-1.289 3.664-0.473 7.6-0.885 11.396-0.594 1.9-1.634 10.122-1.718 10.993-1.122 0.745-2.244 1.473-3.349 2.218-0.386 5.626 0.13 1.269-1.175 7.714-3.953 0.175-7.907 0.175-11.852 0.044-0.105-2.051-0.158-4.129-0.842-6.075-0.412-3.796 0.395-7.732-0.885-11.396-0.333-3.498 0.307-7.127-0.859-10.51-0.491-6.548 0.123-13.123-0.368-19.671 0 0-5.516-54.514-8.845-67.306h-1.473c0.015 4.792-0.944 14.581-1.595 16.463-0.351 3.498 0.307 7.136-0.877 10.519-0.491 4.076 0.465 8.31-0.877 12.272-0.491 4.076 0.456 8.31-0.877 12.272-0.28 3.629-0.079 7.276-0.35 10.905-1.262 3.673-0.465 7.609-0.868 11.396-1.289 3.664-0.473 7.6-0.877 11.396-1.289 3.664-0.482 7.6-0.877 11.387-1.429 4.243-0.351 8.784-0.894 13.149-0.517 1.683-0.728 3.427-0.912 5.163-3.629 0.123-7.249 0.123-10.861 9e-3 -0.359-1.131-0.719-2.253-1.078-3.357-0.554-15.475 0.663-21.354-0.815-25.474-0.498-7.528-0.096-59.18-5.654-78.719-6.429-1.051-3.223-11.691-7.057-21.424l-0.438 0.018c-4.443 43.319-2.365 60.076-3.857 78.211-1.63 4.401 0.21 9.231-1.385 13.64-0.184 2.463-0.219 4.935-0.395 7.399-0.666 2.007-0.736 4.138-0.824 6.241-0.245 0.64-0.745 1.928-0.99 2.568-0.351-0.359-1.061-1.096-1.411-1.455-0.134-6.652-0.225-0.761-1.166-13-1.403-3.839 0.079-8.056-1.359-11.887-0.342-4.436-0.149-8.897-0.184-13.342h-1.622c-0.042 0.869-1.142 13.049-1.709 14.709-0.246 3.34-0.114 6.688-0.351 10.028-1.402 4.243-0.342 8.775-0.877 13.14-1.473 4.541-0.281 9.371-0.885 14.026-0.999 2.761-0.728 5.724-0.71 8.599-0.438-9e-3 -1.297-9e-3 -1.736-0.018-0.091-1.768-2.814-61.555-2.814-61.555-0.038-0.109-5.456-50.812-6.908-56.26-0.359 0.386-1.078 1.148-1.446 1.534-1.054 4.726-0.995 2.579-1.157 9.371-0.298-0.026-0.885-0.07-1.183-0.096-0.938-1.324-1.928-2.612-2.919-3.892-2.823 14.314-4.439 36.549-5.97 44.873-0.184 0.359-0.552 1.078-0.736 1.438-0.281 1.359-0.526 2.735-0.754 4.103h-0.657c0.028-7.733-1.59-17.163-2.849-24.896-0.517 0.877-1.026 1.762-1.516 2.647-0.018 2.972 0.315 6.049-0.71 8.906-0.605 4.655 0.561 9.485-0.876 14.026-0.754 6.11 0.71 12.404-0.868 18.409-0.131 1.63-0.202 3.279-0.254 4.918-0.544 0.938-1.087 1.876-1.613 2.814-0.987 9.186-0.327-1.6-1.14 11.931-1.245 3.673-0.473 7.6-0.859 11.396-1.201 3.34-0.657 6.934-0.701 10.397-6.732 0.254-13.456 0.298-20.179 9e-3 -0.044-3.471 0.473-7.057-0.684-10.405-0.649-4.944 0.622-10.072-0.885-14.894-0.307-3.927-0.052-7.863-0.351-11.782-1.613-5.996-0.149-12.316-0.868-18.435-1.339-5.048-0.518-5.014-3.603-14.981-1.154-4.75-0.731-4.479-2.621-9.59-0.351 0.368-1.069 1.105-1.429 1.473-3.59 28.719-2.637 24.356-5.26 29.112-0.601 4.918-1.642 5.918-2.831 13-0.71 1.183-1.403 2.358-2.113 3.533-0.281-0.684-0.833-2.051-1.113-2.735-0.247-4.495-0.408-4.871-1.166-8.196-0.386 0-1.175 0-1.569-9e-3 -0.044 1.359-0.105 2.717-0.158 4.076-3.067-6.436-0.91-7.799-1.823-18.286-1.446-4.541-0.272-9.371-0.868-14.026-1.026-2.849-0.71-5.908-0.745-8.871-0.289-0.587-0.868-1.744-1.166-2.332h-0.473c-0.83 6.893-1.628 7.466-1.876 15.209-0.421-0.377-1.262-1.131-1.683-1.499-9e-3 -2.306-0.035-4.602-0.193-6.89-1.183-3.384-0.535-7.013-0.877-10.51-1.192-3.384-0.535-7.022-0.868-10.519-1.201-3.384-0.543-7.022-0.885-10.519 0 0-3.515-26.665-3.515-26.666-0.324-0.368-0.982-1.096-1.306-1.455-2.09 10.391-0.875 47.421-5.628 75.94-0.395-0.377-1.175-1.122-1.56-1.499-2.507-9.819-2.672-28.963-2.717-29.831-0.561-0.894-1.113-1.788-1.657-2.682-0.07 2.13-0.053 4.313-0.806 6.347-0.412 3.787 0.395 7.723-0.859 11.396-0.71 5.531 0.675 11.247-0.877 16.656-0.473 5.961 0.096 11.957-0.368 17.918-1.613 5.996-0.123 12.299-0.877 18.409-1.446 4.532-0.281 9.362-0.868 14.017-1.096 3.051-0.701 6.32-0.701 9.485h-5.251c-0.333-5.488 0.78-11.133-0.701-16.489-0.719-5.531 0.692-11.256-0.885-16.656-0.543-4.365 0.508-8.898-0.868-13.149-0.219-3.051-0.158-6.11-0.368-9.152-0.622-2.007-0.771-4.103-0.947-6.171-3.738-17.029-1.37-12.706-7.022-45.645-4.711-15.28-4.495-46.356-6.978-58.128-0.324-0.359-0.964-1.096-1.28-1.464-0.28 1.481-0.544 2.972-0.85 4.444-0.085 0.868-3.823 36.378-5.198 42.901-1.571 7.218-1.593 19.441-2.788 22.87-0.351 3.498 0.307 7.127-0.877 10.51-0.491 4.076 0.465 8.31-0.877 12.272-0.596 4.655 0.579 9.485-0.877 14.026-0.342 4.216-9e-3 8.451-0.351 12.658-1.464 4.541-0.272 9.371-0.885 14.026-0.561 1.727-0.719 3.533-0.868 5.33-0.368-0.351-1.105-1.052-1.473-1.411-3.32 19.616-1.334 18.132-1.867 29.296-13.421 0.193-26.842 0.28-40.254-0.018-0.494-1.729-3.729-21.553-4.655-33.583-1.297-3.559-0.026-7.46-1.359-11.01-0.193-2.761-0.184-5.523-0.368-8.275-1.578-5.707-0.14-11.711-0.877-17.532-0.529-1.612-1.765-12.284-1.858-13.158-1.105-4.006-0.342-8.188-0.763-12.264-1.657-6.566-0.105-13.465-0.885-20.162-1.639-6.566-0.105-13.465-0.877-20.162-1.613-5.987-0.131-12.29-0.877-18.4-1.455-4.541-0.28-9.371-0.868-14.026-0.85-2.288-0.763-4.742-0.789-7.127-0.281-0.587-0.824-1.753-1.096-2.332h-0.403c-0.551 5.654-1.974 21.699-6.867 143.01v84.684c1.97-18.939 4.281-41.148 4.281-41.149 0.855-2.511 0.714-5.184 0.706-7.788z"/> +</svg> diff --git a/sdk/tests/fixtures/sample3.svg b/sdk/tests/fixtures/sample3.svg @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'> +<svg enable-background="new 0 0 2014 1674.641" version="1.1" viewBox="0 0 2014 1674.641" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"> + <metadata><c2pa:manifest xmlns:c2pa="http://c2pa.org/manifest">c29tZSBtb3JlIHRlc3QgZGF0YQ==</c2pa:manifest></metadata> + <path d="m44.883 1173.3c0 169.58 92.136 317.37 229.08 396.59v-793.53c-136.94 79.216-229.08 227.37-229.08 396.94z"/> + <path d="m1496.5 173.21c-338.54-181.18-640.46-181.19-978.98 0-115.34 61.726-232.1 201.31-232.1 348.66v1048h125.99v-1048c0-100.78 121.24-229.18 225.54-272.38 280.15-116.04 460-116.04 740.11 0 104.3 43.203 225.54 171.6 225.54 272.38v1048h125.99v-1048c0-147.36-116.76-286.94-232.1-348.66z"/> + <path d="m1740 776.38v793.53c136.94-79.214 229.08-227 229.08-396.59 1e-3 -169.57-92.133-317.73-229.08-396.94z"/> + <path d="m541.72 709.03h-70.645c-27.201 0-49.252 22.051-49.252 49.253v829.79c0 27.201 22.05 49.252 49.252 49.252h70.645c27.201 0 49.252-22.051 49.252-49.252v-829.79c0-27.202-22.05-49.253-49.252-49.253z"/> + <path d="m1542 709.03h-70.646c-27.2 0-49.252 22.051-49.252 49.253v829.79c0 27.201 22.052 49.252 49.252 49.252h70.646c27.2 0 49.252-22.051 49.252-49.252v-829.79c-1e-3 -27.202-22.052-49.253-49.252-49.253z"/> + <path d="m595.97 1132.8c4.322-0.219 8.643-0.184 12.965 0 0.197 4.557 3.624 24.404 4.471 95.602 0 1.438 0.298 2.849 0.728 4.225 0.691 13.2-0.668 21.337 0.868 26.298 0.386 12.904 0.053 25.834 0.158 38.746h10.467c10.735-37.493 8.785-86.788 9.941-115.01 1.07-3.103 0.614-6.426 0.868-9.634 0.615-2.041 1.597-9.992 1.753-11.519 0.368 0.377 1.113 1.131 1.481 1.508 0.079 4.827 0.295 5.098 2.007 12.833 0.342 0 1.034-9e-3 1.376-9e-3 0.421-1.771 0.877-3.515 1.315-5.277l0.657-9e-3c0.202 4.611-0.719 9.38 0.684 13.859 0.491 4.374-0.508 8.889 0.85 13.149 0.114 1.683 0.175 3.357 0.263 5.049 0.552-0.92 1.122-1.85 1.692-2.77 0.052-13.129 0.408 0.674 0.894-17.479 0.307 0.552 0.92 1.657 1.227 2.209 0.316 0.018 0.938 0.044 1.245 0.061 2.638-11.892 2.56-18.294 3.647-51.86 8.152-0.21 16.314-0.263 24.466 0.044 0.018 2.314-0.018 4.681 0.78 6.89 0.677 13.255 1.433 10.704 2.016 18.926 1.554 2.913 2.279 3.212 5.295 20.714 0.394 0 1.183 0 1.578 9e-3 0.454-9.931 0.998-1.96 0.964-13.184l0.868 9e-3c0.096 3.734-0.561 7.609 0.684 11.229 0.298 3.498-0.307 7.127 0.868 10.519 0.307 3.498-0.307 7.135 0.877 10.519 0.307 3.498-0.307 7.127 0.877 10.519 0.368 3.787-0.394 7.714 0.868 11.387 0.438 4.085-0.465 8.319 0.877 12.281 0.298 3.498-0.298 7.127 0.868 10.519 0.949 15.108 1.515 17.226 2.858 21.626 0.421-0.412 1.262-1.227 1.692-1.639-0.187-3.823 0.79-9.648 3.98-14.937 0.701 1.157 1.411 2.332 2.13 3.498 0.018 0.412 0.053 1.236 0.07 1.648 0.894 1.657 1.815 3.357 3.261 4.629 0.52-4.824 0.271-3.677 1.525-8.757 0.155-0.87 1.114-8.042 1.552-15.709 1.21-3.691 0.491-7.609 0.85-11.405 1.341-3.962 0.43-8.196 0.877-12.272 0 0 6.76-64.946 7.004-68.375 1.008-2.77 0.728-5.742 0.728-8.617 1.727 0 3.471 0 5.225-9e-3 0 3.173-0.377 6.443 0.701 9.494 0.152 3.522 0.148 41.365 1.753 46.478 0.447 4.076-0.473 8.31 0.877 12.272 0.289 3.498-0.281 7.118 0.85 10.51 0.612 11.986 0.925 9.898 2.016 17.383 0.43 0.403 1.289 1.21 1.718 1.613 0.386-0.395 1.157-1.175 1.543-1.569 1.113-3.427 2.27-6.908 2.06-10.572 0.351 0.377 1.043 1.122 1.394 1.49 0.307 0.982 0.631 1.972 0.982 2.954 9e-3 0.824 0.035 1.648 0.07 2.472 0.736 0.912 1.499 1.841 2.279 2.744 1.695-6.242 1.537-5.465 2.367-9.923 0.394-0.377 1.175-1.122 1.569-1.499-0.026 1.455-0.035 2.928-0.044 4.392 0.43 0.386 1.28 1.148 1.709 1.534 2.593-15.316 1.515-32.185 4.646-59.933h0.517c0.257 2.44 0.455 5.251 2.656 12.053 0.04 1.752 2.071 29.42 6.46 44.391 0.377-0.386 1.131-1.166 1.508-1.56 2.511-20.088 0.17 17.604 5.33-78.561l0.622 9e-3c0.403 1.569 0.842 3.13 1.28 4.699 0.395-0.377 1.175-1.148 1.569-1.534 0.153-5.981 0.067-4.293 1.201-9.362 6.539-0.281 13.079-0.289 19.627-0.018 1.093 6.281 3.062 17.853 3.831 24.948 0.403-0.377 1.219-1.14 1.631-1.525 0.133-3.59 1.852-14.417 2.919-17.453 0.377 0.377 1.14 1.122 1.516 1.499-0.034 12.962 0.097 3.675 0.947 13.657 0.421 9e-3 1.253 9e-3 1.674 9e-3 0-1.762 9e-3 -3.524 0.026-5.277h1.718c0.237 4.602-0.701 9.371 0.71 13.85 0.386 3.787-0.412 7.732 0.877 11.405 0.298 3.498-0.298 7.127 0.859 10.519 0.455 8.447 1.972 19.645 2.595 21.906-0.347 7.057 9.094 35.294 9.888 54.043 0.429-0.395 1.28-1.192 1.709-1.587 0.061-1.42 0.14-2.84 0.263-4.252 0.885-2.831 0.675-5.829 0.85-8.748 1.131-3.401 0.561-7.022 0.859-10.519 1.166-3.393 0.561-7.022 0.876-10.519 1.157-3.392 0.57-7.022 0.877-10.528 0.697-2.038 1.719-16.578 1.78-17.532 0.086-0.331 0.978-5.454 1.788-8.924 2.042-3.033 3.515-6.399 5.26-9.599 0.324 0.368 0.964 1.122 1.289 1.499 2.896 10.614 5.277 40.7 5.277 40.701 1.101 16.794 2.417 23.952 2.866 28.779 0.412 0.394 1.245 1.175 1.657 1.569 0.071-0.869 8.706-77.968 8.959-86.556 0.561-1.779 1.105-3.559 1.727-5.312 0.412 0.394 1.227 1.183 1.639 1.578 9e-3 0.57 0.017 1.701 0.017 2.27 0.403 0 1.219-9e-3 1.622-9e-3 1.24-7.203 1.236-3.14 2.121-13.342 1.017-3.41 0.5-7.013 0.798-10.51 0.666-1.929 0.745-3.971 0.85-5.987 1.981-0.017 3.98-0.017 5.987-0.061 0.738 15.014 3.226 81.388 5.452 98.881 2.794-5.344 3.327-18.194 3.313-23.046 0.526 0.92 1.061 1.841 1.604 2.779 1.005 8.595 1.291 4.766 1.955 12.124 0.412-0.386 1.236-1.166 1.657-1.56 0.07-1.131 0.167-2.253 0.29-3.375 3.077-10.573 4.023-80.044 5.303-85.767 11.203-0.333 22.415-0.307 33.618-0.026 2.519 9.333-0.185 1.64 3.165 10.651 1.008-0.035 2.025-0.07 3.059-0.105 3.706 11.86 4.661 36.592 6.136 41.086 0.237 3.743-0.228 7.618 1.324 11.159 1.832-0.973 3.532-4.164 5.768-2.27 0.311 1.769 1.139 5.743 1.674 7.74 0.096 1.99 0.052 4.006 0.342 5.987 0.955 1.779 3.182 1.078 4.839 1.35 2.515 9.18 4.175 17.629 4.865 22.318 3.942-2.424 4.424-5.052 6.049-11.527 1.105-1.981 2.621-3.682 4.252-5.251-9e-3 -1.131-9e-3 -2.262 9e-3 -3.384 0.386 0.377 1.149 1.131 1.534 1.508 0.333 1.797 0.754 3.577 1.21 5.365 0.359-0.386 1.087-1.166 1.446-1.552 0.649-2.376 1.403-4.716 2.183-7.048 0.316 0.377 0.947 1.148 1.262 1.525 1.645 7.111 0.322 3.568 2.06 21.065 0.429-0.395 1.271-1.175 1.692-1.56 0.026-1.999 0.07-3.997 0.21-5.987 1.481-4.83 0.263-9.949 0.868-14.902 1.639-6.285 0.123-12.877 0.877-19.285 1.683-7.451 0.07-15.218 0.877-22.792 1.674-7.451 0.07-15.227 0.868-22.8 1.219-3.62 0.596-7.495 0.684-11.229h4.979c2.486 11.696-0.075 13.584 1.867 20.004 0.438 4.076-0.456 8.31 0.859 12.281 0.71 13.915 2.152 15.948 2.875 21.74 0.403 0.395 1.201 1.192 1.604 1.587 2.183-6.047-0.403-11.103 3.024-22.283 0.316 0 0.964-9e-3 1.289-9e-3 0.07 1.339 1.748 15.516 3.112 20.688 3.189-6.785 3.21-47.072 3.2-54.051 9.432-0.307 18.882-0.272 28.323 0.026 0.079 1.105 0.202 2.297 0.833 3.27 1.219-0.359 1.613-2.13 1.201-3.226 0.684 0 2.042 0.017 2.726 0.017 0.193 1.701 0.421 3.401 0.912 5.049 0.745 6.11-0.754 12.422 0.877 18.417 0.622 4.944-0.64 10.081 0.885 14.902 0.438 4.076-0.464 8.31 0.859 12.272 0.587 5.786-0.649 11.747 1.157 17.392 0.342 0.359 1.017 1.087 1.35 1.455 0.973-1.806 2.025-3.576 3.296-5.207 2.899 9.94 3.548 20.233 4.146 30.129 2.753-4.301 1.495-7.983 6.198-43.26 1.07-1.122 2.156-2.227 3.261-3.331 1.546-13.203 1.281-18.245 4.804-28.139 0.719 1.183 1.42 2.384 2.139 3.594 6.049 34.545 2.934 63.483 10.432 89.607-0.114 5.067 1.359 9.993 1.052 15.06-0.079 2.016 0.035 4.059 0.719 5.978 0.359 6.487 0.088 12.991 0.131 19.496-0.026 3.813 1.113 7.53 1.017 11.361h1.639c0.973-2.533 1.026-5.233 0.991-7.898-0.096-2.682 0.728-5.26 0.842-7.907 0.149-3.305-0.272-6.627 0.342-9.897 1.052-4.874 0.254-9.879 0.719-14.806 1.306-3.962 0.421-8.188 0.859-12.264 1.069-3.103 0.631-6.426 0.885-9.634 0.71-2.034 0.736-4.199 0.763-6.329 0.535-0.92 1.087-1.841 1.657-2.753 9e-3 0.693 9e-3 2.078 9e-3 2.77 0.421 0.394 1.254 1.192 1.674 1.595 1.881-6.653 1.973-16.337 2.025-17.208 1.324-3.962 0.421-8.188 0.868-12.273 1.508-4.821 0.263-9.949 0.885-14.902 1.534-5.119 0.21-10.537 0.868-15.779 1.438-4.777 0.43-9.836 0.684-14.736l0.579 9e-3c4.58 20.94-1.764 21.194 8.003 57.654 0.035 3.743 0.315 7.477 1.14 11.133 0.771 1.227 1.56 2.446 2.375 3.664 2.187-18.959 0.397-16.093 1.254-24.413 1.525-5.119 0.228-10.537 0.876-15.779 1.525-5.119 0.219-10.537 0.876-15.779 1.482-5.155 0.351-10.607 0.728-15.884 3.781-1.853 5.985-19.261 6.241-23.449 11.896-0.298 23.809-0.289 35.704 0 0.018 2.314-0.044 4.69 0.789 6.899 1.385 15.795 1.043 17.456 1.034 20.679 0.438-0.386 1.297-1.14 1.727-1.525 0.313-2.188-1e-3 -0.959 1.21-4.953h1.157c7.495 34.264 1.885 96.567 10.537 107.57 4.66-9.896 5.508-48.83 5.75-50.764 0.339-1.036 7.792-66.458 7.846-67.323h0.719c0.315 5.479-0.815 11.133 0.701 16.48 0.219 3.217-0.175 6.522 0.833 9.634 0.096 1.35 0.175 2.709 0.263 4.076 1.113 1.78 2.262 3.55 3.349 5.356 0.07 1.85 0.202 3.717 0.806 5.487 0.237 3.208-0.21 6.539 0.877 9.643 0.438 4.076-0.456 8.301 0.868 12.264 0.64 5.233-0.666 10.659 0.868 15.779 0.666 5.531-0.693 11.238 0.877 16.656 0.617 10.342-0.612 22.781 0.868 27.175 0.123 1.99 0.167 3.989 0.21 5.987 0.429 0.394 1.28 1.183 1.7 1.578 3.526-23.595 3.006-33.165 5.417-44.234l0.526 0.026c2.215 9.395 0.757 4.828 3.042 12.623 0.377-0.377 1.14-1.14 1.517-1.516 2.464-9.857 5.395-72.486 5.408-73.354l0.71 9e-3c0.044 0.447 0.131 1.341 0.167 1.779 0.605-0.018 1.814-0.07 2.411-0.088 2.367 8.449 6.032 43.591 6.075 43.725 0.517 4.348-1.026 10.134 3.296 12.982 12.367-46.276 9.589-65.188 12.904-92.683 11.51-0.228 23.028-0.228 34.547-0.018 0.316 1.131 0.649 2.253 1.008 3.375 0 1e-3 5.242 57.934 5.242 57.935 2.528 35.686-1.458 8.139 4.62 49.809 0.412 0.395 1.227 1.175 1.639 1.56 0.117-0.869 4.225-26.319 4.576-34.135 3.883 7.547 1.348 7.067 5.198 13.465 0.955-0.395 1.964-0.64 3.016-0.745 0.631 0.833 1.245 1.701 1.832 2.604 0.465 0.044 1.394 0.131 1.859 0.175 0.631-1.087 1.262-2.165 1.92-3.243 1.331-5.87 3.349-16.952 3.752-22.327l0.71 0.018c0.324 6.355-0.877 12.877 0.666 19.11 0.64 5.242-0.666 10.659 0.885 15.788 0.281 3.498-0.272 7.109 0.842 10.511 0.105 1.525 0.175 3.059 0.263 4.593h1.683c0.03-0.868 2.321-25.659 4.655-35.354 0.359 0.368 1.069 1.113 1.42 1.481 0.018 2.183 0.026 4.409 0.763 6.496 0.184 2.928-0.088 5.943 0.894 8.766 0.257 4.097-0.504 3.463 2.165 21.81 1.771-3.524 1.604-7.469 1.744-11.299 1.411-4.55 0.307-9.362 0.868-14.026 1.604-5.996 0.149-12.299 0.877-18.409 1.63-6.285 0.114-12.877 0.868-19.285 1.587-5.698 0.158-11.711 0.868-17.532 1.56-6.399 0.324-13.114 0.693-19.645 0.429-0.377 1.28-1.14 1.709-1.525-0.026 2.393-0.105 4.856 0.728 7.153 0.193 2.919-0.096 5.943 0.885 8.757 0.456 4.076-0.473 8.319 0.877 12.281 0.447 4.076-0.473 8.31 0.877 12.264 0.368 3.796-0.386 7.723 0.868 11.405 1.036 17.235 1.642 16.652 2.972 21.792 0.43 0.438 1.297 1.306 1.727 1.736 0.815-1.21 1.63-2.419 2.446-3.638 2.923-13.017 5.323-15.63 6.426-33.039 1.186-4.545 6.856-57.745 6.873-58.619 13.114-0.333 26.237-0.298 39.351 0-0.07 25.539-0.242 25.33 0.701 27.92 0.701 5.83-0.737 11.843 0.868 17.541 0.622 4.944-0.64 10.072 0.885 14.902 0.491 4.374-0.517 8.898 0.859 13.158 0.545 12.053 0.783 6.687 1.964 16.629 1.858 1.052 3.901 1.981 5.076 3.892 10.959-1.859 6.983-29.405 13.724-64.092v-42.917c-0.174-0.927-0.341-1.93-0.488-3.102-0.544-0.947-1.069-1.885-1.578-2.823-3.578-19.889-0.465-3.857-2.901-38.229-0.302-0.87-2.483-19.751-2.542-20.46-0.701-0.894-1.359-1.788-2.051-2.665-2.62 8.857-4.816 32.1-4.97 37.869-0.885-1.192-1.736-2.411-2.56-3.62v-1.63c-0.991-1.744-1.946-3.489-2.928-5.216-0.438 0.517-1.306 1.543-1.745 2.06-0.955 0-1.885-9e-3 -2.796-9e-3 -0.71-0.71-1.394-1.42-2.069-2.13-0.827-5.187-0.922-3.934-1.999-19.093-1.271-3.673-0.465-7.609-0.877-11.405-1.201-3.384-0.535-7.013-0.877-10.51-0.824-2.7-0.728-5.54-1.166-8.293-0.21-0.359-0.622-1.078-0.833-1.438-0.622-3.147-0.456-6.373-0.631-9.555-1.056-2.973-1.705-15.787-1.762-16.656-1.704-4.872-1.165-33.567-5.321-44.54l-0.377 9e-3c-0.237 0.579-0.701 1.736-0.938 2.323-0.401 3.921-11.044 109.35-11.711 112.52l-0.71 9e-3c-0.251-7.498 9e-3 -3.82-1.201-9.651h-1.236c-1.98 7.546-1.844 6.61-2.121 9.073-0.254 0.622-0.771 1.867-1.026 2.481-1.078-0.421-2.121-0.85-3.156-1.271-3.451 12.972-2.154 26.149-5.549 58.154-5.163 0.21-10.326 0.272-15.472 9e-3 -2.367-4.585 0.263-10.046-1.674-14.788-5.048-49.685-2.675-22.48-9.038-64.474-0.368 0.368-1.096 1.104-1.464 1.473-3.2 24.397-3.796 53.375-3.866 54.244-0.902 2.444-0.812 2.981-0.71 23.546-4.628 0.21-9.257 0.202-13.877 9e-3 -0.062-1.098-0.753-10.145-3.41-19.96-1.609-6.088-2.241-34.338-5.531-45.399-0.386 0.403-1.157 1.218-1.543 1.622 0 2e-3 -2.428 17.821-2.428 17.821-1.87 7.96-2.043 7.751-2.209 12.123-0.894 1.359-1.823 2.682-2.779 3.989-1.026-0.78-2.016-1.552-3.024-2.297-4.94 16.27-1.404 25.036-3.831 32.049-1.745 9e-3 -3.48 0.018-5.198 0.07-0.149-4.059 0.605-8.249-0.693-12.176-0.596-4.664 0.579-9.494-0.877-14.026-0.543-4.365 0.509-8.897-0.868-13.149-0.245-2.98-0.219-5.97-0.184-8.959h-0.798c-0.097 1.525-0.175 3.051-0.281 4.585-1.043 3.042-0.675 6.285-0.666 9.441h-0.885c-0.454-35.146-2.288-72.71-9.792-140.65-0.693-1.175-1.359-2.332-2.043-3.489-1.043 1.411-2.042 2.84-2.954 4.33-0.744 4.308-0.526 3.106-1.56 7.153-3.447 12.335-8.898 66.727-8.898 66.727-0.359 3.498 0.307 7.135-0.877 10.519-2.297 22.912 0.443 23.804-2.604 35.932-0.184 2.639-0.044 5.347-0.894 7.89-0.228 3.051-0.158 6.101-0.368 9.152-1.499 4.83-0.237 9.949-0.877 14.902-1.569 5.409-0.167 11.124-0.877 16.647-0.517 1.683-0.728 3.427-0.912 5.172-6.645 0.202-13.289 0.254-19.925-0.044 0.064-10.529-0.526-4.443-0.973-12.334l-0.701 9e-3c-0.965 7.442-1.078 2.9-0.973 12.272-1.183-9e-3 -2.349-9e-3 -3.506 0 0.078-9.359-1.521-16.3-2.042-19.811-3.15 1.808-4.963 16.633-5.119 19.899-5.987 0.254-11.974 0.228-17.953-0.035-2.68-8.301 0.155-12.807-1.885-20.022-0.649-4.944 0.631-10.072-0.877-14.902-0.28-3.629-0.088-7.276-0.35-10.905-0.735-2.102-1.517-17.095-2.06-19.715-1.139-4.529-1.144-4.594-1.289-6.811-0.833-1.219-1.674-2.428-2.533-3.62-0.026-0.394-0.088-1.192-0.114-1.587-1.131-2.095-2.358-4.129-3.813-6.005-0.894 0.955-1.762 1.911-2.63 2.875-0.491 0-1.473-9e-3 -1.964-9e-3 -0.281 0.579-0.833 1.744-1.113 2.323-0.044 2.393 0.018 4.839-0.78 7.127-0.517 8.012 0.14 16.051-0.359 24.054-1.709 4.69 0.307 9.827-1.403 14.517-0.175 2.288-0.202 4.585-0.193 6.881-0.43 0.377-1.297 1.131-1.727 1.516 9e-3 -2.682 0.245-5.453-0.71-8.012-0.596-4.655 0.57-9.485-0.877-14.026-0.438-5.382 0.079-10.782-0.359-16.165-1.587-5.698-0.149-11.712-0.876-17.532-1.394-4.251-0.333-8.784-0.868-13.149-0.903-2.358-0.754-4.909-0.728-7.381-0.429-0.368-1.297-1.122-1.727-1.49-0.272 4.699 0.71 9.564-0.701 14.131-0.421 3.787 0.385 7.723-0.877 11.396-0.552 4.366 0.526 8.898-0.877 13.149-0.368 4.506 0.018 9.029-0.35 13.535-1.438 4.769-0.421 9.818-0.701 14.709h-0.868c-9e-3 -2.867 0.289-5.829-0.71-8.573-0.245-3.34-0.123-6.688-0.351-10.028-1.349-3.85-2.513-33.865-5.347-39.938-4.096 0.324-4.685-1.352-7.083-16.191-0.859-3.445-0.482-7.022-0.675-10.528-5.99-19.969-5.779-31.074-8.74-43.006-0.412 0.377-1.236 1.14-1.648 1.516-4.042 68.84-13.256 161-13.438 161.87-6.241 0.263-12.483 0.281-18.724-0.018-2.084-7.236 0.044-0.063-2.472-11.072-1.704 1.184-2.333 2.852-3.27 11.072-6.54 0.281-13.088 0.272-19.627 0.035-0.289-0.605-0.859-1.815-1.148-2.419-0.438-5.567 0.754-11.308-0.745-16.752-0.657-4.953 0.623-10.081-0.885-14.902-0.316-3.918-0.044-7.863-0.351-11.781-1.175-3.384-0.543-7.013-0.868-10.519-1.201-3.375-0.543-7.013-0.877-10.519-1.105-3.094-0.622-6.426-0.885-9.634-0.991-2.823-0.675-5.838-0.885-8.766-0.64-1.823-0.737-3.752-0.807-5.654-0.412-0.377-1.236-1.122-1.648-1.49-0.023 1.517 0.6 9.192-2.016 20.118-2.092-3.749-2.373-11.288-2.568-14.727-0.728-2.095-0.719-4.33-0.728-6.513-0.412-0.377-1.236-1.122-1.648-1.49-0.017 2.384 0.105 4.839-0.745 7.118-1.625 13.049-1.923 57.246-2.113 60.871-1.254 3.524 9e-3 7.513-2.086 10.808-3.055-13.191-3.982-41.883-4.041-42.752-0.195-0.562-2.542-23.345-2.577-24.352h-0.684c-0.074 0.87-1.059 13.181-1.639 14.709-0.324 3.927-0.052 7.863-0.359 11.79-1.806 5.26 0.403 10.993-1.403 16.261-0.333 4.444-0.14 8.906-0.175 13.359l-0.85-0.026c-9e-3 -2.402-0.035-4.804-0.21-7.197-1.955-6.715 0.561-13.929-1.394-20.644-0.421-5.093 0.061-10.212-0.359-15.297-1.534-5.119-0.202-10.546-0.877-15.779-1.341-3.962-0.386-8.196-0.868-12.272-1.473-4.856-0.368-10.02-0.745-15.007-0.281-0.587-0.85-1.753-1.131-2.332l-0.342-0.026c-2.383 6.384-1.846 9.872-4.725 15.043-1.087-0.053-2.156-0.097-3.217-0.14-0.297 2.566-0.568 6.574-3.226 12.614-1.078-0.456-2.139-0.912-3.173-1.385-0.903 1.043-1.753 2.121-2.568 3.226-1.541 14.346-1.612 25.276-6.522 59.863-0.64 1.394-1.613 2.568-2.902 3.384-0.643-9.977-2.268-14.232-2.901-20.381-0.395-0.368-1.192-1.113-1.587-1.482-3.995 25.967-3.614 31.519-5.628 38.86l-0.526 9e-3c-5.004-29.024-4.245-32.066-6.592-40.692-1.964 0.307-3.165 1.56-3.463 3.506-1.455 1.648-2.858 3.34-4.068 5.172-0.113 0.869-5.441 26.261-5.242 38.194-7.206 0.316-14.42 0.281-21.626 0-1.59-6.96-1.588-22.528-4.032-40.043-2.449 4.247-1.567 9.163-3.401 17.199h-0.622c-0.096-1.999-0.167-4.024-0.798-5.943-0.193-2.463-0.228-4.935-0.403-7.398-0.214-0.596-2.541-21.185-2.551-21.389-0.342-0.368-1.034-1.096-1.376-1.464-2.624 7.092-1.98 15.125-3.936 40.762-0.943 2.679-1.212 14.307-2.463 18.251l-0.579-9e-3c-0.263-0.587-0.797-1.762-1.069-2.349-0.044-2.393 0.018-4.839-0.798-7.127-0.482-4.076 0.456-8.31-0.877-12.264-0.543-4.374 0.526-8.906-0.876-13.149-0.272-3.629-0.088-7.276-0.351-10.905-2.209-6.347 1.236-13.623-2.226-19.618-1.659 10.114-0.922 6.007-1.289 12.115-1.324 3.962-0.395 8.196-0.868 12.272-1.648 4.401 0.228 9.24-1.394 13.64-0.263 3.27-0.202 6.557-0.184 9.835l-0.859 9e-3c0-2.7 9e-3 -5.409-0.202-8.091 0 0-1.894-14.814-3.559-26.64-1.025 2.161-2.494 6.353-3.419 11.457-0.71 1.201-1.42 2.411-2.148 3.603-3.406-7.194-4.001-15.55-4.295-17.699-5.625-12.505-4.562-25.342-7.67-33.671h-0.403c-3.503 9.782 0.435 1.884-6.005 38.317-0.184 0.359-0.552 1.087-0.728 1.446-0.324 1.727-0.57 3.463-0.841 5.198-0.947 3.717-0.395 7.583-0.719 11.361-1.289 3.664-0.473 7.6-0.885 11.396-0.594 1.9-1.634 10.122-1.718 10.993-1.122 0.745-2.244 1.473-3.349 2.218-0.386 5.626 0.13 1.269-1.175 7.714-3.953 0.175-7.907 0.175-11.852 0.044-0.105-2.051-0.158-4.129-0.842-6.075-0.412-3.796 0.395-7.732-0.885-11.396-0.333-3.498 0.307-7.127-0.859-10.51-0.491-6.548 0.123-13.123-0.368-19.671 0 0-5.516-54.514-8.845-67.306h-1.473c0.015 4.792-0.944 14.581-1.595 16.463-0.351 3.498 0.307 7.136-0.877 10.519-0.491 4.076 0.465 8.31-0.877 12.272-0.491 4.076 0.456 8.31-0.877 12.272-0.28 3.629-0.079 7.276-0.35 10.905-1.262 3.673-0.465 7.609-0.868 11.396-1.289 3.664-0.473 7.6-0.877 11.396-1.289 3.664-0.482 7.6-0.877 11.387-1.429 4.243-0.351 8.784-0.894 13.149-0.517 1.683-0.728 3.427-0.912 5.163-3.629 0.123-7.249 0.123-10.861 9e-3 -0.359-1.131-0.719-2.253-1.078-3.357-0.554-15.475 0.663-21.354-0.815-25.474-0.498-7.528-0.096-59.18-5.654-78.719-6.429-1.051-3.223-11.691-7.057-21.424l-0.438 0.018c-4.443 43.319-2.365 60.076-3.857 78.211-1.63 4.401 0.21 9.231-1.385 13.64-0.184 2.463-0.219 4.935-0.395 7.399-0.666 2.007-0.736 4.138-0.824 6.241-0.245 0.64-0.745 1.928-0.99 2.568-0.351-0.359-1.061-1.096-1.411-1.455-0.134-6.652-0.225-0.761-1.166-13-1.403-3.839 0.079-8.056-1.359-11.887-0.342-4.436-0.149-8.897-0.184-13.342h-1.622c-0.042 0.869-1.142 13.049-1.709 14.709-0.246 3.34-0.114 6.688-0.351 10.028-1.402 4.243-0.342 8.775-0.877 13.14-1.473 4.541-0.281 9.371-0.885 14.026-0.999 2.761-0.728 5.724-0.71 8.599-0.438-9e-3 -1.297-9e-3 -1.736-0.018-0.091-1.768-2.814-61.555-2.814-61.555-0.038-0.109-5.456-50.812-6.908-56.26-0.359 0.386-1.078 1.148-1.446 1.534-1.054 4.726-0.995 2.579-1.157 9.371-0.298-0.026-0.885-0.07-1.183-0.096-0.938-1.324-1.928-2.612-2.919-3.892-2.823 14.314-4.439 36.549-5.97 44.873-0.184 0.359-0.552 1.078-0.736 1.438-0.281 1.359-0.526 2.735-0.754 4.103h-0.657c0.028-7.733-1.59-17.163-2.849-24.896-0.517 0.877-1.026 1.762-1.516 2.647-0.018 2.972 0.315 6.049-0.71 8.906-0.605 4.655 0.561 9.485-0.876 14.026-0.754 6.11 0.71 12.404-0.868 18.409-0.131 1.63-0.202 3.279-0.254 4.918-0.544 0.938-1.087 1.876-1.613 2.814-0.987 9.186-0.327-1.6-1.14 11.931-1.245 3.673-0.473 7.6-0.859 11.396-1.201 3.34-0.657 6.934-0.701 10.397-6.732 0.254-13.456 0.298-20.179 9e-3 -0.044-3.471 0.473-7.057-0.684-10.405-0.649-4.944 0.622-10.072-0.885-14.894-0.307-3.927-0.052-7.863-0.351-11.782-1.613-5.996-0.149-12.316-0.868-18.435-1.339-5.048-0.518-5.014-3.603-14.981-1.154-4.75-0.731-4.479-2.621-9.59-0.351 0.368-1.069 1.105-1.429 1.473-3.59 28.719-2.637 24.356-5.26 29.112-0.601 4.918-1.642 5.918-2.831 13-0.71 1.183-1.403 2.358-2.113 3.533-0.281-0.684-0.833-2.051-1.113-2.735-0.247-4.495-0.408-4.871-1.166-8.196-0.386 0-1.175 0-1.569-9e-3 -0.044 1.359-0.105 2.717-0.158 4.076-3.067-6.436-0.91-7.799-1.823-18.286-1.446-4.541-0.272-9.371-0.868-14.026-1.026-2.849-0.71-5.908-0.745-8.871-0.289-0.587-0.868-1.744-1.166-2.332h-0.473c-0.83 6.893-1.628 7.466-1.876 15.209-0.421-0.377-1.262-1.131-1.683-1.499-9e-3 -2.306-0.035-4.602-0.193-6.89-1.183-3.384-0.535-7.013-0.877-10.51-1.192-3.384-0.535-7.022-0.868-10.519-1.201-3.384-0.543-7.022-0.885-10.519 0 0-3.515-26.665-3.515-26.666-0.324-0.368-0.982-1.096-1.306-1.455-2.09 10.391-0.875 47.421-5.628 75.94-0.395-0.377-1.175-1.122-1.56-1.499-2.507-9.819-2.672-28.963-2.717-29.831-0.561-0.894-1.113-1.788-1.657-2.682-0.07 2.13-0.053 4.313-0.806 6.347-0.412 3.787 0.395 7.723-0.859 11.396-0.71 5.531 0.675 11.247-0.877 16.656-0.473 5.961 0.096 11.957-0.368 17.918-1.613 5.996-0.123 12.299-0.877 18.409-1.446 4.532-0.281 9.362-0.868 14.017-1.096 3.051-0.701 6.32-0.701 9.485h-5.251c-0.333-5.488 0.78-11.133-0.701-16.489-0.719-5.531 0.692-11.256-0.885-16.656-0.543-4.365 0.508-8.898-0.868-13.149-0.219-3.051-0.158-6.11-0.368-9.152-0.622-2.007-0.771-4.103-0.947-6.171-3.738-17.029-1.37-12.706-7.022-45.645-4.711-15.28-4.495-46.356-6.978-58.128-0.324-0.359-0.964-1.096-1.28-1.464-0.28 1.481-0.544 2.972-0.85 4.444-0.085 0.868-3.823 36.378-5.198 42.901-1.571 7.218-1.593 19.441-2.788 22.87-0.351 3.498 0.307 7.127-0.877 10.51-0.491 4.076 0.465 8.31-0.877 12.272-0.596 4.655 0.579 9.485-0.877 14.026-0.342 4.216-9e-3 8.451-0.351 12.658-1.464 4.541-0.272 9.371-0.885 14.026-0.561 1.727-0.719 3.533-0.868 5.33-0.368-0.351-1.105-1.052-1.473-1.411-3.32 19.616-1.334 18.132-1.867 29.296-13.421 0.193-26.842 0.28-40.254-0.018-0.494-1.729-3.729-21.553-4.655-33.583-1.297-3.559-0.026-7.46-1.359-11.01-0.193-2.761-0.184-5.523-0.368-8.275-1.578-5.707-0.14-11.711-0.877-17.532-0.529-1.612-1.765-12.284-1.858-13.158-1.105-4.006-0.342-8.188-0.763-12.264-1.657-6.566-0.105-13.465-0.885-20.162-1.639-6.566-0.105-13.465-0.877-20.162-1.613-5.987-0.131-12.29-0.877-18.4-1.455-4.541-0.28-9.371-0.868-14.026-0.85-2.288-0.763-4.742-0.789-7.127-0.281-0.587-0.824-1.753-1.096-2.332h-0.403c-0.551 5.654-1.974 21.699-6.867 143.01v84.684c1.97-18.939 4.281-41.148 4.281-41.149 0.855-2.511 0.714-5.184 0.706-7.788z"/> +</svg> diff --git a/sdk/tests/fixtures/sample4.svg b/sdk/tests/fixtures/sample4.svg @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'> +<svg enable-background="new 0 0 2014 1674.641" version="1.1" viewBox="0 0 2014 1674.641" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"> + <metadata> + <c2pa:manifest xmlns:c2pa="http://c2pa.org/manifest">c29tZSB0ZXN0IGRhdGE=</c2pa:manifest> + </metadata> + <path d="m44.883 1173.3c0 169.58 92.136 317.37 229.08 396.59v-793.53c-136.94 79.216-229.08 227.37-229.08 396.94z"/> + <path d="m1496.5 173.21c-338.54-181.18-640.46-181.19-978.98 0-115.34 61.726-232.1 201.31-232.1 348.66v1048h125.99v-1048c0-100.78 121.24-229.18 225.54-272.38 280.15-116.04 460-116.04 740.11 0 104.3 43.203 225.54 171.6 225.54 272.38v1048h125.99v-1048c0-147.36-116.76-286.94-232.1-348.66z"/> + <path d="m1740 776.38v793.53c136.94-79.214 229.08-227 229.08-396.59 1e-3 -169.57-92.133-317.73-229.08-396.94z"/> + <path d="m541.72 709.03h-70.645c-27.201 0-49.252 22.051-49.252 49.253v829.79c0 27.201 22.05 49.252 49.252 49.252h70.645c27.201 0 49.252-22.051 49.252-49.252v-829.79c0-27.202-22.05-49.253-49.252-49.253z"/> + <path d="m1542 709.03h-70.646c-27.2 0-49.252 22.051-49.252 49.253v829.79c0 27.201 22.052 49.252 49.252 49.252h70.646c27.2 0 49.252-22.051 49.252-49.252v-829.79c-1e-3 -27.202-22.052-49.253-49.252-49.253z"/> + <path d="m595.97 1132.8c4.322-0.219 8.643-0.184 12.965 0 0.197 4.557 3.624 24.404 4.471 95.602 0 1.438 0.298 2.849 0.728 4.225 0.691 13.2-0.668 21.337 0.868 26.298 0.386 12.904 0.053 25.834 0.158 38.746h10.467c10.735-37.493 8.785-86.788 9.941-115.01 1.07-3.103 0.614-6.426 0.868-9.634 0.615-2.041 1.597-9.992 1.753-11.519 0.368 0.377 1.113 1.131 1.481 1.508 0.079 4.827 0.295 5.098 2.007 12.833 0.342 0 1.034-9e-3 1.376-9e-3 0.421-1.771 0.877-3.515 1.315-5.277l0.657-9e-3c0.202 4.611-0.719 9.38 0.684 13.859 0.491 4.374-0.508 8.889 0.85 13.149 0.114 1.683 0.175 3.357 0.263 5.049 0.552-0.92 1.122-1.85 1.692-2.77 0.052-13.129 0.408 0.674 0.894-17.479 0.307 0.552 0.92 1.657 1.227 2.209 0.316 0.018 0.938 0.044 1.245 0.061 2.638-11.892 2.56-18.294 3.647-51.86 8.152-0.21 16.314-0.263 24.466 0.044 0.018 2.314-0.018 4.681 0.78 6.89 0.677 13.255 1.433 10.704 2.016 18.926 1.554 2.913 2.279 3.212 5.295 20.714 0.394 0 1.183 0 1.578 9e-3 0.454-9.931 0.998-1.96 0.964-13.184l0.868 9e-3c0.096 3.734-0.561 7.609 0.684 11.229 0.298 3.498-0.307 7.127 0.868 10.519 0.307 3.498-0.307 7.135 0.877 10.519 0.307 3.498-0.307 7.127 0.877 10.519 0.368 3.787-0.394 7.714 0.868 11.387 0.438 4.085-0.465 8.319 0.877 12.281 0.298 3.498-0.298 7.127 0.868 10.519 0.949 15.108 1.515 17.226 2.858 21.626 0.421-0.412 1.262-1.227 1.692-1.639-0.187-3.823 0.79-9.648 3.98-14.937 0.701 1.157 1.411 2.332 2.13 3.498 0.018 0.412 0.053 1.236 0.07 1.648 0.894 1.657 1.815 3.357 3.261 4.629 0.52-4.824 0.271-3.677 1.525-8.757 0.155-0.87 1.114-8.042 1.552-15.709 1.21-3.691 0.491-7.609 0.85-11.405 1.341-3.962 0.43-8.196 0.877-12.272 0 0 6.76-64.946 7.004-68.375 1.008-2.77 0.728-5.742 0.728-8.617 1.727 0 3.471 0 5.225-9e-3 0 3.173-0.377 6.443 0.701 9.494 0.152 3.522 0.148 41.365 1.753 46.478 0.447 4.076-0.473 8.31 0.877 12.272 0.289 3.498-0.281 7.118 0.85 10.51 0.612 11.986 0.925 9.898 2.016 17.383 0.43 0.403 1.289 1.21 1.718 1.613 0.386-0.395 1.157-1.175 1.543-1.569 1.113-3.427 2.27-6.908 2.06-10.572 0.351 0.377 1.043 1.122 1.394 1.49 0.307 0.982 0.631 1.972 0.982 2.954 9e-3 0.824 0.035 1.648 0.07 2.472 0.736 0.912 1.499 1.841 2.279 2.744 1.695-6.242 1.537-5.465 2.367-9.923 0.394-0.377 1.175-1.122 1.569-1.499-0.026 1.455-0.035 2.928-0.044 4.392 0.43 0.386 1.28 1.148 1.709 1.534 2.593-15.316 1.515-32.185 4.646-59.933h0.517c0.257 2.44 0.455 5.251 2.656 12.053 0.04 1.752 2.071 29.42 6.46 44.391 0.377-0.386 1.131-1.166 1.508-1.56 2.511-20.088 0.17 17.604 5.33-78.561l0.622 9e-3c0.403 1.569 0.842 3.13 1.28 4.699 0.395-0.377 1.175-1.148 1.569-1.534 0.153-5.981 0.067-4.293 1.201-9.362 6.539-0.281 13.079-0.289 19.627-0.018 1.093 6.281 3.062 17.853 3.831 24.948 0.403-0.377 1.219-1.14 1.631-1.525 0.133-3.59 1.852-14.417 2.919-17.453 0.377 0.377 1.14 1.122 1.516 1.499-0.034 12.962 0.097 3.675 0.947 13.657 0.421 9e-3 1.253 9e-3 1.674 9e-3 0-1.762 9e-3 -3.524 0.026-5.277h1.718c0.237 4.602-0.701 9.371 0.71 13.85 0.386 3.787-0.412 7.732 0.877 11.405 0.298 3.498-0.298 7.127 0.859 10.519 0.455 8.447 1.972 19.645 2.595 21.906-0.347 7.057 9.094 35.294 9.888 54.043 0.429-0.395 1.28-1.192 1.709-1.587 0.061-1.42 0.14-2.84 0.263-4.252 0.885-2.831 0.675-5.829 0.85-8.748 1.131-3.401 0.561-7.022 0.859-10.519 1.166-3.393 0.561-7.022 0.876-10.519 1.157-3.392 0.57-7.022 0.877-10.528 0.697-2.038 1.719-16.578 1.78-17.532 0.086-0.331 0.978-5.454 1.788-8.924 2.042-3.033 3.515-6.399 5.26-9.599 0.324 0.368 0.964 1.122 1.289 1.499 2.896 10.614 5.277 40.7 5.277 40.701 1.101 16.794 2.417 23.952 2.866 28.779 0.412 0.394 1.245 1.175 1.657 1.569 0.071-0.869 8.706-77.968 8.959-86.556 0.561-1.779 1.105-3.559 1.727-5.312 0.412 0.394 1.227 1.183 1.639 1.578 9e-3 0.57 0.017 1.701 0.017 2.27 0.403 0 1.219-9e-3 1.622-9e-3 1.24-7.203 1.236-3.14 2.121-13.342 1.017-3.41 0.5-7.013 0.798-10.51 0.666-1.929 0.745-3.971 0.85-5.987 1.981-0.017 3.98-0.017 5.987-0.061 0.738 15.014 3.226 81.388 5.452 98.881 2.794-5.344 3.327-18.194 3.313-23.046 0.526 0.92 1.061 1.841 1.604 2.779 1.005 8.595 1.291 4.766 1.955 12.124 0.412-0.386 1.236-1.166 1.657-1.56 0.07-1.131 0.167-2.253 0.29-3.375 3.077-10.573 4.023-80.044 5.303-85.767 11.203-0.333 22.415-0.307 33.618-0.026 2.519 9.333-0.185 1.64 3.165 10.651 1.008-0.035 2.025-0.07 3.059-0.105 3.706 11.86 4.661 36.592 6.136 41.086 0.237 3.743-0.228 7.618 1.324 11.159 1.832-0.973 3.532-4.164 5.768-2.27 0.311 1.769 1.139 5.743 1.674 7.74 0.096 1.99 0.052 4.006 0.342 5.987 0.955 1.779 3.182 1.078 4.839 1.35 2.515 9.18 4.175 17.629 4.865 22.318 3.942-2.424 4.424-5.052 6.049-11.527 1.105-1.981 2.621-3.682 4.252-5.251-9e-3 -1.131-9e-3 -2.262 9e-3 -3.384 0.386 0.377 1.149 1.131 1.534 1.508 0.333 1.797 0.754 3.577 1.21 5.365 0.359-0.386 1.087-1.166 1.446-1.552 0.649-2.376 1.403-4.716 2.183-7.048 0.316 0.377 0.947 1.148 1.262 1.525 1.645 7.111 0.322 3.568 2.06 21.065 0.429-0.395 1.271-1.175 1.692-1.56 0.026-1.999 0.07-3.997 0.21-5.987 1.481-4.83 0.263-9.949 0.868-14.902 1.639-6.285 0.123-12.877 0.877-19.285 1.683-7.451 0.07-15.218 0.877-22.792 1.674-7.451 0.07-15.227 0.868-22.8 1.219-3.62 0.596-7.495 0.684-11.229h4.979c2.486 11.696-0.075 13.584 1.867 20.004 0.438 4.076-0.456 8.31 0.859 12.281 0.71 13.915 2.152 15.948 2.875 21.74 0.403 0.395 1.201 1.192 1.604 1.587 2.183-6.047-0.403-11.103 3.024-22.283 0.316 0 0.964-9e-3 1.289-9e-3 0.07 1.339 1.748 15.516 3.112 20.688 3.189-6.785 3.21-47.072 3.2-54.051 9.432-0.307 18.882-0.272 28.323 0.026 0.079 1.105 0.202 2.297 0.833 3.27 1.219-0.359 1.613-2.13 1.201-3.226 0.684 0 2.042 0.017 2.726 0.017 0.193 1.701 0.421 3.401 0.912 5.049 0.745 6.11-0.754 12.422 0.877 18.417 0.622 4.944-0.64 10.081 0.885 14.902 0.438 4.076-0.464 8.31 0.859 12.272 0.587 5.786-0.649 11.747 1.157 17.392 0.342 0.359 1.017 1.087 1.35 1.455 0.973-1.806 2.025-3.576 3.296-5.207 2.899 9.94 3.548 20.233 4.146 30.129 2.753-4.301 1.495-7.983 6.198-43.26 1.07-1.122 2.156-2.227 3.261-3.331 1.546-13.203 1.281-18.245 4.804-28.139 0.719 1.183 1.42 2.384 2.139 3.594 6.049 34.545 2.934 63.483 10.432 89.607-0.114 5.067 1.359 9.993 1.052 15.06-0.079 2.016 0.035 4.059 0.719 5.978 0.359 6.487 0.088 12.991 0.131 19.496-0.026 3.813 1.113 7.53 1.017 11.361h1.639c0.973-2.533 1.026-5.233 0.991-7.898-0.096-2.682 0.728-5.26 0.842-7.907 0.149-3.305-0.272-6.627 0.342-9.897 1.052-4.874 0.254-9.879 0.719-14.806 1.306-3.962 0.421-8.188 0.859-12.264 1.069-3.103 0.631-6.426 0.885-9.634 0.71-2.034 0.736-4.199 0.763-6.329 0.535-0.92 1.087-1.841 1.657-2.753 9e-3 0.693 9e-3 2.078 9e-3 2.77 0.421 0.394 1.254 1.192 1.674 1.595 1.881-6.653 1.973-16.337 2.025-17.208 1.324-3.962 0.421-8.188 0.868-12.273 1.508-4.821 0.263-9.949 0.885-14.902 1.534-5.119 0.21-10.537 0.868-15.779 1.438-4.777 0.43-9.836 0.684-14.736l0.579 9e-3c4.58 20.94-1.764 21.194 8.003 57.654 0.035 3.743 0.315 7.477 1.14 11.133 0.771 1.227 1.56 2.446 2.375 3.664 2.187-18.959 0.397-16.093 1.254-24.413 1.525-5.119 0.228-10.537 0.876-15.779 1.525-5.119 0.219-10.537 0.876-15.779 1.482-5.155 0.351-10.607 0.728-15.884 3.781-1.853 5.985-19.261 6.241-23.449 11.896-0.298 23.809-0.289 35.704 0 0.018 2.314-0.044 4.69 0.789 6.899 1.385 15.795 1.043 17.456 1.034 20.679 0.438-0.386 1.297-1.14 1.727-1.525 0.313-2.188-1e-3 -0.959 1.21-4.953h1.157c7.495 34.264 1.885 96.567 10.537 107.57 4.66-9.896 5.508-48.83 5.75-50.764 0.339-1.036 7.792-66.458 7.846-67.323h0.719c0.315 5.479-0.815 11.133 0.701 16.48 0.219 3.217-0.175 6.522 0.833 9.634 0.096 1.35 0.175 2.709 0.263 4.076 1.113 1.78 2.262 3.55 3.349 5.356 0.07 1.85 0.202 3.717 0.806 5.487 0.237 3.208-0.21 6.539 0.877 9.643 0.438 4.076-0.456 8.301 0.868 12.264 0.64 5.233-0.666 10.659 0.868 15.779 0.666 5.531-0.693 11.238 0.877 16.656 0.617 10.342-0.612 22.781 0.868 27.175 0.123 1.99 0.167 3.989 0.21 5.987 0.429 0.394 1.28 1.183 1.7 1.578 3.526-23.595 3.006-33.165 5.417-44.234l0.526 0.026c2.215 9.395 0.757 4.828 3.042 12.623 0.377-0.377 1.14-1.14 1.517-1.516 2.464-9.857 5.395-72.486 5.408-73.354l0.71 9e-3c0.044 0.447 0.131 1.341 0.167 1.779 0.605-0.018 1.814-0.07 2.411-0.088 2.367 8.449 6.032 43.591 6.075 43.725 0.517 4.348-1.026 10.134 3.296 12.982 12.367-46.276 9.589-65.188 12.904-92.683 11.51-0.228 23.028-0.228 34.547-0.018 0.316 1.131 0.649 2.253 1.008 3.375 0 1e-3 5.242 57.934 5.242 57.935 2.528 35.686-1.458 8.139 4.62 49.809 0.412 0.395 1.227 1.175 1.639 1.56 0.117-0.869 4.225-26.319 4.576-34.135 3.883 7.547 1.348 7.067 5.198 13.465 0.955-0.395 1.964-0.64 3.016-0.745 0.631 0.833 1.245 1.701 1.832 2.604 0.465 0.044 1.394 0.131 1.859 0.175 0.631-1.087 1.262-2.165 1.92-3.243 1.331-5.87 3.349-16.952 3.752-22.327l0.71 0.018c0.324 6.355-0.877 12.877 0.666 19.11 0.64 5.242-0.666 10.659 0.885 15.788 0.281 3.498-0.272 7.109 0.842 10.511 0.105 1.525 0.175 3.059 0.263 4.593h1.683c0.03-0.868 2.321-25.659 4.655-35.354 0.359 0.368 1.069 1.113 1.42 1.481 0.018 2.183 0.026 4.409 0.763 6.496 0.184 2.928-0.088 5.943 0.894 8.766 0.257 4.097-0.504 3.463 2.165 21.81 1.771-3.524 1.604-7.469 1.744-11.299 1.411-4.55 0.307-9.362 0.868-14.026 1.604-5.996 0.149-12.299 0.877-18.409 1.63-6.285 0.114-12.877 0.868-19.285 1.587-5.698 0.158-11.711 0.868-17.532 1.56-6.399 0.324-13.114 0.693-19.645 0.429-0.377 1.28-1.14 1.709-1.525-0.026 2.393-0.105 4.856 0.728 7.153 0.193 2.919-0.096 5.943 0.885 8.757 0.456 4.076-0.473 8.319 0.877 12.281 0.447 4.076-0.473 8.31 0.877 12.264 0.368 3.796-0.386 7.723 0.868 11.405 1.036 17.235 1.642 16.652 2.972 21.792 0.43 0.438 1.297 1.306 1.727 1.736 0.815-1.21 1.63-2.419 2.446-3.638 2.923-13.017 5.323-15.63 6.426-33.039 1.186-4.545 6.856-57.745 6.873-58.619 13.114-0.333 26.237-0.298 39.351 0-0.07 25.539-0.242 25.33 0.701 27.92 0.701 5.83-0.737 11.843 0.868 17.541 0.622 4.944-0.64 10.072 0.885 14.902 0.491 4.374-0.517 8.898 0.859 13.158 0.545 12.053 0.783 6.687 1.964 16.629 1.858 1.052 3.901 1.981 5.076 3.892 10.959-1.859 6.983-29.405 13.724-64.092v-42.917c-0.174-0.927-0.341-1.93-0.488-3.102-0.544-0.947-1.069-1.885-1.578-2.823-3.578-19.889-0.465-3.857-2.901-38.229-0.302-0.87-2.483-19.751-2.542-20.46-0.701-0.894-1.359-1.788-2.051-2.665-2.62 8.857-4.816 32.1-4.97 37.869-0.885-1.192-1.736-2.411-2.56-3.62v-1.63c-0.991-1.744-1.946-3.489-2.928-5.216-0.438 0.517-1.306 1.543-1.745 2.06-0.955 0-1.885-9e-3 -2.796-9e-3 -0.71-0.71-1.394-1.42-2.069-2.13-0.827-5.187-0.922-3.934-1.999-19.093-1.271-3.673-0.465-7.609-0.877-11.405-1.201-3.384-0.535-7.013-0.877-10.51-0.824-2.7-0.728-5.54-1.166-8.293-0.21-0.359-0.622-1.078-0.833-1.438-0.622-3.147-0.456-6.373-0.631-9.555-1.056-2.973-1.705-15.787-1.762-16.656-1.704-4.872-1.165-33.567-5.321-44.54l-0.377 9e-3c-0.237 0.579-0.701 1.736-0.938 2.323-0.401 3.921-11.044 109.35-11.711 112.52l-0.71 9e-3c-0.251-7.498 9e-3 -3.82-1.201-9.651h-1.236c-1.98 7.546-1.844 6.61-2.121 9.073-0.254 0.622-0.771 1.867-1.026 2.481-1.078-0.421-2.121-0.85-3.156-1.271-3.451 12.972-2.154 26.149-5.549 58.154-5.163 0.21-10.326 0.272-15.472 9e-3 -2.367-4.585 0.263-10.046-1.674-14.788-5.048-49.685-2.675-22.48-9.038-64.474-0.368 0.368-1.096 1.104-1.464 1.473-3.2 24.397-3.796 53.375-3.866 54.244-0.902 2.444-0.812 2.981-0.71 23.546-4.628 0.21-9.257 0.202-13.877 9e-3 -0.062-1.098-0.753-10.145-3.41-19.96-1.609-6.088-2.241-34.338-5.531-45.399-0.386 0.403-1.157 1.218-1.543 1.622 0 2e-3 -2.428 17.821-2.428 17.821-1.87 7.96-2.043 7.751-2.209 12.123-0.894 1.359-1.823 2.682-2.779 3.989-1.026-0.78-2.016-1.552-3.024-2.297-4.94 16.27-1.404 25.036-3.831 32.049-1.745 9e-3 -3.48 0.018-5.198 0.07-0.149-4.059 0.605-8.249-0.693-12.176-0.596-4.664 0.579-9.494-0.877-14.026-0.543-4.365 0.509-8.897-0.868-13.149-0.245-2.98-0.219-5.97-0.184-8.959h-0.798c-0.097 1.525-0.175 3.051-0.281 4.585-1.043 3.042-0.675 6.285-0.666 9.441h-0.885c-0.454-35.146-2.288-72.71-9.792-140.65-0.693-1.175-1.359-2.332-2.043-3.489-1.043 1.411-2.042 2.84-2.954 4.33-0.744 4.308-0.526 3.106-1.56 7.153-3.447 12.335-8.898 66.727-8.898 66.727-0.359 3.498 0.307 7.135-0.877 10.519-2.297 22.912 0.443 23.804-2.604 35.932-0.184 2.639-0.044 5.347-0.894 7.89-0.228 3.051-0.158 6.101-0.368 9.152-1.499 4.83-0.237 9.949-0.877 14.902-1.569 5.409-0.167 11.124-0.877 16.647-0.517 1.683-0.728 3.427-0.912 5.172-6.645 0.202-13.289 0.254-19.925-0.044 0.064-10.529-0.526-4.443-0.973-12.334l-0.701 9e-3c-0.965 7.442-1.078 2.9-0.973 12.272-1.183-9e-3 -2.349-9e-3 -3.506 0 0.078-9.359-1.521-16.3-2.042-19.811-3.15 1.808-4.963 16.633-5.119 19.899-5.987 0.254-11.974 0.228-17.953-0.035-2.68-8.301 0.155-12.807-1.885-20.022-0.649-4.944 0.631-10.072-0.877-14.902-0.28-3.629-0.088-7.276-0.35-10.905-0.735-2.102-1.517-17.095-2.06-19.715-1.139-4.529-1.144-4.594-1.289-6.811-0.833-1.219-1.674-2.428-2.533-3.62-0.026-0.394-0.088-1.192-0.114-1.587-1.131-2.095-2.358-4.129-3.813-6.005-0.894 0.955-1.762 1.911-2.63 2.875-0.491 0-1.473-9e-3 -1.964-9e-3 -0.281 0.579-0.833 1.744-1.113 2.323-0.044 2.393 0.018 4.839-0.78 7.127-0.517 8.012 0.14 16.051-0.359 24.054-1.709 4.69 0.307 9.827-1.403 14.517-0.175 2.288-0.202 4.585-0.193 6.881-0.43 0.377-1.297 1.131-1.727 1.516 9e-3 -2.682 0.245-5.453-0.71-8.012-0.596-4.655 0.57-9.485-0.877-14.026-0.438-5.382 0.079-10.782-0.359-16.165-1.587-5.698-0.149-11.712-0.876-17.532-1.394-4.251-0.333-8.784-0.868-13.149-0.903-2.358-0.754-4.909-0.728-7.381-0.429-0.368-1.297-1.122-1.727-1.49-0.272 4.699 0.71 9.564-0.701 14.131-0.421 3.787 0.385 7.723-0.877 11.396-0.552 4.366 0.526 8.898-0.877 13.149-0.368 4.506 0.018 9.029-0.35 13.535-1.438 4.769-0.421 9.818-0.701 14.709h-0.868c-9e-3 -2.867 0.289-5.829-0.71-8.573-0.245-3.34-0.123-6.688-0.351-10.028-1.349-3.85-2.513-33.865-5.347-39.938-4.096 0.324-4.685-1.352-7.083-16.191-0.859-3.445-0.482-7.022-0.675-10.528-5.99-19.969-5.779-31.074-8.74-43.006-0.412 0.377-1.236 1.14-1.648 1.516-4.042 68.84-13.256 161-13.438 161.87-6.241 0.263-12.483 0.281-18.724-0.018-2.084-7.236 0.044-0.063-2.472-11.072-1.704 1.184-2.333 2.852-3.27 11.072-6.54 0.281-13.088 0.272-19.627 0.035-0.289-0.605-0.859-1.815-1.148-2.419-0.438-5.567 0.754-11.308-0.745-16.752-0.657-4.953 0.623-10.081-0.885-14.902-0.316-3.918-0.044-7.863-0.351-11.781-1.175-3.384-0.543-7.013-0.868-10.519-1.201-3.375-0.543-7.013-0.877-10.519-1.105-3.094-0.622-6.426-0.885-9.634-0.991-2.823-0.675-5.838-0.885-8.766-0.64-1.823-0.737-3.752-0.807-5.654-0.412-0.377-1.236-1.122-1.648-1.49-0.023 1.517 0.6 9.192-2.016 20.118-2.092-3.749-2.373-11.288-2.568-14.727-0.728-2.095-0.719-4.33-0.728-6.513-0.412-0.377-1.236-1.122-1.648-1.49-0.017 2.384 0.105 4.839-0.745 7.118-1.625 13.049-1.923 57.246-2.113 60.871-1.254 3.524 9e-3 7.513-2.086 10.808-3.055-13.191-3.982-41.883-4.041-42.752-0.195-0.562-2.542-23.345-2.577-24.352h-0.684c-0.074 0.87-1.059 13.181-1.639 14.709-0.324 3.927-0.052 7.863-0.359 11.79-1.806 5.26 0.403 10.993-1.403 16.261-0.333 4.444-0.14 8.906-0.175 13.359l-0.85-0.026c-9e-3 -2.402-0.035-4.804-0.21-7.197-1.955-6.715 0.561-13.929-1.394-20.644-0.421-5.093 0.061-10.212-0.359-15.297-1.534-5.119-0.202-10.546-0.877-15.779-1.341-3.962-0.386-8.196-0.868-12.272-1.473-4.856-0.368-10.02-0.745-15.007-0.281-0.587-0.85-1.753-1.131-2.332l-0.342-0.026c-2.383 6.384-1.846 9.872-4.725 15.043-1.087-0.053-2.156-0.097-3.217-0.14-0.297 2.566-0.568 6.574-3.226 12.614-1.078-0.456-2.139-0.912-3.173-1.385-0.903 1.043-1.753 2.121-2.568 3.226-1.541 14.346-1.612 25.276-6.522 59.863-0.64 1.394-1.613 2.568-2.902 3.384-0.643-9.977-2.268-14.232-2.901-20.381-0.395-0.368-1.192-1.113-1.587-1.482-3.995 25.967-3.614 31.519-5.628 38.86l-0.526 9e-3c-5.004-29.024-4.245-32.066-6.592-40.692-1.964 0.307-3.165 1.56-3.463 3.506-1.455 1.648-2.858 3.34-4.068 5.172-0.113 0.869-5.441 26.261-5.242 38.194-7.206 0.316-14.42 0.281-21.626 0-1.59-6.96-1.588-22.528-4.032-40.043-2.449 4.247-1.567 9.163-3.401 17.199h-0.622c-0.096-1.999-0.167-4.024-0.798-5.943-0.193-2.463-0.228-4.935-0.403-7.398-0.214-0.596-2.541-21.185-2.551-21.389-0.342-0.368-1.034-1.096-1.376-1.464-2.624 7.092-1.98 15.125-3.936 40.762-0.943 2.679-1.212 14.307-2.463 18.251l-0.579-9e-3c-0.263-0.587-0.797-1.762-1.069-2.349-0.044-2.393 0.018-4.839-0.798-7.127-0.482-4.076 0.456-8.31-0.877-12.264-0.543-4.374 0.526-8.906-0.876-13.149-0.272-3.629-0.088-7.276-0.351-10.905-2.209-6.347 1.236-13.623-2.226-19.618-1.659 10.114-0.922 6.007-1.289 12.115-1.324 3.962-0.395 8.196-0.868 12.272-1.648 4.401 0.228 9.24-1.394 13.64-0.263 3.27-0.202 6.557-0.184 9.835l-0.859 9e-3c0-2.7 9e-3 -5.409-0.202-8.091 0 0-1.894-14.814-3.559-26.64-1.025 2.161-2.494 6.353-3.419 11.457-0.71 1.201-1.42 2.411-2.148 3.603-3.406-7.194-4.001-15.55-4.295-17.699-5.625-12.505-4.562-25.342-7.67-33.671h-0.403c-3.503 9.782 0.435 1.884-6.005 38.317-0.184 0.359-0.552 1.087-0.728 1.446-0.324 1.727-0.57 3.463-0.841 5.198-0.947 3.717-0.395 7.583-0.719 11.361-1.289 3.664-0.473 7.6-0.885 11.396-0.594 1.9-1.634 10.122-1.718 10.993-1.122 0.745-2.244 1.473-3.349 2.218-0.386 5.626 0.13 1.269-1.175 7.714-3.953 0.175-7.907 0.175-11.852 0.044-0.105-2.051-0.158-4.129-0.842-6.075-0.412-3.796 0.395-7.732-0.885-11.396-0.333-3.498 0.307-7.127-0.859-10.51-0.491-6.548 0.123-13.123-0.368-19.671 0 0-5.516-54.514-8.845-67.306h-1.473c0.015 4.792-0.944 14.581-1.595 16.463-0.351 3.498 0.307 7.136-0.877 10.519-0.491 4.076 0.465 8.31-0.877 12.272-0.491 4.076 0.456 8.31-0.877 12.272-0.28 3.629-0.079 7.276-0.35 10.905-1.262 3.673-0.465 7.609-0.868 11.396-1.289 3.664-0.473 7.6-0.877 11.396-1.289 3.664-0.482 7.6-0.877 11.387-1.429 4.243-0.351 8.784-0.894 13.149-0.517 1.683-0.728 3.427-0.912 5.163-3.629 0.123-7.249 0.123-10.861 9e-3 -0.359-1.131-0.719-2.253-1.078-3.357-0.554-15.475 0.663-21.354-0.815-25.474-0.498-7.528-0.096-59.18-5.654-78.719-6.429-1.051-3.223-11.691-7.057-21.424l-0.438 0.018c-4.443 43.319-2.365 60.076-3.857 78.211-1.63 4.401 0.21 9.231-1.385 13.64-0.184 2.463-0.219 4.935-0.395 7.399-0.666 2.007-0.736 4.138-0.824 6.241-0.245 0.64-0.745 1.928-0.99 2.568-0.351-0.359-1.061-1.096-1.411-1.455-0.134-6.652-0.225-0.761-1.166-13-1.403-3.839 0.079-8.056-1.359-11.887-0.342-4.436-0.149-8.897-0.184-13.342h-1.622c-0.042 0.869-1.142 13.049-1.709 14.709-0.246 3.34-0.114 6.688-0.351 10.028-1.402 4.243-0.342 8.775-0.877 13.14-1.473 4.541-0.281 9.371-0.885 14.026-0.999 2.761-0.728 5.724-0.71 8.599-0.438-9e-3 -1.297-9e-3 -1.736-0.018-0.091-1.768-2.814-61.555-2.814-61.555-0.038-0.109-5.456-50.812-6.908-56.26-0.359 0.386-1.078 1.148-1.446 1.534-1.054 4.726-0.995 2.579-1.157 9.371-0.298-0.026-0.885-0.07-1.183-0.096-0.938-1.324-1.928-2.612-2.919-3.892-2.823 14.314-4.439 36.549-5.97 44.873-0.184 0.359-0.552 1.078-0.736 1.438-0.281 1.359-0.526 2.735-0.754 4.103h-0.657c0.028-7.733-1.59-17.163-2.849-24.896-0.517 0.877-1.026 1.762-1.516 2.647-0.018 2.972 0.315 6.049-0.71 8.906-0.605 4.655 0.561 9.485-0.876 14.026-0.754 6.11 0.71 12.404-0.868 18.409-0.131 1.63-0.202 3.279-0.254 4.918-0.544 0.938-1.087 1.876-1.613 2.814-0.987 9.186-0.327-1.6-1.14 11.931-1.245 3.673-0.473 7.6-0.859 11.396-1.201 3.34-0.657 6.934-0.701 10.397-6.732 0.254-13.456 0.298-20.179 9e-3 -0.044-3.471 0.473-7.057-0.684-10.405-0.649-4.944 0.622-10.072-0.885-14.894-0.307-3.927-0.052-7.863-0.351-11.782-1.613-5.996-0.149-12.316-0.868-18.435-1.339-5.048-0.518-5.014-3.603-14.981-1.154-4.75-0.731-4.479-2.621-9.59-0.351 0.368-1.069 1.105-1.429 1.473-3.59 28.719-2.637 24.356-5.26 29.112-0.601 4.918-1.642 5.918-2.831 13-0.71 1.183-1.403 2.358-2.113 3.533-0.281-0.684-0.833-2.051-1.113-2.735-0.247-4.495-0.408-4.871-1.166-8.196-0.386 0-1.175 0-1.569-9e-3 -0.044 1.359-0.105 2.717-0.158 4.076-3.067-6.436-0.91-7.799-1.823-18.286-1.446-4.541-0.272-9.371-0.868-14.026-1.026-2.849-0.71-5.908-0.745-8.871-0.289-0.587-0.868-1.744-1.166-2.332h-0.473c-0.83 6.893-1.628 7.466-1.876 15.209-0.421-0.377-1.262-1.131-1.683-1.499-9e-3 -2.306-0.035-4.602-0.193-6.89-1.183-3.384-0.535-7.013-0.877-10.51-1.192-3.384-0.535-7.022-0.868-10.519-1.201-3.384-0.543-7.022-0.885-10.519 0 0-3.515-26.665-3.515-26.666-0.324-0.368-0.982-1.096-1.306-1.455-2.09 10.391-0.875 47.421-5.628 75.94-0.395-0.377-1.175-1.122-1.56-1.499-2.507-9.819-2.672-28.963-2.717-29.831-0.561-0.894-1.113-1.788-1.657-2.682-0.07 2.13-0.053 4.313-0.806 6.347-0.412 3.787 0.395 7.723-0.859 11.396-0.71 5.531 0.675 11.247-0.877 16.656-0.473 5.961 0.096 11.957-0.368 17.918-1.613 5.996-0.123 12.299-0.877 18.409-1.446 4.532-0.281 9.362-0.868 14.017-1.096 3.051-0.701 6.32-0.701 9.485h-5.251c-0.333-5.488 0.78-11.133-0.701-16.489-0.719-5.531 0.692-11.256-0.885-16.656-0.543-4.365 0.508-8.898-0.868-13.149-0.219-3.051-0.158-6.11-0.368-9.152-0.622-2.007-0.771-4.103-0.947-6.171-3.738-17.029-1.37-12.706-7.022-45.645-4.711-15.28-4.495-46.356-6.978-58.128-0.324-0.359-0.964-1.096-1.28-1.464-0.28 1.481-0.544 2.972-0.85 4.444-0.085 0.868-3.823 36.378-5.198 42.901-1.571 7.218-1.593 19.441-2.788 22.87-0.351 3.498 0.307 7.127-0.877 10.51-0.491 4.076 0.465 8.31-0.877 12.272-0.596 4.655 0.579 9.485-0.877 14.026-0.342 4.216-9e-3 8.451-0.351 12.658-1.464 4.541-0.272 9.371-0.885 14.026-0.561 1.727-0.719 3.533-0.868 5.33-0.368-0.351-1.105-1.052-1.473-1.411-3.32 19.616-1.334 18.132-1.867 29.296-13.421 0.193-26.842 0.28-40.254-0.018-0.494-1.729-3.729-21.553-4.655-33.583-1.297-3.559-0.026-7.46-1.359-11.01-0.193-2.761-0.184-5.523-0.368-8.275-1.578-5.707-0.14-11.711-0.877-17.532-0.529-1.612-1.765-12.284-1.858-13.158-1.105-4.006-0.342-8.188-0.763-12.264-1.657-6.566-0.105-13.465-0.885-20.162-1.639-6.566-0.105-13.465-0.877-20.162-1.613-5.987-0.131-12.29-0.877-18.4-1.455-4.541-0.28-9.371-0.868-14.026-0.85-2.288-0.763-4.742-0.789-7.127-0.281-0.587-0.824-1.753-1.096-2.332h-0.403c-0.551 5.654-1.974 21.699-6.867 143.01v84.684c1.97-18.939 4.281-41.148 4.281-41.149 0.855-2.511 0.714-5.184 0.706-7.788z"/> +</svg>