packages feed

isobmff-builder 0.10.0.0 → 0.10.5.0

raw patch · 40 files changed

+6086/−371 lines, 40 filesdep +taggeddep +type-specdep −lensbinary-addedPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: tagged, type-spec

Dependencies removed: lens

API changes (from Hackage documentation)

- Data.ByteString.IsoBaseFileFormat.Boxes.Box: data BoxSizeExtension
- Data.ByteString.IsoBaseFileFormat.Boxes.Box: data BoxTypeExtension
- Data.ByteString.IsoBaseFileFormat.Boxes.Box: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent (Data.ByteString.IsoBaseFileFormat.Boxes.Box.Box cnt)
- Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields: [Default] :: Template o v
- Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields: type U32U64 c = SelectByVersion c (Scalar Word32) (Scalar Word64)
- Data.ByteString.IsoBaseFileFormat.Boxes.DataReference: data DataEntryUrl
- Data.ByteString.IsoBaseFileFormat.Boxes.DataReference: data DataEntryUrn
- Data.ByteString.IsoBaseFileFormat.Boxes.DataReference: dataEntryUrl :: Bool -> Maybe Text -> Box (FullBox DataEntryUrl 0)
- Data.ByteString.IsoBaseFileFormat.Boxes.DataReference: dataEntryUrn :: Bool -> Text -> Text -> Box (FullBox DataEntryUrn 0)
- Data.ByteString.IsoBaseFileFormat.Boxes.DataReference: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBox Data.ByteString.IsoBaseFileFormat.Boxes.DataReference.DataEntryUrl
- Data.ByteString.IsoBaseFileFormat.Boxes.DataReference: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBox Data.ByteString.IsoBaseFileFormat.Boxes.DataReference.DataEntryUrn
- Data.ByteString.IsoBaseFileFormat.Boxes.DataReference: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent Data.ByteString.IsoBaseFileFormat.Boxes.DataReference.DataEntryUrl
- Data.ByteString.IsoBaseFileFormat.Boxes.DataReference: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent Data.ByteString.IsoBaseFileFormat.Boxes.DataReference.DataEntryUrn
- Data.ByteString.IsoBaseFileFormat.Boxes.DataReference: instance Data.Default.Class.Default Data.ByteString.IsoBaseFileFormat.Boxes.DataReference.DataEntryUrl
- Data.ByteString.IsoBaseFileFormat.Boxes.DataReference: localMediaDataEntryUrl :: Box (FullBox DataEntryUrl 0)
- Data.ByteString.IsoBaseFileFormat.Boxes.Handler: TimedMetadataTrack :: HandlerType
- Data.ByteString.IsoBaseFileFormat.Boxes.Handler: [Handler] :: Constant (U32 "pre_defined") 0 :+ (HandlerType :+ (Constant (U32Arr "reserved" 3) '[0, 0, 0] :+ Template Text "")) -> Handler
- Data.ByteString.IsoBaseFileFormat.Boxes.Handler: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBox Data.ByteString.IsoBaseFileFormat.Boxes.Handler.Handler
- Data.ByteString.IsoBaseFileFormat.Boxes.Handler: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent Data.ByteString.IsoBaseFileFormat.Boxes.Handler.Handler
- Data.ByteString.IsoBaseFileFormat.Boxes.Handler: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent Data.ByteString.IsoBaseFileFormat.Boxes.Handler.HandlerType
- Data.ByteString.IsoBaseFileFormat.Boxes.Handler: instance Data.Default.Class.Default Data.ByteString.IsoBaseFileFormat.Boxes.Handler.Handler
- Data.ByteString.IsoBaseFileFormat.Boxes.Handler: instance Data.Default.Class.Default Data.ByteString.IsoBaseFileFormat.Boxes.Handler.HandlerType
- Data.ByteString.IsoBaseFileFormat.Boxes.Handler: newtype Handler
- Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader: NullMediaHeader :: NullMediaHeader
- Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader: [HintMediaHeader] :: U16 "maxPDUsize" :+ (U16 "avgPDUsize" :+ (U16 "maxbitrate" :+ (U16 "avgbitrate" :+ U32 "reserved"))) -> HintMediaHeader
- Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader: [SoundMediaHeader] :: Template (I16 "balance") 0 :+ Constant (U16 "reserved") 0 -> SoundMediaHeader
- Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader: [VideoMediaHeader] :: Template (U16 "graphicsmode") 0 :+ Template (U16Arr "opcolor" 3) '[0, 0, 0] -> VideoMediaHeader
- Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader: data NullMediaHeader
- Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader: hintMediaHeader :: HintMediaHeader -> Box (FullBox HintMediaHeader 0)
- Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBox Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader.HintMediaHeader
- Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBox Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader.NullMediaHeader
- Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBox Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader.SoundMediaHeader
- Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBox Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader.VideoMediaHeader
- Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader.HintMediaHeader
- Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader.NullMediaHeader
- Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader.SoundMediaHeader
- Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader.VideoMediaHeader
- Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader: instance Data.Default.Class.Default Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader.HintMediaHeader
- Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader: instance Data.Default.Class.Default Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader.NullMediaHeader
- Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader: instance Data.Default.Class.Default Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader.SoundMediaHeader
- Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader: instance Data.Default.Class.Default Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader.VideoMediaHeader
- Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader: newtype HintMediaHeader
- Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader: newtype SoundMediaHeader
- Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader: newtype VideoMediaHeader
- Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader: nullMediaHeader :: Box (FullBox NullMediaHeader 0)
- Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader: soundMediaHeader :: SoundMediaHeader -> Box (FullBox SoundMediaHeader 0)
- Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader: videoMediaHeader :: VideoMediaHeader -> Box (FullBox VideoMediaHeader 0)
- Data.ByteString.IsoBaseFileFormat.Boxes.Versioned: [OnV0] :: forall (v :: Nat ~> Type). IsBoxContent (v @@ 0) => v @@ 0 -> ApplyVersioned v
- Data.ByteString.IsoBaseFileFormat.Boxes.Versioned: [OnV1] :: forall (v :: Nat ~> Type). IsBoxContent (v @@ 1) => v @@ 1 -> ApplyVersioned v
- Data.ByteString.IsoBaseFileFormat.Boxes.Versioned: data ApplyVersioned (v' :: Nat ~> Type)
- Data.ByteString.IsoBaseFileFormat.Boxes.Versioned: data SelectByVersion :: (a -> Type) -> a -> a -> Nat ~> Type
- Data.ByteString.IsoBaseFileFormat.Boxes.Versioned: instance (Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent (b 0), Data.Default.Class.Default (b 0)) => Data.Default.Class.Default (Data.ByteString.IsoBaseFileFormat.Boxes.Versioned.VersionedBox b)
- Data.ByteString.IsoBaseFileFormat.Boxes.Versioned: instance (Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent (b Data.Singletons.@@ 0), Data.Default.Class.Default (b Data.Singletons.@@ 0)) => Data.Default.Class.Default (Data.ByteString.IsoBaseFileFormat.Boxes.Versioned.ApplyVersioned b)
- Data.ByteString.IsoBaseFileFormat.Boxes.Versioned: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent (Data.ByteString.IsoBaseFileFormat.Boxes.Versioned.ApplyVersioned c)
- Data.ByteString.IsoBaseFileFormat.Boxes.Versioned: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent (Data.ByteString.IsoBaseFileFormat.Boxes.Versioned.VersionedBox c)
- Data.ByteString.IsoBaseFileFormat.Brands.Dash: [_hdlr] :: SingleAudioTrackInit -> Handler
- Data.ByteString.IsoBaseFileFormat.Brands.Dash: [_mdhd] :: SingleAudioTrackInit -> MediaHeader 0
- Data.ByteString.IsoBaseFileFormat.Brands.Dash: [_mvhd] :: SingleAudioTrackInit -> MovieHeader 0
- Data.ByteString.IsoBaseFileFormat.Brands.Dash: [_smhd] :: SingleAudioTrackInit -> SoundMediaHeader
- Data.ByteString.IsoBaseFileFormat.Brands.Dash: [_tkhd] :: SingleAudioTrackInit -> TrackHeader 0
- Data.ByteString.IsoBaseFileFormat.Brands.Dash: instance Data.ByteString.IsoBaseFileFormat.Brands.Types.IsBrand (Data.ByteString.IsoBaseFileFormat.Brands.Dash.Dash v)
- Data.ByteString.IsoBaseFileFormat.Brands.Types: class IsBrand brand where type BoxLayout brand mediaBuilder _ t = boxBuilder t where {
+ Data.ByteString.IsoBaseFileFormat.Boxes.AudioSampleEntry: audioSampleEntry :: (KnownSymbol (BoxTypeSymbol (SampleEntry AudioTrack (AudioCoding c)))) => AudioCoding c -> U16 "data_reference_index" -> SampleEntry AudioTrack (AudioCoding c) -> Box (SampleEntry AudioTrack (AudioCoding c))
+ Data.ByteString.IsoBaseFileFormat.Boxes.AudioSampleEntry: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent (Data.ByteString.IsoBaseFileFormat.Boxes.SampleEntry.SampleEntry 'Data.ByteString.IsoBaseFileFormat.Boxes.Handler.AudioTrack (Data.ByteString.IsoBaseFileFormat.Boxes.AudioSampleEntry.AudioCoding c))
+ Data.ByteString.IsoBaseFileFormat.Boxes.AudioSampleEntry: instance Data.Default.Class.Default (Data.ByteString.IsoBaseFileFormat.Boxes.SampleEntry.SampleEntry 'Data.ByteString.IsoBaseFileFormat.Boxes.Handler.AudioTrack (Data.ByteString.IsoBaseFileFormat.Boxes.AudioSampleEntry.AudioCoding c))
+ Data.ByteString.IsoBaseFileFormat.Boxes.AudioSampleEntry: type DefaultSoundSamplerate = 48000
+ Data.ByteString.IsoBaseFileFormat.Boxes.Box: ListContent :: [contentType] -> ListContent sizeType contentType
+ Data.ByteString.IsoBaseFileFormat.Boxes.Box: instance (GHC.Num.Num sizeType, Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent sizeType, Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent contentType) => Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent (Data.ByteString.IsoBaseFileFormat.Boxes.Box.ListContent sizeType contentType)
+ Data.ByteString.IsoBaseFileFormat.Boxes.Box: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBox cnt => Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent (Data.ByteString.IsoBaseFileFormat.Boxes.Box.Box cnt)
+ Data.ByteString.IsoBaseFileFormat.Boxes.Box: instance Data.Default.Class.Default (Data.ByteString.IsoBaseFileFormat.Boxes.Box.BoxContent b) => Data.Default.Class.Default (Data.ByteString.IsoBaseFileFormat.Boxes.Box.Box b)
+ Data.ByteString.IsoBaseFileFormat.Boxes.Box: instance Data.Default.Class.Default Data.ByteString.Internal.ByteString
+ Data.ByteString.IsoBaseFileFormat.Boxes.Box: instance Data.Default.Class.Default Data.Text.Internal.Text
+ Data.ByteString.IsoBaseFileFormat.Boxes.Box: instance forall k (sizeTupe :: k) contentType. Data.Default.Class.Default (Data.ByteString.IsoBaseFileFormat.Boxes.Box.ListContent sizeTupe contentType)
+ Data.ByteString.IsoBaseFileFormat.Boxes.Box: instance forall k c (s :: k). Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent c => Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent (Data.Tagged.Tagged s c)
+ Data.ByteString.IsoBaseFileFormat.Boxes.Box: instance forall k c (s :: k). Data.Default.Class.Default c => Data.Default.Class.Default (Data.Tagged.Tagged s c)
+ Data.ByteString.IsoBaseFileFormat.Boxes.Box: newtype BoxSizeExtension
+ Data.ByteString.IsoBaseFileFormat.Boxes.Box: newtype BoxTypeExtension
+ Data.ByteString.IsoBaseFileFormat.Boxes.Box: newtype ListContent sizeType contentType
+ Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields: [FixSizeText] :: Text -> FixSizeText len label
+ Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields: [Template] :: Template o v
+ Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields: [U32Text] :: Word32 -> U32Text label
+ Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent (Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields.U32Text label)
+ Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields: instance Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields.IsTextSize len => Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent (Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields.FixSizeText len label)
+ Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields: instance Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields.IsTextSize len => Data.Default.Class.Default (Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields.FixSizeText len label)
+ Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields: instance Data.Default.Class.Default (Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields.U32Text label)
+ Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields: instance Data.String.IsString (Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields.U32Text label)
+ Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields: instance GHC.TypeLits.KnownSymbol str => Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields.FromTypeLit (Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields.U32Text label) str
+ Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields: newtype FixSizeText (len :: Nat) (label :: Symbol)
+ Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields: newtype U32Text (label :: Symbol)
+ Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields: type IsTextSize len = (KnownNat len, 1 <= len, len <= 255)
+ Data.ByteString.IsoBaseFileFormat.Boxes.DataEntryUrl: data DataEntryUrl
+ Data.ByteString.IsoBaseFileFormat.Boxes.DataEntryUrl: dataEntryUrl :: Bool -> Maybe Text -> Box (FullBox DataEntryUrl 0)
+ Data.ByteString.IsoBaseFileFormat.Boxes.DataEntryUrl: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBox Data.ByteString.IsoBaseFileFormat.Boxes.DataEntryUrl.DataEntryUrl
+ Data.ByteString.IsoBaseFileFormat.Boxes.DataEntryUrl: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent Data.ByteString.IsoBaseFileFormat.Boxes.DataEntryUrl.DataEntryUrl
+ Data.ByteString.IsoBaseFileFormat.Boxes.DataEntryUrl: instance Data.Default.Class.Default Data.ByteString.IsoBaseFileFormat.Boxes.DataEntryUrl.DataEntryUrl
+ Data.ByteString.IsoBaseFileFormat.Boxes.DataEntryUrl: localMediaDataEntryUrl :: Box (FullBox DataEntryUrl 0)
+ Data.ByteString.IsoBaseFileFormat.Boxes.DataEntryUrn: data DataEntryUrn
+ Data.ByteString.IsoBaseFileFormat.Boxes.DataEntryUrn: dataEntryUrn :: Bool -> Text -> Text -> Box (FullBox DataEntryUrn 0)
+ Data.ByteString.IsoBaseFileFormat.Boxes.DataEntryUrn: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBox Data.ByteString.IsoBaseFileFormat.Boxes.DataEntryUrn.DataEntryUrn
+ Data.ByteString.IsoBaseFileFormat.Boxes.DataEntryUrn: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent Data.ByteString.IsoBaseFileFormat.Boxes.DataEntryUrn.DataEntryUrn
+ Data.ByteString.IsoBaseFileFormat.Boxes.FullBox: instance (GHC.TypeLits.KnownNat version, Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBox t, Data.Default.Class.Default (Data.ByteString.IsoBaseFileFormat.Boxes.Box.BoxContent t)) => Data.Default.Class.Default (Data.ByteString.IsoBaseFileFormat.Boxes.FullBox.FullBox t version)
+ Data.ByteString.IsoBaseFileFormat.Boxes.Handler: TimedMetaDataTrack :: HandlerType
+ Data.ByteString.IsoBaseFileFormat.Boxes.Handler: audioTrackHandler :: Handler AudioTrack
+ Data.ByteString.IsoBaseFileFormat.Boxes.Handler: auxilliaryVideoTrackHandler :: Handler AuxilliaryVideoTrack
+ Data.ByteString.IsoBaseFileFormat.Boxes.Handler: data Handler (t :: HandlerType)
+ Data.ByteString.IsoBaseFileFormat.Boxes.Handler: hintTrackHandler :: Handler HintTrack
+ Data.ByteString.IsoBaseFileFormat.Boxes.Handler: instance Data.Default.Class.Default (Data.ByteString.IsoBaseFileFormat.Boxes.Handler.Handler t)
+ Data.ByteString.IsoBaseFileFormat.Boxes.Handler: instance GHC.TypeLits.KnownSymbol (Data.ByteString.IsoBaseFileFormat.Boxes.Handler.HandlerTypeCode t) => Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBox (Data.ByteString.IsoBaseFileFormat.Boxes.Handler.Handler t)
+ Data.ByteString.IsoBaseFileFormat.Boxes.Handler: instance GHC.TypeLits.KnownSymbol (Data.ByteString.IsoBaseFileFormat.Boxes.Handler.HandlerTypeCode t) => Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent (Data.ByteString.IsoBaseFileFormat.Boxes.Handler.Handler t)
+ Data.ByteString.IsoBaseFileFormat.Boxes.Handler: namedAudioTrackHandler :: Text -> Handler AudioTrack
+ Data.ByteString.IsoBaseFileFormat.Boxes.Handler: namedAuxilliaryVideoTrackHandler :: Text -> Handler AuxilliaryVideoTrack
+ Data.ByteString.IsoBaseFileFormat.Boxes.Handler: namedHintTrackHandler :: Text -> Handler HintTrack
+ Data.ByteString.IsoBaseFileFormat.Boxes.Handler: namedTimedMetadataTrackHandler :: Text -> Handler TimedMetaDataTrack
+ Data.ByteString.IsoBaseFileFormat.Boxes.Handler: namedVideoTrackHandler :: Text -> Handler VideoTrack
+ Data.ByteString.IsoBaseFileFormat.Boxes.Handler: timedMetadataTrackHandler :: Handler TimedMetaDataTrack
+ Data.ByteString.IsoBaseFileFormat.Boxes.Handler: videoTrackHandler :: Handler VideoTrack
+ Data.ByteString.IsoBaseFileFormat.Boxes.HintMediaHeader: [HintMediaHeader] :: U16 "maxPDUsize" :+ (U16 "avgPDUsize" :+ (U16 "maxbitrate" :+ (U16 "avgbitrate" :+ U32 "reserved"))) -> HintMediaHeader
+ Data.ByteString.IsoBaseFileFormat.Boxes.HintMediaHeader: hintMediaHeader :: HintMediaHeader -> Box (FullBox HintMediaHeader 0)
+ Data.ByteString.IsoBaseFileFormat.Boxes.HintMediaHeader: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBox Data.ByteString.IsoBaseFileFormat.Boxes.HintMediaHeader.HintMediaHeader
+ Data.ByteString.IsoBaseFileFormat.Boxes.HintMediaHeader: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent Data.ByteString.IsoBaseFileFormat.Boxes.HintMediaHeader.HintMediaHeader
+ Data.ByteString.IsoBaseFileFormat.Boxes.HintMediaHeader: instance Data.Default.Class.Default Data.ByteString.IsoBaseFileFormat.Boxes.HintMediaHeader.HintMediaHeader
+ Data.ByteString.IsoBaseFileFormat.Boxes.HintMediaHeader: newtype HintMediaHeader
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: BitRate :: (U32 "bufferSizeDB" :+ (U32 "maxBitrate" :+ U32 "avgBitrate")) -> BitRate
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: UriField :: (Tagged "theURI" Text) -> UriField
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: UriInitField :: (Tagged "uri_initialization_data" ByteString) -> UriInitField
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: bitRateBox :: BitRate -> Box BitRate
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBox Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry.BitRate
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBox Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry.UriField
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBox Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry.UriInitField
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent (Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry.MetaDataCoding "mett")
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent (Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry.MetaDataCoding "metx")
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent (Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry.MetaDataCoding "urim")
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry.BitRate
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry.UriField
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry.UriInitField
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: instance Data.Default.Class.Default (Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry.MetaDataCoding "mett")
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: instance Data.Default.Class.Default (Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry.MetaDataCoding "metx")
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: instance Data.Default.Class.Default (Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry.MetaDataCoding "urim")
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: instance Data.Default.Class.Default Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry.BitRate
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: instance Data.Default.Class.Default Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry.UriField
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: instance Data.Default.Class.Default Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry.UriInitField
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: metaDataSampleEntry :: MetaDataCoding c -> U16 "data_reference_index" -> SampleEntry TimedMetaDataTrack (MetaDataCoding c) -> Box (SampleEntry TimedMetaDataTrack (MetaDataCoding c))
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: newtype BitRate
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: newtype UriField
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: newtype UriInitField
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: type Uri = FullBox UriField 0
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: type UriInit = FullBox UriInitField 0
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: uriBox :: Text -> Box Uri
+ Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry: uriInitBox :: ByteString -> Box UriInit
+ Data.ByteString.IsoBaseFileFormat.Boxes.NullMediaHeader: NullMediaHeader :: NullMediaHeader
+ Data.ByteString.IsoBaseFileFormat.Boxes.NullMediaHeader: data NullMediaHeader
+ Data.ByteString.IsoBaseFileFormat.Boxes.NullMediaHeader: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBox Data.ByteString.IsoBaseFileFormat.Boxes.NullMediaHeader.NullMediaHeader
+ Data.ByteString.IsoBaseFileFormat.Boxes.NullMediaHeader: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent Data.ByteString.IsoBaseFileFormat.Boxes.NullMediaHeader.NullMediaHeader
+ Data.ByteString.IsoBaseFileFormat.Boxes.NullMediaHeader: instance Data.Default.Class.Default Data.ByteString.IsoBaseFileFormat.Boxes.NullMediaHeader.NullMediaHeader
+ Data.ByteString.IsoBaseFileFormat.Boxes.NullMediaHeader: nullMediaHeader :: Box (FullBox NullMediaHeader 0)
+ Data.ByteString.IsoBaseFileFormat.Boxes.SampleDescription: SampleDescription :: (U32 "entry_count") -> SampleDescription handlerType
+ Data.ByteString.IsoBaseFileFormat.Boxes.SampleDescription: instance forall k (h :: k). Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBox (Data.ByteString.IsoBaseFileFormat.Boxes.SampleDescription.SampleDescription h)
+ Data.ByteString.IsoBaseFileFormat.Boxes.SampleDescription: instance forall k (handlerType :: k). Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent (Data.ByteString.IsoBaseFileFormat.Boxes.SampleDescription.SampleDescription handlerType)
+ Data.ByteString.IsoBaseFileFormat.Boxes.SampleDescription: instance forall k (handlerType :: k). Data.Default.Class.Default (Data.ByteString.IsoBaseFileFormat.Boxes.SampleDescription.SampleDescription handlerType)
+ Data.ByteString.IsoBaseFileFormat.Boxes.SampleDescription: newtype SampleDescription handlerType
+ Data.ByteString.IsoBaseFileFormat.Boxes.SampleDescription: sampleDescription :: (KnownNat (Length ts)) => Boxes ts -> Box (ContainerBox (FullBox (SampleDescription h) 0) ts)
+ Data.ByteString.IsoBaseFileFormat.Boxes.SampleEntry: [SampleEntryFields] :: Constant (U8Arr "reserved" 6) '[0, 0, 0, 0, 0, 0] :+ (U16 "data_reference_index" :+ a) -> SampleEntryFields a
+ Data.ByteString.IsoBaseFileFormat.Boxes.SampleEntry: data MatchSampleEntry (handlerType :: HandlerType)
+ Data.ByteString.IsoBaseFileFormat.Boxes.SampleEntry: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent a => Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent (Data.ByteString.IsoBaseFileFormat.Boxes.SampleEntry.SampleEntryFields a)
+ Data.ByteString.IsoBaseFileFormat.Boxes.SampleEntry: instance Data.Default.Class.Default a => Data.Default.Class.Default (Data.ByteString.IsoBaseFileFormat.Boxes.SampleEntry.SampleEntryFields a)
+ Data.ByteString.IsoBaseFileFormat.Boxes.SampleEntry: instance forall k (handlertype :: Data.ByteString.IsoBaseFileFormat.Boxes.Handler.HandlerType) (format :: k). (Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent (Data.ByteString.IsoBaseFileFormat.Boxes.SampleEntry.SampleEntry handlertype format), GHC.TypeLits.KnownSymbol (Data.ByteString.IsoBaseFileFormat.Boxes.Box.BoxTypeSymbol (Data.ByteString.IsoBaseFileFormat.Boxes.SampleEntry.SampleEntry handlertype format))) => Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBox (Data.ByteString.IsoBaseFileFormat.Boxes.SampleEntry.SampleEntry handlertype format)
+ Data.ByteString.IsoBaseFileFormat.Boxes.SampleEntry: newtype SampleEntryFields a
+ Data.ByteString.IsoBaseFileFormat.Boxes.SampleEntry: sampleEntry :: forall (handlertype :: HandlerType) (format :: k). U16 "data_reference_index" -> SampleEntry handlertype format -> Box (SampleEntry handlertype format)
+ Data.ByteString.IsoBaseFileFormat.Boxes.SampleTable: SampleTable :: SampleTable
+ Data.ByteString.IsoBaseFileFormat.Boxes.SampleTable: data SampleTable
+ Data.ByteString.IsoBaseFileFormat.Boxes.SampleTable: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBox Data.ByteString.IsoBaseFileFormat.Boxes.SampleTable.SampleTable
+ Data.ByteString.IsoBaseFileFormat.Boxes.SampleTable: sampleTable :: Boxes ts -> Box (ContainerBox SampleTable ts)
+ Data.ByteString.IsoBaseFileFormat.Boxes.SoundMediaHeader: [SoundMediaHeader] :: Template (I16 "balance") 0 :+ Constant (U16 "reserved") 0 -> SoundMediaHeader
+ Data.ByteString.IsoBaseFileFormat.Boxes.SoundMediaHeader: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBox Data.ByteString.IsoBaseFileFormat.Boxes.SoundMediaHeader.SoundMediaHeader
+ Data.ByteString.IsoBaseFileFormat.Boxes.SoundMediaHeader: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent Data.ByteString.IsoBaseFileFormat.Boxes.SoundMediaHeader.SoundMediaHeader
+ Data.ByteString.IsoBaseFileFormat.Boxes.SoundMediaHeader: instance Data.Default.Class.Default Data.ByteString.IsoBaseFileFormat.Boxes.SoundMediaHeader.SoundMediaHeader
+ Data.ByteString.IsoBaseFileFormat.Boxes.SoundMediaHeader: newtype SoundMediaHeader
+ Data.ByteString.IsoBaseFileFormat.Boxes.SoundMediaHeader: soundMediaHeader :: SoundMediaHeader -> Box (FullBox SoundMediaHeader 0)
+ Data.ByteString.IsoBaseFileFormat.Boxes.TimeToSample: TimeToSampleTable :: (ListContent (U32 "entry_count") SttsEntry) -> TimeToSampleTable
+ Data.ByteString.IsoBaseFileFormat.Boxes.TimeToSample: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBox Data.ByteString.IsoBaseFileFormat.Boxes.TimeToSample.TimeToSampleTable
+ Data.ByteString.IsoBaseFileFormat.Boxes.TimeToSample: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent Data.ByteString.IsoBaseFileFormat.Boxes.TimeToSample.TimeToSampleTable
+ Data.ByteString.IsoBaseFileFormat.Boxes.TimeToSample: instance Data.Default.Class.Default Data.ByteString.IsoBaseFileFormat.Boxes.TimeToSample.TimeToSampleTable
+ Data.ByteString.IsoBaseFileFormat.Boxes.TimeToSample: newtype TimeToSampleTable
+ Data.ByteString.IsoBaseFileFormat.Boxes.TimeToSample: timeToSample :: [SttsEntry] -> Box TimeToSample
+ Data.ByteString.IsoBaseFileFormat.Boxes.TimeToSample: type SttsEntry = U32 "sample_count" :+ U32 "sample_delta"
+ Data.ByteString.IsoBaseFileFormat.Boxes.TimeToSample: type TimeToSample = FullBox TimeToSampleTable 0
+ Data.ByteString.IsoBaseFileFormat.Boxes.VideoMediaHeader: [VideoMediaHeader] :: Template (U16 "graphicsmode") 0 :+ Template (U16Arr "opcolor" 3) '[0, 0, 0] -> VideoMediaHeader
+ Data.ByteString.IsoBaseFileFormat.Boxes.VideoMediaHeader: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBox Data.ByteString.IsoBaseFileFormat.Boxes.VideoMediaHeader.VideoMediaHeader
+ Data.ByteString.IsoBaseFileFormat.Boxes.VideoMediaHeader: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent Data.ByteString.IsoBaseFileFormat.Boxes.VideoMediaHeader.VideoMediaHeader
+ Data.ByteString.IsoBaseFileFormat.Boxes.VideoMediaHeader: instance Data.Default.Class.Default Data.ByteString.IsoBaseFileFormat.Boxes.VideoMediaHeader.VideoMediaHeader
+ Data.ByteString.IsoBaseFileFormat.Boxes.VideoMediaHeader: newtype VideoMediaHeader
+ Data.ByteString.IsoBaseFileFormat.Boxes.VideoMediaHeader: videoMediaHeader :: VideoMediaHeader -> Box (FullBox VideoMediaHeader 0)
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: IsFullRange :: FullRangeFlag
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: IsNotFullRange :: FullRangeFlag
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: OnScreenColours :: ColourTypeProfile
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: RestrictedICCProfile :: ColourTypeProfile
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: UnrestrictedICCProfile :: ColourTypeProfile
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: [CleanAperture] :: U32 "cleanApertureWidthN" :+ (U32 "cleanApertureWidthD" :+ (U32 "cleanApertureHeightN" :+ (U32 "cleanApertureHeightD" :+ (U32 "horizOffN" :+ (U32 "horizOffD" :+ (U32 "vertOffN" :+ U32 "vertOffD")))))) -> CleanAperture
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: [ColourInformation] :: Constant (U32Text "colour_type") (ColourTypeCode profile) :+ ColourType profile -> ColourInformation profile
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: [PixelAspectRatio] :: U32 "hSpacing" :+ U32 "vSpacing" -> PixelAspectRatio
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: [SomeColourInformation] :: forall (profile :: ColourTypeProfile). IsBoxContent (ColourInformation profile) => ColourInformation profile -> SomeColourInformation
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: cleanAperture :: CleanAperture -> Box CleanAperture
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: colourInformation :: ColourType p -> ColourInformation p
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: data ColourTypeProfile
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: data FullRangeFlag
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: data SomeColourInformation
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: instance (GHC.TypeLits.KnownSymbol (Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry.ColourTypeCode profile), Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent (Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry.ColourType profile)) => Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent (Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry.ColourInformation profile)
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBox Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry.CleanAperture
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBox Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry.PixelAspectRatio
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBox Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry.SomeColourInformation
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent (Data.ByteString.IsoBaseFileFormat.Boxes.SampleEntry.SampleEntry 'Data.ByteString.IsoBaseFileFormat.Boxes.Handler.VideoTrack (Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry.VideoCoding c))
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry.CleanAperture
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry.FullRangeFlag
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry.PixelAspectRatio
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry.SomeColourInformation
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: instance Data.ByteString.IsoBaseFileFormat.Boxes.Box.IsBoxContent [Data.ByteString.IsoBaseFileFormat.Boxes.Box.Box Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry.SomeColourInformation]
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: instance Data.Default.Class.Default (Data.ByteString.IsoBaseFileFormat.Boxes.SampleEntry.SampleEntry 'Data.ByteString.IsoBaseFileFormat.Boxes.Handler.VideoTrack (Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry.VideoCoding c))
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: instance Data.Default.Class.Default (Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry.ColourType profile) => Data.Default.Class.Default (Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry.ColourInformation profile)
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: instance Data.Default.Class.Default Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry.CleanAperture
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: instance Data.Default.Class.Default Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry.FullRangeFlag
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: instance Data.Default.Class.Default Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry.PixelAspectRatio
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: newtype CleanAperture
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: newtype ColourInformation (profile :: ColourTypeProfile)
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: newtype PixelAspectRatio
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: onScreenColourInformation :: ColourType OnScreenColours -> ColourInformation OnScreenColours
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: pixelAspectRatio :: PixelAspectRatio -> Box PixelAspectRatio
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: restrictedICCProfileColourInformation :: ColourType RestrictedICCProfile -> ColourInformation RestrictedICCProfile
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: unrestrictedICCProfileColourInformation :: ColourType UnrestrictedICCProfile -> ColourInformation UnrestrictedICCProfile
+ Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry: visualSampleEntry :: (KnownSymbol (BoxTypeSymbol (SampleEntry VideoTrack (VideoCoding codec)))) => VideoCoding codec -> U16 "data_reference_index" -> SampleEntry VideoTrack (VideoCoding codec) -> Box (SampleEntry VideoTrack (VideoCoding codec))
+ Data.ByteString.IsoBaseFileFormat.Brands.Dash: [hdlr] :: SingleAudioTrackInit -> Handler AudioTrack
+ Data.ByteString.IsoBaseFileFormat.Brands.Dash: [mdhd] :: SingleAudioTrackInit -> MediaHeader 0
+ Data.ByteString.IsoBaseFileFormat.Brands.Dash: [mvhd] :: SingleAudioTrackInit -> MovieHeader 0
+ Data.ByteString.IsoBaseFileFormat.Brands.Dash: [smhd] :: SingleAudioTrackInit -> SoundMediaHeader
+ Data.ByteString.IsoBaseFileFormat.Brands.Dash: [tkhd] :: SingleAudioTrackInit -> TrackHeader 0
+ Data.ByteString.IsoBaseFileFormat.Brands.Dash: instance Data.ByteString.IsoBaseFileFormat.Brands.Types.IsMediaFileFormat (Data.ByteString.IsoBaseFileFormat.Brands.Dash.Dash v)
+ Data.ByteString.IsoBaseFileFormat.Brands.Types: class IsMediaFileFormat brand where type BoxLayout brand mediaBuilder _ t = boxBuilder t where {
+ Data.ByteString.IsoBaseFileFormat.Util.BitRecords: data (:/) :: Symbol -> k -> Type
+ Data.ByteString.IsoBaseFileFormat.Util.BitRecords: data Field :: Nat -> Type
+ Data.ByteString.IsoBaseFileFormat.Util.BitRecords: getField :: forall a b (path :: k) (first :: Nat) (last :: Nat) field pxy1 pxy2. (IsFieldC path field first last, Integral a, Bits a, Num b) => pxy1 path -> pxy2 field -> a -> b
+ Data.ByteString.IsoBaseFileFormat.Util.BitRecords: getFlag :: forall a (path :: k) (first :: Nat) field p1 p2. (IsFieldC path field first first, Bits a) => p1 path -> p2 field -> a -> Bool
+ Data.ByteString.IsoBaseFileFormat.Util.BitRecords: getFooField :: IsFieldC name Foo first last => proxy name -> Word64 -> Word64
+ Data.ByteString.IsoBaseFileFormat.Util.BitRecords: setField :: forall a b (path :: k) (first :: Nat) (last :: Nat) field pxy1 pxy2. (IsFieldC path field first last, Num a, Bits a, Integral b) => pxy1 path -> pxy2 field -> b -> a -> a
+ Data.ByteString.IsoBaseFileFormat.Util.BitRecords: setFlag :: forall a (path :: k) (first :: Nat) field p1 p2. (IsFieldC path field first first, Bits a) => p1 path -> p2 field -> Bool -> a -> a
+ Data.ByteString.IsoBaseFileFormat.Util.BitRecords: type FieldPosition = (Nat, Nat)
+ Data.ByteString.IsoBaseFileFormat.Util.BitRecords: type Flag = Field 1
+ Data.ByteString.IsoBaseFileFormat.Util.BitRecords: type Foo = (((("foo" :=> Flag) :*: Field 4) :*: ("bar" :=> Field 2)) :*: Field 4) :*: ("baz" :=> Field 17)
+ Data.ByteString.IsoBaseFileFormat.Util.BitRecords: type IsFieldC name field first last = (name `HasFieldConstraint` field, KnownNat first, KnownNat last, Right '(first, last) ~ (GetFieldPosition field name))
+ Data.ByteString.IsoBaseFileFormat.Util.BitRecords: type Rem (x :: Nat) (y :: Nat) = RemImpl x y 0
- Data.ByteString.IsoBaseFileFormat.Boxes.Box: ($:) :: (Boxes '[Box l] -> r) -> Box l -> r
+ Data.ByteString.IsoBaseFileFormat.Boxes.Box: ($:) :: IsBox l => (Boxes '[Box l] -> r) -> Box l -> r
- Data.ByteString.IsoBaseFileFormat.Boxes.Box: (:+) :: a -> b -> (:+) a b
+ Data.ByteString.IsoBaseFileFormat.Boxes.Box: (:+) :: !a -> !b -> (:+) a b
- Data.ByteString.IsoBaseFileFormat.Boxes.Box: BoxSize :: Word64 -> BoxSize
+ Data.ByteString.IsoBaseFileFormat.Boxes.Box: BoxSize :: !Word64 -> BoxSize
- Data.ByteString.IsoBaseFileFormat.Boxes.Box: CustomBoxType :: String -> BoxType
+ Data.ByteString.IsoBaseFileFormat.Boxes.Box: CustomBoxType :: !String -> BoxType
- Data.ByteString.IsoBaseFileFormat.Boxes.Box: StdType :: FourCc -> BoxType
+ Data.ByteString.IsoBaseFileFormat.Boxes.Box: StdType :: !FourCc -> BoxType
- Data.ByteString.IsoBaseFileFormat.Boxes.Box: [:.] :: Box l -> Boxes r -> Boxes (Box l : r)
+ Data.ByteString.IsoBaseFileFormat.Boxes.Box: [:.] :: IsBox l => !(Box l) -> !(Boxes r) -> Boxes (Box l : r)
- Data.ByteString.IsoBaseFileFormat.Boxes.Box: [:<>] :: Boxes l -> Boxes r -> Boxes (l :++ r)
+ Data.ByteString.IsoBaseFileFormat.Boxes.Box: [:<>] :: !(Boxes l) -> !(Boxes r) -> Boxes (l :++ r)
- Data.ByteString.IsoBaseFileFormat.Boxes.Box: [:|] :: Box l -> Box r -> Boxes '[Box l, Box r]
+ Data.ByteString.IsoBaseFileFormat.Boxes.Box: [:|] :: (IsBox l, IsBox r) => !(Box l) -> !(Box r) -> Boxes '[Box l, Box r]
- Data.ByteString.IsoBaseFileFormat.Boxes.Box: [Box] :: (IsBox b) => BoxContent b -> Box b
+ Data.ByteString.IsoBaseFileFormat.Boxes.Box: [Box] :: !(BoxContent b) -> Box b
- Data.ByteString.IsoBaseFileFormat.Boxes.Box: [ContainerBox] :: IsBox b => BoxContent b -> Boxes bs -> ContainerBox b bs
+ Data.ByteString.IsoBaseFileFormat.Boxes.Box: [ContainerBox] :: IsBox b => !(BoxContent b) -> !(Boxes bs) -> ContainerBox b bs
- Data.ByteString.IsoBaseFileFormat.Boxes.Box: class (KnownSymbol (BoxTypeSymbol t), IsBoxContent (BoxContent t)) => IsBox t where type BoxContent t type BoxContent t = t toBoxType _ = parseBoxType (Proxy :: Proxy (BoxTypeSymbol t)) where {
+ Data.ByteString.IsoBaseFileFormat.Boxes.Box: class (KnownSymbol (BoxTypeSymbol t), IsBoxContent (BoxContent t)) => IsBox (t :: Type) where type BoxContent t type BoxContent t = t toBoxType _ = parseBoxType (Proxy :: Proxy (BoxTypeSymbol t)) where {
- Data.ByteString.IsoBaseFileFormat.Boxes.Box: singletonBox :: Box l -> Boxes '[Box l]
+ Data.ByteString.IsoBaseFileFormat.Boxes.Box: singletonBox :: IsBox l => Box l -> Boxes '[Box l]
- Data.ByteString.IsoBaseFileFormat.Boxes.Handler: handler :: Handler -> Box (FullBox Handler 0)
+ Data.ByteString.IsoBaseFileFormat.Boxes.Handler: handler :: (KnownSymbol (HandlerTypeCode t)) => Handler t -> Box (FullBox (Handler t) 0)
- Data.ByteString.IsoBaseFileFormat.Brands.Dash: SingleAudioTrackInit :: MovieHeader 0 -> TrackHeader 0 -> MediaHeader 0 -> Handler -> SoundMediaHeader -> SingleAudioTrackInit
+ Data.ByteString.IsoBaseFileFormat.Brands.Dash: SingleAudioTrackInit :: MovieHeader 0 -> TrackHeader 0 -> MediaHeader 0 -> Handler AudioTrack -> SoundMediaHeader -> SingleAudioTrackInit
- Data.ByteString.IsoBaseFileFormat.Brands.Types: mediaBuilder :: forall t proxy. (IsBrand brand, IsBoxContent t, IsRuleConform t (BoxLayout brand) ~ True) => proxy brand -> t -> Builder
+ Data.ByteString.IsoBaseFileFormat.Brands.Types: mediaBuilder :: forall t proxy. (IsMediaFileFormat brand, IsBoxContent t, IsRuleConform t (BoxLayout brand) ~ True) => proxy brand -> t -> Builder

Files

+ .gitignore view
@@ -0,0 +1,11 @@+*.hi+*.o+*.swp+*.tag+*~+*_flymake.hs+.hsenv+.stack-work/+TAGS+/.idea/+/.dir-locals.el
+ .travis.yml view
@@ -0,0 +1,24 @@+language: c++sudo: false+cache:+  directories:+  - $HOME/.stack/++matrix:+  include:+    - env: CABALVER=1.22 GHCVER=8.0.1+      addons: {apt: {packages: [cabal-install-1.22,ghc-8.0.1],sources: [hvr-ghc]}}++before_install:+  - mkdir -p ~/.local/bin+  - export PATH=~/.local/bin:$PATH+  - travis_retry curl -L https://www.stackage.org/stack/linux-x86_64 | tar -xzO --wildcards '*/stack' > ~/.local/bin/stack+  - chmod a+x ~/.local/bin/stack++install:+  - stack -j 2 setup --no-terminal --resolver nightly+  - stack -j 2 build --only-snapshot --no-terminal++script:+  - stack -j 2 test --no-terminal
+ README.md view
@@ -0,0 +1,10 @@+[![Build Status](https://travis-ci.org/sheyll/isobmff-builder.svg?branch=master)](https://travis-ci.org/sheyll/isobmff-builder)+[![Hackage](https://img.shields.io/badge/hackage-isobmff-green.svg?style=flat)](http://hackage.haskell.org/package/isobmff-builder)++# ISO-14496-12 Base Media File Format Builder++This project contains a bytestring-builder for the media data container file+format defined as part of the MPEG-4 (ISO-14496) family of standards, called the+Iso Base Media File Format, or ISOBMFF.++It is a container format for both stored and transfered media data.
+ doc/basic-structure.svg view
@@ -0,0 +1,2259 @@+<?xml version="1.0" encoding="UTF-8" standalone="no"?>+<!-- Created with Inkscape (http://www.inkscape.org/) -->++<svg+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"+   xmlns:dc="http://purl.org/dc/elements/1.1/"+   xmlns:cc="http://creativecommons.org/ns#"+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"+   xmlns:svg="http://www.w3.org/2000/svg"+   xmlns="http://www.w3.org/2000/svg"+   xmlns:xlink="http://www.w3.org/1999/xlink"+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"+   width="297mm"+   height="210mm"+   viewBox="0 0 1052.3622 744.09448"+   id="svg2"+   version="1.1"+   inkscape:version="0.91 r13725"+   enable-background="new"+   sodipodi:docname="basic-structure.svg">+  <defs+     id="defs4">+    <marker+       inkscape:isstock="true"+       style="overflow:visible;"+       id="marker15594"+       refX="0.0"+       refY="0.0"+       orient="auto"+       inkscape:stockid="Arrow2Mend">+      <path+         transform="scale(0.6) rotate(180) translate(0,0)"+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff00ff;stroke-opacity:0.6;fill:#ff00ff;fill-opacity:0.6"+         id="path15596" />+    </marker>+    <marker+       inkscape:isstock="true"+       style="overflow:visible;"+       id="marker15518"+       refX="0.0"+       refY="0.0"+       orient="auto"+       inkscape:stockid="Arrow2Mend">+      <path+         transform="scale(0.6) rotate(180) translate(0,0)"+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff00ff;stroke-opacity:0.6;fill:#ff00ff;fill-opacity:0.6"+         id="path15520" />+    </marker>+    <marker+       inkscape:isstock="true"+       style="overflow:visible;"+       id="marker15508"+       refX="0.0"+       refY="0.0"+       orient="auto"+       inkscape:stockid="Arrow2Mend">+      <path+         transform="scale(0.6) rotate(180) translate(0,0)"+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff00ff;stroke-opacity:0.6;fill:#ff00ff;fill-opacity:0.6"+         id="path15510" />+    </marker>+    <linearGradient+       id="linearGradient15474"+       osb:paint="solid">+      <stop+         style="stop-color:#000000;stop-opacity:1;"+         offset="0"+         id="stop15476" />+    </linearGradient>+    <marker+       inkscape:stockid="Arrow2Lend"+       orient="auto"+       refY="0.0"+       refX="0.0"+       id="marker14724"+       style="overflow:visible;"+       inkscape:isstock="true">+      <path+         id="path14726"+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "+         transform="scale(1.1) rotate(180) translate(1,0)" />+    </marker>+    <marker+       inkscape:isstock="true"+       style="overflow:visible;"+       id="marker14160"+       refX="0.0"+       refY="0.0"+       orient="auto"+       inkscape:stockid="Arrow2Mend">+      <path+         transform="scale(0.6) rotate(180) translate(0,0)"+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#3c3004;stroke-opacity:1;fill:#3c3004;fill-opacity:1"+         id="path14162" />+    </marker>+    <marker+       inkscape:stockid="Arrow2Mend"+       orient="auto"+       refY="0.0"+       refX="0.0"+       id="Arrow2Mend"+       style="overflow:visible;"+       inkscape:isstock="true"+       inkscape:collect="always">+      <path+         id="path5655"+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#3c3004;stroke-opacity:1;fill:#3c3004;fill-opacity:1"+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "+         transform="scale(0.6) rotate(180) translate(0,0)" />+    </marker>+    <marker+       inkscape:isstock="true"+       style="overflow:visible;"+       id="marker12997"+       refX="0.0"+       refY="0.0"+       orient="auto"+       inkscape:stockid="Arrow1Lend">+      <path+         transform="scale(0.8) rotate(180) translate(12.5,0)"+         style="fill-rule:evenodd;stroke:#0a0407;stroke-width:1pt;stroke-opacity:1;fill:#0a0407;fill-opacity:1"+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "+         id="path12999" />+    </marker>+    <linearGradient+       id="linearGradient12749"+       osb:paint="solid">+      <stop+         style="stop-color:#3c3004;stop-opacity:0.98039216;"+         offset="0"+         id="stop12751" />+    </linearGradient>+    <linearGradient+       id="linearGradient12515"+       osb:paint="solid">+      <stop+         style="stop-color:#000000;stop-opacity:1;"+         offset="0"+         id="stop12517" />+    </linearGradient>+    <linearGradient+       id="linearGradient11377"+       osb:paint="solid">+      <stop+         style="stop-color:#000000;stop-opacity:1;"+         offset="0"+         id="stop11379" />+    </linearGradient>+    <linearGradient+       id="linearGradient11061"+       osb:paint="solid">+      <stop+         style="stop-color:#000000;stop-opacity:1;"+         offset="0"+         id="stop11063" />+    </linearGradient>+    <linearGradient+       id="linearGradient10993"+       osb:paint="solid">+      <stop+         style="stop-color:#000000;stop-opacity:1;"+         offset="0"+         id="stop10995" />+    </linearGradient>+    <linearGradient+       id="linearGradient10679"+       osb:paint="solid">+      <stop+         style="stop-color:#000000;stop-opacity:1;"+         offset="0"+         id="stop10681" />+    </linearGradient>+    <linearGradient+       id="linearGradient10671"+       osb:paint="solid">+      <stop+         style="stop-color:#000000;stop-opacity:1;"+         offset="0"+         id="stop10673" />+    </linearGradient>+    <linearGradient+       id="linearGradient10665"+       osb:paint="solid">+      <stop+         style="stop-color:#000000;stop-opacity:1;"+         offset="0"+         id="stop10667" />+    </linearGradient>+    <linearGradient+       inkscape:collect="always"+       id="sample-to-media-data-5">+      <stop+         style="stop-color:#ff00ff;stop-opacity:1"+         offset="0"+         id="stop10623" />+      <stop+         style="stop-color:#881800;stop-opacity:1"+         offset="1"+         id="stop10625" />+    </linearGradient>+    <marker+       inkscape:stockid="Arrow1Lstart"+       orient="auto"+       refY="0.0"+       refX="0.0"+       id="marker8320"+       style="overflow:visible"+       inkscape:isstock="true">+      <path+         id="path8322"+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"+         transform="scale(0.8) translate(12.5,0)" />+    </marker>+    <marker+       inkscape:stockid="Arrow1Lstart"+       orient="auto"+       refY="0.0"+       refX="0.0"+       id="Arrow1Lstart"+       style="overflow:visible"+       inkscape:isstock="true">+      <path+         id="path5628"+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"+         transform="scale(0.8) translate(12.5,0)" />+    </marker>+    <marker+       inkscape:stockid="Arrow1Lend"+       orient="auto"+       refY="0.0"+       refX="0.0"+       id="marker5904"+       style="overflow:visible;"+       inkscape:isstock="true">+      <path+         id="path5906"+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"+         transform="scale(0.8) rotate(180) translate(12.5,0)" />+    </marker>+    <marker+       inkscape:stockid="Arrow1Lend"+       orient="auto"+       refY="0.0"+       refX="0.0"+       id="Arrow1Lend"+       style="overflow:visible;"+       inkscape:isstock="true"+       inkscape:collect="always">+      <path+         id="path5631"+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "+         style="fill-rule:evenodd;stroke:#ff00ff;stroke-width:1pt;stroke-opacity:1;fill:#ff00ff;fill-opacity:1"+         transform="scale(0.8) rotate(180) translate(12.5,0)" />+    </marker>+    <linearGradient+       id="linearGradient5596"+       osb:paint="solid">+      <stop+         style="stop-color:#1486c3;stop-opacity:1;"+         offset="0"+         id="stop5598" />+    </linearGradient>+    <linearGradient+       id="linearGradient4154"+       osb:paint="solid">+      <stop+         style="stop-color:#ff5f8d;stop-opacity:1;"+         offset="0"+         id="stop4156" />+    </linearGradient>+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient5600"+       x1="123.13862"+       y1="808.91543"+       x2="649.62811"+       y2="808.91543"+       gradientUnits="userSpaceOnUse"+       gradientTransform="matrix(1.5049175,0,0,0.58385007,-110.74398,-36.11621)" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient5604"+       gradientUnits="userSpaceOnUse"+       gradientTransform="matrix(1.501081,0,0,0.58385991,-110.27177,53.779441)"+       x1="123.13862"+       y1="808.91541"+       x2="649.62811"+       y2="808.91541" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#sample-to-media-data-5"+       id="linearGradient10599"+       x1="222.7077"+       y1="632.0694"+       x2="43.06395"+       y2="949.92651"+       gradientUnits="userSpaceOnUse" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#sample-to-media-data-5"+       id="linearGradient10601"+       x1="248.17426"+       y1="628.49792"+       x2="69.717415"+       y2="957.78363"+       gradientUnits="userSpaceOnUse" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#sample-to-media-data-5"+       id="linearGradient10637"+       x1="-694.37683"+       y1="522.23401"+       x2="-800.94135"+       y2="515.94836"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(106.28654,-0.60360971)" />+    <filter+       inkscape:collect="always"+       style="color-interpolation-filters:sRGB"+       id="filter10659">+      <feBlend+         inkscape:collect="always"+         mode="lighten"+         in2="BackgroundImage"+         id="feBlend10661" />+    </filter>+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient10675"+       x1="44.206863"+       y1="993.77332"+       x2="254.79829"+       y2="993.77332"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(1.0101525,-1.4745979)" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient10683"+       x1="261.38965"+       y1="998.31903"+       x2="393.18918"+       y2="998.31903"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-6,-6.0203247)" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient10701"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(1.0101525,-1.4745979)"+       x1="44.206863"+       y1="993.77332"+       x2="254.79829"+       y2="993.77332" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient10703"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-6,-6.0203247)"+       x1="261.38965"+       y1="998.31903"+       x2="393.18918"+       y2="998.31903" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient10717"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(1.0101525,-1.4745979)"+       x1="44.206863"+       y1="993.77332"+       x2="254.79829"+       y2="993.77332" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient10719"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-6,-6.0203247)"+       x1="261.38965"+       y1="998.31903"+       x2="393.18918"+       y2="998.31903" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient10721"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(1.0101525,-1.4745979)"+       x1="44.206863"+       y1="993.77332"+       x2="254.79829"+       y2="993.77332" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient10723"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-6,-6.0203247)"+       x1="261.38965"+       y1="998.31903"+       x2="393.18918"+       y2="998.31903" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient10997"+       x1="43.296745"+       y1="715.47632"+       x2="230.45461"+       y2="715.47632"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-1.1307678,7.9153744)" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient10999"+       x1="187.71971"+       y1="714.46619"+       x2="352.71191"+       y2="714.46619"+       gradientUnits="userSpaceOnUse" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient11065"+       x1="277.3237"+       y1="760.4281"+       x2="350.99118"+       y2="760.4281"+       gradientUnits="userSpaceOnUse" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient11067"+       x1="188.41422"+       y1="760.4281"+       x2="226.75848"+       y2="760.4281"+       gradientUnits="userSpaceOnUse" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient11239"+       gradientUnits="userSpaceOnUse"+       x1="188.41422"+       y1="760.4281"+       x2="226.75848"+       y2="760.4281"+       gradientTransform="translate(127.27922,3.0304576)" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient11569"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-228,-2)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient11785"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-92,-2)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient11973"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(146,-2)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient12121"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(386,-2)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient12173"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(626,-2)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient12249"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(12,-2)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient12297"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(252,-2)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient12337"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(492,-2)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient12389"+       gradientUnits="userSpaceOnUse"+       x1="187.71971"+       y1="714.46619"+       x2="352.71191"+       y2="714.46619" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient12391"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(127.27922,3.0304576)"+       x1="188.41422"+       y1="760.4281"+       x2="226.75848"+       y2="760.4281" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient12393"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(127.27922,3.0304576)"+       x1="188.41422"+       y1="760.4281"+       x2="226.75848"+       y2="760.4281" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient12395"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(127.27922,3.0304576)"+       x1="188.41422"+       y1="760.4281"+       x2="226.75848"+       y2="760.4281" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient12397"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(127.27922,3.0304576)"+       x1="188.41422"+       y1="760.4281"+       x2="226.75848"+       y2="760.4281" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient12399"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(127.27922,3.0304576)"+       x1="188.41422"+       y1="760.4281"+       x2="226.75848"+       y2="760.4281" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient12401"+       gradientUnits="userSpaceOnUse"+       x1="187.71971"+       y1="714.46619"+       x2="352.71191"+       y2="714.46619" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient12403"+       gradientUnits="userSpaceOnUse"+       x1="187.71971"+       y1="714.46619"+       x2="352.71191"+       y2="714.46619" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient12405"+       gradientUnits="userSpaceOnUse"+       x1="187.71971"+       y1="714.46619"+       x2="352.71191"+       y2="714.46619" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient12407"+       gradientUnits="userSpaceOnUse"+       x1="187.71971"+       y1="714.46619"+       x2="352.71191"+       y2="714.46619" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient12409"+       gradientUnits="userSpaceOnUse"+       x1="187.71971"+       y1="714.46619"+       x2="352.71191"+       y2="714.46619" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient12749"+       id="linearGradient13103"+       gradientUnits="userSpaceOnUse"+       gradientTransform="matrix(0.9280993,0,0,1.0262209,52.012841,99.94962)"+       x1="196.80742"+       y1="581.64874"+       x2="908.20947"+       y2="581.64874" />+  </defs>+  <sodipodi:namedview+     id="base"+     pagecolor="#ffffff"+     bordercolor="#666666"+     borderopacity="1.0"+     inkscape:pageopacity="0.0"+     inkscape:pageshadow="2"+     inkscape:zoom="1"+     inkscape:cx="518.60504"+     inkscape:cy="348.09569"+     inkscape:document-units="px"+     inkscape:current-layer="layer1"+     showgrid="false"+     borderlayer="true"+     showguides="true"+     inkscape:guide-bbox="true">+    <sodipodi:guide+       position="-282.84272,677.81236"+       orientation="1,0"+       id="guide5606" />+  </sodipodi:namedview>+  <metadata+     id="metadata7">+    <rdf:RDF>+      <cc:Work+         rdf:about="">+        <dc:format>image/svg+xml</dc:format>+        <dc:type+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />+        <dc:title></dc:title>+        <cc:license+           rdf:resource="http://creativecommons.org/licenses/by/3.0/" />+      </cc:Work>+      <cc:License+         rdf:about="http://creativecommons.org/licenses/by/3.0/">+        <cc:permits+           rdf:resource="http://creativecommons.org/ns#Reproduction" />+        <cc:permits+           rdf:resource="http://creativecommons.org/ns#Distribution" />+        <cc:requires+           rdf:resource="http://creativecommons.org/ns#Notice" />+        <cc:requires+           rdf:resource="http://creativecommons.org/ns#Attribution" />+        <cc:permits+           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />+      </cc:License>+    </rdf:RDF>+  </metadata>+  <g+     inkscape:label="Layer 1"+     inkscape:groupmode="layer"+     id="layer1"+     transform="translate(0,-308.26772)"+     style="filter:url(#filter10659)">+    <rect+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.41121864px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+       id="rect3336"+       width="853.16766"+       height="253.81555"+       x="50.713242"+       y="316.1817" />+    <text+       xml:space="preserve"+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+       x="81.822357"+       y="386.67169"+       id="text3338"+       sodipodi:linespacing="125%"><tspan+         sodipodi:role="line"+         id="tspan3340"+         x="81.822357"+         y="386.67169">movie</tspan></text>+    <rect+       style="fill:none"+       id="rect3342"+       width="388.90872"+       height="60.609154"+       x="67.680222"+       y="405.86459" />+    <rect+       style="fill:none;stroke:url(#linearGradient5600);stroke-width:4.18100023;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"+       id="rect4152"+       width="792.02228"+       height="70.773323"+       x="74.719971"+       y="400.7825" />+    <rect+       y="490.68549"+       x="74.719383"+       height="70.774506"+       width="790.00317"+       id="rect5602"+       style="fill:none;stroke:url(#linearGradient5604);stroke-width:4.18100023;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />+    <text+       sodipodi:linespacing="125%"+       id="text5612"+       y="451.16916"+       x="84.576263"+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+       xml:space="preserve"><tspan+         y="451.16916"+         x="84.576263"+         id="tspan5614"+         sodipodi:role="line">track 1</tspan></text>+    <text+       xml:space="preserve"+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+       x="84.576263"+       y="541.07275"+       id="text5616"+       sodipodi:linespacing="125%"><tspan+         sodipodi:role="line"+         id="tspan5618"+         x="84.576263"+         y="541.07275">track 2</tspan></text>+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:1.49778581;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Lend)"+       d="m 234.25549,623.48964 661.03572,-1.08562"+       id="path5622"+       inkscape:connector-curvature="0" />+    <text+       xml:space="preserve"+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;opacity:0.93999999;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+       x="841.23474"+       y="687.60681"+       id="text5938"+       sodipodi:linespacing="125%"><tspan+         sodipodi:role="line"+         id="tspan5940"+         x="841.23474"+         y="687.60681">seconds </tspan></text>+    <text+       xml:space="preserve"+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#ff00ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;opacity:0.94;"+       x="841.23474"+       y="616.05341"+       id="text8224"+       sodipodi:linespacing="125%"><tspan+         sodipodi:role="line"+         id="tspan8226"+         x="841.23474"+         y="616.05341">Samples</tspan></text>+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1"+       d="m 236.0051,404.32129 0,219.2031"+       id="path7614"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path7616"+       d="m 247.99459,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1"+       d="m 259.98408,404.32129 0,219.2031"+       id="path7618"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path7620"+       d="m 271.97357,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1"+       d="m 283.96308,404.32129 0,219.2031"+       id="path7622"+       inkscape:connector-curvature="0" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1"+       d="m 295.95257,404.32129 0,219.2031"+       id="path7624"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path7626"+       d="m 307.94206,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1"+       d="m 319.93157,404.32129 0,219.2031"+       id="path7628"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path7630"+       d="m 331.92106,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1"+       d="m 343.91056,404.32129 0,219.2031"+       id="path7632"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path7634"+       d="m 355.90005,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1"+       d="m 367.88952,404.32129 0,219.2031"+       id="path7636"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path7638"+       d="m 379.87903,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <path+       inkscape:connector-curvature="0"+       id="path7640"+       d="m 391.86852,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1"+       d="m 403.85804,404.32129 0,219.2031"+       id="path7642"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path7644"+       d="m 415.84754,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1"+       d="m 427.83702,404.32129 0,219.2031"+       id="path7646"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path7648"+       d="m 439.82653,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1"+       d="m 451.81602,404.32129 0,219.2031"+       id="path7650"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path7652"+       d="m 463.80551,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1"+       d="m 475.79498,404.32129 0,219.2031"+       id="path7654"+       inkscape:connector-curvature="0" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1"+       d="m 487.78449,404.32129 0,219.2031"+       id="path7656"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path7658"+       d="m 499.77398,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1"+       d="m 511.76348,404.32129 0,219.2031"+       id="path7660"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path7662"+       d="m 523.75297,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <path+       inkscape:connector-curvature="0"+       id="path7664"+       d="m 535.7425,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1"+       d="m 547.73192,404.32129 0,219.2031"+       id="path7666"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path7668"+       d="m 559.72146,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1"+       d="m 571.71095,404.32129 0,219.2031"+       id="path7670"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path8228"+       d="m 583.70046,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1"+       d="m 595.68994,404.32129 0,219.2031"+       id="path8230"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path8232"+       d="m 607.67941,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1"+       d="m 619.66896,404.32129 0,219.2031"+       id="path8234"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path8236"+       d="m 631.65844,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <path+       inkscape:connector-curvature="0"+       id="path8238"+       d="m 643.64793,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1"+       d="m 655.63745,404.32129 0,219.2031"+       id="path8240"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path8242"+       d="m 667.62693,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1"+       d="m 679.61648,404.32129 0,219.2031"+       id="path8244"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path8246"+       d="m 691.60596,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1"+       d="m 703.59538,404.32129 0,219.2031"+       id="path8248"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path8250"+       d="m 715.58491,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1"+       d="m 727.5744,404.32129 0,219.2031"+       id="path8252"+       inkscape:connector-curvature="0" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1"+       d="m 739.56388,404.32129 0,219.2031"+       id="path8254"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path8256"+       d="m 751.55334,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1"+       d="m 763.54287,404.32129 0,219.2031"+       id="path8258"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path8260"+       d="m 775.53235,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1"+       d="m 787.52183,404.32129 0,219.2031"+       id="path8262"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path8264"+       d="m 799.51135,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1"+       d="m 811.50088,404.32129 0,219.2031"+       id="path8266"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path8268"+       d="m 823.49034,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <path+       inkscape:connector-curvature="0"+       id="path8270"+       d="m 835.47988,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1"+       d="m 847.46937,404.32129 0,219.2031"+       id="path8272"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path8274"+       d="m 859.45887,404.32129 0,219.2031"+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:0.52431506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.04863016, 0.52431507;stroke-dashoffset:0;stroke-opacity:1" />+    <g+       id="g8378"+       transform="translate(0,3.0517578e-5)">+      <rect+         y="406.32239"+         x="227.23705"+         height="59.693489"+         width="126.36358"+         id="rect8298"+         style="opacity:1;fill:none;fill-opacity:1;stroke:#00ff17;stroke-width:3.98548293;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />+      <rect+         style="opacity:1;fill:none;fill-opacity:1;stroke:#00ff17;stroke-width:3.98548293;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"+         id="rect8348"+         width="126.36358"+         height="59.693489"+         x="354.01117"+         y="406.32239" />+      <rect+         y="406.32239"+         x="480.78534"+         height="59.693489"+         width="126.36358"+         id="rect8350"+         style="opacity:1;fill:none;fill-opacity:1;stroke:#00ff17;stroke-width:3.98548293;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />+      <rect+         style="opacity:1;fill:none;fill-opacity:1;stroke:#00ff17;stroke-width:3.98548293;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"+         id="rect8352"+         width="126.36358"+         height="59.693489"+         x="607.55945"+         y="406.32239" />+      <rect+         y="406.32239"+         x="734.33362"+         height="59.693489"+         width="126.36358"+         id="rect8354"+         style="opacity:1;fill:none;fill-opacity:1;stroke:#00ff17;stroke-width:3.98548293;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />+      <text+         sodipodi:linespacing="125%"+         id="text8358"+         y="450.25116"+         x="227.28432"+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+         xml:space="preserve"><tspan+           y="450.25116"+           x="227.28432"+           id="tspan8360"+           sodipodi:role="line">Frame</tspan></text>+      <text+         xml:space="preserve"+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+         x="355.32117"+         y="450.25116"+         id="text8362"+         sodipodi:linespacing="125%"><tspan+           sodipodi:role="line"+           id="tspan8364"+           x="355.32117"+           y="450.25116">Frame</tspan></text>+      <text+         sodipodi:linespacing="125%"+         id="text8366"+         y="450.25116"+         x="483.35803"+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+         xml:space="preserve"><tspan+           y="450.25116"+           x="483.35803"+           id="tspan8368"+           sodipodi:role="line">Frame</tspan></text>+      <text+         xml:space="preserve"+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+         x="611.39484"+         y="450.25116"+         id="text8370"+         sodipodi:linespacing="125%"><tspan+           sodipodi:role="line"+           id="tspan8372"+           x="611.39484"+           y="450.25116">Frame</tspan></text>+      <text+         sodipodi:linespacing="125%"+         id="text8374"+         y="450.25116"+         x="739.4317"+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+         xml:space="preserve"><tspan+           y="450.25116"+           x="739.4317"+           id="tspan8376"+           sodipodi:role="line">Frame</tspan></text>+    </g>+    <g+       id="g8395"+       transform="translate(-1.0101525,89.903606)">+      <rect+         style="opacity:1;fill:none;fill-opacity:1;stroke:#00ff17;stroke-width:3.98548293;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"+         id="rect8397"+         width="126.36358"+         height="59.693489"+         x="227.23705"+         y="406.32239" />+      <rect+         y="406.32239"+         x="354.01117"+         height="59.693489"+         width="126.36358"+         id="rect8399"+         style="opacity:1;fill:none;fill-opacity:1;stroke:#00ff17;stroke-width:3.98548293;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />+      <rect+         style="opacity:1;fill:none;fill-opacity:1;stroke:#00ff17;stroke-width:3.98548293;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"+         id="rect8401"+         width="126.36358"+         height="59.693489"+         x="480.78534"+         y="406.32239" />+      <rect+         y="406.32239"+         x="607.55945"+         height="59.693489"+         width="126.36358"+         id="rect8403"+         style="opacity:1;fill:none;fill-opacity:1;stroke:#00ff17;stroke-width:3.98548293;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />+      <rect+         style="opacity:1;fill:none;fill-opacity:1;stroke:#00ff17;stroke-width:3.98548293;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"+         id="rect8405"+         width="126.36358"+         height="59.693489"+         x="734.33362"+         y="406.32239" />+      <text+         xml:space="preserve"+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+         x="227.28432"+         y="450.25116"+         id="text8407"+         sodipodi:linespacing="125%"><tspan+           sodipodi:role="line"+           id="tspan8409"+           x="227.28432"+           y="450.25116">Frame</tspan></text>+      <text+         sodipodi:linespacing="125%"+         id="text8411"+         y="450.25116"+         x="355.32117"+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+         xml:space="preserve"><tspan+           y="450.25116"+           x="355.32117"+           id="tspan8413"+           sodipodi:role="line">Frame</tspan></text>+      <text+         xml:space="preserve"+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+         x="483.35803"+         y="450.25116"+         id="text8415"+         sodipodi:linespacing="125%"><tspan+           sodipodi:role="line"+           id="tspan8417"+           x="483.35803"+           y="450.25116">Frame</tspan></text>+      <text+         sodipodi:linespacing="125%"+         id="text8419"+         y="450.25116"+         x="611.39484"+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+         xml:space="preserve"><tspan+           y="450.25116"+           x="611.39484"+           id="tspan8421"+           sodipodi:role="line">Frame</tspan></text>+      <text+         xml:space="preserve"+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+         x="739.4317"+         y="450.25116"+         id="text8423"+         sodipodi:linespacing="125%"><tspan+           sodipodi:role="line"+           id="tspan8425"+           x="739.4317"+           y="450.25116">Frame</tspan></text>+    </g>+    <path+       style="fill:none;fill-rule:evenodd;stroke:url(#linearGradient10599);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+       d="M 236.55953,624.64926 42.78355,960.20373"+       id="path10587"+       inkscape:connector-curvature="0"+       sodipodi:nodetypes="cc" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:url(#linearGradient10601);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+       d="M 248.20166,625.36354 75.404298,960.20373"+       id="path10591"+       inkscape:connector-curvature="0"+       sodipodi:nodetypes="cc" />+    <text+       xml:space="preserve"+       style="font-style:normal;font-weight:normal;font-size:15.94160843px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:url(#linearGradient10637);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+       x="-695.56689"+       y="521.3186"+       id="text10627"+       sodipodi:linespacing="125%"+       transform="matrix(0.48547195,-0.87425225,0.87425225,0.48547195,0,0)"><tspan+         sodipodi:role="line"+         id="tspan10629"+         x="-695.56689"+         y="521.3186"+         style="stroke:url(#linearGradient10637)">Sample Config</tspan></text>+    <rect+       style="opacity:1;fill:none;fill-opacity:1;stroke:#881800;stroke-width:5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"+       id="rect10639"+       width="1023.2421"+       height="340.10092"+       x="14.32107"+       y="578.96661" />+    <text+       xml:space="preserve"+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+       x="74.751289"+       y="755.72766"+       id="text10643"+       sodipodi:linespacing="125%"><tspan+         sodipodi:role="line"+         id="tspan10645"+         x="74.751289"+         y="755.72766">sample size box</tspan></text>+    <rect+       style="opacity:1;fill:none;fill-opacity:1;stroke:#881800;stroke-width:0.98892051;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"+       id="rect9434"+       width="950.12048"+       height="63.206535"+       x="42.137867"+       y="960.14978" />+    <g+       id="g9684"+       style="stroke:#881800;stroke-opacity:1"+       transform="matrix(1.0006077,0,0,0.39854318,-0.31432415,615.94439)">+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 49.175146,867.1945 0,151.5229"+         id="path9436"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9438"+         d="m 58.057688,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 66.940233,867.1945 0,151.5229"+         id="path9440"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9442"+         d="m 75.822772,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 84.70532,867.1945 0,151.5229"+         id="path9444"+         inkscape:connector-curvature="0" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 93.587864,867.1945 0,151.5229"+         id="path9446"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9448"+         d="m 102.4704,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 111.35295,867.1945 0,151.5229"+         id="path9450"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9452"+         d="m 120.2355,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 129.11803,867.1945 0,151.5229"+         id="path9454"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9456"+         d="m 138.00058,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 146.88313,867.1945 0,151.5229"+         id="path9458"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9460"+         d="m 155.76567,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         inkscape:connector-curvature="0"+         id="path9462"+         d="m 164.64819,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 173.53075,867.1945 0,151.5229"+         id="path9464"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9466"+         d="m 182.41329,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 191.29582,867.1945 0,151.5229"+         id="path9468"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9470"+         d="m 200.17837,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 209.06092,867.1945 0,151.5229"+         id="path9472"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9474"+         d="m 217.94346,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 226.826,867.1945 0,151.5229"+         id="path9476"+         inkscape:connector-curvature="0" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 235.70855,867.1945 0,151.5229"+         id="path9478"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9480"+         d="m 244.59109,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 253.47362,867.1945 0,151.5229"+         id="path9482"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9484"+         d="m 262.35618,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         inkscape:connector-curvature="0"+         id="path9486"+         d="m 271.23871,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 280.12125,867.1945 0,151.5229"+         id="path9488"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9490"+         d="m 289.00379,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 297.88636,867.1945 0,151.5229"+         id="path9492"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9498"+         d="m 306.7689,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 315.65143,867.1945 0,151.5229"+         id="path9500"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9502"+         d="m 324.53398,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 333.4165,867.1945 0,151.5229"+         id="path9504"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9506"+         d="m 342.29905,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         inkscape:connector-curvature="0"+         id="path9508"+         d="m 351.18159,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 360.06412,867.1945 0,151.5229"+         id="path9510"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9512"+         d="m 368.9467,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 377.82922,867.1945 0,151.5229"+         id="path9514"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9516"+         d="m 386.71177,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 395.59429,867.1945 0,151.5229"+         id="path9518"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9520"+         d="m 404.47685,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 413.35939,867.1945 0,151.5229"+         id="path9522"+         inkscape:connector-curvature="0" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 422.24194,867.1945 0,151.5229"+         id="path9524"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9526"+         d="m 431.12448,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 440.00702,867.1945 0,151.5229"+         id="path9528"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9530"+         d="m 448.88955,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 457.7721,867.1945 0,151.5229"+         id="path9532"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9534"+         d="m 466.65463,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 475.53719,867.1945 0,151.5229"+         id="path9536"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9538"+         d="m 484.41974,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         inkscape:connector-curvature="0"+         id="path9540"+         d="m 493.30227,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 502.18481,867.1945 0,151.5229"+         id="path9542"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9544"+         d="m 511.06735,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         inkscape:connector-curvature="0"+         id="path9578"+         d="m 519.94988,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 528.83248,867.1945 0,151.5229"+         id="path9580"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9582"+         d="m 537.71502,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 546.59755,867.1945 0,151.5229"+         id="path9584"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9586"+         d="m 555.48009,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         inkscape:connector-curvature="0"+         id="path9588"+         d="m 564.36269,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 573.24517,867.1945 0,151.5229"+         id="path9590"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9592"+         d="m 582.12778,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 591.01025,867.1945 0,151.5229"+         id="path9594"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9596"+         d="m 599.8928,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 608.77533,867.1945 0,151.5229"+         id="path9598"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9600"+         d="m 617.65791,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 626.54045,867.1945 0,151.5229"+         id="path9602"+         inkscape:connector-curvature="0" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 635.42298,867.1945 0,151.5229"+         id="path9604"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9606"+         d="m 644.30555,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 653.18803,867.1945 0,151.5229"+         id="path9608"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9610"+         d="m 662.07061,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 670.95311,867.1945 0,151.5229"+         id="path9612"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9614"+         d="m 679.8357,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 688.71829,867.1945 0,151.5229"+         id="path9616"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9618"+         d="m 697.60075,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         inkscape:connector-curvature="0"+         id="path9620"+         d="m 706.48336,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 715.36584,867.1945 0,151.5229"+         id="path9622"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9624"+         d="m 724.24843,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 733.13097,867.1945 0,151.5229"+         id="path9626"+         inkscape:connector-curvature="0" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 742.01348,867.1945 0,151.5229"+         id="path9628"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9630"+         d="m 750.89608,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 759.77859,867.1945 0,151.5229"+         id="path9632"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9634"+         d="m 768.66112,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 777.54367,867.1945 0,151.5229"+         id="path9636"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9638"+         d="m 786.4262,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 795.30878,867.1945 0,151.5229"+         id="path9640"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9642"+         d="m 804.1913,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 813.07388,867.1945 0,151.5229"+         id="path9644"+         inkscape:connector-curvature="0" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 821.95636,867.1945 0,151.5229"+         id="path9646"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9648"+         d="m 830.83891,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 839.72143,867.1945 0,151.5229"+         id="path9650"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9652"+         d="m 848.60402,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 857.4866,867.1945 0,151.5229"+         id="path9654"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9656"+         d="m 866.36909,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 875.25164,867.1945 0,151.5229"+         id="path9658"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9660"+         d="m 884.13413,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         inkscape:connector-curvature="0"+         id="path9662"+         d="m 893.01671,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 901.89928,867.1945 0,151.5229"+         id="path9664"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9666"+         d="m 910.78178,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 919.66438,867.1945 0,151.5229"+         id="path9668"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9670"+         d="m 928.5469,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 937.42946,867.1945 0,151.5229"+         id="path9672"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9674"+         d="m 946.31196,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 955.19454,867.1945 0,151.5229"+         id="path9676"+         inkscape:connector-curvature="0" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 964.0771,867.1945 0,151.5229"+         id="path9678"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9680"+         d="m 972.95957,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 981.84218,867.1945 0,151.5229"+         id="path9682"+         inkscape:connector-curvature="0" />+    </g>+    <text+       xml:space="preserve"+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+       x="48.066017"+       y="1046.7532"+       id="text10249"+       sodipodi:linespacing="125%"><tspan+         sodipodi:role="line"+         id="tspan10251"+         x="48.066017"+         y="1046.7532">Media-Data</tspan></text>+    <g+       id="g10973"+       transform="matrix(0.68954077,0,0,1.0074925,14.217977,-7.4348225)">+      <g+         id="g10691">+        <rect+           style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient10675);stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99701496"+           id="rect10663"+           width="208.09143"+           height="54.548237"+           x="46.467014"+           y="965.0246" />+        <rect+           style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient10683);stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99701496"+           id="rect10677"+           width="129.29953"+           height="55.558392"+           x="256.63965"+           y="964.51953" />+      </g>+      <g+         transform="translate(343.01015,0)"+         id="g10695">+        <rect+           y="965.0246"+           x="46.467014"+           height="54.548237"+           width="208.09143"+           id="rect10697"+           style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient10701);stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99701496" />+        <rect+           y="964.51953"+           x="256.63965"+           height="55.558392"+           width="129.29953"+           id="rect10699"+           style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient10703);stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99701496" />+      </g>+      <g+         transform="translate(686,0)"+         id="g10705">+        <rect+           y="965.0246"+           x="46.467014"+           height="54.548237"+           width="208.09143"+           id="rect10707"+           style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient10717);stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99701496" />+        <rect+           y="964.51953"+           x="256.63965"+           height="55.558392"+           width="129.29953"+           id="rect10709"+           style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient10719);stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99701496" />+      </g>+      <g+         id="g10711"+         transform="translate(1029.0101,0)">+        <rect+           style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient10721);stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99701496"+           id="rect10713"+           width="208.09143"+           height="54.548237"+           x="46.467014"+           y="965.0246" />+        <rect+           style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient10723);stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99701496"+           id="rect10715"+           width="129.29953"+           height="55.558392"+           x="256.63965"+           y="964.51953" />+      </g>+    </g>+    <path+       style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:url(#linearGradient10997);stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"+       d="M 227.16371,473.37894 44.326097,973.40445"+       id="path10989"+       inkscape:connector-curvature="0" />+    <path+       style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:url(#linearGradient12389);stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"+       d="M 350.52293,465.46357 C 222.86936,571.83233 215.18758,787.75295 189.90868,963.46878"+       id="path10991"+       inkscape:connector-curvature="0"+       sodipodi:nodetypes="cc" />+    <path+       style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:url(#linearGradient11067);stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"+       d="m 225.26402,555.36715 c 20.15818,137.60669 25.58762,288.18693 -35.35534,410.12193"+       id="path11057"+       inkscape:connector-curvature="0"+       sodipodi:nodetypes="cc" />+    <path+       style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:url(#linearGradient11065);stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"+       d="m 349.51278,554.357 c -89.66529,95.12579 -69.8214,258.09851 -70.71068,412.14224"+       id="path11059"+       inkscape:connector-curvature="0"+       sodipodi:nodetypes="cc" />+    <path+       inkscape:connector-curvature="0"+       id="path11237"+       d="m 352.54324,558.39761 c 70.84307,126.40419 56.41235,269.05101 76.77159,405.07117"+       style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:url(#linearGradient12391);stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"+       sodipodi:nodetypes="cc" />+    <path+       sodipodi:nodetypes="cc"+       style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:url(#linearGradient12393);stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"+       d="m 478.81231,558.39761 c -20.40661,132.496 21.89426,269.17249 37.37564,404.06102"+       id="path11241"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path11243"+       d="m 480.83262,560.41792 c 100.09217,116.89753 90.48266,252.74241 178.79699,402.04071"+       style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:url(#linearGradient12395);stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"+       sodipodi:nodetypes="cc" />+    <path+       sodipodi:nodetypes="cc"+       style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:url(#linearGradient12397);stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"+       d="m 604.07123,560.41792 c 69.7221,149.2514 45.35422,277.70823 150.51272,402.04071"+       id="path11245"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path11247"+       d="M 604.07123,560.41792 C 773.88312,685.27297 824.5402,825.80628 897.01546,963.46878"+       style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:url(#linearGradient12399);stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"+       sodipodi:nodetypes="cc" />+    <path+       sodipodi:nodetypes="cc"+       style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:url(#linearGradient11239);stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"+       d="m 733.37076,559.40777 c 139.50731,143.03779 154.80905,287.61171 254.55843,400.0204"+       id="path11249"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path11251"+       d="m 350.52293,465.46357 c 60.20791,169.02184 -12.38604,332.14138 -68.69037,495.9849"+       style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:url(#linearGradient12401);stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"+       sodipodi:nodetypes="cc" />+    <path+       sodipodi:nodetypes="cc"+       style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:url(#linearGradient12403);stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"+       d="M 479.82246,470.51433 C 402.3894,619.54024 415.34447,790.47843 424.26407,960.43832"+       id="path11253"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path11255"+       d="m 479.82246,470.51433 c 87.39169,173.71093 58.84007,333.28243 39.39595,493.9646"+       style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:url(#linearGradient12405);stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"+       sodipodi:nodetypes="cc" />+    <path+       sodipodi:nodetypes="cc"+       style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:url(#linearGradient12407);stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"+       d="m 604.07122,464.45341 c -28.20629,167.73232 12.56584,332.90988 55.55839,498.00521"+       id="path11257"+       inkscape:connector-curvature="0" />+    <path+       inkscape:connector-curvature="0"+       id="path11259"+       d="M 604.07122,464.45341 C 710.73025,632.74802 739.3706,796.45329 755.5941,959.42816"+       style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:url(#linearGradient12409);stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"+       sodipodi:nodetypes="cc" />+    <path+       sodipodi:nodetypes="cc"+       style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:url(#linearGradient10999);stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"+       d="M 731.35044,463.44326 893.985,959.42816"+       id="path11261"+       inkscape:connector-curvature="0" />+    <text+       xml:space="preserve"+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient11569);fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+       x="57.873169"+       y="1004.9053"+       id="text11263"+       sodipodi:linespacing="125%"><tspan+         sodipodi:role="line"+         id="tspan11265"+         x="57.873169"+         y="1004.9053"+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient11569);fill-opacity:1">Chunk</tspan></text>+    <text+       sodipodi:linespacing="125%"+       id="text11571"+       y="1004.9053"+       x="193.87317"+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:start;fill:url(#linearGradient11785);fill-opacity:1.0;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+       xml:space="preserve"><tspan+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr;text-anchor:start;fill:url(#linearGradient11785);fill-opacity:1.0"+         y="1004.9053"+         x="193.87317"+         id="tspan11573"+         sodipodi:role="line">Chunk</tspan></text>+    <text+       xml:space="preserve"+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient11973);fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+       x="431.87317"+       y="1004.9053"+       id="text11787"+       sodipodi:linespacing="125%"><tspan+         sodipodi:role="line"+         id="tspan11789"+         x="431.87317"+         y="1004.9053"+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient11973);fill-opacity:1">Chunk</tspan></text>+    <text+       sodipodi:linespacing="125%"+       id="text11975"+       y="1004.9053"+       x="671.87317"+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient12121);fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+       xml:space="preserve"><tspan+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient12121);fill-opacity:1"+         y="1004.9053"+         x="671.87317"+         id="tspan11977"+         sodipodi:role="line">Chunk</tspan></text>+    <text+       xml:space="preserve"+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient12173);fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+       x="911.87317"+       y="1004.9053"+       id="text12123"+       sodipodi:linespacing="125%"><tspan+         sodipodi:role="line"+         id="tspan12125"+         x="911.87317"+         y="1004.9053"+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient12173);fill-opacity:1">Chunk</tspan></text>+    <text+       sodipodi:linespacing="125%"+       id="text12175"+       y="1004.9053"+       x="297.87317"+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient12249);fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+       xml:space="preserve"><tspan+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient12249);fill-opacity:1"+         y="1004.9053"+         x="297.87317"+         id="tspan12177"+         sodipodi:role="line">Chunk</tspan></text>+    <text+       xml:space="preserve"+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient12297);fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+       x="537.87317"+       y="1004.9053"+       id="text12251"+       sodipodi:linespacing="125%"><tspan+         sodipodi:role="line"+         id="tspan12253"+         x="537.87317"+         y="1004.9053"+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient12297);fill-opacity:1">Chunk</tspan></text>+    <text+       sodipodi:linespacing="125%"+       id="text12299"+       y="1004.9053"+       x="777.87317"+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient12337);fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+       xml:space="preserve"><tspan+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient12337);fill-opacity:1"+         y="1004.9053"+         x="777.87317"+         id="tspan12301"+         sodipodi:role="line">Chunk</tspan></text>+    <text+       xml:space="preserve"+       style="font-style:normal;font-weight:normal;font-size:71.43800354px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:0.38805971;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"+       x="16.897184"+       y="1974.3336"+       id="text12491"+       sodipodi:linespacing="125%"+       transform="scale(2.1986526,0.45482402)"><tspan+         sodipodi:role="line"+         id="tspan12493"+         x="16.897184"+         y="1974.3336"><tspan+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:49.1136322px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:0.38805971;"+           id="tspan12495">data reference box</tspan></tspan></text>+    <text+       xml:space="preserve"+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.5px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+       x="310.96112"+       y="758.36255"+       id="text14460"+       sodipodi:linespacing="125%"><tspan+         sodipodi:role="line"+         id="tspan14462"+         x="310.96112"+         y="758.36255">sample-to-chunk</tspan></text>+    <text+       xml:space="preserve"+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.5px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+       x="306.43805"+       y="796.02411"+       id="text14464"+       sodipodi:linespacing="125%"><tspan+         sodipodi:role="line"+         id="tspan14466"+         x="306.43805"+         y="796.02411">chunk offset box</tspan></text>+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.60000002;marker-end:url(#marker15518);stroke-miterlimit:4;stroke-dasharray:24, 2;stroke-dashoffset:0"+       d="m 261.20736,623.80122 47.49225,109.68446"+       id="path14468"+       inkscape:connector-curvature="0"+       sodipodi:nodetypes="cc" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:24, 2;stroke-dashoffset:0;stroke-opacity:0.6;marker-end:url(#marker15594)"+       d="m 332.09691,803.37923 20.69764,161.91252"+       id="path14472"+       inkscape:connector-curvature="0"+       sodipodi:nodetypes="cc" />+    <path+       style="fill:none;fill-rule:evenodd;stroke:#ff00ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:24, 2;stroke-dashoffset:0;stroke-opacity:0.6;marker-end:url(#marker15508)"+       d="m 259.78423,626.15485 c 16.03073,65.46936 -144.96219,240.48875 69.3923,208.83074"+       id="path14716"+       inkscape:connector-curvature="0"+       sodipodi:nodetypes="cc" />+    <rect+       style="opacity:0.6;fill:#000000;fill-opacity:0;stroke:#ff00ff;stroke-width:1.9069823;stroke-miterlimit:3.5;stroke-dasharray:22.88378754, 1.9069823;stroke-dashoffset:1.8443985;stroke-opacity:1"+       id="rect15328"+       width="243.07732"+       height="28.200623"+       x="301.3685"+       y="736.33148" />+    <rect+       y="774.33148"+       x="301.3685"+       height="28.200623"+       width="243.07732"+       id="rect15632"+       style="opacity:0.6;fill:#000000;fill-opacity:0;stroke:#ff00ff;stroke-width:1.9069823;stroke-miterlimit:3.5;stroke-dasharray:22.88378754, 1.9069823;stroke-dashoffset:1.8443985;stroke-opacity:1" />+    <rect+       y="736.96698"+       x="68.003967"+       height="127.9297"+       width="148.80638"+       id="rect16102"+       style="opacity:0.6;fill:#000000;fill-opacity:0;stroke:#ff00ff;stroke-width:3.17790985;stroke-miterlimit:3.5;stroke-dasharray:38.13491771, 3.17790982;stroke-dashoffset:1.8443985;stroke-opacity:1" />+    <rect+       style="opacity:0.6;fill:#000000;fill-opacity:0;stroke:#ff00ff;stroke-width:3.87848878;stroke-miterlimit:3.5;stroke-dasharray:46.54186579, 3.87848883;stroke-dashoffset:1.8443985;stroke-opacity:1"+       id="rect16104"+       width="970.10577"+       height="29.229124"+       x="32.354256"+       y="875.31726" />+    <text+       xml:space="preserve"+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.5px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+       x="688.91504"+       y="648.37811"+       id="text14456"+       sodipodi:linespacing="125%"><tspan+         sodipodi:role="line"+         id="tspan14458"+         x="688.91504"+         y="648.37811">time scale =      per</tspan></text>+    <g+       id="g16182">+      <path+         style="fill:none;fill-rule:evenodd;stroke:url(#linearGradient13103);stroke-width:3.02537584;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.5;stroke-dasharray:72.60902197, 3.02537592;stroke-dashoffset:1.8599999;stroke-opacity:1;marker-end:url(#Arrow2Mend)"+         d="m 234.67074,697.90698 657.65431,-1.09455"+         id="path12995"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path16110"+         d="m 306,624.3622 0,74"+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+         d="m 380,624.3622 0,74"+         id="path16112"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path16114"+         d="m 456,624.3622 0,74"+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+         d="m 532,624.3622 0,74"+         id="path16116"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path16118"+         d="m 608,624.3622 0,74"+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+         d="m 684,624.3622 0,74"+         id="path16120"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path16122"+         d="m 758,624.3622 0,74"+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+         d="m 834,624.3622 0,74"+         id="path16124"+         inkscape:connector-curvature="0" />+    </g>+  </g>+</svg>
+ doc/data_reference_box.svg view
@@ -0,0 +1,2427 @@+<?xml version="1.0" encoding="UTF-8" standalone="no"?>+<!-- Created with Inkscape (http://www.inkscape.org/) -->++<svg+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"+   xmlns:dc="http://purl.org/dc/elements/1.1/"+   xmlns:cc="http://creativecommons.org/ns#"+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"+   xmlns:svg="http://www.w3.org/2000/svg"+   xmlns="http://www.w3.org/2000/svg"+   xmlns:xlink="http://www.w3.org/1999/xlink"+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"+   width="297mm"+   height="210mm"+   viewBox="0 0 1052.3622 744.09448"+   id="svg3709"+   version="1.1"+   inkscape:version="0.91 r13725"+   sodipodi:docname="data_reference_box.svg">+  <defs+     id="defs3711">+    <linearGradient+       id="linearGradient9945"+       osb:paint="solid">+      <stop+         style="stop-color:#000000;stop-opacity:1;"+         offset="0"+         id="stop9947" />+    </linearGradient>+    <linearGradient+       id="linearGradient4154"+       osb:paint="solid">+      <stop+         style="stop-color:#ff5f8d;stop-opacity:1;"+         offset="0"+         id="stop4156" />+    </linearGradient>+    <linearGradient+       id="linearGradient5596"+       osb:paint="solid">+      <stop+         style="stop-color:#1486c3;stop-opacity:1;"+         offset="0"+         id="stop5598" />+    </linearGradient>+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient12337"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(492,-2)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient3884"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(492,-2)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient12297"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(252,-2)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient3895"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(252,-2)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient12249"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(12,-2)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient3906"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(12,-2)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient12173"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(626,-2)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient3915"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(626,-2)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient12121"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(386,-2)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient3926"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(386,-2)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient11973"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(146,-2)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient3937"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(146,-2)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient11785"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-92,-2)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient3948"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-92,-2)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient11569"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-228,-2)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient3959"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-228,-2)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       y2="991.90527"+       x2="424.25208"+       y1="991.90527"+       x1="288.31458"+       gradientTransform="translate(-228,-2)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient4144"+       xlink:href="#linearGradient5596"+       inkscape:collect="always" />+    <linearGradient+       y2="991.90527"+       x2="424.25208"+       y1="991.90527"+       x1="288.31458"+       gradientTransform="translate(-92,-2)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient4148"+       xlink:href="#linearGradient4154"+       inkscape:collect="always" />+    <linearGradient+       y2="991.90527"+       x2="424.25208"+       y1="991.90527"+       x1="288.31458"+       gradientTransform="translate(146,-2)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient4152"+       xlink:href="#linearGradient4154"+       inkscape:collect="always" />+    <linearGradient+       y2="991.90527"+       x2="424.25208"+       y1="991.90527"+       x1="288.31458"+       gradientTransform="translate(386,-2)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient4157"+       xlink:href="#linearGradient4154"+       inkscape:collect="always" />+    <linearGradient+       y2="991.90527"+       x2="424.25208"+       y1="991.90527"+       x1="288.31458"+       gradientTransform="translate(626,-2)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient4161"+       xlink:href="#linearGradient4154"+       inkscape:collect="always" />+    <linearGradient+       y2="991.90527"+       x2="424.25208"+       y1="991.90527"+       x1="288.31458"+       gradientTransform="translate(12,-2)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient4165"+       xlink:href="#linearGradient5596"+       inkscape:collect="always" />+    <linearGradient+       y2="991.90527"+       x2="424.25208"+       y1="991.90527"+       x1="288.31458"+       gradientTransform="translate(252,-2)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient4169"+       xlink:href="#linearGradient5596"+       inkscape:collect="always" />+    <linearGradient+       y2="991.90527"+       x2="424.25208"+       y1="991.90527"+       x1="288.31458"+       gradientTransform="translate(492,-2)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient4173"+       xlink:href="#linearGradient5596"+       inkscape:collect="always" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient5549"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(488.96953,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient5865"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(488.96953,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient5545"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(248.96953,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient5876"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(248.96953,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient5541"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(8.9695366,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient5887"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(8.9695366,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient5537"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(622.96953,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient5896"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(622.96953,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient5533"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(382.96953,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient5907"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(382.96953,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient5529"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(142.96953,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient5918"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(142.96953,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient5525"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-95.030466,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient5929"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-95.030466,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient5521"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-231.03047,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient5940"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-231.03047,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient10675"+       x1="44.206863"+       y1="993.77332"+       x2="254.79829"+       y2="993.77332"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(1.0101525,-1.4745979)" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient10683"+       x1="261.38965"+       y1="998.31903"+       x2="393.18918"+       y2="998.31903"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-6,-6.0203247)" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient10701"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(1.0101525,-1.4745979)"+       x1="44.206863"+       y1="993.77332"+       x2="254.79829"+       y2="993.77332" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient10703"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-6,-6.0203247)"+       x1="261.38965"+       y1="998.31903"+       x2="393.18918"+       y2="998.31903" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient10717"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(1.0101525,-1.4745979)"+       x1="44.206863"+       y1="993.77332"+       x2="254.79829"+       y2="993.77332" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient10719"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-6,-6.0203247)"+       x1="261.38965"+       y1="998.31903"+       x2="393.18918"+       y2="998.31903" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient10721"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(1.0101525,-1.4745979)"+       x1="44.206863"+       y1="993.77332"+       x2="254.79829"+       y2="993.77332" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient10723"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-6,-6.0203247)"+       x1="261.38965"+       y1="998.31903"+       x2="393.18918"+       y2="998.31903" />+    <linearGradient+       y2="991.90527"+       x2="424.25208"+       y1="991.90527"+       x1="288.31458"+       gradientTransform="translate(-231.03047,-28.725546)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient6125"+       xlink:href="#linearGradient5596"+       inkscape:collect="always" />+    <linearGradient+       y2="991.90527"+       x2="424.25208"+       y1="991.90527"+       x1="288.31458"+       gradientTransform="translate(-95.030466,-28.725546)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient6129"+       xlink:href="#linearGradient4154"+       inkscape:collect="always" />+    <linearGradient+       y2="991.90527"+       x2="424.25208"+       y1="991.90527"+       x1="288.31458"+       gradientTransform="translate(142.96953,-28.725546)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient6133"+       xlink:href="#linearGradient4154"+       inkscape:collect="always" />+    <linearGradient+       y2="991.90527"+       x2="424.25208"+       y1="991.90527"+       x1="288.31458"+       gradientTransform="translate(382.96953,-28.725546)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient6137"+       xlink:href="#linearGradient4154"+       inkscape:collect="always" />+    <linearGradient+       y2="991.90527"+       x2="424.25208"+       y1="991.90527"+       x1="288.31458"+       gradientTransform="translate(622.96953,-28.725546)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient6141"+       xlink:href="#linearGradient4154"+       inkscape:collect="always" />+    <linearGradient+       y2="991.90527"+       x2="424.25208"+       y1="991.90527"+       x1="288.31458"+       gradientTransform="translate(8.9695366,-28.725546)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient6145"+       xlink:href="#linearGradient5596"+       inkscape:collect="always" />+    <linearGradient+       y2="991.90527"+       x2="424.25208"+       y1="991.90527"+       x1="288.31458"+       gradientTransform="translate(248.96953,-28.725546)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient6149"+       xlink:href="#linearGradient5596"+       inkscape:collect="always" />+    <linearGradient+       y2="991.90527"+       x2="424.25208"+       y1="991.90527"+       x1="288.31458"+       gradientTransform="translate(488.96953,-28.725546)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient6153"+       xlink:href="#linearGradient5596"+       inkscape:collect="always" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient7762"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(488.96953,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient7764"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(248.96953,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient7766"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(248.96953,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient7768"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(8.9695366,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient7770"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(8.9695366,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient7772"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(622.96953,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient7774"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(382.96953,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient7776"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(382.96953,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient7778"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(142.96953,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient7780"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(142.96953,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient7782"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-95.030466,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient7784"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-95.030466,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient7786"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-231.03047,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient7788"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-231.03047,-28.725546)"+       x1="288.31458"+       y1="991.90527"+       x2="424.25208"+       y2="991.90527" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient7790"+       x1="44.206863"+       y1="993.77332"+       x2="254.79829"+       y2="993.77332"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(1.0101525,-1.4745979)" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient7792"+       x1="261.38965"+       y1="998.31903"+       x2="393.18918"+       y2="998.31903"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-6,-6.0203247)" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient7794"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(1.0101525,-1.4745979)"+       x1="44.206863"+       y1="993.77332"+       x2="254.79829"+       y2="993.77332" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient7796"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-6,-6.0203247)"+       x1="261.38965"+       y1="998.31903"+       x2="393.18918"+       y2="998.31903" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient7798"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(1.0101525,-1.4745979)"+       x1="44.206863"+       y1="993.77332"+       x2="254.79829"+       y2="993.77332" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient7800"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-6,-6.0203247)"+       x1="261.38965"+       y1="998.31903"+       x2="393.18918"+       y2="998.31903" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient7802"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(1.0101525,-1.4745979)"+       x1="44.206863"+       y1="993.77332"+       x2="254.79829"+       y2="993.77332" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient7804"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-6,-6.0203247)"+       x1="261.38965"+       y1="998.31903"+       x2="393.18918"+       y2="998.31903" />+    <linearGradient+       y2="991.90527"+       x2="424.25208"+       y1="991.90527"+       x1="288.31458"+       gradientTransform="translate(-231.03047,-28.725546)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient7806"+       xlink:href="#linearGradient5596"+       inkscape:collect="always" />+    <linearGradient+       y2="991.90527"+       x2="424.25208"+       y1="991.90527"+       x1="288.31458"+       gradientTransform="translate(-95.030466,-28.725546)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient7809"+       xlink:href="#linearGradient4154"+       inkscape:collect="always" />+    <linearGradient+       y2="991.90527"+       x2="424.25208"+       y1="991.90527"+       x1="288.31458"+       gradientTransform="translate(142.96953,-28.725546)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient7812"+       xlink:href="#linearGradient4154"+       inkscape:collect="always" />+    <linearGradient+       y2="991.90527"+       x2="424.25208"+       y1="991.90527"+       x1="288.31458"+       gradientTransform="translate(382.96953,-28.725546)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient7815"+       xlink:href="#linearGradient4154"+       inkscape:collect="always" />+    <linearGradient+       y2="991.90527"+       x2="424.25208"+       y1="991.90527"+       x1="288.31458"+       gradientTransform="translate(622.96953,-28.725546)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient7818"+       xlink:href="#linearGradient4154"+       inkscape:collect="always" />+    <linearGradient+       y2="991.90527"+       x2="424.25208"+       y1="991.90527"+       x1="288.31458"+       gradientTransform="translate(8.9695366,-28.725546)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient7821"+       xlink:href="#linearGradient5596"+       inkscape:collect="always" />+    <linearGradient+       y2="991.90527"+       x2="424.25208"+       y1="991.90527"+       x1="288.31458"+       gradientTransform="translate(248.96953,-28.725546)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient7824"+       xlink:href="#linearGradient5596"+       inkscape:collect="always" />+    <linearGradient+       y2="991.90527"+       x2="424.25208"+       y1="991.90527"+       x1="288.31458"+       gradientTransform="translate(488.96953,-28.725546)"+       gradientUnits="userSpaceOnUse"+       id="linearGradient7827"+       xlink:href="#linearGradient5596"+       inkscape:collect="always" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient8866"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(1.0101525,-1.4745979)"+       x1="44.206863"+       y1="993.77332"+       x2="254.79829"+       y2="993.77332" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient8868"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-6,-6.0203247)"+       x1="261.38965"+       y1="998.31903"+       x2="393.18918"+       y2="998.31903" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient8870"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(1.0101525,-1.4745979)"+       x1="44.206863"+       y1="993.77332"+       x2="254.79829"+       y2="993.77332" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient8872"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-6,-6.0203247)"+       x1="261.38965"+       y1="998.31903"+       x2="393.18918"+       y2="998.31903" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient8874"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(1.0101525,-1.4745979)"+       x1="44.206863"+       y1="993.77332"+       x2="254.79829"+       y2="993.77332" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient8876"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-6,-6.0203247)"+       x1="261.38965"+       y1="998.31903"+       x2="393.18918"+       y2="998.31903" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient9002"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(1.0101525,-1.4745979)"+       x1="44.206863"+       y1="993.77332"+       x2="254.79829"+       y2="993.77332" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient9004"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-6,-6.0203247)"+       x1="261.38965"+       y1="998.31903"+       x2="393.18918"+       y2="998.31903" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient9006"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(1.0101525,-1.4745979)"+       x1="44.206863"+       y1="993.77332"+       x2="254.79829"+       y2="993.77332" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient9008"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-6,-6.0203247)"+       x1="261.38965"+       y1="998.31903"+       x2="393.18918"+       y2="998.31903" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient9010"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(1.0101525,-1.4745979)"+       x1="44.206863"+       y1="993.77332"+       x2="254.79829"+       y2="993.77332" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient9012"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-6,-6.0203247)"+       x1="261.38965"+       y1="998.31903"+       x2="393.18918"+       y2="998.31903" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient9014"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(1.0101525,-1.4745979)"+       x1="44.206863"+       y1="993.77332"+       x2="254.79829"+       y2="993.77332" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient4154"+       id="linearGradient9016"+       gradientUnits="userSpaceOnUse"+       gradientTransform="translate(-6,-6.0203247)"+       x1="261.38965"+       y1="998.31903"+       x2="393.18918"+       y2="998.31903" />+    <linearGradient+       inkscape:collect="always"+       xlink:href="#linearGradient5596"+       id="linearGradient9949"+       x1="105.05586"+       y1="612.4408"+       x2="316.17776"+       y2="612.4408"+       gradientUnits="userSpaceOnUse"+       gradientTransform="matrix(0.97435303,0,0,1.9091142,129.10476,-565.86994)" />+  </defs>+  <sodipodi:namedview+     id="base"+     pagecolor="#ffffff"+     bordercolor="#666666"+     borderopacity="1.0"+     inkscape:pageopacity="0.0"+     inkscape:pageshadow="2"+     inkscape:zoom="0.98994949"+     inkscape:cx="633.34229"+     inkscape:cy="401.96717"+     inkscape:document-units="px"+     inkscape:current-layer="layer1"+     showgrid="false"+     inkscape:snap-text-baseline="true"+     inkscape:window-width="1680"+     inkscape:window-height="1034"+     inkscape:window-x="1050"+     inkscape:window-y="331"+     inkscape:window-maximized="0" />+  <metadata+     id="metadata3714">+    <rdf:RDF>+      <cc:Work+         rdf:about="">+        <dc:format>image/svg+xml</dc:format>+        <dc:type+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />+        <dc:title></dc:title>+      </cc:Work>+    </rdf:RDF>+  </metadata>+  <g+     inkscape:label="Layer 1"+     inkscape:groupmode="layer"+     id="layer1"+     transform="translate(0,-308.26772)">+    <g+       id="g8303"+       transform="translate(8,94)">+      <rect+         y="883.58496"+         x="468.16666"+         height="63.433216"+         width="562.44861"+         id="rect9434"+         style="opacity:1;fill:none;fill-opacity:1;stroke:#881800;stroke-width:0.76223844;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter10659)" />+      <g+         transform="matrix(0.59233581,0,0,0.3999725,443.03598,538.14512)"+         style="stroke:#881800;stroke-opacity:1;filter:url(#filter10659)"+         id="g9684">+        <path+           inkscape:connector-curvature="0"+           id="path9436"+           d="m 49.175146,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 58.057688,867.1945 0,151.5229"+           id="path9438"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9440"+           d="m 66.940233,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 75.822772,867.1945 0,151.5229"+           id="path9442"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9444"+           d="m 84.70532,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           inkscape:connector-curvature="0"+           id="path9446"+           d="m 93.587864,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 102.4704,867.1945 0,151.5229"+           id="path9448"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9450"+           d="m 111.35295,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 120.2355,867.1945 0,151.5229"+           id="path9452"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9454"+           d="m 129.11803,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 138.00058,867.1945 0,151.5229"+           id="path9456"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9458"+           d="m 146.88313,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 155.76567,867.1945 0,151.5229"+           id="path9460"+           inkscape:connector-curvature="0" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 164.64819,867.1945 0,151.5229"+           id="path9462"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9464"+           d="m 173.53075,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 182.41329,867.1945 0,151.5229"+           id="path9466"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9468"+           d="m 191.29582,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 200.17837,867.1945 0,151.5229"+           id="path9470"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9472"+           d="m 209.06092,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 217.94346,867.1945 0,151.5229"+           id="path9474"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9476"+           d="m 226.826,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           inkscape:connector-curvature="0"+           id="path9478"+           d="m 235.70855,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 244.59109,867.1945 0,151.5229"+           id="path9480"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9482"+           d="m 253.47362,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 262.35618,867.1945 0,151.5229"+           id="path9484"+           inkscape:connector-curvature="0" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 271.23871,867.1945 0,151.5229"+           id="path9486"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9488"+           d="m 280.12125,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 289.00379,867.1945 0,151.5229"+           id="path9490"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9492"+           d="m 297.88636,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 306.7689,867.1945 0,151.5229"+           id="path9498"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9500"+           d="m 315.65143,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 324.53398,867.1945 0,151.5229"+           id="path9502"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9504"+           d="m 333.4165,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 342.29905,867.1945 0,151.5229"+           id="path9506"+           inkscape:connector-curvature="0" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 351.18159,867.1945 0,151.5229"+           id="path9508"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9510"+           d="m 360.06412,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 368.9467,867.1945 0,151.5229"+           id="path9512"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9514"+           d="m 377.82922,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 386.71177,867.1945 0,151.5229"+           id="path9516"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9518"+           d="m 395.59429,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 404.47685,867.1945 0,151.5229"+           id="path9520"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9522"+           d="m 413.35939,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           inkscape:connector-curvature="0"+           id="path9524"+           d="m 422.24194,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 431.12448,867.1945 0,151.5229"+           id="path9526"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9528"+           d="m 440.00702,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 448.88955,867.1945 0,151.5229"+           id="path9530"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9532"+           d="m 457.7721,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 466.65463,867.1945 0,151.5229"+           id="path9534"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9536"+           d="m 475.53719,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 484.41974,867.1945 0,151.5229"+           id="path9538"+           inkscape:connector-curvature="0" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 493.30227,867.1945 0,151.5229"+           id="path9540"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9542"+           d="m 502.18481,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 511.06735,867.1945 0,151.5229"+           id="path9544"+           inkscape:connector-curvature="0" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 519.94988,867.1945 0,151.5229"+           id="path9578"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9580"+           d="m 528.83248,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 537.71502,867.1945 0,151.5229"+           id="path9582"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9584"+           d="m 546.59755,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 555.48009,867.1945 0,151.5229"+           id="path9586"+           inkscape:connector-curvature="0" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 564.36269,867.1945 0,151.5229"+           id="path9588"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9590"+           d="m 573.24517,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 582.12778,867.1945 0,151.5229"+           id="path9592"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9594"+           d="m 591.01025,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 599.8928,867.1945 0,151.5229"+           id="path9596"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9598"+           d="m 608.77533,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 617.65791,867.1945 0,151.5229"+           id="path9600"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9602"+           d="m 626.54045,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           inkscape:connector-curvature="0"+           id="path9604"+           d="m 635.42298,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 644.30555,867.1945 0,151.5229"+           id="path9606"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9608"+           d="m 653.18803,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 662.07061,867.1945 0,151.5229"+           id="path9610"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9612"+           d="m 670.95311,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 679.8357,867.1945 0,151.5229"+           id="path9614"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9616"+           d="m 688.71829,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 697.60075,867.1945 0,151.5229"+           id="path9618"+           inkscape:connector-curvature="0" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 706.48336,867.1945 0,151.5229"+           id="path9620"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9622"+           d="m 715.36584,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 724.24843,867.1945 0,151.5229"+           id="path9624"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9626"+           d="m 733.13097,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           inkscape:connector-curvature="0"+           id="path9628"+           d="m 742.01348,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 750.89608,867.1945 0,151.5229"+           id="path9630"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9632"+           d="m 759.77859,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 768.66112,867.1945 0,151.5229"+           id="path9634"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9636"+           d="m 777.54367,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 786.4262,867.1945 0,151.5229"+           id="path9638"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9640"+           d="m 795.30878,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 804.1913,867.1945 0,151.5229"+           id="path9642"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9644"+           d="m 813.07388,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           inkscape:connector-curvature="0"+           id="path9646"+           d="m 821.95636,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 830.83891,867.1945 0,151.5229"+           id="path9648"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9650"+           d="m 839.72143,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 848.60402,867.1945 0,151.5229"+           id="path9652"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9654"+           d="m 857.4866,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 866.36909,867.1945 0,151.5229"+           id="path9656"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9658"+           d="m 875.25164,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 884.13413,867.1945 0,151.5229"+           id="path9660"+           inkscape:connector-curvature="0" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 893.01671,867.1945 0,151.5229"+           id="path9662"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9664"+           d="m 901.89928,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 910.78178,867.1945 0,151.5229"+           id="path9666"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9668"+           d="m 919.66438,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 928.5469,867.1945 0,151.5229"+           id="path9670"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9672"+           d="m 937.42946,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 946.31196,867.1945 0,151.5229"+           id="path9674"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9676"+           d="m 955.19454,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           inkscape:connector-curvature="0"+           id="path9678"+           d="m 964.0771,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+        <path+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+           d="m 972.95957,867.1945 0,151.5229"+           id="path9680"+           inkscape:connector-curvature="0" />+        <path+           inkscape:connector-curvature="0"+           id="path9682"+           d="m 981.84218,867.1945 0,151.5229"+           style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      </g>+      <text+         sodipodi:linespacing="125%"+         id="text10249"+         y="928.30164"+         x="482.20816"+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter10659)"+         xml:space="preserve"><tspan+           y="928.30164"+           x="482.20816"+           id="tspan10251"+           sodipodi:role="line">Media-Data  http://foo.bar/stream_1.mp4</tspan></text>+      <g+         transform="matrix(0.40819163,0,0,1.0111057,451.63875,-87.46976)"+         id="g10973"+         style="filter:url(#filter10659)">+        <g+           id="g10691">+          <rect+             y="965.0246"+             x="46.467014"+             height="54.548237"+             width="208.09143"+             id="rect10663"+             style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient10675);stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99701496" />+          <rect+             y="964.51953"+             x="256.63965"+             height="55.558392"+             width="129.29953"+             id="rect10677"+             style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient10683);stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99701496" />+        </g>+        <g+           id="g10695"+           transform="translate(343.01015,0)">+          <rect+             style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient10701);stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99701496"+             id="rect10697"+             width="208.09143"+             height="54.548237"+             x="46.467014"+             y="965.0246" />+          <rect+             style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient10703);stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99701496"+             id="rect10699"+             width="129.29953"+             height="55.558392"+             x="256.63965"+             y="964.51953" />+        </g>+        <g+           id="g10705"+           transform="translate(686,0)">+          <rect+             style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient10717);stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99701496"+             id="rect10707"+             width="208.09143"+             height="54.548237"+             x="46.467014"+             y="965.0246" />+          <rect+             style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient10719);stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99701496"+             id="rect10709"+             width="129.29953"+             height="55.558392"+             x="256.63965"+             y="964.51953" />+        </g>+        <g+           transform="translate(1029.0101,0)"+           id="g10711">+          <rect+             y="965.0246"+             x="46.467014"+             height="54.548237"+             width="208.09143"+             id="rect10713"+             style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient10721);stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99701496" />+          <rect+             y="964.51953"+             x="256.63965"+             height="55.558392"+             width="129.29953"+             id="rect10715"+             style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient10723);stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99701496" />+        </g>+      </g>+    </g>+    <text+       xml:space="preserve"+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.5px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"+       x="32.934036"+       y="417.79865"+       id="text8472"+       sodipodi:linespacing="125%"><tspan+         sodipodi:role="line"+         id="tspan8474"+         x="32.934036"+         y="417.79865">Movie &gt; Track &gt; Media &gt; MediaInfo</tspan><tspan+         sodipodi:role="line"+         x="32.934036"+         y="452.17365"+         id="tspan8476" /><tspan+         sodipodi:role="line"+         x="32.934036"+         y="486.54865"+         id="tspan9969">    &gt; Data Info &gt; Data Reference </tspan><tspan+         sodipodi:role="line"+         x="32.934036"+         y="520.92365"+         id="tspan9951">                              [flags </tspan><tspan+         sodipodi:role="line"+         x="32.934036"+         y="555.29865"+         id="tspan9953">                         &gt;  DataEntry  #0    &gt; DataEntryUrl/Urn (External file)</tspan><tspan+         sodipodi:role="line"+         x="32.934036"+         y="589.67365"+         id="tspan9955">                         &gt;  DataEntry  #1       [flag == 0]:  </tspan><tspan+         sodipodi:role="line"+         x="32.934036"+         y="624.04865"+         id="tspan9977">                                                             Location =  http://foo.bar/stream_0.mp4</tspan><tspan+         sodipodi:role="line"+         x="32.934036"+         y="658.42365"+         id="tspan9959">                         &gt;  ...</tspan><tspan+         sodipodi:role="line"+         x="32.934036"+         y="692.79865"+         id="tspan9961">                         &gt;  DataEntry  #N    &gt; DataEntryUrl (Media embeded in file) </tspan><tspan+         sodipodi:role="line"+         x="32.934036"+         y="727.17365"+         id="tspan9973">                                                              [flag == 1]:  The box must be completely </tspan><tspan+         sodipodi:role="line"+         x="32.934036"+         y="761.54865"+         id="tspan9979">                                                              empty, i.e 0 bytes follow the header</tspan><tspan+         sodipodi:role="line"+         x="32.934036"+         y="795.92365"+         id="tspan9963" /><tspan+         sodipodi:role="line"+         x="32.934036"+         y="830.29865"+         id="tspan9965" /><tspan+         sodipodi:role="line"+         x="32.934036"+         y="864.67365"+         id="tspan9967">    &gt; SampleTable</tspan></text>+    <rect+       style="opacity:1;fill:none;fill-opacity:1;stroke:#881800;stroke-width:0.76223844;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter10659)"+       id="rect9434-7"+       width="562.44861"+       height="63.433216"+       x="482.65918"+       y="904.23938" />+    <g+       id="g9684-6"+       style="stroke:#881800;stroke-opacity:1;filter:url(#filter10659)"+       transform="matrix(0.59233581,0,0,0.3999725,457.5285,558.79955)">+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 49.175146,867.1945 0,151.5229"+         id="path9436-8"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9438-9"+         d="m 58.057688,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 66.940233,867.1945 0,151.5229"+         id="path9440-0"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9442-6"+         d="m 75.822772,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 84.70532,867.1945 0,151.5229"+         id="path9444-8"+         inkscape:connector-curvature="0" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 93.587864,867.1945 0,151.5229"+         id="path9446-7"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9448-9"+         d="m 102.4704,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 111.35295,867.1945 0,151.5229"+         id="path9450-0"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9452-3"+         d="m 120.2355,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 129.11803,867.1945 0,151.5229"+         id="path9454-3"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9456-3"+         d="m 138.00058,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 146.88313,867.1945 0,151.5229"+         id="path9458-7"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9460-3"+         d="m 155.76567,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         inkscape:connector-curvature="0"+         id="path9462-2"+         d="m 164.64819,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 173.53075,867.1945 0,151.5229"+         id="path9464-6"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9466-5"+         d="m 182.41329,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 191.29582,867.1945 0,151.5229"+         id="path9468-2"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9470-6"+         d="m 200.17837,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 209.06092,867.1945 0,151.5229"+         id="path9472-5"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9474-8"+         d="m 217.94346,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 226.826,867.1945 0,151.5229"+         id="path9476-7"+         inkscape:connector-curvature="0" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 235.70855,867.1945 0,151.5229"+         id="path9478-9"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9480-6"+         d="m 244.59109,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 253.47362,867.1945 0,151.5229"+         id="path9482-0"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9484-4"+         d="m 262.35618,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         inkscape:connector-curvature="0"+         id="path9486-1"+         d="m 271.23871,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 280.12125,867.1945 0,151.5229"+         id="path9488-0"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9490-4"+         d="m 289.00379,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 297.88636,867.1945 0,151.5229"+         id="path9492-8"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9498-7"+         d="m 306.7689,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 315.65143,867.1945 0,151.5229"+         id="path9500-0"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9502-8"+         d="m 324.53398,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 333.4165,867.1945 0,151.5229"+         id="path9504-6"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9506-2"+         d="m 342.29905,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         inkscape:connector-curvature="0"+         id="path9508-4"+         d="m 351.18159,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 360.06412,867.1945 0,151.5229"+         id="path9510-7"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9512-9"+         d="m 368.9467,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 377.82922,867.1945 0,151.5229"+         id="path9514-3"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9516-9"+         d="m 386.71177,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 395.59429,867.1945 0,151.5229"+         id="path9518-2"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9520-8"+         d="m 404.47685,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 413.35939,867.1945 0,151.5229"+         id="path9522-3"+         inkscape:connector-curvature="0" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 422.24194,867.1945 0,151.5229"+         id="path9524-0"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9526-1"+         d="m 431.12448,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 440.00702,867.1945 0,151.5229"+         id="path9528-7"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9530-8"+         d="m 448.88955,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 457.7721,867.1945 0,151.5229"+         id="path9532-9"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9534-1"+         d="m 466.65463,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 475.53719,867.1945 0,151.5229"+         id="path9536-5"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9538-4"+         d="m 484.41974,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         inkscape:connector-curvature="0"+         id="path9540-9"+         d="m 493.30227,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 502.18481,867.1945 0,151.5229"+         id="path9542-2"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9544-5"+         d="m 511.06735,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         inkscape:connector-curvature="0"+         id="path9578-7"+         d="m 519.94988,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 528.83248,867.1945 0,151.5229"+         id="path9580-4"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9582-9"+         d="m 537.71502,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 546.59755,867.1945 0,151.5229"+         id="path9584-9"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9586-4"+         d="m 555.48009,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         inkscape:connector-curvature="0"+         id="path9588-5"+         d="m 564.36269,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 573.24517,867.1945 0,151.5229"+         id="path9590-9"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9592-3"+         d="m 582.12778,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 591.01025,867.1945 0,151.5229"+         id="path9594-5"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9596-7"+         d="m 599.8928,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 608.77533,867.1945 0,151.5229"+         id="path9598-0"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9600-8"+         d="m 617.65791,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 626.54045,867.1945 0,151.5229"+         id="path9602-1"+         inkscape:connector-curvature="0" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 635.42298,867.1945 0,151.5229"+         id="path9604-9"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9606-9"+         d="m 644.30555,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 653.18803,867.1945 0,151.5229"+         id="path9608-7"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9610-8"+         d="m 662.07061,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 670.95311,867.1945 0,151.5229"+         id="path9612-2"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9614-5"+         d="m 679.8357,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 688.71829,867.1945 0,151.5229"+         id="path9616-3"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9618-4"+         d="m 697.60075,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         inkscape:connector-curvature="0"+         id="path9620-9"+         d="m 706.48336,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 715.36584,867.1945 0,151.5229"+         id="path9622-0"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9624-2"+         d="m 724.24843,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 733.13097,867.1945 0,151.5229"+         id="path9626-0"+         inkscape:connector-curvature="0" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 742.01348,867.1945 0,151.5229"+         id="path9628-1"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9630-9"+         d="m 750.89608,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 759.77859,867.1945 0,151.5229"+         id="path9632-6"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9634-2"+         d="m 768.66112,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 777.54367,867.1945 0,151.5229"+         id="path9636-1"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9638-2"+         d="m 786.4262,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 795.30878,867.1945 0,151.5229"+         id="path9640-0"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9642-7"+         d="m 804.1913,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 813.07388,867.1945 0,151.5229"+         id="path9644-3"+         inkscape:connector-curvature="0" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 821.95636,867.1945 0,151.5229"+         id="path9646-1"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9648-1"+         d="m 830.83891,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 839.72143,867.1945 0,151.5229"+         id="path9650-9"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9652-0"+         d="m 848.60402,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 857.4866,867.1945 0,151.5229"+         id="path9654-5"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9656-6"+         d="m 866.36909,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 875.25164,867.1945 0,151.5229"+         id="path9658-7"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9660-7"+         d="m 884.13413,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         inkscape:connector-curvature="0"+         id="path9662-4"+         d="m 893.01671,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 901.89928,867.1945 0,151.5229"+         id="path9664-0"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9666-6"+         d="m 910.78178,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 919.66438,867.1945 0,151.5229"+         id="path9668-4"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9670-7"+         d="m 928.5469,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 937.42946,867.1945 0,151.5229"+         id="path9672-4"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9674-8"+         d="m 946.31196,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 955.19454,867.1945 0,151.5229"+         id="path9676-5"+         inkscape:connector-curvature="0" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 964.0771,867.1945 0,151.5229"+         id="path9678-8"+         inkscape:connector-curvature="0" />+      <path+         inkscape:connector-curvature="0"+         id="path9680-2"+         d="m 972.95957,867.1945 0,151.5229"+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1" />+      <path+         style="fill:none;fill-rule:evenodd;stroke:#881800;stroke-width:0.37528634;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.75057268, 0.37528634;stroke-dashoffset:0;stroke-opacity:1"+         d="m 981.84218,867.1945 0,151.5229"+         id="path9682-6"+         inkscape:connector-curvature="0" />+    </g>+    <text+       xml:space="preserve"+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter10659)"+       x="496.70068"+       y="948.95605"+       id="text10249-0"+       sodipodi:linespacing="125%"><tspan+         sodipodi:role="line"+         id="tspan10251-6"+         x="496.70068"+         y="948.95605">Media-Data  http://foo.bar/stream_0.mp4</tspan></text>+    <g+       style="filter:url(#filter10659)"+       id="g10973-6"+       transform="matrix(0.40819163,0,0,1.0111057,466.13127,-66.81533)">+      <g+         id="g10691-4">+        <rect+           style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient9002);stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99701496"+           id="rect10663-6"+           width="208.09143"+           height="54.548237"+           x="46.467014"+           y="965.0246" />+        <rect+           style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient9004);stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99701496"+           id="rect10677-2"+           width="129.29953"+           height="55.558392"+           x="256.63965"+           y="964.51953" />+      </g>+      <g+         transform="translate(343.01015,0)"+         id="g10695-8">+        <rect+           y="965.0246"+           x="46.467014"+           height="54.548237"+           width="208.09143"+           id="rect10697-9"+           style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient9006);stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99701496" />+        <rect+           y="964.51953"+           x="256.63965"+           height="55.558392"+           width="129.29953"+           id="rect10699-6"+           style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient9008);stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99701496" />+      </g>+      <g+         transform="translate(686,0)"+         id="g10705-0">+        <rect+           y="965.0246"+           x="46.467014"+           height="54.548237"+           width="208.09143"+           id="rect10707-7"+           style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient9010);stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99701496" />+        <rect+           y="964.51953"+           x="256.63965"+           height="55.558392"+           width="129.29953"+           id="rect10709-0"+           style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient9012);stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99701496" />+      </g>+      <g+         id="g10711-1"+         transform="translate(1029.0101,0)">+        <rect+           style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient9014);stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99701496"+           id="rect10713-0"+           width="208.09143"+           height="54.548237"+           x="46.467014"+           y="965.0246" />+        <rect+           style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient9016);stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99701496"+           id="rect10715-1"+           width="129.29953"+           height="55.558392"+           x="256.63965"+           y="964.51953" />+      </g>+    </g>+    <rect+       style="fill:none;stroke:url(#linearGradient9949);stroke-width:1.3638736"+       id="rect9143"+       width="205.70724"+       height="283.48898"+       x="231.46625"+       y="461.60492" />+  </g>+</svg>
+ examples/734397657.m4s view

binary file changed (absent → 13293 bytes)

+ examples/audio.mpd view
@@ -0,0 +1,16 @@+<?xml version="1.0" encoding="utf-8"?>+<MPD availabilityStartTime="1970-01-01T00:00:00Z" maxSegmentDuration="PT2S" minBufferTime="PT2S" minimumUpdatePeriod="P100Y" profiles="urn:mpeg:dash:profile:isoff-live:2011,http://dashif.org/guidelines/dash-if-simple" timeShiftBufferDepth="PT5M" type="dynamic" ns1:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:ns1="http://www.w3.org/2001/XMLSchema-instance">+   <ProgramInformation>+      <Title>Media Presentation Description for audio only from DASH-IF live simulator</Title>+   </ProgramInformation>+   <BaseURL>http://vm2.dashif.org/livesim/testpic_2s/</BaseURL>+<Period id="p0" start="PT0S">+      <AdaptationSet contentType="audio" lang="eng" mimeType="audio/mp4" segmentAlignment="true" startWithSAP="1">+         <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main" />+         <SegmentTemplate duration="2" initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/$Number$.m4s" startNumber="0" />+         <Representation audioSamplingRate="48000" bandwidth="48000" codecs="mp4a.40.2" id="A48">+            <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2" />+         </Representation>+      </AdaptationSet>+   </Period>+</MPD>
+ examples/init.mp4 view

binary file changed (absent → 651 bytes)

isobmff-builder.cabal view
@@ -1,5 +1,5 @@ name:                isobmff-builder-version:             0.10.0.0+version:             0.10.5.0 synopsis:            A (bytestring-) builder for the ISO-14496-12 base media file format description:         Please see README.md homepage:            https://github.com/sheyll/isobmff-builder#readme@@ -10,45 +10,69 @@ copyright:           2016 Sven Heyll category:            Codec build-type:          Simple--- extra-source-files:+extra-source-files:   README.md+                    , stack.yaml+                    , .travis.yml+                    , doc/basic-structure.svg+                    , doc/data_reference_box.svg+                    , examples/734397657.m4s+                    , examples/init.mp4+                    , examples/audio.mpd+                    , .gitignore cabal-version:       >=1.10  library   hs-source-dirs:      src   exposed-modules:     Data.ByteString.IsoBaseFileFormat.Boxes+                     , Data.ByteString.IsoBaseFileFormat.Boxes.AudioSampleEntry                      , Data.ByteString.IsoBaseFileFormat.Boxes.Box                      , Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields+                     , Data.ByteString.IsoBaseFileFormat.Boxes.DataEntryUrl+                     , Data.ByteString.IsoBaseFileFormat.Boxes.DataEntryUrn                      , Data.ByteString.IsoBaseFileFormat.Boxes.DataInformation                      , Data.ByteString.IsoBaseFileFormat.Boxes.DataReference                      , Data.ByteString.IsoBaseFileFormat.Boxes.FileType                      , Data.ByteString.IsoBaseFileFormat.Boxes.FullBox                      , Data.ByteString.IsoBaseFileFormat.Boxes.Handler+                     , Data.ByteString.IsoBaseFileFormat.Boxes.HintMediaHeader+                     , Data.ByteString.IsoBaseFileFormat.Boxes.HintSampleEntry                      , Data.ByteString.IsoBaseFileFormat.Boxes.Media                      , Data.ByteString.IsoBaseFileFormat.Boxes.MediaData                      , Data.ByteString.IsoBaseFileFormat.Boxes.MediaHeader                      , Data.ByteString.IsoBaseFileFormat.Boxes.MediaInformation+                     , Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry                      , Data.ByteString.IsoBaseFileFormat.Boxes.Movie                      , Data.ByteString.IsoBaseFileFormat.Boxes.MovieHeader+                     , Data.ByteString.IsoBaseFileFormat.Boxes.NullMediaHeader                      , Data.ByteString.IsoBaseFileFormat.Boxes.ProgressiveDownloadInformation                      , Data.ByteString.IsoBaseFileFormat.Boxes.Language+                     , Data.ByteString.IsoBaseFileFormat.Boxes.SampleDescription+                     , Data.ByteString.IsoBaseFileFormat.Boxes.SampleEntry+                     , Data.ByteString.IsoBaseFileFormat.Boxes.SampleTable                      , Data.ByteString.IsoBaseFileFormat.Boxes.Skip+                     , Data.ByteString.IsoBaseFileFormat.Boxes.SoundMediaHeader                      , Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader                      , Data.ByteString.IsoBaseFileFormat.Boxes.Time+                     , Data.ByteString.IsoBaseFileFormat.Boxes.TimeToSample                      , Data.ByteString.IsoBaseFileFormat.Boxes.Track                      , Data.ByteString.IsoBaseFileFormat.Boxes.TrackHeader                      , Data.ByteString.IsoBaseFileFormat.Boxes.Versioned+                     , Data.ByteString.IsoBaseFileFormat.Boxes.VideoMediaHeader+                     , Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry                      , Data.ByteString.IsoBaseFileFormat.Brands.Dash                      , Data.ByteString.IsoBaseFileFormat.Brands.Types                      , Data.ByteString.IsoBaseFileFormat.Util.TypeLayout+                     , Data.ByteString.IsoBaseFileFormat.Util.BitRecords   build-depends:       base >= 4.9 && < 5                      , bytestring >= 0.10.8.1 && < 0.11                      , type-list >= 0.5.0.0 && < 0.6                      , data-default >= 0.7.1.1 && < 0.8                      , vector-sized >= 0.3.2.0 && < 0.4                      , singletons >= 2.2 && < 3-                     , lens >= 4.14 && < 5+                     , tagged >= 0.8 && < 1                      , time >= 1.6.0.1 && < 2                      , text >= 1.2.2.1 && < 2+                     , type-spec >= 0.1   default-language:    Haskell2010   ghc-options:       -Wall -funbox-strict-fields -fno-warn-unused-do-bind   default-extensions:  ConstraintKinds@@ -96,6 +120,7 @@                      , isobmff-builder                      , binary                      , text >= 1.2.2.1 && < 2+                     , type-spec >= 0.1   default-language:    Haskell2010   default-extensions:  ConstraintKinds                      , CPP
spec/BoxFieldsSpec.hs view
@@ -2,11 +2,8 @@  import Test.Hspec import Data.ByteString.IsoBaseFileFormat.Boxes--- import qualified Data.ByteString.Builder as B import qualified Data.ByteString.Lazy as BL--- import qualified Data.Binary.Get as Binary import Control.Exception (evaluate)-import qualified Data.Text as T  -- import qualified Data.ByteString.Builder as B import qualified Data.ByteString.Lazy as BL import -- qualified Data.Binary.Get as Binary@@ -40,7 +37,7 @@             do it "boxSize reports the correct size" $ boxSize example2 `shouldBe`                  (2 * 4 + 2 + 2 + 2 + 2 + 9 * 4 + 4 + 4)                it "it renders the expected content" $ renderBox example2 `shouldBe`-                 (BL.pack [0 ,0 ,0 ,0+                  BL.pack [0 ,0 ,0 ,0                           ,0 ,0 ,0 ,0                           ,0 ,65 ,0 ,66                           ,1 ,0 ,0 ,0@@ -54,27 +51,43 @@                           ,0 ,0 ,0 ,74                           ,0 ,0 ,0 ,75                           ,0 ,0 ,0 ,76-                          ,0 ,0 ,0 ,77])+                          ,0 ,0 ,0 ,77]  renderBox :: IsBoxContent c           => c -> BL.ByteString renderBox = toLazyByteString . boxBuilder -type ExampleContent = Scalar Word8 "bla" :+ Constant (Scalar Word8 "blub") 123 :+ Template (ScalarArray "foos" 3 Int64) '[1, 2, 3] :+ ScalarArray "baz" 7 Word64+type ExampleContent =+     Scalar Word8 "bla"+  :+ Constant (Scalar Word8 "blub") 123+  :+ Template (ScalarArray "foos" 3 Int64) '[1, 2, 3]+  :+ ScalarArray "baz" 7 Word64 -type ExampleContentShort = U8 "bla" :+ Constant (U8 "blub") 123 :+ Template (I64Arr "foos" 3) '[1, 2, 3] :+ U64Arr "baz" 7+type ExampleContentShort =+     U8 "bla"+  :+ Constant (U8 "blub") 123+  :+ Template (I64Arr "foos" 3) '[1, 2, 3]+  :+ U64Arr "baz" 7  example1 :: ExampleContent-example1 = Scalar 100 :+ Constant :+ Default :+ u64Arr [1,2,3]+example1 = Scalar 100 :+ Constant :+ Template :+ u64Arr [1,2,3,4,5,6,7]  example1' :: ExampleContentShort-example1' = example1+example1' = Scalar 100 :+ Constant :+ Template :+ u64Arr [6,6,6] -type Example2 isAudio = Constant (I32Arr "reserved" 2) '[0, 0] :+ Template (I16 "layer") 0 :+ Template (I16 "alternate_group") 0 :+ Template (I16 "volume") (If isAudio 256 0) :+ Constant (I16 "reserved") 0 :+ Template (I32Arr "matrix" 9) '[65536, 0, 0, 0, 65536, 0, 0, 0, 1073741824] :+ I32 "width" :+ I32 "height"+type Example2 isAudio =+  Constant (I32Arr "reserved" 2) '[0, 0]+  :+ Template (I16 "layer") 0+  :+ Template (I16 "alternate_group") 0+  :+ Template (I16 "volume") (If isAudio 256 0)+  :+ Constant (I16 "reserved") 0+  :+ Template (I32Arr "matrix" 9) '[65536, 0, 0, 0, 65536, 0, 0, 0, 1073741824]+  :+ I32 "width"+  :+ I32 "height"  example2 :: Example2 'True example2 =-  Constant :+ Custom 65 :+ Custom 66 :+ Default :+ Constant :++  Constant :+ Custom 65 :+ Custom 66 :+ Template :+ Constant :+   Custom (i32Arr [67 .. 75]) :+   i32 76 :+   i32 77
spec/BrandTypeSpec.hs view
@@ -56,15 +56,15 @@  data TestBrandEmpty -instance IsBrand TestBrandEmpty where+instance IsMediaFileFormat TestBrandEmpty where   type BoxLayout TestBrandEmpty = Boxes '[]  data TestBrandSingle -instance IsBrand TestBrandSingle where+instance IsMediaFileFormat TestBrandSingle where   type BoxLayout TestBrandSingle = Boxes '[OM_ TestBox1]  data TestBrandNested -instance IsBrand TestBrandNested where+instance IsMediaFileFormat TestBrandNested where   type BoxLayout TestBrandNested = Boxes '[OM TestParentBox1 '[OM_ TestBox1]]
spec/DashSpec.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE OverloadedStrings #-}-module DashSpec (spec) where+module DashSpec (spec) where -- TODO rename to mp4 audio init spec  import Test.Hspec import Data.ByteString.IsoBaseFileFormat.Brands.Dash@@ -26,9 +26,9 @@                      [                       -- ftyp box                       0,0,0,28,102,116,121,112,100,97,115,104,0,0,0,0-                      ,105,115,111,109,105,115,111,53,109,112,52,50,0,0+                      ,105,115,111,109,105,115,111,53,109,112,52,50                       -- moov box-                     ,1 ,105 ,109 ,111 ,111 ,118+                     ,0,0,1,180,109 ,111 ,111 ,118                       -- mvhd box                      ,0 ,0 ,0 ,108 ,109 ,118 ,104 ,100 ,0 ,0 ,0 ,0]                       ++ cts ++ [0 ,0 ,0 ,0 ,0@@ -39,7 +39,7 @@                      ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0                      ,255 ,255 ,255 ,255                      -- trak box-                     ,0 ,0 ,0 ,245+                     ,0 ,0 ,1,64                      ,116 ,114 ,97 ,107                      -- tkhd box                      ,0 ,0 ,0 ,92@@ -51,28 +51,43 @@                      ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0                      ,0 ,64 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0                      -- mdia box-                     ,0,0,0,145+                     ,0,0,0,220                      ,109,100,105,97                      ,0,0,0,32,109,100,104,100,0,0,0,0                      ,0,0,0,0,0,0,0,0,0,1,95,144,0,0,0,0,16,181,0,0                      -- hdlr box-                     ,0,0,0,45+                     ,0,0,0,44                      ,104,100,108,114                      ,0,0,0,0,0,0,0,0,115,111,117,110,0,0,0,0,0,0,0,0,0,0,0,0-                     ,72,101,108,108,111,32,119,111,114,108,100,33,0-                     ,0,0,0,60+                     ,72,101,108,108,111,32,119,111,114,108,100,0+                     -- minf box+                     ,0,0,0,136                      ,109,105,110,102                      ,0,0,0,16                      ,115,109,104,100,0,0,0,0,0,0,0,0+                     -- dinf box                      ,0,0,0,36                      ,100,105,110,102+                     -- dref box                      ,0,0,0,28                      ,100,114,101,102                      ,0,0,0,0,0,0,0,1+                     -- url  box                      ,0,0,0,12-                     ,117,114,110,32-                     ,0,0,0,1]-               -- BL.writeFile "/tmp/xxx.mp4" (BL.pack rendered)+                     ,117,114,108,32+                     ,0,0,0,1+                     -- stbl+                     ,0,0,0,76,115,116,98,108+                     -- stsd+                     ,0,0,0,52,115,116,115,100+                     ,0,0,0,0,0,0,0,1+                     -- mp4a+                     ,0,0,0,36,109,112,52,97+                     ,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,16,0,0,0,0+                     ,187,128,0,0+                     -- stts+                     ,0,0,0,16,115,116,116,115,0,0,0,0,0,0,0,0]+               BL.writeFile "/tmp/isobmff-test-case-dash-spec.mp4" (BL.pack rendered)                rendered `shouldBe`                  expected @@ -80,11 +95,11 @@ exampleSingleTrackInit creationTime =   SingleAudioTrackInit                   (MovieHeader $-                   V0 (creationTime :+ 0 :+ Default :+ durationFromSeconds Default 1) :++                   V0 (creationTime :+ 0 :+ Template :+ durationFromSeconds Template 1) :+                    def)                   (TrackHeader $-                   V0 (0 :+ 0 :+ 1 :+ Constant :+ durationFromSeconds Default 1) :++                   V0 (0 :+ 0 :+ 1 :+ Constant :+ durationFromSeconds Template 1) :+                    def)-                  (MediaHeader $ def)-                  (Handler $ def :+ AudioTrack :+ def :+ (Custom "Hello world!"))+                  (MediaHeader def)+                  (namedAudioTrackHandler "Hello world")                   (SoundMediaHeader def)
spec/DataReferenceSpec.hs view
@@ -1,25 +1,19 @@ module DataReferenceSpec (spec) where -import Test.Hspec-import Data.ByteString.IsoBaseFileFormat.Boxes--import qualified Data.ByteString.Builder as B-import qualified Data.ByteString.Lazy as BL-import qualified Data.Binary.Get as Binary-import qualified Data.Text as T+import           Data.ByteString.IsoBaseFileFormat.Boxes+import           Test.Hspec  spec :: Spec-spec = return ()---   describe "IsBoxContent" $ do---     describe "LocalMediaEntry" $ do---       describe "boxSize" $ do---         it "returns 0" $---           let actual = boxSize (localMediaDataReference :: DRef)---               --         dref: size+fourcc+fullbox+entries -> 4 * 4bytes---               expected = 4 + 4 + 4 + 4 + (4 + 4 + boxSize ("xxxx" :+ FullBox Default 0 () :: DEntryLocal))---           in actual `shouldBe` expected------ -- type DRef = Box (Dash 0) DataReference--- type DEntryLocal = FourCc :+ FullBox 0 ()--- type DEntryUrl = FourCc :+ FullBox 0 (T.Text)--- type DEntryUrn = FourCc :+ FullBox 0 (T.Text :+ T.Text)+spec =+   describe "IsBoxContent" $+     describe "LocalMediaEntry" $+       describe "boxSize" $+         it "returns 0" $+           let actual = boxSize localMediaDataReference+               expected = drefHeader + entryField + durlHeader+               drefHeader = boxHeader + fullHeader+               entryField = 4+               durlHeader = boxHeader + fullHeader+               boxHeader = 4 + 4+               fullHeader = 4+           in actual `shouldBe` expected
src/Data/ByteString/IsoBaseFileFormat/Boxes.hs view
@@ -3,32 +3,43 @@   ( module X)   where -import Data.ByteString.IsoBaseFileFormat.Boxes.Box as X-import Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields as X-import Data.ByteString.IsoBaseFileFormat.Boxes.DataInformation as X-import Data.ByteString.IsoBaseFileFormat.Boxes.DataReference as X-import Data.ByteString.IsoBaseFileFormat.Boxes.FileType as X-import Data.ByteString.IsoBaseFileFormat.Boxes.FullBox as X-import Data.ByteString.IsoBaseFileFormat.Boxes.Handler as X-import Data.ByteString.IsoBaseFileFormat.Boxes.Media as X-import Data.ByteString.IsoBaseFileFormat.Boxes.MediaData as X-import Data.ByteString.IsoBaseFileFormat.Boxes.MediaHeader as X-import Data.ByteString.IsoBaseFileFormat.Boxes.MediaInformation as X-import Data.ByteString.IsoBaseFileFormat.Boxes.Movie as X-import Data.ByteString.IsoBaseFileFormat.Boxes.MovieHeader as X-import Data.ByteString.IsoBaseFileFormat.Boxes.ProgressiveDownloadInformation as X-import Data.ByteString.IsoBaseFileFormat.Boxes.Language as X-import Data.ByteString.IsoBaseFileFormat.Boxes.Skip as X-import Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader as X-import Data.ByteString.IsoBaseFileFormat.Boxes.Time as X-import Data.ByteString.IsoBaseFileFormat.Boxes.Track as X-import Data.ByteString.IsoBaseFileFormat.Boxes.TrackHeader as X-import Data.ByteString.IsoBaseFileFormat.Boxes.Versioned as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.AudioSampleEntry               as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.Box                            as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields                      as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.DataEntryUrl                   as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.DataEntryUrn                   as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.DataInformation                as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.DataReference                  as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.FileType                       as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.FullBox                        as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.Handler                        as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.HintMediaHeader                as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.HintSampleEntry                as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.Language                       as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.Media                          as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.MediaData                      as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.MediaHeader                    as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.MediaInformation               as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry            as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.Movie                          as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.MovieHeader                    as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.NullMediaHeader                as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.ProgressiveDownloadInformation as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.SampleDescription              as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.SampleEntry                    as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.SampleTable                    as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.Skip                           as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.SoundMediaHeader               as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader            as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.Time                           as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.TimeToSample                   as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.Track                          as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.TrackHeader                    as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.Versioned                      as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.VideoMediaHeader               as X+import           Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry              as X -import Data.Int as X-import Data.Kind as X  (Type, Constraint)-import Data.Maybe as X-import Data.Type.Bool as X-import Data.Type.Equality as X-import Text.Printf as X-import Data.Default as X+import           Data.Kind                                                              as X+                                                                                              (Constraint,+                                                                                              Type)+import           Text.Printf                                                            as X
+ src/Data/ByteString/IsoBaseFileFormat/Boxes/AudioSampleEntry.hs view
@@ -0,0 +1,40 @@+-- | Detailed audio sample description.+module Data.ByteString.IsoBaseFileFormat.Boxes.AudioSampleEntry where++import Data.ByteString.IsoBaseFileFormat.Boxes.Box+import Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields+import Data.ByteString.IsoBaseFileFormat.Boxes.Handler+import Data.ByteString.IsoBaseFileFormat.Boxes.SampleEntry++-- | Construct an audio sample entry box.+audioSampleEntry ::+     (KnownSymbol+       (BoxTypeSymbol (SampleEntry 'AudioTrack (AudioCoding c))))+  => AudioCoding c+  -> U16 "data_reference_index"+  -> SampleEntry 'AudioTrack (AudioCoding c)+  -> Box (SampleEntry 'AudioTrack (AudioCoding c))+audioSampleEntry _ = sampleEntry++-- | Fields if audio sample entries+newtype instance SampleEntry 'AudioTrack (AudioCoding c) where+    AudioSampleEntry+      :: Constant (U32Arr "reserved" 2) '[0,0]+      :+ Template (U16 "channelcount") 2+      :+ Template (U16 "samplesize") 16+      :+ U16 "pre_defined"+      :+ Constant (U16 "reserved") 0+      :+ Template (U32 "samplerate") (DefaultSoundSamplerate * 65536)+      -- TODO implement fix point integer+      -> SampleEntry 'AudioTrack (AudioCoding c)+    deriving (IsBoxContent, Default)++type DefaultSoundSamplerate = 48000++-- | A coproduct of audio codec types+data family AudioCoding (c :: Symbol)++-- | The MPEG-4 AAC Audio codec+data instance AudioCoding "mp4a" = Mpeg4Aac++type instance BoxTypeSymbol (AudioCoding c) = c
src/Data/ByteString/IsoBaseFileFormat/Boxes/Box.hs view
@@ -13,26 +13,29 @@        where  import Data.ByteString.IsoBaseFileFormat.Util.TypeLayout as X+import Data.Default as X+import Data.Foldable as X (fold)+import Data.Int as X+import Data.Maybe as X+import Data.Tagged as X+import Data.Proxy as X+import Data.Word as X import Data.Bits as X import Data.ByteString.Builder as X import Data.Monoid as X-import Data.Proxy as X-import Data.Word as X import Data.Kind import GHC.TypeLits as X-import Data.String-import Data.Default-import Data.Singletons.Prelude.List (Length)-import Data.Type.Equality-import Data.Type.Bool+import Data.String as X+import Data.Singletons.Prelude.List (Length, (:++))+import Data.Type.Equality as X+import Data.Type.Bool as X import qualified Data.Text as T import qualified Data.Text.Encoding as T-import Data.Singletons.Prelude.List ((:++)) import qualified Data.ByteString as B  -- * Box Type Classes -- | Base class for all (abstract/phantom/normal-) types that represent boxes-class (KnownSymbol (BoxTypeSymbol t), IsBoxContent (BoxContent t)) => IsBox t  where+class (KnownSymbol (BoxTypeSymbol t), IsBoxContent (BoxContent t)) => IsBox (t :: Type) where   type BoxContent t   type BoxContent t = t   toBoxType :: proxy t -> BoxType@@ -42,7 +45,7 @@ -- that  an instance of this type family exists for every 'IsBox' instance. -- This family could not be associative since it is used by type families that -- cannot have type class constraints.-type family BoxTypeSymbol t :: Symbol+type family BoxTypeSymbol (t :: k) :: Symbol  -- | Types that go into a box. A box content is a piece of data that can be -- reused in different instances of 'IsBox'. It has no 'BoxType' and hence@@ -51,14 +54,13 @@   boxSize :: a -> BoxSize   boxBuilder :: a -> Builder --- * Data types-+-- * Box Contents+--  TODO move all IsBoxContent stuff to BoxContent.hs  -- | A type that wraps the contents of a box and the box type. data Box b where         Box ::-            (IsBox b) =>-            BoxContent b -> Box b+            !(BoxContent b) -> Box b  instance IsBox b => IsBox (Box b) where   type BoxContent (Box b) = BoxContent b@@ -66,7 +68,7 @@  type instance BoxTypeSymbol (Box b) = BoxTypeSymbol b -instance IsBoxContent (Box cnt) where+instance IsBox cnt => IsBoxContent (Box cnt) where   boxBuilder b@(Box cnt) = sB <> tB <> sExtB <> tExtB <> cntB     where s = boxSize b           t = toBoxType b@@ -81,10 +83,13 @@             boxSize (BoxTypeExtension t)           t = toBoxType b +instance (Default (BoxContent b)) => Default (Box b) where+  def = Box def+ -- | Compose 'BoxContent' and 'Boxes' under the Constraint that they are -- composable. data ContainerBox b (bs :: [Type]) where-  ContainerBox :: IsBox b => BoxContent b -> Boxes bs -> ContainerBox b bs+  ContainerBox :: IsBox b => !(BoxContent b) -> !(Boxes bs) -> ContainerBox b bs  instance (IsBox b) => IsBox (ContainerBox b bs) @@ -97,10 +102,10 @@ -- | A heterogenous collection of boxes. data Boxes (boxTypes :: [Type]) where     NoBoxes :: Boxes '[]-    (:.) :: Box l -> Boxes r -> Boxes (Box l ': r)+    (:.) :: IsBox l => !(Box l) -> !(Boxes r) -> Boxes (Box l ': r)     -- | Create a 'Boxes' collection from two 'Box'es-    (:<>) :: Boxes l -> Boxes r -> Boxes (l :++ r)-    (:|) :: Box l -> Box r -> Boxes '[Box l, Box r]+    (:<>) :: !(Boxes l) -> !(Boxes r) -> Boxes (l :++ r)+    (:|) :: (IsBox l, IsBox r) => !(Box l) -> !(Box r) -> Boxes '[Box l, Box r]  infixr 1 :<> infixr 2 :.@@ -108,11 +113,11 @@ infixr 3 $:  -- | Apply a function to a 'Boxes' collection containing only a single 'Box'.-($:) :: (Boxes '[Box l] -> r) -> Box l -> r+($:) :: IsBox l => (Boxes '[Box l] -> r) -> Box l -> r ($:) f = f . singletonBox  -- | Create a 'Boxes' collection with a single 'Box'.-singletonBox :: Box l -> Boxes '[Box l]+singletonBox :: IsBox l =>  Box l -> Boxes '[Box l] singletonBox b = b :. NoBoxes  -- | Get the elements in a type level array@@ -142,7 +147,7 @@ -- the end of the file. data BoxSize   = UnlimitedSize-  | BoxSize Word64+  | BoxSize !Word64   deriving (Show,Eq)  instance IsBoxContent BoxSize where@@ -172,7 +177,7 @@  -- | The 'BoxSize' can be > 2^32 in which case an 'BoxSizeExtension' must be -- added after the type field.-data BoxSizeExtension =+newtype BoxSizeExtension =   BoxSizeExtension BoxSize  instance IsBoxContent BoxSizeExtension where@@ -193,10 +198,10 @@   =     -- | `FourCc` can be used as @boxType@ in `Box`, standard four letter character     -- code, e.g. @ftyp@-    StdType FourCc+    StdType !FourCc   |     -- | CustomBoxType defines custom @boxType@s in `Box`es.-    CustomBoxType String+    CustomBoxType !String   deriving (Show,Eq)  -- | Create a box type from a 'Symbol'. Parse the  symbol value, if it's a four@@ -205,7 +210,7 @@ parseBoxType :: KnownSymbol t => proxy t -> BoxType parseBoxType px = StdType (fromString (symbolVal px)) --- | A type containin a printable four letter character code.+-- | A type containin a printable four letter character code. TODO replace impl with U32Text newtype FourCc =   FourCc (Char,Char,Char,Char)   deriving (Show,Eq)@@ -234,7 +239,7 @@ -- | When using custom types extra data must be written after the extra size -- information. Since the box type and the optional custom box type are not -- guaranteed to be consequtive, this type handles the /second/ part seperately.-data BoxTypeExtension =+newtype BoxTypeExtension =   BoxTypeExtension BoxType  instance IsBoxContent BoxTypeExtension where@@ -260,12 +265,19 @@                          --   boxSize = foldr' (\e acc -> acc + boxSize e) 0                          --   boxBuilder = foldMap boxBuilder +instance Default B.ByteString where+  def = mempty+ -- | This 'Text' instance writes a null terminated UTF-8 string. instance IsBoxContent T.Text where   boxSize = (1+) . fromIntegral . T.length   boxBuilder txt = boxBuilder (T.encodeUtf8 txtNoNulls) <> word8 0     where txtNoNulls = T.map (\c -> if c == '\0' then ' ' else c) txt +instance Default T.Text where+  def = ""++ -- | This instance writes zero bytes for 'Nothing' and delegates on 'Just'. instance IsBoxContent a => IsBoxContent (Maybe a) where   boxSize = maybe 0 boxSize@@ -274,16 +286,43 @@ -- * Box concatenation  -- | Box content composition-data a :+ b = a :+ b+data a :+ b = !a :+ !b  infixr 3 :+  instance (IsBoxContent p,IsBoxContent c) => IsBoxContent (p :+ c) where-  boxSize (p :+ c) = boxSize p + boxSize c+  boxSize    (p :+ c) = boxSize    p +  boxSize    c   boxBuilder (p :+ c) = boxBuilder p <> boxBuilder c  instance (Default a, Default b) => Default (a :+ b) where   def = def :+ def++-- * Tagged boxes++instance IsBoxContent c => IsBoxContent (Tagged s c) where+  boxSize = boxSize . untag+  boxBuilder = boxBuilder . untag++instance Default c => Default (Tagged s c) where+  def = Tagged def++-- * List Box Content++-- | A list of things that renders to a size field with the number of elements+-- and the sequence of elements. This type is index with the size field type.+newtype ListContent sizeType contentType =+  ListContent [contentType]++instance (Num sizeType, IsBoxContent sizeType, IsBoxContent contentType)+  => IsBoxContent (ListContent sizeType contentType) where+    boxSize (ListContent es) =+      boxSize (fromIntegral (length es) :: sizeType) + sum (boxSize <$> es)+    boxBuilder (ListContent es) =+      boxBuilder (fromIntegral (length es) :: sizeType)+      <> fold (boxBuilder <$> es)++instance Default (ListContent sizeTupe contentType) where+  def = ListContent []  -- * Type Layout Rule Matchers 
src/Data/ByteString/IsoBaseFileFormat/Boxes/BoxFields.hs view
@@ -4,16 +4,15 @@        where  import Data.ByteString.IsoBaseFileFormat.Boxes.Box-import Data.ByteString.IsoBaseFileFormat.Boxes.Versioned-import Data.Default-import Data.Int-import Data.Maybe import Text.Printf import Data.Singletons import Data.Singletons.Prelude.List import qualified Data.Vector.Sized as Vec import qualified Data.Text as T+import qualified Data.Text.Encoding as T+import qualified Data.ByteString as B + -- * Scalar box fields  type U64 label = Scalar Word64 label@@ -27,7 +26,6 @@ i64 = Scalar  type U32 label = Scalar Word32 label- type I32 label = Scalar Int32 label  u32 :: Word32 -> U32 label@@ -214,15 +212,15 @@ -- 'ScalarArray', with a type level default value. The wrapped content must -- implement 'FromTypeLit'. data Template o v where-        Default :: Template o v+        Template :: Template o v         Custom :: o -> Template o v  instance Default (Template o v) where-  def = Default+  def = Template  -- | Get a value from a 'Template'. templateValue :: FromTypeLit o v => Template o v -> o-templateValue d@Default = fromTypeLit d+templateValue d@Template = fromTypeLit d templateValue (Custom v) = v  instance (IsBoxContent o,FromTypeLit o v) => IsBoxContent (Template o v) where@@ -247,9 +245,54 @@ instance KnownSymbol str => FromTypeLit T.Text (str :: Symbol) where   fromTypeLit = T.pack . symbolVal --- * Versioned support+-- * String/Text field types --- | A utility for 'Versioned' to apply a type constructor to  either a--- @('Scalar' Word32)@ or a @('Scalar' Word64)@ depending on the type level--- version. This uses 'SelectByVersion'. -type U32U64 c = SelectByVersion c (Scalar Word32) (Scalar Word64)+-- | A fixed size string, the first byte is the string length, after the String,+-- the field is padded with @0@ bytes. The string must be in UTF8 format.+newtype FixSizeText (len :: Nat) (label :: Symbol) where+  FixSizeText :: T.Text -> FixSizeText len label++-- | A constraint that matches type level numbers that are valid text sizes for+--  'FixSizeText's.+type IsTextSize len = (KnownNat len, 1 <= len, len <= 255)++instance IsTextSize len => IsBoxContent (FixSizeText len label) where+  boxSize    _               = fromIntegral (natVal (Proxy :: Proxy len))+  boxBuilder (FixSizeText t) =+    let+      --                                         leave room for the size byte+      maxSize             = fromIntegral (natVal (Proxy :: Proxy len) - 1)+      displayableText     = B.take maxSize (T.encodeUtf8 t)+      displayableTextSize = B.length displayableText+      paddingSize         = max 0 (maxSize - displayableTextSize)+      in+               word8      (fromIntegral displayableTextSize)+            <> byteString displayableText+            <> fold       (replicate paddingSize (word8 0))++instance IsTextSize len => Default (FixSizeText len label) where+  def = FixSizeText ""++-- | Four character strings embedded in a uint32.+newtype U32Text (label :: Symbol) where+  U32Text :: Word32 -> U32Text label++instance IsString (U32Text label) where+  fromString str = U32Text $+    let cw s c = (0xFF .&. (fromIntegral (fromEnum c))) `shiftL` s+        in case str of+             []          -> 0x20202020+             [a]         -> (cw 24 a .|. 0x00202020)+             [a,b]       -> (cw 24 a .|. cw 16 b  .|. 0x00002020)+             [a,b,c]     -> (cw 24 a .|. cw 16 b  .|. cw 8 c  .|. 0x20)+             (a:b:c:d:_) -> (cw 24 a .|. cw 16 b  .|. cw 8 c  .|. cw 0 d)++instance IsBoxContent (U32Text label) where+  boxSize _ = 4+  boxBuilder (U32Text t) = word32BE t++instance KnownSymbol str => FromTypeLit (U32Text label) (str :: Symbol) where+  fromTypeLit = fromString . symbolVal++instance Default (U32Text label) where+  def = U32Text 0x20202020
+ src/Data/ByteString/IsoBaseFileFormat/Boxes/DataEntryUrl.hs view
@@ -0,0 +1,32 @@+-- | A data references URL.+module Data.ByteString.IsoBaseFileFormat.Boxes.DataEntryUrl+  (DataEntryUrl()+  ,localMediaDataEntryUrl+  ,dataEntryUrl+  )+  where++import Data.ByteString.IsoBaseFileFormat.Boxes.Box+import Data.ByteString.IsoBaseFileFormat.Boxes.FullBox+import qualified Data.Text as T++-- | A container for a URL or an indicator for local only media+newtype DataEntryUrl =+  DataEntryUrl (Maybe T.Text)+  deriving (Default,IsBoxContent)++-- | Create a 'DataEntryUrl' box for local media entry with the flag set and+-- empty content.+localMediaDataEntryUrl+  :: Box (FullBox DataEntryUrl 0)+localMediaDataEntryUrl = dataEntryUrl True Nothing++-- | Create a 'DataEntryUrl' box. The flag determines if the url is local, i.e.+-- the media data is in the same file.+dataEntryUrl+  :: Bool -> Maybe T.Text -> Box (FullBox DataEntryUrl 0)+dataEntryUrl isLocal Nothing = Box (FullBox (fromIntegral $ fromEnum isLocal) $ DataEntryUrl Nothing)+dataEntryUrl isLocal murl = Box (FullBox (fromIntegral $ fromEnum isLocal) $ DataEntryUrl murl)++instance IsBox DataEntryUrl+type instance BoxTypeSymbol DataEntryUrl = "url "
+ src/Data/ByteString/IsoBaseFileFormat/Boxes/DataEntryUrn.hs view
@@ -0,0 +1,24 @@+-- | A table of data references (URN with optional URL.+module Data.ByteString.IsoBaseFileFormat.Boxes.DataEntryUrn+  (DataEntryUrn()+  ,dataEntryUrn+  )+  where++import Data.ByteString.IsoBaseFileFormat.Boxes.Box+import Data.ByteString.IsoBaseFileFormat.Boxes.FullBox+import qualified Data.Text as T++-- | A container for a URN and optionally a URL+newtype DataEntryUrn =+  DataEntryUrn (T.Text :+ T.Text)+  deriving (IsBoxContent)++-- | Create a 'DataEntryUrn' box. The flag determines if the url is local, i.e.+-- the media data is in the same file.+dataEntryUrn+  :: Bool -> T.Text -> T.Text -> Box (FullBox DataEntryUrn 0)+dataEntryUrn isLocal urn url = Box (FullBox (fromIntegral $ fromEnum isLocal) $ DataEntryUrn $ urn :+ url)++instance IsBox DataEntryUrn+type instance BoxTypeSymbol DataEntryUrn = "urn "
src/Data/ByteString/IsoBaseFileFormat/Boxes/DataReference.hs view
@@ -4,39 +4,22 @@ -- same file as the. module Data.ByteString.IsoBaseFileFormat.Boxes.DataReference   (DataReference()-  ,DataEntryUrl()-  ,DataEntryUrn()   ,dataReference   ,localMediaDataReference-  ,localMediaDataEntryUrl-  ,dataEntryUrl-  ,dataEntryUrn   )   where  import Data.ByteString.IsoBaseFileFormat.Boxes.Box import Data.ByteString.IsoBaseFileFormat.Boxes.FullBox+import Data.ByteString.IsoBaseFileFormat.Boxes.DataEntryUrl import Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields-       hiding (Default)-import qualified Data.Text as T import Data.Singletons.Prelude.List (Length)-import Data.Default  -- | A container for 'DataEntryUrl's and 'DataEntryUrn's newtype DataReference =   DataReference (U32 "entry_count")   deriving (Default,IsBoxContent) --- | A container for a URL-newtype DataEntryUrl =-  DataEntryUrl (Maybe T.Text)-  deriving (Default,IsBoxContent)---- | A container for a URN and optionally a URL-newtype DataEntryUrn =-  DataEntryUrn (T.Text :+ T.Text)-  deriving (IsBoxContent)- -- | Create a 'DataReference' box. dataReference   :: KnownNat (Length ts)@@ -50,30 +33,5 @@   :: Box (ContainerBox (FullBox DataReference 0) '[Box (FullBox DataEntryUrl 0)]) localMediaDataReference = dataReference (singletonBox localMediaDataEntryUrl) --- | Create a 'DataEntryUrl' box for local media entry with the flag set and--- empty content.-localMediaDataEntryUrl-  :: Box (FullBox DataEntryUrl 0)-localMediaDataEntryUrl = dataEntryUrl True Nothing---- | Create a 'DataEntryUrl' box. The flag determines if the url is local, i.e.--- the media data is in the same file.-dataEntryUrl-  :: Bool -> Maybe T.Text -> Box (FullBox DataEntryUrl 0)-dataEntryUrl isLocal Nothing = Box (FullBox (fromIntegral $ fromEnum isLocal) $ DataEntryUrl Nothing)-dataEntryUrl isLocal murl = Box (FullBox (fromIntegral $ fromEnum isLocal) $ DataEntryUrl murl)---- | Create a 'DataEntryUrn' box. The flag determines if the url is local, i.e.--- the media data is in the same file.-dataEntryUrn-  :: Bool -> T.Text -> T.Text -> Box (FullBox DataEntryUrn 0)-dataEntryUrn isLocal urn url = Box (FullBox (fromIntegral $ fromEnum isLocal) $ DataEntryUrn $ urn :+ url)- instance IsBox DataReference type instance BoxTypeSymbol DataReference = "dref"--instance IsBox DataEntryUrn-type instance BoxTypeSymbol DataEntryUrn = "urn "--instance IsBox DataEntryUrl-type instance BoxTypeSymbol DataEntryUrl = "urn "
src/Data/ByteString/IsoBaseFileFormat/Boxes/FullBox.hs view
@@ -15,6 +15,10 @@           -> BoxContent t           -> FullBox t version +instance (KnownNat version, IsBox t, Default (BoxContent t))+  => Default (FullBox t version) where+  def = FullBox 0 def+ instance (KnownNat v, IsBox t) => IsBox (FullBox t v) where   type BoxContent (FullBox t v) = FullBox t v 
src/Data/ByteString/IsoBaseFileFormat/Boxes/Handler.hs view
@@ -1,48 +1,108 @@+{-# LANGUAGE UndecidableInstances #-} -- | A 'Handler' box describes how a track is presentation and by which sensory -- process it is perceived, e.g. audio, video, text, see 'HandlerType'-module Data.ByteString.IsoBaseFileFormat.Boxes.Handler where+module Data.ByteString.IsoBaseFileFormat.Boxes.Handler+  (Handler()+  ,handler+  ,audioTrackHandler+  ,namedAudioTrackHandler+  ,videoTrackHandler+  ,namedVideoTrackHandler+  ,hintTrackHandler+  ,namedHintTrackHandler+  ,timedMetadataTrackHandler+  ,namedTimedMetadataTrackHandler+  ,auxilliaryVideoTrackHandler+  ,namedAuxilliaryVideoTrackHandler+  ,HandlerType(..)+  ,HandlerTypeCode)+  where  import Data.ByteString.IsoBaseFileFormat.Boxes.Box import Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields import Data.ByteString.IsoBaseFileFormat.Boxes.FullBox-import Data.Default import qualified Data.Text as T  -- | Handler box fields. A handler box may also contain a null terminated--- description text in UTF-8.-newtype Handler where-  Handler :: Constant (U32 "pre_defined") 0-          :+ HandlerType-          :+ Constant (U32Arr "reserved" 3) '[0,0,0]-          :+ Template T.Text ""-          -> Handler-  deriving (IsBoxContent, Default)+-- description text in UTF-8. The 'T.Text' parameter is a human readable name of+-- the track type for debugging.+newtype Handler (t :: HandlerType) where+        Handler ::+          Constant (U32 "pre_defined") 0 :++            Constant (U32Text "t") (HandlerTypeCode t) :++              Constant (U32Arr "reserved" 3) '[0, 0, 0] :++                Template T.Text "" -> Handler t +deriving instance (KnownSymbol (HandlerTypeCode t)) => IsBoxContent (Handler t)+deriving instance Default (Handler t)+ -- | A 'Handler' can be exactly one of these.-data HandlerType =-    VideoTrack+data HandlerType+  = VideoTrack   | AudioTrack   | HintTrack-  | TimedMetadataTrack+  | TimedMetaDataTrack   | AuxilliaryVideoTrack +type family HandlerTypeCode (handlertype :: HandlerType) :: Symbol where+  HandlerTypeCode 'VideoTrack           = "vide"+  HandlerTypeCode 'AudioTrack           = "soun"+  HandlerTypeCode 'HintTrack            = "hint"+  HandlerTypeCode 'TimedMetaDataTrack   = "meta"+  HandlerTypeCode 'AuxilliaryVideoTrack = "auxv"+ -- | Create a 'Handler' box. handler-  :: Handler -> Box (FullBox Handler 0)+  :: (KnownSymbol (HandlerTypeCode t))+  => Handler t -> Box (FullBox (Handler t) 0) handler = fullBox 0 -instance IsBox Handler where-  type BoxContent Handler = Handler+-- | Create 'Handler' fields for 'AudioTrack's with @"Audio Track"@ as @name@.+audioTrackHandler :: Handler 'AudioTrack+audioTrackHandler = namedAudioTrackHandler "Audio Track" -type instance BoxTypeSymbol Handler = "hdlr"+-- | Create 'Handler' fields for 'AudioTrack's, with the given name.+namedAudioTrackHandler :: T.Text -> Handler 'AudioTrack+namedAudioTrackHandler txt = Handler (def :+ def :+ def :+ Custom txt) -instance Default HandlerType where-  def = AudioTrack+-- | Create 'Handler' fields for 'VideoTrack's with @"Video Track"@ as @name@.+videoTrackHandler :: Handler 'VideoTrack+videoTrackHandler = namedVideoTrackHandler "Video Track" -instance IsBoxContent HandlerType where-  boxSize    _                    = 4-  boxBuilder VideoTrack           = boxBuilder (FourCc ('v','i','d','e'))-  boxBuilder AudioTrack           = boxBuilder (FourCc ('s','o','u','n'))-  boxBuilder HintTrack            = boxBuilder (FourCc ('h','i','n','t'))-  boxBuilder TimedMetadataTrack   = boxBuilder (FourCc ('m','e','t','a'))-  boxBuilder AuxilliaryVideoTrack = boxBuilder (FourCc ('a','u','x','v'))+-- | Create 'Handler' fields for 'VideoTrack's, with the given name.+namedVideoTrackHandler :: T.Text -> Handler 'VideoTrack+namedVideoTrackHandler txt = Handler (def :+ def :+ def :+ Custom txt)++-- | Create 'Handler' fields for 'HintTrack's with @"Hint Track"@ as @name@.+hintTrackHandler :: Handler 'HintTrack+hintTrackHandler = namedHintTrackHandler "Hint Track"++-- | Create 'Handler' fields for 'HintTrack's, with the given name.+namedHintTrackHandler :: T.Text -> Handler 'HintTrack+namedHintTrackHandler txt = Handler (def :+ def :+ def :+ Custom txt)++-- | Create 'Handler' fields for 'TimedMetadataTrack's with @"TimedMetadata+-- Track"@ as @name@.+timedMetadataTrackHandler :: Handler 'TimedMetaDataTrack+timedMetadataTrackHandler =+  namedTimedMetadataTrackHandler "Timed Metadata Track"++-- | Create 'Handler' fields for 'TimedMetadataTrack's, with the given name.+namedTimedMetadataTrackHandler :: T.Text -> Handler 'TimedMetaDataTrack+namedTimedMetadataTrackHandler txt =+  Handler (def :+ def :+ def :+ Custom txt)++-- | Create 'Handler' fields for 'AuxilliaryVideoTrack's with+-- @"AuxilliaryVideoTrack Track"@ as @name@.+auxilliaryVideoTrackHandler :: Handler 'AuxilliaryVideoTrack+auxilliaryVideoTrackHandler =+  namedAuxilliaryVideoTrackHandler "Timed Metadata Track"++-- | Create 'Handler' fields for 'AuxilliaryVideoTrack's, with the given name.+namedAuxilliaryVideoTrackHandler :: T.Text -> Handler 'AuxilliaryVideoTrack+namedAuxilliaryVideoTrackHandler txt =+  Handler (def :+ def :+ def :+ (Custom txt))++instance (KnownSymbol (HandlerTypeCode t)) => IsBox (Handler t)++type instance BoxTypeSymbol (Handler t) = "hdlr"
+ src/Data/ByteString/IsoBaseFileFormat/Boxes/HintMediaHeader.hs view
@@ -0,0 +1,28 @@+-- | Media-independent properties of a hint tracks media content.+module Data.ByteString.IsoBaseFileFormat.Boxes.HintMediaHeader where++import Data.ByteString.IsoBaseFileFormat.Boxes.Box+import Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields+import Data.ByteString.IsoBaseFileFormat.Boxes.FullBox+import Data.ByteString.IsoBaseFileFormat.Boxes.Handler+import Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader++type instance MediaHeaderFor 'HintTrack = HintMediaHeader++-- | Hint data box.+newtype HintMediaHeader where+  HintMediaHeader+   :: U16 "maxPDUsize"+   :+ U16 "avgPDUsize"+   :+ U16 "maxbitrate"+   :+ U16 "avgbitrate"+   :+ U32 "reserved"+   -> HintMediaHeader+   deriving (Default, IsBoxContent)++-- | Create a hint media header data box.+hintMediaHeader :: HintMediaHeader -> Box (FullBox HintMediaHeader 0)+hintMediaHeader = fullBox 0++instance IsBox HintMediaHeader+type instance BoxTypeSymbol HintMediaHeader = "hmhd"
+ src/Data/ByteString/IsoBaseFileFormat/Boxes/HintSampleEntry.hs view
@@ -0,0 +1,17 @@+{-# LANGUAGE UndecidableInstances #-}+-- | Format of the hint track as well as streaming protocol settings.+module Data.ByteString.IsoBaseFileFormat.Boxes.HintSampleEntry where++import Data.ByteString.IsoBaseFileFormat.Boxes.SampleEntry+import Data.ByteString.IsoBaseFileFormat.Boxes.Handler+import Data.ByteString.IsoBaseFileFormat.Boxes.Box++-- | Protocol specific data. To create 'HintSampleEntry's a protocol specific+-- 'HintFields' instance must be provided+data instance SampleEntry 'HintTrack protocol where+  HintSampleEntry+    :: (IsBoxContent (HintFields protocol), Default (HintFields protocol))+     => HintFields protocol -> SampleEntry 'HintTrack protocol++-- | Family of protocol specific contents for 'HintTrack's.+type family HintFields (protocol :: Symbol)
src/Data/ByteString/IsoBaseFileFormat/Boxes/Language.hs view
@@ -2,8 +2,6 @@ module Data.ByteString.IsoBaseFileFormat.Boxes.Language (Language, mkLanguage) where  import Data.ByteString.IsoBaseFileFormat.Boxes.Box-import Data.Default-import Data.String  -- | A Boxfield contains an ISO 639-2-T alpha-3 language code,  which is encoded -- as a single bit followed by three 5 bit words, each representing the
+ src/Data/ByteString/IsoBaseFileFormat/Boxes/MetaDataSampleEntry.hs view
@@ -0,0 +1,110 @@+module Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry where++import Data.ByteString.IsoBaseFileFormat.Boxes.Box+import Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields+import Data.ByteString.IsoBaseFileFormat.Boxes.FullBox+import Data.ByteString.IsoBaseFileFormat.Boxes.Handler+import Data.ByteString.IsoBaseFileFormat.Boxes.SampleEntry+import qualified Data.Text as T+import qualified Data.ByteString as B+import Data.Tagged ()+import Data.Default ()++-- * Generat meta data sample entry++-- | Construct a meta data sample entry box. For every 'MetaDataCoding'+-- a 'SampleEntry' instances must be provided.+metaDataSampleEntry ::+     MetaDataCoding c+  -> U16 "data_reference_index"+  -> SampleEntry 'TimedMetaDataTrack (MetaDataCoding c)+  -> Box (SampleEntry 'TimedMetaDataTrack (MetaDataCoding c))+metaDataSampleEntry _ = sampleEntry++type instance BoxTypeSymbol (MetaDataCoding c) = c++-- | A coproduct of meta data codings (XML, Text, ...)+data family MetaDataCoding (c :: Symbol)++-- * XML Meta Data++-- | The xml meta data samples declaration+newtype instance MetaDataCoding "metx" =+  XMLMetaDataSampleEntry+     (  Tagged "content_encoding" T.Text+     :+ Tagged "namespace"        T.Text+     :+ Tagged "schema_location"  T.Text+     :+                           Maybe (Box BitRate))+    deriving (IsBoxContent, Default)++-- * Text Meta Data++-- | The plain text meta data samples declaration+newtype instance MetaDataCoding "mett" =+  TextMetaDataSampleEntry+     (  Tagged "content_encoding" T.Text+     :+ Tagged "mime_format"      T.Text+     :+                           Maybe (Box BitRate))+    deriving (IsBoxContent, Default)++-- * URI based meta data++-- | The URI meta data samples declaration+newtype instance MetaDataCoding "urim" =+  UriMetaDataSampleEntry+     (  Tagged "the_label" (Box Uri)+     :+ Tagged "init"      (Maybe (Box UriInit))+     :+                    Maybe (Box BitRate))+    deriving (IsBoxContent, Default)++-- * Uri Box++-- | Contents of a 'Uri' box.+type Uri = FullBox UriField 0++-- | The URI that's inside the box+newtype UriField =+  UriField (Tagged "theURI" T.Text)+  deriving (Default, IsBoxContent)++-- | Make box with a UTF-8 URI.+uriBox :: T.Text -> Box Uri+uriBox t = fullBox 0 (UriField (Tagged t))++type instance BoxTypeSymbol UriField = "uri "++instance IsBox UriField++-- * Uri-Init Box++-- | Opaque data for the applications processing 'Uri' meta data.+newtype UriInitField =+  UriInitField (Tagged "uri_initialization_data" B.ByteString)+  deriving (Default, IsBoxContent)++-- | A 'FullBox' an UriInitField.+type UriInit = FullBox UriInitField 0++-- | Make box an 'UriInitField'+uriInitBox :: B.ByteString -> Box UriInit+uriInitBox = fullBox 0 . UriInitField . Tagged++type instance BoxTypeSymbol UriInitField = "uriI"++instance IsBox UriInitField++-- * Bit Rate Box++-- | Create a box for bit rates. Every 'SampleEntry' instance for meta data+-- may contain this box at the end.+bitRateBox :: BitRate -> Box BitRate+bitRateBox = Box++-- | Bitrate info for meta data samples+newtype BitRate =+  BitRate (U32 "bufferSizeDB" :+ U32 "maxBitrate" :+ U32 "avgBitrate")+  deriving (Default, IsBoxContent)++type instance BoxTypeSymbol BitRate = "btrt"++instance IsBox BitRate
+ src/Data/ByteString/IsoBaseFileFormat/Boxes/NullMediaHeader.hs view
@@ -0,0 +1,21 @@+-- | Indicate that a tracks media content is /null/ or /dummy/ media.+module Data.ByteString.IsoBaseFileFormat.Boxes.NullMediaHeader where++import Data.ByteString.IsoBaseFileFormat.Boxes.Box+import Data.ByteString.IsoBaseFileFormat.Boxes.FullBox++-- | Null header data box.+data NullMediaHeader = NullMediaHeader++-- | Create a null media header data box.+nullMediaHeader :: Box (FullBox NullMediaHeader 0)+nullMediaHeader = fullBox 0 NullMediaHeader++instance IsBox NullMediaHeader+type instance BoxTypeSymbol NullMediaHeader = "nmhd"++instance Default NullMediaHeader where+  def = NullMediaHeader+instance IsBoxContent NullMediaHeader where+  boxSize _ = 0+  boxBuilder _ = mempty
+ src/Data/ByteString/IsoBaseFileFormat/Boxes/SampleDescription.hs view
@@ -0,0 +1,27 @@+-- | Detailed information about the coced, as well as coding specific+-- initialization. Depending on the 'Trak' media type different kinds of sample+-- entry boxes are entailed.+module Data.ByteString.IsoBaseFileFormat.Boxes.SampleDescription where++import Data.ByteString.IsoBaseFileFormat.Boxes.Box+import Data.ByteString.IsoBaseFileFormat.Boxes.FullBox+import Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields+import Data.Singletons.Prelude.List (Length)++-- | A sample table contains no fieds.+newtype SampleDescription handlerType =+  SampleDescription (U32 "entry_count")+  deriving (Default,IsBoxContent)++-- | Create a hint media header data box.+sampleDescription+  :: (KnownNat (Length ts))+  => Boxes ts+  -> Box (ContainerBox (FullBox (SampleDescription h) 0) ts)+sampleDescription bs =+  containerBox (FullBox 0 $ SampleDescription (typeListLength bs))+               bs++instance IsBox (SampleDescription h)++type instance BoxTypeSymbol (SampleDescription  h) = "stsd"
+ src/Data/ByteString/IsoBaseFileFormat/Boxes/SampleEntry.hs view
@@ -0,0 +1,52 @@+{-# LANGUAGE UndecidableInstances #-}+-- | Connect a sample description to a data reference via an index into the data+-- reference entry table.+module Data.ByteString.IsoBaseFileFormat.Boxes.SampleEntry where++import Data.ByteString.IsoBaseFileFormat.Boxes.Box+import Data.ByteString.IsoBaseFileFormat.Boxes.Handler+import Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields++-- | Specific sample entries must provide an instance for this data family.+-- The @format@ parameter will be used as 'BoxTypeSymbol'.+data family SampleEntry (handlertype :: HandlerType) (format :: k)++-- | Create a 'SampleEntry' 'Box' from the data reference index and the+-- 'HandlerType' specific 'SampleEntry' instance.+sampleEntry+  :: forall (handlertype :: HandlerType) (format :: k)+  .  U16 "data_reference_index"+  -> SampleEntry handlertype format+  -> Box (SampleEntry handlertype format)+sampleEntry i c = Box (SampleEntryFields (Constant :+ i :+ c))++-- | A common header for all specific sample entries, the 'BoxContent' of the+-- abstract 'SampleEntry' is @SampleEntryFields (SampleEntry h f)@.+newtype SampleEntryFields a where+  SampleEntryFields+    :: Constant (U8Arr "reserved" 6) '[0,0,0,0,0,0]+    :+ U16 "data_reference_index"+    :+ a+    -> SampleEntryFields a+deriving instance IsBoxContent a => IsBoxContent (SampleEntryFields a)+deriving instance Default a => Default (SampleEntryFields a)++-- | Use this in 'IsMediaFileFormat's 'BoxLayout' to range over any specific+-- 'SampleEntry', disregarding the second parameter (that indicates low-level+-- format, protocol or codec characteristics).+data MatchSampleEntry (handlerType :: HandlerType)++type instance+  IsRuleConform (Box (SampleEntry g' f)) (MatchSampleEntry g) =+    HandlerTypeCode g' == HandlerTypeCode g++-- | The 'BoxTypeSymbol' of sample entry is exactly the @format@ type index of+-- the 'SampleEntry' family.+type instance+  BoxTypeSymbol (SampleEntry handlertype format) = BoxTypeSymbol format++instance (IsBoxContent (SampleEntry handlertype format)+         ,KnownSymbol (BoxTypeSymbol (SampleEntry handlertype format)))+  => IsBox (SampleEntry handlertype format) where+    type BoxContent (SampleEntry handlertype format) =+      SampleEntryFields (SampleEntry handlertype format)
+ src/Data/ByteString/IsoBaseFileFormat/Boxes/SampleTable.hs view
@@ -0,0 +1,19 @@+-- | Time and indexing information for the media samples in a track,a sample+-- table can reference 'DataReference' boxes via a 'SampleTableDescription'.+--+-- **NOTE** A /sample/ referes to a **frame** e.g. a video frame frame or a+-- block of audio samples.+module Data.ByteString.IsoBaseFileFormat.Boxes.SampleTable where++import Data.ByteString.IsoBaseFileFormat.Boxes.Box++-- | A sample table contains no fieds.+data SampleTable = SampleTable++-- | Create a hint media header data box.+sampleTable :: Boxes ts -> Box (ContainerBox SampleTable ts)+sampleTable = containerBox ()++instance IsBox SampleTable where+  type BoxContent SampleTable = ()+type instance BoxTypeSymbol SampleTable = "stbl"
+ src/Data/ByteString/IsoBaseFileFormat/Boxes/SoundMediaHeader.hs view
@@ -0,0 +1,25 @@+-- | Media-independent properties of a tracks sound content.+module Data.ByteString.IsoBaseFileFormat.Boxes.SoundMediaHeader where++import Data.ByteString.IsoBaseFileFormat.Boxes.Box+import Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields+import Data.ByteString.IsoBaseFileFormat.Boxes.FullBox+import Data.ByteString.IsoBaseFileFormat.Boxes.Handler+import Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader++type instance MediaHeaderFor 'AudioTrack = SoundMediaHeader++-- | Sound header data box.+newtype SoundMediaHeader where+  SoundMediaHeader+   :: Template (I16 "balance") 0+   :+ Constant (U16 "reserved") 0+   -> SoundMediaHeader+   deriving (Default, IsBoxContent)++-- | Create a sound media header data box.+soundMediaHeader :: SoundMediaHeader -> Box (FullBox SoundMediaHeader 0)+soundMediaHeader = fullBox 0++instance IsBox SoundMediaHeader+type instance BoxTypeSymbol SoundMediaHeader = "smhd"
src/Data/ByteString/IsoBaseFileFormat/Boxes/SpecificMediaHeader.hs view
@@ -1,79 +1,11 @@--- | Media-independent properties of a tracks media content.+-- | Select the specific media header from the 'HandlerType' module Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader where -import Data.ByteString.IsoBaseFileFormat.Boxes.Box-import Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields-import Data.ByteString.IsoBaseFileFormat.Boxes.FullBox-import Data.Default---- * Videos---- | Video header data box.-newtype VideoMediaHeader where-  VideoMediaHeader-   :: Template (U16 "graphicsmode") 0-   :+ Template (U16Arr "opcolor" 3) '[0,0,0]-   -> VideoMediaHeader-   deriving (Default, IsBoxContent)---- | Create a video media header data box.-videoMediaHeader :: VideoMediaHeader -> Box (FullBox VideoMediaHeader 0)-videoMediaHeader = fullBox 1--instance IsBox VideoMediaHeader-type instance BoxTypeSymbol VideoMediaHeader = "vmhd"---- * Sounds---- | Sound header data box.-newtype SoundMediaHeader where-  SoundMediaHeader-   :: Template (I16 "balance") 0-   :+ Constant (U16 "reserved") 0-   -> SoundMediaHeader-   deriving (Default, IsBoxContent)---- | Create a sound media header data box.-soundMediaHeader :: SoundMediaHeader -> Box (FullBox SoundMediaHeader 0)-soundMediaHeader = fullBox 0--instance IsBox SoundMediaHeader-type instance BoxTypeSymbol SoundMediaHeader = "smhd"---- * Hints---- | Hint data box.-newtype HintMediaHeader where-  HintMediaHeader-   :: U16 "maxPDUsize"-   :+ U16 "avgPDUsize"-   :+ U16 "maxbitrate"-   :+ U16 "avgbitrate"-   :+ U32 "reserved"-   -> HintMediaHeader-   deriving (Default, IsBoxContent)---- | Create a hint media header data box.-hintMediaHeader :: HintMediaHeader -> Box (FullBox HintMediaHeader 0)-hintMediaHeader = fullBox 0--instance IsBox HintMediaHeader-type instance BoxTypeSymbol HintMediaHeader = "hmhd"---- * Dummy/Null media---- | Null header data box.-data NullMediaHeader = NullMediaHeader---- | Create a null media header data box.-nullMediaHeader :: Box (FullBox NullMediaHeader 0)-nullMediaHeader = fullBox 0 NullMediaHeader--instance IsBox NullMediaHeader-type instance BoxTypeSymbol NullMediaHeader = "nmhd"+--+-- import Data.ByteString.IsoBaseFileFormat.Boxes.VideoMediaHeader+import Data.ByteString.IsoBaseFileFormat.Boxes.Handler+-- -instance Default NullMediaHeader where-  def = NullMediaHeader-instance IsBoxContent NullMediaHeader where-  boxSize _ = 0-  boxBuilder _ = mempty+-- | An open type family to select the specific media header from the+-- 'HandlerType'+type family MediaHeaderFor (t :: HandlerType)
+ src/Data/ByteString/IsoBaseFileFormat/Boxes/TimeToSample.hs view
@@ -0,0 +1,27 @@+-- | A table assigns each video frame or audio sample block, this is useful for+-- seeking in complex media files.+module Data.ByteString.IsoBaseFileFormat.Boxes.TimeToSample where++import Data.ByteString.IsoBaseFileFormat.Boxes.Box+import Data.ByteString.IsoBaseFileFormat.Boxes.FullBox+import Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields++-- | An alias for the box content type.+type TimeToSample = FullBox TimeToSampleTable 0++-- | Define an entry of the compact table, that specifes the namber of samples+--  with the same time delta. (All this to help random seeking in media).+type SttsEntry = U32 "sample_count" :+ U32 "sample_delta"++-- | A compact table to map decoding time to sample number.+newtype TimeToSampleTable =+  TimeToSampleTable (ListContent (U32 "entry_count") SttsEntry)+  deriving (Default, IsBoxContent)++-- | Create a hint media header data box.+timeToSample :: [SttsEntry] -> Box TimeToSample+timeToSample = fullBox 0 . TimeToSampleTable . ListContent++instance IsBox TimeToSampleTable++type instance BoxTypeSymbol TimeToSampleTable = "stts"
src/Data/ByteString/IsoBaseFileFormat/Boxes/Versioned.hs view
@@ -1,14 +1,13 @@ {-# LANGUAGE UndecidableInstances #-} -- | A binary version 0/1 field with seperate content for each version. module Data.ByteString.IsoBaseFileFormat.Boxes.Versioned-       (Versioned(..), ApplyVersioned(..), SelectByVersion)+       (Versioned(..))        where  import Data.ByteString.IsoBaseFileFormat.Boxes.Box-import Data.Default-import Data.Kind-import Data.Singletons +-- TODO rewrite/cleanup the versioned mess+ -- | Two alternative representations based on a /version/ index. --   Use this for box content that can be either 32 or 64 bit. data Versioned v0 v1 (version :: Nat) where@@ -23,39 +22,3 @@   boxSize (V1 c) = boxSize c   boxBuilder (V0 c) = boxBuilder c   boxBuilder (V1 c) = boxBuilder c--data VersionedBox c where-  BoxV0 :: forall (v :: Nat -> Type). IsBoxContent (v 0) => v 0 -> VersionedBox v-  BoxV1 :: forall (v :: Nat -> Type). IsBoxContent (v 1) => v 1 -> VersionedBox v--instance (IsBoxContent (b 0), Default (b 0)) => Default (VersionedBox b) where-  def = BoxV0 def--instance IsBoxContent (VersionedBox c) where-  boxSize (BoxV0 c) = boxSize c-  boxSize (BoxV1 c) = boxSize c-  boxBuilder (BoxV0 c) = boxBuilder c-  boxBuilder (BoxV1 c) = boxBuilder c---- * Versions based on type level arrows---- | Two alternative representations based on a /version/ index.---   Use this for box content that can be either 32 or 64 bit.-data ApplyVersioned (v' :: Nat ~> Type) where-  OnV0 :: forall (v :: Nat ~> Type). IsBoxContent (v @@ 0) => v @@ 0 -> ApplyVersioned v-  OnV1 :: forall (v :: Nat ~> Type). IsBoxContent (v @@ 1) => v @@ 1 -> ApplyVersioned v--instance (IsBoxContent (b @@ 0), Default (b @@ 0)) => Default (ApplyVersioned b) where-  def = OnV0 def--instance IsBoxContent (ApplyVersioned c) where-  boxSize (OnV0 c) = boxSize c-  boxSize (OnV1 c) = boxSize c-  boxBuilder (OnV0 c) = boxBuilder c-  boxBuilder (OnV1 c) = boxBuilder c---- | A type level arrow that applys the type constructor to one of the two--- versions depending on the /version/ parameter.-data SelectByVersion :: (a -> Type) -> a -> a -> Nat ~> Type-type instance Apply (SelectByVersion f v0 v1) 0 = f v0-type instance Apply (SelectByVersion f v0 v1) 1 = f v1
+ src/Data/ByteString/IsoBaseFileFormat/Boxes/VideoMediaHeader.hs view
@@ -0,0 +1,25 @@+-- | Media-independent properties of a tracks video content.+module Data.ByteString.IsoBaseFileFormat.Boxes.VideoMediaHeader where++import Data.ByteString.IsoBaseFileFormat.Boxes.Box+import Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields+import Data.ByteString.IsoBaseFileFormat.Boxes.FullBox+import Data.ByteString.IsoBaseFileFormat.Boxes.Handler+import Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader++type instance MediaHeaderFor 'VideoTrack = VideoMediaHeader++-- | Video header data box.+newtype VideoMediaHeader where+  VideoMediaHeader+   :: Template (U16 "graphicsmode") 0+   :+ Template (U16Arr "opcolor" 3) '[0,0,0]+   -> VideoMediaHeader+   deriving (Default, IsBoxContent)++-- | Create a video media header data box.+videoMediaHeader :: VideoMediaHeader -> Box (FullBox VideoMediaHeader 0)+videoMediaHeader = fullBox 1++instance IsBox VideoMediaHeader+type instance BoxTypeSymbol VideoMediaHeader = "vmhd"
+ src/Data/ByteString/IsoBaseFileFormat/Boxes/VisualSampleEntry.hs view
@@ -0,0 +1,184 @@+{-# LANGUAGE UndecidableInstances #-}+-- | Detailed visual sample description.+module Data.ByteString.IsoBaseFileFormat.Boxes.VisualSampleEntry where++import Data.ByteString.IsoBaseFileFormat.Boxes.Box+import Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields+import Data.ByteString.IsoBaseFileFormat.Boxes.Handler+import Data.ByteString.IsoBaseFileFormat.Boxes.SampleEntry+import qualified Data.Text as T++-- | Construct a visual sample entry box+visualSampleEntry ::+     (KnownSymbol+       (BoxTypeSymbol (SampleEntry 'VideoTrack (VideoCoding codec))))+  => VideoCoding codec+  -> U16 "data_reference_index"+  -> SampleEntry 'VideoTrack (VideoCoding codec)+  -> Box (SampleEntry 'VideoTrack (VideoCoding codec))+visualSampleEntry _ = sampleEntry++-- | Fields if visual sample entries.+--  A @depth@ of 0x0018 means colour image with no alpha.+--  The @horizresolution@ and @vertresolution@ of 0x00480000 means 72 dpi.+--  The @frame_count@ indicates the number of video frames per sample.+newtype instance SampleEntry 'VideoTrack (VideoCoding c) where+    VideoSampleEntry+      :: U16 "pre_defined"+      :+ Constant (U16 "reserved") 0+      :+ U16 "width"+      :+ U16 "height"+      :+ Template (U32 "horizresolution") 0x00480000 -- TODO fix point+      :+ Template (U32 "vertresolution") 0x00480000 -- TODO fix point+      :+ Constant (U32 "reserved") 0+      :+ Template (U16 "frame_count") 1+      :+ FixSizeText 32 "compressorname"+      :+ Template (U16 "depth") 0x0018+      :+ Template (I16 "pre_defined") 65535+      :+ Maybe (Box CleanAperture)+      :+ Maybe (Box PixelAspectRatio)+      :+ [Box SomeColourInformation]+      -> SampleEntry 'VideoTrack (VideoCoding c)+    deriving (IsBoxContent, Default)++instance IsBoxContent [Box SomeColourInformation] where+  boxSize = sum . fmap boxSize+  boxBuilder = fold . fmap boxBuilder++-- | A coproduct of video codec types+data family VideoCoding (c :: Symbol)++-- | Simple default  MPEG-4 video+data instance VideoCoding "mp4v" = Mpeg4Avc++type instance BoxTypeSymbol (VideoCoding c) = c++-- * Clean Aperture sub box++-- | Construct a 'CleanAperture' (sub-) 'Box'+cleanAperture :: CleanAperture -> Box CleanAperture+cleanAperture = Box++-- | The clean aperture settings+newtype CleanAperture where+  CleanAperture+    :: U32 "cleanApertureWidthN"+    :+ U32 "cleanApertureWidthD"+    :+ U32 "cleanApertureHeightN"+    :+ U32 "cleanApertureHeightD"+    :+ U32 "horizOffN"+    :+ U32 "horizOffD"+    :+ U32 "vertOffN"+    :+ U32 "vertOffD"+    -> CleanAperture+    deriving (Default, IsBoxContent)++type instance BoxTypeSymbol CleanAperture = "clap"+instance IsBox CleanAperture++-- * Pixel aspect ratio sub box++-- | Construct a 'PixelAspectRatio' (sub-) 'Box'+pixelAspectRatio :: PixelAspectRatio -> Box PixelAspectRatio+pixelAspectRatio = Box++-- | The pixel aspect ratio.+newtype PixelAspectRatio where+  PixelAspectRatio+    :: U32 "hSpacing"+    :+ U32 "vSpacing"+    -> PixelAspectRatio+    deriving (Default, IsBoxContent)++type instance BoxTypeSymbol PixelAspectRatio = "pasp"+instance IsBox PixelAspectRatio++-- * Colour information sub box++-- | Construct a 'ColourInformation' (sub-) 'Box'+colourInformation+  :: ColourType p -> ColourInformation p+colourInformation = ColourInformation . (Constant :+)++-- | Construct a 'ColourInformation' (sub-) 'Box' from 'OnScreenColours'+onScreenColourInformation+  :: ColourType 'OnScreenColours -> ColourInformation 'OnScreenColours+onScreenColourInformation = colourInformation++-- | Construct a 'ColourInformation' (sub-) 'Box' from 'RestrictedICCProfile'+restrictedICCProfileColourInformation+  :: ColourType 'RestrictedICCProfile -> ColourInformation 'RestrictedICCProfile+restrictedICCProfileColourInformation = colourInformation++-- | Construct a 'ColourInformation' (sub-) 'Box' from 'UnrestrictedICCProfile'+unrestrictedICCProfileColourInformation+  :: ColourType 'UnrestrictedICCProfile -> ColourInformation 'UnrestrictedICCProfile+unrestrictedICCProfileColourInformation = colourInformation++type instance BoxTypeSymbol SomeColourInformation = "pasp"+instance IsBox SomeColourInformation++-- | A wrapper that hides the concrete 'ColourTypeProfile' of a+-- 'ColourInformation'.+data SomeColourInformation where+  SomeColourInformation+    :: forall (profile :: ColourTypeProfile)+    . IsBoxContent (ColourInformation profile)+    => ColourInformation profile+    -> SomeColourInformation+instance IsBoxContent SomeColourInformation where+  boxSize (SomeColourInformation c) = boxSize c+  boxBuilder (SomeColourInformation c) = boxBuilder c++-- | Profile dependent colour information+newtype ColourInformation (profile :: ColourTypeProfile) where+  ColourInformation+    :: Constant (U32Text "colour_type") (ColourTypeCode profile)+    :+ ColourType profile+    -> ColourInformation profile++deriving instance+  (Default (ColourType profile))+    => Default (ColourInformation profile)+deriving instance+  (KnownSymbol (ColourTypeCode profile),IsBoxContent (ColourType profile))+    => IsBoxContent (ColourInformation profile)++-- | Colour type profiles+data ColourTypeProfile =+  -- | PTM_COLOR_INFO from A.7.2 of ISO/IEC 29199-2, mind the full range flag.+  OnScreenColours |+  -- | A restricted ICC.1 (2010) profile+  RestrictedICCProfile |+  -- | An unrestricted IEC ISO-15076 part 1, ICC.1 (2010) profile+  UnrestrictedICCProfile++-- | Profile dependent colour information family+type family+  ColourType (p :: ColourTypeProfile) where+  ColourType 'OnScreenColours =+       U16 "colour_primaries"+    :+ U16 "transfer_characteristics"+    :+ U16 "matrix_coefficients"+    :+ FullRangeFlag+  ColourType 'RestrictedICCProfile =+    T.Text -- TODO+  ColourType 'UnrestrictedICCProfile =+    T.Text -- TODO++-- | The full range flag, note the different bit layout compared to+-- PTM_COLOR_INFO in ISO 29199-2.+data FullRangeFlag = IsFullRange | IsNotFullRange+instance IsBoxContent FullRangeFlag where+  boxSize _ = 1+  boxBuilder IsFullRange = word8 128+  boxBuilder IsNotFullRange = word8 0+instance Default FullRangeFlag where+  def = IsFullRange++-- | Return the color type four letter code for a 'ColourTypeProfile'.+type family+  ColourTypeCode (p :: ColourTypeProfile) :: Symbol where+  ColourTypeCode 'OnScreenColours         = "nclx"+  ColourTypeCode 'RestrictedICCProfile    = "rICC"+  ColourTypeCode 'UnrestrictedICCProfile  = "prof"
src/Data/ByteString/IsoBaseFileFormat/Brands/Dash.hs view
@@ -4,14 +4,12 @@ -- educational, current need. -- This is a convenient way of building documents of that kind. module Data.ByteString.IsoBaseFileFormat.Brands.Dash-       (Dash, SingleAudioTrackInit(..), mkSingleTrackInit, module X) where+       (Dash, SingleAudioTrackInit(..), mkSingleTrackInit, module X)+       where  import Data.ByteString.IsoBaseFileFormat.Brands.Types import Data.ByteString.IsoBaseFileFormat.Boxes as X hiding (All) import Data.Kind (Type, Constraint)-import Control.Lens-import Data.Promotion.Prelude.List-import Data.Singletons  -- | A phantom type to indicate this branding. Version can be 0 or 1 it is used -- in some boxes to switch between 32/64 bits.@@ -23,61 +21,54 @@  -- | A 'BoxLayout' which contains the stuff needed for the 'dash' brand. -- TODO incomplete-instance IsBrand (Dash v) where+instance IsMediaFileFormat (Dash v) where   type BoxLayout (Dash v) =     Boxes-    '[ OM_ FileType+     '[ OM_ FileType       , OM  Movie            '[ OM_ (MovieHeader v)-            , SM  Track-                 '[ OM_ (TrackHeader v)-                  , OM  Media-                       '[ OM_ (MediaHeader v)-                        , OM_ Handler-                        , OM  MediaInformation-                             '[ OneOf '[ OM_ VideoMediaHeader-                                       , OM_ SoundMediaHeader-                                       , OM_ HintMediaHeader-                                       , OM_ NullMediaHeader]-                              , OM  DataInformation-                                   '[ OM  DataReference-                                         '[ OneOf '[ OM_ DataEntryUrl-                                                   , OM_ DataEntryUrn]-                                          , SomeOptionalX-                                             (OneOf '[ OM_ DataEntryUrl-                                                     , OM_ DataEntryUrn])]]-                              -- , OM  (SampleTable v)               -- TODO-                              --      '[ OM_ (SampleDescriptions v)-                              --       , OM_ (TimeToSample v)-                              --       , OM_ (SampleToChunk v)-                              --       , OO_ (SampleSizes v)-                              --       , OM_ (SampleChunkOffset v)-                              --       ]-                              ]-                       ]-                  ]+            , SomeMandatoryX+               (OneOf '[ TrackLayout v 'VideoTrack+                       , TrackLayout v 'AudioTrack+                       , TrackLayout v 'HintTrack+                       , TrackLayout v 'TimedMetaDataTrack+                       , TrackLayout v 'AuxilliaryVideoTrack])             ]      , SO_ Skip      ] +type TrackLayout version handlerType =+  (ContainerBox Track+   '[ OM_ (TrackHeader version)+    , OM  Media+         '[ OM_ (MediaHeader version)+          , OM_ (Handler handlerType)+          , OM  MediaInformation+               '[ OneOf '[ OM_ (MediaHeaderFor handlerType)+                         , OM_ NullMediaHeader]+                , OM  DataInformation+                     '[ OM  DataReference+                           '[ SomeMandatoryX+                               (OneOf '[ OM_ DataEntryUrl+                                       , OM_ DataEntryUrn])]]+                , OM  SampleTable+                      '[ OM  (SampleDescription handlerType)+                            '[ SomeMandatoryX (MatchSampleEntry handlerType) ]+                       , OM_ TimeToSample+                --       , OM_ (SampleToChunk version)+                --       , OO_ (SampleSizes version)+                --       , OM_ (SampleChunkOffset version)+                       ]+                ]+         ]+    ])++ -- Missing Boxes--- START 17:47:---  mdia---  mdhd---  hdlr---  minf---  smhd---  dinf---  dref---  ??url---  stbl---  stsd --  stts --  stsc --  stsz --  stco---  soun---  mp4a --  esds --  mvex --  trex@@ -90,23 +81,29 @@ -- trun -- | A record which contains the stuff needed for a single track initialization -- document according to the 'Dash' brand. TODO incomplete+-- TODO take this out into its own module, make a new package for specific file formats data SingleAudioTrackInit =-  SingleAudioTrackInit {_mvhd :: MovieHeader 0-                       ,_tkhd :: TrackHeader 0-                       ,_mdhd :: MediaHeader 0-                       ,_hdlr :: Handler-                       ,_smhd :: SoundMediaHeader}--makeLenses ''SingleAudioTrackInit+  SingleAudioTrackInit {mvhd :: MovieHeader 0+                       ,tkhd :: TrackHeader 0+                       ,mdhd :: MediaHeader 0+                       ,hdlr :: Handler 'AudioTrack+                       ,smhd :: SoundMediaHeader}  -- | Convert a 'SingleAudioTrackInit' record to a generic 'Boxes' collection. mkSingleTrackInit   :: SingleAudioTrackInit -> Builder mkSingleTrackInit doc = mediaBuilder dash $-  fileTypeBox (FileType "dash" 0 ["isom","iso5","mp42"])-  :|-   movie (movieHeader (doc ^. mvhd) :|-          track (trackHeader (doc ^. tkhd) :|-                 media (mediaHeader (doc ^. mdhd) :. handler (doc ^. hdlr) :|-                        mediaInformation-                            (soundMediaHeader (doc ^. smhd) :| dataInformation $: localMediaDataReference ))))+     fileTypeBox (FileType "dash" 0 ["isom","iso5","mp42"])+  :| movie+      ( movieHeader (mvhd doc)+      :| track+          ( trackHeader (tkhd doc)+          :| media+              ( mediaHeader (mdhd doc)+              :. handler (hdlr doc)+              :| mediaInformation+                   ( soundMediaHeader (smhd doc)+                   :. (dataInformation $: localMediaDataReference)+                   :| sampleTable+                       ((sampleDescription $: audioSampleEntry Mpeg4Aac 1 def)+                        :| timeToSample [] )))))
src/Data/ByteString/IsoBaseFileFormat/Brands/Types.hs view
@@ -5,9 +5,10 @@ import Data.ByteString.IsoBaseFileFormat.Boxes.Box import Data.ByteString.IsoBaseFileFormat.Util.TypeLayout () +-- TODO move this to general module merge with Box.hs -- | A class that describes (on the type level) how a box can be nested into -- other boxes (see 'Boxes).-class IsBrand brand where+class IsMediaFileFormat brand where   -- | The layout that an IsBoxContent instance has to have, before 'packMedia' accepts it   type BoxLayout brand   mediaBuilder
+ src/Data/ByteString/IsoBaseFileFormat/Util/BitRecords.hs view
@@ -0,0 +1,214 @@+{-# LANGUAGE UndecidableInstances #-}+module Data.ByteString.IsoBaseFileFormat.Util.BitRecords where++import Data.Kind+import Data.Word+import Data.Type.Bool+import GHC.TypeLits+import Data.Bits+import Data.Proxy+import Test.TypeSpecCrazy++data Field :: Nat -> Type+data (:=>) :: k -> Type -> Type+data (:*:) :: Type -> Type -> Type+type FieldPosition = (Nat, Nat)++type Flag = Field 1++infixr 6 :=>+infixl 5 :*:++-- nested fields+data (:/) :: Symbol -> k -> Type+infixr 7 :/+++type family+  GetFieldSize (f :: l) :: Nat where+  GetFieldSize (label :=> f) = GetFieldSize f+  GetFieldSize (Field n ) = n+  GetFieldSize (l :*: r) = GetFieldSize l + GetFieldSize r++type family+  HasField (f :: fk) (l :: lk) :: Bool where+  HasField (l :=> f) l = 'True+  HasField (l :=> f) (l :/ p) = HasField f p+  HasField (f1 :*: f2) l = HasField f1 l || HasField f2 l+  HasField f l = 'False++type family+  HasFieldConstraint (label :: lk) (field :: fk) :: Constraint where+  HasFieldConstraint l f =+      If (HasField f l)+         (HasField f l ~ 'True)+         (TypeError ('Text "Label not found: '"+                     ':<>: 'ShowType l+                     ':<>: 'Text "' in:"+                     ':$$: 'ShowType f ))++type family+  FocusOn (l :: lk) (f :: fk) :: Result fk where+    FocusOn l f =+      If (HasField f l)+         ('Right (FocusOnUnsafe l f))+         ('Left ('Text "Label not found. Cannot focus '"+                     ':<>: 'ShowType l+                     ':<>: 'Text "' in:"+                     ':$$: 'ShowType f ))++type family+  FocusOnUnsafe (l :: lk) (f :: fk) :: fk where+  FocusOnUnsafe l        (l :=> f) = f+  FocusOnUnsafe (l :/ p) (l :=> f) = FocusOnUnsafe p f+  FocusOnUnsafe l        (f :*: f') = FocusOnUnsafe l (If (HasField f l) f f')++-- field location and access++type family+  GetFieldPosition (f :: field) (l :: label) :: Result FieldPosition where+  GetFieldPosition f l =+     If (HasField f l)+       ('Right (GetFieldPositionUnsafe f l))+       ('Left ('Text "Label not found. Cannot get bit range for '"+          ':<>: 'ShowType l+          ':<>: 'Text "' in:"+          ':$$: 'ShowType f ))++type family+  GetFieldPositionUnsafe (f :: field) (l :: label) :: FieldPosition where+  GetFieldPositionUnsafe (l :=> f)  l        = '(0, GetFieldSize f - 1)+  GetFieldPositionUnsafe (l :=> f)  (l :/ p) = GetFieldPositionUnsafe f p+  GetFieldPositionUnsafe (f :*: f') l        =+     If (HasField f l)+      (GetFieldPositionUnsafe f l)+      (AddToFieldPosition (GetFieldSize f) (GetFieldPositionUnsafe f' l))++type family+  AddToFieldPosition (v :: Nat) (e :: (Nat, Nat)) :: (Nat, Nat) where+  AddToFieldPosition v '(a,b) = '(a + v, b + v)++type family+  IsFieldPostition (pos :: FieldPosition) :: Constraint where+  IsFieldPostition '(a, b) =+    If (a <=? b)+       (a <= b, KnownNat a, KnownNat b)+       (TypeError+         ('Text "Bad field position: " ':<>: 'ShowType '(a,b)+          ':$$: 'Text "First index greater than last: "+          ':<>: 'ShowType a+          ':<>: 'Text " > "+          ':<>: 'ShowType b ))++type family+  FieldPostitionToList (pos :: FieldPosition) :: [Nat] where+    FieldPostitionToList '(a, a) = '[a]+    FieldPostitionToList '(a, b) = (a ': (FieldPostitionToList '(a+1, b)))++type family+  AlignField (a :: Nat) (f :: field) :: Result field where+  AlignField 0 f = 'Left ('Text "Invalid alignment of 0")+  AlignField a f = 'Right (AddPadding ((a - (GetFieldSize f `Rem` a)) `Rem` a) f)++type family+  AddPadding (n :: Nat) (f :: field) :: field where+  AddPadding 0 f = f+  AddPadding n f = f :*: Field n++-- | Get the remainder of the integer division of x and y, such that @forall x+-- y. exists k. (Rem x y) == x - y * k@ The algorithm is: count down x+-- until zero, incrementing the accumulator at each step. Whenever the+-- accumulator is equal to y set it to zero.+--+-- If the accumulator has reached y reset it. It is important to do this+-- BEFORE checking if x == y and then returning the accumulator, for the case+-- where x = k * y with k > 0. For example:+--+-- @+--  6 `Rem` 3     = RemImpl 6 3 0+--  RemImpl 6 3 0 = RemImpl (6-1) 3 (0+1)   -- RemImpl Clause 4+--  RemImpl 5 3 1 = RemImpl (5-1) 3 (1+1)   -- RemImpl Clause 4+--  RemImpl 4 3 2 = RemImpl (4-1) 3 (2+1)   -- RemImpl Clause 4+--  RemImpl 3 3 3 = RemImpl 3 3 0           -- RemImpl Clause 2 !!!+--  RemImpl 3 3 0 = 0                       -- RemImpl Clause 3 !!!+-- @+--+type Rem (x :: Nat) (y :: Nat) = RemImpl x y 0+type family+  RemImpl (x :: Nat) (y :: nat) (acc :: Nat) :: Nat where+  -- finished if x was < y:+  RemImpl 0 y acc = acc+  RemImpl x y y   = RemImpl x y 0+  -- finished if x was >= y:+  RemImpl y y acc = acc+  -- the base case+  RemImpl x y acc = RemImpl (x - 1) y (acc + 1)++getFlag+  :: forall a (path :: k) (first :: Nat) field p1 p2+  . ( IsFieldC path field first first+    , Bits a )+   => p1 path -> p2 field -> a -> Bool+getFlag _ _ a = testBit a pos+    where pos = fromIntegral $ natVal (Proxy :: Proxy first)++setFlag+  :: forall a (path :: k) (first :: Nat) field p1 p2+  . ( IsFieldC path field first first+    , Bits a )+   => p1 path -> p2 field -> Bool -> a -> a+setFlag _ _ v a = modifyBit a pos+    where pos = fromIntegral $ natVal (Proxy :: Proxy first)+          modifyBit = if v then setBit else clearBit++getField+  :: forall a b (path :: k) (first :: Nat) (last :: Nat) field pxy1 pxy2+  . ( IsFieldC path field first last+    , Integral a+    , Bits a+    , Num b)+   => pxy1 path -> pxy2 field -> a -> b+getField _ _ a = fromIntegral ((a `shiftR` posFirst) .&. bitMask)+    where+      bitMask =+        let bitCount = 1 + posLast - posFirst+            in (2 ^ bitCount) - 1+      posFirst = fromIntegral $ natVal (Proxy :: Proxy first)+      posLast = fromIntegral $ natVal (Proxy :: Proxy last)++setField+  :: forall a b (path :: k) (first :: Nat) (last :: Nat) field pxy1 pxy2+  . ( IsFieldC path field first last+    , Num a+    , Bits a+    , Integral b)+   => pxy1 path -> pxy2 field -> b -> a -> a+setField _ _ v x = (x .&. bitMaskField) .|. (v' `shiftL` posFirst)+    where+      v' = bitMaskValue .&. fromIntegral v+      bitMaskField = complement (bitMaskValue `shiftL` posFirst)+      bitMaskValue =+        let bitCount = 1 + posLast - posFirst+            in (2 ^ bitCount) - 1+      posFirst = fromIntegral $ natVal (Proxy :: Proxy first)+      posLast = fromIntegral $ natVal (Proxy :: Proxy last)++++type Foo =+       "foo" :=> Flag+   :*:           Field 4+   :*: "bar" :=> Field 2+   :*:           Field 4+   :*: "baz" :=> Field 17++type IsFieldC name field first last =+    ( name `HasFieldConstraint` field+     , KnownNat first+     , KnownNat last+     , 'Right '(first, last) ~ (GetFieldPosition field name)+     )++getFooField :: IsFieldC name Foo first last+   => proxy name -> Word64 -> Word64+getFooField px = getField px (Proxy :: Proxy Foo)
+ stack.yaml view
@@ -0,0 +1,70 @@+# This file was automatically generated by 'stack init'+#+# Some commonly used options have been documented as comments in this file.+# For advanced use and comprehensive documentation of the format, please see:+# http://docs.haskellstack.org/en/stable/yaml_configuration/++# Resolver to choose a 'specific' stackage snapshot or a compiler version.+# A snapshot resolver dictates the compiler version and the set of packages+# to be used for project dependencies. For example:+#+# resolver: lts-3.5+# resolver: nightly-2015-09-21+# resolver: ghc-7.10.2+# resolver: ghcjs-0.1.0_ghc-7.10.2+# resolver:+#  name: custom-snapshot+#  location: "./custom-snapshot.yaml"+resolver: nightly-2016-07-30++# User packages to be built.+# Various formats can be used as shown in the example below.+#+# packages:+# - some-directory+# - https://example.com/foo/bar/baz-0.0.2.tar.gz+# - location:+#    git: https://github.com/commercialhaskell/stack.git+#    commit: e7b331f14bcffb8367cd58fbfc8b40ec7642100a+# - location: https://github.com/commercialhaskell/stack/commit/e7b331f14bcffb8367cd58fbfc8b40ec7642100a+#   extra-dep: true+#  subdirs:+#  - auto-update+#  - wai+#+# A package marked 'extra-dep: true' will only be built if demanded by a+# non-dependency (i.e. a user package), and its test suites and benchmarks+# will not be run. This is useful for tweaking upstream packages.+packages:+- '.'++# Dependency packages to be pulled from upstream that are not in the resolver+# (e.g., acme-missiles-0.3)+extra-deps:+- vector-sized-0.3.2.0+- show-type-0.1.1+- type-spec-0.2.0.0++# Override default flag values for local packages and extra-deps+flags: {}++# Extra package databases containing global packages+extra-package-dbs: []++# Control whether we use the GHC we find on the path+# system-ghc: true+#+# Require a specific version of stack, using version ranges+# require-stack-version: -any # Default+# require-stack-version: ">=1.1"+#+# Override the architecture used by stack, especially useful on Windows+# arch: i386+# arch: x86_64+#+# Extra directories used by stack for building+# extra-include-dirs: [/path/to/dir]+# extra-lib-dirs: [/path/to/dir]+#+# Allow a newer minor version of GHC than the snapshot specifies+# compiler-check: newer-minor