diff --git a/mingw-w64-headers/include/dwrite_3.h b/mingw-w64-headers/include/dwrite_3.h
index 7ea105f..169850c 100644
--- a/mingw-w64-headers/include/dwrite_3.h
+++ b/mingw-w64-headers/include/dwrite_3.h
@@ -5053,7 +5053,7 @@
         ) = 0;
 
     virtual HRESULT STDMETHODCALLTYPE GetFontAxisValues(
-        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        DWRITE_FONT_AXIS_VALUE *axis_values,
         UINT32 num_values) = 0;
 
     virtual DWRITE_AUTOMATIC_FONT_AXES STDMETHODCALLTYPE GetAutomaticFontAxes(
@@ -5229,7 +5229,7 @@
 
     HRESULT (STDMETHODCALLTYPE *GetFontAxisValues)(
         IDWriteTextFormat3 *This,
-        const DWRITE_FONT_AXIS_VALUE *axis_values,
+        DWRITE_FONT_AXIS_VALUE *axis_values,
         UINT32 num_values);
 
     DWRITE_AUTOMATIC_FONT_AXES (STDMETHODCALLTYPE *GetAutomaticFontAxes)(
@@ -5414,7 +5414,7 @@
 static FORCEINLINE UINT32 IDWriteTextFormat3_GetFontAxisValueCount(IDWriteTextFormat3* This) {
     return This->lpVtbl->GetFontAxisValueCount(This);
 }
-static FORCEINLINE HRESULT IDWriteTextFormat3_GetFontAxisValues(IDWriteTextFormat3* This,const DWRITE_FONT_AXIS_VALUE *axis_values,UINT32 num_values) {
+static FORCEINLINE HRESULT IDWriteTextFormat3_GetFontAxisValues(IDWriteTextFormat3* This,DWRITE_FONT_AXIS_VALUE *axis_values,UINT32 num_values) {
     return This->lpVtbl->GetFontAxisValues(This,axis_values,num_values);
 }
 static FORCEINLINE DWRITE_AUTOMATIC_FONT_AXES IDWriteTextFormat3_GetAutomaticFontAxes(IDWriteTextFormat3* This) {
diff --git a/mingw-w64-headers/include/wmprealestate.h b/mingw-w64-headers/include/wmprealestate.h
new file mode 100644
index 0000000..143bcd8
--- /dev/null
+++ b/mingw-w64-headers/include/wmprealestate.h
@@ -0,0 +1,221 @@
+/*** Autogenerated by WIDL 6.3 from include/wmprealestate.idl - Do not edit ***/
+
+#ifdef _WIN32
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+#include <rpc.h>
+#include <rpcndr.h>
+#endif
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
+
+#ifndef __wmprealestate_h__
+#define __wmprealestate_h__
+
+/* Forward declarations */
+
+#ifndef __IWMPVideoRenderConfig_FWD_DEFINED__
+#define __IWMPVideoRenderConfig_FWD_DEFINED__
+typedef interface IWMPVideoRenderConfig IWMPVideoRenderConfig;
+#ifdef __cplusplus
+interface IWMPVideoRenderConfig;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IWMPRenderConfig_FWD_DEFINED__
+#define __IWMPRenderConfig_FWD_DEFINED__
+typedef interface IWMPRenderConfig IWMPRenderConfig;
+#ifdef __cplusplus
+interface IWMPRenderConfig;
+#endif /* __cplusplus */
+#endif
+
+/* Headers for imported files */
+
+#include <unknwn.h>
+#include <ocidl.h>
+#include <mfidl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*****************************************************************************
+ * IWMPVideoRenderConfig interface
+ */
+#ifndef __IWMPVideoRenderConfig_INTERFACE_DEFINED__
+#define __IWMPVideoRenderConfig_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWMPVideoRenderConfig, 0x6d6cf803, 0x1ec0, 0x4c8d, 0xb3,0xca, 0xf1,0x8e,0x27,0x28,0x20,0x74);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("6d6cf803-1ec0-4c8d-b3ca-f18e27282074")
+IWMPVideoRenderConfig : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE put_presenterActivate(
+        IMFActivate *activate) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IWMPVideoRenderConfig, 0x6d6cf803, 0x1ec0, 0x4c8d, 0xb3,0xca, 0xf1,0x8e,0x27,0x28,0x20,0x74)
+#endif
+#else
+typedef struct IWMPVideoRenderConfigVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWMPVideoRenderConfig *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWMPVideoRenderConfig *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWMPVideoRenderConfig *This);
+
+    /*** IWMPVideoRenderConfig methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_presenterActivate)(
+        IWMPVideoRenderConfig *This,
+        IMFActivate *activate);
+
+    END_INTERFACE
+} IWMPVideoRenderConfigVtbl;
+
+interface IWMPVideoRenderConfig {
+    CONST_VTBL IWMPVideoRenderConfigVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IWMPVideoRenderConfig_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWMPVideoRenderConfig_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWMPVideoRenderConfig_Release(This) (This)->lpVtbl->Release(This)
+/*** IWMPVideoRenderConfig methods ***/
+#define IWMPVideoRenderConfig_put_presenterActivate(This,activate) (This)->lpVtbl->put_presenterActivate(This,activate)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IWMPVideoRenderConfig_QueryInterface(IWMPVideoRenderConfig* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IWMPVideoRenderConfig_AddRef(IWMPVideoRenderConfig* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IWMPVideoRenderConfig_Release(IWMPVideoRenderConfig* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IWMPVideoRenderConfig methods ***/
+static FORCEINLINE HRESULT IWMPVideoRenderConfig_put_presenterActivate(IWMPVideoRenderConfig* This,IMFActivate *activate) {
+    return This->lpVtbl->put_presenterActivate(This,activate);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IWMPVideoRenderConfig_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWMPRenderConfig interface
+ */
+#ifndef __IWMPRenderConfig_INTERFACE_DEFINED__
+#define __IWMPRenderConfig_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWMPRenderConfig, 0x959506c1, 0x0314, 0x4ec5, 0x9e,0x61, 0x85,0x28,0xdb,0x5e,0x54,0x78);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("959506c1-0314-4ec5-9e61-8528db5e5478")
+IWMPRenderConfig : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE put_inProcOnly(
+        WINBOOL fInProc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_inProcOnly(
+        WINBOOL *pfInProc) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IWMPRenderConfig, 0x959506c1, 0x0314, 0x4ec5, 0x9e,0x61, 0x85,0x28,0xdb,0x5e,0x54,0x78)
+#endif
+#else
+typedef struct IWMPRenderConfigVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWMPRenderConfig *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWMPRenderConfig *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWMPRenderConfig *This);
+
+    /*** IWMPRenderConfig methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_inProcOnly)(
+        IWMPRenderConfig *This,
+        WINBOOL fInProc);
+
+    HRESULT (STDMETHODCALLTYPE *get_inProcOnly)(
+        IWMPRenderConfig *This,
+        WINBOOL *pfInProc);
+
+    END_INTERFACE
+} IWMPRenderConfigVtbl;
+
+interface IWMPRenderConfig {
+    CONST_VTBL IWMPRenderConfigVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IWMPRenderConfig_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWMPRenderConfig_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWMPRenderConfig_Release(This) (This)->lpVtbl->Release(This)
+/*** IWMPRenderConfig methods ***/
+#define IWMPRenderConfig_put_inProcOnly(This,fInProc) (This)->lpVtbl->put_inProcOnly(This,fInProc)
+#define IWMPRenderConfig_get_inProcOnly(This,pfInProc) (This)->lpVtbl->get_inProcOnly(This,pfInProc)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IWMPRenderConfig_QueryInterface(IWMPRenderConfig* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IWMPRenderConfig_AddRef(IWMPRenderConfig* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IWMPRenderConfig_Release(IWMPRenderConfig* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IWMPRenderConfig methods ***/
+static FORCEINLINE HRESULT IWMPRenderConfig_put_inProcOnly(IWMPRenderConfig* This,WINBOOL fInProc) {
+    return This->lpVtbl->put_inProcOnly(This,fInProc);
+}
+static FORCEINLINE HRESULT IWMPRenderConfig_get_inProcOnly(IWMPRenderConfig* This,WINBOOL *pfInProc) {
+    return This->lpVtbl->get_inProcOnly(This,pfInProc);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IWMPRenderConfig_INTERFACE_DEFINED__ */
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __wmprealestate_h__ */
diff --git a/mingw-w64-headers/include/wmpservices.h b/mingw-w64-headers/include/wmpservices.h
new file mode 100644
index 0000000..f124d61
--- /dev/null
+++ b/mingw-w64-headers/include/wmpservices.h
@@ -0,0 +1,149 @@
+/*** Autogenerated by WIDL 6.3 from include/wmpservices.idl - Do not edit ***/
+
+#ifdef _WIN32
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+#include <rpc.h>
+#include <rpcndr.h>
+#endif
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
+
+#ifndef __wmpservices_h__
+#define __wmpservices_h__
+
+/* Forward declarations */
+
+#ifndef __IWMPGraphCreation_FWD_DEFINED__
+#define __IWMPGraphCreation_FWD_DEFINED__
+typedef interface IWMPGraphCreation IWMPGraphCreation;
+#ifdef __cplusplus
+interface IWMPGraphCreation;
+#endif /* __cplusplus */
+#endif
+
+/* Headers for imported files */
+
+#include <oaidl.h>
+#include <ocidl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define WMPGC_FLAGS_SUPPRESS_DIALOGS 0x00000002
+/*****************************************************************************
+ * IWMPGraphCreation interface
+ */
+#ifndef __IWMPGraphCreation_INTERFACE_DEFINED__
+#define __IWMPGraphCreation_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWMPGraphCreation, 0xbfb377e5, 0xc594, 0x4369, 0xa9,0x70, 0xde,0x89,0x6d,0x5e,0xce,0x74);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("bfb377e5-c594-4369-a970-de896d5ece74")
+IWMPGraphCreation : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GraphCreationPreRender(
+        IUnknown *filter_graph,
+        IUnknown *reserved) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GraphCreationPostRender(
+        IUnknown *filter_graph) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetGraphCreationFlags(
+        DWORD *flags) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IWMPGraphCreation, 0xbfb377e5, 0xc594, 0x4369, 0xa9,0x70, 0xde,0x89,0x6d,0x5e,0xce,0x74)
+#endif
+#else
+typedef struct IWMPGraphCreationVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWMPGraphCreation *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWMPGraphCreation *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWMPGraphCreation *This);
+
+    /*** IWMPGraphCreation methods ***/
+    HRESULT (STDMETHODCALLTYPE *GraphCreationPreRender)(
+        IWMPGraphCreation *This,
+        IUnknown *filter_graph,
+        IUnknown *reserved);
+
+    HRESULT (STDMETHODCALLTYPE *GraphCreationPostRender)(
+        IWMPGraphCreation *This,
+        IUnknown *filter_graph);
+
+    HRESULT (STDMETHODCALLTYPE *GetGraphCreationFlags)(
+        IWMPGraphCreation *This,
+        DWORD *flags);
+
+    END_INTERFACE
+} IWMPGraphCreationVtbl;
+
+interface IWMPGraphCreation {
+    CONST_VTBL IWMPGraphCreationVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IWMPGraphCreation_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWMPGraphCreation_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWMPGraphCreation_Release(This) (This)->lpVtbl->Release(This)
+/*** IWMPGraphCreation methods ***/
+#define IWMPGraphCreation_GraphCreationPreRender(This,filter_graph,reserved) (This)->lpVtbl->GraphCreationPreRender(This,filter_graph,reserved)
+#define IWMPGraphCreation_GraphCreationPostRender(This,filter_graph) (This)->lpVtbl->GraphCreationPostRender(This,filter_graph)
+#define IWMPGraphCreation_GetGraphCreationFlags(This,flags) (This)->lpVtbl->GetGraphCreationFlags(This,flags)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IWMPGraphCreation_QueryInterface(IWMPGraphCreation* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IWMPGraphCreation_AddRef(IWMPGraphCreation* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IWMPGraphCreation_Release(IWMPGraphCreation* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IWMPGraphCreation methods ***/
+static FORCEINLINE HRESULT IWMPGraphCreation_GraphCreationPreRender(IWMPGraphCreation* This,IUnknown *filter_graph,IUnknown *reserved) {
+    return This->lpVtbl->GraphCreationPreRender(This,filter_graph,reserved);
+}
+static FORCEINLINE HRESULT IWMPGraphCreation_GraphCreationPostRender(IWMPGraphCreation* This,IUnknown *filter_graph) {
+    return This->lpVtbl->GraphCreationPostRender(This,filter_graph);
+}
+static FORCEINLINE HRESULT IWMPGraphCreation_GetGraphCreationFlags(IWMPGraphCreation* This,DWORD *flags) {
+    return This->lpVtbl->GetGraphCreationFlags(This,flags);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IWMPGraphCreation_INTERFACE_DEFINED__ */
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __wmpservices_h__ */
diff --git a/mingw-w64-headers/include/wmsdkidl.h b/mingw-w64-headers/include/wmsdkidl.h
index 0df15c9..2478eb4 100644
--- a/mingw-w64-headers/include/wmsdkidl.h
+++ b/mingw-w64-headers/include/wmsdkidl.h
@@ -6854,9 +6854,9 @@
 #ifndef __IWMSyncReader2_INTERFACE_DEFINED__
 #define __IWMSyncReader2_INTERFACE_DEFINED__
 
-DEFINE_GUID(IID_IWMSyncReader2, 0xfaed3d21, 0x1b6b, 0x4af7, 0x8b,0xc6, 0x3e,0x18,0x9b,0xbc,0x18,0x7b);
+DEFINE_GUID(IID_IWMSyncReader2, 0xfaed3d21, 0x1b6b, 0x4af7, 0x8c,0xb6, 0x3e,0x18,0x9b,0xbc,0x18,0x7b);
 #if defined(__cplusplus) && !defined(CINTERFACE)
-MIDL_INTERFACE("faed3d21-1b6b-4af7-8bc6-3e189bbc187b")
+MIDL_INTERFACE("faed3d21-1b6b-4af7-8cb6-3e189bbc187b")
 IWMSyncReader2 : public IWMSyncReader
 {
     virtual HRESULT STDMETHODCALLTYPE SetRangeByTimecode(
@@ -6888,7 +6888,7 @@
 
 };
 #ifdef __CRT_UUID_DECL
-__CRT_UUID_DECL(IWMSyncReader2, 0xfaed3d21, 0x1b6b, 0x4af7, 0x8b,0xc6, 0x3e,0x18,0x9b,0xbc,0x18,0x7b)
+__CRT_UUID_DECL(IWMSyncReader2, 0xfaed3d21, 0x1b6b, 0x4af7, 0x8c,0xb6, 0x3e,0x18,0x9b,0xbc,0x18,0x7b)
 #endif
 #else
 typedef struct IWMSyncReader2Vtbl {
