diff --git a/mingw-w64-headers/Makefile.am b/mingw-w64-headers/Makefile.am
index dedf305..2ddd726 100644
--- a/mingw-w64-headers/Makefile.am
+++ b/mingw-w64-headers/Makefile.am
@@ -225,6 +225,7 @@
   include/mmstream.idl \
   include/qedit.idl \
   include/qnetwork.idl \
+  include/relogger.idl \
   include/vmr9.idl \
   include/wincodec.idl \
   include/wincodecsdk.idl \
@@ -246,6 +247,7 @@
   include/windows.storage.streams.idl \
   include/windows.system.idl \
   include/windows.system.threading.idl \
+  include/windowscontracts.idl \
   include/wmcodecdsp.idl \
   include/wmdrmsdk.idl \
   include/wpcapi.idl \
diff --git a/mingw-w64-headers/Makefile.in b/mingw-w64-headers/Makefile.in
index 7221351..d1ad190 100644
--- a/mingw-w64-headers/Makefile.in
+++ b/mingw-w64-headers/Makefile.in
@@ -527,6 +527,7 @@
 @HAVE_WIDL_TRUE@  include/mmstream.idl \
 @HAVE_WIDL_TRUE@  include/qedit.idl \
 @HAVE_WIDL_TRUE@  include/qnetwork.idl \
+@HAVE_WIDL_TRUE@  include/relogger.idl \
 @HAVE_WIDL_TRUE@  include/vmr9.idl \
 @HAVE_WIDL_TRUE@  include/wincodec.idl \
 @HAVE_WIDL_TRUE@  include/wincodecsdk.idl \
@@ -548,6 +549,7 @@
 @HAVE_WIDL_TRUE@  include/windows.storage.streams.idl \
 @HAVE_WIDL_TRUE@  include/windows.system.idl \
 @HAVE_WIDL_TRUE@  include/windows.system.threading.idl \
+@HAVE_WIDL_TRUE@  include/windowscontracts.idl \
 @HAVE_WIDL_TRUE@  include/wmcodecdsp.idl \
 @HAVE_WIDL_TRUE@  include/wmdrmsdk.idl \
 @HAVE_WIDL_TRUE@  include/wpcapi.idl \
diff --git a/mingw-w64-headers/include/relogger.h b/mingw-w64-headers/include/relogger.h
new file mode 100644
index 0000000..1f38414
--- /dev/null
+++ b/mingw-w64-headers/include/relogger.h
@@ -0,0 +1,636 @@
+/*** Autogenerated by WIDL 6.2 from include/relogger.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 __relogger_h__
+#define __relogger_h__
+
+/* Forward declarations */
+
+#ifndef __ITraceEvent_FWD_DEFINED__
+#define __ITraceEvent_FWD_DEFINED__
+typedef interface ITraceEvent ITraceEvent;
+#ifdef __cplusplus
+interface ITraceEvent;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ITraceEventCallback_FWD_DEFINED__
+#define __ITraceEventCallback_FWD_DEFINED__
+typedef interface ITraceEventCallback ITraceEventCallback;
+#ifdef __cplusplus
+interface ITraceEventCallback;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ITraceRelogger_FWD_DEFINED__
+#define __ITraceRelogger_FWD_DEFINED__
+typedef interface ITraceRelogger ITraceRelogger;
+#ifdef __cplusplus
+interface ITraceRelogger;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __CTraceRelogger_FWD_DEFINED__
+#define __CTraceRelogger_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class CTraceRelogger CTraceRelogger;
+#else
+typedef struct CTraceRelogger CTraceRelogger;
+#endif /* defined __cplusplus */
+#endif /* defined __CTraceRelogger_FWD_DEFINED__ */
+
+/* Headers for imported files */
+
+#include <unknwn.h>
+#include <oaidl.h>
+#include <ocidl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _EVENT_DESCRIPTOR {
+    USHORT Id;
+    UCHAR Version;
+    UCHAR Channel;
+    UCHAR Level;
+    UCHAR Opcode;
+    USHORT Task;
+    ULONGLONG Keyword;
+} EVENT_DESCRIPTOR;
+typedef struct _EVENT_DESCRIPTOR *PEVENT_DESCRIPTOR;
+typedef const EVENT_DESCRIPTOR *PCEVENT_DESCRIPTOR;
+typedef struct _EVENT_HEADER {
+    USHORT Size;
+    USHORT HeaderType;
+    USHORT Flags;
+    USHORT EventProperty;
+    ULONG ThreadId;
+    ULONG ProcessId;
+    LARGE_INTEGER TimeStamp;
+    GUID ProviderId;
+    EVENT_DESCRIPTOR EventDescriptor;
+    union {
+        struct {
+            ULONG KernelTime;
+            ULONG UserTime;
+        } DUMMYSTRUCTNAME;
+        ULONG64 ProcessorTime;
+    } DUMMYUNIONNAME;
+    GUID ActivityId;
+} EVENT_HEADER;
+typedef struct _EVENT_HEADER *PEVENT_HEADER;
+typedef struct _ETW_BUFFER_CONTEXT {
+    union {
+        struct {
+            UCHAR ProcessorNumber;
+            UCHAR Alignment;
+        } DUMMYSTRUCTNAME;
+        USHORT ProcessorIndex;
+    } DUMMYUNIONNAME;
+    USHORT LoggerId;
+} ETW_BUFFER_CONTEXT;
+typedef struct _ETW_BUFFER_CONTEXT *PETW_BUFFER_CONTEXT;
+typedef struct _EVENT_HEADER_EXTENDED_DATA_ITEM {
+    USHORT Reserved1;
+    USHORT ExtType;
+    USHORT Linkage;
+    USHORT DataSize;
+    ULONGLONG DataPtr;
+} EVENT_HEADER_EXTENDED_DATA_ITEM;
+typedef struct _EVENT_HEADER_EXTENDED_DATA_ITEM *PEVENT_HEADER_EXTENDED_DATA_ITEM;
+typedef struct _EVENT_RECORD {
+    EVENT_HEADER EventHeader;
+    ETW_BUFFER_CONTEXT BufferContext;
+    USHORT ExtendedDataCount;
+    USHORT UserDataLength;
+    EVENT_HEADER_EXTENDED_DATA_ITEM *ExtendedData;
+    void *UserData;
+    void *UserContext;
+} EVENT_RECORD;
+typedef struct _EVENT_RECORD *PEVENT_RECORD;
+typedef ULONG64 TRACEHANDLE;
+typedef ULONG64 *PTRACEHANDLE;
+/*****************************************************************************
+ * ITraceEvent interface
+ */
+#ifndef __ITraceEvent_INTERFACE_DEFINED__
+#define __ITraceEvent_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITraceEvent, 0x8cc97f40, 0x9028, 0x4ff3, 0x9b,0x62, 0x7d,0x1f,0x79,0xca,0x7b,0xcb);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("8cc97f40-9028-4ff3-9b62-7d1f79ca7bcb")
+ITraceEvent : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        ITraceEvent **NewEvent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetUserContext(
+        void **UserContext) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetEventRecord(
+        PEVENT_RECORD *EventRecord) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPayload(
+        BYTE *Payload,
+        ULONG PayloadSize) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetEventDescriptor(
+        PCEVENT_DESCRIPTOR EventDescriptor) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetProcessId(
+        ULONG ProcessId) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetProcessorIndex(
+        ULONG ProcessorIndex) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetThreadId(
+        ULONG ThreadId) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetThreadTimes(
+        ULONG KernelTime,
+        ULONG UserTime) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetActivityId(
+        LPCGUID ActivityId) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetTimeStamp(
+        LARGE_INTEGER *TimeStamp) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetProviderId(
+        LPCGUID ProviderId) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITraceEvent, 0x8cc97f40, 0x9028, 0x4ff3, 0x9b,0x62, 0x7d,0x1f,0x79,0xca,0x7b,0xcb)
+#endif
+#else
+typedef struct ITraceEventVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITraceEvent *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITraceEvent *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITraceEvent *This);
+
+    /*** ITraceEvent methods ***/
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        ITraceEvent *This,
+        ITraceEvent **NewEvent);
+
+    HRESULT (STDMETHODCALLTYPE *GetUserContext)(
+        ITraceEvent *This,
+        void **UserContext);
+
+    HRESULT (STDMETHODCALLTYPE *GetEventRecord)(
+        ITraceEvent *This,
+        PEVENT_RECORD *EventRecord);
+
+    HRESULT (STDMETHODCALLTYPE *SetPayload)(
+        ITraceEvent *This,
+        BYTE *Payload,
+        ULONG PayloadSize);
+
+    HRESULT (STDMETHODCALLTYPE *SetEventDescriptor)(
+        ITraceEvent *This,
+        PCEVENT_DESCRIPTOR EventDescriptor);
+
+    HRESULT (STDMETHODCALLTYPE *SetProcessId)(
+        ITraceEvent *This,
+        ULONG ProcessId);
+
+    HRESULT (STDMETHODCALLTYPE *SetProcessorIndex)(
+        ITraceEvent *This,
+        ULONG ProcessorIndex);
+
+    HRESULT (STDMETHODCALLTYPE *SetThreadId)(
+        ITraceEvent *This,
+        ULONG ThreadId);
+
+    HRESULT (STDMETHODCALLTYPE *SetThreadTimes)(
+        ITraceEvent *This,
+        ULONG KernelTime,
+        ULONG UserTime);
+
+    HRESULT (STDMETHODCALLTYPE *SetActivityId)(
+        ITraceEvent *This,
+        LPCGUID ActivityId);
+
+    HRESULT (STDMETHODCALLTYPE *SetTimeStamp)(
+        ITraceEvent *This,
+        LARGE_INTEGER *TimeStamp);
+
+    HRESULT (STDMETHODCALLTYPE *SetProviderId)(
+        ITraceEvent *This,
+        LPCGUID ProviderId);
+
+    END_INTERFACE
+} ITraceEventVtbl;
+
+interface ITraceEvent {
+    CONST_VTBL ITraceEventVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ITraceEvent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITraceEvent_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITraceEvent_Release(This) (This)->lpVtbl->Release(This)
+/*** ITraceEvent methods ***/
+#define ITraceEvent_Clone(This,NewEvent) (This)->lpVtbl->Clone(This,NewEvent)
+#define ITraceEvent_GetUserContext(This,UserContext) (This)->lpVtbl->GetUserContext(This,UserContext)
+#define ITraceEvent_GetEventRecord(This,EventRecord) (This)->lpVtbl->GetEventRecord(This,EventRecord)
+#define ITraceEvent_SetPayload(This,Payload,PayloadSize) (This)->lpVtbl->SetPayload(This,Payload,PayloadSize)
+#define ITraceEvent_SetEventDescriptor(This,EventDescriptor) (This)->lpVtbl->SetEventDescriptor(This,EventDescriptor)
+#define ITraceEvent_SetProcessId(This,ProcessId) (This)->lpVtbl->SetProcessId(This,ProcessId)
+#define ITraceEvent_SetProcessorIndex(This,ProcessorIndex) (This)->lpVtbl->SetProcessorIndex(This,ProcessorIndex)
+#define ITraceEvent_SetThreadId(This,ThreadId) (This)->lpVtbl->SetThreadId(This,ThreadId)
+#define ITraceEvent_SetThreadTimes(This,KernelTime,UserTime) (This)->lpVtbl->SetThreadTimes(This,KernelTime,UserTime)
+#define ITraceEvent_SetActivityId(This,ActivityId) (This)->lpVtbl->SetActivityId(This,ActivityId)
+#define ITraceEvent_SetTimeStamp(This,TimeStamp) (This)->lpVtbl->SetTimeStamp(This,TimeStamp)
+#define ITraceEvent_SetProviderId(This,ProviderId) (This)->lpVtbl->SetProviderId(This,ProviderId)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ITraceEvent_QueryInterface(ITraceEvent* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ITraceEvent_AddRef(ITraceEvent* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ITraceEvent_Release(ITraceEvent* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITraceEvent methods ***/
+static FORCEINLINE HRESULT ITraceEvent_Clone(ITraceEvent* This,ITraceEvent **NewEvent) {
+    return This->lpVtbl->Clone(This,NewEvent);
+}
+static FORCEINLINE HRESULT ITraceEvent_GetUserContext(ITraceEvent* This,void **UserContext) {
+    return This->lpVtbl->GetUserContext(This,UserContext);
+}
+static FORCEINLINE HRESULT ITraceEvent_GetEventRecord(ITraceEvent* This,PEVENT_RECORD *EventRecord) {
+    return This->lpVtbl->GetEventRecord(This,EventRecord);
+}
+static FORCEINLINE HRESULT ITraceEvent_SetPayload(ITraceEvent* This,BYTE *Payload,ULONG PayloadSize) {
+    return This->lpVtbl->SetPayload(This,Payload,PayloadSize);
+}
+static FORCEINLINE HRESULT ITraceEvent_SetEventDescriptor(ITraceEvent* This,PCEVENT_DESCRIPTOR EventDescriptor) {
+    return This->lpVtbl->SetEventDescriptor(This,EventDescriptor);
+}
+static FORCEINLINE HRESULT ITraceEvent_SetProcessId(ITraceEvent* This,ULONG ProcessId) {
+    return This->lpVtbl->SetProcessId(This,ProcessId);
+}
+static FORCEINLINE HRESULT ITraceEvent_SetProcessorIndex(ITraceEvent* This,ULONG ProcessorIndex) {
+    return This->lpVtbl->SetProcessorIndex(This,ProcessorIndex);
+}
+static FORCEINLINE HRESULT ITraceEvent_SetThreadId(ITraceEvent* This,ULONG ThreadId) {
+    return This->lpVtbl->SetThreadId(This,ThreadId);
+}
+static FORCEINLINE HRESULT ITraceEvent_SetThreadTimes(ITraceEvent* This,ULONG KernelTime,ULONG UserTime) {
+    return This->lpVtbl->SetThreadTimes(This,KernelTime,UserTime);
+}
+static FORCEINLINE HRESULT ITraceEvent_SetActivityId(ITraceEvent* This,LPCGUID ActivityId) {
+    return This->lpVtbl->SetActivityId(This,ActivityId);
+}
+static FORCEINLINE HRESULT ITraceEvent_SetTimeStamp(ITraceEvent* This,LARGE_INTEGER *TimeStamp) {
+    return This->lpVtbl->SetTimeStamp(This,TimeStamp);
+}
+static FORCEINLINE HRESULT ITraceEvent_SetProviderId(ITraceEvent* This,LPCGUID ProviderId) {
+    return This->lpVtbl->SetProviderId(This,ProviderId);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ITraceEvent_INTERFACE_DEFINED__ */
+
+#ifndef __ITraceRelogger_FWD_DEFINED__
+#define __ITraceRelogger_FWD_DEFINED__
+typedef interface ITraceRelogger ITraceRelogger;
+#ifdef __cplusplus
+interface ITraceRelogger;
+#endif /* __cplusplus */
+#endif
+
+/*****************************************************************************
+ * ITraceEventCallback interface
+ */
+#ifndef __ITraceEventCallback_INTERFACE_DEFINED__
+#define __ITraceEventCallback_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITraceEventCallback, 0x3ed25501, 0x593f, 0x43e9, 0x8f,0x38, 0x3a,0xb4,0x6f,0x5a,0x4a,0x52);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("3ed25501-593f-43e9-8f38-3ab46f5a4a52")
+ITraceEventCallback : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE OnBeginProcessTrace(
+        ITraceEvent *HeaderEvent,
+        ITraceRelogger *Relogger) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnFinalizeProcessTrace(
+        ITraceRelogger *Relogger) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnEvent(
+        ITraceEvent *Event,
+        ITraceRelogger *Relogger) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITraceEventCallback, 0x3ed25501, 0x593f, 0x43e9, 0x8f,0x38, 0x3a,0xb4,0x6f,0x5a,0x4a,0x52)
+#endif
+#else
+typedef struct ITraceEventCallbackVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITraceEventCallback *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITraceEventCallback *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITraceEventCallback *This);
+
+    /*** ITraceEventCallback methods ***/
+    HRESULT (STDMETHODCALLTYPE *OnBeginProcessTrace)(
+        ITraceEventCallback *This,
+        ITraceEvent *HeaderEvent,
+        ITraceRelogger *Relogger);
+
+    HRESULT (STDMETHODCALLTYPE *OnFinalizeProcessTrace)(
+        ITraceEventCallback *This,
+        ITraceRelogger *Relogger);
+
+    HRESULT (STDMETHODCALLTYPE *OnEvent)(
+        ITraceEventCallback *This,
+        ITraceEvent *Event,
+        ITraceRelogger *Relogger);
+
+    END_INTERFACE
+} ITraceEventCallbackVtbl;
+
+interface ITraceEventCallback {
+    CONST_VTBL ITraceEventCallbackVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ITraceEventCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITraceEventCallback_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITraceEventCallback_Release(This) (This)->lpVtbl->Release(This)
+/*** ITraceEventCallback methods ***/
+#define ITraceEventCallback_OnBeginProcessTrace(This,HeaderEvent,Relogger) (This)->lpVtbl->OnBeginProcessTrace(This,HeaderEvent,Relogger)
+#define ITraceEventCallback_OnFinalizeProcessTrace(This,Relogger) (This)->lpVtbl->OnFinalizeProcessTrace(This,Relogger)
+#define ITraceEventCallback_OnEvent(This,Event,Relogger) (This)->lpVtbl->OnEvent(This,Event,Relogger)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ITraceEventCallback_QueryInterface(ITraceEventCallback* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ITraceEventCallback_AddRef(ITraceEventCallback* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ITraceEventCallback_Release(ITraceEventCallback* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITraceEventCallback methods ***/
+static FORCEINLINE HRESULT ITraceEventCallback_OnBeginProcessTrace(ITraceEventCallback* This,ITraceEvent *HeaderEvent,ITraceRelogger *Relogger) {
+    return This->lpVtbl->OnBeginProcessTrace(This,HeaderEvent,Relogger);
+}
+static FORCEINLINE HRESULT ITraceEventCallback_OnFinalizeProcessTrace(ITraceEventCallback* This,ITraceRelogger *Relogger) {
+    return This->lpVtbl->OnFinalizeProcessTrace(This,Relogger);
+}
+static FORCEINLINE HRESULT ITraceEventCallback_OnEvent(ITraceEventCallback* This,ITraceEvent *Event,ITraceRelogger *Relogger) {
+    return This->lpVtbl->OnEvent(This,Event,Relogger);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ITraceEventCallback_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITraceRelogger interface
+ */
+#ifndef __ITraceRelogger_INTERFACE_DEFINED__
+#define __ITraceRelogger_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITraceRelogger, 0xf754ad43, 0x3bcc, 0x4286, 0x80,0x09, 0x9c,0x5d,0xa2,0x14,0xe8,0x4e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("f754ad43-3bcc-4286-8009-9c5da214e84e")
+ITraceRelogger : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE AddLogfileTraceStream(
+        BSTR LogfileName,
+        void *UserContext,
+        TRACEHANDLE *TraceHandle) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddRealtimeTraceStream(
+        BSTR LoggerName,
+        void *UserContext,
+        TRACEHANDLE *TraceHandle) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RegisterCallback(
+        ITraceEventCallback *Callback) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Inject(
+        ITraceEvent *Event) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateEventInstance(
+        TRACEHANDLE TraceHandle,
+        ULONG Flags,
+        ITraceEvent **Event) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ProcessTrace(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetOutputFilename(
+        BSTR LogfileName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetCompressionMode(
+        BOOLEAN CompressionMode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Cancel(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITraceRelogger, 0xf754ad43, 0x3bcc, 0x4286, 0x80,0x09, 0x9c,0x5d,0xa2,0x14,0xe8,0x4e)
+#endif
+#else
+typedef struct ITraceReloggerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITraceRelogger *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITraceRelogger *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITraceRelogger *This);
+
+    /*** ITraceRelogger methods ***/
+    HRESULT (STDMETHODCALLTYPE *AddLogfileTraceStream)(
+        ITraceRelogger *This,
+        BSTR LogfileName,
+        void *UserContext,
+        TRACEHANDLE *TraceHandle);
+
+    HRESULT (STDMETHODCALLTYPE *AddRealtimeTraceStream)(
+        ITraceRelogger *This,
+        BSTR LoggerName,
+        void *UserContext,
+        TRACEHANDLE *TraceHandle);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterCallback)(
+        ITraceRelogger *This,
+        ITraceEventCallback *Callback);
+
+    HRESULT (STDMETHODCALLTYPE *Inject)(
+        ITraceRelogger *This,
+        ITraceEvent *Event);
+
+    HRESULT (STDMETHODCALLTYPE *CreateEventInstance)(
+        ITraceRelogger *This,
+        TRACEHANDLE TraceHandle,
+        ULONG Flags,
+        ITraceEvent **Event);
+
+    HRESULT (STDMETHODCALLTYPE *ProcessTrace)(
+        ITraceRelogger *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputFilename)(
+        ITraceRelogger *This,
+        BSTR LogfileName);
+
+    HRESULT (STDMETHODCALLTYPE *SetCompressionMode)(
+        ITraceRelogger *This,
+        BOOLEAN CompressionMode);
+
+    HRESULT (STDMETHODCALLTYPE *Cancel)(
+        ITraceRelogger *This);
+
+    END_INTERFACE
+} ITraceReloggerVtbl;
+
+interface ITraceRelogger {
+    CONST_VTBL ITraceReloggerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ITraceRelogger_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITraceRelogger_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITraceRelogger_Release(This) (This)->lpVtbl->Release(This)
+/*** ITraceRelogger methods ***/
+#define ITraceRelogger_AddLogfileTraceStream(This,LogfileName,UserContext,TraceHandle) (This)->lpVtbl->AddLogfileTraceStream(This,LogfileName,UserContext,TraceHandle)
+#define ITraceRelogger_AddRealtimeTraceStream(This,LoggerName,UserContext,TraceHandle) (This)->lpVtbl->AddRealtimeTraceStream(This,LoggerName,UserContext,TraceHandle)
+#define ITraceRelogger_RegisterCallback(This,Callback) (This)->lpVtbl->RegisterCallback(This,Callback)
+#define ITraceRelogger_Inject(This,Event) (This)->lpVtbl->Inject(This,Event)
+#define ITraceRelogger_CreateEventInstance(This,TraceHandle,Flags,Event) (This)->lpVtbl->CreateEventInstance(This,TraceHandle,Flags,Event)
+#define ITraceRelogger_ProcessTrace(This) (This)->lpVtbl->ProcessTrace(This)
+#define ITraceRelogger_SetOutputFilename(This,LogfileName) (This)->lpVtbl->SetOutputFilename(This,LogfileName)
+#define ITraceRelogger_SetCompressionMode(This,CompressionMode) (This)->lpVtbl->SetCompressionMode(This,CompressionMode)
+#define ITraceRelogger_Cancel(This) (This)->lpVtbl->Cancel(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ITraceRelogger_QueryInterface(ITraceRelogger* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ITraceRelogger_AddRef(ITraceRelogger* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ITraceRelogger_Release(ITraceRelogger* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITraceRelogger methods ***/
+static FORCEINLINE HRESULT ITraceRelogger_AddLogfileTraceStream(ITraceRelogger* This,BSTR LogfileName,void *UserContext,TRACEHANDLE *TraceHandle) {
+    return This->lpVtbl->AddLogfileTraceStream(This,LogfileName,UserContext,TraceHandle);
+}
+static FORCEINLINE HRESULT ITraceRelogger_AddRealtimeTraceStream(ITraceRelogger* This,BSTR LoggerName,void *UserContext,TRACEHANDLE *TraceHandle) {
+    return This->lpVtbl->AddRealtimeTraceStream(This,LoggerName,UserContext,TraceHandle);
+}
+static FORCEINLINE HRESULT ITraceRelogger_RegisterCallback(ITraceRelogger* This,ITraceEventCallback *Callback) {
+    return This->lpVtbl->RegisterCallback(This,Callback);
+}
+static FORCEINLINE HRESULT ITraceRelogger_Inject(ITraceRelogger* This,ITraceEvent *Event) {
+    return This->lpVtbl->Inject(This,Event);
+}
+static FORCEINLINE HRESULT ITraceRelogger_CreateEventInstance(ITraceRelogger* This,TRACEHANDLE TraceHandle,ULONG Flags,ITraceEvent **Event) {
+    return This->lpVtbl->CreateEventInstance(This,TraceHandle,Flags,Event);
+}
+static FORCEINLINE HRESULT ITraceRelogger_ProcessTrace(ITraceRelogger* This) {
+    return This->lpVtbl->ProcessTrace(This);
+}
+static FORCEINLINE HRESULT ITraceRelogger_SetOutputFilename(ITraceRelogger* This,BSTR LogfileName) {
+    return This->lpVtbl->SetOutputFilename(This,LogfileName);
+}
+static FORCEINLINE HRESULT ITraceRelogger_SetCompressionMode(ITraceRelogger* This,BOOLEAN CompressionMode) {
+    return This->lpVtbl->SetCompressionMode(This,CompressionMode);
+}
+static FORCEINLINE HRESULT ITraceRelogger_Cancel(ITraceRelogger* This) {
+    return This->lpVtbl->Cancel(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ITraceRelogger_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * CTraceRelogger coclass
+ */
+
+DEFINE_GUID(CLSID_CTraceRelogger, 0x7b40792d, 0x05ff, 0x44c4, 0x90,0x58, 0xf4,0x40,0xc7,0x1f,0x17,0xd4);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("7b40792d-05ff-44c4-9058-f440c71f17d4") CTraceRelogger;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(CTraceRelogger, 0x7b40792d, 0x05ff, 0x44c4, 0x90,0x58, 0xf4,0x40,0xc7,0x1f,0x17,0xd4)
+#endif
+#endif
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __relogger_h__ */
diff --git a/mingw-w64-headers/include/relogger.idl b/mingw-w64-headers/include/relogger.idl
new file mode 100644
index 0000000..60e0451
--- /dev/null
+++ b/mingw-w64-headers/include/relogger.idl
@@ -0,0 +1,184 @@
+/*
+ * Copyright 2021 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+import "unknwn.idl";
+import "oaidl.idl";
+import "ocidl.idl";
+
+#ifndef __WIDL__
+#define threading(model)
+#endif
+
+typedef struct _EVENT_DESCRIPTOR
+{
+    USHORT     Id;
+    UCHAR      Version;
+    UCHAR      Channel;
+    UCHAR      Level;
+    UCHAR      Opcode;
+    USHORT     Task;
+    ULONGLONG  Keyword;
+} EVENT_DESCRIPTOR, *PEVENT_DESCRIPTOR;
+typedef const EVENT_DESCRIPTOR *PCEVENT_DESCRIPTOR;
+
+typedef struct _EVENT_HEADER
+{
+    USHORT            Size;
+    USHORT            HeaderType;
+    USHORT            Flags;
+    USHORT            EventProperty;
+    ULONG             ThreadId;
+    ULONG             ProcessId;
+    LARGE_INTEGER     TimeStamp;
+    GUID              ProviderId;
+    EVENT_DESCRIPTOR  EventDescriptor;
+    union {
+        struct {
+            ULONG     KernelTime;
+            ULONG     UserTime;
+        } DUMMYSTRUCTNAME;
+        ULONG64       ProcessorTime;
+    } DUMMYUNIONNAME;
+    GUID              ActivityId;
+} EVENT_HEADER, *PEVENT_HEADER;
+
+typedef struct _ETW_BUFFER_CONTEXT
+{
+    union {
+        struct {
+            UCHAR ProcessorNumber;
+            UCHAR Alignment;
+        } DUMMYSTRUCTNAME;
+        USHORT ProcessorIndex;
+    } DUMMYUNIONNAME;
+    USHORT LoggerId;
+} ETW_BUFFER_CONTEXT, *PETW_BUFFER_CONTEXT;
+
+typedef struct _EVENT_HEADER_EXTENDED_DATA_ITEM
+{
+    USHORT     Reserved1;
+    USHORT     ExtType;
+    USHORT     Linkage;
+    USHORT     DataSize;
+    ULONGLONG  DataPtr;
+} EVENT_HEADER_EXTENDED_DATA_ITEM, *PEVENT_HEADER_EXTENDED_DATA_ITEM;
+
+typedef struct _EVENT_RECORD
+{
+    EVENT_HEADER                      EventHeader;
+    ETW_BUFFER_CONTEXT                BufferContext;
+    USHORT                            ExtendedDataCount;
+    USHORT                            UserDataLength;
+    EVENT_HEADER_EXTENDED_DATA_ITEM  *ExtendedData;
+    void                             *UserData;
+    void                             *UserContext;
+} EVENT_RECORD, *PEVENT_RECORD;
+
+typedef ULONG64 TRACEHANDLE, *PTRACEHANDLE;
+
+[
+    object,
+    uuid(8cc97f40-9028-4ff3-9b62-7d1f79ca7bcb),
+    local
+]
+interface ITraceEvent : IUnknown
+{
+    HRESULT Clone([out, retval] ITraceEvent **NewEvent);
+
+    HRESULT GetUserContext([out, retval] void **UserContext);
+
+    HRESULT GetEventRecord([out, retval] PEVENT_RECORD *EventRecord);
+
+    HRESULT SetPayload([in, size_is(PayloadSize)] BYTE *Payload,
+                       [in] ULONG PayloadSize);
+
+    HRESULT SetEventDescriptor([in] PCEVENT_DESCRIPTOR EventDescriptor);
+
+    HRESULT SetProcessId([in] ULONG ProcessId);
+
+    HRESULT SetProcessorIndex([in] ULONG ProcessorIndex);
+
+    HRESULT SetThreadId([in] ULONG ThreadId);
+
+    HRESULT SetThreadTimes([in] ULONG KernelTime,
+                           [in] ULONG UserTime);
+
+    HRESULT SetActivityId([in] LPCGUID ActivityId);
+
+    HRESULT SetTimeStamp([in] LARGE_INTEGER *TimeStamp);
+
+    HRESULT SetProviderId([in] LPCGUID ProviderId);
+}
+
+interface ITraceRelogger;
+
+[
+    object,
+    uuid(3ed25501-593f-43e9-8f38-3ab46f5a4a52)
+]
+interface ITraceEventCallback : IUnknown
+{
+    HRESULT OnBeginProcessTrace([in] ITraceEvent *HeaderEvent,
+                                [in] ITraceRelogger *Relogger);
+
+    HRESULT OnFinalizeProcessTrace([in] ITraceRelogger *Relogger);
+
+    HRESULT OnEvent([in] ITraceEvent *Event,
+                    [in] ITraceRelogger *Relogger);
+}
+
+[
+    object,
+    uuid(f754ad43-3bcc-4286-8009-9c5da214e84e),
+    local
+]
+interface ITraceRelogger : IUnknown
+{
+    HRESULT AddLogfileTraceStream([in] BSTR LogfileName,
+                                  [in] void *UserContext,
+                                  [out, retval] TRACEHANDLE *TraceHandle);
+
+    HRESULT AddRealtimeTraceStream([in] BSTR LoggerName,
+                                   [in] void *UserContext,
+                                   [out, retval] TRACEHANDLE *TraceHandle);
+
+    HRESULT RegisterCallback([in] ITraceEventCallback *Callback);
+
+    HRESULT Inject([in] ITraceEvent *Event);
+
+    HRESULT CreateEventInstance([in] TRACEHANDLE TraceHandle,
+                                [in] ULONG Flags,
+                                [out, retval] ITraceEvent **Event);
+
+    HRESULT ProcessTrace();
+
+    HRESULT SetOutputFilename([in] BSTR LogfileName);
+
+    HRESULT SetCompressionMode([in] BOOLEAN CompressionMode);
+
+    HRESULT Cancel();
+}
+
+[
+    uuid(7b40792d-05ff-44c4-9058-f440c71f17d4),
+    threading(both)
+]
+coclass CTraceRelogger
+{
+    [default] interface ITraceRelogger;
+}
diff --git a/mingw-w64-headers/include/windowscontracts.h b/mingw-w64-headers/include/windowscontracts.h
new file mode 100644
index 0000000..4a3f1df
--- /dev/null
+++ b/mingw-w64-headers/include/windowscontracts.h
@@ -0,0 +1,45 @@
+/*** Autogenerated by WIDL 6.2 from include/windowscontracts.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 __windowscontracts_h__
+#define __windowscontracts_h__
+
+/* Forward declarations */
+
+/* Headers for imported files */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined(WINDOWS_FOUNDATION_FOUNDATIONCONTRACT_VERSION)
+#define WINDOWS_FOUNDATION_FOUNDATIONCONTRACT_VERSION 0x40000
+#endif // defined(WINDOWS_FOUNDATION_FOUNDATIONCONTRACT_VERSION)
+
+#if !defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)
+#define WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION 0xa0000
+#endif // defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __windowscontracts_h__ */
diff --git a/mingw-w64-headers/include/windowscontracts.idl b/mingw-w64-headers/include/windowscontracts.idl
new file mode 100644
index 0000000..6bcf80a
--- /dev/null
+++ b/mingw-w64-headers/include/windowscontracts.idl
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2020 Rémi Bernon for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifdef __WIDL__
+#pragma winrt ns_prefix
+#endif
+
+namespace Windows {
+    namespace Foundation {
+        [contractversion(4)]
+        apicontract FoundationContract
+        {};
+
+        [contractversion(10)]
+        apicontract UniversalApiContract
+        {};
+    }
+}
diff --git a/mingw-w64-headers/wine-import.sh b/mingw-w64-headers/wine-import.sh
index f1859cb..1dd2748 100755
--- a/mingw-w64-headers/wine-import.sh
+++ b/mingw-w64-headers/wine-import.sh
@@ -182,6 +182,7 @@
 	objectarray \
 	optary \
 	qedit \
+        relogger \
 	spatialaudioclient \
 	taskschd \
 	thumbcache \
@@ -191,6 +192,7 @@
 	vmr9 \
 	wincodec \
 	wincodecsdk \
+        windowscontracts \
 	wmdrmsdk \
 	wmp \
 	wmsbuffer \
