Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
edfa74fe
Commit
edfa74fe
authored
Jul 02, 2015
by
Michael Stefaniuc
Committed by
Alexandre Julliard
Jul 02, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dmime: DMTimeSigTrack doesn't have IDirectMusicTrack8.
parent
724fe43d
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
51 additions
and
69 deletions
+51
-69
timesigtrack.c
dlls/dmime/timesigtrack.c
+51
-69
No files found.
dlls/dmime/timesigtrack.c
View file @
edfa74fe
...
@@ -26,7 +26,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(dmime);
...
@@ -26,7 +26,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(dmime);
*/
*/
typedef
struct
IDirectMusicTimeSigTrack
{
typedef
struct
IDirectMusicTimeSigTrack
{
const
IUnknownVtbl
*
UnknownVtbl
;
const
IUnknownVtbl
*
UnknownVtbl
;
const
IDirectMusicTrack
8
Vtbl
*
TrackVtbl
;
const
IDirectMusicTrackVtbl
*
TrackVtbl
;
const
IPersistStreamVtbl
*
PersistStreamVtbl
;
const
IPersistStreamVtbl
*
PersistStreamVtbl
;
LONG
ref
;
LONG
ref
;
DMUS_OBJECTDESC
*
pDesc
;
DMUS_OBJECTDESC
*
pDesc
;
...
@@ -41,9 +41,8 @@ static HRESULT WINAPI IDirectMusicTimeSigTrack_IUnknown_QueryInterface (LPUNKNOW
...
@@ -41,9 +41,8 @@ static HRESULT WINAPI IDirectMusicTimeSigTrack_IUnknown_QueryInterface (LPUNKNOW
*
ppobj
=
&
This
->
UnknownVtbl
;
*
ppobj
=
&
This
->
UnknownVtbl
;
IUnknown_AddRef
(
iface
);
IUnknown_AddRef
(
iface
);
return
S_OK
;
return
S_OK
;
}
else
if
(
IsEqualIID
(
riid
,
&
IID_IDirectMusicTrack
)
}
else
if
(
IsEqualIID
(
riid
,
&
IID_IDirectMusicTrack
))
{
||
IsEqualIID
(
riid
,
&
IID_IDirectMusicTrack8
))
{
*
ppobj
=
&
This
->
TrackVtbl
;
*
ppobj
=
(
LPDIRECTMUSICTRACK8
)
&
This
->
TrackVtbl
;
IUnknown_AddRef
(
iface
);
IUnknown_AddRef
(
iface
);
return
S_OK
;
return
S_OK
;
}
else
if
(
IsEqualIID
(
riid
,
&
IID_IPersistStream
))
{
}
else
if
(
IsEqualIID
(
riid
,
&
IID_IPersistStream
))
{
...
@@ -88,62 +87,77 @@ static const IUnknownVtbl DirectMusicTimeSigTrack_Unknown_Vtbl = {
...
@@ -88,62 +87,77 @@ static const IUnknownVtbl DirectMusicTimeSigTrack_Unknown_Vtbl = {
};
};
/* IDirectMusicTimeSigTrack IDirectMusicTrack8 part: */
/* IDirectMusicTimeSigTrack IDirectMusicTrack8 part: */
static
HRESULT
WINAPI
IDirectMusicTimeSigTrack_IDirectMusicTrack_QueryInterface
(
LPDIRECTMUSICTRACK8
iface
,
REFIID
riid
,
LPVOID
*
ppobj
)
{
static
HRESULT
WINAPI
IDirectMusicTrackImpl_QueryInterface
(
IDirectMusicTrack
*
iface
,
REFIID
riid
,
void
**
ppobj
)
{
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
return
IUnknown_QueryInterface
((
LPUNKNOWN
)
&
This
->
UnknownVtbl
,
riid
,
ppobj
);
return
IUnknown_QueryInterface
((
LPUNKNOWN
)
&
This
->
UnknownVtbl
,
riid
,
ppobj
);
}
}
static
ULONG
WINAPI
IDirectMusicTimeSigTrack_IDirectMusicTrack_AddRef
(
LPDIRECTMUSICTRACK8
iface
)
{
static
ULONG
WINAPI
IDirectMusicTrackImpl_AddRef
(
IDirectMusicTrack
*
iface
)
{
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
return
IUnknown_AddRef
((
LPUNKNOWN
)
&
This
->
UnknownVtbl
);
return
IUnknown_AddRef
((
LPUNKNOWN
)
&
This
->
UnknownVtbl
);
}
}
static
ULONG
WINAPI
IDirectMusicTimeSigTrack_IDirectMusicTrack_Release
(
LPDIRECTMUSICTRACK8
iface
)
{
static
ULONG
WINAPI
IDirectMusicTrackImpl_Release
(
IDirectMusicTrack
*
iface
)
{
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
return
IUnknown_Release
((
LPUNKNOWN
)
&
This
->
UnknownVtbl
);
return
IUnknown_Release
((
LPUNKNOWN
)
&
This
->
UnknownVtbl
);
}
}
static
HRESULT
WINAPI
IDirectMusicTimeSigTrack_IDirectMusicTrack_Init
(
LPDIRECTMUSICTRACK8
iface
,
IDirectMusicSegment
*
pSegment
)
static
HRESULT
WINAPI
IDirectMusicTrackImpl_Init
(
IDirectMusicTrack
*
iface
,
IDirectMusicSegment
*
pSegment
)
{
{
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
FIXME
(
"(%p, %p): stub
\n
"
,
This
,
pSegment
);
FIXME
(
"(%p, %p): stub
\n
"
,
This
,
pSegment
);
return
S_OK
;
return
S_OK
;
}
}
static
HRESULT
WINAPI
IDirectMusicTimeSigTrack_IDirectMusicTrack_InitPlay
(
LPDIRECTMUSICTRACK8
iface
,
IDirectMusicSegmentState
*
pSegmentState
,
IDirectMusicPerformance
*
pPerformance
,
void
**
ppStateData
,
DWORD
dwVirtualTrack8ID
,
DWORD
dwFlags
)
static
HRESULT
WINAPI
IDirectMusicTrackImpl_InitPlay
(
IDirectMusicTrack
*
iface
,
IDirectMusicSegmentState
*
pSegmentState
,
IDirectMusicPerformance
*
pPerformance
,
void
**
ppStateData
,
DWORD
dwVirtualTrack8ID
,
DWORD
dwFlags
)
{
{
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
FIXME
(
"(%p, %p, %p, %p, %d, %d): stub
\n
"
,
This
,
pSegmentState
,
pPerformance
,
ppStateData
,
dwVirtualTrack8ID
,
dwFlags
);
FIXME
(
"(%p, %p, %p, %p, %d, %d): stub
\n
"
,
This
,
pSegmentState
,
pPerformance
,
ppStateData
,
dwVirtualTrack8ID
,
dwFlags
);
return
S_OK
;
return
S_OK
;
}
}
static
HRESULT
WINAPI
IDirectMusicT
imeSigTrack_IDirectMusicTrack_EndPlay
(
LPDIRECTMUSICTRACK8
iface
,
void
*
pStateData
)
static
HRESULT
WINAPI
IDirectMusicT
rackImpl_EndPlay
(
IDirectMusicTrack
*
iface
,
void
*
pStateData
)
{
{
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
FIXME
(
"(%p, %p): stub
\n
"
,
This
,
pStateData
);
FIXME
(
"(%p, %p): stub
\n
"
,
This
,
pStateData
);
return
S_OK
;
return
S_OK
;
}
}
static
HRESULT
WINAPI
IDirectMusicTimeSigTrack_IDirectMusicTrack_Play
(
LPDIRECTMUSICTRACK8
iface
,
void
*
pStateData
,
MUSIC_TIME
mtStart
,
MUSIC_TIME
mtEnd
,
MUSIC_TIME
mtOffset
,
DWORD
dwFlags
,
IDirectMusicPerformance
*
pPerf
,
IDirectMusicSegmentState
*
pSegSt
,
DWORD
dwVirtualID
)
static
HRESULT
WINAPI
IDirectMusicTrackImpl_Play
(
IDirectMusicTrack
*
iface
,
void
*
pStateData
,
MUSIC_TIME
mtStart
,
MUSIC_TIME
mtEnd
,
MUSIC_TIME
mtOffset
,
DWORD
dwFlags
,
IDirectMusicPerformance
*
pPerf
,
IDirectMusicSegmentState
*
pSegSt
,
DWORD
dwVirtualID
)
{
{
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
FIXME
(
"(%p, %p, %d, %d, %d, %d, %p, %p, %d): stub
\n
"
,
This
,
pStateData
,
mtStart
,
mtEnd
,
mtOffset
,
dwFlags
,
pPerf
,
pSegSt
,
dwVirtualID
);
FIXME
(
"(%p, %p, %d, %d, %d, %d, %p, %p, %d): stub
\n
"
,
This
,
pStateData
,
mtStart
,
mtEnd
,
mtOffset
,
dwFlags
,
pPerf
,
pSegSt
,
dwVirtualID
);
return
S_OK
;
return
S_OK
;
}
}
static
HRESULT
WINAPI
IDirectMusicTimeSigTrack_IDirectMusicTrack_GetParam
(
LPDIRECTMUSICTRACK8
iface
,
REFGUID
rguidType
,
MUSIC_TIME
mtTime
,
MUSIC_TIME
*
pmtNext
,
void
*
pParam
)
{
static
HRESULT
WINAPI
IDirectMusicTrackImpl_GetParam
(
IDirectMusicTrack
*
iface
,
REFGUID
rguidType
,
MUSIC_TIME
mtTime
,
MUSIC_TIME
*
pmtNext
,
void
*
pParam
)
{
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
FIXME
(
"(%p, %s, %d, %p, %p): stub
\n
"
,
This
,
debugstr_dmguid
(
rguidType
),
mtTime
,
pmtNext
,
pParam
);
FIXME
(
"(%p, %s, %d, %p, %p): stub
\n
"
,
This
,
debugstr_dmguid
(
rguidType
),
mtTime
,
pmtNext
,
pParam
);
return
S_OK
;
return
S_OK
;
}
}
static
HRESULT
WINAPI
IDirectMusicTimeSigTrack_IDirectMusicTrack_SetParam
(
LPDIRECTMUSICTRACK8
iface
,
REFGUID
rguidType
,
MUSIC_TIME
mtTime
,
void
*
pParam
)
{
static
HRESULT
WINAPI
IDirectMusicTrackImpl_SetParam
(
IDirectMusicTrack
*
iface
,
REFGUID
rguidType
,
MUSIC_TIME
mtTime
,
void
*
pParam
)
{
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
FIXME
(
"(%p, %s, %d, %p): stub
\n
"
,
This
,
debugstr_dmguid
(
rguidType
),
mtTime
,
pParam
);
FIXME
(
"(%p, %s, %d, %p): stub
\n
"
,
This
,
debugstr_dmguid
(
rguidType
),
mtTime
,
pParam
);
return
S_OK
;
return
S_OK
;
}
}
static
HRESULT
WINAPI
IDirectMusicTimeSigTrack_IDirectMusicTrack_IsParamSupported
(
LPDIRECTMUSICTRACK8
iface
,
REFGUID
rguidType
)
{
static
HRESULT
WINAPI
IDirectMusicTrackImpl_IsParamSupported
(
IDirectMusicTrack
*
iface
,
REFGUID
rguidType
)
{
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
TRACE
(
"(%p, %s)
\n
"
,
This
,
debugstr_dmguid
(
rguidType
));
TRACE
(
"(%p, %s)
\n
"
,
This
,
debugstr_dmguid
(
rguidType
));
...
@@ -157,76 +171,44 @@ static HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_IsParamSupporte
...
@@ -157,76 +171,44 @@ static HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_IsParamSupporte
return
DMUS_E_TYPE_UNSUPPORTED
;
return
DMUS_E_TYPE_UNSUPPORTED
;
}
}
static
HRESULT
WINAPI
IDirectMusicTimeSigTrack_IDirectMusicTrack_AddNotificationType
(
LPDIRECTMUSICTRACK8
iface
,
REFGUID
rguidNotificationType
)
{
static
HRESULT
WINAPI
IDirectMusicTrackImpl_AddNotificationType
(
IDirectMusicTrack
*
iface
,
REFGUID
rguidNotificationType
)
{
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
FIXME
(
"(%p, %s): stub
\n
"
,
This
,
debugstr_dmguid
(
rguidNotificationType
));
FIXME
(
"(%p, %s): stub
\n
"
,
This
,
debugstr_dmguid
(
rguidNotificationType
));
return
S_OK
;
return
S_OK
;
}
}
static
HRESULT
WINAPI
IDirectMusicTimeSigTrack_IDirectMusicTrack_RemoveNotificationType
(
LPDIRECTMUSICTRACK8
iface
,
REFGUID
rguidNotificationType
)
{
static
HRESULT
WINAPI
IDirectMusicTrackImpl_RemoveNotificationType
(
IDirectMusicTrack
*
iface
,
REFGUID
rguidNotificationType
)
{
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
FIXME
(
"(%p, %s): stub
\n
"
,
This
,
debugstr_dmguid
(
rguidNotificationType
));
FIXME
(
"(%p, %s): stub
\n
"
,
This
,
debugstr_dmguid
(
rguidNotificationType
));
return
S_OK
;
return
S_OK
;
}
}
static
HRESULT
WINAPI
IDirectMusicTimeSigTrack_IDirectMusicTrack_Clone
(
LPDIRECTMUSICTRACK8
iface
,
MUSIC_TIME
mtStart
,
MUSIC_TIME
mtEnd
,
IDirectMusicTrack
**
ppTrack
)
{
static
HRESULT
WINAPI
IDirectMusicTrackImpl_Clone
(
IDirectMusicTrack
*
iface
,
MUSIC_TIME
mtStart
,
MUSIC_TIME
mtEnd
,
IDirectMusicTrack
**
ppTrack
)
{
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
FIXME
(
"(%p, %d, %d, %p): stub
\n
"
,
This
,
mtStart
,
mtEnd
,
ppTrack
);
FIXME
(
"(%p, %d, %d, %p): stub
\n
"
,
This
,
mtStart
,
mtEnd
,
ppTrack
);
return
S_OK
;
return
S_OK
;
}
}
static
HRESULT
WINAPI
IDirectMusicTimeSigTrack_IDirectMusicTrack_PlayEx
(
LPDIRECTMUSICTRACK8
iface
,
void
*
pStateData
,
REFERENCE_TIME
rtStart
,
REFERENCE_TIME
rtEnd
,
REFERENCE_TIME
rtOffset
,
DWORD
dwFlags
,
IDirectMusicPerformance
*
pPerf
,
IDirectMusicSegmentState
*
pSegSt
,
DWORD
dwVirtualID
)
{
static
const
IDirectMusicTrackVtbl
DirectMusicTimeSigTrack_Track_Vtbl
=
{
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
IDirectMusicTrackImpl_QueryInterface
,
FIXME
(
"(%p, %p, 0x%s, 0x%s, 0x%s, %d, %p, %p, %d): stub
\n
"
,
This
,
pStateData
,
wine_dbgstr_longlong
(
rtStart
),
IDirectMusicTrackImpl_AddRef
,
wine_dbgstr_longlong
(
rtEnd
),
wine_dbgstr_longlong
(
rtOffset
),
dwFlags
,
pPerf
,
pSegSt
,
dwVirtualID
);
IDirectMusicTrackImpl_Release
,
return
S_OK
;
IDirectMusicTrackImpl_Init
,
}
IDirectMusicTrackImpl_InitPlay
,
IDirectMusicTrackImpl_EndPlay
,
static
HRESULT
WINAPI
IDirectMusicTimeSigTrack_IDirectMusicTrack_GetParamEx
(
LPDIRECTMUSICTRACK8
iface
,
REFGUID
rguidType
,
REFERENCE_TIME
rtTime
,
REFERENCE_TIME
*
prtNext
,
void
*
pParam
,
void
*
pStateData
,
DWORD
dwFlags
)
{
IDirectMusicTrackImpl_Play
,
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
IDirectMusicTrackImpl_GetParam
,
FIXME
(
"(%p, %s, 0x%s, %p, %p, %p, %d): stub
\n
"
,
This
,
debugstr_dmguid
(
rguidType
),
IDirectMusicTrackImpl_SetParam
,
wine_dbgstr_longlong
(
rtTime
),
prtNext
,
pParam
,
pStateData
,
dwFlags
);
IDirectMusicTrackImpl_IsParamSupported
,
return
S_OK
;
IDirectMusicTrackImpl_AddNotificationType
,
}
IDirectMusicTrackImpl_RemoveNotificationType
,
IDirectMusicTrackImpl_Clone
static
HRESULT
WINAPI
IDirectMusicTimeSigTrack_IDirectMusicTrack_SetParamEx
(
LPDIRECTMUSICTRACK8
iface
,
REFGUID
rguidType
,
REFERENCE_TIME
rtTime
,
void
*
pParam
,
void
*
pStateData
,
DWORD
dwFlags
)
{
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
FIXME
(
"(%p, %s, 0x%s, %p, %p, %d): stub
\n
"
,
This
,
debugstr_dmguid
(
rguidType
),
wine_dbgstr_longlong
(
rtTime
),
pParam
,
pStateData
,
dwFlags
);
return
S_OK
;
}
static
HRESULT
WINAPI
IDirectMusicTimeSigTrack_IDirectMusicTrack_Compose
(
LPDIRECTMUSICTRACK8
iface
,
IUnknown
*
pContext
,
DWORD
dwTrackGroup
,
IDirectMusicTrack
**
ppResultTrack
)
{
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
FIXME
(
"(%p, %p, %d, %p): stub
\n
"
,
This
,
pContext
,
dwTrackGroup
,
ppResultTrack
);
return
S_OK
;
}
static
HRESULT
WINAPI
IDirectMusicTimeSigTrack_IDirectMusicTrack_Join
(
LPDIRECTMUSICTRACK8
iface
,
IDirectMusicTrack
*
pNewTrack
,
MUSIC_TIME
mtJoin
,
IUnknown
*
pContext
,
DWORD
dwTrackGroup
,
IDirectMusicTrack
**
ppResultTrack
)
{
ICOM_THIS_MULTI
(
IDirectMusicTimeSigTrack
,
TrackVtbl
,
iface
);
FIXME
(
"(%p, %p, %d, %p, %d, %p): stub
\n
"
,
This
,
pNewTrack
,
mtJoin
,
pContext
,
dwTrackGroup
,
ppResultTrack
);
return
S_OK
;
}
static
const
IDirectMusicTrack8Vtbl
DirectMusicTimeSigTrack_Track_Vtbl
=
{
IDirectMusicTimeSigTrack_IDirectMusicTrack_QueryInterface
,
IDirectMusicTimeSigTrack_IDirectMusicTrack_AddRef
,
IDirectMusicTimeSigTrack_IDirectMusicTrack_Release
,
IDirectMusicTimeSigTrack_IDirectMusicTrack_Init
,
IDirectMusicTimeSigTrack_IDirectMusicTrack_InitPlay
,
IDirectMusicTimeSigTrack_IDirectMusicTrack_EndPlay
,
IDirectMusicTimeSigTrack_IDirectMusicTrack_Play
,
IDirectMusicTimeSigTrack_IDirectMusicTrack_GetParam
,
IDirectMusicTimeSigTrack_IDirectMusicTrack_SetParam
,
IDirectMusicTimeSigTrack_IDirectMusicTrack_IsParamSupported
,
IDirectMusicTimeSigTrack_IDirectMusicTrack_AddNotificationType
,
IDirectMusicTimeSigTrack_IDirectMusicTrack_RemoveNotificationType
,
IDirectMusicTimeSigTrack_IDirectMusicTrack_Clone
,
IDirectMusicTimeSigTrack_IDirectMusicTrack_PlayEx
,
IDirectMusicTimeSigTrack_IDirectMusicTrack_GetParamEx
,
IDirectMusicTimeSigTrack_IDirectMusicTrack_SetParamEx
,
IDirectMusicTimeSigTrack_IDirectMusicTrack_Compose
,
IDirectMusicTimeSigTrack_IDirectMusicTrack_Join
};
};
/* IDirectMusicTimeSigTrack IPersistStream part: */
/* IDirectMusicTimeSigTrack IPersistStream part: */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment