diff --git a/mingw-w64-headers/Makefile.in b/mingw-w64-headers/Makefile.in
index bccf537..703edad 100644
--- a/mingw-w64-headers/Makefile.in
+++ b/mingw-w64-headers/Makefile.in
@@ -599,6 +599,7 @@
 @HAVE_WIDL_TRUE@  include/windows.applicationmodel.idl \
 @HAVE_WIDL_TRUE@  include/windows.data.json.idl \
 @HAVE_WIDL_TRUE@  include/windows.data.xml.dom.idl \
+@HAVE_WIDL_TRUE@  include/windows.devices.bluetooth.advertisement.idl \
 @HAVE_WIDL_TRUE@  include/windows.devices.bluetooth.genericattributeprofile.idl \
 @HAVE_WIDL_TRUE@  include/windows.devices.bluetooth.idl \
 @HAVE_WIDL_TRUE@  include/windows.devices.bluetooth.rfcomm.idl \
@@ -629,13 +630,16 @@
 @HAVE_WIDL_TRUE@  include/windows.management.deployment.idl \
 @HAVE_WIDL_TRUE@  include/windows.media.capture.idl \
 @HAVE_WIDL_TRUE@  include/windows.media.closedcaptioning.idl \
+@HAVE_WIDL_TRUE@  include/windows.media.core.idl \
 @HAVE_WIDL_TRUE@  include/windows.media.devices.idl \
 @HAVE_WIDL_TRUE@  include/windows.media.effects.idl \
 @HAVE_WIDL_TRUE@  include/windows.media.faceanalysis.idl \
 @HAVE_WIDL_TRUE@  include/windows.media.idl \
+@HAVE_WIDL_TRUE@  include/windows.media.mediaproperties.idl \
 @HAVE_WIDL_TRUE@  include/windows.media.render.idl \
 @HAVE_WIDL_TRUE@  include/windows.media.speechrecognition.idl \
 @HAVE_WIDL_TRUE@  include/windows.media.speechsynthesis.idl \
+@HAVE_WIDL_TRUE@  include/windows.media.transcoding.idl \
 @HAVE_WIDL_TRUE@  include/windows.networking.connectivity.idl \
 @HAVE_WIDL_TRUE@  include/windows.networking.idl \
 @HAVE_WIDL_TRUE@  include/windows.networking.sockets.idl \
@@ -667,6 +671,7 @@
 @HAVE_WIDL_TRUE@  include/windows.ui.notifications.idl \
 @HAVE_WIDL_TRUE@  include/windows.ui.viewmanagement.core.idl \
 @HAVE_WIDL_TRUE@  include/windows.ui.viewmanagement.idl \
+@HAVE_WIDL_TRUE@  include/windows.ui.windowmanagement.idl \
 @HAVE_WIDL_TRUE@  include/windows.ui.xaml.hosting.desktopwindowxamlsource.idl \
 @HAVE_WIDL_TRUE@  include/windows.ui.xaml.idl \
 @HAVE_WIDL_TRUE@  include/windows.ui.xaml.interop.idl \
diff --git a/mingw-w64-headers/include/activation.h b/mingw-w64-headers/include/activation.h
index 8990ad0..81812d0 100644
--- a/mingw-w64-headers/include/activation.h
+++ b/mingw-w64-headers/include/activation.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/activation.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/activation.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/activaut.h b/mingw-w64-headers/include/activaut.h
index c5261f0..3dd0c75 100644
--- a/mingw-w64-headers/include/activaut.h
+++ b/mingw-w64-headers/include/activaut.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/activaut.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/activaut.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/activdbg.h b/mingw-w64-headers/include/activdbg.h
index 567b63c..f8127a8 100644
--- a/mingw-w64-headers/include/activdbg.h
+++ b/mingw-w64-headers/include/activdbg.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/activdbg.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/activdbg.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/activdbg100.h b/mingw-w64-headers/include/activdbg100.h
index 0f36279..355bd39 100644
--- a/mingw-w64-headers/include/activdbg100.h
+++ b/mingw-w64-headers/include/activdbg100.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/activdbg100.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/activdbg100.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/activprof.h b/mingw-w64-headers/include/activprof.h
index 1bd2b75..f8dc584 100644
--- a/mingw-w64-headers/include/activprof.h
+++ b/mingw-w64-headers/include/activprof.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/activprof.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/activprof.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/activscp.h b/mingw-w64-headers/include/activscp.h
index 1d8575c..c9f8ff2 100644
--- a/mingw-w64-headers/include/activscp.h
+++ b/mingw-w64-headers/include/activscp.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/activscp.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/activscp.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/adhoc.h b/mingw-w64-headers/include/adhoc.h
index 0ca6a91..9c5ba83 100644
--- a/mingw-w64-headers/include/adhoc.h
+++ b/mingw-w64-headers/include/adhoc.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/adhoc.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/adhoc.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/alg.h b/mingw-w64-headers/include/alg.h
index 41ff244..5ed74c3 100644
--- a/mingw-w64-headers/include/alg.h
+++ b/mingw-w64-headers/include/alg.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/alg.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/alg.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/amstream.h b/mingw-w64-headers/include/amstream.h
index 5bea62e..f7ce8e8 100644
--- a/mingw-w64-headers/include/amstream.h
+++ b/mingw-w64-headers/include/amstream.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/amstream.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/amstream.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/amvideo.h b/mingw-w64-headers/include/amvideo.h
index 0d971c9..5ae6f4b 100644
--- a/mingw-w64-headers/include/amvideo.h
+++ b/mingw-w64-headers/include/amvideo.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/amvideo.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/amvideo.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/asyncinfo.h b/mingw-w64-headers/include/asyncinfo.h
index beb2f18..8ef3eab 100644
--- a/mingw-w64-headers/include/asyncinfo.h
+++ b/mingw-w64-headers/include/asyncinfo.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/asyncinfo.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/asyncinfo.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/audioclient.h b/mingw-w64-headers/include/audioclient.h
index b2f606b..0d969f2 100644
--- a/mingw-w64-headers/include/audioclient.h
+++ b/mingw-w64-headers/include/audioclient.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/audioclient.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/audioclient.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/audioendpoints.h b/mingw-w64-headers/include/audioendpoints.h
index 50795d5..309acc1 100644
--- a/mingw-w64-headers/include/audioendpoints.h
+++ b/mingw-w64-headers/include/audioendpoints.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/audioendpoints.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/audioendpoints.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/audiopolicy.h b/mingw-w64-headers/include/audiopolicy.h
index 3c1e12e..2c726b1 100644
--- a/mingw-w64-headers/include/audiopolicy.h
+++ b/mingw-w64-headers/include/audiopolicy.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/audiopolicy.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/audiopolicy.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/austream.h b/mingw-w64-headers/include/austream.h
index f02a87b..931696a 100644
--- a/mingw-w64-headers/include/austream.h
+++ b/mingw-w64-headers/include/austream.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/austream.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/austream.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/bdaiface.h b/mingw-w64-headers/include/bdaiface.h
index 10b52b3..339998a 100644
--- a/mingw-w64-headers/include/bdaiface.h
+++ b/mingw-w64-headers/include/bdaiface.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/bdaiface.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/bdaiface.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/bits.h b/mingw-w64-headers/include/bits.h
index 15612fe..d66c6a8 100644
--- a/mingw-w64-headers/include/bits.h
+++ b/mingw-w64-headers/include/bits.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/bits.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/bits.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/bits1_5.h b/mingw-w64-headers/include/bits1_5.h
index 8df8faf..361efda 100644
--- a/mingw-w64-headers/include/bits1_5.h
+++ b/mingw-w64-headers/include/bits1_5.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/bits1_5.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/bits1_5.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/bits2_0.h b/mingw-w64-headers/include/bits2_0.h
index 84b6786..91d39e5 100644
--- a/mingw-w64-headers/include/bits2_0.h
+++ b/mingw-w64-headers/include/bits2_0.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/bits2_0.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/bits2_0.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/bits2_5.h b/mingw-w64-headers/include/bits2_5.h
index f35c989..721f9f2 100644
--- a/mingw-w64-headers/include/bits2_5.h
+++ b/mingw-w64-headers/include/bits2_5.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/bits2_5.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/bits2_5.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/bits3_0.h b/mingw-w64-headers/include/bits3_0.h
index 2c2eb68..daec778 100644
--- a/mingw-w64-headers/include/bits3_0.h
+++ b/mingw-w64-headers/include/bits3_0.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/bits3_0.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/bits3_0.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/bits5_0.h b/mingw-w64-headers/include/bits5_0.h
index 4d61ba4..8c5bd99 100644
--- a/mingw-w64-headers/include/bits5_0.h
+++ b/mingw-w64-headers/include/bits5_0.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/bits5_0.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/bits5_0.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/comadmin.h b/mingw-w64-headers/include/comadmin.h
index 65c20f1..43f75ea 100644
--- a/mingw-w64-headers/include/comadmin.h
+++ b/mingw-w64-headers/include/comadmin.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/comadmin.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/comadmin.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/comcat.h b/mingw-w64-headers/include/comcat.h
index 1a89b92..2b2f915 100644
--- a/mingw-w64-headers/include/comcat.h
+++ b/mingw-w64-headers/include/comcat.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/comcat.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/comcat.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/commoncontrols.h b/mingw-w64-headers/include/commoncontrols.h
index ffaf2f9..afa221c 100644
--- a/mingw-w64-headers/include/commoncontrols.h
+++ b/mingw-w64-headers/include/commoncontrols.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/commoncontrols.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/commoncontrols.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/control.h b/mingw-w64-headers/include/control.h
index 9e8bd7e..7588425 100644
--- a/mingw-w64-headers/include/control.h
+++ b/mingw-w64-headers/include/control.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/control.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/control.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/credentialprovider.h b/mingw-w64-headers/include/credentialprovider.h
index e02431f..ebeeba1 100644
--- a/mingw-w64-headers/include/credentialprovider.h
+++ b/mingw-w64-headers/include/credentialprovider.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/credentialprovider.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/credentialprovider.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/ctfutb.h b/mingw-w64-headers/include/ctfutb.h
index 743ad7a..455ef5f 100644
--- a/mingw-w64-headers/include/ctfutb.h
+++ b/mingw-w64-headers/include/ctfutb.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/ctfutb.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/ctfutb.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/ctxtcall.h b/mingw-w64-headers/include/ctxtcall.h
index fba4585..0c16d6b 100644
--- a/mingw-w64-headers/include/ctxtcall.h
+++ b/mingw-w64-headers/include/ctxtcall.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/ctxtcall.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/ctxtcall.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d10.h b/mingw-w64-headers/include/d3d10.h
index 9cf565a..1a91a8c 100644
--- a/mingw-w64-headers/include/d3d10.h
+++ b/mingw-w64-headers/include/d3d10.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/d3d10.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/d3d10.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d10_1.h b/mingw-w64-headers/include/d3d10_1.h
index 7eabad0..703ba86 100644
--- a/mingw-w64-headers/include/d3d10_1.h
+++ b/mingw-w64-headers/include/d3d10_1.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/d3d10_1.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/d3d10_1.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d10effect.h b/mingw-w64-headers/include/d3d10effect.h
index f9dce84..a521168 100644
--- a/mingw-w64-headers/include/d3d10effect.h
+++ b/mingw-w64-headers/include/d3d10effect.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/d3d10effect.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/d3d10effect.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d10sdklayers.h b/mingw-w64-headers/include/d3d10sdklayers.h
index 54d3ef1..52edce4 100644
--- a/mingw-w64-headers/include/d3d10sdklayers.h
+++ b/mingw-w64-headers/include/d3d10sdklayers.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/d3d10sdklayers.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/d3d10sdklayers.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d10shader.h b/mingw-w64-headers/include/d3d10shader.h
index fce3781..85f53e0 100644
--- a/mingw-w64-headers/include/d3d10shader.h
+++ b/mingw-w64-headers/include/d3d10shader.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/d3d10shader.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/d3d10shader.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d11.h b/mingw-w64-headers/include/d3d11.h
index 2a144de..b400056 100644
--- a/mingw-w64-headers/include/d3d11.h
+++ b/mingw-w64-headers/include/d3d11.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/d3d11.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/d3d11.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d11_1.h b/mingw-w64-headers/include/d3d11_1.h
index 5e3a5d4..e6ac5c5 100644
--- a/mingw-w64-headers/include/d3d11_1.h
+++ b/mingw-w64-headers/include/d3d11_1.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/d3d11_1.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/d3d11_1.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d11_2.h b/mingw-w64-headers/include/d3d11_2.h
index 6f24da9..fb93475 100644
--- a/mingw-w64-headers/include/d3d11_2.h
+++ b/mingw-w64-headers/include/d3d11_2.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/d3d11_2.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/d3d11_2.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d11_3.h b/mingw-w64-headers/include/d3d11_3.h
index 5bf35ea..a7501ef 100644
--- a/mingw-w64-headers/include/d3d11_3.h
+++ b/mingw-w64-headers/include/d3d11_3.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/d3d11_3.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/d3d11_3.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d11_4.h b/mingw-w64-headers/include/d3d11_4.h
index 828fc3e..16c4381 100644
--- a/mingw-w64-headers/include/d3d11_4.h
+++ b/mingw-w64-headers/include/d3d11_4.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/d3d11_4.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/d3d11_4.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d11on12.h b/mingw-w64-headers/include/d3d11on12.h
index 64a5a57..49d4b97 100644
--- a/mingw-w64-headers/include/d3d11on12.h
+++ b/mingw-w64-headers/include/d3d11on12.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/d3d11on12.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/d3d11on12.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d11sdklayers.h b/mingw-w64-headers/include/d3d11sdklayers.h
index f5cbecb..f0baeda 100644
--- a/mingw-w64-headers/include/d3d11sdklayers.h
+++ b/mingw-w64-headers/include/d3d11sdklayers.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/d3d11sdklayers.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/d3d11sdklayers.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d12.h b/mingw-w64-headers/include/d3d12.h
index 33e27b3..0dbda83 100644
--- a/mingw-w64-headers/include/d3d12.h
+++ b/mingw-w64-headers/include/d3d12.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/d3d12.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/d3d12.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d12sdklayers.h b/mingw-w64-headers/include/d3d12sdklayers.h
index 48fc081..cf07bcb 100644
--- a/mingw-w64-headers/include/d3d12sdklayers.h
+++ b/mingw-w64-headers/include/d3d12sdklayers.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/d3d12sdklayers.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/d3d12sdklayers.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d12shader.h b/mingw-w64-headers/include/d3d12shader.h
index b462406..4a4f341 100644
--- a/mingw-w64-headers/include/d3d12shader.h
+++ b/mingw-w64-headers/include/d3d12shader.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/d3d12shader.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/d3d12shader.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d12video.h b/mingw-w64-headers/include/d3d12video.h
index 5221800..a0f24d4 100644
--- a/mingw-w64-headers/include/d3d12video.h
+++ b/mingw-w64-headers/include/d3d12video.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/d3d12video.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/d3d12video.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3dcommon.h b/mingw-w64-headers/include/d3dcommon.h
index 26cd319..20895e4 100644
--- a/mingw-w64-headers/include/d3dcommon.h
+++ b/mingw-w64-headers/include/d3dcommon.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/d3dcommon.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/d3dcommon.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dbgprop.h b/mingw-w64-headers/include/dbgprop.h
index a709fa1..630c549 100644
--- a/mingw-w64-headers/include/dbgprop.h
+++ b/mingw-w64-headers/include/dbgprop.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/dbgprop.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/dbgprop.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dcommon.h b/mingw-w64-headers/include/dcommon.h
index cb8c322..42daeb5 100644
--- a/mingw-w64-headers/include/dcommon.h
+++ b/mingw-w64-headers/include/dcommon.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/dcommon.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/dcommon.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dcompanimation.h b/mingw-w64-headers/include/dcompanimation.h
index b5e6534..c969e4b 100644
--- a/mingw-w64-headers/include/dcompanimation.h
+++ b/mingw-w64-headers/include/dcompanimation.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/dcompanimation.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/dcompanimation.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/ddstream.h b/mingw-w64-headers/include/ddstream.h
index 0357354..e8fe228 100644
--- a/mingw-w64-headers/include/ddstream.h
+++ b/mingw-w64-headers/include/ddstream.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/ddstream.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/ddstream.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/devicetopology.h b/mingw-w64-headers/include/devicetopology.h
index 65be5e0..b6ad3e9 100644
--- a/mingw-w64-headers/include/devicetopology.h
+++ b/mingw-w64-headers/include/devicetopology.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/devicetopology.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/devicetopology.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dimm.h b/mingw-w64-headers/include/dimm.h
index fe72a4a..54b9839 100644
--- a/mingw-w64-headers/include/dimm.h
+++ b/mingw-w64-headers/include/dimm.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/dimm.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/dimm.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dinputd.h b/mingw-w64-headers/include/dinputd.h
index 1128f03..a4bc6ef 100644
--- a/mingw-w64-headers/include/dinputd.h
+++ b/mingw-w64-headers/include/dinputd.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/dinputd.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/dinputd.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/directmanipulation.h b/mingw-w64-headers/include/directmanipulation.h
index f5bb110..9ed9b95 100644
--- a/mingw-w64-headers/include/directmanipulation.h
+++ b/mingw-w64-headers/include/directmanipulation.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/directmanipulation.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/directmanipulation.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dispex.h b/mingw-w64-headers/include/dispex.h
index a0a8ae2..e484bf4 100644
--- a/mingw-w64-headers/include/dispex.h
+++ b/mingw-w64-headers/include/dispex.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/dispex.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/dispex.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dmodshow.h b/mingw-w64-headers/include/dmodshow.h
index dc1e99e..08b7acb 100644
--- a/mingw-w64-headers/include/dmodshow.h
+++ b/mingw-w64-headers/include/dmodshow.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/dmodshow.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/dmodshow.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/docobj.h b/mingw-w64-headers/include/docobj.h
index 5082ab1..0a5dfaa 100644
--- a/mingw-w64-headers/include/docobj.h
+++ b/mingw-w64-headers/include/docobj.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/docobj.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/docobj.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/docobjectservice.h b/mingw-w64-headers/include/docobjectservice.h
index eb21062..630d2fd 100644
--- a/mingw-w64-headers/include/docobjectservice.h
+++ b/mingw-w64-headers/include/docobjectservice.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/docobjectservice.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/docobjectservice.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/documenttarget.h b/mingw-w64-headers/include/documenttarget.h
index b422f83..60aba0a 100644
--- a/mingw-w64-headers/include/documenttarget.h
+++ b/mingw-w64-headers/include/documenttarget.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/documenttarget.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/documenttarget.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/downloadmgr.h b/mingw-w64-headers/include/downloadmgr.h
index dd72919..abe3120 100644
--- a/mingw-w64-headers/include/downloadmgr.h
+++ b/mingw-w64-headers/include/downloadmgr.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/downloadmgr.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/downloadmgr.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/drmexternals.h b/mingw-w64-headers/include/drmexternals.h
index 3984d26..d72d86f 100644
--- a/mingw-w64-headers/include/drmexternals.h
+++ b/mingw-w64-headers/include/drmexternals.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/drmexternals.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/drmexternals.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dvdif.h b/mingw-w64-headers/include/dvdif.h
index 868e4ff..8fb8bcf 100644
--- a/mingw-w64-headers/include/dvdif.h
+++ b/mingw-w64-headers/include/dvdif.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/dvdif.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/dvdif.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dwrite.h b/mingw-w64-headers/include/dwrite.h
index d6dd438..7ec8a95 100644
--- a/mingw-w64-headers/include/dwrite.h
+++ b/mingw-w64-headers/include/dwrite.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/dwrite.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/dwrite.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dwrite_1.h b/mingw-w64-headers/include/dwrite_1.h
index ba7f64e..2edc91d 100644
--- a/mingw-w64-headers/include/dwrite_1.h
+++ b/mingw-w64-headers/include/dwrite_1.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/dwrite_1.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/dwrite_1.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dwrite_2.h b/mingw-w64-headers/include/dwrite_2.h
index 14cfd12..f3eae6b 100644
--- a/mingw-w64-headers/include/dwrite_2.h
+++ b/mingw-w64-headers/include/dwrite_2.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/dwrite_2.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/dwrite_2.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dwrite_3.h b/mingw-w64-headers/include/dwrite_3.h
index ce9dab5..3af3022 100644
--- a/mingw-w64-headers/include/dwrite_3.h
+++ b/mingw-w64-headers/include/dwrite_3.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/dwrite_3.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/dwrite_3.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgi.h b/mingw-w64-headers/include/dxgi.h
index 9f3436e..e28582b 100644
--- a/mingw-w64-headers/include/dxgi.h
+++ b/mingw-w64-headers/include/dxgi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/dxgi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/dxgi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgi1_2.h b/mingw-w64-headers/include/dxgi1_2.h
index 9b8eeda..5dcb006 100644
--- a/mingw-w64-headers/include/dxgi1_2.h
+++ b/mingw-w64-headers/include/dxgi1_2.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/dxgi1_2.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/dxgi1_2.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgi1_3.h b/mingw-w64-headers/include/dxgi1_3.h
index a0db076..bcb8d3f 100644
--- a/mingw-w64-headers/include/dxgi1_3.h
+++ b/mingw-w64-headers/include/dxgi1_3.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/dxgi1_3.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/dxgi1_3.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgi1_4.h b/mingw-w64-headers/include/dxgi1_4.h
index 3182d29..03b3508 100644
--- a/mingw-w64-headers/include/dxgi1_4.h
+++ b/mingw-w64-headers/include/dxgi1_4.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/dxgi1_4.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/dxgi1_4.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgi1_5.h b/mingw-w64-headers/include/dxgi1_5.h
index 9f8320c..d20c498 100644
--- a/mingw-w64-headers/include/dxgi1_5.h
+++ b/mingw-w64-headers/include/dxgi1_5.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/dxgi1_5.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/dxgi1_5.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgi1_6.h b/mingw-w64-headers/include/dxgi1_6.h
index ef8f655..c1785fb 100644
--- a/mingw-w64-headers/include/dxgi1_6.h
+++ b/mingw-w64-headers/include/dxgi1_6.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/dxgi1_6.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/dxgi1_6.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgicommon.h b/mingw-w64-headers/include/dxgicommon.h
index ec8d163..af34dc2 100644
--- a/mingw-w64-headers/include/dxgicommon.h
+++ b/mingw-w64-headers/include/dxgicommon.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/dxgicommon.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/dxgicommon.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgidebug.h b/mingw-w64-headers/include/dxgidebug.h
index 282d94f..1416461 100644
--- a/mingw-w64-headers/include/dxgidebug.h
+++ b/mingw-w64-headers/include/dxgidebug.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/dxgidebug.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/dxgidebug.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgiformat.h b/mingw-w64-headers/include/dxgiformat.h
index 1b6fc97..98d9c86 100644
--- a/mingw-w64-headers/include/dxgiformat.h
+++ b/mingw-w64-headers/include/dxgiformat.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/dxgiformat.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/dxgiformat.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgitype.h b/mingw-w64-headers/include/dxgitype.h
index 385fd86..f609cb7 100644
--- a/mingw-w64-headers/include/dxgitype.h
+++ b/mingw-w64-headers/include/dxgitype.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/dxgitype.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/dxgitype.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxva2api.h b/mingw-w64-headers/include/dxva2api.h
index a672521..21f5ef1 100644
--- a/mingw-w64-headers/include/dxva2api.h
+++ b/mingw-w64-headers/include/dxva2api.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/dxva2api.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/dxva2api.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxvahd.h b/mingw-w64-headers/include/dxvahd.h
index 902e995..0a953bf 100644
--- a/mingw-w64-headers/include/dxvahd.h
+++ b/mingw-w64-headers/include/dxvahd.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/dxvahd.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/dxvahd.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/endpointvolume.h b/mingw-w64-headers/include/endpointvolume.h
index 5b5b9d5..b54adc3 100644
--- a/mingw-w64-headers/include/endpointvolume.h
+++ b/mingw-w64-headers/include/endpointvolume.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/endpointvolume.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/endpointvolume.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/eventtoken.h b/mingw-w64-headers/include/eventtoken.h
index 9128b33..607335b 100644
--- a/mingw-w64-headers/include/eventtoken.h
+++ b/mingw-w64-headers/include/eventtoken.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/eventtoken.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/eventtoken.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/evr.h b/mingw-w64-headers/include/evr.h
index 3d5e763..27ca3e2 100644
--- a/mingw-w64-headers/include/evr.h
+++ b/mingw-w64-headers/include/evr.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/evr.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/evr.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/evr9.h b/mingw-w64-headers/include/evr9.h
index fa1da65..13088c9 100644
--- a/mingw-w64-headers/include/evr9.h
+++ b/mingw-w64-headers/include/evr9.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/evr9.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/evr9.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/exdisp.h b/mingw-w64-headers/include/exdisp.h
index 046857a..300f410 100644
--- a/mingw-w64-headers/include/exdisp.h
+++ b/mingw-w64-headers/include/exdisp.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/exdisp.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/exdisp.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/filter.h b/mingw-w64-headers/include/filter.h
index 9195cc6..ec26bdf 100644
--- a/mingw-w64-headers/include/filter.h
+++ b/mingw-w64-headers/include/filter.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/filter.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/filter.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/fsrm.h b/mingw-w64-headers/include/fsrm.h
index c967d53..0198b08 100644
--- a/mingw-w64-headers/include/fsrm.h
+++ b/mingw-w64-headers/include/fsrm.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/fsrm.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/fsrm.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/fsrmenums.h b/mingw-w64-headers/include/fsrmenums.h
index cc3ad5d..d5dcc2e 100644
--- a/mingw-w64-headers/include/fsrmenums.h
+++ b/mingw-w64-headers/include/fsrmenums.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/fsrmenums.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/fsrmenums.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/fsrmquota.h b/mingw-w64-headers/include/fsrmquota.h
index 6f2d13a..d453e5f 100644
--- a/mingw-w64-headers/include/fsrmquota.h
+++ b/mingw-w64-headers/include/fsrmquota.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/fsrmquota.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/fsrmquota.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/fsrmreports.h b/mingw-w64-headers/include/fsrmreports.h
index df6aa70..b0aeeb5 100644
--- a/mingw-w64-headers/include/fsrmreports.h
+++ b/mingw-w64-headers/include/fsrmreports.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/fsrmreports.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/fsrmreports.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/fsrmscreen.h b/mingw-w64-headers/include/fsrmscreen.h
index 4741c15..c5b108a 100644
--- a/mingw-w64-headers/include/fsrmscreen.h
+++ b/mingw-w64-headers/include/fsrmscreen.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/fsrmscreen.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/fsrmscreen.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/fusion.h b/mingw-w64-headers/include/fusion.h
index 8047328..b627e1e 100644
--- a/mingw-w64-headers/include/fusion.h
+++ b/mingw-w64-headers/include/fusion.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/fusion.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/fusion.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/fwptypes.h b/mingw-w64-headers/include/fwptypes.h
index 8af2da5..3502d98 100644
--- a/mingw-w64-headers/include/fwptypes.h
+++ b/mingw-w64-headers/include/fwptypes.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/fwptypes.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/fwptypes.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/hstring.h b/mingw-w64-headers/include/hstring.h
index 7cef878..b45063f 100644
--- a/mingw-w64-headers/include/hstring.h
+++ b/mingw-w64-headers/include/hstring.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/hstring.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/hstring.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/httprequest.h b/mingw-w64-headers/include/httprequest.h
index a7f53ad..273797b 100644
--- a/mingw-w64-headers/include/httprequest.h
+++ b/mingw-w64-headers/include/httprequest.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/httprequest.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/httprequest.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/icftypes.h b/mingw-w64-headers/include/icftypes.h
index 7efcd3a..3c4d2c8 100644
--- a/mingw-w64-headers/include/icftypes.h
+++ b/mingw-w64-headers/include/icftypes.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/icftypes.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/icftypes.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/icodecapi.h b/mingw-w64-headers/include/icodecapi.h
index d7958b4..0263eba 100644
--- a/mingw-w64-headers/include/icodecapi.h
+++ b/mingw-w64-headers/include/icodecapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/icodecapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/icodecapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/iketypes.h b/mingw-w64-headers/include/iketypes.h
index 054e167..183c2fe 100644
--- a/mingw-w64-headers/include/iketypes.h
+++ b/mingw-w64-headers/include/iketypes.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/iketypes.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/iketypes.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/inputpaneinterop.h b/mingw-w64-headers/include/inputpaneinterop.h
index 98b25b1..148b6cb 100644
--- a/mingw-w64-headers/include/inputpaneinterop.h
+++ b/mingw-w64-headers/include/inputpaneinterop.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/inputpaneinterop.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/inputpaneinterop.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/inputscope.h b/mingw-w64-headers/include/inputscope.h
index 08b37fe..19dd71a 100644
--- a/mingw-w64-headers/include/inputscope.h
+++ b/mingw-w64-headers/include/inputscope.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/inputscope.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/inputscope.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/inspectable.h b/mingw-w64-headers/include/inspectable.h
index f24d0a3..67655dc 100644
--- a/mingw-w64-headers/include/inspectable.h
+++ b/mingw-w64-headers/include/inspectable.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/inspectable.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/inspectable.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/ivectorchangedeventargs.h b/mingw-w64-headers/include/ivectorchangedeventargs.h
index 96d4690..e7e63b4 100644
--- a/mingw-w64-headers/include/ivectorchangedeventargs.h
+++ b/mingw-w64-headers/include/ivectorchangedeventargs.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/ivectorchangedeventargs.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/ivectorchangedeventargs.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/iwscapi.h b/mingw-w64-headers/include/iwscapi.h
index 8ea102c..4c81564 100644
--- a/mingw-w64-headers/include/iwscapi.h
+++ b/mingw-w64-headers/include/iwscapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/iwscapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/iwscapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/locationapi.h b/mingw-w64-headers/include/locationapi.h
index c5eeb21..a891691 100644
--- a/mingw-w64-headers/include/locationapi.h
+++ b/mingw-w64-headers/include/locationapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/locationapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/locationapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mediaobj.h b/mingw-w64-headers/include/mediaobj.h
index 91a31c6..3b66679 100644
--- a/mingw-w64-headers/include/mediaobj.h
+++ b/mingw-w64-headers/include/mediaobj.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/mediaobj.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/mediaobj.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/medparam.h b/mingw-w64-headers/include/medparam.h
index 7dfc9ac..556e7f4 100644
--- a/mingw-w64-headers/include/medparam.h
+++ b/mingw-w64-headers/include/medparam.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/medparam.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/medparam.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mfcaptureengine.h b/mingw-w64-headers/include/mfcaptureengine.h
index 3595020..5ca3980 100644
--- a/mingw-w64-headers/include/mfcaptureengine.h
+++ b/mingw-w64-headers/include/mfcaptureengine.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/mfcaptureengine.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/mfcaptureengine.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mfd3d12.h b/mingw-w64-headers/include/mfd3d12.h
index 200a224..526d08b 100644
--- a/mingw-w64-headers/include/mfd3d12.h
+++ b/mingw-w64-headers/include/mfd3d12.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/mfd3d12.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/mfd3d12.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mfidl.h b/mingw-w64-headers/include/mfidl.h
index a72887e..947051b 100644
--- a/mingw-w64-headers/include/mfidl.h
+++ b/mingw-w64-headers/include/mfidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/mfidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/mfidl.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mfmediacapture.h b/mingw-w64-headers/include/mfmediacapture.h
index 8e9d047..41d2635 100644
--- a/mingw-w64-headers/include/mfmediacapture.h
+++ b/mingw-w64-headers/include/mfmediacapture.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/mfmediacapture.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/mfmediacapture.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mfmediaengine.h b/mingw-w64-headers/include/mfmediaengine.h
index 24bfc93..9863e52 100644
--- a/mingw-w64-headers/include/mfmediaengine.h
+++ b/mingw-w64-headers/include/mfmediaengine.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/mfmediaengine.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/mfmediaengine.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mfobjects.h b/mingw-w64-headers/include/mfobjects.h
index 10d73d3..60594ac 100644
--- a/mingw-w64-headers/include/mfobjects.h
+++ b/mingw-w64-headers/include/mfobjects.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/mfobjects.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/mfobjects.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mfplay.h b/mingw-w64-headers/include/mfplay.h
index 3b2fb2c..d41de11 100644
--- a/mingw-w64-headers/include/mfplay.h
+++ b/mingw-w64-headers/include/mfplay.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/mfplay.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/mfplay.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mfreadwrite.h b/mingw-w64-headers/include/mfreadwrite.h
index 98ac225..9a51d38 100644
--- a/mingw-w64-headers/include/mfreadwrite.h
+++ b/mingw-w64-headers/include/mfreadwrite.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/mfreadwrite.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/mfreadwrite.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mftransform.h b/mingw-w64-headers/include/mftransform.h
index 25e4f41..3d55a12 100644
--- a/mingw-w64-headers/include/mftransform.h
+++ b/mingw-w64-headers/include/mftransform.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/mftransform.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/mftransform.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mmdeviceapi.h b/mingw-w64-headers/include/mmdeviceapi.h
index 5304350..d4a9fe8 100644
--- a/mingw-w64-headers/include/mmdeviceapi.h
+++ b/mingw-w64-headers/include/mmdeviceapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/mmdeviceapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/mmdeviceapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mmstream.h b/mingw-w64-headers/include/mmstream.h
index bb1f1f6..12b9767 100644
--- a/mingw-w64-headers/include/mmstream.h
+++ b/mingw-w64-headers/include/mmstream.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/mmstream.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/mmstream.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mpeg2data.h b/mingw-w64-headers/include/mpeg2data.h
index 12e4f8b..623a210 100644
--- a/mingw-w64-headers/include/mpeg2data.h
+++ b/mingw-w64-headers/include/mpeg2data.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/mpeg2data.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/mpeg2data.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mpeg2structs.h b/mingw-w64-headers/include/mpeg2structs.h
index 733bf89..729c477 100644
--- a/mingw-w64-headers/include/mpeg2structs.h
+++ b/mingw-w64-headers/include/mpeg2structs.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/mpeg2structs.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/mpeg2structs.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mscoree.h b/mingw-w64-headers/include/mscoree.h
index 312e4ce..77b721d 100644
--- a/mingw-w64-headers/include/mscoree.h
+++ b/mingw-w64-headers/include/mscoree.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/mscoree.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/mscoree.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/msctf.h b/mingw-w64-headers/include/msctf.h
index 47600c2..52aa65a 100644
--- a/mingw-w64-headers/include/msctf.h
+++ b/mingw-w64-headers/include/msctf.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/msctf.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/msctf.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mshtmhst.h b/mingw-w64-headers/include/mshtmhst.h
index d6b840a..eb14fef 100644
--- a/mingw-w64-headers/include/mshtmhst.h
+++ b/mingw-w64-headers/include/mshtmhst.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/mshtmhst.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/mshtmhst.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mshtml.h b/mingw-w64-headers/include/mshtml.h
index 9fc3918..e378824 100644
--- a/mingw-w64-headers/include/mshtml.h
+++ b/mingw-w64-headers/include/mshtml.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/mshtml.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/mshtml.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/msinkaut.h b/mingw-w64-headers/include/msinkaut.h
index 6718591..3608c04 100644
--- a/mingw-w64-headers/include/msinkaut.h
+++ b/mingw-w64-headers/include/msinkaut.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/msinkaut.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/msinkaut.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/msinkaut_i.c b/mingw-w64-headers/include/msinkaut_i.c
index 3759557..ce850ce 100644
--- a/mingw-w64-headers/include/msinkaut_i.c
+++ b/mingw-w64-headers/include/msinkaut_i.c
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from msinkaut.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from msinkaut.idl - Do not edit ***/
 
 #include <rpc.h>
 #include <rpcndr.h>
diff --git a/mingw-w64-headers/include/msopc.h b/mingw-w64-headers/include/msopc.h
index 3d50404..56a6a79 100644
--- a/mingw-w64-headers/include/msopc.h
+++ b/mingw-w64-headers/include/msopc.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/msopc.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/msopc.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/msxml.h b/mingw-w64-headers/include/msxml.h
index 9dede4a..31b2f6d 100644
--- a/mingw-w64-headers/include/msxml.h
+++ b/mingw-w64-headers/include/msxml.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/msxml.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/msxml.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/msxml2.h b/mingw-w64-headers/include/msxml2.h
index f943cbb..bede6f7 100644
--- a/mingw-w64-headers/include/msxml2.h
+++ b/mingw-w64-headers/include/msxml2.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/msxml2.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/msxml2.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/msxml6.h b/mingw-w64-headers/include/msxml6.h
index 39b7fd0..39aa23a 100644
--- a/mingw-w64-headers/include/msxml6.h
+++ b/mingw-w64-headers/include/msxml6.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/msxml6.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/msxml6.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/napcertrelyingparty.h b/mingw-w64-headers/include/napcertrelyingparty.h
index 1298050..69064fa 100644
--- a/mingw-w64-headers/include/napcertrelyingparty.h
+++ b/mingw-w64-headers/include/napcertrelyingparty.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/napcertrelyingparty.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/napcertrelyingparty.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/napcommon.h b/mingw-w64-headers/include/napcommon.h
index 65d7f9b..c7d50bf 100644
--- a/mingw-w64-headers/include/napcommon.h
+++ b/mingw-w64-headers/include/napcommon.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/napcommon.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/napcommon.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/napenforcementclient.h b/mingw-w64-headers/include/napenforcementclient.h
index 3ea6ea2..a74ea46 100644
--- a/mingw-w64-headers/include/napenforcementclient.h
+++ b/mingw-w64-headers/include/napenforcementclient.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/napenforcementclient.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/napenforcementclient.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/napmanagement.h b/mingw-w64-headers/include/napmanagement.h
index a45ec6f..a1377c3 100644
--- a/mingw-w64-headers/include/napmanagement.h
+++ b/mingw-w64-headers/include/napmanagement.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/napmanagement.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/napmanagement.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/napprotocol.h b/mingw-w64-headers/include/napprotocol.h
index 660bb70..57e46dd 100644
--- a/mingw-w64-headers/include/napprotocol.h
+++ b/mingw-w64-headers/include/napprotocol.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/napprotocol.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/napprotocol.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/napservermanagement.h b/mingw-w64-headers/include/napservermanagement.h
index b981728..e3a6c11 100644
--- a/mingw-w64-headers/include/napservermanagement.h
+++ b/mingw-w64-headers/include/napservermanagement.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/napservermanagement.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/napservermanagement.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/napsystemhealthagent.h b/mingw-w64-headers/include/napsystemhealthagent.h
index 1a592eb..71b5100 100644
--- a/mingw-w64-headers/include/napsystemhealthagent.h
+++ b/mingw-w64-headers/include/napsystemhealthagent.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/napsystemhealthagent.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/napsystemhealthagent.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/napsystemhealthvalidator.h b/mingw-w64-headers/include/napsystemhealthvalidator.h
index 006769e..d29534c 100644
--- a/mingw-w64-headers/include/napsystemhealthvalidator.h
+++ b/mingw-w64-headers/include/napsystemhealthvalidator.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/napsystemhealthvalidator.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/napsystemhealthvalidator.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/naptypes.h b/mingw-w64-headers/include/naptypes.h
index 324cf7d..bc47d0f 100644
--- a/mingw-w64-headers/include/naptypes.h
+++ b/mingw-w64-headers/include/naptypes.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/naptypes.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/naptypes.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/netcfgn.h b/mingw-w64-headers/include/netcfgn.h
index acad72f..26885c5 100644
--- a/mingw-w64-headers/include/netcfgn.h
+++ b/mingw-w64-headers/include/netcfgn.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/netcfgn.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/netcfgn.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/netcfgx.h b/mingw-w64-headers/include/netcfgx.h
index 0522034..e9b1368 100644
--- a/mingw-w64-headers/include/netcfgx.h
+++ b/mingw-w64-headers/include/netcfgx.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/netcfgx.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/netcfgx.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/netfw.h b/mingw-w64-headers/include/netfw.h
index fdb3efd..6bb4067 100644
--- a/mingw-w64-headers/include/netfw.h
+++ b/mingw-w64-headers/include/netfw.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/netfw.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/netfw.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/netlistmgr.h b/mingw-w64-headers/include/netlistmgr.h
index 03877bc..0183537 100644
--- a/mingw-w64-headers/include/netlistmgr.h
+++ b/mingw-w64-headers/include/netlistmgr.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/netlistmgr.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/netlistmgr.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/oaidl.h b/mingw-w64-headers/include/oaidl.h
index 918f565..408633f 100644
--- a/mingw-w64-headers/include/oaidl.h
+++ b/mingw-w64-headers/include/oaidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/oaidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/oaidl.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/objectarray.h b/mingw-w64-headers/include/objectarray.h
index 4c358bd..7afdfa6 100644
--- a/mingw-w64-headers/include/objectarray.h
+++ b/mingw-w64-headers/include/objectarray.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/objectarray.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/objectarray.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/objidl.h b/mingw-w64-headers/include/objidl.h
index 243a0dd..1024cbf 100644
--- a/mingw-w64-headers/include/objidl.h
+++ b/mingw-w64-headers/include/objidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/objidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/objidl.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/objidlbase.h b/mingw-w64-headers/include/objidlbase.h
index 8c1d8f5..0345b8b 100644
--- a/mingw-w64-headers/include/objidlbase.h
+++ b/mingw-w64-headers/include/objidlbase.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/objidlbase.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/objidlbase.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/ocidl.h b/mingw-w64-headers/include/ocidl.h
index 586b1f1..6c0861d 100644
--- a/mingw-w64-headers/include/ocidl.h
+++ b/mingw-w64-headers/include/ocidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/ocidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/ocidl.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/oleacc.h b/mingw-w64-headers/include/oleacc.h
index 173da92..97eddd8 100644
--- a/mingw-w64-headers/include/oleacc.h
+++ b/mingw-w64-headers/include/oleacc.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/oleacc.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/oleacc.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/oleidl.h b/mingw-w64-headers/include/oleidl.h
index a897ffe..abbab74 100644
--- a/mingw-w64-headers/include/oleidl.h
+++ b/mingw-w64-headers/include/oleidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/oleidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/oleidl.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/optary.h b/mingw-w64-headers/include/optary.h
index 208489e..368b9cc 100644
--- a/mingw-w64-headers/include/optary.h
+++ b/mingw-w64-headers/include/optary.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/optary.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/optary.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/portabledeviceapi.h b/mingw-w64-headers/include/portabledeviceapi.h
index 7c394bc..d8b8034 100644
--- a/mingw-w64-headers/include/portabledeviceapi.h
+++ b/mingw-w64-headers/include/portabledeviceapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/portabledeviceapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/portabledeviceapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/portabledevicetypes.h b/mingw-w64-headers/include/portabledevicetypes.h
index 0372e41..2255458 100644
--- a/mingw-w64-headers/include/portabledevicetypes.h
+++ b/mingw-w64-headers/include/portabledevicetypes.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/portabledevicetypes.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/portabledevicetypes.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/proofofpossessioncookieinfo.h b/mingw-w64-headers/include/proofofpossessioncookieinfo.h
index 49d5a3e..76e1864 100644
--- a/mingw-w64-headers/include/proofofpossessioncookieinfo.h
+++ b/mingw-w64-headers/include/proofofpossessioncookieinfo.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/proofofpossessioncookieinfo.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/proofofpossessioncookieinfo.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/propidl.h b/mingw-w64-headers/include/propidl.h
index 39d32db..f63586c 100644
--- a/mingw-w64-headers/include/propidl.h
+++ b/mingw-w64-headers/include/propidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/propidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/propidl.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/propsys.h b/mingw-w64-headers/include/propsys.h
index 0afe6f3..1a7b735 100644
--- a/mingw-w64-headers/include/propsys.h
+++ b/mingw-w64-headers/include/propsys.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/propsys.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/propsys.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/qedit.h b/mingw-w64-headers/include/qedit.h
index 5c8af62..9d2b024 100644
--- a/mingw-w64-headers/include/qedit.h
+++ b/mingw-w64-headers/include/qedit.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/qedit.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/qedit.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/qnetwork.h b/mingw-w64-headers/include/qnetwork.h
index cacf524..79fb345 100644
--- a/mingw-w64-headers/include/qnetwork.h
+++ b/mingw-w64-headers/include/qnetwork.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/qnetwork.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/qnetwork.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/rdpencomapi.h b/mingw-w64-headers/include/rdpencomapi.h
index 79023ab..e5a60b9 100644
--- a/mingw-w64-headers/include/rdpencomapi.h
+++ b/mingw-w64-headers/include/rdpencomapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/rdpencomapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/rdpencomapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/regbag.h b/mingw-w64-headers/include/regbag.h
index c7d1270..ea01ac8 100644
--- a/mingw-w64-headers/include/regbag.h
+++ b/mingw-w64-headers/include/regbag.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/regbag.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/regbag.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/relogger.h b/mingw-w64-headers/include/relogger.h
index a1db7ac..cd08949 100644
--- a/mingw-w64-headers/include/relogger.h
+++ b/mingw-w64-headers/include/relogger.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/relogger.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/relogger.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/robuffer.h b/mingw-w64-headers/include/robuffer.h
index 36397f7..4edde35 100644
--- a/mingw-w64-headers/include/robuffer.h
+++ b/mingw-w64-headers/include/robuffer.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/robuffer.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/robuffer.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/rtworkq.h b/mingw-w64-headers/include/rtworkq.h
index 9fd0c9d..6ed6324 100644
--- a/mingw-w64-headers/include/rtworkq.h
+++ b/mingw-w64-headers/include/rtworkq.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/rtworkq.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/rtworkq.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/sapi51.h b/mingw-w64-headers/include/sapi51.h
index 15f2871..2863e2e 100644
--- a/mingw-w64-headers/include/sapi51.h
+++ b/mingw-w64-headers/include/sapi51.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/sapi51.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/sapi51.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/sapi53.h b/mingw-w64-headers/include/sapi53.h
index f990bd2..e0785f2 100644
--- a/mingw-w64-headers/include/sapi53.h
+++ b/mingw-w64-headers/include/sapi53.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/sapi53.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/sapi53.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/sapi54.h b/mingw-w64-headers/include/sapi54.h
index 4cb1291..a6fa0c9 100644
--- a/mingw-w64-headers/include/sapi54.h
+++ b/mingw-w64-headers/include/sapi54.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/sapi54.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/sapi54.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/sensorsapi.h b/mingw-w64-headers/include/sensorsapi.h
index 58a876a..3189e8e 100644
--- a/mingw-w64-headers/include/sensorsapi.h
+++ b/mingw-w64-headers/include/sensorsapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/sensorsapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/sensorsapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/servprov.h b/mingw-w64-headers/include/servprov.h
index f4851dc..ab7846f 100644
--- a/mingw-w64-headers/include/servprov.h
+++ b/mingw-w64-headers/include/servprov.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/servprov.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/servprov.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/shldisp.h b/mingw-w64-headers/include/shldisp.h
index 7cefcd5..244c8a5 100644
--- a/mingw-w64-headers/include/shldisp.h
+++ b/mingw-w64-headers/include/shldisp.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/shldisp.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/shldisp.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/shobjidl.h b/mingw-w64-headers/include/shobjidl.h
index a1de4c4..5d24581 100644
--- a/mingw-w64-headers/include/shobjidl.h
+++ b/mingw-w64-headers/include/shobjidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/shobjidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/shobjidl.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/shtypes.h b/mingw-w64-headers/include/shtypes.h
index 8059a37..f78ebfc 100644
--- a/mingw-w64-headers/include/shtypes.h
+++ b/mingw-w64-headers/include/shtypes.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/shtypes.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/shtypes.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/spatialaudioclient.h b/mingw-w64-headers/include/spatialaudioclient.h
index 97c2eee..aee8f09 100644
--- a/mingw-w64-headers/include/spatialaudioclient.h
+++ b/mingw-w64-headers/include/spatialaudioclient.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/spatialaudioclient.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/spatialaudioclient.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/spellcheck.h b/mingw-w64-headers/include/spellcheck.h
index 468bf8c..5a55d1a 100644
--- a/mingw-w64-headers/include/spellcheck.h
+++ b/mingw-w64-headers/include/spellcheck.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/spellcheck.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/spellcheck.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/strmif.h b/mingw-w64-headers/include/strmif.h
index 0e63082..a8a6690 100644
--- a/mingw-w64-headers/include/strmif.h
+++ b/mingw-w64-headers/include/strmif.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/strmif.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/strmif.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/structuredquerycondition.h b/mingw-w64-headers/include/structuredquerycondition.h
index eeff09e..086062f 100644
--- a/mingw-w64-headers/include/structuredquerycondition.h
+++ b/mingw-w64-headers/include/structuredquerycondition.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/structuredquerycondition.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/structuredquerycondition.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/systemmediatransportcontrolsinterop.h b/mingw-w64-headers/include/systemmediatransportcontrolsinterop.h
index 01591d1..9c59554 100644
--- a/mingw-w64-headers/include/systemmediatransportcontrolsinterop.h
+++ b/mingw-w64-headers/include/systemmediatransportcontrolsinterop.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/systemmediatransportcontrolsinterop.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/systemmediatransportcontrolsinterop.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/taskschd.h b/mingw-w64-headers/include/taskschd.h
index e228698..dbbc24a 100644
--- a/mingw-w64-headers/include/taskschd.h
+++ b/mingw-w64-headers/include/taskschd.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/taskschd.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/taskschd.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/textstor.h b/mingw-w64-headers/include/textstor.h
index faa8818..0d0be26 100644
--- a/mingw-w64-headers/include/textstor.h
+++ b/mingw-w64-headers/include/textstor.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/textstor.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/textstor.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/thumbcache.h b/mingw-w64-headers/include/thumbcache.h
index d7cea05..fef6666 100644
--- a/mingw-w64-headers/include/thumbcache.h
+++ b/mingw-w64-headers/include/thumbcache.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/thumbcache.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/thumbcache.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/tlbref.h b/mingw-w64-headers/include/tlbref.h
index dc9c9e4..e3dfa9f 100644
--- a/mingw-w64-headers/include/tlbref.h
+++ b/mingw-w64-headers/include/tlbref.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/tlbref.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/tlbref.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/tlogstg.h b/mingw-w64-headers/include/tlogstg.h
index 2d4388b..93f2acd 100644
--- a/mingw-w64-headers/include/tlogstg.h
+++ b/mingw-w64-headers/include/tlogstg.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/tlogstg.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/tlogstg.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/tpcshrd.h b/mingw-w64-headers/include/tpcshrd.h
index 8765095..755b194 100644
--- a/mingw-w64-headers/include/tpcshrd.h
+++ b/mingw-w64-headers/include/tpcshrd.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/tpcshrd.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/tpcshrd.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/tsvirtualchannels.h b/mingw-w64-headers/include/tsvirtualchannels.h
index 1199f1b..9ed3628 100644
--- a/mingw-w64-headers/include/tsvirtualchannels.h
+++ b/mingw-w64-headers/include/tsvirtualchannels.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/tsvirtualchannels.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/tsvirtualchannels.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/tuner.h b/mingw-w64-headers/include/tuner.h
index de770dd..e4e9181 100644
--- a/mingw-w64-headers/include/tuner.h
+++ b/mingw-w64-headers/include/tuner.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/tuner.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/tuner.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/uianimation.h b/mingw-w64-headers/include/uianimation.h
index 01d562b..cd35b98 100644
--- a/mingw-w64-headers/include/uianimation.h
+++ b/mingw-w64-headers/include/uianimation.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/uianimation.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/uianimation.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/uiautomationclient.h b/mingw-w64-headers/include/uiautomationclient.h
index 0132885..25854c7 100644
--- a/mingw-w64-headers/include/uiautomationclient.h
+++ b/mingw-w64-headers/include/uiautomationclient.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/uiautomationclient.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/uiautomationclient.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/uiautomationcore.h b/mingw-w64-headers/include/uiautomationcore.h
index 5856c6b..ab40eda 100644
--- a/mingw-w64-headers/include/uiautomationcore.h
+++ b/mingw-w64-headers/include/uiautomationcore.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/uiautomationcore.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/uiautomationcore.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/uiviewsettingsinterop.h b/mingw-w64-headers/include/uiviewsettingsinterop.h
index 408d499..26bf04d 100644
--- a/mingw-w64-headers/include/uiviewsettingsinterop.h
+++ b/mingw-w64-headers/include/uiviewsettingsinterop.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/uiviewsettingsinterop.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/uiviewsettingsinterop.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/unknwn.h b/mingw-w64-headers/include/unknwn.h
index 6837b28..a1f3ae7 100644
--- a/mingw-w64-headers/include/unknwn.h
+++ b/mingw-w64-headers/include/unknwn.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/unknwn.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/unknwn.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/unknwnbase.h b/mingw-w64-headers/include/unknwnbase.h
index d0fcb84..52f67cb 100644
--- a/mingw-w64-headers/include/unknwnbase.h
+++ b/mingw-w64-headers/include/unknwnbase.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/unknwnbase.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/unknwnbase.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/urlhist.h b/mingw-w64-headers/include/urlhist.h
index a3a9e2d..23b3024 100644
--- a/mingw-w64-headers/include/urlhist.h
+++ b/mingw-w64-headers/include/urlhist.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/urlhist.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/urlhist.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/urlmon.h b/mingw-w64-headers/include/urlmon.h
index e218549..1ec7281 100644
--- a/mingw-w64-headers/include/urlmon.h
+++ b/mingw-w64-headers/include/urlmon.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/urlmon.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/urlmon.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vdslun.h b/mingw-w64-headers/include/vdslun.h
index 3f43dd0..a0c321a 100644
--- a/mingw-w64-headers/include/vdslun.h
+++ b/mingw-w64-headers/include/vdslun.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/vdslun.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/vdslun.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vidcap.h b/mingw-w64-headers/include/vidcap.h
index 5230772..7a0aedf 100644
--- a/mingw-w64-headers/include/vidcap.h
+++ b/mingw-w64-headers/include/vidcap.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/vidcap.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/vidcap.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vmr9.h b/mingw-w64-headers/include/vmr9.h
index 584c158..1c55868 100644
--- a/mingw-w64-headers/include/vmr9.h
+++ b/mingw-w64-headers/include/vmr9.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/vmr9.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/vmr9.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vsadmin.h b/mingw-w64-headers/include/vsadmin.h
index 8e4f1c7..e9749fa 100644
--- a/mingw-w64-headers/include/vsadmin.h
+++ b/mingw-w64-headers/include/vsadmin.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/vsadmin.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/vsadmin.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vsbackup.h b/mingw-w64-headers/include/vsbackup.h
index 3534bfa..1ec322d 100644
--- a/mingw-w64-headers/include/vsbackup.h
+++ b/mingw-w64-headers/include/vsbackup.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/vsbackup.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/vsbackup.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vsmgmt.h b/mingw-w64-headers/include/vsmgmt.h
index 9bb7de2..aebc766 100644
--- a/mingw-w64-headers/include/vsmgmt.h
+++ b/mingw-w64-headers/include/vsmgmt.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/vsmgmt.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/vsmgmt.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vsprov.h b/mingw-w64-headers/include/vsprov.h
index 040e76a..cb16863 100644
--- a/mingw-w64-headers/include/vsprov.h
+++ b/mingw-w64-headers/include/vsprov.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/vsprov.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/vsprov.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vss.h b/mingw-w64-headers/include/vss.h
index b134e9b..777bc80 100644
--- a/mingw-w64-headers/include/vss.h
+++ b/mingw-w64-headers/include/vss.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/vss.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/vss.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vswriter.h b/mingw-w64-headers/include/vswriter.h
index 08aecdb..38b1a90 100644
--- a/mingw-w64-headers/include/vswriter.h
+++ b/mingw-w64-headers/include/vswriter.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/vswriter.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/vswriter.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wbemads.h b/mingw-w64-headers/include/wbemads.h
index 2b3b56f..240bd70 100644
--- a/mingw-w64-headers/include/wbemads.h
+++ b/mingw-w64-headers/include/wbemads.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wbemads.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wbemads.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wbemcli.h b/mingw-w64-headers/include/wbemcli.h
index c8d6561..1d97033 100644
--- a/mingw-w64-headers/include/wbemcli.h
+++ b/mingw-w64-headers/include/wbemcli.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wbemcli.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wbemcli.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wbemdisp.h b/mingw-w64-headers/include/wbemdisp.h
index 6f12bd8..204bcf1 100644
--- a/mingw-w64-headers/include/wbemdisp.h
+++ b/mingw-w64-headers/include/wbemdisp.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wbemdisp.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wbemdisp.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wbemprov.h b/mingw-w64-headers/include/wbemprov.h
index 3166a88..c3f190b 100644
--- a/mingw-w64-headers/include/wbemprov.h
+++ b/mingw-w64-headers/include/wbemprov.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wbemprov.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wbemprov.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wbemtran.h b/mingw-w64-headers/include/wbemtran.h
index 1b21bef..703ebc7 100644
--- a/mingw-w64-headers/include/wbemtran.h
+++ b/mingw-w64-headers/include/wbemtran.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wbemtran.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wbemtran.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wdstptmgmt.h b/mingw-w64-headers/include/wdstptmgmt.h
index ec4d41a..31cbba6 100644
--- a/mingw-w64-headers/include/wdstptmgmt.h
+++ b/mingw-w64-headers/include/wdstptmgmt.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wdstptmgmt.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wdstptmgmt.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/weakreference.h b/mingw-w64-headers/include/weakreference.h
index e6d322e..33534d8 100644
--- a/mingw-w64-headers/include/weakreference.h
+++ b/mingw-w64-headers/include/weakreference.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/weakreference.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/weakreference.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wia_lh.h b/mingw-w64-headers/include/wia_lh.h
index 2ee50de..7adbb94 100644
--- a/mingw-w64-headers/include/wia_lh.h
+++ b/mingw-w64-headers/include/wia_lh.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wia_lh.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wia_lh.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wia_xp.h b/mingw-w64-headers/include/wia_xp.h
index cf81deb..b9f5db9 100644
--- a/mingw-w64-headers/include/wia_xp.h
+++ b/mingw-w64-headers/include/wia_xp.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wia_xp.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wia_xp.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wincodec.h b/mingw-w64-headers/include/wincodec.h
index 7e8bf4d..d3bea36 100644
--- a/mingw-w64-headers/include/wincodec.h
+++ b/mingw-w64-headers/include/wincodec.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wincodec.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wincodec.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wincodecsdk.h b/mingw-w64-headers/include/wincodecsdk.h
index c227aab..0328dfe 100644
--- a/mingw-w64-headers/include/wincodecsdk.h
+++ b/mingw-w64-headers/include/wincodecsdk.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wincodecsdk.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wincodecsdk.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.applicationmodel.activation.h b/mingw-w64-headers/include/windows.applicationmodel.activation.h
index 9c15563..ca4bff6 100644
--- a/mingw-w64-headers/include/windows.applicationmodel.activation.h
+++ b/mingw-w64-headers/include/windows.applicationmodel.activation.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.applicationmodel.activation.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.applicationmodel.activation.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.applicationmodel.background.h b/mingw-w64-headers/include/windows.applicationmodel.background.h
index 080ed6c..8777fdc 100644
--- a/mingw-w64-headers/include/windows.applicationmodel.background.h
+++ b/mingw-w64-headers/include/windows.applicationmodel.background.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.applicationmodel.background.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.applicationmodel.background.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.applicationmodel.core.h b/mingw-w64-headers/include/windows.applicationmodel.core.h
index 28773b8..2a1a31d 100644
--- a/mingw-w64-headers/include/windows.applicationmodel.core.h
+++ b/mingw-w64-headers/include/windows.applicationmodel.core.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.applicationmodel.core.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.applicationmodel.core.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.applicationmodel.datatransfer.dragdrop.core.h b/mingw-w64-headers/include/windows.applicationmodel.datatransfer.dragdrop.core.h
index 3540d39..12ecd09 100644
--- a/mingw-w64-headers/include/windows.applicationmodel.datatransfer.dragdrop.core.h
+++ b/mingw-w64-headers/include/windows.applicationmodel.datatransfer.dragdrop.core.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.applicationmodel.datatransfer.dragdrop.core.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.applicationmodel.datatransfer.dragdrop.core.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.applicationmodel.datatransfer.dragdrop.h b/mingw-w64-headers/include/windows.applicationmodel.datatransfer.dragdrop.h
index 5d65f0c..12e90bf 100644
--- a/mingw-w64-headers/include/windows.applicationmodel.datatransfer.dragdrop.h
+++ b/mingw-w64-headers/include/windows.applicationmodel.datatransfer.dragdrop.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.applicationmodel.datatransfer.dragdrop.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.applicationmodel.datatransfer.dragdrop.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.applicationmodel.datatransfer.h b/mingw-w64-headers/include/windows.applicationmodel.datatransfer.h
index aed2785..3e1209e 100644
--- a/mingw-w64-headers/include/windows.applicationmodel.datatransfer.h
+++ b/mingw-w64-headers/include/windows.applicationmodel.datatransfer.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.applicationmodel.datatransfer.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.applicationmodel.datatransfer.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.applicationmodel.h b/mingw-w64-headers/include/windows.applicationmodel.h
index fabdd88..299fd8a 100644
--- a/mingw-w64-headers/include/windows.applicationmodel.h
+++ b/mingw-w64-headers/include/windows.applicationmodel.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.applicationmodel.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.applicationmodel.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.data.json.h b/mingw-w64-headers/include/windows.data.json.h
index dbd25f8..a99246e 100644
--- a/mingw-w64-headers/include/windows.data.json.h
+++ b/mingw-w64-headers/include/windows.data.json.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.data.json.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.data.json.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.data.xml.dom.h b/mingw-w64-headers/include/windows.data.xml.dom.h
index cff447d..cd87faa 100644
--- a/mingw-w64-headers/include/windows.data.xml.dom.h
+++ b/mingw-w64-headers/include/windows.data.xml.dom.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.data.xml.dom.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.data.xml.dom.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.devices.bluetooth.advertisement.h b/mingw-w64-headers/include/windows.devices.bluetooth.advertisement.h
new file mode 100644
index 0000000..679c8ee
--- /dev/null
+++ b/mingw-w64-headers/include/windows.devices.bluetooth.advertisement.h
@@ -0,0 +1,7698 @@
+/*** Autogenerated by WIDL 10.13 from include/windows.devices.bluetooth.advertisement.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 __windows_devices_bluetooth_advertisement_h__
+#define __windows_devices_bluetooth_advertisement_h__
+
+/* Forward declarations */
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisement
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisement;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisement_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisement_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    class BluetoothLEAdvertisement;
+                }
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisement __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisement;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisement_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementDataSection
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementDataSection;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementDataSectionFactory
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementDataSectionFactory;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementDataSection_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementDataSection_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    class BluetoothLEAdvertisementDataSection;
+                }
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementDataSection __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementDataSection;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementDataSection_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEManufacturerData
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEManufacturerData;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEManufacturerDataFactory
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEManufacturerDataFactory;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEManufacturerData_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEManufacturerData_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    class BluetoothLEManufacturerData;
+                }
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEManufacturerData __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEManufacturerData;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEManufacturerData_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementWatcher
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementWatcher;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2 __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2 ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementWatcher2
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementWatcher2;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3 __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3 ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementWatcher3
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementWatcher3;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementWatcherFactory
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementWatcherFactory;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementWatcher_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementWatcher_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    class BluetoothLEAdvertisementWatcher;
+                }
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementWatcher __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementWatcher;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementWatcher_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementFilter
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementFilter;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementFilter_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementFilter_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    class BluetoothLEAdvertisementFilter;
+                }
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementFilter __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementFilter;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementFilter_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementReceivedEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementReceivedEventArgs;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2 __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2 ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementReceivedEventArgs2
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementReceivedEventArgs2;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3 __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3 ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementReceivedEventArgs3
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementReceivedEventArgs3;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementReceivedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementReceivedEventArgs_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    class BluetoothLEAdvertisementReceivedEventArgs;
+                }
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementReceivedEventArgs __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementReceivedEventArgs;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementReceivedEventArgs_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementWatcherStoppedEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementWatcherStoppedEventArgs;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementWatcherStoppedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementWatcherStoppedEventArgs_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    class BluetoothLEAdvertisementWatcherStoppedEventArgs;
+                }
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementWatcherStoppedEventArgs __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementWatcherStoppedEventArgs;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementWatcherStoppedEventArgs_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementBytePattern
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementBytePattern;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementBytePatternFactory
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementBytePatternFactory;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementBytePattern_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementBytePattern_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    class BluetoothLEAdvertisementBytePattern;
+                }
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementBytePattern __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementBytePattern;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementBytePattern_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementScanParameters
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementScanParameters;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementScanParametersStatics
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementScanParametersStatics;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementScanParameters_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementScanParameters_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    class BluetoothLEAdvertisementScanParameters;
+                }
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementScanParameters __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementScanParameters;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementScanParameters_FWD_DEFINED__ */
+
+#ifndef ____FIReference_1_BluetoothLEAdvertisementFlags_FWD_DEFINED__
+#define ____FIReference_1_BluetoothLEAdvertisementFlags_FWD_DEFINED__
+typedef interface __FIReference_1_BluetoothLEAdvertisementFlags __FIReference_1_BluetoothLEAdvertisementFlags;
+#ifdef __cplusplus
+#define __FIReference_1_BluetoothLEAdvertisementFlags ABI::Windows::Foundation::IReference<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementFlags >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIVector_1_GUID_FWD_DEFINED__
+#define ____FIVector_1_GUID_FWD_DEFINED__
+typedef interface __FIVector_1_GUID __FIVector_1_GUID;
+#ifdef __cplusplus
+#define __FIVector_1_GUID ABI::Windows::Foundation::Collections::IVector<GUID >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_FWD_DEFINED__
+#define ____FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_FWD_DEFINED__
+typedef interface __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData;
+#ifdef __cplusplus
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData ABI::Windows::Foundation::Collections::IVector<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_FWD_DEFINED__
+#define ____FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_FWD_DEFINED__
+typedef interface __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection;
+#ifdef __cplusplus
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection ABI::Windows::Foundation::Collections::IVector<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_FWD_DEFINED__
+#define ____FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_FWD_DEFINED__
+typedef interface __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern;
+#ifdef __cplusplus
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern ABI::Windows::Foundation::Collections::IVector<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIVectorView_1_GUID_FWD_DEFINED__
+#define ____FIVectorView_1_GUID_FWD_DEFINED__
+typedef interface __FIVectorView_1_GUID __FIVectorView_1_GUID;
+#ifdef __cplusplus
+#define __FIVectorView_1_GUID ABI::Windows::Foundation::Collections::IVectorView<GUID >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_FWD_DEFINED__
+#define ____FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_FWD_DEFINED__
+typedef interface __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData;
+#ifdef __cplusplus
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_FWD_DEFINED__
+#define ____FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_FWD_DEFINED__
+typedef interface __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection;
+#ifdef __cplusplus
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_FWD_DEFINED__
+#define ____FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_FWD_DEFINED__
+typedef interface __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern;
+#ifdef __cplusplus
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterable_1_GUID_FWD_DEFINED__
+#define ____FIIterable_1_GUID_FWD_DEFINED__
+typedef interface __FIIterable_1_GUID __FIIterable_1_GUID;
+#ifdef __cplusplus
+#define __FIIterable_1_GUID ABI::Windows::Foundation::Collections::IIterable<GUID >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_FWD_DEFINED__
+#define ____FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_FWD_DEFINED__
+typedef interface __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData;
+#ifdef __cplusplus
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData ABI::Windows::Foundation::Collections::IIterable<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_FWD_DEFINED__
+#define ____FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_FWD_DEFINED__
+typedef interface __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection;
+#ifdef __cplusplus
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection ABI::Windows::Foundation::Collections::IIterable<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_FWD_DEFINED__
+#define ____FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_FWD_DEFINED__
+typedef interface __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern;
+#ifdef __cplusplus
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern ABI::Windows::Foundation::Collections::IIterable<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterator_1_GUID_FWD_DEFINED__
+#define ____FIIterator_1_GUID_FWD_DEFINED__
+typedef interface __FIIterator_1_GUID __FIIterator_1_GUID;
+#ifdef __cplusplus
+#define __FIIterator_1_GUID ABI::Windows::Foundation::Collections::IIterator<GUID >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_FWD_DEFINED__
+#define ____FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_FWD_DEFINED__
+typedef interface __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData;
+#ifdef __cplusplus
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData ABI::Windows::Foundation::Collections::IIterator<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_FWD_DEFINED__
+#define ____FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_FWD_DEFINED__
+typedef interface __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection;
+#ifdef __cplusplus
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection ABI::Windows::Foundation::Collections::IIterator<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_FWD_DEFINED__
+#define ____FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_FWD_DEFINED__
+typedef interface __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern;
+#ifdef __cplusplus
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern ABI::Windows::Foundation::Collections::IIterator<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs_FWD_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs_FWD_DEFINED__
+typedef interface __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs;
+#ifdef __cplusplus
+#define __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcher*,ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementReceivedEventArgs* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs_FWD_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs_FWD_DEFINED__
+typedef interface __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs;
+#ifdef __cplusplus
+#define __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcher*,ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcherStoppedEventArgs* >
+#endif /* __cplusplus */
+#endif
+
+/* Headers for imported files */
+
+#include <inspectable.h>
+#include <asyncinfo.h>
+#include <eventtoken.h>
+#include <windowscontracts.h>
+#include <windows.foundation.h>
+#include <windows.storage.streams.h>
+#include <windows.devices.bluetooth.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)
+#define WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION 0xe0000
+#endif // defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x20000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CBluetoothAddressType_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CBluetoothAddressType_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                enum BluetoothAddressType {
+                    BluetoothAddressType_Public = 0,
+                    BluetoothAddressType_Random = 1,
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000
+                    BluetoothAddressType_Unspecified = 2
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000 */
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CDevices_CBluetooth_CBluetoothAddressType {
+    BluetoothAddressType_Public = 0,
+    BluetoothAddressType_Random = 1,
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000
+    BluetoothAddressType_Unspecified = 2
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000 */
+};
+#ifdef WIDL_using_Windows_Devices_Bluetooth
+#define BluetoothAddressType __x_ABI_CWindows_CDevices_CBluetooth_CBluetoothAddressType
+#endif /* WIDL_using_Windows_Devices_Bluetooth */
+#endif
+
+#endif /* ____x_ABI_CWindows_CDevices_CBluetooth_CBluetoothAddressType_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x20000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CDevices_CBluetooth_CBluetoothAddressType __x_ABI_CWindows_CDevices_CBluetooth_CBluetoothAddressType;
+#endif /* __cplusplus */
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CBluetoothError_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CBluetoothError_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                enum BluetoothError {
+                    BluetoothError_Success = 0,
+                    BluetoothError_RadioNotAvailable = 1,
+                    BluetoothError_ResourceInUse = 2,
+                    BluetoothError_DeviceNotConnected = 3,
+                    BluetoothError_OtherError = 4,
+                    BluetoothError_DisabledByPolicy = 5,
+                    BluetoothError_NotSupported = 6,
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x20000
+                    BluetoothError_DisabledByUser = 7,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x20000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x30000
+                    BluetoothError_ConsentRequired = 8,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x30000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000
+                    BluetoothError_TransportNotSupported = 9
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000 */
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CDevices_CBluetooth_CBluetoothError {
+    BluetoothError_Success = 0,
+    BluetoothError_RadioNotAvailable = 1,
+    BluetoothError_ResourceInUse = 2,
+    BluetoothError_DeviceNotConnected = 3,
+    BluetoothError_OtherError = 4,
+    BluetoothError_DisabledByPolicy = 5,
+    BluetoothError_NotSupported = 6,
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x20000
+    BluetoothError_DisabledByUser = 7,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x20000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x30000
+    BluetoothError_ConsentRequired = 8,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x30000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000
+    BluetoothError_TransportNotSupported = 9
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000 */
+};
+#ifdef WIDL_using_Windows_Devices_Bluetooth
+#define BluetoothError __x_ABI_CWindows_CDevices_CBluetooth_CBluetoothError
+#endif /* WIDL_using_Windows_Devices_Bluetooth */
+#endif
+
+#endif /* ____x_ABI_CWindows_CDevices_CBluetooth_CBluetoothError_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CDevices_CBluetooth_CBluetoothError __x_ABI_CWindows_CDevices_CBluetooth_CBluetoothError;
+#endif /* __cplusplus */
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementFlags_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementFlags_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    enum BluetoothLEAdvertisementFlags {
+                        BluetoothLEAdvertisementFlags_None = 0x0,
+                        BluetoothLEAdvertisementFlags_LimitedDiscoverableMode = 0x1,
+                        BluetoothLEAdvertisementFlags_GeneralDiscoverableMode = 0x2,
+                        BluetoothLEAdvertisementFlags_ClassicNotSupported = 0x4,
+                        BluetoothLEAdvertisementFlags_DualModeControllerCapable = 0x8,
+                        BluetoothLEAdvertisementFlags_DualModeHostCapable = 0x10
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementFlags {
+    BluetoothLEAdvertisementFlags_None = 0x0,
+    BluetoothLEAdvertisementFlags_LimitedDiscoverableMode = 0x1,
+    BluetoothLEAdvertisementFlags_GeneralDiscoverableMode = 0x2,
+    BluetoothLEAdvertisementFlags_ClassicNotSupported = 0x4,
+    BluetoothLEAdvertisementFlags_DualModeControllerCapable = 0x8,
+    BluetoothLEAdvertisementFlags_DualModeHostCapable = 0x10
+};
+#ifdef WIDL_using_Windows_Devices_Bluetooth_Advertisement
+#define BluetoothLEAdvertisementFlags __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementFlags
+#endif /* WIDL_using_Windows_Devices_Bluetooth_Advertisement */
+#endif
+
+#endif /* ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementFlags_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementFlags __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementFlags;
+#endif /* __cplusplus */
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementWatcherStatus_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementWatcherStatus_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    enum BluetoothLEAdvertisementWatcherStatus {
+                        BluetoothLEAdvertisementWatcherStatus_Created = 0,
+                        BluetoothLEAdvertisementWatcherStatus_Started = 1,
+                        BluetoothLEAdvertisementWatcherStatus_Stopping = 2,
+                        BluetoothLEAdvertisementWatcherStatus_Stopped = 3,
+                        BluetoothLEAdvertisementWatcherStatus_Aborted = 4
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementWatcherStatus {
+    BluetoothLEAdvertisementWatcherStatus_Created = 0,
+    BluetoothLEAdvertisementWatcherStatus_Started = 1,
+    BluetoothLEAdvertisementWatcherStatus_Stopping = 2,
+    BluetoothLEAdvertisementWatcherStatus_Stopped = 3,
+    BluetoothLEAdvertisementWatcherStatus_Aborted = 4
+};
+#ifdef WIDL_using_Windows_Devices_Bluetooth_Advertisement
+#define BluetoothLEAdvertisementWatcherStatus __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementWatcherStatus
+#endif /* WIDL_using_Windows_Devices_Bluetooth_Advertisement */
+#endif
+
+#endif /* ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementWatcherStatus_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementWatcherStatus __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementWatcherStatus;
+#endif /* __cplusplus */
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEScanningMode_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEScanningMode_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    enum BluetoothLEScanningMode {
+                        BluetoothLEScanningMode_Passive = 0,
+                        BluetoothLEScanningMode_Active = 1,
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0xa0000
+                        BluetoothLEScanningMode_None = 2
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0xa0000 */
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEScanningMode {
+    BluetoothLEScanningMode_Passive = 0,
+    BluetoothLEScanningMode_Active = 1,
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0xa0000
+    BluetoothLEScanningMode_None = 2
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0xa0000 */
+};
+#ifdef WIDL_using_Windows_Devices_Bluetooth_Advertisement
+#define BluetoothLEScanningMode __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEScanningMode
+#endif /* WIDL_using_Windows_Devices_Bluetooth_Advertisement */
+#endif
+
+#endif /* ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEScanningMode_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEScanningMode __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEScanningMode;
+#endif /* __cplusplus */
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementType_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementType_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    enum BluetoothLEAdvertisementType {
+                        BluetoothLEAdvertisementType_ConnectableUndirected = 0,
+                        BluetoothLEAdvertisementType_ConnectableDirected = 1,
+                        BluetoothLEAdvertisementType_ScannableUndirected = 2,
+                        BluetoothLEAdvertisementType_NonConnectableUndirected = 3,
+                        BluetoothLEAdvertisementType_ScanResponse = 4,
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0xa0000
+                        BluetoothLEAdvertisementType_Extended = 5
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0xa0000 */
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementType {
+    BluetoothLEAdvertisementType_ConnectableUndirected = 0,
+    BluetoothLEAdvertisementType_ConnectableDirected = 1,
+    BluetoothLEAdvertisementType_ScannableUndirected = 2,
+    BluetoothLEAdvertisementType_NonConnectableUndirected = 3,
+    BluetoothLEAdvertisementType_ScanResponse = 4,
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0xa0000
+    BluetoothLEAdvertisementType_Extended = 5
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0xa0000 */
+};
+#ifdef WIDL_using_Windows_Devices_Bluetooth_Advertisement
+#define BluetoothLEAdvertisementType __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementType
+#endif /* WIDL_using_Windows_Devices_Bluetooth_Advertisement */
+#endif
+
+#endif /* ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementType_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementType __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementType;
+#endif /* __cplusplus */
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x130000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementPhyType_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementPhyType_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    enum BluetoothLEAdvertisementPhyType {
+                        BluetoothLEAdvertisementPhyType_Unspecified = 0,
+                        BluetoothLEAdvertisementPhyType_Uncoded1MPhy = 1,
+                        BluetoothLEAdvertisementPhyType_Uncoded2MPhy = 2,
+                        BluetoothLEAdvertisementPhyType_CodedPhy = 3
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementPhyType {
+    BluetoothLEAdvertisementPhyType_Unspecified = 0,
+    BluetoothLEAdvertisementPhyType_Uncoded1MPhy = 1,
+    BluetoothLEAdvertisementPhyType_Uncoded2MPhy = 2,
+    BluetoothLEAdvertisementPhyType_CodedPhy = 3
+};
+#ifdef WIDL_using_Windows_Devices_Bluetooth_Advertisement
+#define BluetoothLEAdvertisementPhyType __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementPhyType
+#endif /* WIDL_using_Windows_Devices_Bluetooth_Advertisement */
+#endif
+
+#endif /* ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementPhyType_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x130000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementPhyType __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementPhyType;
+#endif /* __cplusplus */
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEManufacturerData
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEManufacturerData;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementDataSection
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementDataSection;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementDataSectionFactory
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementDataSectionFactory;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEManufacturerData
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEManufacturerData;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEManufacturerDataFactory
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEManufacturerDataFactory;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementWatcher
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementWatcher;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2 __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2 ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementWatcher2
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementWatcher2;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3 __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3 ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementWatcher3
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementWatcher3;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementFilter
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementFilter;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementReceivedEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementReceivedEventArgs;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2 __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2 ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementReceivedEventArgs2
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementReceivedEventArgs2;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3 __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3 ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementReceivedEventArgs3
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementReceivedEventArgs3;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementWatcherStoppedEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementWatcherStoppedEventArgs;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementBytePattern
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementBytePattern;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementBytePatternFactory
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementBytePatternFactory;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementScanParameters
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementScanParameters;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementScanParametersStatics
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    interface IBluetoothLEAdvertisementScanParametersStatics;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIReference_1_BluetoothLEAdvertisementFlags_FWD_DEFINED__
+#define ____FIReference_1_BluetoothLEAdvertisementFlags_FWD_DEFINED__
+typedef interface __FIReference_1_BluetoothLEAdvertisementFlags __FIReference_1_BluetoothLEAdvertisementFlags;
+#ifdef __cplusplus
+#define __FIReference_1_BluetoothLEAdvertisementFlags ABI::Windows::Foundation::IReference<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementFlags >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIVector_1_GUID_FWD_DEFINED__
+#define ____FIVector_1_GUID_FWD_DEFINED__
+typedef interface __FIVector_1_GUID __FIVector_1_GUID;
+#ifdef __cplusplus
+#define __FIVector_1_GUID ABI::Windows::Foundation::Collections::IVector<GUID >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_FWD_DEFINED__
+#define ____FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_FWD_DEFINED__
+typedef interface __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData;
+#ifdef __cplusplus
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData ABI::Windows::Foundation::Collections::IVector<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_FWD_DEFINED__
+#define ____FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_FWD_DEFINED__
+typedef interface __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection;
+#ifdef __cplusplus
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection ABI::Windows::Foundation::Collections::IVector<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_FWD_DEFINED__
+#define ____FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_FWD_DEFINED__
+typedef interface __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern;
+#ifdef __cplusplus
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern ABI::Windows::Foundation::Collections::IVector<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIVectorView_1_GUID_FWD_DEFINED__
+#define ____FIVectorView_1_GUID_FWD_DEFINED__
+typedef interface __FIVectorView_1_GUID __FIVectorView_1_GUID;
+#ifdef __cplusplus
+#define __FIVectorView_1_GUID ABI::Windows::Foundation::Collections::IVectorView<GUID >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_FWD_DEFINED__
+#define ____FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_FWD_DEFINED__
+typedef interface __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData;
+#ifdef __cplusplus
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_FWD_DEFINED__
+#define ____FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_FWD_DEFINED__
+typedef interface __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection;
+#ifdef __cplusplus
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_FWD_DEFINED__
+#define ____FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_FWD_DEFINED__
+typedef interface __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern;
+#ifdef __cplusplus
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterable_1_GUID_FWD_DEFINED__
+#define ____FIIterable_1_GUID_FWD_DEFINED__
+typedef interface __FIIterable_1_GUID __FIIterable_1_GUID;
+#ifdef __cplusplus
+#define __FIIterable_1_GUID ABI::Windows::Foundation::Collections::IIterable<GUID >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_FWD_DEFINED__
+#define ____FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_FWD_DEFINED__
+typedef interface __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData;
+#ifdef __cplusplus
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData ABI::Windows::Foundation::Collections::IIterable<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_FWD_DEFINED__
+#define ____FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_FWD_DEFINED__
+typedef interface __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection;
+#ifdef __cplusplus
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection ABI::Windows::Foundation::Collections::IIterable<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_FWD_DEFINED__
+#define ____FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_FWD_DEFINED__
+typedef interface __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern;
+#ifdef __cplusplus
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern ABI::Windows::Foundation::Collections::IIterable<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterator_1_GUID_FWD_DEFINED__
+#define ____FIIterator_1_GUID_FWD_DEFINED__
+typedef interface __FIIterator_1_GUID __FIIterator_1_GUID;
+#ifdef __cplusplus
+#define __FIIterator_1_GUID ABI::Windows::Foundation::Collections::IIterator<GUID >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_FWD_DEFINED__
+#define ____FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_FWD_DEFINED__
+typedef interface __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData;
+#ifdef __cplusplus
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData ABI::Windows::Foundation::Collections::IIterator<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_FWD_DEFINED__
+#define ____FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_FWD_DEFINED__
+typedef interface __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection;
+#ifdef __cplusplus
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection ABI::Windows::Foundation::Collections::IIterator<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_FWD_DEFINED__
+#define ____FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_FWD_DEFINED__
+typedef interface __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern;
+#ifdef __cplusplus
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern ABI::Windows::Foundation::Collections::IIterator<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* >
+#endif /* __cplusplus */
+#endif
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementPublisherStatus_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementPublisherStatus_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    enum BluetoothLEAdvertisementPublisherStatus {
+                        BluetoothLEAdvertisementPublisherStatus_Created = 0,
+                        BluetoothLEAdvertisementPublisherStatus_Waiting = 1,
+                        BluetoothLEAdvertisementPublisherStatus_Started = 2,
+                        BluetoothLEAdvertisementPublisherStatus_Stopping = 3,
+                        BluetoothLEAdvertisementPublisherStatus_Stopped = 4,
+                        BluetoothLEAdvertisementPublisherStatus_Aborted = 5
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementPublisherStatus {
+    BluetoothLEAdvertisementPublisherStatus_Created = 0,
+    BluetoothLEAdvertisementPublisherStatus_Waiting = 1,
+    BluetoothLEAdvertisementPublisherStatus_Started = 2,
+    BluetoothLEAdvertisementPublisherStatus_Stopping = 3,
+    BluetoothLEAdvertisementPublisherStatus_Stopped = 4,
+    BluetoothLEAdvertisementPublisherStatus_Aborted = 5
+};
+#ifdef WIDL_using_Windows_Devices_Bluetooth_Advertisement
+#define BluetoothLEAdvertisementPublisherStatus __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementPublisherStatus
+#endif /* WIDL_using_Windows_Devices_Bluetooth_Advertisement */
+#endif
+
+#endif /* ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementPublisherStatus_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+/*****************************************************************************
+ * IBluetoothLEAdvertisement interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement, 0x066fb2b7, 0x33d1, 0x4e7d, 0x83,0x67, 0xcf,0x81,0xd0,0xf7,0x96,0x53);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    MIDL_INTERFACE("066fb2b7-33d1-4e7d-8367-cf81d0f79653")
+                    IBluetoothLEAdvertisement : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_Flags(
+                            ABI::Windows::Foundation::IReference<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementFlags > **value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_Flags(
+                            ABI::Windows::Foundation::IReference<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementFlags > *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_LocalName(
+                            HSTRING *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_LocalName(
+                            HSTRING value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_ServiceUuids(
+                            ABI::Windows::Foundation::Collections::IVector<GUID > **value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_ManufacturerData(
+                            ABI::Windows::Foundation::Collections::IVector<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* > **value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_DataSections(
+                            ABI::Windows::Foundation::Collections::IVector<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* > **value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE GetManufacturerDataByCompanyId(
+                            UINT16 id,
+                            ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* > **value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE GetSectionsByType(
+                            BYTE type,
+                            ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* > **value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement, 0x066fb2b7, 0x33d1, 0x4e7d, 0x83,0x67, 0xcf,0x81,0xd0,0xf7,0x96,0x53)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement *This,
+        TrustLevel *trustLevel);
+
+    /*** IBluetoothLEAdvertisement methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Flags)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement *This,
+        __FIReference_1_BluetoothLEAdvertisementFlags **value);
+
+    HRESULT (STDMETHODCALLTYPE *put_Flags)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement *This,
+        __FIReference_1_BluetoothLEAdvertisementFlags *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_LocalName)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement *This,
+        HSTRING *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_LocalName)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement *This,
+        HSTRING value);
+
+    HRESULT (STDMETHODCALLTYPE *get_ServiceUuids)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement *This,
+        __FIVector_1_GUID **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_ManufacturerData)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement *This,
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_DataSections)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement *This,
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection **value);
+
+    HRESULT (STDMETHODCALLTYPE *GetManufacturerDataByCompanyId)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement *This,
+        UINT16 id,
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData **value);
+
+    HRESULT (STDMETHODCALLTYPE *GetSectionsByType)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement *This,
+        BYTE type,
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementVtbl;
+
+interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement {
+    CONST_VTBL __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IBluetoothLEAdvertisement methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_get_Flags(This,value) (This)->lpVtbl->get_Flags(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_put_Flags(This,value) (This)->lpVtbl->put_Flags(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_get_LocalName(This,value) (This)->lpVtbl->get_LocalName(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_put_LocalName(This,value) (This)->lpVtbl->put_LocalName(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_get_ServiceUuids(This,value) (This)->lpVtbl->get_ServiceUuids(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_get_ManufacturerData(This,value) (This)->lpVtbl->get_ManufacturerData(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_get_DataSections(This,value) (This)->lpVtbl->get_DataSections(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_GetManufacturerDataByCompanyId(This,id,value) (This)->lpVtbl->GetManufacturerDataByCompanyId(This,id,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_GetSectionsByType(This,type,value) (This)->lpVtbl->GetSectionsByType(This,type,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_QueryInterface(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_AddRef(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_Release(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_GetIids(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_GetTrustLevel(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IBluetoothLEAdvertisement methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_get_Flags(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement* This,__FIReference_1_BluetoothLEAdvertisementFlags **value) {
+    return This->lpVtbl->get_Flags(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_put_Flags(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement* This,__FIReference_1_BluetoothLEAdvertisementFlags *value) {
+    return This->lpVtbl->put_Flags(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_get_LocalName(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement* This,HSTRING *value) {
+    return This->lpVtbl->get_LocalName(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_put_LocalName(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement* This,HSTRING value) {
+    return This->lpVtbl->put_LocalName(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_get_ServiceUuids(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement* This,__FIVector_1_GUID **value) {
+    return This->lpVtbl->get_ServiceUuids(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_get_ManufacturerData(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement* This,__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData **value) {
+    return This->lpVtbl->get_ManufacturerData(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_get_DataSections(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement* This,__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection **value) {
+    return This->lpVtbl->get_DataSections(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_GetManufacturerDataByCompanyId(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement* This,UINT16 id,__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData **value) {
+    return This->lpVtbl->GetManufacturerDataByCompanyId(This,id,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_GetSectionsByType(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement* This,BYTE type,__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection **value) {
+    return This->lpVtbl->GetSectionsByType(This,type,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Devices_Bluetooth_Advertisement
+#define IID_IBluetoothLEAdvertisement IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement
+#define IBluetoothLEAdvertisementVtbl __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementVtbl
+#define IBluetoothLEAdvertisement __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement
+#define IBluetoothLEAdvertisement_QueryInterface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_QueryInterface
+#define IBluetoothLEAdvertisement_AddRef __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_AddRef
+#define IBluetoothLEAdvertisement_Release __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_Release
+#define IBluetoothLEAdvertisement_GetIids __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_GetIids
+#define IBluetoothLEAdvertisement_GetRuntimeClassName __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_GetRuntimeClassName
+#define IBluetoothLEAdvertisement_GetTrustLevel __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_GetTrustLevel
+#define IBluetoothLEAdvertisement_get_Flags __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_get_Flags
+#define IBluetoothLEAdvertisement_put_Flags __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_put_Flags
+#define IBluetoothLEAdvertisement_get_LocalName __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_get_LocalName
+#define IBluetoothLEAdvertisement_put_LocalName __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_put_LocalName
+#define IBluetoothLEAdvertisement_get_ServiceUuids __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_get_ServiceUuids
+#define IBluetoothLEAdvertisement_get_ManufacturerData __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_get_ManufacturerData
+#define IBluetoothLEAdvertisement_get_DataSections __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_get_DataSections
+#define IBluetoothLEAdvertisement_GetManufacturerDataByCompanyId __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_GetManufacturerDataByCompanyId
+#define IBluetoothLEAdvertisement_GetSectionsByType __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_GetSectionsByType
+#endif /* WIDL_using_Windows_Devices_Bluetooth_Advertisement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.Devices.Bluetooth.Advertisement.BluetoothLEAdvertisement
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisement_DEFINED
+#define RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisement_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisement[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','B','l','u','e','t','o','o','t','h','.','A','d','v','e','r','t','i','s','e','m','e','n','t','.','B','l','u','e','t','o','o','t','h','L','E','A','d','v','e','r','t','i','s','e','m','e','n','t',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisement[] = L"Windows.Devices.Bluetooth.Advertisement.BluetoothLEAdvertisement";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisement[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','B','l','u','e','t','o','o','t','h','.','A','d','v','e','r','t','i','s','e','m','e','n','t','.','B','l','u','e','t','o','o','t','h','L','E','A','d','v','e','r','t','i','s','e','m','e','n','t',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisement_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IBluetoothLEAdvertisementDataSection interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection, 0xd7213314, 0x3a43, 0x40f9, 0xb6,0xf0, 0x92,0xbf,0xef,0xc3,0x4a,0xe3);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    MIDL_INTERFACE("d7213314-3a43-40f9-b6f0-92bfefc34ae3")
+                    IBluetoothLEAdvertisementDataSection : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_DataType(
+                            BYTE *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_DataType(
+                            BYTE value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_Data(
+                            ABI::Windows::Storage::Streams::IBuffer **value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_Data(
+                            ABI::Windows::Storage::Streams::IBuffer *value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection, 0xd7213314, 0x3a43, 0x40f9, 0xb6,0xf0, 0x92,0xbf,0xef,0xc3,0x4a,0xe3)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection *This,
+        TrustLevel *trustLevel);
+
+    /*** IBluetoothLEAdvertisementDataSection methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_DataType)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection *This,
+        BYTE *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_DataType)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection *This,
+        BYTE value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Data)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection *This,
+        __x_ABI_CWindows_CStorage_CStreams_CIBuffer **value);
+
+    HRESULT (STDMETHODCALLTYPE *put_Data)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection *This,
+        __x_ABI_CWindows_CStorage_CStreams_CIBuffer *value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionVtbl;
+
+interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection {
+    CONST_VTBL __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IBluetoothLEAdvertisementDataSection methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_get_DataType(This,value) (This)->lpVtbl->get_DataType(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_put_DataType(This,value) (This)->lpVtbl->put_DataType(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_get_Data(This,value) (This)->lpVtbl->get_Data(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_put_Data(This,value) (This)->lpVtbl->put_Data(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_QueryInterface(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_AddRef(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_Release(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_GetIids(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_GetTrustLevel(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IBluetoothLEAdvertisementDataSection methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_get_DataType(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection* This,BYTE *value) {
+    return This->lpVtbl->get_DataType(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_put_DataType(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection* This,BYTE value) {
+    return This->lpVtbl->put_DataType(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_get_Data(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection* This,__x_ABI_CWindows_CStorage_CStreams_CIBuffer **value) {
+    return This->lpVtbl->get_Data(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_put_Data(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection* This,__x_ABI_CWindows_CStorage_CStreams_CIBuffer *value) {
+    return This->lpVtbl->put_Data(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Devices_Bluetooth_Advertisement
+#define IID_IBluetoothLEAdvertisementDataSection IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection
+#define IBluetoothLEAdvertisementDataSectionVtbl __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionVtbl
+#define IBluetoothLEAdvertisementDataSection __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection
+#define IBluetoothLEAdvertisementDataSection_QueryInterface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_QueryInterface
+#define IBluetoothLEAdvertisementDataSection_AddRef __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_AddRef
+#define IBluetoothLEAdvertisementDataSection_Release __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_Release
+#define IBluetoothLEAdvertisementDataSection_GetIids __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_GetIids
+#define IBluetoothLEAdvertisementDataSection_GetRuntimeClassName __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_GetRuntimeClassName
+#define IBluetoothLEAdvertisementDataSection_GetTrustLevel __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_GetTrustLevel
+#define IBluetoothLEAdvertisementDataSection_get_DataType __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_get_DataType
+#define IBluetoothLEAdvertisementDataSection_put_DataType __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_put_DataType
+#define IBluetoothLEAdvertisementDataSection_get_Data __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_get_Data
+#define IBluetoothLEAdvertisementDataSection_put_Data __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_put_Data
+#endif /* WIDL_using_Windows_Devices_Bluetooth_Advertisement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IBluetoothLEAdvertisementDataSectionFactory interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory, 0xe7a40942, 0xa845, 0x4045, 0xbf,0x7e, 0x3e,0x99,0x71,0xdb,0x8a,0x6b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    MIDL_INTERFACE("e7a40942-a845-4045-bf7e-3e9971db8a6b")
+                    IBluetoothLEAdvertisementDataSectionFactory : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE Create(
+                            BYTE type,
+                            ABI::Windows::Storage::Streams::IBuffer *data,
+                            ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementDataSection **value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory, 0xe7a40942, 0xa845, 0x4045, 0xbf,0x7e, 0x3e,0x99,0x71,0xdb,0x8a,0x6b)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactoryVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory *This,
+        TrustLevel *trustLevel);
+
+    /*** IBluetoothLEAdvertisementDataSectionFactory methods ***/
+    HRESULT (STDMETHODCALLTYPE *Create)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory *This,
+        BYTE type,
+        __x_ABI_CWindows_CStorage_CStreams_CIBuffer *data,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactoryVtbl;
+
+interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory {
+    CONST_VTBL __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactoryVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IBluetoothLEAdvertisementDataSectionFactory methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_Create(This,type,data,value) (This)->lpVtbl->Create(This,type,data,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_QueryInterface(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_AddRef(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_Release(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_GetIids(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_GetTrustLevel(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IBluetoothLEAdvertisementDataSectionFactory methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_Create(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory* This,BYTE type,__x_ABI_CWindows_CStorage_CStreams_CIBuffer *data,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection **value) {
+    return This->lpVtbl->Create(This,type,data,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Devices_Bluetooth_Advertisement
+#define IID_IBluetoothLEAdvertisementDataSectionFactory IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory
+#define IBluetoothLEAdvertisementDataSectionFactoryVtbl __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactoryVtbl
+#define IBluetoothLEAdvertisementDataSectionFactory __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory
+#define IBluetoothLEAdvertisementDataSectionFactory_QueryInterface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_QueryInterface
+#define IBluetoothLEAdvertisementDataSectionFactory_AddRef __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_AddRef
+#define IBluetoothLEAdvertisementDataSectionFactory_Release __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_Release
+#define IBluetoothLEAdvertisementDataSectionFactory_GetIids __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_GetIids
+#define IBluetoothLEAdvertisementDataSectionFactory_GetRuntimeClassName __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_GetRuntimeClassName
+#define IBluetoothLEAdvertisementDataSectionFactory_GetTrustLevel __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_GetTrustLevel
+#define IBluetoothLEAdvertisementDataSectionFactory_Create __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_Create
+#endif /* WIDL_using_Windows_Devices_Bluetooth_Advertisement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSectionFactory_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.Devices.Bluetooth.Advertisement.BluetoothLEAdvertisementDataSection
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementDataSection_DEFINED
+#define RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementDataSection_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementDataSection[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','B','l','u','e','t','o','o','t','h','.','A','d','v','e','r','t','i','s','e','m','e','n','t','.','B','l','u','e','t','o','o','t','h','L','E','A','d','v','e','r','t','i','s','e','m','e','n','t','D','a','t','a','S','e','c','t','i','o','n',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementDataSection[] = L"Windows.Devices.Bluetooth.Advertisement.BluetoothLEAdvertisementDataSection";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementDataSection[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','B','l','u','e','t','o','o','t','h','.','A','d','v','e','r','t','i','s','e','m','e','n','t','.','B','l','u','e','t','o','o','t','h','L','E','A','d','v','e','r','t','i','s','e','m','e','n','t','D','a','t','a','S','e','c','t','i','o','n',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementDataSection_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IBluetoothLEManufacturerData interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData, 0x912dba18, 0x6963, 0x4533, 0xb0,0x61, 0x46,0x94,0xda,0xfb,0x34,0xe5);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    MIDL_INTERFACE("912dba18-6963-4533-b061-4694dafb34e5")
+                    IBluetoothLEManufacturerData : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_CompanyId(
+                            UINT16 *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_CompanyId(
+                            UINT16 value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_Data(
+                            ABI::Windows::Storage::Streams::IBuffer **value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_Data(
+                            ABI::Windows::Storage::Streams::IBuffer *value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData, 0x912dba18, 0x6963, 0x4533, 0xb0,0x61, 0x46,0x94,0xda,0xfb,0x34,0xe5)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData *This,
+        TrustLevel *trustLevel);
+
+    /*** IBluetoothLEManufacturerData methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_CompanyId)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData *This,
+        UINT16 *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_CompanyId)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData *This,
+        UINT16 value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Data)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData *This,
+        __x_ABI_CWindows_CStorage_CStreams_CIBuffer **value);
+
+    HRESULT (STDMETHODCALLTYPE *put_Data)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData *This,
+        __x_ABI_CWindows_CStorage_CStreams_CIBuffer *value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataVtbl;
+
+interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData {
+    CONST_VTBL __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IBluetoothLEManufacturerData methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_get_CompanyId(This,value) (This)->lpVtbl->get_CompanyId(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_put_CompanyId(This,value) (This)->lpVtbl->put_CompanyId(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_get_Data(This,value) (This)->lpVtbl->get_Data(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_put_Data(This,value) (This)->lpVtbl->put_Data(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_QueryInterface(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_AddRef(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_Release(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_GetIids(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_GetTrustLevel(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IBluetoothLEManufacturerData methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_get_CompanyId(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData* This,UINT16 *value) {
+    return This->lpVtbl->get_CompanyId(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_put_CompanyId(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData* This,UINT16 value) {
+    return This->lpVtbl->put_CompanyId(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_get_Data(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData* This,__x_ABI_CWindows_CStorage_CStreams_CIBuffer **value) {
+    return This->lpVtbl->get_Data(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_put_Data(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData* This,__x_ABI_CWindows_CStorage_CStreams_CIBuffer *value) {
+    return This->lpVtbl->put_Data(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Devices_Bluetooth_Advertisement
+#define IID_IBluetoothLEManufacturerData IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData
+#define IBluetoothLEManufacturerDataVtbl __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataVtbl
+#define IBluetoothLEManufacturerData __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData
+#define IBluetoothLEManufacturerData_QueryInterface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_QueryInterface
+#define IBluetoothLEManufacturerData_AddRef __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_AddRef
+#define IBluetoothLEManufacturerData_Release __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_Release
+#define IBluetoothLEManufacturerData_GetIids __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_GetIids
+#define IBluetoothLEManufacturerData_GetRuntimeClassName __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_GetRuntimeClassName
+#define IBluetoothLEManufacturerData_GetTrustLevel __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_GetTrustLevel
+#define IBluetoothLEManufacturerData_get_CompanyId __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_get_CompanyId
+#define IBluetoothLEManufacturerData_put_CompanyId __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_put_CompanyId
+#define IBluetoothLEManufacturerData_get_Data __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_get_Data
+#define IBluetoothLEManufacturerData_put_Data __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_put_Data
+#endif /* WIDL_using_Windows_Devices_Bluetooth_Advertisement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IBluetoothLEManufacturerDataFactory interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory, 0xc09b39f8, 0x319a, 0x441e, 0x8d,0xe5, 0x66,0xa8,0x1e,0x87,0x7a,0x6c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    MIDL_INTERFACE("c09b39f8-319a-441e-8de5-66a81e877a6c")
+                    IBluetoothLEManufacturerDataFactory : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE Create(
+                            UINT16 id,
+                            ABI::Windows::Storage::Streams::IBuffer *data,
+                            ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEManufacturerData **value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory, 0xc09b39f8, 0x319a, 0x441e, 0x8d,0xe5, 0x66,0xa8,0x1e,0x87,0x7a,0x6c)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactoryVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory *This,
+        TrustLevel *trustLevel);
+
+    /*** IBluetoothLEManufacturerDataFactory methods ***/
+    HRESULT (STDMETHODCALLTYPE *Create)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory *This,
+        UINT16 id,
+        __x_ABI_CWindows_CStorage_CStreams_CIBuffer *data,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactoryVtbl;
+
+interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory {
+    CONST_VTBL __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactoryVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IBluetoothLEManufacturerDataFactory methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_Create(This,id,data,value) (This)->lpVtbl->Create(This,id,data,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_QueryInterface(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_AddRef(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_Release(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_GetIids(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_GetTrustLevel(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IBluetoothLEManufacturerDataFactory methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_Create(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory* This,UINT16 id,__x_ABI_CWindows_CStorage_CStreams_CIBuffer *data,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData **value) {
+    return This->lpVtbl->Create(This,id,data,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Devices_Bluetooth_Advertisement
+#define IID_IBluetoothLEManufacturerDataFactory IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory
+#define IBluetoothLEManufacturerDataFactoryVtbl __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactoryVtbl
+#define IBluetoothLEManufacturerDataFactory __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory
+#define IBluetoothLEManufacturerDataFactory_QueryInterface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_QueryInterface
+#define IBluetoothLEManufacturerDataFactory_AddRef __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_AddRef
+#define IBluetoothLEManufacturerDataFactory_Release __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_Release
+#define IBluetoothLEManufacturerDataFactory_GetIids __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_GetIids
+#define IBluetoothLEManufacturerDataFactory_GetRuntimeClassName __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_GetRuntimeClassName
+#define IBluetoothLEManufacturerDataFactory_GetTrustLevel __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_GetTrustLevel
+#define IBluetoothLEManufacturerDataFactory_Create __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_Create
+#endif /* WIDL_using_Windows_Devices_Bluetooth_Advertisement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerDataFactory_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.Devices.Bluetooth.Advertisement.BluetoothLEManufacturerData
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEManufacturerData_DEFINED
+#define RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEManufacturerData_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEManufacturerData[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','B','l','u','e','t','o','o','t','h','.','A','d','v','e','r','t','i','s','e','m','e','n','t','.','B','l','u','e','t','o','o','t','h','L','E','M','a','n','u','f','a','c','t','u','r','e','r','D','a','t','a',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEManufacturerData[] = L"Windows.Devices.Bluetooth.Advertisement.BluetoothLEManufacturerData";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEManufacturerData[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','B','l','u','e','t','o','o','t','h','.','A','d','v','e','r','t','i','s','e','m','e','n','t','.','B','l','u','e','t','o','o','t','h','L','E','M','a','n','u','f','a','c','t','u','r','e','r','D','a','t','a',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEManufacturerData_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IBluetoothLEAdvertisementWatcher interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher, 0xa6ac336f, 0xf3d3, 0x4297, 0x8d,0x6c, 0xc8,0x1e,0xa6,0x62,0x3f,0x40);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    MIDL_INTERFACE("a6ac336f-f3d3-4297-8d6c-c81ea6623f40")
+                    IBluetoothLEAdvertisementWatcher : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_MinSamplingInterval(
+                            ABI::Windows::Foundation::TimeSpan *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_MaxSamplingInterval(
+                            ABI::Windows::Foundation::TimeSpan *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_MinOutOfRangeTimeout(
+                            ABI::Windows::Foundation::TimeSpan *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_MaxOutOfRangeTimeout(
+                            ABI::Windows::Foundation::TimeSpan *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_Status(
+                            ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcherStatus *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_ScanningMode(
+                            ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEScanningMode *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_ScanningMode(
+                            ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEScanningMode value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_SignalStrengthFilter(
+                            ABI::Windows::Devices::Bluetooth::IBluetoothSignalStrengthFilter **value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_SignalStrengthFilter(
+                            ABI::Windows::Devices::Bluetooth::IBluetoothSignalStrengthFilter *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_AdvertisementFilter(
+                            ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementFilter **value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_AdvertisementFilter(
+                            ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementFilter *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE Start(
+                            ) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE Stop(
+                            ) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE add_Received(
+                            ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcher*,ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementReceivedEventArgs* > *handler,
+                            EventRegistrationToken *token) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE remove_Received(
+                            EventRegistrationToken token) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE add_Stopped(
+                            ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcher*,ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcherStoppedEventArgs* > *handler,
+                            EventRegistrationToken *token) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE remove_Stopped(
+                            EventRegistrationToken token) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher, 0xa6ac336f, 0xf3d3, 0x4297, 0x8d,0x6c, 0xc8,0x1e,0xa6,0x62,0x3f,0x40)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *This,
+        TrustLevel *trustLevel);
+
+    /*** IBluetoothLEAdvertisementWatcher methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_MinSamplingInterval)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *This,
+        __x_ABI_CWindows_CFoundation_CTimeSpan *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_MaxSamplingInterval)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *This,
+        __x_ABI_CWindows_CFoundation_CTimeSpan *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_MinOutOfRangeTimeout)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *This,
+        __x_ABI_CWindows_CFoundation_CTimeSpan *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_MaxOutOfRangeTimeout)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *This,
+        __x_ABI_CWindows_CFoundation_CTimeSpan *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Status)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementWatcherStatus *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_ScanningMode)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEScanningMode *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_ScanningMode)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEScanningMode value);
+
+    HRESULT (STDMETHODCALLTYPE *get_SignalStrengthFilter)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter **value);
+
+    HRESULT (STDMETHODCALLTYPE *put_SignalStrengthFilter)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_AdvertisementFilter)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter **value);
+
+    HRESULT (STDMETHODCALLTYPE *put_AdvertisementFilter)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter *value);
+
+    HRESULT (STDMETHODCALLTYPE *Start)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *This);
+
+    HRESULT (STDMETHODCALLTYPE *Stop)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *This);
+
+    HRESULT (STDMETHODCALLTYPE *add_Received)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *This,
+        __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs *handler,
+        EventRegistrationToken *token);
+
+    HRESULT (STDMETHODCALLTYPE *remove_Received)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *This,
+        EventRegistrationToken token);
+
+    HRESULT (STDMETHODCALLTYPE *add_Stopped)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *This,
+        __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs *handler,
+        EventRegistrationToken *token);
+
+    HRESULT (STDMETHODCALLTYPE *remove_Stopped)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *This,
+        EventRegistrationToken token);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherVtbl;
+
+interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher {
+    CONST_VTBL __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IBluetoothLEAdvertisementWatcher methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_get_MinSamplingInterval(This,value) (This)->lpVtbl->get_MinSamplingInterval(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_get_MaxSamplingInterval(This,value) (This)->lpVtbl->get_MaxSamplingInterval(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_get_MinOutOfRangeTimeout(This,value) (This)->lpVtbl->get_MinOutOfRangeTimeout(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_get_MaxOutOfRangeTimeout(This,value) (This)->lpVtbl->get_MaxOutOfRangeTimeout(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_get_Status(This,value) (This)->lpVtbl->get_Status(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_get_ScanningMode(This,value) (This)->lpVtbl->get_ScanningMode(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_put_ScanningMode(This,value) (This)->lpVtbl->put_ScanningMode(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_get_SignalStrengthFilter(This,value) (This)->lpVtbl->get_SignalStrengthFilter(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_put_SignalStrengthFilter(This,value) (This)->lpVtbl->put_SignalStrengthFilter(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_get_AdvertisementFilter(This,value) (This)->lpVtbl->get_AdvertisementFilter(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_put_AdvertisementFilter(This,value) (This)->lpVtbl->put_AdvertisementFilter(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_Start(This) (This)->lpVtbl->Start(This)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_Stop(This) (This)->lpVtbl->Stop(This)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_add_Received(This,handler,token) (This)->lpVtbl->add_Received(This,handler,token)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_remove_Received(This,token) (This)->lpVtbl->remove_Received(This,token)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_add_Stopped(This,handler,token) (This)->lpVtbl->add_Stopped(This,handler,token)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_remove_Stopped(This,token) (This)->lpVtbl->remove_Stopped(This,token)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_QueryInterface(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_AddRef(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_Release(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_GetIids(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_GetTrustLevel(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IBluetoothLEAdvertisementWatcher methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_get_MinSamplingInterval(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher* This,__x_ABI_CWindows_CFoundation_CTimeSpan *value) {
+    return This->lpVtbl->get_MinSamplingInterval(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_get_MaxSamplingInterval(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher* This,__x_ABI_CWindows_CFoundation_CTimeSpan *value) {
+    return This->lpVtbl->get_MaxSamplingInterval(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_get_MinOutOfRangeTimeout(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher* This,__x_ABI_CWindows_CFoundation_CTimeSpan *value) {
+    return This->lpVtbl->get_MinOutOfRangeTimeout(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_get_MaxOutOfRangeTimeout(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher* This,__x_ABI_CWindows_CFoundation_CTimeSpan *value) {
+    return This->lpVtbl->get_MaxOutOfRangeTimeout(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_get_Status(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementWatcherStatus *value) {
+    return This->lpVtbl->get_Status(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_get_ScanningMode(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEScanningMode *value) {
+    return This->lpVtbl->get_ScanningMode(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_put_ScanningMode(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEScanningMode value) {
+    return This->lpVtbl->put_ScanningMode(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_get_SignalStrengthFilter(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher* This,__x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter **value) {
+    return This->lpVtbl->get_SignalStrengthFilter(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_put_SignalStrengthFilter(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher* This,__x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter *value) {
+    return This->lpVtbl->put_SignalStrengthFilter(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_get_AdvertisementFilter(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter **value) {
+    return This->lpVtbl->get_AdvertisementFilter(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_put_AdvertisementFilter(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter *value) {
+    return This->lpVtbl->put_AdvertisementFilter(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_Start(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher* This) {
+    return This->lpVtbl->Start(This);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_Stop(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher* This) {
+    return This->lpVtbl->Stop(This);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_add_Received(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher* This,__FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs *handler,EventRegistrationToken *token) {
+    return This->lpVtbl->add_Received(This,handler,token);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_remove_Received(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher* This,EventRegistrationToken token) {
+    return This->lpVtbl->remove_Received(This,token);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_add_Stopped(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher* This,__FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs *handler,EventRegistrationToken *token) {
+    return This->lpVtbl->add_Stopped(This,handler,token);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_remove_Stopped(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher* This,EventRegistrationToken token) {
+    return This->lpVtbl->remove_Stopped(This,token);
+}
+#endif
+#ifdef WIDL_using_Windows_Devices_Bluetooth_Advertisement
+#define IID_IBluetoothLEAdvertisementWatcher IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher
+#define IBluetoothLEAdvertisementWatcherVtbl __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherVtbl
+#define IBluetoothLEAdvertisementWatcher __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher
+#define IBluetoothLEAdvertisementWatcher_QueryInterface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_QueryInterface
+#define IBluetoothLEAdvertisementWatcher_AddRef __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_AddRef
+#define IBluetoothLEAdvertisementWatcher_Release __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_Release
+#define IBluetoothLEAdvertisementWatcher_GetIids __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_GetIids
+#define IBluetoothLEAdvertisementWatcher_GetRuntimeClassName __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_GetRuntimeClassName
+#define IBluetoothLEAdvertisementWatcher_GetTrustLevel __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_GetTrustLevel
+#define IBluetoothLEAdvertisementWatcher_get_MinSamplingInterval __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_get_MinSamplingInterval
+#define IBluetoothLEAdvertisementWatcher_get_MaxSamplingInterval __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_get_MaxSamplingInterval
+#define IBluetoothLEAdvertisementWatcher_get_MinOutOfRangeTimeout __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_get_MinOutOfRangeTimeout
+#define IBluetoothLEAdvertisementWatcher_get_MaxOutOfRangeTimeout __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_get_MaxOutOfRangeTimeout
+#define IBluetoothLEAdvertisementWatcher_get_Status __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_get_Status
+#define IBluetoothLEAdvertisementWatcher_get_ScanningMode __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_get_ScanningMode
+#define IBluetoothLEAdvertisementWatcher_put_ScanningMode __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_put_ScanningMode
+#define IBluetoothLEAdvertisementWatcher_get_SignalStrengthFilter __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_get_SignalStrengthFilter
+#define IBluetoothLEAdvertisementWatcher_put_SignalStrengthFilter __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_put_SignalStrengthFilter
+#define IBluetoothLEAdvertisementWatcher_get_AdvertisementFilter __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_get_AdvertisementFilter
+#define IBluetoothLEAdvertisementWatcher_put_AdvertisementFilter __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_put_AdvertisementFilter
+#define IBluetoothLEAdvertisementWatcher_Start __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_Start
+#define IBluetoothLEAdvertisementWatcher_Stop __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_Stop
+#define IBluetoothLEAdvertisementWatcher_add_Received __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_add_Received
+#define IBluetoothLEAdvertisementWatcher_remove_Received __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_remove_Received
+#define IBluetoothLEAdvertisementWatcher_add_Stopped __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_add_Stopped
+#define IBluetoothLEAdvertisementWatcher_remove_Stopped __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_remove_Stopped
+#endif /* WIDL_using_Windows_Devices_Bluetooth_Advertisement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IBluetoothLEAdvertisementWatcher2 interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0xa0000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2, 0x01bf26bc, 0xb164, 0x5805, 0x90,0xa3, 0xe8,0xa7,0x99,0x7f,0xf2,0x25);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    MIDL_INTERFACE("01bf26bc-b164-5805-90a3-e8a7997ff225")
+                    IBluetoothLEAdvertisementWatcher2 : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_AllowExtendedAdvertisements(
+                            boolean *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_AllowExtendedAdvertisements(
+                            boolean value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2, 0x01bf26bc, 0xb164, 0x5805, 0x90,0xa3, 0xe8,0xa7,0x99,0x7f,0xf2,0x25)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2 *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2 *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2 *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2 *This,
+        TrustLevel *trustLevel);
+
+    /*** IBluetoothLEAdvertisementWatcher2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_AllowExtendedAdvertisements)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2 *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_AllowExtendedAdvertisements)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2 *This,
+        boolean value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2Vtbl;
+
+interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2 {
+    CONST_VTBL __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IBluetoothLEAdvertisementWatcher2 methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_get_AllowExtendedAdvertisements(This,value) (This)->lpVtbl->get_AllowExtendedAdvertisements(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_put_AllowExtendedAdvertisements(This,value) (This)->lpVtbl->put_AllowExtendedAdvertisements(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_QueryInterface(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_AddRef(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_Release(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_GetIids(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_GetTrustLevel(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IBluetoothLEAdvertisementWatcher2 methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_get_AllowExtendedAdvertisements(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2* This,boolean *value) {
+    return This->lpVtbl->get_AllowExtendedAdvertisements(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_put_AllowExtendedAdvertisements(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2* This,boolean value) {
+    return This->lpVtbl->put_AllowExtendedAdvertisements(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Devices_Bluetooth_Advertisement
+#define IID_IBluetoothLEAdvertisementWatcher2 IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2
+#define IBluetoothLEAdvertisementWatcher2Vtbl __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2Vtbl
+#define IBluetoothLEAdvertisementWatcher2 __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2
+#define IBluetoothLEAdvertisementWatcher2_QueryInterface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_QueryInterface
+#define IBluetoothLEAdvertisementWatcher2_AddRef __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_AddRef
+#define IBluetoothLEAdvertisementWatcher2_Release __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_Release
+#define IBluetoothLEAdvertisementWatcher2_GetIids __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_GetIids
+#define IBluetoothLEAdvertisementWatcher2_GetRuntimeClassName __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_GetRuntimeClassName
+#define IBluetoothLEAdvertisementWatcher2_GetTrustLevel __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_GetTrustLevel
+#define IBluetoothLEAdvertisementWatcher2_get_AllowExtendedAdvertisements __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_get_AllowExtendedAdvertisements
+#define IBluetoothLEAdvertisementWatcher2_put_AllowExtendedAdvertisements __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_put_AllowExtendedAdvertisements
+#endif /* WIDL_using_Windows_Devices_Bluetooth_Advertisement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher2_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0xa0000 */
+
+/*****************************************************************************
+ * IBluetoothLEAdvertisementWatcher3 interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x130000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3, 0x14d980be, 0x4002, 0x5dbe, 0x85,0x19, 0xff,0xca,0x6c,0xa3,0x89,0xf0);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    MIDL_INTERFACE("14d980be-4002-5dbe-8519-ffca6ca389f0")
+                    IBluetoothLEAdvertisementWatcher3 : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_UseUncoded1MPhy(
+                            boolean *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_UseUncoded1MPhy(
+                            boolean value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_UseCodedPhy(
+                            boolean *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_UseCodedPhy(
+                            boolean value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_ScanParameters(
+                            ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementScanParameters **value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_ScanParameters(
+                            ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementScanParameters *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_UseHardwareFilter(
+                            boolean *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_UseHardwareFilter(
+                            boolean value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3, 0x14d980be, 0x4002, 0x5dbe, 0x85,0x19, 0xff,0xca,0x6c,0xa3,0x89,0xf0)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3 *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3 *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3 *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3 *This,
+        TrustLevel *trustLevel);
+
+    /*** IBluetoothLEAdvertisementWatcher3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_UseUncoded1MPhy)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3 *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_UseUncoded1MPhy)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3 *This,
+        boolean value);
+
+    HRESULT (STDMETHODCALLTYPE *get_UseCodedPhy)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3 *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_UseCodedPhy)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3 *This,
+        boolean value);
+
+    HRESULT (STDMETHODCALLTYPE *get_ScanParameters)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3 *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters **value);
+
+    HRESULT (STDMETHODCALLTYPE *put_ScanParameters)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3 *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_UseHardwareFilter)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3 *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_UseHardwareFilter)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3 *This,
+        boolean value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3Vtbl;
+
+interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3 {
+    CONST_VTBL __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IBluetoothLEAdvertisementWatcher3 methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_get_UseUncoded1MPhy(This,value) (This)->lpVtbl->get_UseUncoded1MPhy(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_put_UseUncoded1MPhy(This,value) (This)->lpVtbl->put_UseUncoded1MPhy(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_get_UseCodedPhy(This,value) (This)->lpVtbl->get_UseCodedPhy(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_put_UseCodedPhy(This,value) (This)->lpVtbl->put_UseCodedPhy(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_get_ScanParameters(This,value) (This)->lpVtbl->get_ScanParameters(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_put_ScanParameters(This,value) (This)->lpVtbl->put_ScanParameters(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_get_UseHardwareFilter(This,value) (This)->lpVtbl->get_UseHardwareFilter(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_put_UseHardwareFilter(This,value) (This)->lpVtbl->put_UseHardwareFilter(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_QueryInterface(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_AddRef(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_Release(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_GetIids(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_GetTrustLevel(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IBluetoothLEAdvertisementWatcher3 methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_get_UseUncoded1MPhy(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3* This,boolean *value) {
+    return This->lpVtbl->get_UseUncoded1MPhy(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_put_UseUncoded1MPhy(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3* This,boolean value) {
+    return This->lpVtbl->put_UseUncoded1MPhy(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_get_UseCodedPhy(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3* This,boolean *value) {
+    return This->lpVtbl->get_UseCodedPhy(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_put_UseCodedPhy(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3* This,boolean value) {
+    return This->lpVtbl->put_UseCodedPhy(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_get_ScanParameters(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters **value) {
+    return This->lpVtbl->get_ScanParameters(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_put_ScanParameters(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters *value) {
+    return This->lpVtbl->put_ScanParameters(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_get_UseHardwareFilter(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3* This,boolean *value) {
+    return This->lpVtbl->get_UseHardwareFilter(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_put_UseHardwareFilter(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3* This,boolean value) {
+    return This->lpVtbl->put_UseHardwareFilter(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Devices_Bluetooth_Advertisement
+#define IID_IBluetoothLEAdvertisementWatcher3 IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3
+#define IBluetoothLEAdvertisementWatcher3Vtbl __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3Vtbl
+#define IBluetoothLEAdvertisementWatcher3 __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3
+#define IBluetoothLEAdvertisementWatcher3_QueryInterface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_QueryInterface
+#define IBluetoothLEAdvertisementWatcher3_AddRef __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_AddRef
+#define IBluetoothLEAdvertisementWatcher3_Release __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_Release
+#define IBluetoothLEAdvertisementWatcher3_GetIids __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_GetIids
+#define IBluetoothLEAdvertisementWatcher3_GetRuntimeClassName __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_GetRuntimeClassName
+#define IBluetoothLEAdvertisementWatcher3_GetTrustLevel __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_GetTrustLevel
+#define IBluetoothLEAdvertisementWatcher3_get_UseUncoded1MPhy __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_get_UseUncoded1MPhy
+#define IBluetoothLEAdvertisementWatcher3_put_UseUncoded1MPhy __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_put_UseUncoded1MPhy
+#define IBluetoothLEAdvertisementWatcher3_get_UseCodedPhy __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_get_UseCodedPhy
+#define IBluetoothLEAdvertisementWatcher3_put_UseCodedPhy __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_put_UseCodedPhy
+#define IBluetoothLEAdvertisementWatcher3_get_ScanParameters __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_get_ScanParameters
+#define IBluetoothLEAdvertisementWatcher3_put_ScanParameters __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_put_ScanParameters
+#define IBluetoothLEAdvertisementWatcher3_get_UseHardwareFilter __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_get_UseHardwareFilter
+#define IBluetoothLEAdvertisementWatcher3_put_UseHardwareFilter __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_put_UseHardwareFilter
+#endif /* WIDL_using_Windows_Devices_Bluetooth_Advertisement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher3_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x130000 */
+
+/*****************************************************************************
+ * IBluetoothLEAdvertisementWatcherFactory interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory, 0x9aaf2d56, 0x39ac, 0x453e, 0xb3,0x2a, 0x85,0xc6,0x57,0xe0,0x17,0xf1);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    MIDL_INTERFACE("9aaf2d56-39ac-453e-b32a-85c657e017f1")
+                    IBluetoothLEAdvertisementWatcherFactory : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE Create(
+                            ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementFilter *filter,
+                            ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementWatcher **value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory, 0x9aaf2d56, 0x39ac, 0x453e, 0xb3,0x2a, 0x85,0xc6,0x57,0xe0,0x17,0xf1)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactoryVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory *This,
+        TrustLevel *trustLevel);
+
+    /*** IBluetoothLEAdvertisementWatcherFactory methods ***/
+    HRESULT (STDMETHODCALLTYPE *Create)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter *filter,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactoryVtbl;
+
+interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory {
+    CONST_VTBL __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactoryVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IBluetoothLEAdvertisementWatcherFactory methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory_Create(This,filter,value) (This)->lpVtbl->Create(This,filter,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory_QueryInterface(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory_AddRef(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory_Release(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory_GetIids(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory_GetTrustLevel(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IBluetoothLEAdvertisementWatcherFactory methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory_Create(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter *filter,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher **value) {
+    return This->lpVtbl->Create(This,filter,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Devices_Bluetooth_Advertisement
+#define IID_IBluetoothLEAdvertisementWatcherFactory IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory
+#define IBluetoothLEAdvertisementWatcherFactoryVtbl __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactoryVtbl
+#define IBluetoothLEAdvertisementWatcherFactory __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory
+#define IBluetoothLEAdvertisementWatcherFactory_QueryInterface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory_QueryInterface
+#define IBluetoothLEAdvertisementWatcherFactory_AddRef __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory_AddRef
+#define IBluetoothLEAdvertisementWatcherFactory_Release __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory_Release
+#define IBluetoothLEAdvertisementWatcherFactory_GetIids __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory_GetIids
+#define IBluetoothLEAdvertisementWatcherFactory_GetRuntimeClassName __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory_GetRuntimeClassName
+#define IBluetoothLEAdvertisementWatcherFactory_GetTrustLevel __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory_GetTrustLevel
+#define IBluetoothLEAdvertisementWatcherFactory_Create __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory_Create
+#endif /* WIDL_using_Windows_Devices_Bluetooth_Advertisement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherFactory_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.Devices.Bluetooth.Advertisement.BluetoothLEAdvertisementWatcher
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementWatcher_DEFINED
+#define RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementWatcher_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementWatcher[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','B','l','u','e','t','o','o','t','h','.','A','d','v','e','r','t','i','s','e','m','e','n','t','.','B','l','u','e','t','o','o','t','h','L','E','A','d','v','e','r','t','i','s','e','m','e','n','t','W','a','t','c','h','e','r',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementWatcher[] = L"Windows.Devices.Bluetooth.Advertisement.BluetoothLEAdvertisementWatcher";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementWatcher[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','B','l','u','e','t','o','o','t','h','.','A','d','v','e','r','t','i','s','e','m','e','n','t','.','B','l','u','e','t','o','o','t','h','L','E','A','d','v','e','r','t','i','s','e','m','e','n','t','W','a','t','c','h','e','r',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementWatcher_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IBluetoothLEAdvertisementFilter interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter, 0x131eb0d3, 0xd04e, 0x47b1, 0x83,0x7e, 0x49,0x40,0x5b,0xf6,0xf8,0x0f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    MIDL_INTERFACE("131eb0d3-d04e-47b1-837e-49405bf6f80f")
+                    IBluetoothLEAdvertisementFilter : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_Advertisement(
+                            ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisement **value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_Advertisement(
+                            ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisement *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_BytePatterns(
+                            ABI::Windows::Foundation::Collections::IVector<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* > **value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter, 0x131eb0d3, 0xd04e, 0x47b1, 0x83,0x7e, 0x49,0x40,0x5b,0xf6,0xf8,0x0f)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilterVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter *This,
+        TrustLevel *trustLevel);
+
+    /*** IBluetoothLEAdvertisementFilter methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Advertisement)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement **value);
+
+    HRESULT (STDMETHODCALLTYPE *put_Advertisement)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_BytePatterns)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter *This,
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilterVtbl;
+
+interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter {
+    CONST_VTBL __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilterVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IBluetoothLEAdvertisementFilter methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_get_Advertisement(This,value) (This)->lpVtbl->get_Advertisement(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_put_Advertisement(This,value) (This)->lpVtbl->put_Advertisement(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_get_BytePatterns(This,value) (This)->lpVtbl->get_BytePatterns(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_QueryInterface(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_AddRef(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_Release(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_GetIids(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_GetTrustLevel(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IBluetoothLEAdvertisementFilter methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_get_Advertisement(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement **value) {
+    return This->lpVtbl->get_Advertisement(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_put_Advertisement(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement *value) {
+    return This->lpVtbl->put_Advertisement(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_get_BytePatterns(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter* This,__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern **value) {
+    return This->lpVtbl->get_BytePatterns(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Devices_Bluetooth_Advertisement
+#define IID_IBluetoothLEAdvertisementFilter IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter
+#define IBluetoothLEAdvertisementFilterVtbl __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilterVtbl
+#define IBluetoothLEAdvertisementFilter __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter
+#define IBluetoothLEAdvertisementFilter_QueryInterface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_QueryInterface
+#define IBluetoothLEAdvertisementFilter_AddRef __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_AddRef
+#define IBluetoothLEAdvertisementFilter_Release __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_Release
+#define IBluetoothLEAdvertisementFilter_GetIids __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_GetIids
+#define IBluetoothLEAdvertisementFilter_GetRuntimeClassName __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_GetRuntimeClassName
+#define IBluetoothLEAdvertisementFilter_GetTrustLevel __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_GetTrustLevel
+#define IBluetoothLEAdvertisementFilter_get_Advertisement __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_get_Advertisement
+#define IBluetoothLEAdvertisementFilter_put_Advertisement __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_put_Advertisement
+#define IBluetoothLEAdvertisementFilter_get_BytePatterns __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_get_BytePatterns
+#endif /* WIDL_using_Windows_Devices_Bluetooth_Advertisement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementFilter_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.Devices.Bluetooth.Advertisement.BluetoothLEAdvertisementFilter
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementFilter_DEFINED
+#define RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementFilter_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementFilter[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','B','l','u','e','t','o','o','t','h','.','A','d','v','e','r','t','i','s','e','m','e','n','t','.','B','l','u','e','t','o','o','t','h','L','E','A','d','v','e','r','t','i','s','e','m','e','n','t','F','i','l','t','e','r',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementFilter[] = L"Windows.Devices.Bluetooth.Advertisement.BluetoothLEAdvertisementFilter";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementFilter[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','B','l','u','e','t','o','o','t','h','.','A','d','v','e','r','t','i','s','e','m','e','n','t','.','B','l','u','e','t','o','o','t','h','L','E','A','d','v','e','r','t','i','s','e','m','e','n','t','F','i','l','t','e','r',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementFilter_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IBluetoothLEAdvertisementReceivedEventArgs interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0xa0000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs, 0x27987ddf, 0xe596, 0x41be, 0x8d,0x43, 0x9e,0x67,0x31,0xd4,0xa9,0x13);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    MIDL_INTERFACE("27987ddf-e596-41be-8d43-9e6731d4a913")
+                    IBluetoothLEAdvertisementReceivedEventArgs : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_RawSignalStrengthInDBm(
+                            INT16 *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_BluetoothAddress(
+                            UINT64 *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_AdvertisementType(
+                            ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementType *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_Timestamp(
+                            ABI::Windows::Foundation::DateTime *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_Advertisement(
+                            ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisement **value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs, 0x27987ddf, 0xe596, 0x41be, 0x8d,0x43, 0x9e,0x67,0x31,0xd4,0xa9,0x13)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs *This,
+        TrustLevel *trustLevel);
+
+    /*** IBluetoothLEAdvertisementReceivedEventArgs methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_RawSignalStrengthInDBm)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs *This,
+        INT16 *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_BluetoothAddress)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs *This,
+        UINT64 *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_AdvertisementType)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementType *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Timestamp)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs *This,
+        __x_ABI_CWindows_CFoundation_CDateTime *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Advertisement)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgsVtbl;
+
+interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs {
+    CONST_VTBL __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IBluetoothLEAdvertisementReceivedEventArgs methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_get_RawSignalStrengthInDBm(This,value) (This)->lpVtbl->get_RawSignalStrengthInDBm(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_get_BluetoothAddress(This,value) (This)->lpVtbl->get_BluetoothAddress(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_get_AdvertisementType(This,value) (This)->lpVtbl->get_AdvertisementType(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_get_Timestamp(This,value) (This)->lpVtbl->get_Timestamp(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_get_Advertisement(This,value) (This)->lpVtbl->get_Advertisement(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_QueryInterface(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_AddRef(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_Release(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_GetIids(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_GetTrustLevel(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IBluetoothLEAdvertisementReceivedEventArgs methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_get_RawSignalStrengthInDBm(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs* This,INT16 *value) {
+    return This->lpVtbl->get_RawSignalStrengthInDBm(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_get_BluetoothAddress(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs* This,UINT64 *value) {
+    return This->lpVtbl->get_BluetoothAddress(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_get_AdvertisementType(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementType *value) {
+    return This->lpVtbl->get_AdvertisementType(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_get_Timestamp(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs* This,__x_ABI_CWindows_CFoundation_CDateTime *value) {
+    return This->lpVtbl->get_Timestamp(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_get_Advertisement(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisement **value) {
+    return This->lpVtbl->get_Advertisement(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Devices_Bluetooth_Advertisement
+#define IID_IBluetoothLEAdvertisementReceivedEventArgs IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs
+#define IBluetoothLEAdvertisementReceivedEventArgsVtbl __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgsVtbl
+#define IBluetoothLEAdvertisementReceivedEventArgs __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs
+#define IBluetoothLEAdvertisementReceivedEventArgs_QueryInterface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_QueryInterface
+#define IBluetoothLEAdvertisementReceivedEventArgs_AddRef __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_AddRef
+#define IBluetoothLEAdvertisementReceivedEventArgs_Release __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_Release
+#define IBluetoothLEAdvertisementReceivedEventArgs_GetIids __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_GetIids
+#define IBluetoothLEAdvertisementReceivedEventArgs_GetRuntimeClassName __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_GetRuntimeClassName
+#define IBluetoothLEAdvertisementReceivedEventArgs_GetTrustLevel __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_GetTrustLevel
+#define IBluetoothLEAdvertisementReceivedEventArgs_get_RawSignalStrengthInDBm __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_get_RawSignalStrengthInDBm
+#define IBluetoothLEAdvertisementReceivedEventArgs_get_BluetoothAddress __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_get_BluetoothAddress
+#define IBluetoothLEAdvertisementReceivedEventArgs_get_AdvertisementType __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_get_AdvertisementType
+#define IBluetoothLEAdvertisementReceivedEventArgs_get_Timestamp __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_get_Timestamp
+#define IBluetoothLEAdvertisementReceivedEventArgs_get_Advertisement __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_get_Advertisement
+#endif /* WIDL_using_Windows_Devices_Bluetooth_Advertisement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0xa0000 */
+
+/*****************************************************************************
+ * IBluetoothLEAdvertisementReceivedEventArgs2 interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0xa0000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2, 0x12d9c87b, 0x0399, 0x5f0e, 0xa3,0x48, 0x53,0xb0,0x2b,0x6b,0x16,0x2e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    MIDL_INTERFACE("12d9c87b-0399-5f0e-a348-53b02b6b162e")
+                    IBluetoothLEAdvertisementReceivedEventArgs2 : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_BluetoothAddressType(
+                            ABI::Windows::Devices::Bluetooth::BluetoothAddressType *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_TransmitPowerLevelInDBm(
+                            ABI::Windows::Foundation::IReference<INT16 > **value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_IsAnonymous(
+                            boolean *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_IsConnectable(
+                            boolean *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_IsScannable(
+                            boolean *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_IsDirected(
+                            boolean *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_IsScanResponse(
+                            boolean *value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2, 0x12d9c87b, 0x0399, 0x5f0e, 0xa3,0x48, 0x53,0xb0,0x2b,0x6b,0x16,0x2e)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2 *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2 *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2 *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2 *This,
+        TrustLevel *trustLevel);
+
+    /*** IBluetoothLEAdvertisementReceivedEventArgs2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_BluetoothAddressType)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2 *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CBluetoothAddressType *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_TransmitPowerLevelInDBm)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2 *This,
+        __FIReference_1_INT16 **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsAnonymous)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2 *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsConnectable)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2 *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsScannable)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2 *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsDirected)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2 *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsScanResponse)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2 *This,
+        boolean *value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2Vtbl;
+
+interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2 {
+    CONST_VTBL __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IBluetoothLEAdvertisementReceivedEventArgs2 methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_get_BluetoothAddressType(This,value) (This)->lpVtbl->get_BluetoothAddressType(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_get_TransmitPowerLevelInDBm(This,value) (This)->lpVtbl->get_TransmitPowerLevelInDBm(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_get_IsAnonymous(This,value) (This)->lpVtbl->get_IsAnonymous(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_get_IsConnectable(This,value) (This)->lpVtbl->get_IsConnectable(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_get_IsScannable(This,value) (This)->lpVtbl->get_IsScannable(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_get_IsDirected(This,value) (This)->lpVtbl->get_IsDirected(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_get_IsScanResponse(This,value) (This)->lpVtbl->get_IsScanResponse(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_QueryInterface(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_AddRef(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_Release(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_GetIids(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_GetTrustLevel(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IBluetoothLEAdvertisementReceivedEventArgs2 methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_get_BluetoothAddressType(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2* This,__x_ABI_CWindows_CDevices_CBluetooth_CBluetoothAddressType *value) {
+    return This->lpVtbl->get_BluetoothAddressType(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_get_TransmitPowerLevelInDBm(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2* This,__FIReference_1_INT16 **value) {
+    return This->lpVtbl->get_TransmitPowerLevelInDBm(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_get_IsAnonymous(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2* This,boolean *value) {
+    return This->lpVtbl->get_IsAnonymous(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_get_IsConnectable(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2* This,boolean *value) {
+    return This->lpVtbl->get_IsConnectable(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_get_IsScannable(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2* This,boolean *value) {
+    return This->lpVtbl->get_IsScannable(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_get_IsDirected(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2* This,boolean *value) {
+    return This->lpVtbl->get_IsDirected(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_get_IsScanResponse(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2* This,boolean *value) {
+    return This->lpVtbl->get_IsScanResponse(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Devices_Bluetooth_Advertisement
+#define IID_IBluetoothLEAdvertisementReceivedEventArgs2 IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2
+#define IBluetoothLEAdvertisementReceivedEventArgs2Vtbl __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2Vtbl
+#define IBluetoothLEAdvertisementReceivedEventArgs2 __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2
+#define IBluetoothLEAdvertisementReceivedEventArgs2_QueryInterface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_QueryInterface
+#define IBluetoothLEAdvertisementReceivedEventArgs2_AddRef __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_AddRef
+#define IBluetoothLEAdvertisementReceivedEventArgs2_Release __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_Release
+#define IBluetoothLEAdvertisementReceivedEventArgs2_GetIids __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_GetIids
+#define IBluetoothLEAdvertisementReceivedEventArgs2_GetRuntimeClassName __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_GetRuntimeClassName
+#define IBluetoothLEAdvertisementReceivedEventArgs2_GetTrustLevel __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_GetTrustLevel
+#define IBluetoothLEAdvertisementReceivedEventArgs2_get_BluetoothAddressType __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_get_BluetoothAddressType
+#define IBluetoothLEAdvertisementReceivedEventArgs2_get_TransmitPowerLevelInDBm __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_get_TransmitPowerLevelInDBm
+#define IBluetoothLEAdvertisementReceivedEventArgs2_get_IsAnonymous __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_get_IsAnonymous
+#define IBluetoothLEAdvertisementReceivedEventArgs2_get_IsConnectable __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_get_IsConnectable
+#define IBluetoothLEAdvertisementReceivedEventArgs2_get_IsScannable __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_get_IsScannable
+#define IBluetoothLEAdvertisementReceivedEventArgs2_get_IsDirected __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_get_IsDirected
+#define IBluetoothLEAdvertisementReceivedEventArgs2_get_IsScanResponse __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_get_IsScanResponse
+#endif /* WIDL_using_Windows_Devices_Bluetooth_Advertisement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs2_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0xa0000 */
+
+/*****************************************************************************
+ * IBluetoothLEAdvertisementReceivedEventArgs3 interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x130000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3, 0x8d204b54, 0xff86, 0x5d84, 0xa2,0x5a, 0x13,0x7d,0xcc,0xd9,0x6f,0x7a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    MIDL_INTERFACE("8d204b54-ff86-5d84-a25a-137dccd96f7a")
+                    IBluetoothLEAdvertisementReceivedEventArgs3 : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_PrimaryPhy(
+                            ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementPhyType *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_SecondaryPhy(
+                            ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementPhyType *value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3, 0x8d204b54, 0xff86, 0x5d84, 0xa2,0x5a, 0x13,0x7d,0xcc,0xd9,0x6f,0x7a)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3 *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3 *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3 *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3 *This,
+        TrustLevel *trustLevel);
+
+    /*** IBluetoothLEAdvertisementReceivedEventArgs3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_PrimaryPhy)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3 *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementPhyType *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_SecondaryPhy)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3 *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementPhyType *value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3Vtbl;
+
+interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3 {
+    CONST_VTBL __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IBluetoothLEAdvertisementReceivedEventArgs3 methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_get_PrimaryPhy(This,value) (This)->lpVtbl->get_PrimaryPhy(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_get_SecondaryPhy(This,value) (This)->lpVtbl->get_SecondaryPhy(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_QueryInterface(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_AddRef(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_Release(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_GetIids(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_GetTrustLevel(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IBluetoothLEAdvertisementReceivedEventArgs3 methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_get_PrimaryPhy(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementPhyType *value) {
+    return This->lpVtbl->get_PrimaryPhy(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_get_SecondaryPhy(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementPhyType *value) {
+    return This->lpVtbl->get_SecondaryPhy(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Devices_Bluetooth_Advertisement
+#define IID_IBluetoothLEAdvertisementReceivedEventArgs3 IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3
+#define IBluetoothLEAdvertisementReceivedEventArgs3Vtbl __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3Vtbl
+#define IBluetoothLEAdvertisementReceivedEventArgs3 __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3
+#define IBluetoothLEAdvertisementReceivedEventArgs3_QueryInterface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_QueryInterface
+#define IBluetoothLEAdvertisementReceivedEventArgs3_AddRef __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_AddRef
+#define IBluetoothLEAdvertisementReceivedEventArgs3_Release __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_Release
+#define IBluetoothLEAdvertisementReceivedEventArgs3_GetIids __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_GetIids
+#define IBluetoothLEAdvertisementReceivedEventArgs3_GetRuntimeClassName __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_GetRuntimeClassName
+#define IBluetoothLEAdvertisementReceivedEventArgs3_GetTrustLevel __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_GetTrustLevel
+#define IBluetoothLEAdvertisementReceivedEventArgs3_get_PrimaryPhy __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_get_PrimaryPhy
+#define IBluetoothLEAdvertisementReceivedEventArgs3_get_SecondaryPhy __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_get_SecondaryPhy
+#endif /* WIDL_using_Windows_Devices_Bluetooth_Advertisement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs3_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x130000 */
+
+/*
+ * Class Windows.Devices.Bluetooth.Advertisement.BluetoothLEAdvertisementReceivedEventArgs
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementReceivedEventArgs_DEFINED
+#define RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementReceivedEventArgs_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementReceivedEventArgs[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','B','l','u','e','t','o','o','t','h','.','A','d','v','e','r','t','i','s','e','m','e','n','t','.','B','l','u','e','t','o','o','t','h','L','E','A','d','v','e','r','t','i','s','e','m','e','n','t','R','e','c','e','i','v','e','d','E','v','e','n','t','A','r','g','s',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementReceivedEventArgs[] = L"Windows.Devices.Bluetooth.Advertisement.BluetoothLEAdvertisementReceivedEventArgs";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementReceivedEventArgs[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','B','l','u','e','t','o','o','t','h','.','A','d','v','e','r','t','i','s','e','m','e','n','t','.','B','l','u','e','t','o','o','t','h','L','E','A','d','v','e','r','t','i','s','e','m','e','n','t','R','e','c','e','i','v','e','d','E','v','e','n','t','A','r','g','s',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementReceivedEventArgs_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IBluetoothLEAdvertisementWatcherStoppedEventArgs interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs, 0xdd40f84d, 0xe7b9, 0x43e3, 0x9c,0x04, 0x06,0x85,0xd0,0x85,0xfd,0x8c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    MIDL_INTERFACE("dd40f84d-e7b9-43e3-9c04-0685d085fd8c")
+                    IBluetoothLEAdvertisementWatcherStoppedEventArgs : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_Error(
+                            ABI::Windows::Devices::Bluetooth::BluetoothError *value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs, 0xdd40f84d, 0xe7b9, 0x43e3, 0x9c,0x04, 0x06,0x85,0xd0,0x85,0xfd,0x8c)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs *This,
+        TrustLevel *trustLevel);
+
+    /*** IBluetoothLEAdvertisementWatcherStoppedEventArgs methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Error)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CBluetoothError *value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgsVtbl;
+
+interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs {
+    CONST_VTBL __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IBluetoothLEAdvertisementWatcherStoppedEventArgs methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_get_Error(This,value) (This)->lpVtbl->get_Error(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_QueryInterface(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_AddRef(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_Release(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_GetIids(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_GetTrustLevel(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IBluetoothLEAdvertisementWatcherStoppedEventArgs methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_get_Error(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs* This,__x_ABI_CWindows_CDevices_CBluetooth_CBluetoothError *value) {
+    return This->lpVtbl->get_Error(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Devices_Bluetooth_Advertisement
+#define IID_IBluetoothLEAdvertisementWatcherStoppedEventArgs IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs
+#define IBluetoothLEAdvertisementWatcherStoppedEventArgsVtbl __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgsVtbl
+#define IBluetoothLEAdvertisementWatcherStoppedEventArgs __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs
+#define IBluetoothLEAdvertisementWatcherStoppedEventArgs_QueryInterface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_QueryInterface
+#define IBluetoothLEAdvertisementWatcherStoppedEventArgs_AddRef __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_AddRef
+#define IBluetoothLEAdvertisementWatcherStoppedEventArgs_Release __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_Release
+#define IBluetoothLEAdvertisementWatcherStoppedEventArgs_GetIids __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_GetIids
+#define IBluetoothLEAdvertisementWatcherStoppedEventArgs_GetRuntimeClassName __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_GetRuntimeClassName
+#define IBluetoothLEAdvertisementWatcherStoppedEventArgs_GetTrustLevel __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_GetTrustLevel
+#define IBluetoothLEAdvertisementWatcherStoppedEventArgs_get_Error __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_get_Error
+#endif /* WIDL_using_Windows_Devices_Bluetooth_Advertisement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.Devices.Bluetooth.Advertisement.BluetoothLEAdvertisementWatcherStoppedEventArgs
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementWatcherStoppedEventArgs_DEFINED
+#define RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementWatcherStoppedEventArgs_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementWatcherStoppedEventArgs[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','B','l','u','e','t','o','o','t','h','.','A','d','v','e','r','t','i','s','e','m','e','n','t','.','B','l','u','e','t','o','o','t','h','L','E','A','d','v','e','r','t','i','s','e','m','e','n','t','W','a','t','c','h','e','r','S','t','o','p','p','e','d','E','v','e','n','t','A','r','g','s',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementWatcherStoppedEventArgs[] = L"Windows.Devices.Bluetooth.Advertisement.BluetoothLEAdvertisementWatcherStoppedEventArgs";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementWatcherStoppedEventArgs[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','B','l','u','e','t','o','o','t','h','.','A','d','v','e','r','t','i','s','e','m','e','n','t','.','B','l','u','e','t','o','o','t','h','L','E','A','d','v','e','r','t','i','s','e','m','e','n','t','W','a','t','c','h','e','r','S','t','o','p','p','e','d','E','v','e','n','t','A','r','g','s',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementWatcherStoppedEventArgs_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IBluetoothLEAdvertisementBytePattern interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern, 0xfbfad7f2, 0xb9c5, 0x4a08, 0xbc,0x51, 0x50,0x2f,0x8e,0xf6,0x8a,0x79);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    MIDL_INTERFACE("fbfad7f2-b9c5-4a08-bc51-502f8ef68a79")
+                    IBluetoothLEAdvertisementBytePattern : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_DataType(
+                            BYTE *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_DataType(
+                            BYTE value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_Offset(
+                            INT16 *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_Offset(
+                            INT16 value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_Data(
+                            ABI::Windows::Storage::Streams::IBuffer **value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_Data(
+                            ABI::Windows::Storage::Streams::IBuffer *value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern, 0xfbfad7f2, 0xb9c5, 0x4a08, 0xbc,0x51, 0x50,0x2f,0x8e,0xf6,0x8a,0x79)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern *This,
+        TrustLevel *trustLevel);
+
+    /*** IBluetoothLEAdvertisementBytePattern methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_DataType)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern *This,
+        BYTE *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_DataType)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern *This,
+        BYTE value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Offset)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern *This,
+        INT16 *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_Offset)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern *This,
+        INT16 value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Data)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern *This,
+        __x_ABI_CWindows_CStorage_CStreams_CIBuffer **value);
+
+    HRESULT (STDMETHODCALLTYPE *put_Data)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern *This,
+        __x_ABI_CWindows_CStorage_CStreams_CIBuffer *value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternVtbl;
+
+interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern {
+    CONST_VTBL __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IBluetoothLEAdvertisementBytePattern methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_get_DataType(This,value) (This)->lpVtbl->get_DataType(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_put_DataType(This,value) (This)->lpVtbl->put_DataType(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_get_Offset(This,value) (This)->lpVtbl->get_Offset(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_put_Offset(This,value) (This)->lpVtbl->put_Offset(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_get_Data(This,value) (This)->lpVtbl->get_Data(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_put_Data(This,value) (This)->lpVtbl->put_Data(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_QueryInterface(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_AddRef(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_Release(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_GetIids(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_GetTrustLevel(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IBluetoothLEAdvertisementBytePattern methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_get_DataType(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern* This,BYTE *value) {
+    return This->lpVtbl->get_DataType(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_put_DataType(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern* This,BYTE value) {
+    return This->lpVtbl->put_DataType(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_get_Offset(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern* This,INT16 *value) {
+    return This->lpVtbl->get_Offset(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_put_Offset(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern* This,INT16 value) {
+    return This->lpVtbl->put_Offset(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_get_Data(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern* This,__x_ABI_CWindows_CStorage_CStreams_CIBuffer **value) {
+    return This->lpVtbl->get_Data(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_put_Data(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern* This,__x_ABI_CWindows_CStorage_CStreams_CIBuffer *value) {
+    return This->lpVtbl->put_Data(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Devices_Bluetooth_Advertisement
+#define IID_IBluetoothLEAdvertisementBytePattern IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern
+#define IBluetoothLEAdvertisementBytePatternVtbl __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternVtbl
+#define IBluetoothLEAdvertisementBytePattern __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern
+#define IBluetoothLEAdvertisementBytePattern_QueryInterface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_QueryInterface
+#define IBluetoothLEAdvertisementBytePattern_AddRef __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_AddRef
+#define IBluetoothLEAdvertisementBytePattern_Release __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_Release
+#define IBluetoothLEAdvertisementBytePattern_GetIids __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_GetIids
+#define IBluetoothLEAdvertisementBytePattern_GetRuntimeClassName __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_GetRuntimeClassName
+#define IBluetoothLEAdvertisementBytePattern_GetTrustLevel __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_GetTrustLevel
+#define IBluetoothLEAdvertisementBytePattern_get_DataType __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_get_DataType
+#define IBluetoothLEAdvertisementBytePattern_put_DataType __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_put_DataType
+#define IBluetoothLEAdvertisementBytePattern_get_Offset __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_get_Offset
+#define IBluetoothLEAdvertisementBytePattern_put_Offset __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_put_Offset
+#define IBluetoothLEAdvertisementBytePattern_get_Data __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_get_Data
+#define IBluetoothLEAdvertisementBytePattern_put_Data __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_put_Data
+#endif /* WIDL_using_Windows_Devices_Bluetooth_Advertisement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IBluetoothLEAdvertisementBytePatternFactory interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory, 0xc2e24d73, 0xfd5c, 0x4ec3, 0xbe,0x2a, 0x9c,0xa6,0xfa,0x11,0xb7,0xbd);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    MIDL_INTERFACE("c2e24d73-fd5c-4ec3-be2a-9ca6fa11b7bd")
+                    IBluetoothLEAdvertisementBytePatternFactory : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE Create(
+                            BYTE type,
+                            INT16 offset,
+                            ABI::Windows::Storage::Streams::IBuffer *data,
+                            ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementBytePattern **value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory, 0xc2e24d73, 0xfd5c, 0x4ec3, 0xbe,0x2a, 0x9c,0xa6,0xfa,0x11,0xb7,0xbd)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactoryVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory *This,
+        TrustLevel *trustLevel);
+
+    /*** IBluetoothLEAdvertisementBytePatternFactory methods ***/
+    HRESULT (STDMETHODCALLTYPE *Create)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory *This,
+        BYTE type,
+        INT16 offset,
+        __x_ABI_CWindows_CStorage_CStreams_CIBuffer *data,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactoryVtbl;
+
+interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory {
+    CONST_VTBL __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactoryVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IBluetoothLEAdvertisementBytePatternFactory methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_Create(This,type,offset,data,value) (This)->lpVtbl->Create(This,type,offset,data,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_QueryInterface(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_AddRef(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_Release(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_GetIids(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_GetTrustLevel(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IBluetoothLEAdvertisementBytePatternFactory methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_Create(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory* This,BYTE type,INT16 offset,__x_ABI_CWindows_CStorage_CStreams_CIBuffer *data,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern **value) {
+    return This->lpVtbl->Create(This,type,offset,data,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Devices_Bluetooth_Advertisement
+#define IID_IBluetoothLEAdvertisementBytePatternFactory IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory
+#define IBluetoothLEAdvertisementBytePatternFactoryVtbl __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactoryVtbl
+#define IBluetoothLEAdvertisementBytePatternFactory __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory
+#define IBluetoothLEAdvertisementBytePatternFactory_QueryInterface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_QueryInterface
+#define IBluetoothLEAdvertisementBytePatternFactory_AddRef __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_AddRef
+#define IBluetoothLEAdvertisementBytePatternFactory_Release __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_Release
+#define IBluetoothLEAdvertisementBytePatternFactory_GetIids __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_GetIids
+#define IBluetoothLEAdvertisementBytePatternFactory_GetRuntimeClassName __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_GetRuntimeClassName
+#define IBluetoothLEAdvertisementBytePatternFactory_GetTrustLevel __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_GetTrustLevel
+#define IBluetoothLEAdvertisementBytePatternFactory_Create __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_Create
+#endif /* WIDL_using_Windows_Devices_Bluetooth_Advertisement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePatternFactory_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.Devices.Bluetooth.Advertisement.BluetoothLEAdvertisementBytePattern
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementBytePattern_DEFINED
+#define RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementBytePattern_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementBytePattern[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','B','l','u','e','t','o','o','t','h','.','A','d','v','e','r','t','i','s','e','m','e','n','t','.','B','l','u','e','t','o','o','t','h','L','E','A','d','v','e','r','t','i','s','e','m','e','n','t','B','y','t','e','P','a','t','t','e','r','n',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementBytePattern[] = L"Windows.Devices.Bluetooth.Advertisement.BluetoothLEAdvertisementBytePattern";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementBytePattern[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','B','l','u','e','t','o','o','t','h','.','A','d','v','e','r','t','i','s','e','m','e','n','t','.','B','l','u','e','t','o','o','t','h','L','E','A','d','v','e','r','t','i','s','e','m','e','n','t','B','y','t','e','P','a','t','t','e','r','n',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementBytePattern_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IBluetoothLEAdvertisementScanParameters interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x130000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters, 0x94f91413, 0x63d9, 0x53bd, 0xaf,0x4c, 0xe6,0xb1,0xa6,0x51,0x45,0x95);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    MIDL_INTERFACE("94f91413-63d9-53bd-af4c-e6b1a6514595")
+                    IBluetoothLEAdvertisementScanParameters : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_ScanWindow(
+                            UINT16 *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_ScanInterval(
+                            UINT16 *value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters, 0x94f91413, 0x63d9, 0x53bd, 0xaf,0x4c, 0xe6,0xb1,0xa6,0x51,0x45,0x95)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters *This,
+        TrustLevel *trustLevel);
+
+    /*** IBluetoothLEAdvertisementScanParameters methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_ScanWindow)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters *This,
+        UINT16 *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_ScanInterval)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters *This,
+        UINT16 *value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersVtbl;
+
+interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters {
+    CONST_VTBL __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IBluetoothLEAdvertisementScanParameters methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_get_ScanWindow(This,value) (This)->lpVtbl->get_ScanWindow(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_get_ScanInterval(This,value) (This)->lpVtbl->get_ScanInterval(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_QueryInterface(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_AddRef(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_Release(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_GetIids(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_GetTrustLevel(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IBluetoothLEAdvertisementScanParameters methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_get_ScanWindow(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters* This,UINT16 *value) {
+    return This->lpVtbl->get_ScanWindow(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_get_ScanInterval(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters* This,UINT16 *value) {
+    return This->lpVtbl->get_ScanInterval(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Devices_Bluetooth_Advertisement
+#define IID_IBluetoothLEAdvertisementScanParameters IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters
+#define IBluetoothLEAdvertisementScanParametersVtbl __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersVtbl
+#define IBluetoothLEAdvertisementScanParameters __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters
+#define IBluetoothLEAdvertisementScanParameters_QueryInterface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_QueryInterface
+#define IBluetoothLEAdvertisementScanParameters_AddRef __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_AddRef
+#define IBluetoothLEAdvertisementScanParameters_Release __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_Release
+#define IBluetoothLEAdvertisementScanParameters_GetIids __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_GetIids
+#define IBluetoothLEAdvertisementScanParameters_GetRuntimeClassName __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_GetRuntimeClassName
+#define IBluetoothLEAdvertisementScanParameters_GetTrustLevel __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_GetTrustLevel
+#define IBluetoothLEAdvertisementScanParameters_get_ScanWindow __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_get_ScanWindow
+#define IBluetoothLEAdvertisementScanParameters_get_ScanInterval __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_get_ScanInterval
+#endif /* WIDL_using_Windows_Devices_Bluetooth_Advertisement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x130000 */
+
+/*****************************************************************************
+ * IBluetoothLEAdvertisementScanParametersStatics interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x130000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics, 0x548e39cd, 0x3c9e, 0x5f8d, 0xb5,0xe1, 0xad,0xeb,0xed,0x5c,0x35,0x7c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                namespace Advertisement {
+                    MIDL_INTERFACE("548e39cd-3c9e-5f8d-b5e1-adebed5c357c")
+                    IBluetoothLEAdvertisementScanParametersStatics : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE CoexistenceOptimized(
+                            ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementScanParameters **value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE LowLatency(
+                            ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementScanParameters **value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics, 0x548e39cd, 0x3c9e, 0x5f8d, 0xb5,0xe1, 0xad,0xeb,0xed,0x5c,0x35,0x7c)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStaticsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics *This,
+        TrustLevel *trustLevel);
+
+    /*** IBluetoothLEAdvertisementScanParametersStatics methods ***/
+    HRESULT (STDMETHODCALLTYPE *CoexistenceOptimized)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters **value);
+
+    HRESULT (STDMETHODCALLTYPE *LowLatency)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStaticsVtbl;
+
+interface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics {
+    CONST_VTBL __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStaticsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IBluetoothLEAdvertisementScanParametersStatics methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_CoexistenceOptimized(This,value) (This)->lpVtbl->CoexistenceOptimized(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_LowLatency(This,value) (This)->lpVtbl->LowLatency(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_QueryInterface(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_AddRef(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_Release(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_GetIids(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_GetTrustLevel(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IBluetoothLEAdvertisementScanParametersStatics methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_CoexistenceOptimized(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters **value) {
+    return This->lpVtbl->CoexistenceOptimized(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_LowLatency(__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParameters **value) {
+    return This->lpVtbl->LowLatency(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Devices_Bluetooth_Advertisement
+#define IID_IBluetoothLEAdvertisementScanParametersStatics IID___x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics
+#define IBluetoothLEAdvertisementScanParametersStaticsVtbl __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStaticsVtbl
+#define IBluetoothLEAdvertisementScanParametersStatics __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics
+#define IBluetoothLEAdvertisementScanParametersStatics_QueryInterface __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_QueryInterface
+#define IBluetoothLEAdvertisementScanParametersStatics_AddRef __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_AddRef
+#define IBluetoothLEAdvertisementScanParametersStatics_Release __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_Release
+#define IBluetoothLEAdvertisementScanParametersStatics_GetIids __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_GetIids
+#define IBluetoothLEAdvertisementScanParametersStatics_GetRuntimeClassName __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_GetRuntimeClassName
+#define IBluetoothLEAdvertisementScanParametersStatics_GetTrustLevel __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_GetTrustLevel
+#define IBluetoothLEAdvertisementScanParametersStatics_CoexistenceOptimized __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_CoexistenceOptimized
+#define IBluetoothLEAdvertisementScanParametersStatics_LowLatency __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_LowLatency
+#endif /* WIDL_using_Windows_Devices_Bluetooth_Advertisement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementScanParametersStatics_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x130000 */
+
+/*
+ * Class Windows.Devices.Bluetooth.Advertisement.BluetoothLEAdvertisementScanParameters
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x130000
+#ifndef RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementScanParameters_DEFINED
+#define RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementScanParameters_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementScanParameters[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','B','l','u','e','t','o','o','t','h','.','A','d','v','e','r','t','i','s','e','m','e','n','t','.','B','l','u','e','t','o','o','t','h','L','E','A','d','v','e','r','t','i','s','e','m','e','n','t','S','c','a','n','P','a','r','a','m','e','t','e','r','s',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementScanParameters[] = L"Windows.Devices.Bluetooth.Advertisement.BluetoothLEAdvertisementScanParameters";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementScanParameters[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','B','l','u','e','t','o','o','t','h','.','A','d','v','e','r','t','i','s','e','m','e','n','t','.','B','l','u','e','t','o','o','t','h','L','E','A','d','v','e','r','t','i','s','e','m','e','n','t','S','c','a','n','P','a','r','a','m','e','t','e','r','s',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementScanParameters_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x130000 */
+
+/*****************************************************************************
+ * IReference<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementFlags > interface
+ */
+#ifndef ____FIReference_1_BluetoothLEAdvertisementFlags_INTERFACE_DEFINED__
+#define ____FIReference_1_BluetoothLEAdvertisementFlags_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIReference_1_BluetoothLEAdvertisementFlags, 0x91c0ba96, 0x9e69, 0x5b82, 0xbf,0x1d, 0x83,0xab,0x2a,0x50,0x9c,0x53);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("91c0ba96-9e69-5b82-bf1d-83ab2a509c53")
+            IReference<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementFlags > : IReference_impl<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementFlags >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIReference_1_BluetoothLEAdvertisementFlags, 0x91c0ba96, 0x9e69, 0x5b82, 0xbf,0x1d, 0x83,0xab,0x2a,0x50,0x9c,0x53)
+#endif
+#else
+typedef struct __FIReference_1_BluetoothLEAdvertisementFlagsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIReference_1_BluetoothLEAdvertisementFlags *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIReference_1_BluetoothLEAdvertisementFlags *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIReference_1_BluetoothLEAdvertisementFlags *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIReference_1_BluetoothLEAdvertisementFlags *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIReference_1_BluetoothLEAdvertisementFlags *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIReference_1_BluetoothLEAdvertisementFlags *This,
+        TrustLevel *trustLevel);
+
+    /*** IReference<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementFlags > methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Value)(
+        __FIReference_1_BluetoothLEAdvertisementFlags *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementFlags *value);
+
+    END_INTERFACE
+} __FIReference_1_BluetoothLEAdvertisementFlagsVtbl;
+
+interface __FIReference_1_BluetoothLEAdvertisementFlags {
+    CONST_VTBL __FIReference_1_BluetoothLEAdvertisementFlagsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIReference_1_BluetoothLEAdvertisementFlags_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIReference_1_BluetoothLEAdvertisementFlags_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIReference_1_BluetoothLEAdvertisementFlags_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIReference_1_BluetoothLEAdvertisementFlags_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIReference_1_BluetoothLEAdvertisementFlags_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIReference_1_BluetoothLEAdvertisementFlags_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IReference<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementFlags > methods ***/
+#define __FIReference_1_BluetoothLEAdvertisementFlags_get_Value(This,value) (This)->lpVtbl->get_Value(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIReference_1_BluetoothLEAdvertisementFlags_QueryInterface(__FIReference_1_BluetoothLEAdvertisementFlags* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIReference_1_BluetoothLEAdvertisementFlags_AddRef(__FIReference_1_BluetoothLEAdvertisementFlags* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIReference_1_BluetoothLEAdvertisementFlags_Release(__FIReference_1_BluetoothLEAdvertisementFlags* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIReference_1_BluetoothLEAdvertisementFlags_GetIids(__FIReference_1_BluetoothLEAdvertisementFlags* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIReference_1_BluetoothLEAdvertisementFlags_GetRuntimeClassName(__FIReference_1_BluetoothLEAdvertisementFlags* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIReference_1_BluetoothLEAdvertisementFlags_GetTrustLevel(__FIReference_1_BluetoothLEAdvertisementFlags* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IReference<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementFlags > methods ***/
+static inline HRESULT __FIReference_1_BluetoothLEAdvertisementFlags_get_Value(__FIReference_1_BluetoothLEAdvertisementFlags* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CBluetoothLEAdvertisementFlags *value) {
+    return This->lpVtbl->get_Value(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_IReference_BluetoothLEAdvertisementFlags IID___FIReference_1_BluetoothLEAdvertisementFlags
+#define IReference_BluetoothLEAdvertisementFlagsVtbl __FIReference_1_BluetoothLEAdvertisementFlagsVtbl
+#define IReference_BluetoothLEAdvertisementFlags __FIReference_1_BluetoothLEAdvertisementFlags
+#define IReference_BluetoothLEAdvertisementFlags_QueryInterface __FIReference_1_BluetoothLEAdvertisementFlags_QueryInterface
+#define IReference_BluetoothLEAdvertisementFlags_AddRef __FIReference_1_BluetoothLEAdvertisementFlags_AddRef
+#define IReference_BluetoothLEAdvertisementFlags_Release __FIReference_1_BluetoothLEAdvertisementFlags_Release
+#define IReference_BluetoothLEAdvertisementFlags_GetIids __FIReference_1_BluetoothLEAdvertisementFlags_GetIids
+#define IReference_BluetoothLEAdvertisementFlags_GetRuntimeClassName __FIReference_1_BluetoothLEAdvertisementFlags_GetRuntimeClassName
+#define IReference_BluetoothLEAdvertisementFlags_GetTrustLevel __FIReference_1_BluetoothLEAdvertisementFlags_GetTrustLevel
+#define IReference_BluetoothLEAdvertisementFlags_get_Value __FIReference_1_BluetoothLEAdvertisementFlags_get_Value
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FIReference_1_BluetoothLEAdvertisementFlags_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IVector<GUID > interface
+ */
+#ifndef ____FIVector_1_GUID_INTERFACE_DEFINED__
+#define ____FIVector_1_GUID_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIVector_1_GUID, 0x482e676d, 0xb913, 0x5ec1, 0xaf,0xa8, 0x5f,0x96,0x92,0x2e,0x94,0xae);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                template<>
+                MIDL_INTERFACE("482e676d-b913-5ec1-afa8-5f96922e94ae")
+                IVector<GUID > : IVector_impl<GUID >
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIVector_1_GUID, 0x482e676d, 0xb913, 0x5ec1, 0xaf,0xa8, 0x5f,0x96,0x92,0x2e,0x94,0xae)
+#endif
+#else
+typedef struct __FIVector_1_GUIDVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIVector_1_GUID *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIVector_1_GUID *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIVector_1_GUID *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIVector_1_GUID *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIVector_1_GUID *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIVector_1_GUID *This,
+        TrustLevel *trustLevel);
+
+    /*** IVector<GUID > methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetAt)(
+        __FIVector_1_GUID *This,
+        UINT32 index,
+        GUID *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Size)(
+        __FIVector_1_GUID *This,
+        UINT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetView)(
+        __FIVector_1_GUID *This,
+        __FIVectorView_1_GUID **value);
+
+    HRESULT (STDMETHODCALLTYPE *IndexOf)(
+        __FIVector_1_GUID *This,
+        GUID element,
+        UINT32 *index,
+        BOOLEAN *value);
+
+    HRESULT (STDMETHODCALLTYPE *SetAt)(
+        __FIVector_1_GUID *This,
+        UINT32 index,
+        GUID value);
+
+    HRESULT (STDMETHODCALLTYPE *InsertAt)(
+        __FIVector_1_GUID *This,
+        UINT32 index,
+        GUID value);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveAt)(
+        __FIVector_1_GUID *This,
+        UINT32 index);
+
+    HRESULT (STDMETHODCALLTYPE *Append)(
+        __FIVector_1_GUID *This,
+        GUID value);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveAtEnd)(
+        __FIVector_1_GUID *This);
+
+    HRESULT (STDMETHODCALLTYPE *Clear)(
+        __FIVector_1_GUID *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetMany)(
+        __FIVector_1_GUID *This,
+        UINT32 start_index,
+        UINT32 items_size,
+        GUID *items,
+        UINT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *ReplaceAll)(
+        __FIVector_1_GUID *This,
+        UINT32 count,
+        GUID *items);
+
+    END_INTERFACE
+} __FIVector_1_GUIDVtbl;
+
+interface __FIVector_1_GUID {
+    CONST_VTBL __FIVector_1_GUIDVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIVector_1_GUID_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIVector_1_GUID_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIVector_1_GUID_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIVector_1_GUID_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIVector_1_GUID_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIVector_1_GUID_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IVector<GUID > methods ***/
+#define __FIVector_1_GUID_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
+#define __FIVector_1_GUID_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
+#define __FIVector_1_GUID_GetView(This,value) (This)->lpVtbl->GetView(This,value)
+#define __FIVector_1_GUID_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
+#define __FIVector_1_GUID_SetAt(This,index,value) (This)->lpVtbl->SetAt(This,index,value)
+#define __FIVector_1_GUID_InsertAt(This,index,value) (This)->lpVtbl->InsertAt(This,index,value)
+#define __FIVector_1_GUID_RemoveAt(This,index) (This)->lpVtbl->RemoveAt(This,index)
+#define __FIVector_1_GUID_Append(This,value) (This)->lpVtbl->Append(This,value)
+#define __FIVector_1_GUID_RemoveAtEnd(This) (This)->lpVtbl->RemoveAtEnd(This)
+#define __FIVector_1_GUID_Clear(This) (This)->lpVtbl->Clear(This)
+#define __FIVector_1_GUID_GetMany(This,start_index,items_size,items,value) (This)->lpVtbl->GetMany(This,start_index,items_size,items,value)
+#define __FIVector_1_GUID_ReplaceAll(This,count,items) (This)->lpVtbl->ReplaceAll(This,count,items)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIVector_1_GUID_QueryInterface(__FIVector_1_GUID* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIVector_1_GUID_AddRef(__FIVector_1_GUID* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIVector_1_GUID_Release(__FIVector_1_GUID* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIVector_1_GUID_GetIids(__FIVector_1_GUID* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIVector_1_GUID_GetRuntimeClassName(__FIVector_1_GUID* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIVector_1_GUID_GetTrustLevel(__FIVector_1_GUID* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IVector<GUID > methods ***/
+static inline HRESULT __FIVector_1_GUID_GetAt(__FIVector_1_GUID* This,UINT32 index,GUID *value) {
+    return This->lpVtbl->GetAt(This,index,value);
+}
+static inline HRESULT __FIVector_1_GUID_get_Size(__FIVector_1_GUID* This,UINT32 *value) {
+    return This->lpVtbl->get_Size(This,value);
+}
+static inline HRESULT __FIVector_1_GUID_GetView(__FIVector_1_GUID* This,__FIVectorView_1_GUID **value) {
+    return This->lpVtbl->GetView(This,value);
+}
+static inline HRESULT __FIVector_1_GUID_IndexOf(__FIVector_1_GUID* This,GUID element,UINT32 *index,BOOLEAN *value) {
+    return This->lpVtbl->IndexOf(This,element,index,value);
+}
+static inline HRESULT __FIVector_1_GUID_SetAt(__FIVector_1_GUID* This,UINT32 index,GUID value) {
+    return This->lpVtbl->SetAt(This,index,value);
+}
+static inline HRESULT __FIVector_1_GUID_InsertAt(__FIVector_1_GUID* This,UINT32 index,GUID value) {
+    return This->lpVtbl->InsertAt(This,index,value);
+}
+static inline HRESULT __FIVector_1_GUID_RemoveAt(__FIVector_1_GUID* This,UINT32 index) {
+    return This->lpVtbl->RemoveAt(This,index);
+}
+static inline HRESULT __FIVector_1_GUID_Append(__FIVector_1_GUID* This,GUID value) {
+    return This->lpVtbl->Append(This,value);
+}
+static inline HRESULT __FIVector_1_GUID_RemoveAtEnd(__FIVector_1_GUID* This) {
+    return This->lpVtbl->RemoveAtEnd(This);
+}
+static inline HRESULT __FIVector_1_GUID_Clear(__FIVector_1_GUID* This) {
+    return This->lpVtbl->Clear(This);
+}
+static inline HRESULT __FIVector_1_GUID_GetMany(__FIVector_1_GUID* This,UINT32 start_index,UINT32 items_size,GUID *items,UINT32 *value) {
+    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
+}
+static inline HRESULT __FIVector_1_GUID_ReplaceAll(__FIVector_1_GUID* This,UINT32 count,GUID *items) {
+    return This->lpVtbl->ReplaceAll(This,count,items);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation_Collections
+#define IID_IVector_GUID IID___FIVector_1_GUID
+#define IVector_GUIDVtbl __FIVector_1_GUIDVtbl
+#define IVector_GUID __FIVector_1_GUID
+#define IVector_GUID_QueryInterface __FIVector_1_GUID_QueryInterface
+#define IVector_GUID_AddRef __FIVector_1_GUID_AddRef
+#define IVector_GUID_Release __FIVector_1_GUID_Release
+#define IVector_GUID_GetIids __FIVector_1_GUID_GetIids
+#define IVector_GUID_GetRuntimeClassName __FIVector_1_GUID_GetRuntimeClassName
+#define IVector_GUID_GetTrustLevel __FIVector_1_GUID_GetTrustLevel
+#define IVector_GUID_GetAt __FIVector_1_GUID_GetAt
+#define IVector_GUID_get_Size __FIVector_1_GUID_get_Size
+#define IVector_GUID_GetView __FIVector_1_GUID_GetView
+#define IVector_GUID_IndexOf __FIVector_1_GUID_IndexOf
+#define IVector_GUID_SetAt __FIVector_1_GUID_SetAt
+#define IVector_GUID_InsertAt __FIVector_1_GUID_InsertAt
+#define IVector_GUID_RemoveAt __FIVector_1_GUID_RemoveAt
+#define IVector_GUID_Append __FIVector_1_GUID_Append
+#define IVector_GUID_RemoveAtEnd __FIVector_1_GUID_RemoveAtEnd
+#define IVector_GUID_Clear __FIVector_1_GUID_Clear
+#define IVector_GUID_GetMany __FIVector_1_GUID_GetMany
+#define IVector_GUID_ReplaceAll __FIVector_1_GUID_ReplaceAll
+#endif /* WIDL_using_Windows_Foundation_Collections */
+#endif
+
+#endif
+
+#endif  /* ____FIVector_1_GUID_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IVector<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* > interface
+ */
+#ifndef ____FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_INTERFACE_DEFINED__
+#define ____FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData, 0x52d75b45, 0x1d24, 0x5eeb, 0xba,0xbb, 0x65,0xef,0xfa,0xe4,0x5e,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                template<>
+                MIDL_INTERFACE("52d75b45-1d24-5eeb-babb-65effae45e46")
+                IVector<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* > : IVector_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData*, ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEManufacturerData* > >
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData, 0x52d75b45, 0x1d24, 0x5eeb, 0xba,0xbb, 0x65,0xef,0xfa,0xe4,0x5e,0x46)
+#endif
+#else
+typedef struct __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerDataVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        TrustLevel *trustLevel);
+
+    /*** IVector<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetAt)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        UINT32 index,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Size)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        UINT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetView)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData **value);
+
+    HRESULT (STDMETHODCALLTYPE *IndexOf)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData *element,
+        UINT32 *index,
+        BOOLEAN *value);
+
+    HRESULT (STDMETHODCALLTYPE *SetAt)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        UINT32 index,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData *value);
+
+    HRESULT (STDMETHODCALLTYPE *InsertAt)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        UINT32 index,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData *value);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveAt)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        UINT32 index);
+
+    HRESULT (STDMETHODCALLTYPE *Append)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData *value);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveAtEnd)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This);
+
+    HRESULT (STDMETHODCALLTYPE *Clear)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetMany)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        UINT32 start_index,
+        UINT32 items_size,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData **items,
+        UINT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *ReplaceAll)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        UINT32 count,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData **items);
+
+    END_INTERFACE
+} __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerDataVtbl;
+
+interface __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData {
+    CONST_VTBL __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerDataVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IVector<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* > methods ***/
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetView(This,value) (This)->lpVtbl->GetView(This,value)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_SetAt(This,index,value) (This)->lpVtbl->SetAt(This,index,value)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_InsertAt(This,index,value) (This)->lpVtbl->InsertAt(This,index,value)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_RemoveAt(This,index) (This)->lpVtbl->RemoveAt(This,index)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_Append(This,value) (This)->lpVtbl->Append(This,value)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_RemoveAtEnd(This) (This)->lpVtbl->RemoveAtEnd(This)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_Clear(This) (This)->lpVtbl->Clear(This)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetMany(This,start_index,items_size,items,value) (This)->lpVtbl->GetMany(This,start_index,items_size,items,value)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_ReplaceAll(This,count,items) (This)->lpVtbl->ReplaceAll(This,count,items)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_QueryInterface(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_AddRef(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_Release(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetIids(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetRuntimeClassName(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetTrustLevel(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IVector<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* > methods ***/
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetAt(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,UINT32 index,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData **value) {
+    return This->lpVtbl->GetAt(This,index,value);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_get_Size(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,UINT32 *value) {
+    return This->lpVtbl->get_Size(This,value);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetView(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData **value) {
+    return This->lpVtbl->GetView(This,value);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_IndexOf(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData *element,UINT32 *index,BOOLEAN *value) {
+    return This->lpVtbl->IndexOf(This,element,index,value);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_SetAt(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,UINT32 index,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData *value) {
+    return This->lpVtbl->SetAt(This,index,value);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_InsertAt(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,UINT32 index,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData *value) {
+    return This->lpVtbl->InsertAt(This,index,value);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_RemoveAt(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,UINT32 index) {
+    return This->lpVtbl->RemoveAt(This,index);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_Append(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData *value) {
+    return This->lpVtbl->Append(This,value);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_RemoveAtEnd(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This) {
+    return This->lpVtbl->RemoveAtEnd(This);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_Clear(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This) {
+    return This->lpVtbl->Clear(This);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetMany(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,UINT32 start_index,UINT32 items_size,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData **items,UINT32 *value) {
+    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_ReplaceAll(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,UINT32 count,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData **items) {
+    return This->lpVtbl->ReplaceAll(This,count,items);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation_Collections
+#define IID_IVector_BluetoothLEManufacturerData IID___FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData
+#define IVector_BluetoothLEManufacturerDataVtbl __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerDataVtbl
+#define IVector_BluetoothLEManufacturerData __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData
+#define IVector_BluetoothLEManufacturerData_QueryInterface __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_QueryInterface
+#define IVector_BluetoothLEManufacturerData_AddRef __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_AddRef
+#define IVector_BluetoothLEManufacturerData_Release __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_Release
+#define IVector_BluetoothLEManufacturerData_GetIids __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetIids
+#define IVector_BluetoothLEManufacturerData_GetRuntimeClassName __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetRuntimeClassName
+#define IVector_BluetoothLEManufacturerData_GetTrustLevel __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetTrustLevel
+#define IVector_BluetoothLEManufacturerData_GetAt __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetAt
+#define IVector_BluetoothLEManufacturerData_get_Size __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_get_Size
+#define IVector_BluetoothLEManufacturerData_GetView __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetView
+#define IVector_BluetoothLEManufacturerData_IndexOf __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_IndexOf
+#define IVector_BluetoothLEManufacturerData_SetAt __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_SetAt
+#define IVector_BluetoothLEManufacturerData_InsertAt __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_InsertAt
+#define IVector_BluetoothLEManufacturerData_RemoveAt __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_RemoveAt
+#define IVector_BluetoothLEManufacturerData_Append __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_Append
+#define IVector_BluetoothLEManufacturerData_RemoveAtEnd __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_RemoveAtEnd
+#define IVector_BluetoothLEManufacturerData_Clear __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_Clear
+#define IVector_BluetoothLEManufacturerData_GetMany __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetMany
+#define IVector_BluetoothLEManufacturerData_ReplaceAll __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_ReplaceAll
+#endif /* WIDL_using_Windows_Foundation_Collections */
+#endif
+
+#endif
+
+#endif  /* ____FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IVector<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* > interface
+ */
+#ifndef ____FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_INTERFACE_DEFINED__
+#define ____FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection, 0xb6f71ad2, 0xe2cf, 0x5d54, 0xb6,0xf1, 0x90,0x96,0x4e,0xe5,0xd4,0xda);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                template<>
+                MIDL_INTERFACE("b6f71ad2-e2cf-5d54-b6f1-90964ee5d4da")
+                IVector<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* > : IVector_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection*, ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementDataSection* > >
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection, 0xb6f71ad2, 0xe2cf, 0x5d54, 0xb6,0xf1, 0x90,0x96,0x4e,0xe5,0xd4,0xda)
+#endif
+#else
+typedef struct __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSectionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        TrustLevel *trustLevel);
+
+    /*** IVector<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetAt)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        UINT32 index,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Size)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        UINT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetView)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection **value);
+
+    HRESULT (STDMETHODCALLTYPE *IndexOf)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection *element,
+        UINT32 *index,
+        BOOLEAN *value);
+
+    HRESULT (STDMETHODCALLTYPE *SetAt)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        UINT32 index,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection *value);
+
+    HRESULT (STDMETHODCALLTYPE *InsertAt)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        UINT32 index,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection *value);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveAt)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        UINT32 index);
+
+    HRESULT (STDMETHODCALLTYPE *Append)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection *value);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveAtEnd)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This);
+
+    HRESULT (STDMETHODCALLTYPE *Clear)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetMany)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        UINT32 start_index,
+        UINT32 items_size,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection **items,
+        UINT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *ReplaceAll)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        UINT32 count,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection **items);
+
+    END_INTERFACE
+} __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSectionVtbl;
+
+interface __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection {
+    CONST_VTBL __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSectionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IVector<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* > methods ***/
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetView(This,value) (This)->lpVtbl->GetView(This,value)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_SetAt(This,index,value) (This)->lpVtbl->SetAt(This,index,value)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_InsertAt(This,index,value) (This)->lpVtbl->InsertAt(This,index,value)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_RemoveAt(This,index) (This)->lpVtbl->RemoveAt(This,index)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_Append(This,value) (This)->lpVtbl->Append(This,value)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_RemoveAtEnd(This) (This)->lpVtbl->RemoveAtEnd(This)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_Clear(This) (This)->lpVtbl->Clear(This)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetMany(This,start_index,items_size,items,value) (This)->lpVtbl->GetMany(This,start_index,items_size,items,value)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_ReplaceAll(This,count,items) (This)->lpVtbl->ReplaceAll(This,count,items)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_QueryInterface(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_AddRef(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_Release(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetIids(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetRuntimeClassName(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetTrustLevel(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IVector<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* > methods ***/
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetAt(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,UINT32 index,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection **value) {
+    return This->lpVtbl->GetAt(This,index,value);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_get_Size(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,UINT32 *value) {
+    return This->lpVtbl->get_Size(This,value);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetView(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection **value) {
+    return This->lpVtbl->GetView(This,value);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_IndexOf(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection *element,UINT32 *index,BOOLEAN *value) {
+    return This->lpVtbl->IndexOf(This,element,index,value);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_SetAt(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,UINT32 index,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection *value) {
+    return This->lpVtbl->SetAt(This,index,value);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_InsertAt(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,UINT32 index,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection *value) {
+    return This->lpVtbl->InsertAt(This,index,value);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_RemoveAt(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,UINT32 index) {
+    return This->lpVtbl->RemoveAt(This,index);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_Append(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection *value) {
+    return This->lpVtbl->Append(This,value);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_RemoveAtEnd(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This) {
+    return This->lpVtbl->RemoveAtEnd(This);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_Clear(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This) {
+    return This->lpVtbl->Clear(This);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetMany(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,UINT32 start_index,UINT32 items_size,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection **items,UINT32 *value) {
+    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_ReplaceAll(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,UINT32 count,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection **items) {
+    return This->lpVtbl->ReplaceAll(This,count,items);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation_Collections
+#define IID_IVector_BluetoothLEAdvertisementDataSection IID___FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection
+#define IVector_BluetoothLEAdvertisementDataSectionVtbl __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSectionVtbl
+#define IVector_BluetoothLEAdvertisementDataSection __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection
+#define IVector_BluetoothLEAdvertisementDataSection_QueryInterface __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_QueryInterface
+#define IVector_BluetoothLEAdvertisementDataSection_AddRef __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_AddRef
+#define IVector_BluetoothLEAdvertisementDataSection_Release __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_Release
+#define IVector_BluetoothLEAdvertisementDataSection_GetIids __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetIids
+#define IVector_BluetoothLEAdvertisementDataSection_GetRuntimeClassName __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetRuntimeClassName
+#define IVector_BluetoothLEAdvertisementDataSection_GetTrustLevel __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetTrustLevel
+#define IVector_BluetoothLEAdvertisementDataSection_GetAt __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetAt
+#define IVector_BluetoothLEAdvertisementDataSection_get_Size __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_get_Size
+#define IVector_BluetoothLEAdvertisementDataSection_GetView __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetView
+#define IVector_BluetoothLEAdvertisementDataSection_IndexOf __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_IndexOf
+#define IVector_BluetoothLEAdvertisementDataSection_SetAt __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_SetAt
+#define IVector_BluetoothLEAdvertisementDataSection_InsertAt __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_InsertAt
+#define IVector_BluetoothLEAdvertisementDataSection_RemoveAt __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_RemoveAt
+#define IVector_BluetoothLEAdvertisementDataSection_Append __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_Append
+#define IVector_BluetoothLEAdvertisementDataSection_RemoveAtEnd __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_RemoveAtEnd
+#define IVector_BluetoothLEAdvertisementDataSection_Clear __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_Clear
+#define IVector_BluetoothLEAdvertisementDataSection_GetMany __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetMany
+#define IVector_BluetoothLEAdvertisementDataSection_ReplaceAll __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_ReplaceAll
+#endif /* WIDL_using_Windows_Foundation_Collections */
+#endif
+
+#endif
+
+#endif  /* ____FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IVector<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* > interface
+ */
+#ifndef ____FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_INTERFACE_DEFINED__
+#define ____FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern, 0x8dd461b7, 0x9775, 0x5e82, 0xa0,0xa6, 0x66,0x27,0xab,0xd0,0xd0,0x10);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                template<>
+                MIDL_INTERFACE("8dd461b7-9775-5e82-a0a6-6627abd0d010")
+                IVector<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* > : IVector_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern*, ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementBytePattern* > >
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern, 0x8dd461b7, 0x9775, 0x5e82, 0xa0,0xa6, 0x66,0x27,0xab,0xd0,0xd0,0x10)
+#endif
+#else
+typedef struct __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePatternVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        TrustLevel *trustLevel);
+
+    /*** IVector<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetAt)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        UINT32 index,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Size)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        UINT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetView)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern **value);
+
+    HRESULT (STDMETHODCALLTYPE *IndexOf)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern *element,
+        UINT32 *index,
+        BOOLEAN *value);
+
+    HRESULT (STDMETHODCALLTYPE *SetAt)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        UINT32 index,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern *value);
+
+    HRESULT (STDMETHODCALLTYPE *InsertAt)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        UINT32 index,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern *value);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveAt)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        UINT32 index);
+
+    HRESULT (STDMETHODCALLTYPE *Append)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern *value);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveAtEnd)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This);
+
+    HRESULT (STDMETHODCALLTYPE *Clear)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetMany)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        UINT32 start_index,
+        UINT32 items_size,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern **items,
+        UINT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *ReplaceAll)(
+        __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        UINT32 count,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern **items);
+
+    END_INTERFACE
+} __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePatternVtbl;
+
+interface __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern {
+    CONST_VTBL __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePatternVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IVector<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* > methods ***/
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetView(This,value) (This)->lpVtbl->GetView(This,value)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_SetAt(This,index,value) (This)->lpVtbl->SetAt(This,index,value)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_InsertAt(This,index,value) (This)->lpVtbl->InsertAt(This,index,value)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_RemoveAt(This,index) (This)->lpVtbl->RemoveAt(This,index)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_Append(This,value) (This)->lpVtbl->Append(This,value)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_RemoveAtEnd(This) (This)->lpVtbl->RemoveAtEnd(This)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_Clear(This) (This)->lpVtbl->Clear(This)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetMany(This,start_index,items_size,items,value) (This)->lpVtbl->GetMany(This,start_index,items_size,items,value)
+#define __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_ReplaceAll(This,count,items) (This)->lpVtbl->ReplaceAll(This,count,items)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_QueryInterface(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_AddRef(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_Release(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetIids(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetRuntimeClassName(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetTrustLevel(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IVector<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* > methods ***/
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetAt(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,UINT32 index,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern **value) {
+    return This->lpVtbl->GetAt(This,index,value);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_get_Size(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,UINT32 *value) {
+    return This->lpVtbl->get_Size(This,value);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetView(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern **value) {
+    return This->lpVtbl->GetView(This,value);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_IndexOf(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern *element,UINT32 *index,BOOLEAN *value) {
+    return This->lpVtbl->IndexOf(This,element,index,value);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_SetAt(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,UINT32 index,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern *value) {
+    return This->lpVtbl->SetAt(This,index,value);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_InsertAt(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,UINT32 index,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern *value) {
+    return This->lpVtbl->InsertAt(This,index,value);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_RemoveAt(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,UINT32 index) {
+    return This->lpVtbl->RemoveAt(This,index);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_Append(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern *value) {
+    return This->lpVtbl->Append(This,value);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_RemoveAtEnd(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This) {
+    return This->lpVtbl->RemoveAtEnd(This);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_Clear(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This) {
+    return This->lpVtbl->Clear(This);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetMany(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,UINT32 start_index,UINT32 items_size,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern **items,UINT32 *value) {
+    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
+}
+static inline HRESULT __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_ReplaceAll(__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,UINT32 count,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern **items) {
+    return This->lpVtbl->ReplaceAll(This,count,items);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation_Collections
+#define IID_IVector_BluetoothLEAdvertisementBytePattern IID___FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern
+#define IVector_BluetoothLEAdvertisementBytePatternVtbl __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePatternVtbl
+#define IVector_BluetoothLEAdvertisementBytePattern __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern
+#define IVector_BluetoothLEAdvertisementBytePattern_QueryInterface __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_QueryInterface
+#define IVector_BluetoothLEAdvertisementBytePattern_AddRef __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_AddRef
+#define IVector_BluetoothLEAdvertisementBytePattern_Release __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_Release
+#define IVector_BluetoothLEAdvertisementBytePattern_GetIids __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetIids
+#define IVector_BluetoothLEAdvertisementBytePattern_GetRuntimeClassName __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetRuntimeClassName
+#define IVector_BluetoothLEAdvertisementBytePattern_GetTrustLevel __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetTrustLevel
+#define IVector_BluetoothLEAdvertisementBytePattern_GetAt __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetAt
+#define IVector_BluetoothLEAdvertisementBytePattern_get_Size __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_get_Size
+#define IVector_BluetoothLEAdvertisementBytePattern_GetView __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetView
+#define IVector_BluetoothLEAdvertisementBytePattern_IndexOf __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_IndexOf
+#define IVector_BluetoothLEAdvertisementBytePattern_SetAt __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_SetAt
+#define IVector_BluetoothLEAdvertisementBytePattern_InsertAt __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_InsertAt
+#define IVector_BluetoothLEAdvertisementBytePattern_RemoveAt __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_RemoveAt
+#define IVector_BluetoothLEAdvertisementBytePattern_Append __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_Append
+#define IVector_BluetoothLEAdvertisementBytePattern_RemoveAtEnd __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_RemoveAtEnd
+#define IVector_BluetoothLEAdvertisementBytePattern_Clear __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_Clear
+#define IVector_BluetoothLEAdvertisementBytePattern_GetMany __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetMany
+#define IVector_BluetoothLEAdvertisementBytePattern_ReplaceAll __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_ReplaceAll
+#endif /* WIDL_using_Windows_Foundation_Collections */
+#endif
+
+#endif
+
+#endif  /* ____FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IVectorView<GUID > interface
+ */
+#ifndef ____FIVectorView_1_GUID_INTERFACE_DEFINED__
+#define ____FIVectorView_1_GUID_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIVectorView_1_GUID, 0x9520e64b, 0x15b2, 0x52a6, 0x98,0xed, 0x31,0x91,0xfa,0x6c,0xf6,0x8a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                template<>
+                MIDL_INTERFACE("9520e64b-15b2-52a6-98ed-3191fa6cf68a")
+                IVectorView<GUID > : IVectorView_impl<GUID >
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIVectorView_1_GUID, 0x9520e64b, 0x15b2, 0x52a6, 0x98,0xed, 0x31,0x91,0xfa,0x6c,0xf6,0x8a)
+#endif
+#else
+typedef struct __FIVectorView_1_GUIDVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIVectorView_1_GUID *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIVectorView_1_GUID *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIVectorView_1_GUID *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIVectorView_1_GUID *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIVectorView_1_GUID *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIVectorView_1_GUID *This,
+        TrustLevel *trustLevel);
+
+    /*** IVectorView<GUID > methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetAt)(
+        __FIVectorView_1_GUID *This,
+        UINT32 index,
+        GUID *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Size)(
+        __FIVectorView_1_GUID *This,
+        UINT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *IndexOf)(
+        __FIVectorView_1_GUID *This,
+        GUID element,
+        UINT32 *index,
+        BOOLEAN *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetMany)(
+        __FIVectorView_1_GUID *This,
+        UINT32 start_index,
+        UINT32 items_size,
+        GUID *items,
+        UINT32 *value);
+
+    END_INTERFACE
+} __FIVectorView_1_GUIDVtbl;
+
+interface __FIVectorView_1_GUID {
+    CONST_VTBL __FIVectorView_1_GUIDVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIVectorView_1_GUID_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIVectorView_1_GUID_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIVectorView_1_GUID_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIVectorView_1_GUID_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIVectorView_1_GUID_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIVectorView_1_GUID_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IVectorView<GUID > methods ***/
+#define __FIVectorView_1_GUID_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
+#define __FIVectorView_1_GUID_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
+#define __FIVectorView_1_GUID_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
+#define __FIVectorView_1_GUID_GetMany(This,start_index,items_size,items,value) (This)->lpVtbl->GetMany(This,start_index,items_size,items,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIVectorView_1_GUID_QueryInterface(__FIVectorView_1_GUID* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIVectorView_1_GUID_AddRef(__FIVectorView_1_GUID* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIVectorView_1_GUID_Release(__FIVectorView_1_GUID* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIVectorView_1_GUID_GetIids(__FIVectorView_1_GUID* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIVectorView_1_GUID_GetRuntimeClassName(__FIVectorView_1_GUID* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIVectorView_1_GUID_GetTrustLevel(__FIVectorView_1_GUID* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IVectorView<GUID > methods ***/
+static inline HRESULT __FIVectorView_1_GUID_GetAt(__FIVectorView_1_GUID* This,UINT32 index,GUID *value) {
+    return This->lpVtbl->GetAt(This,index,value);
+}
+static inline HRESULT __FIVectorView_1_GUID_get_Size(__FIVectorView_1_GUID* This,UINT32 *value) {
+    return This->lpVtbl->get_Size(This,value);
+}
+static inline HRESULT __FIVectorView_1_GUID_IndexOf(__FIVectorView_1_GUID* This,GUID element,UINT32 *index,BOOLEAN *value) {
+    return This->lpVtbl->IndexOf(This,element,index,value);
+}
+static inline HRESULT __FIVectorView_1_GUID_GetMany(__FIVectorView_1_GUID* This,UINT32 start_index,UINT32 items_size,GUID *items,UINT32 *value) {
+    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation_Collections
+#define IID_IVectorView_GUID IID___FIVectorView_1_GUID
+#define IVectorView_GUIDVtbl __FIVectorView_1_GUIDVtbl
+#define IVectorView_GUID __FIVectorView_1_GUID
+#define IVectorView_GUID_QueryInterface __FIVectorView_1_GUID_QueryInterface
+#define IVectorView_GUID_AddRef __FIVectorView_1_GUID_AddRef
+#define IVectorView_GUID_Release __FIVectorView_1_GUID_Release
+#define IVectorView_GUID_GetIids __FIVectorView_1_GUID_GetIids
+#define IVectorView_GUID_GetRuntimeClassName __FIVectorView_1_GUID_GetRuntimeClassName
+#define IVectorView_GUID_GetTrustLevel __FIVectorView_1_GUID_GetTrustLevel
+#define IVectorView_GUID_GetAt __FIVectorView_1_GUID_GetAt
+#define IVectorView_GUID_get_Size __FIVectorView_1_GUID_get_Size
+#define IVectorView_GUID_IndexOf __FIVectorView_1_GUID_IndexOf
+#define IVectorView_GUID_GetMany __FIVectorView_1_GUID_GetMany
+#endif /* WIDL_using_Windows_Foundation_Collections */
+#endif
+
+#endif
+
+#endif  /* ____FIVectorView_1_GUID_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IVectorView<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* > interface
+ */
+#ifndef ____FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_INTERFACE_DEFINED__
+#define ____FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData, 0x78ab070e, 0xad7e, 0x5912, 0xa4,0xf1, 0x7b,0xe3,0x3e,0x45,0x60,0xaf);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                template<>
+                MIDL_INTERFACE("78ab070e-ad7e-5912-a4f1-7be33e4560af")
+                IVectorView<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* > : IVectorView_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData*, ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEManufacturerData* > >
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData, 0x78ab070e, 0xad7e, 0x5912, 0xa4,0xf1, 0x7b,0xe3,0x3e,0x45,0x60,0xaf)
+#endif
+#else
+typedef struct __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerDataVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        TrustLevel *trustLevel);
+
+    /*** IVectorView<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetAt)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        UINT32 index,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Size)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        UINT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *IndexOf)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData *element,
+        UINT32 *index,
+        BOOLEAN *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetMany)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        UINT32 start_index,
+        UINT32 items_size,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData **items,
+        UINT32 *value);
+
+    END_INTERFACE
+} __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerDataVtbl;
+
+interface __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData {
+    CONST_VTBL __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerDataVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IVectorView<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* > methods ***/
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetMany(This,start_index,items_size,items,value) (This)->lpVtbl->GetMany(This,start_index,items_size,items,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_QueryInterface(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_AddRef(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_Release(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetIids(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetRuntimeClassName(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetTrustLevel(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IVectorView<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* > methods ***/
+static inline HRESULT __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetAt(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,UINT32 index,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData **value) {
+    return This->lpVtbl->GetAt(This,index,value);
+}
+static inline HRESULT __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_get_Size(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,UINT32 *value) {
+    return This->lpVtbl->get_Size(This,value);
+}
+static inline HRESULT __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_IndexOf(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData *element,UINT32 *index,BOOLEAN *value) {
+    return This->lpVtbl->IndexOf(This,element,index,value);
+}
+static inline HRESULT __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetMany(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,UINT32 start_index,UINT32 items_size,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData **items,UINT32 *value) {
+    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation_Collections
+#define IID_IVectorView_BluetoothLEManufacturerData IID___FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData
+#define IVectorView_BluetoothLEManufacturerDataVtbl __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerDataVtbl
+#define IVectorView_BluetoothLEManufacturerData __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData
+#define IVectorView_BluetoothLEManufacturerData_QueryInterface __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_QueryInterface
+#define IVectorView_BluetoothLEManufacturerData_AddRef __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_AddRef
+#define IVectorView_BluetoothLEManufacturerData_Release __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_Release
+#define IVectorView_BluetoothLEManufacturerData_GetIids __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetIids
+#define IVectorView_BluetoothLEManufacturerData_GetRuntimeClassName __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetRuntimeClassName
+#define IVectorView_BluetoothLEManufacturerData_GetTrustLevel __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetTrustLevel
+#define IVectorView_BluetoothLEManufacturerData_GetAt __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetAt
+#define IVectorView_BluetoothLEManufacturerData_get_Size __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_get_Size
+#define IVectorView_BluetoothLEManufacturerData_IndexOf __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_IndexOf
+#define IVectorView_BluetoothLEManufacturerData_GetMany __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetMany
+#endif /* WIDL_using_Windows_Foundation_Collections */
+#endif
+
+#endif
+
+#endif  /* ____FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IVectorView<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* > interface
+ */
+#ifndef ____FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_INTERFACE_DEFINED__
+#define ____FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection, 0xc4f2b8ea, 0x11a8, 0x5109, 0x90,0x13, 0x40,0x47,0xe1,0x2c,0x72,0xe8);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                template<>
+                MIDL_INTERFACE("c4f2b8ea-11a8-5109-9013-4047e12c72e8")
+                IVectorView<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* > : IVectorView_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection*, ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementDataSection* > >
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection, 0xc4f2b8ea, 0x11a8, 0x5109, 0x90,0x13, 0x40,0x47,0xe1,0x2c,0x72,0xe8)
+#endif
+#else
+typedef struct __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSectionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        TrustLevel *trustLevel);
+
+    /*** IVectorView<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetAt)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        UINT32 index,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Size)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        UINT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *IndexOf)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection *element,
+        UINT32 *index,
+        BOOLEAN *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetMany)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        UINT32 start_index,
+        UINT32 items_size,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection **items,
+        UINT32 *value);
+
+    END_INTERFACE
+} __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSectionVtbl;
+
+interface __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection {
+    CONST_VTBL __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSectionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IVectorView<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* > methods ***/
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetMany(This,start_index,items_size,items,value) (This)->lpVtbl->GetMany(This,start_index,items_size,items,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_QueryInterface(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_AddRef(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_Release(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetIids(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetRuntimeClassName(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetTrustLevel(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IVectorView<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* > methods ***/
+static inline HRESULT __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetAt(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,UINT32 index,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection **value) {
+    return This->lpVtbl->GetAt(This,index,value);
+}
+static inline HRESULT __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_get_Size(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,UINT32 *value) {
+    return This->lpVtbl->get_Size(This,value);
+}
+static inline HRESULT __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_IndexOf(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection *element,UINT32 *index,BOOLEAN *value) {
+    return This->lpVtbl->IndexOf(This,element,index,value);
+}
+static inline HRESULT __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetMany(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,UINT32 start_index,UINT32 items_size,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection **items,UINT32 *value) {
+    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation_Collections
+#define IID_IVectorView_BluetoothLEAdvertisementDataSection IID___FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection
+#define IVectorView_BluetoothLEAdvertisementDataSectionVtbl __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSectionVtbl
+#define IVectorView_BluetoothLEAdvertisementDataSection __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection
+#define IVectorView_BluetoothLEAdvertisementDataSection_QueryInterface __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_QueryInterface
+#define IVectorView_BluetoothLEAdvertisementDataSection_AddRef __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_AddRef
+#define IVectorView_BluetoothLEAdvertisementDataSection_Release __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_Release
+#define IVectorView_BluetoothLEAdvertisementDataSection_GetIids __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetIids
+#define IVectorView_BluetoothLEAdvertisementDataSection_GetRuntimeClassName __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetRuntimeClassName
+#define IVectorView_BluetoothLEAdvertisementDataSection_GetTrustLevel __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetTrustLevel
+#define IVectorView_BluetoothLEAdvertisementDataSection_GetAt __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetAt
+#define IVectorView_BluetoothLEAdvertisementDataSection_get_Size __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_get_Size
+#define IVectorView_BluetoothLEAdvertisementDataSection_IndexOf __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_IndexOf
+#define IVectorView_BluetoothLEAdvertisementDataSection_GetMany __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetMany
+#endif /* WIDL_using_Windows_Foundation_Collections */
+#endif
+
+#endif
+
+#endif  /* ____FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IVectorView<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* > interface
+ */
+#ifndef ____FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_INTERFACE_DEFINED__
+#define ____FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern, 0xa7d9983a, 0xa11f, 0x572e, 0x89,0xfb, 0x68,0x3e,0xa4,0x29,0xbc,0xbc);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                template<>
+                MIDL_INTERFACE("a7d9983a-a11f-572e-89fb-683ea429bcbc")
+                IVectorView<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* > : IVectorView_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern*, ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementBytePattern* > >
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern, 0xa7d9983a, 0xa11f, 0x572e, 0x89,0xfb, 0x68,0x3e,0xa4,0x29,0xbc,0xbc)
+#endif
+#else
+typedef struct __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePatternVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        TrustLevel *trustLevel);
+
+    /*** IVectorView<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetAt)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        UINT32 index,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Size)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        UINT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *IndexOf)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern *element,
+        UINT32 *index,
+        BOOLEAN *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetMany)(
+        __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        UINT32 start_index,
+        UINT32 items_size,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern **items,
+        UINT32 *value);
+
+    END_INTERFACE
+} __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePatternVtbl;
+
+interface __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern {
+    CONST_VTBL __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePatternVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IVectorView<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* > methods ***/
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
+#define __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetMany(This,start_index,items_size,items,value) (This)->lpVtbl->GetMany(This,start_index,items_size,items,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_QueryInterface(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_AddRef(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_Release(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetIids(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetRuntimeClassName(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetTrustLevel(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IVectorView<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* > methods ***/
+static inline HRESULT __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetAt(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,UINT32 index,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern **value) {
+    return This->lpVtbl->GetAt(This,index,value);
+}
+static inline HRESULT __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_get_Size(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,UINT32 *value) {
+    return This->lpVtbl->get_Size(This,value);
+}
+static inline HRESULT __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_IndexOf(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern *element,UINT32 *index,BOOLEAN *value) {
+    return This->lpVtbl->IndexOf(This,element,index,value);
+}
+static inline HRESULT __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetMany(__FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,UINT32 start_index,UINT32 items_size,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern **items,UINT32 *value) {
+    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation_Collections
+#define IID_IVectorView_BluetoothLEAdvertisementBytePattern IID___FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern
+#define IVectorView_BluetoothLEAdvertisementBytePatternVtbl __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePatternVtbl
+#define IVectorView_BluetoothLEAdvertisementBytePattern __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern
+#define IVectorView_BluetoothLEAdvertisementBytePattern_QueryInterface __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_QueryInterface
+#define IVectorView_BluetoothLEAdvertisementBytePattern_AddRef __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_AddRef
+#define IVectorView_BluetoothLEAdvertisementBytePattern_Release __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_Release
+#define IVectorView_BluetoothLEAdvertisementBytePattern_GetIids __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetIids
+#define IVectorView_BluetoothLEAdvertisementBytePattern_GetRuntimeClassName __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetRuntimeClassName
+#define IVectorView_BluetoothLEAdvertisementBytePattern_GetTrustLevel __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetTrustLevel
+#define IVectorView_BluetoothLEAdvertisementBytePattern_GetAt __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetAt
+#define IVectorView_BluetoothLEAdvertisementBytePattern_get_Size __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_get_Size
+#define IVectorView_BluetoothLEAdvertisementBytePattern_IndexOf __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_IndexOf
+#define IVectorView_BluetoothLEAdvertisementBytePattern_GetMany __FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetMany
+#endif /* WIDL_using_Windows_Foundation_Collections */
+#endif
+
+#endif
+
+#endif  /* ____FIVectorView_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IIterable<GUID > interface
+ */
+#ifndef ____FIIterable_1_GUID_INTERFACE_DEFINED__
+#define ____FIIterable_1_GUID_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIIterable_1_GUID, 0xf4ca3045, 0x5dd7, 0x54be, 0x98,0x2e, 0xd8,0x8d,0x8c,0xa0,0x87,0x6e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                template<>
+                MIDL_INTERFACE("f4ca3045-5dd7-54be-982e-d88d8ca0876e")
+                IIterable<GUID > : IIterable_impl<GUID >
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIIterable_1_GUID, 0xf4ca3045, 0x5dd7, 0x54be, 0x98,0x2e, 0xd8,0x8d,0x8c,0xa0,0x87,0x6e)
+#endif
+#else
+typedef struct __FIIterable_1_GUIDVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIIterable_1_GUID *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIIterable_1_GUID *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIIterable_1_GUID *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIIterable_1_GUID *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIIterable_1_GUID *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIIterable_1_GUID *This,
+        TrustLevel *trustLevel);
+
+    /*** IIterable<GUID > methods ***/
+    HRESULT (STDMETHODCALLTYPE *First)(
+        __FIIterable_1_GUID *This,
+        __FIIterator_1_GUID **value);
+
+    END_INTERFACE
+} __FIIterable_1_GUIDVtbl;
+
+interface __FIIterable_1_GUID {
+    CONST_VTBL __FIIterable_1_GUIDVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIIterable_1_GUID_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIIterable_1_GUID_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIIterable_1_GUID_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIIterable_1_GUID_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIIterable_1_GUID_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIIterable_1_GUID_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IIterable<GUID > methods ***/
+#define __FIIterable_1_GUID_First(This,value) (This)->lpVtbl->First(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIIterable_1_GUID_QueryInterface(__FIIterable_1_GUID* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIIterable_1_GUID_AddRef(__FIIterable_1_GUID* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIIterable_1_GUID_Release(__FIIterable_1_GUID* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIIterable_1_GUID_GetIids(__FIIterable_1_GUID* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIIterable_1_GUID_GetRuntimeClassName(__FIIterable_1_GUID* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIIterable_1_GUID_GetTrustLevel(__FIIterable_1_GUID* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IIterable<GUID > methods ***/
+static inline HRESULT __FIIterable_1_GUID_First(__FIIterable_1_GUID* This,__FIIterator_1_GUID **value) {
+    return This->lpVtbl->First(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation_Collections
+#define IID_IIterable_GUID IID___FIIterable_1_GUID
+#define IIterable_GUIDVtbl __FIIterable_1_GUIDVtbl
+#define IIterable_GUID __FIIterable_1_GUID
+#define IIterable_GUID_QueryInterface __FIIterable_1_GUID_QueryInterface
+#define IIterable_GUID_AddRef __FIIterable_1_GUID_AddRef
+#define IIterable_GUID_Release __FIIterable_1_GUID_Release
+#define IIterable_GUID_GetIids __FIIterable_1_GUID_GetIids
+#define IIterable_GUID_GetRuntimeClassName __FIIterable_1_GUID_GetRuntimeClassName
+#define IIterable_GUID_GetTrustLevel __FIIterable_1_GUID_GetTrustLevel
+#define IIterable_GUID_First __FIIterable_1_GUID_First
+#endif /* WIDL_using_Windows_Foundation_Collections */
+#endif
+
+#endif
+
+#endif  /* ____FIIterable_1_GUID_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IIterable<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* > interface
+ */
+#ifndef ____FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_INTERFACE_DEFINED__
+#define ____FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData, 0x834a4cac, 0xbb8b, 0x5f0f, 0x9f,0x28, 0x4d,0xbc,0x98,0xc1,0x79,0x07);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                template<>
+                MIDL_INTERFACE("834a4cac-bb8b-5f0f-9f28-4dbc98c17907")
+                IIterable<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* > : IIterable_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData*, ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEManufacturerData* > >
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData, 0x834a4cac, 0xbb8b, 0x5f0f, 0x9f,0x28, 0x4d,0xbc,0x98,0xc1,0x79,0x07)
+#endif
+#else
+typedef struct __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerDataVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        TrustLevel *trustLevel);
+
+    /*** IIterable<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *First)(
+        __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData **value);
+
+    END_INTERFACE
+} __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerDataVtbl;
+
+interface __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData {
+    CONST_VTBL __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerDataVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IIterable<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* > methods ***/
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_First(This,value) (This)->lpVtbl->First(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_QueryInterface(__FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_AddRef(__FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_Release(__FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetIids(__FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetRuntimeClassName(__FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetTrustLevel(__FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IIterable<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* > methods ***/
+static inline HRESULT __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_First(__FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData **value) {
+    return This->lpVtbl->First(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation_Collections
+#define IID_IIterable_BluetoothLEManufacturerData IID___FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData
+#define IIterable_BluetoothLEManufacturerDataVtbl __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerDataVtbl
+#define IIterable_BluetoothLEManufacturerData __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData
+#define IIterable_BluetoothLEManufacturerData_QueryInterface __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_QueryInterface
+#define IIterable_BluetoothLEManufacturerData_AddRef __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_AddRef
+#define IIterable_BluetoothLEManufacturerData_Release __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_Release
+#define IIterable_BluetoothLEManufacturerData_GetIids __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetIids
+#define IIterable_BluetoothLEManufacturerData_GetRuntimeClassName __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetRuntimeClassName
+#define IIterable_BluetoothLEManufacturerData_GetTrustLevel __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetTrustLevel
+#define IIterable_BluetoothLEManufacturerData_First __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_First
+#endif /* WIDL_using_Windows_Foundation_Collections */
+#endif
+
+#endif
+
+#endif  /* ____FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IIterable<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* > interface
+ */
+#ifndef ____FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_INTERFACE_DEFINED__
+#define ____FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection, 0xdb98b5d1, 0x897e, 0x59cc, 0xb8,0x6a, 0x7b,0x88,0x55,0xac,0x98,0xaf);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                template<>
+                MIDL_INTERFACE("db98b5d1-897e-59cc-b86a-7b8855ac98af")
+                IIterable<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* > : IIterable_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection*, ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementDataSection* > >
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection, 0xdb98b5d1, 0x897e, 0x59cc, 0xb8,0x6a, 0x7b,0x88,0x55,0xac,0x98,0xaf)
+#endif
+#else
+typedef struct __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSectionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        TrustLevel *trustLevel);
+
+    /*** IIterable<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *First)(
+        __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection **value);
+
+    END_INTERFACE
+} __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSectionVtbl;
+
+interface __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection {
+    CONST_VTBL __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSectionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IIterable<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* > methods ***/
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_First(This,value) (This)->lpVtbl->First(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_QueryInterface(__FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_AddRef(__FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_Release(__FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetIids(__FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetRuntimeClassName(__FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetTrustLevel(__FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IIterable<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* > methods ***/
+static inline HRESULT __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_First(__FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection **value) {
+    return This->lpVtbl->First(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation_Collections
+#define IID_IIterable_BluetoothLEAdvertisementDataSection IID___FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection
+#define IIterable_BluetoothLEAdvertisementDataSectionVtbl __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSectionVtbl
+#define IIterable_BluetoothLEAdvertisementDataSection __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection
+#define IIterable_BluetoothLEAdvertisementDataSection_QueryInterface __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_QueryInterface
+#define IIterable_BluetoothLEAdvertisementDataSection_AddRef __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_AddRef
+#define IIterable_BluetoothLEAdvertisementDataSection_Release __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_Release
+#define IIterable_BluetoothLEAdvertisementDataSection_GetIids __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetIids
+#define IIterable_BluetoothLEAdvertisementDataSection_GetRuntimeClassName __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetRuntimeClassName
+#define IIterable_BluetoothLEAdvertisementDataSection_GetTrustLevel __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetTrustLevel
+#define IIterable_BluetoothLEAdvertisementDataSection_First __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_First
+#endif /* WIDL_using_Windows_Foundation_Collections */
+#endif
+
+#endif
+
+#endif  /* ____FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IIterable<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* > interface
+ */
+#ifndef ____FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_INTERFACE_DEFINED__
+#define ____FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern, 0x1e3fadee, 0x54ac, 0x538b, 0x87,0x77, 0x35,0x1a,0xfb,0x78,0xcb,0x74);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                template<>
+                MIDL_INTERFACE("1e3fadee-54ac-538b-8777-351afb78cb74")
+                IIterable<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* > : IIterable_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern*, ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementBytePattern* > >
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern, 0x1e3fadee, 0x54ac, 0x538b, 0x87,0x77, 0x35,0x1a,0xfb,0x78,0xcb,0x74)
+#endif
+#else
+typedef struct __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePatternVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        TrustLevel *trustLevel);
+
+    /*** IIterable<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *First)(
+        __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern **value);
+
+    END_INTERFACE
+} __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePatternVtbl;
+
+interface __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern {
+    CONST_VTBL __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePatternVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IIterable<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* > methods ***/
+#define __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_First(This,value) (This)->lpVtbl->First(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_QueryInterface(__FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_AddRef(__FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_Release(__FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetIids(__FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetRuntimeClassName(__FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetTrustLevel(__FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IIterable<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* > methods ***/
+static inline HRESULT __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_First(__FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern **value) {
+    return This->lpVtbl->First(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation_Collections
+#define IID_IIterable_BluetoothLEAdvertisementBytePattern IID___FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern
+#define IIterable_BluetoothLEAdvertisementBytePatternVtbl __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePatternVtbl
+#define IIterable_BluetoothLEAdvertisementBytePattern __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern
+#define IIterable_BluetoothLEAdvertisementBytePattern_QueryInterface __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_QueryInterface
+#define IIterable_BluetoothLEAdvertisementBytePattern_AddRef __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_AddRef
+#define IIterable_BluetoothLEAdvertisementBytePattern_Release __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_Release
+#define IIterable_BluetoothLEAdvertisementBytePattern_GetIids __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetIids
+#define IIterable_BluetoothLEAdvertisementBytePattern_GetRuntimeClassName __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetRuntimeClassName
+#define IIterable_BluetoothLEAdvertisementBytePattern_GetTrustLevel __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetTrustLevel
+#define IIterable_BluetoothLEAdvertisementBytePattern_First __FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_First
+#endif /* WIDL_using_Windows_Foundation_Collections */
+#endif
+
+#endif
+
+#endif  /* ____FIIterable_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IIterator<GUID > interface
+ */
+#ifndef ____FIIterator_1_GUID_INTERFACE_DEFINED__
+#define ____FIIterator_1_GUID_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIIterator_1_GUID, 0xd3d64048, 0x82b3, 0x53c7, 0x92,0x85, 0xb0,0xbe,0x18,0x36,0x84,0x82);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                template<>
+                MIDL_INTERFACE("d3d64048-82b3-53c7-9285-b0be18368482")
+                IIterator<GUID > : IIterator_impl<GUID >
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIIterator_1_GUID, 0xd3d64048, 0x82b3, 0x53c7, 0x92,0x85, 0xb0,0xbe,0x18,0x36,0x84,0x82)
+#endif
+#else
+typedef struct __FIIterator_1_GUIDVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIIterator_1_GUID *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIIterator_1_GUID *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIIterator_1_GUID *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIIterator_1_GUID *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIIterator_1_GUID *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIIterator_1_GUID *This,
+        TrustLevel *trustLevel);
+
+    /*** IIterator<GUID > methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Current)(
+        __FIIterator_1_GUID *This,
+        GUID *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_HasCurrent)(
+        __FIIterator_1_GUID *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *MoveNext)(
+        __FIIterator_1_GUID *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetMany)(
+        __FIIterator_1_GUID *This,
+        UINT32 items_size,
+        GUID *items,
+        UINT32 *value);
+
+    END_INTERFACE
+} __FIIterator_1_GUIDVtbl;
+
+interface __FIIterator_1_GUID {
+    CONST_VTBL __FIIterator_1_GUIDVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIIterator_1_GUID_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIIterator_1_GUID_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIIterator_1_GUID_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIIterator_1_GUID_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIIterator_1_GUID_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIIterator_1_GUID_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IIterator<GUID > methods ***/
+#define __FIIterator_1_GUID_get_Current(This,value) (This)->lpVtbl->get_Current(This,value)
+#define __FIIterator_1_GUID_get_HasCurrent(This,value) (This)->lpVtbl->get_HasCurrent(This,value)
+#define __FIIterator_1_GUID_MoveNext(This,value) (This)->lpVtbl->MoveNext(This,value)
+#define __FIIterator_1_GUID_GetMany(This,items_size,items,value) (This)->lpVtbl->GetMany(This,items_size,items,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIIterator_1_GUID_QueryInterface(__FIIterator_1_GUID* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIIterator_1_GUID_AddRef(__FIIterator_1_GUID* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIIterator_1_GUID_Release(__FIIterator_1_GUID* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIIterator_1_GUID_GetIids(__FIIterator_1_GUID* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIIterator_1_GUID_GetRuntimeClassName(__FIIterator_1_GUID* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIIterator_1_GUID_GetTrustLevel(__FIIterator_1_GUID* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IIterator<GUID > methods ***/
+static inline HRESULT __FIIterator_1_GUID_get_Current(__FIIterator_1_GUID* This,GUID *value) {
+    return This->lpVtbl->get_Current(This,value);
+}
+static inline HRESULT __FIIterator_1_GUID_get_HasCurrent(__FIIterator_1_GUID* This,boolean *value) {
+    return This->lpVtbl->get_HasCurrent(This,value);
+}
+static inline HRESULT __FIIterator_1_GUID_MoveNext(__FIIterator_1_GUID* This,boolean *value) {
+    return This->lpVtbl->MoveNext(This,value);
+}
+static inline HRESULT __FIIterator_1_GUID_GetMany(__FIIterator_1_GUID* This,UINT32 items_size,GUID *items,UINT32 *value) {
+    return This->lpVtbl->GetMany(This,items_size,items,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation_Collections
+#define IID_IIterator_GUID IID___FIIterator_1_GUID
+#define IIterator_GUIDVtbl __FIIterator_1_GUIDVtbl
+#define IIterator_GUID __FIIterator_1_GUID
+#define IIterator_GUID_QueryInterface __FIIterator_1_GUID_QueryInterface
+#define IIterator_GUID_AddRef __FIIterator_1_GUID_AddRef
+#define IIterator_GUID_Release __FIIterator_1_GUID_Release
+#define IIterator_GUID_GetIids __FIIterator_1_GUID_GetIids
+#define IIterator_GUID_GetRuntimeClassName __FIIterator_1_GUID_GetRuntimeClassName
+#define IIterator_GUID_GetTrustLevel __FIIterator_1_GUID_GetTrustLevel
+#define IIterator_GUID_get_Current __FIIterator_1_GUID_get_Current
+#define IIterator_GUID_get_HasCurrent __FIIterator_1_GUID_get_HasCurrent
+#define IIterator_GUID_MoveNext __FIIterator_1_GUID_MoveNext
+#define IIterator_GUID_GetMany __FIIterator_1_GUID_GetMany
+#endif /* WIDL_using_Windows_Foundation_Collections */
+#endif
+
+#endif
+
+#endif  /* ____FIIterator_1_GUID_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IIterator<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* > interface
+ */
+#ifndef ____FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_INTERFACE_DEFINED__
+#define ____FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData, 0x12f158dd, 0x7016, 0x5338, 0xac,0x5c, 0x7d,0x55,0x03,0xd7,0x32,0x74);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                template<>
+                MIDL_INTERFACE("12f158dd-7016-5338-ac5c-7d5503d73274")
+                IIterator<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* > : IIterator_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData*, ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEManufacturerData* > >
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData, 0x12f158dd, 0x7016, 0x5338, 0xac,0x5c, 0x7d,0x55,0x03,0xd7,0x32,0x74)
+#endif
+#else
+typedef struct __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerDataVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        TrustLevel *trustLevel);
+
+    /*** IIterator<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Current)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_HasCurrent)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *MoveNext)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetMany)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData *This,
+        UINT32 items_size,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData **items,
+        UINT32 *value);
+
+    END_INTERFACE
+} __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerDataVtbl;
+
+interface __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData {
+    CONST_VTBL __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerDataVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IIterator<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* > methods ***/
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_get_Current(This,value) (This)->lpVtbl->get_Current(This,value)
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_get_HasCurrent(This,value) (This)->lpVtbl->get_HasCurrent(This,value)
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_MoveNext(This,value) (This)->lpVtbl->MoveNext(This,value)
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetMany(This,items_size,items,value) (This)->lpVtbl->GetMany(This,items_size,items,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_QueryInterface(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_AddRef(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_Release(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetIids(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetRuntimeClassName(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetTrustLevel(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IIterator<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEManufacturerData* > methods ***/
+static inline HRESULT __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_get_Current(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData **value) {
+    return This->lpVtbl->get_Current(This,value);
+}
+static inline HRESULT __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_get_HasCurrent(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,boolean *value) {
+    return This->lpVtbl->get_HasCurrent(This,value);
+}
+static inline HRESULT __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_MoveNext(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,boolean *value) {
+    return This->lpVtbl->MoveNext(This,value);
+}
+static inline HRESULT __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetMany(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData* This,UINT32 items_size,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEManufacturerData **items,UINT32 *value) {
+    return This->lpVtbl->GetMany(This,items_size,items,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation_Collections
+#define IID_IIterator_BluetoothLEManufacturerData IID___FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData
+#define IIterator_BluetoothLEManufacturerDataVtbl __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerDataVtbl
+#define IIterator_BluetoothLEManufacturerData __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData
+#define IIterator_BluetoothLEManufacturerData_QueryInterface __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_QueryInterface
+#define IIterator_BluetoothLEManufacturerData_AddRef __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_AddRef
+#define IIterator_BluetoothLEManufacturerData_Release __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_Release
+#define IIterator_BluetoothLEManufacturerData_GetIids __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetIids
+#define IIterator_BluetoothLEManufacturerData_GetRuntimeClassName __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetRuntimeClassName
+#define IIterator_BluetoothLEManufacturerData_GetTrustLevel __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetTrustLevel
+#define IIterator_BluetoothLEManufacturerData_get_Current __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_get_Current
+#define IIterator_BluetoothLEManufacturerData_get_HasCurrent __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_get_HasCurrent
+#define IIterator_BluetoothLEManufacturerData_MoveNext __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_MoveNext
+#define IIterator_BluetoothLEManufacturerData_GetMany __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_GetMany
+#endif /* WIDL_using_Windows_Foundation_Collections */
+#endif
+
+#endif
+
+#endif  /* ____FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEManufacturerData_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IIterator<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* > interface
+ */
+#ifndef ____FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_INTERFACE_DEFINED__
+#define ____FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection, 0xaf5c0e81, 0x788b, 0x52d4, 0x82,0xa2, 0x1e,0xd2,0x8c,0x66,0xa0,0x5e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                template<>
+                MIDL_INTERFACE("af5c0e81-788b-52d4-82a2-1ed28c66a05e")
+                IIterator<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* > : IIterator_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection*, ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementDataSection* > >
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection, 0xaf5c0e81, 0x788b, 0x52d4, 0x82,0xa2, 0x1e,0xd2,0x8c,0x66,0xa0,0x5e)
+#endif
+#else
+typedef struct __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSectionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        TrustLevel *trustLevel);
+
+    /*** IIterator<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Current)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_HasCurrent)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *MoveNext)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetMany)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection *This,
+        UINT32 items_size,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection **items,
+        UINT32 *value);
+
+    END_INTERFACE
+} __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSectionVtbl;
+
+interface __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection {
+    CONST_VTBL __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSectionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IIterator<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* > methods ***/
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_get_Current(This,value) (This)->lpVtbl->get_Current(This,value)
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_get_HasCurrent(This,value) (This)->lpVtbl->get_HasCurrent(This,value)
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_MoveNext(This,value) (This)->lpVtbl->MoveNext(This,value)
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetMany(This,items_size,items,value) (This)->lpVtbl->GetMany(This,items_size,items,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_QueryInterface(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_AddRef(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_Release(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetIids(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetRuntimeClassName(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetTrustLevel(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IIterator<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementDataSection* > methods ***/
+static inline HRESULT __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_get_Current(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection **value) {
+    return This->lpVtbl->get_Current(This,value);
+}
+static inline HRESULT __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_get_HasCurrent(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,boolean *value) {
+    return This->lpVtbl->get_HasCurrent(This,value);
+}
+static inline HRESULT __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_MoveNext(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,boolean *value) {
+    return This->lpVtbl->MoveNext(This,value);
+}
+static inline HRESULT __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetMany(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection* This,UINT32 items_size,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementDataSection **items,UINT32 *value) {
+    return This->lpVtbl->GetMany(This,items_size,items,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation_Collections
+#define IID_IIterator_BluetoothLEAdvertisementDataSection IID___FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection
+#define IIterator_BluetoothLEAdvertisementDataSectionVtbl __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSectionVtbl
+#define IIterator_BluetoothLEAdvertisementDataSection __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection
+#define IIterator_BluetoothLEAdvertisementDataSection_QueryInterface __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_QueryInterface
+#define IIterator_BluetoothLEAdvertisementDataSection_AddRef __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_AddRef
+#define IIterator_BluetoothLEAdvertisementDataSection_Release __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_Release
+#define IIterator_BluetoothLEAdvertisementDataSection_GetIids __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetIids
+#define IIterator_BluetoothLEAdvertisementDataSection_GetRuntimeClassName __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetRuntimeClassName
+#define IIterator_BluetoothLEAdvertisementDataSection_GetTrustLevel __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetTrustLevel
+#define IIterator_BluetoothLEAdvertisementDataSection_get_Current __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_get_Current
+#define IIterator_BluetoothLEAdvertisementDataSection_get_HasCurrent __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_get_HasCurrent
+#define IIterator_BluetoothLEAdvertisementDataSection_MoveNext __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_MoveNext
+#define IIterator_BluetoothLEAdvertisementDataSection_GetMany __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_GetMany
+#endif /* WIDL_using_Windows_Foundation_Collections */
+#endif
+
+#endif
+
+#endif  /* ____FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IIterator<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* > interface
+ */
+#ifndef ____FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_INTERFACE_DEFINED__
+#define ____FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern, 0xb33e103a, 0x1a61, 0x5107, 0x88,0x13, 0xc0,0xe9,0x05,0xc0,0x54,0x86);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                template<>
+                MIDL_INTERFACE("b33e103a-1a61-5107-8813-c0e905c05486")
+                IIterator<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* > : IIterator_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern*, ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementBytePattern* > >
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern, 0xb33e103a, 0x1a61, 0x5107, 0x88,0x13, 0xc0,0xe9,0x05,0xc0,0x54,0x86)
+#endif
+#else
+typedef struct __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePatternVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        TrustLevel *trustLevel);
+
+    /*** IIterator<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Current)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_HasCurrent)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *MoveNext)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetMany)(
+        __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern *This,
+        UINT32 items_size,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern **items,
+        UINT32 *value);
+
+    END_INTERFACE
+} __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePatternVtbl;
+
+interface __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern {
+    CONST_VTBL __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePatternVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IIterator<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* > methods ***/
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_get_Current(This,value) (This)->lpVtbl->get_Current(This,value)
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_get_HasCurrent(This,value) (This)->lpVtbl->get_HasCurrent(This,value)
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_MoveNext(This,value) (This)->lpVtbl->MoveNext(This,value)
+#define __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetMany(This,items_size,items,value) (This)->lpVtbl->GetMany(This,items_size,items,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_QueryInterface(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_AddRef(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_Release(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetIids(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetRuntimeClassName(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetTrustLevel(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IIterator<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementBytePattern* > methods ***/
+static inline HRESULT __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_get_Current(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern **value) {
+    return This->lpVtbl->get_Current(This,value);
+}
+static inline HRESULT __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_get_HasCurrent(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,boolean *value) {
+    return This->lpVtbl->get_HasCurrent(This,value);
+}
+static inline HRESULT __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_MoveNext(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,boolean *value) {
+    return This->lpVtbl->MoveNext(This,value);
+}
+static inline HRESULT __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetMany(__FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern* This,UINT32 items_size,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementBytePattern **items,UINT32 *value) {
+    return This->lpVtbl->GetMany(This,items_size,items,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation_Collections
+#define IID_IIterator_BluetoothLEAdvertisementBytePattern IID___FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern
+#define IIterator_BluetoothLEAdvertisementBytePatternVtbl __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePatternVtbl
+#define IIterator_BluetoothLEAdvertisementBytePattern __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern
+#define IIterator_BluetoothLEAdvertisementBytePattern_QueryInterface __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_QueryInterface
+#define IIterator_BluetoothLEAdvertisementBytePattern_AddRef __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_AddRef
+#define IIterator_BluetoothLEAdvertisementBytePattern_Release __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_Release
+#define IIterator_BluetoothLEAdvertisementBytePattern_GetIids __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetIids
+#define IIterator_BluetoothLEAdvertisementBytePattern_GetRuntimeClassName __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetRuntimeClassName
+#define IIterator_BluetoothLEAdvertisementBytePattern_GetTrustLevel __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetTrustLevel
+#define IIterator_BluetoothLEAdvertisementBytePattern_get_Current __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_get_Current
+#define IIterator_BluetoothLEAdvertisementBytePattern_get_HasCurrent __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_get_HasCurrent
+#define IIterator_BluetoothLEAdvertisementBytePattern_MoveNext __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_MoveNext
+#define IIterator_BluetoothLEAdvertisementBytePattern_GetMany __FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_GetMany
+#endif /* WIDL_using_Windows_Foundation_Collections */
+#endif
+
+#endif
+
+#endif  /* ____FIIterator_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementBytePattern_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypedEventHandler<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcher*,ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementReceivedEventArgs* > interface
+ */
+#ifndef ____FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs_INTERFACE_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs, 0x90eb4eca, 0xd465, 0x5ea0, 0xa6,0x1c, 0x03,0x3c,0x8c,0x5e,0xce,0xf2);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("90eb4eca-d465-5ea0-a61c-033c8c5ecef2")
+            ITypedEventHandler<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcher*,ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementReceivedEventArgs* > : ITypedEventHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcher*, ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementWatcher* >, ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementReceivedEventArgs*, ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementReceivedEventArgs* > >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs, 0x90eb4eca, 0xd465, 0x5ea0, 0xa6,0x1c, 0x03,0x3c,0x8c,0x5e,0xce,0xf2)
+#endif
+#else
+typedef struct __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs *This);
+
+    /*** ITypedEventHandler<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcher*,ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementReceivedEventArgs* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *sender,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs *args);
+
+    END_INTERFACE
+} __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgsVtbl;
+
+interface __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs {
+    CONST_VTBL __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypedEventHandler<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcher*,ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementReceivedEventArgs* > methods ***/
+#define __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs_Invoke(This,sender,args) (This)->lpVtbl->Invoke(This,sender,args)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs_QueryInterface(__FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs_AddRef(__FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs_Release(__FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITypedEventHandler<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcher*,ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementReceivedEventArgs* > methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs_Invoke(__FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *sender,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementReceivedEventArgs *args) {
+    return This->lpVtbl->Invoke(This,sender,args);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_ITypedEventHandler_BluetoothLEAdvertisementWatcher_BluetoothLEAdvertisementReceivedEventArgs IID___FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs
+#define ITypedEventHandler_BluetoothLEAdvertisementWatcher_BluetoothLEAdvertisementReceivedEventArgsVtbl __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgsVtbl
+#define ITypedEventHandler_BluetoothLEAdvertisementWatcher_BluetoothLEAdvertisementReceivedEventArgs __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs
+#define ITypedEventHandler_BluetoothLEAdvertisementWatcher_BluetoothLEAdvertisementReceivedEventArgs_QueryInterface __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs_QueryInterface
+#define ITypedEventHandler_BluetoothLEAdvertisementWatcher_BluetoothLEAdvertisementReceivedEventArgs_AddRef __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs_AddRef
+#define ITypedEventHandler_BluetoothLEAdvertisementWatcher_BluetoothLEAdvertisementReceivedEventArgs_Release __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs_Release
+#define ITypedEventHandler_BluetoothLEAdvertisementWatcher_BluetoothLEAdvertisementReceivedEventArgs_Invoke __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementReceivedEventArgs_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypedEventHandler<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcher*,ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcherStoppedEventArgs* > interface
+ */
+#ifndef ____FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs_INTERFACE_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs, 0x9936a4db, 0xdc99, 0x55c3, 0x9e,0x9b, 0xbf,0x48,0x54,0xbd,0x9e,0xab);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("9936a4db-dc99-55c3-9e9b-bf4854bd9eab")
+            ITypedEventHandler<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcher*,ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcherStoppedEventArgs* > : ITypedEventHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcher*, ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementWatcher* >, ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcherStoppedEventArgs*, ABI::Windows::Devices::Bluetooth::Advertisement::IBluetoothLEAdvertisementWatcherStoppedEventArgs* > >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs, 0x9936a4db, 0xdc99, 0x55c3, 0x9e,0x9b, 0xbf,0x48,0x54,0xbd,0x9e,0xab)
+#endif
+#else
+typedef struct __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs *This);
+
+    /*** ITypedEventHandler<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcher*,ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcherStoppedEventArgs* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs *This,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *sender,
+        __x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs *args);
+
+    END_INTERFACE
+} __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgsVtbl;
+
+interface __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs {
+    CONST_VTBL __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypedEventHandler<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcher*,ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcherStoppedEventArgs* > methods ***/
+#define __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs_Invoke(This,sender,args) (This)->lpVtbl->Invoke(This,sender,args)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs_QueryInterface(__FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs_AddRef(__FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs_Release(__FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITypedEventHandler<ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcher*,ABI::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcherStoppedEventArgs* > methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs_Invoke(__FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs* This,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcher *sender,__x_ABI_CWindows_CDevices_CBluetooth_CAdvertisement_CIBluetoothLEAdvertisementWatcherStoppedEventArgs *args) {
+    return This->lpVtbl->Invoke(This,sender,args);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_ITypedEventHandler_BluetoothLEAdvertisementWatcher_BluetoothLEAdvertisementWatcherStoppedEventArgs IID___FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs
+#define ITypedEventHandler_BluetoothLEAdvertisementWatcher_BluetoothLEAdvertisementWatcherStoppedEventArgsVtbl __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgsVtbl
+#define ITypedEventHandler_BluetoothLEAdvertisementWatcher_BluetoothLEAdvertisementWatcherStoppedEventArgs __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs
+#define ITypedEventHandler_BluetoothLEAdvertisementWatcher_BluetoothLEAdvertisementWatcherStoppedEventArgs_QueryInterface __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs_QueryInterface
+#define ITypedEventHandler_BluetoothLEAdvertisementWatcher_BluetoothLEAdvertisementWatcherStoppedEventArgs_AddRef __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs_AddRef
+#define ITypedEventHandler_BluetoothLEAdvertisementWatcher_BluetoothLEAdvertisementWatcherStoppedEventArgs_Release __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs_Release
+#define ITypedEventHandler_BluetoothLEAdvertisementWatcher_BluetoothLEAdvertisementWatcherStoppedEventArgs_Invoke __FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FITypedEventHandler_2_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcher_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementWatcherStoppedEventArgs_INTERFACE_DEFINED__ */
+
+/* Begin additional prototypes for all interfaces */
+
+ULONG           __RPC_USER HSTRING_UserSize     (ULONG *, ULONG, HSTRING *);
+unsigned char * __RPC_USER HSTRING_UserMarshal  (ULONG *, unsigned char *, HSTRING *);
+unsigned char * __RPC_USER HSTRING_UserUnmarshal(ULONG *, unsigned char *, HSTRING *);
+void            __RPC_USER HSTRING_UserFree     (ULONG *, HSTRING *);
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __windows_devices_bluetooth_advertisement_h__ */
diff --git a/mingw-w64-headers/include/windows.devices.bluetooth.genericattributeprofile.h b/mingw-w64-headers/include/windows.devices.bluetooth.genericattributeprofile.h
index 05bb196..b47babb 100644
--- a/mingw-w64-headers/include/windows.devices.bluetooth.genericattributeprofile.h
+++ b/mingw-w64-headers/include/windows.devices.bluetooth.genericattributeprofile.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.devices.bluetooth.genericattributeprofile.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.devices.bluetooth.genericattributeprofile.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.devices.bluetooth.h b/mingw-w64-headers/include/windows.devices.bluetooth.h
index e09b06c..9f223d6 100644
--- a/mingw-w64-headers/include/windows.devices.bluetooth.h
+++ b/mingw-w64-headers/include/windows.devices.bluetooth.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.devices.bluetooth.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.devices.bluetooth.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
@@ -273,6 +273,40 @@
 #endif /* defined __cplusplus */
 #endif /* defined ____x_ABI_CWindows_CDevices_CBluetooth_CBluetoothLEDevice_FWD_DEFINED__ */
 
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter ABI::Windows::Devices::Bluetooth::IBluetoothSignalStrengthFilter
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                interface IBluetoothSignalStrengthFilter;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CBluetoothSignalStrengthFilter_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CBluetoothSignalStrengthFilter_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                class BluetoothSignalStrengthFilter;
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CBluetoothSignalStrengthFilter __x_ABI_CWindows_CDevices_CBluetooth_CBluetoothSignalStrengthFilter;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CDevices_CBluetooth_CBluetoothSignalStrengthFilter_FWD_DEFINED__ */
+
 #ifndef ____FIAsyncOperationCompletedHandler_1_Windows__CDevices__CBluetooth__CBluetoothAdapter_FWD_DEFINED__
 #define ____FIAsyncOperationCompletedHandler_1_Windows__CDevices__CBluetooth__CBluetoothAdapter_FWD_DEFINED__
 typedef interface __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CBluetooth__CBluetoothAdapter __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CBluetooth__CBluetoothAdapter;
@@ -785,6 +819,46 @@
 typedef enum __x_ABI_CWindows_CDevices_CBluetooth_CBluetoothError __x_ABI_CWindows_CDevices_CBluetooth_CBluetoothError;
 #endif /* __cplusplus */
 
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x20000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CBluetoothAddressType_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CBluetoothAddressType_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                enum BluetoothAddressType {
+                    BluetoothAddressType_Public = 0,
+                    BluetoothAddressType_Random = 1,
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000
+                    BluetoothAddressType_Unspecified = 2
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000 */
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CDevices_CBluetooth_CBluetoothAddressType {
+    BluetoothAddressType_Public = 0,
+    BluetoothAddressType_Random = 1,
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000
+    BluetoothAddressType_Unspecified = 2
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000 */
+};
+#ifdef WIDL_using_Windows_Devices_Bluetooth
+#define BluetoothAddressType __x_ABI_CWindows_CDevices_CBluetooth_CBluetoothAddressType
+#endif /* WIDL_using_Windows_Devices_Bluetooth */
+#endif
+
+#endif /* ____x_ABI_CWindows_CDevices_CBluetooth_CBluetoothAddressType_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x20000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CDevices_CBluetooth_CBluetoothAddressType __x_ABI_CWindows_CDevices_CBluetooth_CBluetoothAddressType;
+#endif /* __cplusplus */
+
 #ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothAdapter_FWD_DEFINED__
 #define ____x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothAdapter_FWD_DEFINED__
 typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothAdapter __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothAdapter;
@@ -1176,6 +1250,23 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_FWD_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter ABI::Windows::Devices::Bluetooth::IBluetoothSignalStrengthFilter
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                interface IBluetoothSignalStrengthFilter;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
 #ifndef ____FIAsyncOperation_1_Windows__CDevices__CBluetooth__CBluetoothAdapter_FWD_DEFINED__
 #define ____FIAsyncOperation_1_Windows__CDevices__CBluetooth__CBluetoothAdapter_FWD_DEFINED__
 typedef interface __FIAsyncOperation_1_Windows__CDevices__CBluetooth__CBluetoothAdapter __FIAsyncOperation_1_Windows__CDevices__CBluetooth__CBluetoothAdapter;
@@ -3149,6 +3240,234 @@
 #endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
 
 /*****************************************************************************
+ * IBluetoothSignalStrengthFilter interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter, 0xdf7b7391, 0x6bb5, 0x4cfe, 0x90,0xb1, 0x5d,0x73,0x24,0xed,0xcf,0x7f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Devices {
+            namespace Bluetooth {
+                MIDL_INTERFACE("df7b7391-6bb5-4cfe-90b1-5d7324edcf7f")
+                IBluetoothSignalStrengthFilter : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_InRangeThresholdInDBm(
+                        ABI::Windows::Foundation::IReference<INT16 > **value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_InRangeThresholdInDBm(
+                        ABI::Windows::Foundation::IReference<INT16 > *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_OutOfRangeThresholdInDBm(
+                        ABI::Windows::Foundation::IReference<INT16 > **value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_OutOfRangeThresholdInDBm(
+                        ABI::Windows::Foundation::IReference<INT16 > *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_OutOfRangeTimeout(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::Foundation::TimeSpan > **value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_OutOfRangeTimeout(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::Foundation::TimeSpan > *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_SamplingInterval(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::Foundation::TimeSpan > **value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_SamplingInterval(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::Foundation::TimeSpan > *value) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter, 0xdf7b7391, 0x6bb5, 0x4cfe, 0x90,0xb1, 0x5d,0x73,0x24,0xed,0xcf,0x7f)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilterVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter *This,
+        TrustLevel *trustLevel);
+
+    /*** IBluetoothSignalStrengthFilter methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_InRangeThresholdInDBm)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter *This,
+        __FIReference_1_INT16 **value);
+
+    HRESULT (STDMETHODCALLTYPE *put_InRangeThresholdInDBm)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter *This,
+        __FIReference_1_INT16 *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_OutOfRangeThresholdInDBm)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter *This,
+        __FIReference_1_INT16 **value);
+
+    HRESULT (STDMETHODCALLTYPE *put_OutOfRangeThresholdInDBm)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter *This,
+        __FIReference_1_INT16 *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_OutOfRangeTimeout)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter *This,
+        __FIReference_1_TimeSpan **value);
+
+    HRESULT (STDMETHODCALLTYPE *put_OutOfRangeTimeout)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter *This,
+        __FIReference_1_TimeSpan *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_SamplingInterval)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter *This,
+        __FIReference_1_TimeSpan **value);
+
+    HRESULT (STDMETHODCALLTYPE *put_SamplingInterval)(
+        __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter *This,
+        __FIReference_1_TimeSpan *value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilterVtbl;
+
+interface __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter {
+    CONST_VTBL __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilterVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IBluetoothSignalStrengthFilter methods ***/
+#define __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_get_InRangeThresholdInDBm(This,value) (This)->lpVtbl->get_InRangeThresholdInDBm(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_put_InRangeThresholdInDBm(This,value) (This)->lpVtbl->put_InRangeThresholdInDBm(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_get_OutOfRangeThresholdInDBm(This,value) (This)->lpVtbl->get_OutOfRangeThresholdInDBm(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_put_OutOfRangeThresholdInDBm(This,value) (This)->lpVtbl->put_OutOfRangeThresholdInDBm(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_get_OutOfRangeTimeout(This,value) (This)->lpVtbl->get_OutOfRangeTimeout(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_put_OutOfRangeTimeout(This,value) (This)->lpVtbl->put_OutOfRangeTimeout(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_get_SamplingInterval(This,value) (This)->lpVtbl->get_SamplingInterval(This,value)
+#define __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_put_SamplingInterval(This,value) (This)->lpVtbl->put_SamplingInterval(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_QueryInterface(__x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_AddRef(__x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_Release(__x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_GetIids(__x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_GetTrustLevel(__x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IBluetoothSignalStrengthFilter methods ***/
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_get_InRangeThresholdInDBm(__x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter* This,__FIReference_1_INT16 **value) {
+    return This->lpVtbl->get_InRangeThresholdInDBm(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_put_InRangeThresholdInDBm(__x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter* This,__FIReference_1_INT16 *value) {
+    return This->lpVtbl->put_InRangeThresholdInDBm(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_get_OutOfRangeThresholdInDBm(__x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter* This,__FIReference_1_INT16 **value) {
+    return This->lpVtbl->get_OutOfRangeThresholdInDBm(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_put_OutOfRangeThresholdInDBm(__x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter* This,__FIReference_1_INT16 *value) {
+    return This->lpVtbl->put_OutOfRangeThresholdInDBm(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_get_OutOfRangeTimeout(__x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter* This,__FIReference_1_TimeSpan **value) {
+    return This->lpVtbl->get_OutOfRangeTimeout(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_put_OutOfRangeTimeout(__x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter* This,__FIReference_1_TimeSpan *value) {
+    return This->lpVtbl->put_OutOfRangeTimeout(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_get_SamplingInterval(__x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter* This,__FIReference_1_TimeSpan **value) {
+    return This->lpVtbl->get_SamplingInterval(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_put_SamplingInterval(__x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter* This,__FIReference_1_TimeSpan *value) {
+    return This->lpVtbl->put_SamplingInterval(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Devices_Bluetooth
+#define IID_IBluetoothSignalStrengthFilter IID___x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter
+#define IBluetoothSignalStrengthFilterVtbl __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilterVtbl
+#define IBluetoothSignalStrengthFilter __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter
+#define IBluetoothSignalStrengthFilter_QueryInterface __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_QueryInterface
+#define IBluetoothSignalStrengthFilter_AddRef __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_AddRef
+#define IBluetoothSignalStrengthFilter_Release __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_Release
+#define IBluetoothSignalStrengthFilter_GetIids __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_GetIids
+#define IBluetoothSignalStrengthFilter_GetRuntimeClassName __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_GetRuntimeClassName
+#define IBluetoothSignalStrengthFilter_GetTrustLevel __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_GetTrustLevel
+#define IBluetoothSignalStrengthFilter_get_InRangeThresholdInDBm __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_get_InRangeThresholdInDBm
+#define IBluetoothSignalStrengthFilter_put_InRangeThresholdInDBm __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_put_InRangeThresholdInDBm
+#define IBluetoothSignalStrengthFilter_get_OutOfRangeThresholdInDBm __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_get_OutOfRangeThresholdInDBm
+#define IBluetoothSignalStrengthFilter_put_OutOfRangeThresholdInDBm __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_put_OutOfRangeThresholdInDBm
+#define IBluetoothSignalStrengthFilter_get_OutOfRangeTimeout __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_get_OutOfRangeTimeout
+#define IBluetoothSignalStrengthFilter_put_OutOfRangeTimeout __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_put_OutOfRangeTimeout
+#define IBluetoothSignalStrengthFilter_get_SamplingInterval __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_get_SamplingInterval
+#define IBluetoothSignalStrengthFilter_put_SamplingInterval __x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_put_SamplingInterval
+#endif /* WIDL_using_Windows_Devices_Bluetooth */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CDevices_CBluetooth_CIBluetoothSignalStrengthFilter_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.Devices.Bluetooth.BluetoothSignalStrengthFilter
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_Devices_Bluetooth_BluetoothSignalStrengthFilter_DEFINED
+#define RUNTIMECLASS_Windows_Devices_Bluetooth_BluetoothSignalStrengthFilter_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_Devices_Bluetooth_BluetoothSignalStrengthFilter[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','B','l','u','e','t','o','o','t','h','.','B','l','u','e','t','o','o','t','h','S','i','g','n','a','l','S','t','r','e','n','g','t','h','F','i','l','t','e','r',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Bluetooth_BluetoothSignalStrengthFilter[] = L"Windows.Devices.Bluetooth.BluetoothSignalStrengthFilter";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Bluetooth_BluetoothSignalStrengthFilter[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','B','l','u','e','t','o','o','t','h','.','B','l','u','e','t','o','o','t','h','S','i','g','n','a','l','S','t','r','e','n','g','t','h','F','i','l','t','e','r',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_Devices_Bluetooth_BluetoothSignalStrengthFilter_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
  * IAsyncOperationCompletedHandler<ABI::Windows::Devices::Bluetooth::BluetoothAdapter* > interface
  */
 #ifndef ____FIAsyncOperationCompletedHandler_1_Windows__CDevices__CBluetooth__CBluetoothAdapter_INTERFACE_DEFINED__
diff --git a/mingw-w64-headers/include/windows.devices.bluetooth.rfcomm.h b/mingw-w64-headers/include/windows.devices.bluetooth.rfcomm.h
index fa3e282..c8d4ed4 100644
--- a/mingw-w64-headers/include/windows.devices.bluetooth.rfcomm.h
+++ b/mingw-w64-headers/include/windows.devices.bluetooth.rfcomm.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.devices.bluetooth.rfcomm.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.devices.bluetooth.rfcomm.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.devices.enumeration.h b/mingw-w64-headers/include/windows.devices.enumeration.h
index fbffd7b..8a794a5 100644
--- a/mingw-w64-headers/include/windows.devices.enumeration.h
+++ b/mingw-w64-headers/include/windows.devices.enumeration.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.devices.enumeration.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.devices.enumeration.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
@@ -2651,6 +2651,7 @@
 /*
  * Class Windows.Devices.Enumeration.DeviceInformationUpdate
  */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
 #ifndef RUNTIMECLASS_Windows_Devices_Enumeration_DeviceInformationUpdate_DEFINED
 #define RUNTIMECLASS_Windows_Devices_Enumeration_DeviceInformationUpdate_DEFINED
 #if !defined(_MSC_VER) && !defined(__MINGW32__)
@@ -2661,10 +2662,12 @@
 extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Enumeration_DeviceInformationUpdate[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','E','n','u','m','e','r','a','t','i','o','n','.','D','e','v','i','c','e','I','n','f','o','r','m','a','t','i','o','n','U','p','d','a','t','e',0};
 #endif
 #endif /* RUNTIMECLASS_Windows_Devices_Enumeration_DeviceInformationUpdate_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
 
 /*
  * Class Windows.Devices.Enumeration.DeviceThumbnail
  */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
 #ifndef RUNTIMECLASS_Windows_Devices_Enumeration_DeviceThumbnail_DEFINED
 #define RUNTIMECLASS_Windows_Devices_Enumeration_DeviceThumbnail_DEFINED
 #if !defined(_MSC_VER) && !defined(__MINGW32__)
@@ -2675,10 +2678,12 @@
 extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Enumeration_DeviceThumbnail[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','E','n','u','m','e','r','a','t','i','o','n','.','D','e','v','i','c','e','T','h','u','m','b','n','a','i','l',0};
 #endif
 #endif /* RUNTIMECLASS_Windows_Devices_Enumeration_DeviceThumbnail_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
 
 /*
  * Class Windows.Devices.Enumeration.DeviceWatcher
  */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
 #ifndef RUNTIMECLASS_Windows_Devices_Enumeration_DeviceWatcher_DEFINED
 #define RUNTIMECLASS_Windows_Devices_Enumeration_DeviceWatcher_DEFINED
 #if !defined(_MSC_VER) && !defined(__MINGW32__)
@@ -2689,10 +2694,12 @@
 extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Enumeration_DeviceWatcher[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','E','n','u','m','e','r','a','t','i','o','n','.','D','e','v','i','c','e','W','a','t','c','h','e','r',0};
 #endif
 #endif /* RUNTIMECLASS_Windows_Devices_Enumeration_DeviceWatcher_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
 
 /*
  * Class Windows.Devices.Enumeration.EnclosureLocation
  */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
 #ifndef RUNTIMECLASS_Windows_Devices_Enumeration_EnclosureLocation_DEFINED
 #define RUNTIMECLASS_Windows_Devices_Enumeration_EnclosureLocation_DEFINED
 #if !defined(_MSC_VER) && !defined(__MINGW32__)
@@ -2703,6 +2710,7 @@
 extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Enumeration_EnclosureLocation[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','E','n','u','m','e','r','a','t','i','o','n','.','E','n','c','l','o','s','u','r','e','L','o','c','a','t','i','o','n',0};
 #endif
 #endif /* RUNTIMECLASS_Windows_Devices_Enumeration_EnclosureLocation_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
 
 /*
  * Class Windows.Devices.Enumeration.DeviceAccessChangedEventArgs
diff --git a/mingw-w64-headers/include/windows.devices.geolocation.h b/mingw-w64-headers/include/windows.devices.geolocation.h
index 58435b3..b8b9a05 100644
--- a/mingw-w64-headers/include/windows.devices.geolocation.h
+++ b/mingw-w64-headers/include/windows.devices.geolocation.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.devices.geolocation.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.devices.geolocation.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
@@ -1587,6 +1587,7 @@
 /*
  * Class Windows.Devices.Geolocation.StatusChangedEventArgs
  */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
 #ifndef RUNTIMECLASS_Windows_Devices_Geolocation_StatusChangedEventArgs_DEFINED
 #define RUNTIMECLASS_Windows_Devices_Geolocation_StatusChangedEventArgs_DEFINED
 #if !defined(_MSC_VER) && !defined(__MINGW32__)
@@ -1597,6 +1598,7 @@
 extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Geolocation_StatusChangedEventArgs[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','G','e','o','l','o','c','a','t','i','o','n','.','S','t','a','t','u','s','C','h','a','n','g','e','d','E','v','e','n','t','A','r','g','s',0};
 #endif
 #endif /* RUNTIMECLASS_Windows_Devices_Geolocation_StatusChangedEventArgs_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
 
 /*
  * Class Windows.Devices.Geolocation.CivicAddress
diff --git a/mingw-w64-headers/include/windows.devices.haptics.h b/mingw-w64-headers/include/windows.devices.haptics.h
index 629baa4..5e5b3d8 100644
--- a/mingw-w64-headers/include/windows.devices.haptics.h
+++ b/mingw-w64-headers/include/windows.devices.haptics.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.devices.haptics.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.devices.haptics.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.devices.input.h b/mingw-w64-headers/include/windows.devices.input.h
index 89b5e32..481da8f 100644
--- a/mingw-w64-headers/include/windows.devices.input.h
+++ b/mingw-w64-headers/include/windows.devices.input.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.devices.input.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.devices.input.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.devices.power.h b/mingw-w64-headers/include/windows.devices.power.h
index dd9e44a..4183cb4 100644
--- a/mingw-w64-headers/include/windows.devices.power.h
+++ b/mingw-w64-headers/include/windows.devices.power.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.devices.power.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.devices.power.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.devices.radios.h b/mingw-w64-headers/include/windows.devices.radios.h
index 0e51cbd..94f9cd1 100644
--- a/mingw-w64-headers/include/windows.devices.radios.h
+++ b/mingw-w64-headers/include/windows.devices.radios.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.devices.radios.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.devices.radios.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.devices.usb.h b/mingw-w64-headers/include/windows.devices.usb.h
index 944c1df..49165a8 100644
--- a/mingw-w64-headers/include/windows.devices.usb.h
+++ b/mingw-w64-headers/include/windows.devices.usb.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.devices.usb.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.devices.usb.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.foundation.collections.h b/mingw-w64-headers/include/windows.foundation.collections.h
index 0694aac..b319b27 100644
--- a/mingw-w64-headers/include/windows.foundation.collections.h
+++ b/mingw-w64-headers/include/windows.foundation.collections.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.foundation.collections.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.foundation.collections.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.foundation.h b/mingw-w64-headers/include/windows.foundation.h
index dc96e7f..06bf692 100644
--- a/mingw-w64-headers/include/windows.foundation.h
+++ b/mingw-w64-headers/include/windows.foundation.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.foundation.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.foundation.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
@@ -35,6 +35,23 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef ____x_ABI_CWindows_CFoundation_CCollections_CPropertySet_FWD_DEFINED__
+#define ____x_ABI_CWindows_CFoundation_CCollections_CPropertySet_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                class PropertySet;
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CFoundation_CCollections_CPropertySet __x_ABI_CWindows_CFoundation_CCollections_CPropertySet;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CFoundation_CCollections_CPropertySet_FWD_DEFINED__ */
+
 #ifndef ____x_ABI_CWindows_CFoundation_CCollections_CValueSet_FWD_DEFINED__
 #define ____x_ABI_CWindows_CFoundation_CCollections_CValueSet_FWD_DEFINED__
 #ifdef __cplusplus
@@ -1173,6 +1190,22 @@
 #endif /* WINDOWS_FOUNDATION_FOUNDATIONCONTRACT_VERSION >= 0x10000 */
 
 /*
+ * Class Windows.Foundation.Collections.PropertySet
+ */
+#if WINDOWS_FOUNDATION_FOUNDATIONCONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_Foundation_Collections_PropertySet_DEFINED
+#define RUNTIMECLASS_Windows_Foundation_Collections_PropertySet_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_Foundation_Collections_PropertySet[] = {'W','i','n','d','o','w','s','.','F','o','u','n','d','a','t','i','o','n','.','C','o','l','l','e','c','t','i','o','n','s','.','P','r','o','p','e','r','t','y','S','e','t',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Foundation_Collections_PropertySet[] = L"Windows.Foundation.Collections.PropertySet";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Foundation_Collections_PropertySet[] = {'W','i','n','d','o','w','s','.','F','o','u','n','d','a','t','i','o','n','.','C','o','l','l','e','c','t','i','o','n','s','.','P','r','o','p','e','r','t','y','S','e','t',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_Foundation_Collections_PropertySet_DEFINED */
+#endif /* WINDOWS_FOUNDATION_FOUNDATIONCONTRACT_VERSION >= 0x10000 */
+
+/*
  * Class Windows.Foundation.Collections.ValueSet
  */
 #if WINDOWS_FOUNDATION_FOUNDATIONCONTRACT_VERSION >= 0x10000
diff --git a/mingw-w64-headers/include/windows.foundation.metadata.h b/mingw-w64-headers/include/windows.foundation.metadata.h
index a87dc4d..b9dd808 100644
--- a/mingw-w64-headers/include/windows.foundation.metadata.h
+++ b/mingw-w64-headers/include/windows.foundation.metadata.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.foundation.metadata.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.foundation.metadata.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.foundation.numerics.h b/mingw-w64-headers/include/windows.foundation.numerics.h
index b2c58d1..6918424 100644
--- a/mingw-w64-headers/include/windows.foundation.numerics.h
+++ b/mingw-w64-headers/include/windows.foundation.numerics.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.foundation.numerics.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.foundation.numerics.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.gaming.input.custom.h b/mingw-w64-headers/include/windows.gaming.input.custom.h
index 68b054a..113c62e 100644
--- a/mingw-w64-headers/include/windows.gaming.input.custom.h
+++ b/mingw-w64-headers/include/windows.gaming.input.custom.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.gaming.input.custom.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.gaming.input.custom.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.gaming.input.forcefeedback.h b/mingw-w64-headers/include/windows.gaming.input.forcefeedback.h
index 802e87c..669d1ec 100644
--- a/mingw-w64-headers/include/windows.gaming.input.forcefeedback.h
+++ b/mingw-w64-headers/include/windows.gaming.input.forcefeedback.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.gaming.input.forcefeedback.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.gaming.input.forcefeedback.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.gaming.input.h b/mingw-w64-headers/include/windows.gaming.input.h
index 0b2817c..c987847 100644
--- a/mingw-w64-headers/include/windows.gaming.input.h
+++ b/mingw-w64-headers/include/windows.gaming.input.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.gaming.input.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.gaming.input.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.gaming.ui.h b/mingw-w64-headers/include/windows.gaming.ui.h
index 42732d0..5f1c5d9 100644
--- a/mingw-w64-headers/include/windows.gaming.ui.h
+++ b/mingw-w64-headers/include/windows.gaming.ui.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.gaming.ui.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.gaming.ui.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.globalization.h b/mingw-w64-headers/include/windows.globalization.h
index 3a0c836..911dbd2 100644
--- a/mingw-w64-headers/include/windows.globalization.h
+++ b/mingw-w64-headers/include/windows.globalization.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.globalization.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.globalization.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.graphics.capture.h b/mingw-w64-headers/include/windows.graphics.capture.h
index 3cd55c2..1dc2111 100644
--- a/mingw-w64-headers/include/windows.graphics.capture.h
+++ b/mingw-w64-headers/include/windows.graphics.capture.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.graphics.capture.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.graphics.capture.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.graphics.capture.interop.h b/mingw-w64-headers/include/windows.graphics.capture.interop.h
index 0db2389..d40b886 100644
--- a/mingw-w64-headers/include/windows.graphics.capture.interop.h
+++ b/mingw-w64-headers/include/windows.graphics.capture.interop.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.graphics.capture.interop.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.graphics.capture.interop.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.graphics.directx.direct3d11.h b/mingw-w64-headers/include/windows.graphics.directx.direct3d11.h
index eac3d8a..c041681 100644
--- a/mingw-w64-headers/include/windows.graphics.directx.direct3d11.h
+++ b/mingw-w64-headers/include/windows.graphics.directx.direct3d11.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.graphics.directx.direct3d11.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.graphics.directx.direct3d11.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.graphics.directx.h b/mingw-w64-headers/include/windows.graphics.directx.h
index 294997f..7d39779 100644
--- a/mingw-w64-headers/include/windows.graphics.directx.h
+++ b/mingw-w64-headers/include/windows.graphics.directx.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.graphics.directx.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.graphics.directx.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.graphics.effects.h b/mingw-w64-headers/include/windows.graphics.effects.h
index 18aa1b7..5eb35cc 100644
--- a/mingw-w64-headers/include/windows.graphics.effects.h
+++ b/mingw-w64-headers/include/windows.graphics.effects.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.graphics.effects.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.graphics.effects.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.graphics.h b/mingw-w64-headers/include/windows.graphics.h
index 3dea89f..2f4835b 100644
--- a/mingw-w64-headers/include/windows.graphics.h
+++ b/mingw-w64-headers/include/windows.graphics.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.graphics.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.graphics.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.graphics.holographic.h b/mingw-w64-headers/include/windows.graphics.holographic.h
index 51843fb..a85f5ad 100644
--- a/mingw-w64-headers/include/windows.graphics.holographic.h
+++ b/mingw-w64-headers/include/windows.graphics.holographic.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.graphics.holographic.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.graphics.holographic.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.graphics.imaging.h b/mingw-w64-headers/include/windows.graphics.imaging.h
index 9a87c77..90cb57d 100644
--- a/mingw-w64-headers/include/windows.graphics.imaging.h
+++ b/mingw-w64-headers/include/windows.graphics.imaging.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.graphics.imaging.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.graphics.imaging.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.management.deployment.h b/mingw-w64-headers/include/windows.management.deployment.h
index 393d222..625b263 100644
--- a/mingw-w64-headers/include/windows.management.deployment.h
+++ b/mingw-w64-headers/include/windows.management.deployment.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.management.deployment.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.management.deployment.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.capture.h b/mingw-w64-headers/include/windows.media.capture.h
index 9be8f79..90ec44b 100644
--- a/mingw-w64-headers/include/windows.media.capture.h
+++ b/mingw-w64-headers/include/windows.media.capture.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.media.capture.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.media.capture.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.closedcaptioning.h b/mingw-w64-headers/include/windows.media.closedcaptioning.h
index 34271a9..416bded 100644
--- a/mingw-w64-headers/include/windows.media.closedcaptioning.h
+++ b/mingw-w64-headers/include/windows.media.closedcaptioning.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.media.closedcaptioning.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.media.closedcaptioning.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.core.h b/mingw-w64-headers/include/windows.media.core.h
new file mode 100644
index 0000000..7de2be4
--- /dev/null
+++ b/mingw-w64-headers/include/windows.media.core.h
@@ -0,0 +1,205 @@
+/*** Autogenerated by WIDL 10.13 from include/windows.media.core.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 __windows_media_core_h__
+#define __windows_media_core_h__
+
+/* Forward declarations */
+
+#ifndef ____x_ABI_CWindows_CMedia_CCore_CIMediaSource_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CCore_CIMediaSource_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CCore_CIMediaSource __x_ABI_CWindows_CMedia_CCore_CIMediaSource;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CCore_CIMediaSource ABI::Windows::Media::Core::IMediaSource
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace Core {
+                interface IMediaSource;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+/* Headers for imported files */
+
+#include <inspectable.h>
+#include <asyncinfo.h>
+#include <eventtoken.h>
+#include <windowscontracts.h>
+#include <windows.foundation.h>
+#include <windows.graphics.directx.direct3d11.h>
+#include <windows.graphics.imaging.h>
+#include <windows.media.h>
+#include <windows.media.capture.h>
+#include <windows.media.devices.h>
+#include <windows.media.effects.h>
+#include <windows.media.faceanalysis.h>
+#include <windows.media.mediaproperties.h>
+#include <windows.storage.h>
+#include <windows.storage.fileproperties.h>
+#include <windows.storage.streams.h>
+#include <windows.ui.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CCore_CIMediaSource_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CCore_CIMediaSource_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CCore_CIMediaSource __x_ABI_CWindows_CMedia_CCore_CIMediaSource;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CCore_CIMediaSource ABI::Windows::Media::Core::IMediaSource
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace Core {
+                interface IMediaSource;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+/*****************************************************************************
+ * IMediaSource interface
+ */
+#if !defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)
+#define WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION 0xe0000
+#endif // defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CMedia_CCore_CIMediaSource_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CCore_CIMediaSource_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CMedia_CCore_CIMediaSource, 0xe7bfb599, 0xa09d, 0x4c21, 0xbc,0xdf, 0x20,0xaf,0x4f,0x86,0xb3,0xd9);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace Core {
+                MIDL_INTERFACE("e7bfb599-a09d-4c21-bcdf-20af4f86b3d9")
+                IMediaSource : public IInspectable
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CMedia_CCore_CIMediaSource, 0xe7bfb599, 0xa09d, 0x4c21, 0xbc,0xdf, 0x20,0xaf,0x4f,0x86,0xb3,0xd9)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CMedia_CCore_CIMediaSourceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CMedia_CCore_CIMediaSource *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CMedia_CCore_CIMediaSource *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CMedia_CCore_CIMediaSource *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CMedia_CCore_CIMediaSource *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CMedia_CCore_CIMediaSource *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CMedia_CCore_CIMediaSource *This,
+        TrustLevel *trustLevel);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CMedia_CCore_CIMediaSourceVtbl;
+
+interface __x_ABI_CWindows_CMedia_CCore_CIMediaSource {
+    CONST_VTBL __x_ABI_CWindows_CMedia_CCore_CIMediaSourceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CMedia_CCore_CIMediaSource_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CMedia_CCore_CIMediaSource_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CMedia_CCore_CIMediaSource_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CMedia_CCore_CIMediaSource_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CMedia_CCore_CIMediaSource_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CMedia_CCore_CIMediaSource_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CCore_CIMediaSource_QueryInterface(__x_ABI_CWindows_CMedia_CCore_CIMediaSource* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CMedia_CCore_CIMediaSource_AddRef(__x_ABI_CWindows_CMedia_CCore_CIMediaSource* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CMedia_CCore_CIMediaSource_Release(__x_ABI_CWindows_CMedia_CCore_CIMediaSource* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CCore_CIMediaSource_GetIids(__x_ABI_CWindows_CMedia_CCore_CIMediaSource* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CCore_CIMediaSource_GetRuntimeClassName(__x_ABI_CWindows_CMedia_CCore_CIMediaSource* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CCore_CIMediaSource_GetTrustLevel(__x_ABI_CWindows_CMedia_CCore_CIMediaSource* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+#endif
+#ifdef WIDL_using_Windows_Media_Core
+#define IID_IMediaSource IID___x_ABI_CWindows_CMedia_CCore_CIMediaSource
+#define IMediaSourceVtbl __x_ABI_CWindows_CMedia_CCore_CIMediaSourceVtbl
+#define IMediaSource __x_ABI_CWindows_CMedia_CCore_CIMediaSource
+#define IMediaSource_QueryInterface __x_ABI_CWindows_CMedia_CCore_CIMediaSource_QueryInterface
+#define IMediaSource_AddRef __x_ABI_CWindows_CMedia_CCore_CIMediaSource_AddRef
+#define IMediaSource_Release __x_ABI_CWindows_CMedia_CCore_CIMediaSource_Release
+#define IMediaSource_GetIids __x_ABI_CWindows_CMedia_CCore_CIMediaSource_GetIids
+#define IMediaSource_GetRuntimeClassName __x_ABI_CWindows_CMedia_CCore_CIMediaSource_GetRuntimeClassName
+#define IMediaSource_GetTrustLevel __x_ABI_CWindows_CMedia_CCore_CIMediaSource_GetTrustLevel
+#endif /* WIDL_using_Windows_Media_Core */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CMedia_CCore_CIMediaSource_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __windows_media_core_h__ */
diff --git a/mingw-w64-headers/include/windows.media.devices.h b/mingw-w64-headers/include/windows.media.devices.h
index a35f326..221339e 100644
--- a/mingw-w64-headers/include/windows.media.devices.h
+++ b/mingw-w64-headers/include/windows.media.devices.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.media.devices.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.media.devices.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
@@ -566,6 +566,11 @@
 /*
  * Class Windows.Media.Devices.MediaDevice
  */
+#if !defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)
+#define WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION 0xe0000
+#endif // defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
 #ifndef RUNTIMECLASS_Windows_Media_Devices_MediaDevice_DEFINED
 #define RUNTIMECLASS_Windows_Media_Devices_MediaDevice_DEFINED
 #if !defined(_MSC_VER) && !defined(__MINGW32__)
@@ -576,10 +581,12 @@
 extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Media_Devices_MediaDevice[] = {'W','i','n','d','o','w','s','.','M','e','d','i','a','.','D','e','v','i','c','e','s','.','M','e','d','i','a','D','e','v','i','c','e',0};
 #endif
 #endif /* RUNTIMECLASS_Windows_Media_Devices_MediaDevice_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
 
 /*
  * Class Windows.Media.Devices.DefaultAudioRenderDeviceChangedEventArgs
  */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
 #ifndef RUNTIMECLASS_Windows_Media_Devices_DefaultAudioRenderDeviceChangedEventArgs_DEFINED
 #define RUNTIMECLASS_Windows_Media_Devices_DefaultAudioRenderDeviceChangedEventArgs_DEFINED
 #if !defined(_MSC_VER) && !defined(__MINGW32__)
@@ -590,10 +597,12 @@
 extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Media_Devices_DefaultAudioRenderDeviceChangedEventArgs[] = {'W','i','n','d','o','w','s','.','M','e','d','i','a','.','D','e','v','i','c','e','s','.','D','e','f','a','u','l','t','A','u','d','i','o','R','e','n','d','e','r','D','e','v','i','c','e','C','h','a','n','g','e','d','E','v','e','n','t','A','r','g','s',0};
 #endif
 #endif /* RUNTIMECLASS_Windows_Media_Devices_DefaultAudioRenderDeviceChangedEventArgs_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
 
 /*
  * Class Windows.Media.Devices.DefaultAudioCaptureDeviceChangedEventArgs
  */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
 #ifndef RUNTIMECLASS_Windows_Media_Devices_DefaultAudioCaptureDeviceChangedEventArgs_DEFINED
 #define RUNTIMECLASS_Windows_Media_Devices_DefaultAudioCaptureDeviceChangedEventArgs_DEFINED
 #if !defined(_MSC_VER) && !defined(__MINGW32__)
@@ -604,6 +613,7 @@
 extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Media_Devices_DefaultAudioCaptureDeviceChangedEventArgs[] = {'W','i','n','d','o','w','s','.','M','e','d','i','a','.','D','e','v','i','c','e','s','.','D','e','f','a','u','l','t','A','u','d','i','o','C','a','p','t','u','r','e','D','e','v','i','c','e','C','h','a','n','g','e','d','E','v','e','n','t','A','r','g','s',0};
 #endif
 #endif /* RUNTIMECLASS_Windows_Media_Devices_DefaultAudioCaptureDeviceChangedEventArgs_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
 
 /*****************************************************************************
  * ITypedEventHandler<IInspectable*,ABI::Windows::Media::Devices::DefaultAudioCaptureDeviceChangedEventArgs* > interface
diff --git a/mingw-w64-headers/include/windows.media.effects.h b/mingw-w64-headers/include/windows.media.effects.h
index 4e463fe..f706c0c 100644
--- a/mingw-w64-headers/include/windows.media.effects.h
+++ b/mingw-w64-headers/include/windows.media.effects.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.media.effects.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.media.effects.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.faceanalysis.h b/mingw-w64-headers/include/windows.media.faceanalysis.h
index fc121d0..af2a410 100644
--- a/mingw-w64-headers/include/windows.media.faceanalysis.h
+++ b/mingw-w64-headers/include/windows.media.faceanalysis.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.media.faceanalysis.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.media.faceanalysis.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.h b/mingw-w64-headers/include/windows.media.h
index d922325..9a45d6f 100644
--- a/mingw-w64-headers/include/windows.media.h
+++ b/mingw-w64-headers/include/windows.media.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.media.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.media.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
@@ -198,6 +198,21 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef ____x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics ABI::Windows::Media::ISystemMediaTransportControlsStatics
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            interface ISystemMediaTransportControlsStatics;
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
 #ifndef ____x_ABI_CWindows_CMedia_CISystemMediaTransportControlsTimelineProperties_FWD_DEFINED__
 #define ____x_ABI_CWindows_CMedia_CISystemMediaTransportControlsTimelineProperties_FWD_DEFINED__
 typedef interface __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsTimelineProperties __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsTimelineProperties;
@@ -3380,6 +3395,132 @@
 #endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
 
 /*****************************************************************************
+ * ISystemMediaTransportControlsStatics interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics, 0x43ba380a, 0xeca4, 0x4832, 0x91,0xab, 0xd4,0x15,0xfa,0xe4,0x84,0xc6);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            MIDL_INTERFACE("43ba380a-eca4-4832-91ab-d415fae484c6")
+            ISystemMediaTransportControlsStatics : public IInspectable
+            {
+                virtual HRESULT STDMETHODCALLTYPE GetForCurrentView(
+                    ABI::Windows::Media::ISystemMediaTransportControls **controls) = 0;
+
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics, 0x43ba380a, 0xeca4, 0x4832, 0x91,0xab, 0xd4,0x15,0xfa,0xe4,0x84,0xc6)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStaticsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics *This,
+        TrustLevel *trustLevel);
+
+    /*** ISystemMediaTransportControlsStatics methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetForCurrentView)(
+        __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics *This,
+        __x_ABI_CWindows_CMedia_CISystemMediaTransportControls **controls);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStaticsVtbl;
+
+interface __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics {
+    CONST_VTBL __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStaticsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** ISystemMediaTransportControlsStatics methods ***/
+#define __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics_GetForCurrentView(This,controls) (This)->lpVtbl->GetForCurrentView(This,controls)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics_QueryInterface(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics_AddRef(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics_Release(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics_GetIids(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics_GetRuntimeClassName(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics_GetTrustLevel(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** ISystemMediaTransportControlsStatics methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics_GetForCurrentView(__x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics* This,__x_ABI_CWindows_CMedia_CISystemMediaTransportControls **controls) {
+    return This->lpVtbl->GetForCurrentView(This,controls);
+}
+#endif
+#ifdef WIDL_using_Windows_Media
+#define IID_ISystemMediaTransportControlsStatics IID___x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics
+#define ISystemMediaTransportControlsStaticsVtbl __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStaticsVtbl
+#define ISystemMediaTransportControlsStatics __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics
+#define ISystemMediaTransportControlsStatics_QueryInterface __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics_QueryInterface
+#define ISystemMediaTransportControlsStatics_AddRef __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics_AddRef
+#define ISystemMediaTransportControlsStatics_Release __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics_Release
+#define ISystemMediaTransportControlsStatics_GetIids __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics_GetIids
+#define ISystemMediaTransportControlsStatics_GetRuntimeClassName __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics_GetRuntimeClassName
+#define ISystemMediaTransportControlsStatics_GetTrustLevel __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics_GetTrustLevel
+#define ISystemMediaTransportControlsStatics_GetForCurrentView __x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics_GetForCurrentView
+#endif /* WIDL_using_Windows_Media */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CMedia_CISystemMediaTransportControlsStatics_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
  * ISystemMediaTransportControlsTimelineProperties interface
  */
 #if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
diff --git a/mingw-w64-headers/include/windows.media.mediaproperties.h b/mingw-w64-headers/include/windows.media.mediaproperties.h
new file mode 100644
index 0000000..ffe10a1
--- /dev/null
+++ b/mingw-w64-headers/include/windows.media.mediaproperties.h
@@ -0,0 +1,1579 @@
+/*** Autogenerated by WIDL 10.13 from include/windows.media.mediaproperties.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 __windows_media_mediaproperties_h__
+#define __windows_media_mediaproperties_h__
+
+/* Forward declarations */
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties ABI::Windows::Media::MediaProperties::IAudioEncodingProperties
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IAudioEncodingProperties;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties ABI::Windows::Media::MediaProperties::IContainerEncodingProperties
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IContainerEncodingProperties;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile ABI::Windows::Media::MediaProperties::IMediaEncodingProfile
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IMediaEncodingProfile;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio ABI::Windows::Media::MediaProperties::IMediaRatio
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IMediaRatio;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties ABI::Windows::Media::MediaProperties::IVideoEncodingProperties
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IVideoEncodingProperties;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CAudioEncodingProperties_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CAudioEncodingProperties_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                class AudioEncodingProperties;
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CMedia_CMediaProperties_CAudioEncodingProperties __x_ABI_CWindows_CMedia_CMediaProperties_CAudioEncodingProperties;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CMedia_CMediaProperties_CAudioEncodingProperties_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CContainerEncodingProperties_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CContainerEncodingProperties_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                class ContainerEncodingProperties;
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CMedia_CMediaProperties_CContainerEncodingProperties __x_ABI_CWindows_CMedia_CMediaProperties_CContainerEncodingProperties;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CMedia_CMediaProperties_CContainerEncodingProperties_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CMediaEncodingProfile_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CMediaEncodingProfile_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                class MediaEncodingProfile;
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CMedia_CMediaProperties_CMediaEncodingProfile __x_ABI_CWindows_CMedia_CMediaProperties_CMediaEncodingProfile;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CMedia_CMediaProperties_CMediaEncodingProfile_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CMediaRatio_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CMediaRatio_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                class MediaRatio;
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CMedia_CMediaProperties_CMediaRatio __x_ABI_CWindows_CMedia_CMediaProperties_CMediaRatio;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CMedia_CMediaProperties_CMediaRatio_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CVideoEncodingProperties_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CVideoEncodingProperties_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                class VideoEncodingProperties;
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CMedia_CMediaProperties_CVideoEncodingProperties __x_ABI_CWindows_CMedia_CMediaProperties_CVideoEncodingProperties;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CMedia_CMediaProperties_CVideoEncodingProperties_FWD_DEFINED__ */
+
+/* Headers for imported files */
+
+#include <inspectable.h>
+#include <asyncinfo.h>
+#include <eventtoken.h>
+#include <windowscontracts.h>
+#include <windows.foundation.h>
+#include <windows.media.core.h>
+#include <windows.storage.h>
+#include <windows.storage.streams.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties ABI::Windows::Media::MediaProperties::IAudioEncodingProperties
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IAudioEncodingProperties;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties2_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties2_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties2 __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties2;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties2 ABI::Windows::Media::MediaProperties::IAudioEncodingProperties2
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IAudioEncodingProperties2;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties3_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties3_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties3 __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties3;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties3 ABI::Windows::Media::MediaProperties::IAudioEncodingProperties3
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IAudioEncodingProperties3;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingPropertiesStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingPropertiesStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingPropertiesStatics __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingPropertiesStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingPropertiesStatics ABI::Windows::Media::MediaProperties::IAudioEncodingPropertiesStatics
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IAudioEncodingPropertiesStatics;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingPropertiesStatics2_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingPropertiesStatics2_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingPropertiesStatics2 __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingPropertiesStatics2;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingPropertiesStatics2 ABI::Windows::Media::MediaProperties::IAudioEncodingPropertiesStatics2
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IAudioEncodingPropertiesStatics2;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingPropertiesWithFormatUserData_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingPropertiesWithFormatUserData_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingPropertiesWithFormatUserData __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingPropertiesWithFormatUserData;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingPropertiesWithFormatUserData ABI::Windows::Media::MediaProperties::IAudioEncodingPropertiesWithFormatUserData
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IAudioEncodingPropertiesWithFormatUserData;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties ABI::Windows::Media::MediaProperties::IContainerEncodingProperties
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IContainerEncodingProperties;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties2_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties2_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties2 __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties2;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties2 ABI::Windows::Media::MediaProperties::IContainerEncodingProperties2
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IContainerEncodingProperties2;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile ABI::Windows::Media::MediaProperties::IMediaEncodingProfile
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IMediaEncodingProfile;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile2_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile2_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile2 __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile2;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile2 ABI::Windows::Media::MediaProperties::IMediaEncodingProfile2
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IMediaEncodingProfile2;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile3_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile3_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile3 __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile3;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile3 ABI::Windows::Media::MediaProperties::IMediaEncodingProfile3
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IMediaEncodingProfile3;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfileStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfileStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfileStatics __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfileStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfileStatics ABI::Windows::Media::MediaProperties::IMediaEncodingProfileStatics
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IMediaEncodingProfileStatics;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfileStatics2_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfileStatics2_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfileStatics2 __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfileStatics2;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfileStatics2 ABI::Windows::Media::MediaProperties::IMediaEncodingProfileStatics2
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IMediaEncodingProfileStatics2;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfileStatics3_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfileStatics3_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfileStatics3 __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfileStatics3;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfileStatics3 ABI::Windows::Media::MediaProperties::IMediaEncodingProfileStatics3
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IMediaEncodingProfileStatics3;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProperties_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProperties_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProperties __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProperties;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProperties ABI::Windows::Media::MediaProperties::IMediaEncodingProperties
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IMediaEncodingProperties;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio ABI::Windows::Media::MediaProperties::IMediaRatio
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IMediaRatio;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties ABI::Windows::Media::MediaProperties::IVideoEncodingProperties
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IVideoEncodingProperties;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties2_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties2_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties2 __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties2;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties2 ABI::Windows::Media::MediaProperties::IVideoEncodingProperties2
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IVideoEncodingProperties2;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties3_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties3_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties3 __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties3;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties3 ABI::Windows::Media::MediaProperties::IVideoEncodingProperties3
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IVideoEncodingProperties3;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties4_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties4_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties4 __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties4;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties4 ABI::Windows::Media::MediaProperties::IVideoEncodingProperties4
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IVideoEncodingProperties4;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties5_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties5_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties5 __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties5;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties5 ABI::Windows::Media::MediaProperties::IVideoEncodingProperties5
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IVideoEncodingProperties5;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingPropertiesStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingPropertiesStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingPropertiesStatics __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingPropertiesStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingPropertiesStatics ABI::Windows::Media::MediaProperties::IVideoEncodingPropertiesStatics
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IVideoEncodingPropertiesStatics;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingPropertiesStatics2_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingPropertiesStatics2_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingPropertiesStatics2 __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingPropertiesStatics2;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingPropertiesStatics2 ABI::Windows::Media::MediaProperties::IVideoEncodingPropertiesStatics2
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                interface IVideoEncodingPropertiesStatics2;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+/*****************************************************************************
+ * IAudioEncodingProperties interface
+ */
+#if !defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)
+#define WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION 0xe0000
+#endif // defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties, 0x62bc7a16, 0x005c, 0x4b3b, 0x8a,0x0b, 0x0a,0x09,0x0e,0x96,0x87,0xf3);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                MIDL_INTERFACE("62bc7a16-005c-4b3b-8a0b-0a090e9687f3")
+                IAudioEncodingProperties : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE put_Bitrate(
+                        UINT32 value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_Bitrate(
+                        UINT32 *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_ChannelCount(
+                        UINT32 value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_ChannelCount(
+                        UINT32 *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_SampleRate(
+                        UINT32 value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_SampleRate(
+                        UINT32 *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_BitsPerSample(
+                        UINT32 value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_BitsPerSample(
+                        UINT32 *value) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties, 0x62bc7a16, 0x005c, 0x4b3b, 0x8a,0x0b, 0x0a,0x09,0x0e,0x96,0x87,0xf3)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingPropertiesVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties *This,
+        TrustLevel *trustLevel);
+
+    /*** IAudioEncodingProperties methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_Bitrate)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties *This,
+        UINT32 value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Bitrate)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties *This,
+        UINT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_ChannelCount)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties *This,
+        UINT32 value);
+
+    HRESULT (STDMETHODCALLTYPE *get_ChannelCount)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties *This,
+        UINT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_SampleRate)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties *This,
+        UINT32 value);
+
+    HRESULT (STDMETHODCALLTYPE *get_SampleRate)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties *This,
+        UINT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_BitsPerSample)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties *This,
+        UINT32 value);
+
+    HRESULT (STDMETHODCALLTYPE *get_BitsPerSample)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties *This,
+        UINT32 *value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingPropertiesVtbl;
+
+interface __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties {
+    CONST_VTBL __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingPropertiesVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IAudioEncodingProperties methods ***/
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_put_Bitrate(This,value) (This)->lpVtbl->put_Bitrate(This,value)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_get_Bitrate(This,value) (This)->lpVtbl->get_Bitrate(This,value)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_put_ChannelCount(This,value) (This)->lpVtbl->put_ChannelCount(This,value)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_get_ChannelCount(This,value) (This)->lpVtbl->get_ChannelCount(This,value)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_put_SampleRate(This,value) (This)->lpVtbl->put_SampleRate(This,value)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_get_SampleRate(This,value) (This)->lpVtbl->get_SampleRate(This,value)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_put_BitsPerSample(This,value) (This)->lpVtbl->put_BitsPerSample(This,value)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_get_BitsPerSample(This,value) (This)->lpVtbl->get_BitsPerSample(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_QueryInterface(__x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_AddRef(__x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_Release(__x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_GetIids(__x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_GetRuntimeClassName(__x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_GetTrustLevel(__x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IAudioEncodingProperties methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_put_Bitrate(__x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties* This,UINT32 value) {
+    return This->lpVtbl->put_Bitrate(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_get_Bitrate(__x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties* This,UINT32 *value) {
+    return This->lpVtbl->get_Bitrate(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_put_ChannelCount(__x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties* This,UINT32 value) {
+    return This->lpVtbl->put_ChannelCount(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_get_ChannelCount(__x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties* This,UINT32 *value) {
+    return This->lpVtbl->get_ChannelCount(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_put_SampleRate(__x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties* This,UINT32 value) {
+    return This->lpVtbl->put_SampleRate(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_get_SampleRate(__x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties* This,UINT32 *value) {
+    return This->lpVtbl->get_SampleRate(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_put_BitsPerSample(__x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties* This,UINT32 value) {
+    return This->lpVtbl->put_BitsPerSample(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_get_BitsPerSample(__x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties* This,UINT32 *value) {
+    return This->lpVtbl->get_BitsPerSample(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Media_MediaProperties
+#define IID_IAudioEncodingProperties IID___x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties
+#define IAudioEncodingPropertiesVtbl __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingPropertiesVtbl
+#define IAudioEncodingProperties __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties
+#define IAudioEncodingProperties_QueryInterface __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_QueryInterface
+#define IAudioEncodingProperties_AddRef __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_AddRef
+#define IAudioEncodingProperties_Release __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_Release
+#define IAudioEncodingProperties_GetIids __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_GetIids
+#define IAudioEncodingProperties_GetRuntimeClassName __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_GetRuntimeClassName
+#define IAudioEncodingProperties_GetTrustLevel __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_GetTrustLevel
+#define IAudioEncodingProperties_put_Bitrate __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_put_Bitrate
+#define IAudioEncodingProperties_get_Bitrate __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_get_Bitrate
+#define IAudioEncodingProperties_put_ChannelCount __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_put_ChannelCount
+#define IAudioEncodingProperties_get_ChannelCount __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_get_ChannelCount
+#define IAudioEncodingProperties_put_SampleRate __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_put_SampleRate
+#define IAudioEncodingProperties_get_SampleRate __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_get_SampleRate
+#define IAudioEncodingProperties_put_BitsPerSample __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_put_BitsPerSample
+#define IAudioEncodingProperties_get_BitsPerSample __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_get_BitsPerSample
+#endif /* WIDL_using_Windows_Media_MediaProperties */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IContainerEncodingProperties interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties, 0x59ac2a57, 0xb32a, 0x479e, 0x8a,0x61, 0x4b,0x7f,0x2e,0x9e,0x7e,0xa0);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                MIDL_INTERFACE("59ac2a57-b32a-479e-8a61-4b7f2e9e7ea0")
+                IContainerEncodingProperties : public IInspectable
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties, 0x59ac2a57, 0xb32a, 0x479e, 0x8a,0x61, 0x4b,0x7f,0x2e,0x9e,0x7e,0xa0)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingPropertiesVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties *This,
+        TrustLevel *trustLevel);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingPropertiesVtbl;
+
+interface __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties {
+    CONST_VTBL __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingPropertiesVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties_QueryInterface(__x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties_AddRef(__x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties_Release(__x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties_GetIids(__x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties_GetRuntimeClassName(__x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties_GetTrustLevel(__x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+#endif
+#ifdef WIDL_using_Windows_Media_MediaProperties
+#define IID_IContainerEncodingProperties IID___x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties
+#define IContainerEncodingPropertiesVtbl __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingPropertiesVtbl
+#define IContainerEncodingProperties __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties
+#define IContainerEncodingProperties_QueryInterface __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties_QueryInterface
+#define IContainerEncodingProperties_AddRef __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties_AddRef
+#define IContainerEncodingProperties_Release __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties_Release
+#define IContainerEncodingProperties_GetIids __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties_GetIids
+#define IContainerEncodingProperties_GetRuntimeClassName __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties_GetRuntimeClassName
+#define IContainerEncodingProperties_GetTrustLevel __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties_GetTrustLevel
+#endif /* WIDL_using_Windows_Media_MediaProperties */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IMediaEncodingProfile interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile, 0xe7dbf5a8, 0x1db9, 0x4783, 0x87,0x6b, 0x3d,0xfe,0x12,0xac,0xfd,0xb3);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                MIDL_INTERFACE("e7dbf5a8-1db9-4783-876b-3dfe12acfdb3")
+                IMediaEncodingProfile : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE put_Audio(
+                        ABI::Windows::Media::MediaProperties::IAudioEncodingProperties *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_Audio(
+                        ABI::Windows::Media::MediaProperties::IAudioEncodingProperties **value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_Video(
+                        ABI::Windows::Media::MediaProperties::IVideoEncodingProperties *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_Video(
+                        ABI::Windows::Media::MediaProperties::IVideoEncodingProperties **value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_Container(
+                        ABI::Windows::Media::MediaProperties::IContainerEncodingProperties *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_Container(
+                        ABI::Windows::Media::MediaProperties::IContainerEncodingProperties **value) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile, 0xe7dbf5a8, 0x1db9, 0x4783, 0x87,0x6b, 0x3d,0xfe,0x12,0xac,0xfd,0xb3)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfileVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile *This,
+        TrustLevel *trustLevel);
+
+    /*** IMediaEncodingProfile methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_Audio)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile *This,
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Audio)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile *This,
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties **value);
+
+    HRESULT (STDMETHODCALLTYPE *put_Video)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile *This,
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Video)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile *This,
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties **value);
+
+    HRESULT (STDMETHODCALLTYPE *put_Container)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile *This,
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Container)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile *This,
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfileVtbl;
+
+interface __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile {
+    CONST_VTBL __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfileVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IMediaEncodingProfile methods ***/
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_put_Audio(This,value) (This)->lpVtbl->put_Audio(This,value)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_get_Audio(This,value) (This)->lpVtbl->get_Audio(This,value)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_put_Video(This,value) (This)->lpVtbl->put_Video(This,value)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_get_Video(This,value) (This)->lpVtbl->get_Video(This,value)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_put_Container(This,value) (This)->lpVtbl->put_Container(This,value)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_get_Container(This,value) (This)->lpVtbl->get_Container(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_QueryInterface(__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_AddRef(__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_Release(__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_GetIids(__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_GetRuntimeClassName(__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_GetTrustLevel(__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IMediaEncodingProfile methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_put_Audio(__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile* This,__x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties *value) {
+    return This->lpVtbl->put_Audio(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_get_Audio(__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile* This,__x_ABI_CWindows_CMedia_CMediaProperties_CIAudioEncodingProperties **value) {
+    return This->lpVtbl->get_Audio(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_put_Video(__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile* This,__x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties *value) {
+    return This->lpVtbl->put_Video(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_get_Video(__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile* This,__x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties **value) {
+    return This->lpVtbl->get_Video(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_put_Container(__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile* This,__x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties *value) {
+    return This->lpVtbl->put_Container(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_get_Container(__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile* This,__x_ABI_CWindows_CMedia_CMediaProperties_CIContainerEncodingProperties **value) {
+    return This->lpVtbl->get_Container(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Media_MediaProperties
+#define IID_IMediaEncodingProfile IID___x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile
+#define IMediaEncodingProfileVtbl __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfileVtbl
+#define IMediaEncodingProfile __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile
+#define IMediaEncodingProfile_QueryInterface __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_QueryInterface
+#define IMediaEncodingProfile_AddRef __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_AddRef
+#define IMediaEncodingProfile_Release __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_Release
+#define IMediaEncodingProfile_GetIids __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_GetIids
+#define IMediaEncodingProfile_GetRuntimeClassName __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_GetRuntimeClassName
+#define IMediaEncodingProfile_GetTrustLevel __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_GetTrustLevel
+#define IMediaEncodingProfile_put_Audio __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_put_Audio
+#define IMediaEncodingProfile_get_Audio __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_get_Audio
+#define IMediaEncodingProfile_put_Video __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_put_Video
+#define IMediaEncodingProfile_get_Video __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_get_Video
+#define IMediaEncodingProfile_put_Container __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_put_Container
+#define IMediaEncodingProfile_get_Container __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_get_Container
+#endif /* WIDL_using_Windows_Media_MediaProperties */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IMediaRatio interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio, 0xd2d0fee5, 0x8929, 0x401d, 0xac,0x78, 0x7d,0x35,0x7e,0x37,0x81,0x63);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                MIDL_INTERFACE("d2d0fee5-8929-401d-ac78-7d357e378163")
+                IMediaRatio : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE put_Numerator(
+                        UINT32 value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_Numerator(
+                        UINT32 *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_Denominator(
+                        UINT32 value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_Denominator(
+                        UINT32 *value) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio, 0xd2d0fee5, 0x8929, 0x401d, 0xac,0x78, 0x7d,0x35,0x7e,0x37,0x81,0x63)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatioVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio *This,
+        TrustLevel *trustLevel);
+
+    /*** IMediaRatio methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_Numerator)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio *This,
+        UINT32 value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Numerator)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio *This,
+        UINT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_Denominator)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio *This,
+        UINT32 value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Denominator)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio *This,
+        UINT32 *value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatioVtbl;
+
+interface __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio {
+    CONST_VTBL __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatioVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IMediaRatio methods ***/
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_put_Numerator(This,value) (This)->lpVtbl->put_Numerator(This,value)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_get_Numerator(This,value) (This)->lpVtbl->get_Numerator(This,value)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_put_Denominator(This,value) (This)->lpVtbl->put_Denominator(This,value)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_get_Denominator(This,value) (This)->lpVtbl->get_Denominator(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_QueryInterface(__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_AddRef(__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_Release(__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_GetIids(__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_GetRuntimeClassName(__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_GetTrustLevel(__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IMediaRatio methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_put_Numerator(__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio* This,UINT32 value) {
+    return This->lpVtbl->put_Numerator(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_get_Numerator(__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio* This,UINT32 *value) {
+    return This->lpVtbl->get_Numerator(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_put_Denominator(__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio* This,UINT32 value) {
+    return This->lpVtbl->put_Denominator(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_get_Denominator(__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio* This,UINT32 *value) {
+    return This->lpVtbl->get_Denominator(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Media_MediaProperties
+#define IID_IMediaRatio IID___x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio
+#define IMediaRatioVtbl __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatioVtbl
+#define IMediaRatio __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio
+#define IMediaRatio_QueryInterface __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_QueryInterface
+#define IMediaRatio_AddRef __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_AddRef
+#define IMediaRatio_Release __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_Release
+#define IMediaRatio_GetIids __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_GetIids
+#define IMediaRatio_GetRuntimeClassName __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_GetRuntimeClassName
+#define IMediaRatio_GetTrustLevel __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_GetTrustLevel
+#define IMediaRatio_put_Numerator __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_put_Numerator
+#define IMediaRatio_get_Numerator __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_get_Numerator
+#define IMediaRatio_put_Denominator __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_put_Denominator
+#define IMediaRatio_get_Denominator __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_get_Denominator
+#endif /* WIDL_using_Windows_Media_MediaProperties */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IVideoEncodingProperties interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties, 0x76ee6c9a, 0x37c2, 0x4f2a, 0x88,0x0a, 0x12,0x82,0xbb,0xb4,0x37,0x3d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace MediaProperties {
+                MIDL_INTERFACE("76ee6c9a-37c2-4f2a-880a-1282bbb4373d")
+                IVideoEncodingProperties : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE put_Bitrate(
+                        UINT32 value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_Bitrate(
+                        UINT32 *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_Width(
+                        UINT32 value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_Width(
+                        UINT32 *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_Height(
+                        UINT32 value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_Height(
+                        UINT32 *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_FrameRate(
+                        ABI::Windows::Media::MediaProperties::IMediaRatio **value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_PixelAspectRatio(
+                        ABI::Windows::Media::MediaProperties::IMediaRatio **value) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties, 0x76ee6c9a, 0x37c2, 0x4f2a, 0x88,0x0a, 0x12,0x82,0xbb,0xb4,0x37,0x3d)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingPropertiesVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties *This,
+        TrustLevel *trustLevel);
+
+    /*** IVideoEncodingProperties methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_Bitrate)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties *This,
+        UINT32 value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Bitrate)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties *This,
+        UINT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_Width)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties *This,
+        UINT32 value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Width)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties *This,
+        UINT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_Height)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties *This,
+        UINT32 value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Height)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties *This,
+        UINT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_FrameRate)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties *This,
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_PixelAspectRatio)(
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties *This,
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingPropertiesVtbl;
+
+interface __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties {
+    CONST_VTBL __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingPropertiesVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IVideoEncodingProperties methods ***/
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_put_Bitrate(This,value) (This)->lpVtbl->put_Bitrate(This,value)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_get_Bitrate(This,value) (This)->lpVtbl->get_Bitrate(This,value)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_put_Width(This,value) (This)->lpVtbl->put_Width(This,value)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_get_Width(This,value) (This)->lpVtbl->get_Width(This,value)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_put_Height(This,value) (This)->lpVtbl->put_Height(This,value)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_get_Height(This,value) (This)->lpVtbl->get_Height(This,value)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_get_FrameRate(This,value) (This)->lpVtbl->get_FrameRate(This,value)
+#define __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_get_PixelAspectRatio(This,value) (This)->lpVtbl->get_PixelAspectRatio(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_QueryInterface(__x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_AddRef(__x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_Release(__x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_GetIids(__x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_GetRuntimeClassName(__x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_GetTrustLevel(__x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IVideoEncodingProperties methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_put_Bitrate(__x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties* This,UINT32 value) {
+    return This->lpVtbl->put_Bitrate(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_get_Bitrate(__x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties* This,UINT32 *value) {
+    return This->lpVtbl->get_Bitrate(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_put_Width(__x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties* This,UINT32 value) {
+    return This->lpVtbl->put_Width(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_get_Width(__x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties* This,UINT32 *value) {
+    return This->lpVtbl->get_Width(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_put_Height(__x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties* This,UINT32 value) {
+    return This->lpVtbl->put_Height(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_get_Height(__x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties* This,UINT32 *value) {
+    return This->lpVtbl->get_Height(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_get_FrameRate(__x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties* This,__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio **value) {
+    return This->lpVtbl->get_FrameRate(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_get_PixelAspectRatio(__x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties* This,__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaRatio **value) {
+    return This->lpVtbl->get_PixelAspectRatio(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Media_MediaProperties
+#define IID_IVideoEncodingProperties IID___x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties
+#define IVideoEncodingPropertiesVtbl __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingPropertiesVtbl
+#define IVideoEncodingProperties __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties
+#define IVideoEncodingProperties_QueryInterface __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_QueryInterface
+#define IVideoEncodingProperties_AddRef __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_AddRef
+#define IVideoEncodingProperties_Release __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_Release
+#define IVideoEncodingProperties_GetIids __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_GetIids
+#define IVideoEncodingProperties_GetRuntimeClassName __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_GetRuntimeClassName
+#define IVideoEncodingProperties_GetTrustLevel __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_GetTrustLevel
+#define IVideoEncodingProperties_put_Bitrate __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_put_Bitrate
+#define IVideoEncodingProperties_get_Bitrate __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_get_Bitrate
+#define IVideoEncodingProperties_put_Width __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_put_Width
+#define IVideoEncodingProperties_get_Width __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_get_Width
+#define IVideoEncodingProperties_put_Height __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_put_Height
+#define IVideoEncodingProperties_get_Height __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_get_Height
+#define IVideoEncodingProperties_get_FrameRate __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_get_FrameRate
+#define IVideoEncodingProperties_get_PixelAspectRatio __x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_get_PixelAspectRatio
+#endif /* WIDL_using_Windows_Media_MediaProperties */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CMedia_CMediaProperties_CIVideoEncodingProperties_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.Media.MediaProperties.AudioEncodingProperties
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_Media_MediaProperties_AudioEncodingProperties_DEFINED
+#define RUNTIMECLASS_Windows_Media_MediaProperties_AudioEncodingProperties_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_Media_MediaProperties_AudioEncodingProperties[] = {'W','i','n','d','o','w','s','.','M','e','d','i','a','.','M','e','d','i','a','P','r','o','p','e','r','t','i','e','s','.','A','u','d','i','o','E','n','c','o','d','i','n','g','P','r','o','p','e','r','t','i','e','s',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Media_MediaProperties_AudioEncodingProperties[] = L"Windows.Media.MediaProperties.AudioEncodingProperties";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Media_MediaProperties_AudioEncodingProperties[] = {'W','i','n','d','o','w','s','.','M','e','d','i','a','.','M','e','d','i','a','P','r','o','p','e','r','t','i','e','s','.','A','u','d','i','o','E','n','c','o','d','i','n','g','P','r','o','p','e','r','t','i','e','s',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_Media_MediaProperties_AudioEncodingProperties_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.Media.MediaProperties.ContainerEncodingProperties
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_Media_MediaProperties_ContainerEncodingProperties_DEFINED
+#define RUNTIMECLASS_Windows_Media_MediaProperties_ContainerEncodingProperties_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_Media_MediaProperties_ContainerEncodingProperties[] = {'W','i','n','d','o','w','s','.','M','e','d','i','a','.','M','e','d','i','a','P','r','o','p','e','r','t','i','e','s','.','C','o','n','t','a','i','n','e','r','E','n','c','o','d','i','n','g','P','r','o','p','e','r','t','i','e','s',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Media_MediaProperties_ContainerEncodingProperties[] = L"Windows.Media.MediaProperties.ContainerEncodingProperties";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Media_MediaProperties_ContainerEncodingProperties[] = {'W','i','n','d','o','w','s','.','M','e','d','i','a','.','M','e','d','i','a','P','r','o','p','e','r','t','i','e','s','.','C','o','n','t','a','i','n','e','r','E','n','c','o','d','i','n','g','P','r','o','p','e','r','t','i','e','s',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_Media_MediaProperties_ContainerEncodingProperties_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.Media.MediaProperties.MediaEncodingProfile
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_Media_MediaProperties_MediaEncodingProfile_DEFINED
+#define RUNTIMECLASS_Windows_Media_MediaProperties_MediaEncodingProfile_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_Media_MediaProperties_MediaEncodingProfile[] = {'W','i','n','d','o','w','s','.','M','e','d','i','a','.','M','e','d','i','a','P','r','o','p','e','r','t','i','e','s','.','M','e','d','i','a','E','n','c','o','d','i','n','g','P','r','o','f','i','l','e',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Media_MediaProperties_MediaEncodingProfile[] = L"Windows.Media.MediaProperties.MediaEncodingProfile";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Media_MediaProperties_MediaEncodingProfile[] = {'W','i','n','d','o','w','s','.','M','e','d','i','a','.','M','e','d','i','a','P','r','o','p','e','r','t','i','e','s','.','M','e','d','i','a','E','n','c','o','d','i','n','g','P','r','o','f','i','l','e',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_Media_MediaProperties_MediaEncodingProfile_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.Media.MediaProperties.MediaRatio
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_Media_MediaProperties_MediaRatio_DEFINED
+#define RUNTIMECLASS_Windows_Media_MediaProperties_MediaRatio_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_Media_MediaProperties_MediaRatio[] = {'W','i','n','d','o','w','s','.','M','e','d','i','a','.','M','e','d','i','a','P','r','o','p','e','r','t','i','e','s','.','M','e','d','i','a','R','a','t','i','o',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Media_MediaProperties_MediaRatio[] = L"Windows.Media.MediaProperties.MediaRatio";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Media_MediaProperties_MediaRatio[] = {'W','i','n','d','o','w','s','.','M','e','d','i','a','.','M','e','d','i','a','P','r','o','p','e','r','t','i','e','s','.','M','e','d','i','a','R','a','t','i','o',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_Media_MediaProperties_MediaRatio_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.Media.MediaProperties.VideoEncodingProperties
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_Media_MediaProperties_VideoEncodingProperties_DEFINED
+#define RUNTIMECLASS_Windows_Media_MediaProperties_VideoEncodingProperties_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_Media_MediaProperties_VideoEncodingProperties[] = {'W','i','n','d','o','w','s','.','M','e','d','i','a','.','M','e','d','i','a','P','r','o','p','e','r','t','i','e','s','.','V','i','d','e','o','E','n','c','o','d','i','n','g','P','r','o','p','e','r','t','i','e','s',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Media_MediaProperties_VideoEncodingProperties[] = L"Windows.Media.MediaProperties.VideoEncodingProperties";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Media_MediaProperties_VideoEncodingProperties[] = {'W','i','n','d','o','w','s','.','M','e','d','i','a','.','M','e','d','i','a','P','r','o','p','e','r','t','i','e','s','.','V','i','d','e','o','E','n','c','o','d','i','n','g','P','r','o','p','e','r','t','i','e','s',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_Media_MediaProperties_VideoEncodingProperties_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __windows_media_mediaproperties_h__ */
diff --git a/mingw-w64-headers/include/windows.media.render.h b/mingw-w64-headers/include/windows.media.render.h
index 1ac0e53..869dea4 100644
--- a/mingw-w64-headers/include/windows.media.render.h
+++ b/mingw-w64-headers/include/windows.media.render.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.media.render.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.media.render.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.speechrecognition.h b/mingw-w64-headers/include/windows.media.speechrecognition.h
index 9372799..3b8e851 100644
--- a/mingw-w64-headers/include/windows.media.speechrecognition.h
+++ b/mingw-w64-headers/include/windows.media.speechrecognition.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.media.speechrecognition.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.media.speechrecognition.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.speechsynthesis.h b/mingw-w64-headers/include/windows.media.speechsynthesis.h
index 596ac51..1244eea 100644
--- a/mingw-w64-headers/include/windows.media.speechsynthesis.h
+++ b/mingw-w64-headers/include/windows.media.speechsynthesis.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.media.speechsynthesis.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.media.speechsynthesis.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.transcoding.h b/mingw-w64-headers/include/windows.media.transcoding.h
new file mode 100644
index 0000000..d2daa16
--- /dev/null
+++ b/mingw-w64-headers/include/windows.media.transcoding.h
@@ -0,0 +1,2178 @@
+/*** Autogenerated by WIDL 10.13 from include/windows.media.transcoding.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 __windows_media_transcoding_h__
+#define __windows_media_transcoding_h__
+
+/* Forward declarations */
+
+#ifndef ____x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder ABI::Windows::Media::Transcoding::IMediaTranscoder
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace Transcoding {
+                interface IMediaTranscoder;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2 __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2 ABI::Windows::Media::Transcoding::IMediaTranscoder2
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace Transcoding {
+                interface IMediaTranscoder2;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult ABI::Windows::Media::Transcoding::IPrepareTranscodeResult
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace Transcoding {
+                interface IPrepareTranscodeResult;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CTranscoding_CMediaTranscoder_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CTranscoding_CMediaTranscoder_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace Transcoding {
+                class MediaTranscoder;
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CMedia_CTranscoding_CMediaTranscoder __x_ABI_CWindows_CMedia_CTranscoding_CMediaTranscoder;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CMedia_CTranscoding_CMediaTranscoder_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CMedia_CTranscoding_CPrepareTranscodeResult_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CTranscoding_CPrepareTranscodeResult_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace Transcoding {
+                class PrepareTranscodeResult;
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CMedia_CTranscoding_CPrepareTranscodeResult __x_ABI_CWindows_CMedia_CTranscoding_CPrepareTranscodeResult;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CMedia_CTranscoding_CPrepareTranscodeResult_FWD_DEFINED__ */
+
+#ifndef ____FIAsyncActionWithProgress_1_DOUBLE_FWD_DEFINED__
+#define ____FIAsyncActionWithProgress_1_DOUBLE_FWD_DEFINED__
+typedef interface __FIAsyncActionWithProgress_1_DOUBLE __FIAsyncActionWithProgress_1_DOUBLE;
+#ifdef __cplusplus
+#define __FIAsyncActionWithProgress_1_DOUBLE ABI::Windows::Foundation::IAsyncActionWithProgress<DOUBLE >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIAsyncActionProgressHandler_1_DOUBLE_FWD_DEFINED__
+#define ____FIAsyncActionProgressHandler_1_DOUBLE_FWD_DEFINED__
+typedef interface __FIAsyncActionProgressHandler_1_DOUBLE __FIAsyncActionProgressHandler_1_DOUBLE;
+#ifdef __cplusplus
+#define __FIAsyncActionProgressHandler_1_DOUBLE ABI::Windows::Foundation::IAsyncActionProgressHandler<DOUBLE >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIAsyncActionWithProgressCompletedHandler_1_DOUBLE_FWD_DEFINED__
+#define ____FIAsyncActionWithProgressCompletedHandler_1_DOUBLE_FWD_DEFINED__
+typedef interface __FIAsyncActionWithProgressCompletedHandler_1_DOUBLE __FIAsyncActionWithProgressCompletedHandler_1_DOUBLE;
+#ifdef __cplusplus
+#define __FIAsyncActionWithProgressCompletedHandler_1_DOUBLE ABI::Windows::Foundation::IAsyncActionWithProgressCompletedHandler<DOUBLE >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_FWD_DEFINED__
+#define ____FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_FWD_DEFINED__
+typedef interface __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult;
+#ifdef __cplusplus
+#define __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult ABI::Windows::Foundation::IAsyncOperation<ABI::Windows::Media::Transcoding::PrepareTranscodeResult* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIAsyncOperation_1_TranscodeFailureReason_FWD_DEFINED__
+#define ____FIAsyncOperation_1_TranscodeFailureReason_FWD_DEFINED__
+typedef interface __FIAsyncOperation_1_TranscodeFailureReason __FIAsyncOperation_1_TranscodeFailureReason;
+#ifdef __cplusplus
+#define __FIAsyncOperation_1_TranscodeFailureReason ABI::Windows::Foundation::IAsyncOperation<ABI::Windows::Media::Transcoding::TranscodeFailureReason >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_FWD_DEFINED__
+#define ____FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_FWD_DEFINED__
+typedef interface __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE;
+#ifdef __cplusplus
+#define __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE ABI::Windows::Foundation::IAsyncOperationWithProgress<ABI::Windows::Media::Transcoding::TranscodeFailureReason,DOUBLE >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_FWD_DEFINED__
+#define ____FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_FWD_DEFINED__
+typedef interface __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult;
+#ifdef __cplusplus
+#define __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult ABI::Windows::Foundation::IAsyncOperationCompletedHandler<ABI::Windows::Media::Transcoding::PrepareTranscodeResult* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIAsyncOperationCompletedHandler_1_TranscodeFailureReason_FWD_DEFINED__
+#define ____FIAsyncOperationCompletedHandler_1_TranscodeFailureReason_FWD_DEFINED__
+typedef interface __FIAsyncOperationCompletedHandler_1_TranscodeFailureReason __FIAsyncOperationCompletedHandler_1_TranscodeFailureReason;
+#ifdef __cplusplus
+#define __FIAsyncOperationCompletedHandler_1_TranscodeFailureReason ABI::Windows::Foundation::IAsyncOperationCompletedHandler<ABI::Windows::Media::Transcoding::TranscodeFailureReason >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE_FWD_DEFINED__
+#define ____FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE_FWD_DEFINED__
+typedef interface __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE;
+#ifdef __cplusplus
+#define __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE ABI::Windows::Foundation::IAsyncOperationWithProgressCompletedHandler<ABI::Windows::Media::Transcoding::TranscodeFailureReason,DOUBLE >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE_FWD_DEFINED__
+#define ____FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE_FWD_DEFINED__
+typedef interface __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE;
+#ifdef __cplusplus
+#define __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE ABI::Windows::Foundation::IAsyncOperationProgressHandler<ABI::Windows::Media::Transcoding::TranscodeFailureReason,DOUBLE >
+#endif /* __cplusplus */
+#endif
+
+/* Headers for imported files */
+
+#include <inspectable.h>
+#include <asyncinfo.h>
+#include <eventtoken.h>
+#include <windowscontracts.h>
+#include <windows.foundation.h>
+#include <windows.media.core.h>
+#include <windows.media.mediaproperties.h>
+#include <windows.storage.h>
+#include <windows.storage.streams.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)
+#define WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION 0xe0000
+#endif // defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CMedia_CTranscoding_CMediaVideoProcessingAlgorithm_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CTranscoding_CMediaVideoProcessingAlgorithm_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace Transcoding {
+                enum MediaVideoProcessingAlgorithm {
+                    MediaVideoProcessingAlgorithm_Default = 0,
+                    MediaVideoProcessingAlgorithm_MrfCrf444 = 1
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CMedia_CTranscoding_CMediaVideoProcessingAlgorithm {
+    MediaVideoProcessingAlgorithm_Default = 0,
+    MediaVideoProcessingAlgorithm_MrfCrf444 = 1
+};
+#ifdef WIDL_using_Windows_Media_Transcoding
+#define MediaVideoProcessingAlgorithm __x_ABI_CWindows_CMedia_CTranscoding_CMediaVideoProcessingAlgorithm
+#endif /* WIDL_using_Windows_Media_Transcoding */
+#endif
+
+#endif /* ____x_ABI_CWindows_CMedia_CTranscoding_CMediaVideoProcessingAlgorithm_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CMedia_CTranscoding_CMediaVideoProcessingAlgorithm __x_ABI_CWindows_CMedia_CTranscoding_CMediaVideoProcessingAlgorithm;
+#endif /* __cplusplus */
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CMedia_CTranscoding_CTranscodeFailureReason_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CTranscoding_CTranscodeFailureReason_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace Transcoding {
+                enum TranscodeFailureReason {
+                    TranscodeFailureReason_None = 0,
+                    TranscodeFailureReason_Unknown = 1,
+                    TranscodeFailureReason_InvalidProfile = 2,
+                    TranscodeFailureReason_CodecNotFound = 3
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CMedia_CTranscoding_CTranscodeFailureReason {
+    TranscodeFailureReason_None = 0,
+    TranscodeFailureReason_Unknown = 1,
+    TranscodeFailureReason_InvalidProfile = 2,
+    TranscodeFailureReason_CodecNotFound = 3
+};
+#ifdef WIDL_using_Windows_Media_Transcoding
+#define TranscodeFailureReason __x_ABI_CWindows_CMedia_CTranscoding_CTranscodeFailureReason
+#endif /* WIDL_using_Windows_Media_Transcoding */
+#endif
+
+#endif /* ____x_ABI_CWindows_CMedia_CTranscoding_CTranscodeFailureReason_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CMedia_CTranscoding_CTranscodeFailureReason __x_ABI_CWindows_CMedia_CTranscoding_CTranscodeFailureReason;
+#endif /* __cplusplus */
+
+#ifndef ____x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder ABI::Windows::Media::Transcoding::IMediaTranscoder
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace Transcoding {
+                interface IMediaTranscoder;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2 __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2 ABI::Windows::Media::Transcoding::IMediaTranscoder2
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace Transcoding {
+                interface IMediaTranscoder2;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_FWD_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult ABI::Windows::Media::Transcoding::IPrepareTranscodeResult
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace Transcoding {
+                interface IPrepareTranscodeResult;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIAsyncActionWithProgress_1_DOUBLE_FWD_DEFINED__
+#define ____FIAsyncActionWithProgress_1_DOUBLE_FWD_DEFINED__
+typedef interface __FIAsyncActionWithProgress_1_DOUBLE __FIAsyncActionWithProgress_1_DOUBLE;
+#ifdef __cplusplus
+#define __FIAsyncActionWithProgress_1_DOUBLE ABI::Windows::Foundation::IAsyncActionWithProgress<DOUBLE >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_FWD_DEFINED__
+#define ____FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_FWD_DEFINED__
+typedef interface __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult;
+#ifdef __cplusplus
+#define __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult ABI::Windows::Foundation::IAsyncOperation<ABI::Windows::Media::Transcoding::PrepareTranscodeResult* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIAsyncOperation_1_TranscodeFailureReason_FWD_DEFINED__
+#define ____FIAsyncOperation_1_TranscodeFailureReason_FWD_DEFINED__
+typedef interface __FIAsyncOperation_1_TranscodeFailureReason __FIAsyncOperation_1_TranscodeFailureReason;
+#ifdef __cplusplus
+#define __FIAsyncOperation_1_TranscodeFailureReason ABI::Windows::Foundation::IAsyncOperation<ABI::Windows::Media::Transcoding::TranscodeFailureReason >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_FWD_DEFINED__
+#define ____FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_FWD_DEFINED__
+typedef interface __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE;
+#ifdef __cplusplus
+#define __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE ABI::Windows::Foundation::IAsyncOperationWithProgress<ABI::Windows::Media::Transcoding::TranscodeFailureReason,DOUBLE >
+#endif /* __cplusplus */
+#endif
+
+/*****************************************************************************
+ * IMediaTranscoder interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder, 0x190c99d2, 0xa0aa, 0x4d34, 0x86,0xbc, 0xee,0xd1,0xb1,0x2c,0x2f,0x5b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace Transcoding {
+                MIDL_INTERFACE("190c99d2-a0aa-4d34-86bc-eed1b12c2f5b")
+                IMediaTranscoder : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE put_TrimStartTime(
+                        ABI::Windows::Foundation::TimeSpan value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_TrimStartTime(
+                        ABI::Windows::Foundation::TimeSpan *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_TrimStopTime(
+                        ABI::Windows::Foundation::TimeSpan value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_TrimStopTime(
+                        ABI::Windows::Foundation::TimeSpan *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_AlwaysReencode(
+                        boolean value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_AlwaysReencode(
+                        boolean *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_HardwareAccelerationEnabled(
+                        boolean value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_HardwareAccelerationEnabled(
+                        boolean *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE AddAudioEffect(
+                        HSTRING activatable_class_id) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE AddAudioEffectWithSettings(
+                        HSTRING activatable_class_id,
+                        boolean effect_required,
+                        ABI::Windows::Foundation::Collections::IPropertySet *configuration) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE AddVideoEffect(
+                        HSTRING activatable_class_id) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE AddVideoEffectWithSettings(
+                        HSTRING activatable_class_id,
+                        boolean effect_required,
+                        ABI::Windows::Foundation::Collections::IPropertySet *configuration) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE ClearEffects(
+                        ) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE PrepareFileTranscodeAsync(
+                        ABI::Windows::Storage::IStorageFile *source,
+                        ABI::Windows::Storage::IStorageFile *destination,
+                        ABI::Windows::Media::MediaProperties::IMediaEncodingProfile *profile,
+                        ABI::Windows::Foundation::IAsyncOperation<ABI::Windows::Media::Transcoding::PrepareTranscodeResult* > **operation) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE PrepareStreamTranscodeAsync(
+                        ABI::Windows::Storage::Streams::IRandomAccessStream *source,
+                        ABI::Windows::Storage::Streams::IRandomAccessStream *destination,
+                        ABI::Windows::Media::MediaProperties::IMediaEncodingProfile *profile,
+                        ABI::Windows::Foundation::IAsyncOperation<ABI::Windows::Media::Transcoding::PrepareTranscodeResult* > **operation) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder, 0x190c99d2, 0xa0aa, 0x4d34, 0x86,0xbc, 0xee,0xd1,0xb1,0x2c,0x2f,0x5b)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder *This,
+        TrustLevel *trustLevel);
+
+    /*** IMediaTranscoder methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_TrimStartTime)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder *This,
+        __x_ABI_CWindows_CFoundation_CTimeSpan value);
+
+    HRESULT (STDMETHODCALLTYPE *get_TrimStartTime)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder *This,
+        __x_ABI_CWindows_CFoundation_CTimeSpan *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_TrimStopTime)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder *This,
+        __x_ABI_CWindows_CFoundation_CTimeSpan value);
+
+    HRESULT (STDMETHODCALLTYPE *get_TrimStopTime)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder *This,
+        __x_ABI_CWindows_CFoundation_CTimeSpan *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_AlwaysReencode)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder *This,
+        boolean value);
+
+    HRESULT (STDMETHODCALLTYPE *get_AlwaysReencode)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_HardwareAccelerationEnabled)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder *This,
+        boolean value);
+
+    HRESULT (STDMETHODCALLTYPE *get_HardwareAccelerationEnabled)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *AddAudioEffect)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder *This,
+        HSTRING activatable_class_id);
+
+    HRESULT (STDMETHODCALLTYPE *AddAudioEffectWithSettings)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder *This,
+        HSTRING activatable_class_id,
+        boolean effect_required,
+        __x_ABI_CWindows_CFoundation_CCollections_CIPropertySet *configuration);
+
+    HRESULT (STDMETHODCALLTYPE *AddVideoEffect)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder *This,
+        HSTRING activatable_class_id);
+
+    HRESULT (STDMETHODCALLTYPE *AddVideoEffectWithSettings)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder *This,
+        HSTRING activatable_class_id,
+        boolean effect_required,
+        __x_ABI_CWindows_CFoundation_CCollections_CIPropertySet *configuration);
+
+    HRESULT (STDMETHODCALLTYPE *ClearEffects)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder *This);
+
+    HRESULT (STDMETHODCALLTYPE *PrepareFileTranscodeAsync)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder *This,
+        __x_ABI_CWindows_CStorage_CIStorageFile *source,
+        __x_ABI_CWindows_CStorage_CIStorageFile *destination,
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile *profile,
+        __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult **operation);
+
+    HRESULT (STDMETHODCALLTYPE *PrepareStreamTranscodeAsync)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder *This,
+        __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStream *source,
+        __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStream *destination,
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile *profile,
+        __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult **operation);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoderVtbl;
+
+interface __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder {
+    CONST_VTBL __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IMediaTranscoder methods ***/
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_put_TrimStartTime(This,value) (This)->lpVtbl->put_TrimStartTime(This,value)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_get_TrimStartTime(This,value) (This)->lpVtbl->get_TrimStartTime(This,value)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_put_TrimStopTime(This,value) (This)->lpVtbl->put_TrimStopTime(This,value)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_get_TrimStopTime(This,value) (This)->lpVtbl->get_TrimStopTime(This,value)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_put_AlwaysReencode(This,value) (This)->lpVtbl->put_AlwaysReencode(This,value)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_get_AlwaysReencode(This,value) (This)->lpVtbl->get_AlwaysReencode(This,value)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_put_HardwareAccelerationEnabled(This,value) (This)->lpVtbl->put_HardwareAccelerationEnabled(This,value)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_get_HardwareAccelerationEnabled(This,value) (This)->lpVtbl->get_HardwareAccelerationEnabled(This,value)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_AddAudioEffect(This,activatable_class_id) (This)->lpVtbl->AddAudioEffect(This,activatable_class_id)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_AddAudioEffectWithSettings(This,activatable_class_id,effect_required,configuration) (This)->lpVtbl->AddAudioEffectWithSettings(This,activatable_class_id,effect_required,configuration)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_AddVideoEffect(This,activatable_class_id) (This)->lpVtbl->AddVideoEffect(This,activatable_class_id)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_AddVideoEffectWithSettings(This,activatable_class_id,effect_required,configuration) (This)->lpVtbl->AddVideoEffectWithSettings(This,activatable_class_id,effect_required,configuration)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_ClearEffects(This) (This)->lpVtbl->ClearEffects(This)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_PrepareFileTranscodeAsync(This,source,destination,profile,operation) (This)->lpVtbl->PrepareFileTranscodeAsync(This,source,destination,profile,operation)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_PrepareStreamTranscodeAsync(This,source,destination,profile,operation) (This)->lpVtbl->PrepareStreamTranscodeAsync(This,source,destination,profile,operation)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_QueryInterface(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_AddRef(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_Release(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_GetIids(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_GetRuntimeClassName(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_GetTrustLevel(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IMediaTranscoder methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_put_TrimStartTime(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder* This,__x_ABI_CWindows_CFoundation_CTimeSpan value) {
+    return This->lpVtbl->put_TrimStartTime(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_get_TrimStartTime(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder* This,__x_ABI_CWindows_CFoundation_CTimeSpan *value) {
+    return This->lpVtbl->get_TrimStartTime(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_put_TrimStopTime(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder* This,__x_ABI_CWindows_CFoundation_CTimeSpan value) {
+    return This->lpVtbl->put_TrimStopTime(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_get_TrimStopTime(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder* This,__x_ABI_CWindows_CFoundation_CTimeSpan *value) {
+    return This->lpVtbl->get_TrimStopTime(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_put_AlwaysReencode(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder* This,boolean value) {
+    return This->lpVtbl->put_AlwaysReencode(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_get_AlwaysReencode(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder* This,boolean *value) {
+    return This->lpVtbl->get_AlwaysReencode(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_put_HardwareAccelerationEnabled(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder* This,boolean value) {
+    return This->lpVtbl->put_HardwareAccelerationEnabled(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_get_HardwareAccelerationEnabled(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder* This,boolean *value) {
+    return This->lpVtbl->get_HardwareAccelerationEnabled(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_AddAudioEffect(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder* This,HSTRING activatable_class_id) {
+    return This->lpVtbl->AddAudioEffect(This,activatable_class_id);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_AddAudioEffectWithSettings(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder* This,HSTRING activatable_class_id,boolean effect_required,__x_ABI_CWindows_CFoundation_CCollections_CIPropertySet *configuration) {
+    return This->lpVtbl->AddAudioEffectWithSettings(This,activatable_class_id,effect_required,configuration);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_AddVideoEffect(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder* This,HSTRING activatable_class_id) {
+    return This->lpVtbl->AddVideoEffect(This,activatable_class_id);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_AddVideoEffectWithSettings(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder* This,HSTRING activatable_class_id,boolean effect_required,__x_ABI_CWindows_CFoundation_CCollections_CIPropertySet *configuration) {
+    return This->lpVtbl->AddVideoEffectWithSettings(This,activatable_class_id,effect_required,configuration);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_ClearEffects(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder* This) {
+    return This->lpVtbl->ClearEffects(This);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_PrepareFileTranscodeAsync(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder* This,__x_ABI_CWindows_CStorage_CIStorageFile *source,__x_ABI_CWindows_CStorage_CIStorageFile *destination,__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile *profile,__FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult **operation) {
+    return This->lpVtbl->PrepareFileTranscodeAsync(This,source,destination,profile,operation);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_PrepareStreamTranscodeAsync(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder* This,__x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStream *source,__x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStream *destination,__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile *profile,__FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult **operation) {
+    return This->lpVtbl->PrepareStreamTranscodeAsync(This,source,destination,profile,operation);
+}
+#endif
+#ifdef WIDL_using_Windows_Media_Transcoding
+#define IID_IMediaTranscoder IID___x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder
+#define IMediaTranscoderVtbl __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoderVtbl
+#define IMediaTranscoder __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder
+#define IMediaTranscoder_QueryInterface __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_QueryInterface
+#define IMediaTranscoder_AddRef __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_AddRef
+#define IMediaTranscoder_Release __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_Release
+#define IMediaTranscoder_GetIids __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_GetIids
+#define IMediaTranscoder_GetRuntimeClassName __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_GetRuntimeClassName
+#define IMediaTranscoder_GetTrustLevel __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_GetTrustLevel
+#define IMediaTranscoder_put_TrimStartTime __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_put_TrimStartTime
+#define IMediaTranscoder_get_TrimStartTime __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_get_TrimStartTime
+#define IMediaTranscoder_put_TrimStopTime __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_put_TrimStopTime
+#define IMediaTranscoder_get_TrimStopTime __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_get_TrimStopTime
+#define IMediaTranscoder_put_AlwaysReencode __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_put_AlwaysReencode
+#define IMediaTranscoder_get_AlwaysReencode __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_get_AlwaysReencode
+#define IMediaTranscoder_put_HardwareAccelerationEnabled __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_put_HardwareAccelerationEnabled
+#define IMediaTranscoder_get_HardwareAccelerationEnabled __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_get_HardwareAccelerationEnabled
+#define IMediaTranscoder_AddAudioEffect __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_AddAudioEffect
+#define IMediaTranscoder_AddAudioEffectWithSettings __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_AddAudioEffectWithSettings
+#define IMediaTranscoder_AddVideoEffect __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_AddVideoEffect
+#define IMediaTranscoder_AddVideoEffectWithSettings __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_AddVideoEffectWithSettings
+#define IMediaTranscoder_ClearEffects __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_ClearEffects
+#define IMediaTranscoder_PrepareFileTranscodeAsync __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_PrepareFileTranscodeAsync
+#define IMediaTranscoder_PrepareStreamTranscodeAsync __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_PrepareStreamTranscodeAsync
+#endif /* WIDL_using_Windows_Media_Transcoding */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IMediaTranscoder2 interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2, 0x40531d74, 0x35e0, 0x4f04, 0x85,0x74, 0xca,0x8b,0xc4,0xe5,0xa0,0x82);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace Transcoding {
+                MIDL_INTERFACE("40531d74-35e0-4f04-8574-ca8bc4e5a082")
+                IMediaTranscoder2 : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE PrepareMediaStreamSourceTranscodeAsync(
+                        ABI::Windows::Media::Core::IMediaSource *source,
+                        ABI::Windows::Storage::Streams::IRandomAccessStream *destination,
+                        ABI::Windows::Media::MediaProperties::IMediaEncodingProfile *profile,
+                        ABI::Windows::Foundation::IAsyncOperation<ABI::Windows::Media::Transcoding::PrepareTranscodeResult* > **operation) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_VideoProcessingAlgorithm(
+                        ABI::Windows::Media::Transcoding::MediaVideoProcessingAlgorithm value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_VideoProcessingAlgorithm(
+                        ABI::Windows::Media::Transcoding::MediaVideoProcessingAlgorithm *value) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2, 0x40531d74, 0x35e0, 0x4f04, 0x85,0x74, 0xca,0x8b,0xc4,0xe5,0xa0,0x82)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2 *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2 *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2 *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2 *This,
+        TrustLevel *trustLevel);
+
+    /*** IMediaTranscoder2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *PrepareMediaStreamSourceTranscodeAsync)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2 *This,
+        __x_ABI_CWindows_CMedia_CCore_CIMediaSource *source,
+        __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStream *destination,
+        __x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile *profile,
+        __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult **operation);
+
+    HRESULT (STDMETHODCALLTYPE *put_VideoProcessingAlgorithm)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2 *This,
+        __x_ABI_CWindows_CMedia_CTranscoding_CMediaVideoProcessingAlgorithm value);
+
+    HRESULT (STDMETHODCALLTYPE *get_VideoProcessingAlgorithm)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2 *This,
+        __x_ABI_CWindows_CMedia_CTranscoding_CMediaVideoProcessingAlgorithm *value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2Vtbl;
+
+interface __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2 {
+    CONST_VTBL __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IMediaTranscoder2 methods ***/
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_PrepareMediaStreamSourceTranscodeAsync(This,source,destination,profile,operation) (This)->lpVtbl->PrepareMediaStreamSourceTranscodeAsync(This,source,destination,profile,operation)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_put_VideoProcessingAlgorithm(This,value) (This)->lpVtbl->put_VideoProcessingAlgorithm(This,value)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_get_VideoProcessingAlgorithm(This,value) (This)->lpVtbl->get_VideoProcessingAlgorithm(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_QueryInterface(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_AddRef(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_Release(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_GetIids(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_GetRuntimeClassName(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_GetTrustLevel(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IMediaTranscoder2 methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_PrepareMediaStreamSourceTranscodeAsync(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2* This,__x_ABI_CWindows_CMedia_CCore_CIMediaSource *source,__x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStream *destination,__x_ABI_CWindows_CMedia_CMediaProperties_CIMediaEncodingProfile *profile,__FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult **operation) {
+    return This->lpVtbl->PrepareMediaStreamSourceTranscodeAsync(This,source,destination,profile,operation);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_put_VideoProcessingAlgorithm(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2* This,__x_ABI_CWindows_CMedia_CTranscoding_CMediaVideoProcessingAlgorithm value) {
+    return This->lpVtbl->put_VideoProcessingAlgorithm(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_get_VideoProcessingAlgorithm(__x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2* This,__x_ABI_CWindows_CMedia_CTranscoding_CMediaVideoProcessingAlgorithm *value) {
+    return This->lpVtbl->get_VideoProcessingAlgorithm(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Media_Transcoding
+#define IID_IMediaTranscoder2 IID___x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2
+#define IMediaTranscoder2Vtbl __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2Vtbl
+#define IMediaTranscoder2 __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2
+#define IMediaTranscoder2_QueryInterface __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_QueryInterface
+#define IMediaTranscoder2_AddRef __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_AddRef
+#define IMediaTranscoder2_Release __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_Release
+#define IMediaTranscoder2_GetIids __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_GetIids
+#define IMediaTranscoder2_GetRuntimeClassName __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_GetRuntimeClassName
+#define IMediaTranscoder2_GetTrustLevel __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_GetTrustLevel
+#define IMediaTranscoder2_PrepareMediaStreamSourceTranscodeAsync __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_PrepareMediaStreamSourceTranscodeAsync
+#define IMediaTranscoder2_put_VideoProcessingAlgorithm __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_put_VideoProcessingAlgorithm
+#define IMediaTranscoder2_get_VideoProcessingAlgorithm __x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_get_VideoProcessingAlgorithm
+#endif /* WIDL_using_Windows_Media_Transcoding */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CMedia_CTranscoding_CIMediaTranscoder2_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IPrepareTranscodeResult interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult, 0x05f25dce, 0x994f, 0x4a34, 0x9d,0x68, 0x97,0xcc,0xce,0x17,0x30,0xd6);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Media {
+            namespace Transcoding {
+                MIDL_INTERFACE("05f25dce-994f-4a34-9d68-97ccce1730d6")
+                IPrepareTranscodeResult : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_CanTranscode(
+                        boolean *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_FailureReason(
+                        ABI::Windows::Media::Transcoding::TranscodeFailureReason *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE TranscodeAsync(
+                        ABI::Windows::Foundation::IAsyncActionWithProgress<DOUBLE > **operation) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult, 0x05f25dce, 0x994f, 0x4a34, 0x9d,0x68, 0x97,0xcc,0xce,0x17,0x30,0xd6)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResultVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult *This,
+        TrustLevel *trustLevel);
+
+    /*** IPrepareTranscodeResult methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_CanTranscode)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_FailureReason)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult *This,
+        __x_ABI_CWindows_CMedia_CTranscoding_CTranscodeFailureReason *value);
+
+    HRESULT (STDMETHODCALLTYPE *TranscodeAsync)(
+        __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult *This,
+        __FIAsyncActionWithProgress_1_DOUBLE **operation);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResultVtbl;
+
+interface __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult {
+    CONST_VTBL __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResultVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IPrepareTranscodeResult methods ***/
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_get_CanTranscode(This,value) (This)->lpVtbl->get_CanTranscode(This,value)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_get_FailureReason(This,value) (This)->lpVtbl->get_FailureReason(This,value)
+#define __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_TranscodeAsync(This,operation) (This)->lpVtbl->TranscodeAsync(This,operation)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_QueryInterface(__x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_AddRef(__x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_Release(__x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_GetIids(__x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_GetRuntimeClassName(__x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_GetTrustLevel(__x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IPrepareTranscodeResult methods ***/
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_get_CanTranscode(__x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult* This,boolean *value) {
+    return This->lpVtbl->get_CanTranscode(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_get_FailureReason(__x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult* This,__x_ABI_CWindows_CMedia_CTranscoding_CTranscodeFailureReason *value) {
+    return This->lpVtbl->get_FailureReason(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_TranscodeAsync(__x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult* This,__FIAsyncActionWithProgress_1_DOUBLE **operation) {
+    return This->lpVtbl->TranscodeAsync(This,operation);
+}
+#endif
+#ifdef WIDL_using_Windows_Media_Transcoding
+#define IID_IPrepareTranscodeResult IID___x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult
+#define IPrepareTranscodeResultVtbl __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResultVtbl
+#define IPrepareTranscodeResult __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult
+#define IPrepareTranscodeResult_QueryInterface __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_QueryInterface
+#define IPrepareTranscodeResult_AddRef __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_AddRef
+#define IPrepareTranscodeResult_Release __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_Release
+#define IPrepareTranscodeResult_GetIids __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_GetIids
+#define IPrepareTranscodeResult_GetRuntimeClassName __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_GetRuntimeClassName
+#define IPrepareTranscodeResult_GetTrustLevel __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_GetTrustLevel
+#define IPrepareTranscodeResult_get_CanTranscode __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_get_CanTranscode
+#define IPrepareTranscodeResult_get_FailureReason __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_get_FailureReason
+#define IPrepareTranscodeResult_TranscodeAsync __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_TranscodeAsync
+#endif /* WIDL_using_Windows_Media_Transcoding */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.Media.Transcoding.MediaTranscoder
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_Media_Transcoding_MediaTranscoder_DEFINED
+#define RUNTIMECLASS_Windows_Media_Transcoding_MediaTranscoder_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_Media_Transcoding_MediaTranscoder[] = {'W','i','n','d','o','w','s','.','M','e','d','i','a','.','T','r','a','n','s','c','o','d','i','n','g','.','M','e','d','i','a','T','r','a','n','s','c','o','d','e','r',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Media_Transcoding_MediaTranscoder[] = L"Windows.Media.Transcoding.MediaTranscoder";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Media_Transcoding_MediaTranscoder[] = {'W','i','n','d','o','w','s','.','M','e','d','i','a','.','T','r','a','n','s','c','o','d','i','n','g','.','M','e','d','i','a','T','r','a','n','s','c','o','d','e','r',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_Media_Transcoding_MediaTranscoder_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.Media.Transcoding.PrepareTranscodeResult
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_Media_Transcoding_PrepareTranscodeResult_DEFINED
+#define RUNTIMECLASS_Windows_Media_Transcoding_PrepareTranscodeResult_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_Media_Transcoding_PrepareTranscodeResult[] = {'W','i','n','d','o','w','s','.','M','e','d','i','a','.','T','r','a','n','s','c','o','d','i','n','g','.','P','r','e','p','a','r','e','T','r','a','n','s','c','o','d','e','R','e','s','u','l','t',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Media_Transcoding_PrepareTranscodeResult[] = L"Windows.Media.Transcoding.PrepareTranscodeResult";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Media_Transcoding_PrepareTranscodeResult[] = {'W','i','n','d','o','w','s','.','M','e','d','i','a','.','T','r','a','n','s','c','o','d','i','n','g','.','P','r','e','p','a','r','e','T','r','a','n','s','c','o','d','e','R','e','s','u','l','t',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_Media_Transcoding_PrepareTranscodeResult_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IAsyncActionWithProgress<DOUBLE > interface
+ */
+#ifndef ____FIAsyncActionWithProgress_1_DOUBLE_INTERFACE_DEFINED__
+#define ____FIAsyncActionWithProgress_1_DOUBLE_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIAsyncActionWithProgress_1_DOUBLE, 0x4f1430a6, 0xa825, 0x56ca, 0xb0,0x47, 0x1a,0x9b,0xad,0x52,0xba,0x67);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("4f1430a6-a825-56ca-b047-1a9bad52ba67")
+            IAsyncActionWithProgress<DOUBLE > : IAsyncActionWithProgress_impl<DOUBLE >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIAsyncActionWithProgress_1_DOUBLE, 0x4f1430a6, 0xa825, 0x56ca, 0xb0,0x47, 0x1a,0x9b,0xad,0x52,0xba,0x67)
+#endif
+#else
+typedef struct __FIAsyncActionWithProgress_1_DOUBLEVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIAsyncActionWithProgress_1_DOUBLE *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIAsyncActionWithProgress_1_DOUBLE *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIAsyncActionWithProgress_1_DOUBLE *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIAsyncActionWithProgress_1_DOUBLE *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIAsyncActionWithProgress_1_DOUBLE *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIAsyncActionWithProgress_1_DOUBLE *This,
+        TrustLevel *trustLevel);
+
+    /*** IAsyncActionWithProgress<DOUBLE > methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_Progress)(
+        __FIAsyncActionWithProgress_1_DOUBLE *This,
+        __FIAsyncActionProgressHandler_1_DOUBLE *handler);
+
+    HRESULT (STDMETHODCALLTYPE *get_Progress)(
+        __FIAsyncActionWithProgress_1_DOUBLE *This,
+        __FIAsyncActionProgressHandler_1_DOUBLE **handler);
+
+    HRESULT (STDMETHODCALLTYPE *put_Completed)(
+        __FIAsyncActionWithProgress_1_DOUBLE *This,
+        __FIAsyncActionWithProgressCompletedHandler_1_DOUBLE *handler);
+
+    HRESULT (STDMETHODCALLTYPE *get_Completed)(
+        __FIAsyncActionWithProgress_1_DOUBLE *This,
+        __FIAsyncActionWithProgressCompletedHandler_1_DOUBLE **handler);
+
+    HRESULT (STDMETHODCALLTYPE *GetResults)(
+        __FIAsyncActionWithProgress_1_DOUBLE *This);
+
+    END_INTERFACE
+} __FIAsyncActionWithProgress_1_DOUBLEVtbl;
+
+interface __FIAsyncActionWithProgress_1_DOUBLE {
+    CONST_VTBL __FIAsyncActionWithProgress_1_DOUBLEVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIAsyncActionWithProgress_1_DOUBLE_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIAsyncActionWithProgress_1_DOUBLE_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIAsyncActionWithProgress_1_DOUBLE_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIAsyncActionWithProgress_1_DOUBLE_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIAsyncActionWithProgress_1_DOUBLE_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIAsyncActionWithProgress_1_DOUBLE_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IAsyncActionWithProgress<DOUBLE > methods ***/
+#define __FIAsyncActionWithProgress_1_DOUBLE_put_Progress(This,handler) (This)->lpVtbl->put_Progress(This,handler)
+#define __FIAsyncActionWithProgress_1_DOUBLE_get_Progress(This,handler) (This)->lpVtbl->get_Progress(This,handler)
+#define __FIAsyncActionWithProgress_1_DOUBLE_put_Completed(This,handler) (This)->lpVtbl->put_Completed(This,handler)
+#define __FIAsyncActionWithProgress_1_DOUBLE_get_Completed(This,handler) (This)->lpVtbl->get_Completed(This,handler)
+#define __FIAsyncActionWithProgress_1_DOUBLE_GetResults(This) (This)->lpVtbl->GetResults(This)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIAsyncActionWithProgress_1_DOUBLE_QueryInterface(__FIAsyncActionWithProgress_1_DOUBLE* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIAsyncActionWithProgress_1_DOUBLE_AddRef(__FIAsyncActionWithProgress_1_DOUBLE* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIAsyncActionWithProgress_1_DOUBLE_Release(__FIAsyncActionWithProgress_1_DOUBLE* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIAsyncActionWithProgress_1_DOUBLE_GetIids(__FIAsyncActionWithProgress_1_DOUBLE* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIAsyncActionWithProgress_1_DOUBLE_GetRuntimeClassName(__FIAsyncActionWithProgress_1_DOUBLE* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIAsyncActionWithProgress_1_DOUBLE_GetTrustLevel(__FIAsyncActionWithProgress_1_DOUBLE* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IAsyncActionWithProgress<DOUBLE > methods ***/
+static inline HRESULT __FIAsyncActionWithProgress_1_DOUBLE_put_Progress(__FIAsyncActionWithProgress_1_DOUBLE* This,__FIAsyncActionProgressHandler_1_DOUBLE *handler) {
+    return This->lpVtbl->put_Progress(This,handler);
+}
+static inline HRESULT __FIAsyncActionWithProgress_1_DOUBLE_get_Progress(__FIAsyncActionWithProgress_1_DOUBLE* This,__FIAsyncActionProgressHandler_1_DOUBLE **handler) {
+    return This->lpVtbl->get_Progress(This,handler);
+}
+static inline HRESULT __FIAsyncActionWithProgress_1_DOUBLE_put_Completed(__FIAsyncActionWithProgress_1_DOUBLE* This,__FIAsyncActionWithProgressCompletedHandler_1_DOUBLE *handler) {
+    return This->lpVtbl->put_Completed(This,handler);
+}
+static inline HRESULT __FIAsyncActionWithProgress_1_DOUBLE_get_Completed(__FIAsyncActionWithProgress_1_DOUBLE* This,__FIAsyncActionWithProgressCompletedHandler_1_DOUBLE **handler) {
+    return This->lpVtbl->get_Completed(This,handler);
+}
+static inline HRESULT __FIAsyncActionWithProgress_1_DOUBLE_GetResults(__FIAsyncActionWithProgress_1_DOUBLE* This) {
+    return This->lpVtbl->GetResults(This);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_IAsyncActionWithProgress_DOUBLE IID___FIAsyncActionWithProgress_1_DOUBLE
+#define IAsyncActionWithProgress_DOUBLEVtbl __FIAsyncActionWithProgress_1_DOUBLEVtbl
+#define IAsyncActionWithProgress_DOUBLE __FIAsyncActionWithProgress_1_DOUBLE
+#define IAsyncActionWithProgress_DOUBLE_QueryInterface __FIAsyncActionWithProgress_1_DOUBLE_QueryInterface
+#define IAsyncActionWithProgress_DOUBLE_AddRef __FIAsyncActionWithProgress_1_DOUBLE_AddRef
+#define IAsyncActionWithProgress_DOUBLE_Release __FIAsyncActionWithProgress_1_DOUBLE_Release
+#define IAsyncActionWithProgress_DOUBLE_GetIids __FIAsyncActionWithProgress_1_DOUBLE_GetIids
+#define IAsyncActionWithProgress_DOUBLE_GetRuntimeClassName __FIAsyncActionWithProgress_1_DOUBLE_GetRuntimeClassName
+#define IAsyncActionWithProgress_DOUBLE_GetTrustLevel __FIAsyncActionWithProgress_1_DOUBLE_GetTrustLevel
+#define IAsyncActionWithProgress_DOUBLE_put_Progress __FIAsyncActionWithProgress_1_DOUBLE_put_Progress
+#define IAsyncActionWithProgress_DOUBLE_get_Progress __FIAsyncActionWithProgress_1_DOUBLE_get_Progress
+#define IAsyncActionWithProgress_DOUBLE_put_Completed __FIAsyncActionWithProgress_1_DOUBLE_put_Completed
+#define IAsyncActionWithProgress_DOUBLE_get_Completed __FIAsyncActionWithProgress_1_DOUBLE_get_Completed
+#define IAsyncActionWithProgress_DOUBLE_GetResults __FIAsyncActionWithProgress_1_DOUBLE_GetResults
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FIAsyncActionWithProgress_1_DOUBLE_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAsyncActionProgressHandler<DOUBLE > interface
+ */
+#ifndef ____FIAsyncActionProgressHandler_1_DOUBLE_INTERFACE_DEFINED__
+#define ____FIAsyncActionProgressHandler_1_DOUBLE_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIAsyncActionProgressHandler_1_DOUBLE, 0x44825c7c, 0x0da9, 0x5691, 0xb2,0xb4, 0x91,0x4f,0x23,0x1e,0xec,0xed);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("44825c7c-0da9-5691-b2b4-914f231eeced")
+            IAsyncActionProgressHandler<DOUBLE > : IAsyncActionProgressHandler_impl<DOUBLE >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIAsyncActionProgressHandler_1_DOUBLE, 0x44825c7c, 0x0da9, 0x5691, 0xb2,0xb4, 0x91,0x4f,0x23,0x1e,0xec,0xed)
+#endif
+#else
+typedef struct __FIAsyncActionProgressHandler_1_DOUBLEVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIAsyncActionProgressHandler_1_DOUBLE *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIAsyncActionProgressHandler_1_DOUBLE *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIAsyncActionProgressHandler_1_DOUBLE *This);
+
+    /*** IAsyncActionProgressHandler<DOUBLE > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FIAsyncActionProgressHandler_1_DOUBLE *This,
+        __FIAsyncActionWithProgress_1_DOUBLE *info,
+        DOUBLE progress);
+
+    END_INTERFACE
+} __FIAsyncActionProgressHandler_1_DOUBLEVtbl;
+
+interface __FIAsyncActionProgressHandler_1_DOUBLE {
+    CONST_VTBL __FIAsyncActionProgressHandler_1_DOUBLEVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIAsyncActionProgressHandler_1_DOUBLE_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIAsyncActionProgressHandler_1_DOUBLE_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIAsyncActionProgressHandler_1_DOUBLE_Release(This) (This)->lpVtbl->Release(This)
+/*** IAsyncActionProgressHandler<DOUBLE > methods ***/
+#define __FIAsyncActionProgressHandler_1_DOUBLE_Invoke(This,info,progress) (This)->lpVtbl->Invoke(This,info,progress)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIAsyncActionProgressHandler_1_DOUBLE_QueryInterface(__FIAsyncActionProgressHandler_1_DOUBLE* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIAsyncActionProgressHandler_1_DOUBLE_AddRef(__FIAsyncActionProgressHandler_1_DOUBLE* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIAsyncActionProgressHandler_1_DOUBLE_Release(__FIAsyncActionProgressHandler_1_DOUBLE* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IAsyncActionProgressHandler<DOUBLE > methods ***/
+static inline HRESULT __FIAsyncActionProgressHandler_1_DOUBLE_Invoke(__FIAsyncActionProgressHandler_1_DOUBLE* This,__FIAsyncActionWithProgress_1_DOUBLE *info,DOUBLE progress) {
+    return This->lpVtbl->Invoke(This,info,progress);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_IAsyncActionProgressHandler_DOUBLE IID___FIAsyncActionProgressHandler_1_DOUBLE
+#define IAsyncActionProgressHandler_DOUBLEVtbl __FIAsyncActionProgressHandler_1_DOUBLEVtbl
+#define IAsyncActionProgressHandler_DOUBLE __FIAsyncActionProgressHandler_1_DOUBLE
+#define IAsyncActionProgressHandler_DOUBLE_QueryInterface __FIAsyncActionProgressHandler_1_DOUBLE_QueryInterface
+#define IAsyncActionProgressHandler_DOUBLE_AddRef __FIAsyncActionProgressHandler_1_DOUBLE_AddRef
+#define IAsyncActionProgressHandler_DOUBLE_Release __FIAsyncActionProgressHandler_1_DOUBLE_Release
+#define IAsyncActionProgressHandler_DOUBLE_Invoke __FIAsyncActionProgressHandler_1_DOUBLE_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FIAsyncActionProgressHandler_1_DOUBLE_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAsyncActionWithProgressCompletedHandler<DOUBLE > interface
+ */
+#ifndef ____FIAsyncActionWithProgressCompletedHandler_1_DOUBLE_INTERFACE_DEFINED__
+#define ____FIAsyncActionWithProgressCompletedHandler_1_DOUBLE_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIAsyncActionWithProgressCompletedHandler_1_DOUBLE, 0x94d64ac6, 0x4491, 0x53ef, 0x8b,0xe8, 0x36,0x48,0x1f,0x3f,0xf1,0xe8);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("94d64ac6-4491-53ef-8be8-36481f3ff1e8")
+            IAsyncActionWithProgressCompletedHandler<DOUBLE > : IAsyncActionWithProgressCompletedHandler_impl<DOUBLE >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIAsyncActionWithProgressCompletedHandler_1_DOUBLE, 0x94d64ac6, 0x4491, 0x53ef, 0x8b,0xe8, 0x36,0x48,0x1f,0x3f,0xf1,0xe8)
+#endif
+#else
+typedef struct __FIAsyncActionWithProgressCompletedHandler_1_DOUBLEVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIAsyncActionWithProgressCompletedHandler_1_DOUBLE *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIAsyncActionWithProgressCompletedHandler_1_DOUBLE *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIAsyncActionWithProgressCompletedHandler_1_DOUBLE *This);
+
+    /*** IAsyncActionWithProgressCompletedHandler<DOUBLE > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FIAsyncActionWithProgressCompletedHandler_1_DOUBLE *This,
+        __FIAsyncActionWithProgress_1_DOUBLE *info,
+        AsyncStatus status);
+
+    END_INTERFACE
+} __FIAsyncActionWithProgressCompletedHandler_1_DOUBLEVtbl;
+
+interface __FIAsyncActionWithProgressCompletedHandler_1_DOUBLE {
+    CONST_VTBL __FIAsyncActionWithProgressCompletedHandler_1_DOUBLEVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIAsyncActionWithProgressCompletedHandler_1_DOUBLE_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIAsyncActionWithProgressCompletedHandler_1_DOUBLE_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIAsyncActionWithProgressCompletedHandler_1_DOUBLE_Release(This) (This)->lpVtbl->Release(This)
+/*** IAsyncActionWithProgressCompletedHandler<DOUBLE > methods ***/
+#define __FIAsyncActionWithProgressCompletedHandler_1_DOUBLE_Invoke(This,info,status) (This)->lpVtbl->Invoke(This,info,status)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIAsyncActionWithProgressCompletedHandler_1_DOUBLE_QueryInterface(__FIAsyncActionWithProgressCompletedHandler_1_DOUBLE* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIAsyncActionWithProgressCompletedHandler_1_DOUBLE_AddRef(__FIAsyncActionWithProgressCompletedHandler_1_DOUBLE* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIAsyncActionWithProgressCompletedHandler_1_DOUBLE_Release(__FIAsyncActionWithProgressCompletedHandler_1_DOUBLE* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IAsyncActionWithProgressCompletedHandler<DOUBLE > methods ***/
+static inline HRESULT __FIAsyncActionWithProgressCompletedHandler_1_DOUBLE_Invoke(__FIAsyncActionWithProgressCompletedHandler_1_DOUBLE* This,__FIAsyncActionWithProgress_1_DOUBLE *info,AsyncStatus status) {
+    return This->lpVtbl->Invoke(This,info,status);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_IAsyncActionWithProgressCompletedHandler_DOUBLE IID___FIAsyncActionWithProgressCompletedHandler_1_DOUBLE
+#define IAsyncActionWithProgressCompletedHandler_DOUBLEVtbl __FIAsyncActionWithProgressCompletedHandler_1_DOUBLEVtbl
+#define IAsyncActionWithProgressCompletedHandler_DOUBLE __FIAsyncActionWithProgressCompletedHandler_1_DOUBLE
+#define IAsyncActionWithProgressCompletedHandler_DOUBLE_QueryInterface __FIAsyncActionWithProgressCompletedHandler_1_DOUBLE_QueryInterface
+#define IAsyncActionWithProgressCompletedHandler_DOUBLE_AddRef __FIAsyncActionWithProgressCompletedHandler_1_DOUBLE_AddRef
+#define IAsyncActionWithProgressCompletedHandler_DOUBLE_Release __FIAsyncActionWithProgressCompletedHandler_1_DOUBLE_Release
+#define IAsyncActionWithProgressCompletedHandler_DOUBLE_Invoke __FIAsyncActionWithProgressCompletedHandler_1_DOUBLE_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FIAsyncActionWithProgressCompletedHandler_1_DOUBLE_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAsyncOperation<ABI::Windows::Media::Transcoding::PrepareTranscodeResult* > interface
+ */
+#ifndef ____FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_INTERFACE_DEFINED__
+#define ____FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult, 0xf5f07c13, 0x3047, 0x5bab, 0x8e,0xb7, 0x6e,0x5d,0x7d,0x14,0xaf,0xae);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("f5f07c13-3047-5bab-8eb7-6e5d7d14afae")
+            IAsyncOperation<ABI::Windows::Media::Transcoding::PrepareTranscodeResult* > : IAsyncOperation_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Media::Transcoding::PrepareTranscodeResult*, ABI::Windows::Media::Transcoding::IPrepareTranscodeResult* > >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult, 0xf5f07c13, 0x3047, 0x5bab, 0x8e,0xb7, 0x6e,0x5d,0x7d,0x14,0xaf,0xae)
+#endif
+#else
+typedef struct __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResultVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult *This,
+        TrustLevel *trustLevel);
+
+    /*** IAsyncOperation<ABI::Windows::Media::Transcoding::PrepareTranscodeResult* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_Completed)(
+        __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult *This,
+        __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult *handler);
+
+    HRESULT (STDMETHODCALLTYPE *get_Completed)(
+        __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult *This,
+        __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult **handler);
+
+    HRESULT (STDMETHODCALLTYPE *GetResults)(
+        __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult *This,
+        __x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult **results);
+
+    END_INTERFACE
+} __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResultVtbl;
+
+interface __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult {
+    CONST_VTBL __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResultVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IAsyncOperation<ABI::Windows::Media::Transcoding::PrepareTranscodeResult* > methods ***/
+#define __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_put_Completed(This,handler) (This)->lpVtbl->put_Completed(This,handler)
+#define __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_get_Completed(This,handler) (This)->lpVtbl->get_Completed(This,handler)
+#define __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_GetResults(This,results) (This)->lpVtbl->GetResults(This,results)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_QueryInterface(__FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_AddRef(__FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_Release(__FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_GetIids(__FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_GetRuntimeClassName(__FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_GetTrustLevel(__FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IAsyncOperation<ABI::Windows::Media::Transcoding::PrepareTranscodeResult* > methods ***/
+static inline HRESULT __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_put_Completed(__FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult* This,__FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult *handler) {
+    return This->lpVtbl->put_Completed(This,handler);
+}
+static inline HRESULT __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_get_Completed(__FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult* This,__FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult **handler) {
+    return This->lpVtbl->get_Completed(This,handler);
+}
+static inline HRESULT __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_GetResults(__FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult* This,__x_ABI_CWindows_CMedia_CTranscoding_CIPrepareTranscodeResult **results) {
+    return This->lpVtbl->GetResults(This,results);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_IAsyncOperation_PrepareTranscodeResult IID___FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult
+#define IAsyncOperation_PrepareTranscodeResultVtbl __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResultVtbl
+#define IAsyncOperation_PrepareTranscodeResult __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult
+#define IAsyncOperation_PrepareTranscodeResult_QueryInterface __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_QueryInterface
+#define IAsyncOperation_PrepareTranscodeResult_AddRef __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_AddRef
+#define IAsyncOperation_PrepareTranscodeResult_Release __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_Release
+#define IAsyncOperation_PrepareTranscodeResult_GetIids __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_GetIids
+#define IAsyncOperation_PrepareTranscodeResult_GetRuntimeClassName __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_GetRuntimeClassName
+#define IAsyncOperation_PrepareTranscodeResult_GetTrustLevel __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_GetTrustLevel
+#define IAsyncOperation_PrepareTranscodeResult_put_Completed __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_put_Completed
+#define IAsyncOperation_PrepareTranscodeResult_get_Completed __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_get_Completed
+#define IAsyncOperation_PrepareTranscodeResult_GetResults __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_GetResults
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAsyncOperation<ABI::Windows::Media::Transcoding::TranscodeFailureReason > interface
+ */
+#ifndef ____FIAsyncOperation_1_TranscodeFailureReason_INTERFACE_DEFINED__
+#define ____FIAsyncOperation_1_TranscodeFailureReason_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIAsyncOperation_1_TranscodeFailureReason, 0x02132510, 0x3899, 0x5257, 0xbe,0xd9, 0xa4,0x3e,0x51,0x49,0xd2,0x8c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("02132510-3899-5257-bed9-a43e5149d28c")
+            IAsyncOperation<ABI::Windows::Media::Transcoding::TranscodeFailureReason > : IAsyncOperation_impl<ABI::Windows::Media::Transcoding::TranscodeFailureReason >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIAsyncOperation_1_TranscodeFailureReason, 0x02132510, 0x3899, 0x5257, 0xbe,0xd9, 0xa4,0x3e,0x51,0x49,0xd2,0x8c)
+#endif
+#else
+typedef struct __FIAsyncOperation_1_TranscodeFailureReasonVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIAsyncOperation_1_TranscodeFailureReason *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIAsyncOperation_1_TranscodeFailureReason *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIAsyncOperation_1_TranscodeFailureReason *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIAsyncOperation_1_TranscodeFailureReason *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIAsyncOperation_1_TranscodeFailureReason *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIAsyncOperation_1_TranscodeFailureReason *This,
+        TrustLevel *trustLevel);
+
+    /*** IAsyncOperation<ABI::Windows::Media::Transcoding::TranscodeFailureReason > methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_Completed)(
+        __FIAsyncOperation_1_TranscodeFailureReason *This,
+        __FIAsyncOperationCompletedHandler_1_TranscodeFailureReason *handler);
+
+    HRESULT (STDMETHODCALLTYPE *get_Completed)(
+        __FIAsyncOperation_1_TranscodeFailureReason *This,
+        __FIAsyncOperationCompletedHandler_1_TranscodeFailureReason **handler);
+
+    HRESULT (STDMETHODCALLTYPE *GetResults)(
+        __FIAsyncOperation_1_TranscodeFailureReason *This,
+        __x_ABI_CWindows_CMedia_CTranscoding_CTranscodeFailureReason *results);
+
+    END_INTERFACE
+} __FIAsyncOperation_1_TranscodeFailureReasonVtbl;
+
+interface __FIAsyncOperation_1_TranscodeFailureReason {
+    CONST_VTBL __FIAsyncOperation_1_TranscodeFailureReasonVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIAsyncOperation_1_TranscodeFailureReason_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIAsyncOperation_1_TranscodeFailureReason_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIAsyncOperation_1_TranscodeFailureReason_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIAsyncOperation_1_TranscodeFailureReason_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIAsyncOperation_1_TranscodeFailureReason_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIAsyncOperation_1_TranscodeFailureReason_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IAsyncOperation<ABI::Windows::Media::Transcoding::TranscodeFailureReason > methods ***/
+#define __FIAsyncOperation_1_TranscodeFailureReason_put_Completed(This,handler) (This)->lpVtbl->put_Completed(This,handler)
+#define __FIAsyncOperation_1_TranscodeFailureReason_get_Completed(This,handler) (This)->lpVtbl->get_Completed(This,handler)
+#define __FIAsyncOperation_1_TranscodeFailureReason_GetResults(This,results) (This)->lpVtbl->GetResults(This,results)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIAsyncOperation_1_TranscodeFailureReason_QueryInterface(__FIAsyncOperation_1_TranscodeFailureReason* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIAsyncOperation_1_TranscodeFailureReason_AddRef(__FIAsyncOperation_1_TranscodeFailureReason* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIAsyncOperation_1_TranscodeFailureReason_Release(__FIAsyncOperation_1_TranscodeFailureReason* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIAsyncOperation_1_TranscodeFailureReason_GetIids(__FIAsyncOperation_1_TranscodeFailureReason* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIAsyncOperation_1_TranscodeFailureReason_GetRuntimeClassName(__FIAsyncOperation_1_TranscodeFailureReason* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIAsyncOperation_1_TranscodeFailureReason_GetTrustLevel(__FIAsyncOperation_1_TranscodeFailureReason* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IAsyncOperation<ABI::Windows::Media::Transcoding::TranscodeFailureReason > methods ***/
+static inline HRESULT __FIAsyncOperation_1_TranscodeFailureReason_put_Completed(__FIAsyncOperation_1_TranscodeFailureReason* This,__FIAsyncOperationCompletedHandler_1_TranscodeFailureReason *handler) {
+    return This->lpVtbl->put_Completed(This,handler);
+}
+static inline HRESULT __FIAsyncOperation_1_TranscodeFailureReason_get_Completed(__FIAsyncOperation_1_TranscodeFailureReason* This,__FIAsyncOperationCompletedHandler_1_TranscodeFailureReason **handler) {
+    return This->lpVtbl->get_Completed(This,handler);
+}
+static inline HRESULT __FIAsyncOperation_1_TranscodeFailureReason_GetResults(__FIAsyncOperation_1_TranscodeFailureReason* This,__x_ABI_CWindows_CMedia_CTranscoding_CTranscodeFailureReason *results) {
+    return This->lpVtbl->GetResults(This,results);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_IAsyncOperation_TranscodeFailureReason IID___FIAsyncOperation_1_TranscodeFailureReason
+#define IAsyncOperation_TranscodeFailureReasonVtbl __FIAsyncOperation_1_TranscodeFailureReasonVtbl
+#define IAsyncOperation_TranscodeFailureReason __FIAsyncOperation_1_TranscodeFailureReason
+#define IAsyncOperation_TranscodeFailureReason_QueryInterface __FIAsyncOperation_1_TranscodeFailureReason_QueryInterface
+#define IAsyncOperation_TranscodeFailureReason_AddRef __FIAsyncOperation_1_TranscodeFailureReason_AddRef
+#define IAsyncOperation_TranscodeFailureReason_Release __FIAsyncOperation_1_TranscodeFailureReason_Release
+#define IAsyncOperation_TranscodeFailureReason_GetIids __FIAsyncOperation_1_TranscodeFailureReason_GetIids
+#define IAsyncOperation_TranscodeFailureReason_GetRuntimeClassName __FIAsyncOperation_1_TranscodeFailureReason_GetRuntimeClassName
+#define IAsyncOperation_TranscodeFailureReason_GetTrustLevel __FIAsyncOperation_1_TranscodeFailureReason_GetTrustLevel
+#define IAsyncOperation_TranscodeFailureReason_put_Completed __FIAsyncOperation_1_TranscodeFailureReason_put_Completed
+#define IAsyncOperation_TranscodeFailureReason_get_Completed __FIAsyncOperation_1_TranscodeFailureReason_get_Completed
+#define IAsyncOperation_TranscodeFailureReason_GetResults __FIAsyncOperation_1_TranscodeFailureReason_GetResults
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FIAsyncOperation_1_TranscodeFailureReason_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAsyncOperationWithProgress<ABI::Windows::Media::Transcoding::TranscodeFailureReason,DOUBLE > interface
+ */
+#ifndef ____FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_INTERFACE_DEFINED__
+#define ____FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE, 0x272eec20, 0x4b64, 0x5d53, 0xa6,0x44, 0xf9,0x91,0x7b,0x3d,0x19,0xd8);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("272eec20-4b64-5d53-a644-f9917b3d19d8")
+            IAsyncOperationWithProgress<ABI::Windows::Media::Transcoding::TranscodeFailureReason,DOUBLE > : IAsyncOperationWithProgress_impl<ABI::Windows::Media::Transcoding::TranscodeFailureReason, DOUBLE >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE, 0x272eec20, 0x4b64, 0x5d53, 0xa6,0x44, 0xf9,0x91,0x7b,0x3d,0x19,0xd8)
+#endif
+#else
+typedef struct __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLEVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE *This,
+        TrustLevel *trustLevel);
+
+    /*** IAsyncOperationWithProgress<ABI::Windows::Media::Transcoding::TranscodeFailureReason,DOUBLE > methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_Progress)(
+        __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE *This,
+        __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE *handler);
+
+    HRESULT (STDMETHODCALLTYPE *get_Progress)(
+        __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE *This,
+        __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE **handler);
+
+    HRESULT (STDMETHODCALLTYPE *put_Completed)(
+        __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE *This,
+        __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE *handler);
+
+    HRESULT (STDMETHODCALLTYPE *get_Completed)(
+        __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE *This,
+        __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE **handler);
+
+    HRESULT (STDMETHODCALLTYPE *GetResults)(
+        __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE *This,
+        __x_ABI_CWindows_CMedia_CTranscoding_CTranscodeFailureReason *results);
+
+    END_INTERFACE
+} __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLEVtbl;
+
+interface __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE {
+    CONST_VTBL __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLEVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IAsyncOperationWithProgress<ABI::Windows::Media::Transcoding::TranscodeFailureReason,DOUBLE > methods ***/
+#define __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_put_Progress(This,handler) (This)->lpVtbl->put_Progress(This,handler)
+#define __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_get_Progress(This,handler) (This)->lpVtbl->get_Progress(This,handler)
+#define __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_put_Completed(This,handler) (This)->lpVtbl->put_Completed(This,handler)
+#define __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_get_Completed(This,handler) (This)->lpVtbl->get_Completed(This,handler)
+#define __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_GetResults(This,results) (This)->lpVtbl->GetResults(This,results)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_QueryInterface(__FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_AddRef(__FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_Release(__FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_GetIids(__FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_GetRuntimeClassName(__FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_GetTrustLevel(__FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IAsyncOperationWithProgress<ABI::Windows::Media::Transcoding::TranscodeFailureReason,DOUBLE > methods ***/
+static inline HRESULT __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_put_Progress(__FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE* This,__FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE *handler) {
+    return This->lpVtbl->put_Progress(This,handler);
+}
+static inline HRESULT __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_get_Progress(__FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE* This,__FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE **handler) {
+    return This->lpVtbl->get_Progress(This,handler);
+}
+static inline HRESULT __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_put_Completed(__FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE* This,__FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE *handler) {
+    return This->lpVtbl->put_Completed(This,handler);
+}
+static inline HRESULT __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_get_Completed(__FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE* This,__FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE **handler) {
+    return This->lpVtbl->get_Completed(This,handler);
+}
+static inline HRESULT __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_GetResults(__FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE* This,__x_ABI_CWindows_CMedia_CTranscoding_CTranscodeFailureReason *results) {
+    return This->lpVtbl->GetResults(This,results);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_IAsyncOperationWithProgress_TranscodeFailureReason_DOUBLE IID___FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE
+#define IAsyncOperationWithProgress_TranscodeFailureReason_DOUBLEVtbl __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLEVtbl
+#define IAsyncOperationWithProgress_TranscodeFailureReason_DOUBLE __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE
+#define IAsyncOperationWithProgress_TranscodeFailureReason_DOUBLE_QueryInterface __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_QueryInterface
+#define IAsyncOperationWithProgress_TranscodeFailureReason_DOUBLE_AddRef __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_AddRef
+#define IAsyncOperationWithProgress_TranscodeFailureReason_DOUBLE_Release __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_Release
+#define IAsyncOperationWithProgress_TranscodeFailureReason_DOUBLE_GetIids __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_GetIids
+#define IAsyncOperationWithProgress_TranscodeFailureReason_DOUBLE_GetRuntimeClassName __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_GetRuntimeClassName
+#define IAsyncOperationWithProgress_TranscodeFailureReason_DOUBLE_GetTrustLevel __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_GetTrustLevel
+#define IAsyncOperationWithProgress_TranscodeFailureReason_DOUBLE_put_Progress __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_put_Progress
+#define IAsyncOperationWithProgress_TranscodeFailureReason_DOUBLE_get_Progress __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_get_Progress
+#define IAsyncOperationWithProgress_TranscodeFailureReason_DOUBLE_put_Completed __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_put_Completed
+#define IAsyncOperationWithProgress_TranscodeFailureReason_DOUBLE_get_Completed __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_get_Completed
+#define IAsyncOperationWithProgress_TranscodeFailureReason_DOUBLE_GetResults __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_GetResults
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAsyncOperationCompletedHandler<ABI::Windows::Media::Transcoding::PrepareTranscodeResult* > interface
+ */
+#ifndef ____FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_INTERFACE_DEFINED__
+#define ____FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult, 0xa44d7d07, 0x8f74, 0x52ee, 0x9f,0x02, 0xc2,0xb2,0x44,0xb4,0xff,0x2a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("a44d7d07-8f74-52ee-9f02-c2b244b4ff2a")
+            IAsyncOperationCompletedHandler<ABI::Windows::Media::Transcoding::PrepareTranscodeResult* > : IAsyncOperationCompletedHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Media::Transcoding::PrepareTranscodeResult*, ABI::Windows::Media::Transcoding::IPrepareTranscodeResult* > >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult, 0xa44d7d07, 0x8f74, 0x52ee, 0x9f,0x02, 0xc2,0xb2,0x44,0xb4,0xff,0x2a)
+#endif
+#else
+typedef struct __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResultVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult *This);
+
+    /*** IAsyncOperationCompletedHandler<ABI::Windows::Media::Transcoding::PrepareTranscodeResult* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult *This,
+        __FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult *info,
+        AsyncStatus status);
+
+    END_INTERFACE
+} __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResultVtbl;
+
+interface __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult {
+    CONST_VTBL __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResultVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_Release(This) (This)->lpVtbl->Release(This)
+/*** IAsyncOperationCompletedHandler<ABI::Windows::Media::Transcoding::PrepareTranscodeResult* > methods ***/
+#define __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_Invoke(This,info,status) (This)->lpVtbl->Invoke(This,info,status)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_QueryInterface(__FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_AddRef(__FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_Release(__FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IAsyncOperationCompletedHandler<ABI::Windows::Media::Transcoding::PrepareTranscodeResult* > methods ***/
+static inline HRESULT __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_Invoke(__FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult* This,__FIAsyncOperation_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult *info,AsyncStatus status) {
+    return This->lpVtbl->Invoke(This,info,status);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_IAsyncOperationCompletedHandler_PrepareTranscodeResult IID___FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult
+#define IAsyncOperationCompletedHandler_PrepareTranscodeResultVtbl __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResultVtbl
+#define IAsyncOperationCompletedHandler_PrepareTranscodeResult __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult
+#define IAsyncOperationCompletedHandler_PrepareTranscodeResult_QueryInterface __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_QueryInterface
+#define IAsyncOperationCompletedHandler_PrepareTranscodeResult_AddRef __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_AddRef
+#define IAsyncOperationCompletedHandler_PrepareTranscodeResult_Release __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_Release
+#define IAsyncOperationCompletedHandler_PrepareTranscodeResult_Invoke __FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FIAsyncOperationCompletedHandler_1_Windows__CMedia__CTranscoding__CPrepareTranscodeResult_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAsyncOperationCompletedHandler<ABI::Windows::Media::Transcoding::TranscodeFailureReason > interface
+ */
+#ifndef ____FIAsyncOperationCompletedHandler_1_TranscodeFailureReason_INTERFACE_DEFINED__
+#define ____FIAsyncOperationCompletedHandler_1_TranscodeFailureReason_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIAsyncOperationCompletedHandler_1_TranscodeFailureReason, 0xc42ae2bf, 0xe194, 0x5179, 0xb8,0xad, 0x03,0xb5,0x1c,0x04,0xe1,0xda);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("c42ae2bf-e194-5179-b8ad-03b51c04e1da")
+            IAsyncOperationCompletedHandler<ABI::Windows::Media::Transcoding::TranscodeFailureReason > : IAsyncOperationCompletedHandler_impl<ABI::Windows::Media::Transcoding::TranscodeFailureReason >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIAsyncOperationCompletedHandler_1_TranscodeFailureReason, 0xc42ae2bf, 0xe194, 0x5179, 0xb8,0xad, 0x03,0xb5,0x1c,0x04,0xe1,0xda)
+#endif
+#else
+typedef struct __FIAsyncOperationCompletedHandler_1_TranscodeFailureReasonVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIAsyncOperationCompletedHandler_1_TranscodeFailureReason *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIAsyncOperationCompletedHandler_1_TranscodeFailureReason *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIAsyncOperationCompletedHandler_1_TranscodeFailureReason *This);
+
+    /*** IAsyncOperationCompletedHandler<ABI::Windows::Media::Transcoding::TranscodeFailureReason > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FIAsyncOperationCompletedHandler_1_TranscodeFailureReason *This,
+        __FIAsyncOperation_1_TranscodeFailureReason *info,
+        AsyncStatus status);
+
+    END_INTERFACE
+} __FIAsyncOperationCompletedHandler_1_TranscodeFailureReasonVtbl;
+
+interface __FIAsyncOperationCompletedHandler_1_TranscodeFailureReason {
+    CONST_VTBL __FIAsyncOperationCompletedHandler_1_TranscodeFailureReasonVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIAsyncOperationCompletedHandler_1_TranscodeFailureReason_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIAsyncOperationCompletedHandler_1_TranscodeFailureReason_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIAsyncOperationCompletedHandler_1_TranscodeFailureReason_Release(This) (This)->lpVtbl->Release(This)
+/*** IAsyncOperationCompletedHandler<ABI::Windows::Media::Transcoding::TranscodeFailureReason > methods ***/
+#define __FIAsyncOperationCompletedHandler_1_TranscodeFailureReason_Invoke(This,info,status) (This)->lpVtbl->Invoke(This,info,status)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIAsyncOperationCompletedHandler_1_TranscodeFailureReason_QueryInterface(__FIAsyncOperationCompletedHandler_1_TranscodeFailureReason* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIAsyncOperationCompletedHandler_1_TranscodeFailureReason_AddRef(__FIAsyncOperationCompletedHandler_1_TranscodeFailureReason* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIAsyncOperationCompletedHandler_1_TranscodeFailureReason_Release(__FIAsyncOperationCompletedHandler_1_TranscodeFailureReason* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IAsyncOperationCompletedHandler<ABI::Windows::Media::Transcoding::TranscodeFailureReason > methods ***/
+static inline HRESULT __FIAsyncOperationCompletedHandler_1_TranscodeFailureReason_Invoke(__FIAsyncOperationCompletedHandler_1_TranscodeFailureReason* This,__FIAsyncOperation_1_TranscodeFailureReason *info,AsyncStatus status) {
+    return This->lpVtbl->Invoke(This,info,status);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_IAsyncOperationCompletedHandler_TranscodeFailureReason IID___FIAsyncOperationCompletedHandler_1_TranscodeFailureReason
+#define IAsyncOperationCompletedHandler_TranscodeFailureReasonVtbl __FIAsyncOperationCompletedHandler_1_TranscodeFailureReasonVtbl
+#define IAsyncOperationCompletedHandler_TranscodeFailureReason __FIAsyncOperationCompletedHandler_1_TranscodeFailureReason
+#define IAsyncOperationCompletedHandler_TranscodeFailureReason_QueryInterface __FIAsyncOperationCompletedHandler_1_TranscodeFailureReason_QueryInterface
+#define IAsyncOperationCompletedHandler_TranscodeFailureReason_AddRef __FIAsyncOperationCompletedHandler_1_TranscodeFailureReason_AddRef
+#define IAsyncOperationCompletedHandler_TranscodeFailureReason_Release __FIAsyncOperationCompletedHandler_1_TranscodeFailureReason_Release
+#define IAsyncOperationCompletedHandler_TranscodeFailureReason_Invoke __FIAsyncOperationCompletedHandler_1_TranscodeFailureReason_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FIAsyncOperationCompletedHandler_1_TranscodeFailureReason_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAsyncOperationWithProgressCompletedHandler<ABI::Windows::Media::Transcoding::TranscodeFailureReason,DOUBLE > interface
+ */
+#ifndef ____FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE_INTERFACE_DEFINED__
+#define ____FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE, 0x080f1890, 0x4fca, 0x5165, 0xa9,0x89, 0x4b,0x07,0xda,0x8e,0x0b,0x53);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("080f1890-4fca-5165-a989-4b07da8e0b53")
+            IAsyncOperationWithProgressCompletedHandler<ABI::Windows::Media::Transcoding::TranscodeFailureReason,DOUBLE > : IAsyncOperationWithProgressCompletedHandler_impl<ABI::Windows::Media::Transcoding::TranscodeFailureReason, DOUBLE >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE, 0x080f1890, 0x4fca, 0x5165, 0xa9,0x89, 0x4b,0x07,0xda,0x8e,0x0b,0x53)
+#endif
+#else
+typedef struct __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLEVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE *This);
+
+    /*** IAsyncOperationWithProgressCompletedHandler<ABI::Windows::Media::Transcoding::TranscodeFailureReason,DOUBLE > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE *This,
+        __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE *info,
+        AsyncStatus status);
+
+    END_INTERFACE
+} __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLEVtbl;
+
+interface __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE {
+    CONST_VTBL __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLEVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE_Release(This) (This)->lpVtbl->Release(This)
+/*** IAsyncOperationWithProgressCompletedHandler<ABI::Windows::Media::Transcoding::TranscodeFailureReason,DOUBLE > methods ***/
+#define __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE_Invoke(This,info,status) (This)->lpVtbl->Invoke(This,info,status)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE_QueryInterface(__FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE_AddRef(__FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE_Release(__FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IAsyncOperationWithProgressCompletedHandler<ABI::Windows::Media::Transcoding::TranscodeFailureReason,DOUBLE > methods ***/
+static inline HRESULT __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE_Invoke(__FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE* This,__FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE *info,AsyncStatus status) {
+    return This->lpVtbl->Invoke(This,info,status);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_IAsyncOperationWithProgressCompletedHandler_TranscodeFailureReason_DOUBLE IID___FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE
+#define IAsyncOperationWithProgressCompletedHandler_TranscodeFailureReason_DOUBLEVtbl __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLEVtbl
+#define IAsyncOperationWithProgressCompletedHandler_TranscodeFailureReason_DOUBLE __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE
+#define IAsyncOperationWithProgressCompletedHandler_TranscodeFailureReason_DOUBLE_QueryInterface __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE_QueryInterface
+#define IAsyncOperationWithProgressCompletedHandler_TranscodeFailureReason_DOUBLE_AddRef __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE_AddRef
+#define IAsyncOperationWithProgressCompletedHandler_TranscodeFailureReason_DOUBLE_Release __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE_Release
+#define IAsyncOperationWithProgressCompletedHandler_TranscodeFailureReason_DOUBLE_Invoke __FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FIAsyncOperationWithProgressCompletedHandler_2_TranscodeFailureReason_DOUBLE_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAsyncOperationProgressHandler<ABI::Windows::Media::Transcoding::TranscodeFailureReason,DOUBLE > interface
+ */
+#ifndef ____FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE_INTERFACE_DEFINED__
+#define ____FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE, 0x009c6245, 0x0e59, 0x53b0, 0x9f,0xd2, 0xd2,0x50,0xe4,0x5a,0x00,0xa3);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("009c6245-0e59-53b0-9fd2-d250e45a00a3")
+            IAsyncOperationProgressHandler<ABI::Windows::Media::Transcoding::TranscodeFailureReason,DOUBLE > : IAsyncOperationProgressHandler_impl<ABI::Windows::Media::Transcoding::TranscodeFailureReason, DOUBLE >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE, 0x009c6245, 0x0e59, 0x53b0, 0x9f,0xd2, 0xd2,0x50,0xe4,0x5a,0x00,0xa3)
+#endif
+#else
+typedef struct __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLEVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE *This);
+
+    /*** IAsyncOperationProgressHandler<ABI::Windows::Media::Transcoding::TranscodeFailureReason,DOUBLE > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE *This,
+        __FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE *info,
+        DOUBLE progress);
+
+    END_INTERFACE
+} __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLEVtbl;
+
+interface __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE {
+    CONST_VTBL __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLEVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE_Release(This) (This)->lpVtbl->Release(This)
+/*** IAsyncOperationProgressHandler<ABI::Windows::Media::Transcoding::TranscodeFailureReason,DOUBLE > methods ***/
+#define __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE_Invoke(This,info,progress) (This)->lpVtbl->Invoke(This,info,progress)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE_QueryInterface(__FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE_AddRef(__FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE_Release(__FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IAsyncOperationProgressHandler<ABI::Windows::Media::Transcoding::TranscodeFailureReason,DOUBLE > methods ***/
+static inline HRESULT __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE_Invoke(__FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE* This,__FIAsyncOperationWithProgress_2_TranscodeFailureReason_DOUBLE *info,DOUBLE progress) {
+    return This->lpVtbl->Invoke(This,info,progress);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_IAsyncOperationProgressHandler_TranscodeFailureReason_DOUBLE IID___FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE
+#define IAsyncOperationProgressHandler_TranscodeFailureReason_DOUBLEVtbl __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLEVtbl
+#define IAsyncOperationProgressHandler_TranscodeFailureReason_DOUBLE __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE
+#define IAsyncOperationProgressHandler_TranscodeFailureReason_DOUBLE_QueryInterface __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE_QueryInterface
+#define IAsyncOperationProgressHandler_TranscodeFailureReason_DOUBLE_AddRef __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE_AddRef
+#define IAsyncOperationProgressHandler_TranscodeFailureReason_DOUBLE_Release __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE_Release
+#define IAsyncOperationProgressHandler_TranscodeFailureReason_DOUBLE_Invoke __FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FIAsyncOperationProgressHandler_2_TranscodeFailureReason_DOUBLE_INTERFACE_DEFINED__ */
+
+/* Begin additional prototypes for all interfaces */
+
+ULONG           __RPC_USER HSTRING_UserSize     (ULONG *, ULONG, HSTRING *);
+unsigned char * __RPC_USER HSTRING_UserMarshal  (ULONG *, unsigned char *, HSTRING *);
+unsigned char * __RPC_USER HSTRING_UserUnmarshal(ULONG *, unsigned char *, HSTRING *);
+void            __RPC_USER HSTRING_UserFree     (ULONG *, HSTRING *);
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __windows_media_transcoding_h__ */
diff --git a/mingw-w64-headers/include/windows.networking.connectivity.h b/mingw-w64-headers/include/windows.networking.connectivity.h
index 2492d61..744c5b9 100644
--- a/mingw-w64-headers/include/windows.networking.connectivity.h
+++ b/mingw-w64-headers/include/windows.networking.connectivity.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.networking.connectivity.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.networking.connectivity.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.networking.h b/mingw-w64-headers/include/windows.networking.h
index 0891aee..5886032 100644
--- a/mingw-w64-headers/include/windows.networking.h
+++ b/mingw-w64-headers/include/windows.networking.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.networking.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.networking.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.networking.sockets.h b/mingw-w64-headers/include/windows.networking.sockets.h
index 0040c77..eacc237 100644
--- a/mingw-w64-headers/include/windows.networking.sockets.h
+++ b/mingw-w64-headers/include/windows.networking.sockets.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.networking.sockets.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.networking.sockets.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.perception.spatial.h b/mingw-w64-headers/include/windows.perception.spatial.h
index be36ee1..56e39a9 100644
--- a/mingw-w64-headers/include/windows.perception.spatial.h
+++ b/mingw-w64-headers/include/windows.perception.spatial.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.perception.spatial.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.perception.spatial.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.perception.spatial.surfaces.h b/mingw-w64-headers/include/windows.perception.spatial.surfaces.h
index 29a71b9..778cc8d 100644
--- a/mingw-w64-headers/include/windows.perception.spatial.surfaces.h
+++ b/mingw-w64-headers/include/windows.perception.spatial.surfaces.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.perception.spatial.surfaces.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.perception.spatial.surfaces.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.security.authentication.onlineid.h b/mingw-w64-headers/include/windows.security.authentication.onlineid.h
index 46e1dfe..982ae84 100644
--- a/mingw-w64-headers/include/windows.security.authentication.onlineid.h
+++ b/mingw-w64-headers/include/windows.security.authentication.onlineid.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.security.authentication.onlineid.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.security.authentication.onlineid.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.security.authorization.appcapabilityaccess.h b/mingw-w64-headers/include/windows.security.authorization.appcapabilityaccess.h
index ac9e4e3..01d6362 100644
--- a/mingw-w64-headers/include/windows.security.authorization.appcapabilityaccess.h
+++ b/mingw-w64-headers/include/windows.security.authorization.appcapabilityaccess.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.security.authorization.appcapabilityaccess.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.security.authorization.appcapabilityaccess.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.security.credentials.h b/mingw-w64-headers/include/windows.security.credentials.h
index 428700b..b4fca1d 100644
--- a/mingw-w64-headers/include/windows.security.credentials.h
+++ b/mingw-w64-headers/include/windows.security.credentials.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.security.credentials.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.security.credentials.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.security.credentials.ui.h b/mingw-w64-headers/include/windows.security.credentials.ui.h
index 68e6ae5..e24a012 100644
--- a/mingw-w64-headers/include/windows.security.credentials.ui.h
+++ b/mingw-w64-headers/include/windows.security.credentials.ui.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.security.credentials.ui.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.security.credentials.ui.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.security.cryptography.h b/mingw-w64-headers/include/windows.security.cryptography.h
index b6b1f90..ca90cdf 100644
--- a/mingw-w64-headers/include/windows.security.cryptography.h
+++ b/mingw-w64-headers/include/windows.security.cryptography.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.security.cryptography.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.security.cryptography.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.security.enterprisedata.h b/mingw-w64-headers/include/windows.security.enterprisedata.h
index 2fd0fff..0a58ffb 100644
--- a/mingw-w64-headers/include/windows.security.enterprisedata.h
+++ b/mingw-w64-headers/include/windows.security.enterprisedata.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.security.enterprisedata.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.security.enterprisedata.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.security.exchangeactivesyncprovisioning.h b/mingw-w64-headers/include/windows.security.exchangeactivesyncprovisioning.h
index f3fc401..e77638d 100644
--- a/mingw-w64-headers/include/windows.security.exchangeactivesyncprovisioning.h
+++ b/mingw-w64-headers/include/windows.security.exchangeactivesyncprovisioning.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.security.exchangeactivesyncprovisioning.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.security.exchangeactivesyncprovisioning.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.security.isolation.h b/mingw-w64-headers/include/windows.security.isolation.h
index 3c78fab..83c54da 100644
--- a/mingw-w64-headers/include/windows.security.isolation.h
+++ b/mingw-w64-headers/include/windows.security.isolation.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.security.isolation.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.security.isolation.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.storage.fileproperties.h b/mingw-w64-headers/include/windows.storage.fileproperties.h
index ff3146c..01d2094 100644
--- a/mingw-w64-headers/include/windows.storage.fileproperties.h
+++ b/mingw-w64-headers/include/windows.storage.fileproperties.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.storage.fileproperties.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.storage.fileproperties.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.storage.h b/mingw-w64-headers/include/windows.storage.h
index ec39073..8837b65 100644
--- a/mingw-w64-headers/include/windows.storage.h
+++ b/mingw-w64-headers/include/windows.storage.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.storage.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.storage.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
@@ -454,14 +454,6 @@
 #endif /* __cplusplus */
 #endif
 
-#ifndef ____FIIterable_1_Windows__CStorage__CIStorageItem_FWD_DEFINED__
-#define ____FIIterable_1_Windows__CStorage__CIStorageItem_FWD_DEFINED__
-typedef interface __FIIterable_1_Windows__CStorage__CIStorageItem __FIIterable_1_Windows__CStorage__CIStorageItem;
-#ifdef __cplusplus
-#define __FIIterable_1_Windows__CStorage__CIStorageItem ABI::Windows::Foundation::Collections::IIterable<ABI::Windows::Storage::IStorageItem* >
-#endif /* __cplusplus */
-#endif
-
 #ifndef ____FIIterator_1___FIKeyValuePair_2_HSTRING_Windows__CStorage__CApplicationDataContainer_FWD_DEFINED__
 #define ____FIIterator_1___FIKeyValuePair_2_HSTRING_Windows__CStorage__CApplicationDataContainer_FWD_DEFINED__
 typedef interface __FIIterator_1___FIKeyValuePair_2_HSTRING_Windows__CStorage__CApplicationDataContainer __FIIterator_1___FIKeyValuePair_2_HSTRING_Windows__CStorage__CApplicationDataContainer;
@@ -470,14 +462,6 @@
 #endif /* __cplusplus */
 #endif
 
-#ifndef ____FIIterator_1_Windows__CStorage__CIStorageItem_FWD_DEFINED__
-#define ____FIIterator_1_Windows__CStorage__CIStorageItem_FWD_DEFINED__
-typedef interface __FIIterator_1_Windows__CStorage__CIStorageItem __FIIterator_1_Windows__CStorage__CIStorageItem;
-#ifdef __cplusplus
-#define __FIIterator_1_Windows__CStorage__CIStorageItem ABI::Windows::Foundation::Collections::IIterator<ABI::Windows::Storage::IStorageItem* >
-#endif /* __cplusplus */
-#endif
-
 #ifndef ____FIMapView_2_HSTRING_Windows__CStorage__CApplicationDataContainer_FWD_DEFINED__
 #define ____FIMapView_2_HSTRING_Windows__CStorage__CApplicationDataContainer_FWD_DEFINED__
 typedef interface __FIMapView_2_HSTRING_Windows__CStorage__CApplicationDataContainer __FIMapView_2_HSTRING_Windows__CStorage__CApplicationDataContainer;
@@ -486,6 +470,46 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef ____FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_FWD_DEFINED__
+#define ____FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_FWD_DEFINED__
+typedef interface __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData;
+#ifdef __cplusplus
+#define __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData ABI::Windows::Foundation::IAsyncOperationCompletedHandler<ABI::Windows::Storage::ApplicationData* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIAsyncOperation_1_Windows__CStorage__CApplicationData_FWD_DEFINED__
+#define ____FIAsyncOperation_1_Windows__CStorage__CApplicationData_FWD_DEFINED__
+typedef interface __FIAsyncOperation_1_Windows__CStorage__CApplicationData __FIAsyncOperation_1_Windows__CStorage__CApplicationData;
+#ifdef __cplusplus
+#define __FIAsyncOperation_1_Windows__CStorage__CApplicationData ABI::Windows::Foundation::IAsyncOperation<ABI::Windows::Storage::ApplicationData* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_FWD_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_FWD_DEFINED__
+typedef interface __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable;
+#ifdef __cplusplus
+#define __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::Storage::ApplicationData*,IInspectable* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterable_1_Windows__CStorage__CIStorageItem_FWD_DEFINED__
+#define ____FIIterable_1_Windows__CStorage__CIStorageItem_FWD_DEFINED__
+typedef interface __FIIterable_1_Windows__CStorage__CIStorageItem __FIIterable_1_Windows__CStorage__CIStorageItem;
+#ifdef __cplusplus
+#define __FIIterable_1_Windows__CStorage__CIStorageItem ABI::Windows::Foundation::Collections::IIterable<ABI::Windows::Storage::IStorageItem* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterator_1_Windows__CStorage__CIStorageItem_FWD_DEFINED__
+#define ____FIIterator_1_Windows__CStorage__CIStorageItem_FWD_DEFINED__
+typedef interface __FIIterator_1_Windows__CStorage__CIStorageItem __FIIterator_1_Windows__CStorage__CIStorageItem;
+#ifdef __cplusplus
+#define __FIIterator_1_Windows__CStorage__CIStorageItem ABI::Windows::Foundation::Collections::IIterator<ABI::Windows::Storage::IStorageItem* >
+#endif /* __cplusplus */
+#endif
+
 #ifndef ____FIVectorView_1_Windows__CStorage__CIStorageItem_FWD_DEFINED__
 #define ____FIVectorView_1_Windows__CStorage__CIStorageItem_FWD_DEFINED__
 typedef interface __FIVectorView_1_Windows__CStorage__CIStorageItem __FIVectorView_1_Windows__CStorage__CIStorageItem;
@@ -534,14 +558,6 @@
 #endif /* __cplusplus */
 #endif
 
-#ifndef ____FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_FWD_DEFINED__
-#define ____FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_FWD_DEFINED__
-typedef interface __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData;
-#ifdef __cplusplus
-#define __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData ABI::Windows::Foundation::IAsyncOperationCompletedHandler<ABI::Windows::Storage::ApplicationData* >
-#endif /* __cplusplus */
-#endif
-
 #ifndef ____FIAsyncOperationCompletedHandler_1_KnownFoldersAccessStatus_FWD_DEFINED__
 #define ____FIAsyncOperationCompletedHandler_1_KnownFoldersAccessStatus_FWD_DEFINED__
 typedef interface __FIAsyncOperationCompletedHandler_1_KnownFoldersAccessStatus __FIAsyncOperationCompletedHandler_1_KnownFoldersAccessStatus;
@@ -606,14 +622,6 @@
 #endif /* __cplusplus */
 #endif
 
-#ifndef ____FIAsyncOperation_1_Windows__CStorage__CApplicationData_FWD_DEFINED__
-#define ____FIAsyncOperation_1_Windows__CStorage__CApplicationData_FWD_DEFINED__
-typedef interface __FIAsyncOperation_1_Windows__CStorage__CApplicationData __FIAsyncOperation_1_Windows__CStorage__CApplicationData;
-#ifdef __cplusplus
-#define __FIAsyncOperation_1_Windows__CStorage__CApplicationData ABI::Windows::Foundation::IAsyncOperation<ABI::Windows::Storage::ApplicationData* >
-#endif /* __cplusplus */
-#endif
-
 #ifndef ____FIAsyncOperation_1_KnownFoldersAccessStatus_FWD_DEFINED__
 #define ____FIAsyncOperation_1_KnownFoldersAccessStatus_FWD_DEFINED__
 typedef interface __FIAsyncOperation_1_KnownFoldersAccessStatus __FIAsyncOperation_1_KnownFoldersAccessStatus;
@@ -654,14 +662,6 @@
 #endif /* __cplusplus */
 #endif
 
-#ifndef ____FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_FWD_DEFINED__
-#define ____FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_FWD_DEFINED__
-typedef interface __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable;
-#ifdef __cplusplus
-#define __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::Storage::ApplicationData*,IInspectable* >
-#endif /* __cplusplus */
-#endif
-
 /* Headers for imported files */
 
 #include <inspectable.h>
@@ -1311,6 +1311,36 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef ____x_ABI_CWindows_CStorage_CIStorageFileStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CStorage_CIStorageFileStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CStorage_CIStorageFileStatics __x_ABI_CWindows_CStorage_CIStorageFileStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CStorage_CIStorageFileStatics ABI::Windows::Storage::IStorageFileStatics
+namespace ABI {
+    namespace Windows {
+        namespace Storage {
+            interface IStorageFileStatics;
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CStorage_CIStorageFileStatics2_FWD_DEFINED__
+#define ____x_ABI_CWindows_CStorage_CIStorageFileStatics2_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CStorage_CIStorageFileStatics2 __x_ABI_CWindows_CStorage_CIStorageFileStatics2;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CStorage_CIStorageFileStatics2 ABI::Windows::Storage::IStorageFileStatics2
+namespace ABI {
+    namespace Windows {
+        namespace Storage {
+            interface IStorageFileStatics2;
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
 #ifndef ____x_ABI_CWindows_CStorage_CIStorageFolder_FWD_DEFINED__
 #define ____x_ABI_CWindows_CStorage_CIStorageFolder_FWD_DEFINED__
 typedef interface __x_ABI_CWindows_CStorage_CIStorageFolder __x_ABI_CWindows_CStorage_CIStorageFolder;
@@ -1356,36 +1386,6 @@
 #endif /* __cplusplus */
 #endif
 
-#ifndef ____x_ABI_CWindows_CStorage_CIStorageFileStatics_FWD_DEFINED__
-#define ____x_ABI_CWindows_CStorage_CIStorageFileStatics_FWD_DEFINED__
-typedef interface __x_ABI_CWindows_CStorage_CIStorageFileStatics __x_ABI_CWindows_CStorage_CIStorageFileStatics;
-#ifdef __cplusplus
-#define __x_ABI_CWindows_CStorage_CIStorageFileStatics ABI::Windows::Storage::IStorageFileStatics
-namespace ABI {
-    namespace Windows {
-        namespace Storage {
-            interface IStorageFileStatics;
-        }
-    }
-}
-#endif /* __cplusplus */
-#endif
-
-#ifndef ____x_ABI_CWindows_CStorage_CIStorageFileStatics2_FWD_DEFINED__
-#define ____x_ABI_CWindows_CStorage_CIStorageFileStatics2_FWD_DEFINED__
-typedef interface __x_ABI_CWindows_CStorage_CIStorageFileStatics2 __x_ABI_CWindows_CStorage_CIStorageFileStatics2;
-#ifdef __cplusplus
-#define __x_ABI_CWindows_CStorage_CIStorageFileStatics2 ABI::Windows::Storage::IStorageFileStatics2
-namespace ABI {
-    namespace Windows {
-        namespace Storage {
-            interface IStorageFileStatics2;
-        }
-    }
-}
-#endif /* __cplusplus */
-#endif
-
 #ifndef ____x_ABI_CWindows_CStorage_CIStorageItem_FWD_DEFINED__
 #define ____x_ABI_CWindows_CStorage_CIStorageItem_FWD_DEFINED__
 typedef interface __x_ABI_CWindows_CStorage_CIStorageItem __x_ABI_CWindows_CStorage_CIStorageItem;
@@ -1417,14 +1417,6 @@
 #endif /* __cplusplus */
 #endif
 
-#ifndef ____FIIterable_1_Windows__CStorage__CIStorageItem_FWD_DEFINED__
-#define ____FIIterable_1_Windows__CStorage__CIStorageItem_FWD_DEFINED__
-typedef interface __FIIterable_1_Windows__CStorage__CIStorageItem __FIIterable_1_Windows__CStorage__CIStorageItem;
-#ifdef __cplusplus
-#define __FIIterable_1_Windows__CStorage__CIStorageItem ABI::Windows::Foundation::Collections::IIterable<ABI::Windows::Storage::IStorageItem* >
-#endif /* __cplusplus */
-#endif
-
 #ifndef ____FIIterator_1___FIKeyValuePair_2_HSTRING_Windows__CStorage__CApplicationDataContainer_FWD_DEFINED__
 #define ____FIIterator_1___FIKeyValuePair_2_HSTRING_Windows__CStorage__CApplicationDataContainer_FWD_DEFINED__
 typedef interface __FIIterator_1___FIKeyValuePair_2_HSTRING_Windows__CStorage__CApplicationDataContainer __FIIterator_1___FIKeyValuePair_2_HSTRING_Windows__CStorage__CApplicationDataContainer;
@@ -1433,14 +1425,6 @@
 #endif /* __cplusplus */
 #endif
 
-#ifndef ____FIIterator_1_Windows__CStorage__CIStorageItem_FWD_DEFINED__
-#define ____FIIterator_1_Windows__CStorage__CIStorageItem_FWD_DEFINED__
-typedef interface __FIIterator_1_Windows__CStorage__CIStorageItem __FIIterator_1_Windows__CStorage__CIStorageItem;
-#ifdef __cplusplus
-#define __FIIterator_1_Windows__CStorage__CIStorageItem ABI::Windows::Foundation::Collections::IIterator<ABI::Windows::Storage::IStorageItem* >
-#endif /* __cplusplus */
-#endif
-
 #ifndef ____FIMapView_2_HSTRING_Windows__CStorage__CApplicationDataContainer_FWD_DEFINED__
 #define ____FIMapView_2_HSTRING_Windows__CStorage__CApplicationDataContainer_FWD_DEFINED__
 typedef interface __FIMapView_2_HSTRING_Windows__CStorage__CApplicationDataContainer __FIMapView_2_HSTRING_Windows__CStorage__CApplicationDataContainer;
@@ -1449,6 +1433,30 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef ____FIAsyncOperation_1_Windows__CStorage__CApplicationData_FWD_DEFINED__
+#define ____FIAsyncOperation_1_Windows__CStorage__CApplicationData_FWD_DEFINED__
+typedef interface __FIAsyncOperation_1_Windows__CStorage__CApplicationData __FIAsyncOperation_1_Windows__CStorage__CApplicationData;
+#ifdef __cplusplus
+#define __FIAsyncOperation_1_Windows__CStorage__CApplicationData ABI::Windows::Foundation::IAsyncOperation<ABI::Windows::Storage::ApplicationData* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterable_1_Windows__CStorage__CIStorageItem_FWD_DEFINED__
+#define ____FIIterable_1_Windows__CStorage__CIStorageItem_FWD_DEFINED__
+typedef interface __FIIterable_1_Windows__CStorage__CIStorageItem __FIIterable_1_Windows__CStorage__CIStorageItem;
+#ifdef __cplusplus
+#define __FIIterable_1_Windows__CStorage__CIStorageItem ABI::Windows::Foundation::Collections::IIterable<ABI::Windows::Storage::IStorageItem* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterator_1_Windows__CStorage__CIStorageItem_FWD_DEFINED__
+#define ____FIIterator_1_Windows__CStorage__CIStorageItem_FWD_DEFINED__
+typedef interface __FIIterator_1_Windows__CStorage__CIStorageItem __FIIterator_1_Windows__CStorage__CIStorageItem;
+#ifdef __cplusplus
+#define __FIIterator_1_Windows__CStorage__CIStorageItem ABI::Windows::Foundation::Collections::IIterator<ABI::Windows::Storage::IStorageItem* >
+#endif /* __cplusplus */
+#endif
+
 #ifndef ____FIVectorView_1_Windows__CStorage__CIStorageItem_FWD_DEFINED__
 #define ____FIVectorView_1_Windows__CStorage__CIStorageItem_FWD_DEFINED__
 typedef interface __FIVectorView_1_Windows__CStorage__CIStorageItem __FIVectorView_1_Windows__CStorage__CIStorageItem;
@@ -1497,14 +1505,6 @@
 #endif /* __cplusplus */
 #endif
 
-#ifndef ____FIAsyncOperation_1_Windows__CStorage__CApplicationData_FWD_DEFINED__
-#define ____FIAsyncOperation_1_Windows__CStorage__CApplicationData_FWD_DEFINED__
-typedef interface __FIAsyncOperation_1_Windows__CStorage__CApplicationData __FIAsyncOperation_1_Windows__CStorage__CApplicationData;
-#ifdef __cplusplus
-#define __FIAsyncOperation_1_Windows__CStorage__CApplicationData ABI::Windows::Foundation::IAsyncOperation<ABI::Windows::Storage::ApplicationData* >
-#endif /* __cplusplus */
-#endif
-
 #ifndef ____FIAsyncOperation_1_KnownFoldersAccessStatus_FWD_DEFINED__
 #define ____FIAsyncOperation_1_KnownFoldersAccessStatus_FWD_DEFINED__
 typedef interface __FIAsyncOperation_1_KnownFoldersAccessStatus __FIAsyncOperation_1_KnownFoldersAccessStatus;
@@ -5238,130 +5238,6 @@
 #endif  /* ____FIIterable_1___FIKeyValuePair_2_HSTRING_Windows__CStorage__CApplicationDataContainer_INTERFACE_DEFINED__ */
 
 /*****************************************************************************
- * IIterable<ABI::Windows::Storage::IStorageItem* > interface
- */
-#ifndef ____FIIterable_1_Windows__CStorage__CIStorageItem_INTERFACE_DEFINED__
-#define ____FIIterable_1_Windows__CStorage__CIStorageItem_INTERFACE_DEFINED__
-
-DEFINE_GUID(IID___FIIterable_1_Windows__CStorage__CIStorageItem, 0xbb8b8418, 0x65d1, 0x544b, 0xb0,0x83, 0x6d,0x17,0x2f,0x56,0x8c,0x73);
-#if defined(__cplusplus) && !defined(CINTERFACE)
-} /* extern "C" */
-namespace ABI {
-    namespace Windows {
-        namespace Foundation {
-            namespace Collections {
-                template<>
-                MIDL_INTERFACE("bb8b8418-65d1-544b-b083-6d172f568c73")
-                IIterable<ABI::Windows::Storage::IStorageItem* > : IIterable_impl<ABI::Windows::Storage::IStorageItem* >
-                {
-                };
-            }
-        }
-    }
-}
-extern "C" {
-#ifdef __CRT_UUID_DECL
-__CRT_UUID_DECL(__FIIterable_1_Windows__CStorage__CIStorageItem, 0xbb8b8418, 0x65d1, 0x544b, 0xb0,0x83, 0x6d,0x17,0x2f,0x56,0x8c,0x73)
-#endif
-#else
-typedef struct __FIIterable_1_Windows__CStorage__CIStorageItemVtbl {
-    BEGIN_INTERFACE
-
-    /*** IUnknown methods ***/
-    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        __FIIterable_1_Windows__CStorage__CIStorageItem *This,
-        REFIID riid,
-        void **ppvObject);
-
-    ULONG (STDMETHODCALLTYPE *AddRef)(
-        __FIIterable_1_Windows__CStorage__CIStorageItem *This);
-
-    ULONG (STDMETHODCALLTYPE *Release)(
-        __FIIterable_1_Windows__CStorage__CIStorageItem *This);
-
-    /*** IInspectable methods ***/
-    HRESULT (STDMETHODCALLTYPE *GetIids)(
-        __FIIterable_1_Windows__CStorage__CIStorageItem *This,
-        ULONG *iidCount,
-        IID **iids);
-
-    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
-        __FIIterable_1_Windows__CStorage__CIStorageItem *This,
-        HSTRING *className);
-
-    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
-        __FIIterable_1_Windows__CStorage__CIStorageItem *This,
-        TrustLevel *trustLevel);
-
-    /*** IIterable<ABI::Windows::Storage::IStorageItem* > methods ***/
-    HRESULT (STDMETHODCALLTYPE *First)(
-        __FIIterable_1_Windows__CStorage__CIStorageItem *This,
-        __FIIterator_1_Windows__CStorage__CIStorageItem **value);
-
-    END_INTERFACE
-} __FIIterable_1_Windows__CStorage__CIStorageItemVtbl;
-
-interface __FIIterable_1_Windows__CStorage__CIStorageItem {
-    CONST_VTBL __FIIterable_1_Windows__CStorage__CIStorageItemVtbl* lpVtbl;
-};
-
-#ifdef COBJMACROS
-#ifndef WIDL_C_INLINE_WRAPPERS
-/*** IUnknown methods ***/
-#define __FIIterable_1_Windows__CStorage__CIStorageItem_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define __FIIterable_1_Windows__CStorage__CIStorageItem_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define __FIIterable_1_Windows__CStorage__CIStorageItem_Release(This) (This)->lpVtbl->Release(This)
-/*** IInspectable methods ***/
-#define __FIIterable_1_Windows__CStorage__CIStorageItem_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
-#define __FIIterable_1_Windows__CStorage__CIStorageItem_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
-#define __FIIterable_1_Windows__CStorage__CIStorageItem_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
-/*** IIterable<ABI::Windows::Storage::IStorageItem* > methods ***/
-#define __FIIterable_1_Windows__CStorage__CIStorageItem_First(This,value) (This)->lpVtbl->First(This,value)
-#else
-/*** IUnknown methods ***/
-static inline HRESULT __FIIterable_1_Windows__CStorage__CIStorageItem_QueryInterface(__FIIterable_1_Windows__CStorage__CIStorageItem* This,REFIID riid,void **ppvObject) {
-    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
-}
-static inline ULONG __FIIterable_1_Windows__CStorage__CIStorageItem_AddRef(__FIIterable_1_Windows__CStorage__CIStorageItem* This) {
-    return This->lpVtbl->AddRef(This);
-}
-static inline ULONG __FIIterable_1_Windows__CStorage__CIStorageItem_Release(__FIIterable_1_Windows__CStorage__CIStorageItem* This) {
-    return This->lpVtbl->Release(This);
-}
-/*** IInspectable methods ***/
-static inline HRESULT __FIIterable_1_Windows__CStorage__CIStorageItem_GetIids(__FIIterable_1_Windows__CStorage__CIStorageItem* This,ULONG *iidCount,IID **iids) {
-    return This->lpVtbl->GetIids(This,iidCount,iids);
-}
-static inline HRESULT __FIIterable_1_Windows__CStorage__CIStorageItem_GetRuntimeClassName(__FIIterable_1_Windows__CStorage__CIStorageItem* This,HSTRING *className) {
-    return This->lpVtbl->GetRuntimeClassName(This,className);
-}
-static inline HRESULT __FIIterable_1_Windows__CStorage__CIStorageItem_GetTrustLevel(__FIIterable_1_Windows__CStorage__CIStorageItem* This,TrustLevel *trustLevel) {
-    return This->lpVtbl->GetTrustLevel(This,trustLevel);
-}
-/*** IIterable<ABI::Windows::Storage::IStorageItem* > methods ***/
-static inline HRESULT __FIIterable_1_Windows__CStorage__CIStorageItem_First(__FIIterable_1_Windows__CStorage__CIStorageItem* This,__FIIterator_1_Windows__CStorage__CIStorageItem **value) {
-    return This->lpVtbl->First(This,value);
-}
-#endif
-#ifdef WIDL_using_Windows_Foundation_Collections
-#define IID_IIterable_IStorageItem IID___FIIterable_1_Windows__CStorage__CIStorageItem
-#define IIterable_IStorageItemVtbl __FIIterable_1_Windows__CStorage__CIStorageItemVtbl
-#define IIterable_IStorageItem __FIIterable_1_Windows__CStorage__CIStorageItem
-#define IIterable_IStorageItem_QueryInterface __FIIterable_1_Windows__CStorage__CIStorageItem_QueryInterface
-#define IIterable_IStorageItem_AddRef __FIIterable_1_Windows__CStorage__CIStorageItem_AddRef
-#define IIterable_IStorageItem_Release __FIIterable_1_Windows__CStorage__CIStorageItem_Release
-#define IIterable_IStorageItem_GetIids __FIIterable_1_Windows__CStorage__CIStorageItem_GetIids
-#define IIterable_IStorageItem_GetRuntimeClassName __FIIterable_1_Windows__CStorage__CIStorageItem_GetRuntimeClassName
-#define IIterable_IStorageItem_GetTrustLevel __FIIterable_1_Windows__CStorage__CIStorageItem_GetTrustLevel
-#define IIterable_IStorageItem_First __FIIterable_1_Windows__CStorage__CIStorageItem_First
-#endif /* WIDL_using_Windows_Foundation_Collections */
-#endif
-
-#endif
-
-#endif  /* ____FIIterable_1_Windows__CStorage__CIStorageItem_INTERFACE_DEFINED__ */
-
-/*****************************************************************************
  * IIterator<ABI::Windows::Foundation::Collections::IKeyValuePair<HSTRING,ABI::Windows::Storage::ApplicationDataContainer* >* > interface
  */
 #ifndef ____FIIterator_1___FIKeyValuePair_2_HSTRING_Windows__CStorage__CApplicationDataContainer_INTERFACE_DEFINED__
@@ -5515,159 +5391,6 @@
 #endif  /* ____FIIterator_1___FIKeyValuePair_2_HSTRING_Windows__CStorage__CApplicationDataContainer_INTERFACE_DEFINED__ */
 
 /*****************************************************************************
- * IIterator<ABI::Windows::Storage::IStorageItem* > interface
- */
-#ifndef ____FIIterator_1_Windows__CStorage__CIStorageItem_INTERFACE_DEFINED__
-#define ____FIIterator_1_Windows__CStorage__CIStorageItem_INTERFACE_DEFINED__
-
-DEFINE_GUID(IID___FIIterator_1_Windows__CStorage__CIStorageItem, 0x05b487c2, 0x3830, 0x5d3c, 0x98,0xda, 0x25,0xfa,0x11,0x54,0x2d,0xbd);
-#if defined(__cplusplus) && !defined(CINTERFACE)
-} /* extern "C" */
-namespace ABI {
-    namespace Windows {
-        namespace Foundation {
-            namespace Collections {
-                template<>
-                MIDL_INTERFACE("05b487c2-3830-5d3c-98da-25fa11542dbd")
-                IIterator<ABI::Windows::Storage::IStorageItem* > : IIterator_impl<ABI::Windows::Storage::IStorageItem* >
-                {
-                };
-            }
-        }
-    }
-}
-extern "C" {
-#ifdef __CRT_UUID_DECL
-__CRT_UUID_DECL(__FIIterator_1_Windows__CStorage__CIStorageItem, 0x05b487c2, 0x3830, 0x5d3c, 0x98,0xda, 0x25,0xfa,0x11,0x54,0x2d,0xbd)
-#endif
-#else
-typedef struct __FIIterator_1_Windows__CStorage__CIStorageItemVtbl {
-    BEGIN_INTERFACE
-
-    /*** IUnknown methods ***/
-    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        __FIIterator_1_Windows__CStorage__CIStorageItem *This,
-        REFIID riid,
-        void **ppvObject);
-
-    ULONG (STDMETHODCALLTYPE *AddRef)(
-        __FIIterator_1_Windows__CStorage__CIStorageItem *This);
-
-    ULONG (STDMETHODCALLTYPE *Release)(
-        __FIIterator_1_Windows__CStorage__CIStorageItem *This);
-
-    /*** IInspectable methods ***/
-    HRESULT (STDMETHODCALLTYPE *GetIids)(
-        __FIIterator_1_Windows__CStorage__CIStorageItem *This,
-        ULONG *iidCount,
-        IID **iids);
-
-    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
-        __FIIterator_1_Windows__CStorage__CIStorageItem *This,
-        HSTRING *className);
-
-    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
-        __FIIterator_1_Windows__CStorage__CIStorageItem *This,
-        TrustLevel *trustLevel);
-
-    /*** IIterator<ABI::Windows::Storage::IStorageItem* > methods ***/
-    HRESULT (STDMETHODCALLTYPE *get_Current)(
-        __FIIterator_1_Windows__CStorage__CIStorageItem *This,
-        __x_ABI_CWindows_CStorage_CIStorageItem **value);
-
-    HRESULT (STDMETHODCALLTYPE *get_HasCurrent)(
-        __FIIterator_1_Windows__CStorage__CIStorageItem *This,
-        boolean *value);
-
-    HRESULT (STDMETHODCALLTYPE *MoveNext)(
-        __FIIterator_1_Windows__CStorage__CIStorageItem *This,
-        boolean *value);
-
-    HRESULT (STDMETHODCALLTYPE *GetMany)(
-        __FIIterator_1_Windows__CStorage__CIStorageItem *This,
-        UINT32 items_size,
-        __x_ABI_CWindows_CStorage_CIStorageItem **items,
-        UINT32 *value);
-
-    END_INTERFACE
-} __FIIterator_1_Windows__CStorage__CIStorageItemVtbl;
-
-interface __FIIterator_1_Windows__CStorage__CIStorageItem {
-    CONST_VTBL __FIIterator_1_Windows__CStorage__CIStorageItemVtbl* lpVtbl;
-};
-
-#ifdef COBJMACROS
-#ifndef WIDL_C_INLINE_WRAPPERS
-/*** IUnknown methods ***/
-#define __FIIterator_1_Windows__CStorage__CIStorageItem_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define __FIIterator_1_Windows__CStorage__CIStorageItem_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define __FIIterator_1_Windows__CStorage__CIStorageItem_Release(This) (This)->lpVtbl->Release(This)
-/*** IInspectable methods ***/
-#define __FIIterator_1_Windows__CStorage__CIStorageItem_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
-#define __FIIterator_1_Windows__CStorage__CIStorageItem_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
-#define __FIIterator_1_Windows__CStorage__CIStorageItem_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
-/*** IIterator<ABI::Windows::Storage::IStorageItem* > methods ***/
-#define __FIIterator_1_Windows__CStorage__CIStorageItem_get_Current(This,value) (This)->lpVtbl->get_Current(This,value)
-#define __FIIterator_1_Windows__CStorage__CIStorageItem_get_HasCurrent(This,value) (This)->lpVtbl->get_HasCurrent(This,value)
-#define __FIIterator_1_Windows__CStorage__CIStorageItem_MoveNext(This,value) (This)->lpVtbl->MoveNext(This,value)
-#define __FIIterator_1_Windows__CStorage__CIStorageItem_GetMany(This,items_size,items,value) (This)->lpVtbl->GetMany(This,items_size,items,value)
-#else
-/*** IUnknown methods ***/
-static inline HRESULT __FIIterator_1_Windows__CStorage__CIStorageItem_QueryInterface(__FIIterator_1_Windows__CStorage__CIStorageItem* This,REFIID riid,void **ppvObject) {
-    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
-}
-static inline ULONG __FIIterator_1_Windows__CStorage__CIStorageItem_AddRef(__FIIterator_1_Windows__CStorage__CIStorageItem* This) {
-    return This->lpVtbl->AddRef(This);
-}
-static inline ULONG __FIIterator_1_Windows__CStorage__CIStorageItem_Release(__FIIterator_1_Windows__CStorage__CIStorageItem* This) {
-    return This->lpVtbl->Release(This);
-}
-/*** IInspectable methods ***/
-static inline HRESULT __FIIterator_1_Windows__CStorage__CIStorageItem_GetIids(__FIIterator_1_Windows__CStorage__CIStorageItem* This,ULONG *iidCount,IID **iids) {
-    return This->lpVtbl->GetIids(This,iidCount,iids);
-}
-static inline HRESULT __FIIterator_1_Windows__CStorage__CIStorageItem_GetRuntimeClassName(__FIIterator_1_Windows__CStorage__CIStorageItem* This,HSTRING *className) {
-    return This->lpVtbl->GetRuntimeClassName(This,className);
-}
-static inline HRESULT __FIIterator_1_Windows__CStorage__CIStorageItem_GetTrustLevel(__FIIterator_1_Windows__CStorage__CIStorageItem* This,TrustLevel *trustLevel) {
-    return This->lpVtbl->GetTrustLevel(This,trustLevel);
-}
-/*** IIterator<ABI::Windows::Storage::IStorageItem* > methods ***/
-static inline HRESULT __FIIterator_1_Windows__CStorage__CIStorageItem_get_Current(__FIIterator_1_Windows__CStorage__CIStorageItem* This,__x_ABI_CWindows_CStorage_CIStorageItem **value) {
-    return This->lpVtbl->get_Current(This,value);
-}
-static inline HRESULT __FIIterator_1_Windows__CStorage__CIStorageItem_get_HasCurrent(__FIIterator_1_Windows__CStorage__CIStorageItem* This,boolean *value) {
-    return This->lpVtbl->get_HasCurrent(This,value);
-}
-static inline HRESULT __FIIterator_1_Windows__CStorage__CIStorageItem_MoveNext(__FIIterator_1_Windows__CStorage__CIStorageItem* This,boolean *value) {
-    return This->lpVtbl->MoveNext(This,value);
-}
-static inline HRESULT __FIIterator_1_Windows__CStorage__CIStorageItem_GetMany(__FIIterator_1_Windows__CStorage__CIStorageItem* This,UINT32 items_size,__x_ABI_CWindows_CStorage_CIStorageItem **items,UINT32 *value) {
-    return This->lpVtbl->GetMany(This,items_size,items,value);
-}
-#endif
-#ifdef WIDL_using_Windows_Foundation_Collections
-#define IID_IIterator_IStorageItem IID___FIIterator_1_Windows__CStorage__CIStorageItem
-#define IIterator_IStorageItemVtbl __FIIterator_1_Windows__CStorage__CIStorageItemVtbl
-#define IIterator_IStorageItem __FIIterator_1_Windows__CStorage__CIStorageItem
-#define IIterator_IStorageItem_QueryInterface __FIIterator_1_Windows__CStorage__CIStorageItem_QueryInterface
-#define IIterator_IStorageItem_AddRef __FIIterator_1_Windows__CStorage__CIStorageItem_AddRef
-#define IIterator_IStorageItem_Release __FIIterator_1_Windows__CStorage__CIStorageItem_Release
-#define IIterator_IStorageItem_GetIids __FIIterator_1_Windows__CStorage__CIStorageItem_GetIids
-#define IIterator_IStorageItem_GetRuntimeClassName __FIIterator_1_Windows__CStorage__CIStorageItem_GetRuntimeClassName
-#define IIterator_IStorageItem_GetTrustLevel __FIIterator_1_Windows__CStorage__CIStorageItem_GetTrustLevel
-#define IIterator_IStorageItem_get_Current __FIIterator_1_Windows__CStorage__CIStorageItem_get_Current
-#define IIterator_IStorageItem_get_HasCurrent __FIIterator_1_Windows__CStorage__CIStorageItem_get_HasCurrent
-#define IIterator_IStorageItem_MoveNext __FIIterator_1_Windows__CStorage__CIStorageItem_MoveNext
-#define IIterator_IStorageItem_GetMany __FIIterator_1_Windows__CStorage__CIStorageItem_GetMany
-#endif /* WIDL_using_Windows_Foundation_Collections */
-#endif
-
-#endif
-
-#endif  /* ____FIIterator_1_Windows__CStorage__CIStorageItem_INTERFACE_DEFINED__ */
-
-/*****************************************************************************
  * IMapView<HSTRING,ABI::Windows::Storage::ApplicationDataContainer* > interface
  */
 #ifndef ____FIMapView_2_HSTRING_Windows__CStorage__CApplicationDataContainer_INTERFACE_DEFINED__
@@ -5822,6 +5545,607 @@
 #endif  /* ____FIMapView_2_HSTRING_Windows__CStorage__CApplicationDataContainer_INTERFACE_DEFINED__ */
 
 /*****************************************************************************
+ * IAsyncOperationCompletedHandler<ABI::Windows::Storage::ApplicationData* > interface
+ */
+#ifndef ____FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_INTERFACE_DEFINED__
+#define ____FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData, 0xabafe590, 0x65fe, 0x520a, 0x9d,0x7c, 0x6a,0xb5,0xf1,0x88,0x22,0x37);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("abafe590-65fe-520a-9d7c-6ab5f1882237")
+            IAsyncOperationCompletedHandler<ABI::Windows::Storage::ApplicationData* > : IAsyncOperationCompletedHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Storage::ApplicationData*, ABI::Windows::Storage::IApplicationData* > >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData, 0xabafe590, 0x65fe, 0x520a, 0x9d,0x7c, 0x6a,0xb5,0xf1,0x88,0x22,0x37)
+#endif
+#else
+typedef struct __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationDataVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData *This);
+
+    /*** IAsyncOperationCompletedHandler<ABI::Windows::Storage::ApplicationData* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData *This,
+        __FIAsyncOperation_1_Windows__CStorage__CApplicationData *info,
+        AsyncStatus status);
+
+    END_INTERFACE
+} __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationDataVtbl;
+
+interface __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData {
+    CONST_VTBL __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationDataVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_Release(This) (This)->lpVtbl->Release(This)
+/*** IAsyncOperationCompletedHandler<ABI::Windows::Storage::ApplicationData* > methods ***/
+#define __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_Invoke(This,info,status) (This)->lpVtbl->Invoke(This,info,status)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_QueryInterface(__FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_AddRef(__FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_Release(__FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IAsyncOperationCompletedHandler<ABI::Windows::Storage::ApplicationData* > methods ***/
+static inline HRESULT __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_Invoke(__FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData* This,__FIAsyncOperation_1_Windows__CStorage__CApplicationData *info,AsyncStatus status) {
+    return This->lpVtbl->Invoke(This,info,status);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_IAsyncOperationCompletedHandler_ApplicationData IID___FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData
+#define IAsyncOperationCompletedHandler_ApplicationDataVtbl __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationDataVtbl
+#define IAsyncOperationCompletedHandler_ApplicationData __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData
+#define IAsyncOperationCompletedHandler_ApplicationData_QueryInterface __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_QueryInterface
+#define IAsyncOperationCompletedHandler_ApplicationData_AddRef __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_AddRef
+#define IAsyncOperationCompletedHandler_ApplicationData_Release __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_Release
+#define IAsyncOperationCompletedHandler_ApplicationData_Invoke __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAsyncOperation<ABI::Windows::Storage::ApplicationData* > interface
+ */
+#ifndef ____FIAsyncOperation_1_Windows__CStorage__CApplicationData_INTERFACE_DEFINED__
+#define ____FIAsyncOperation_1_Windows__CStorage__CApplicationData_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIAsyncOperation_1_Windows__CStorage__CApplicationData, 0x31456b58, 0xa5cb, 0x5c5b, 0xbd,0x6e, 0xcc,0xce,0x3a,0x7b,0xf4,0xb4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("31456b58-a5cb-5c5b-bd6e-ccce3a7bf4b4")
+            IAsyncOperation<ABI::Windows::Storage::ApplicationData* > : IAsyncOperation_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Storage::ApplicationData*, ABI::Windows::Storage::IApplicationData* > >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIAsyncOperation_1_Windows__CStorage__CApplicationData, 0x31456b58, 0xa5cb, 0x5c5b, 0xbd,0x6e, 0xcc,0xce,0x3a,0x7b,0xf4,0xb4)
+#endif
+#else
+typedef struct __FIAsyncOperation_1_Windows__CStorage__CApplicationDataVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIAsyncOperation_1_Windows__CStorage__CApplicationData *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIAsyncOperation_1_Windows__CStorage__CApplicationData *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIAsyncOperation_1_Windows__CStorage__CApplicationData *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIAsyncOperation_1_Windows__CStorage__CApplicationData *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIAsyncOperation_1_Windows__CStorage__CApplicationData *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIAsyncOperation_1_Windows__CStorage__CApplicationData *This,
+        TrustLevel *trustLevel);
+
+    /*** IAsyncOperation<ABI::Windows::Storage::ApplicationData* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_Completed)(
+        __FIAsyncOperation_1_Windows__CStorage__CApplicationData *This,
+        __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData *handler);
+
+    HRESULT (STDMETHODCALLTYPE *get_Completed)(
+        __FIAsyncOperation_1_Windows__CStorage__CApplicationData *This,
+        __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData **handler);
+
+    HRESULT (STDMETHODCALLTYPE *GetResults)(
+        __FIAsyncOperation_1_Windows__CStorage__CApplicationData *This,
+        __x_ABI_CWindows_CStorage_CIApplicationData **results);
+
+    END_INTERFACE
+} __FIAsyncOperation_1_Windows__CStorage__CApplicationDataVtbl;
+
+interface __FIAsyncOperation_1_Windows__CStorage__CApplicationData {
+    CONST_VTBL __FIAsyncOperation_1_Windows__CStorage__CApplicationDataVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIAsyncOperation_1_Windows__CStorage__CApplicationData_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIAsyncOperation_1_Windows__CStorage__CApplicationData_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIAsyncOperation_1_Windows__CStorage__CApplicationData_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIAsyncOperation_1_Windows__CStorage__CApplicationData_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIAsyncOperation_1_Windows__CStorage__CApplicationData_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIAsyncOperation_1_Windows__CStorage__CApplicationData_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IAsyncOperation<ABI::Windows::Storage::ApplicationData* > methods ***/
+#define __FIAsyncOperation_1_Windows__CStorage__CApplicationData_put_Completed(This,handler) (This)->lpVtbl->put_Completed(This,handler)
+#define __FIAsyncOperation_1_Windows__CStorage__CApplicationData_get_Completed(This,handler) (This)->lpVtbl->get_Completed(This,handler)
+#define __FIAsyncOperation_1_Windows__CStorage__CApplicationData_GetResults(This,results) (This)->lpVtbl->GetResults(This,results)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIAsyncOperation_1_Windows__CStorage__CApplicationData_QueryInterface(__FIAsyncOperation_1_Windows__CStorage__CApplicationData* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIAsyncOperation_1_Windows__CStorage__CApplicationData_AddRef(__FIAsyncOperation_1_Windows__CStorage__CApplicationData* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIAsyncOperation_1_Windows__CStorage__CApplicationData_Release(__FIAsyncOperation_1_Windows__CStorage__CApplicationData* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIAsyncOperation_1_Windows__CStorage__CApplicationData_GetIids(__FIAsyncOperation_1_Windows__CStorage__CApplicationData* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIAsyncOperation_1_Windows__CStorage__CApplicationData_GetRuntimeClassName(__FIAsyncOperation_1_Windows__CStorage__CApplicationData* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIAsyncOperation_1_Windows__CStorage__CApplicationData_GetTrustLevel(__FIAsyncOperation_1_Windows__CStorage__CApplicationData* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IAsyncOperation<ABI::Windows::Storage::ApplicationData* > methods ***/
+static inline HRESULT __FIAsyncOperation_1_Windows__CStorage__CApplicationData_put_Completed(__FIAsyncOperation_1_Windows__CStorage__CApplicationData* This,__FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData *handler) {
+    return This->lpVtbl->put_Completed(This,handler);
+}
+static inline HRESULT __FIAsyncOperation_1_Windows__CStorage__CApplicationData_get_Completed(__FIAsyncOperation_1_Windows__CStorage__CApplicationData* This,__FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData **handler) {
+    return This->lpVtbl->get_Completed(This,handler);
+}
+static inline HRESULT __FIAsyncOperation_1_Windows__CStorage__CApplicationData_GetResults(__FIAsyncOperation_1_Windows__CStorage__CApplicationData* This,__x_ABI_CWindows_CStorage_CIApplicationData **results) {
+    return This->lpVtbl->GetResults(This,results);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_IAsyncOperation_ApplicationData IID___FIAsyncOperation_1_Windows__CStorage__CApplicationData
+#define IAsyncOperation_ApplicationDataVtbl __FIAsyncOperation_1_Windows__CStorage__CApplicationDataVtbl
+#define IAsyncOperation_ApplicationData __FIAsyncOperation_1_Windows__CStorage__CApplicationData
+#define IAsyncOperation_ApplicationData_QueryInterface __FIAsyncOperation_1_Windows__CStorage__CApplicationData_QueryInterface
+#define IAsyncOperation_ApplicationData_AddRef __FIAsyncOperation_1_Windows__CStorage__CApplicationData_AddRef
+#define IAsyncOperation_ApplicationData_Release __FIAsyncOperation_1_Windows__CStorage__CApplicationData_Release
+#define IAsyncOperation_ApplicationData_GetIids __FIAsyncOperation_1_Windows__CStorage__CApplicationData_GetIids
+#define IAsyncOperation_ApplicationData_GetRuntimeClassName __FIAsyncOperation_1_Windows__CStorage__CApplicationData_GetRuntimeClassName
+#define IAsyncOperation_ApplicationData_GetTrustLevel __FIAsyncOperation_1_Windows__CStorage__CApplicationData_GetTrustLevel
+#define IAsyncOperation_ApplicationData_put_Completed __FIAsyncOperation_1_Windows__CStorage__CApplicationData_put_Completed
+#define IAsyncOperation_ApplicationData_get_Completed __FIAsyncOperation_1_Windows__CStorage__CApplicationData_get_Completed
+#define IAsyncOperation_ApplicationData_GetResults __FIAsyncOperation_1_Windows__CStorage__CApplicationData_GetResults
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FIAsyncOperation_1_Windows__CStorage__CApplicationData_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypedEventHandler<ABI::Windows::Storage::ApplicationData*,IInspectable* > interface
+ */
+#ifndef ____FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_INTERFACE_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable, 0xb5348b3b, 0x5081, 0x5ae9, 0x8f,0xa3, 0x4d,0x22,0xd6,0x8f,0xb0,0xea);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("b5348b3b-5081-5ae9-8fa3-4d22d68fb0ea")
+            ITypedEventHandler<ABI::Windows::Storage::ApplicationData*,IInspectable* > : ITypedEventHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Storage::ApplicationData*, ABI::Windows::Storage::IApplicationData* >, IInspectable* >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable, 0xb5348b3b, 0x5081, 0x5ae9, 0x8f,0xa3, 0x4d,0x22,0xd6,0x8f,0xb0,0xea)
+#endif
+#else
+typedef struct __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectableVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable *This);
+
+    /*** ITypedEventHandler<ABI::Windows::Storage::ApplicationData*,IInspectable* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable *This,
+        __x_ABI_CWindows_CStorage_CIApplicationData *sender,
+        IInspectable *args);
+
+    END_INTERFACE
+} __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectableVtbl;
+
+interface __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable {
+    CONST_VTBL __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypedEventHandler<ABI::Windows::Storage::ApplicationData*,IInspectable* > methods ***/
+#define __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_Invoke(This,sender,args) (This)->lpVtbl->Invoke(This,sender,args)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_QueryInterface(__FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_AddRef(__FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_Release(__FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITypedEventHandler<ABI::Windows::Storage::ApplicationData*,IInspectable* > methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_Invoke(__FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable* This,__x_ABI_CWindows_CStorage_CIApplicationData *sender,IInspectable *args) {
+    return This->lpVtbl->Invoke(This,sender,args);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_ITypedEventHandler_ApplicationData_IInspectable IID___FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable
+#define ITypedEventHandler_ApplicationData_IInspectableVtbl __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectableVtbl
+#define ITypedEventHandler_ApplicationData_IInspectable __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable
+#define ITypedEventHandler_ApplicationData_IInspectable_QueryInterface __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_QueryInterface
+#define ITypedEventHandler_ApplicationData_IInspectable_AddRef __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_AddRef
+#define ITypedEventHandler_ApplicationData_IInspectable_Release __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_Release
+#define ITypedEventHandler_ApplicationData_IInspectable_Invoke __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IIterable<ABI::Windows::Storage::IStorageItem* > interface
+ */
+#ifndef ____FIIterable_1_Windows__CStorage__CIStorageItem_INTERFACE_DEFINED__
+#define ____FIIterable_1_Windows__CStorage__CIStorageItem_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIIterable_1_Windows__CStorage__CIStorageItem, 0xbb8b8418, 0x65d1, 0x544b, 0xb0,0x83, 0x6d,0x17,0x2f,0x56,0x8c,0x73);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                template<>
+                MIDL_INTERFACE("bb8b8418-65d1-544b-b083-6d172f568c73")
+                IIterable<ABI::Windows::Storage::IStorageItem* > : IIterable_impl<ABI::Windows::Storage::IStorageItem* >
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIIterable_1_Windows__CStorage__CIStorageItem, 0xbb8b8418, 0x65d1, 0x544b, 0xb0,0x83, 0x6d,0x17,0x2f,0x56,0x8c,0x73)
+#endif
+#else
+typedef struct __FIIterable_1_Windows__CStorage__CIStorageItemVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIIterable_1_Windows__CStorage__CIStorageItem *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIIterable_1_Windows__CStorage__CIStorageItem *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIIterable_1_Windows__CStorage__CIStorageItem *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIIterable_1_Windows__CStorage__CIStorageItem *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIIterable_1_Windows__CStorage__CIStorageItem *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIIterable_1_Windows__CStorage__CIStorageItem *This,
+        TrustLevel *trustLevel);
+
+    /*** IIterable<ABI::Windows::Storage::IStorageItem* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *First)(
+        __FIIterable_1_Windows__CStorage__CIStorageItem *This,
+        __FIIterator_1_Windows__CStorage__CIStorageItem **value);
+
+    END_INTERFACE
+} __FIIterable_1_Windows__CStorage__CIStorageItemVtbl;
+
+interface __FIIterable_1_Windows__CStorage__CIStorageItem {
+    CONST_VTBL __FIIterable_1_Windows__CStorage__CIStorageItemVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIIterable_1_Windows__CStorage__CIStorageItem_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIIterable_1_Windows__CStorage__CIStorageItem_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIIterable_1_Windows__CStorage__CIStorageItem_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIIterable_1_Windows__CStorage__CIStorageItem_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIIterable_1_Windows__CStorage__CIStorageItem_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIIterable_1_Windows__CStorage__CIStorageItem_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IIterable<ABI::Windows::Storage::IStorageItem* > methods ***/
+#define __FIIterable_1_Windows__CStorage__CIStorageItem_First(This,value) (This)->lpVtbl->First(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIIterable_1_Windows__CStorage__CIStorageItem_QueryInterface(__FIIterable_1_Windows__CStorage__CIStorageItem* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIIterable_1_Windows__CStorage__CIStorageItem_AddRef(__FIIterable_1_Windows__CStorage__CIStorageItem* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIIterable_1_Windows__CStorage__CIStorageItem_Release(__FIIterable_1_Windows__CStorage__CIStorageItem* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIIterable_1_Windows__CStorage__CIStorageItem_GetIids(__FIIterable_1_Windows__CStorage__CIStorageItem* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIIterable_1_Windows__CStorage__CIStorageItem_GetRuntimeClassName(__FIIterable_1_Windows__CStorage__CIStorageItem* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIIterable_1_Windows__CStorage__CIStorageItem_GetTrustLevel(__FIIterable_1_Windows__CStorage__CIStorageItem* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IIterable<ABI::Windows::Storage::IStorageItem* > methods ***/
+static inline HRESULT __FIIterable_1_Windows__CStorage__CIStorageItem_First(__FIIterable_1_Windows__CStorage__CIStorageItem* This,__FIIterator_1_Windows__CStorage__CIStorageItem **value) {
+    return This->lpVtbl->First(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation_Collections
+#define IID_IIterable_IStorageItem IID___FIIterable_1_Windows__CStorage__CIStorageItem
+#define IIterable_IStorageItemVtbl __FIIterable_1_Windows__CStorage__CIStorageItemVtbl
+#define IIterable_IStorageItem __FIIterable_1_Windows__CStorage__CIStorageItem
+#define IIterable_IStorageItem_QueryInterface __FIIterable_1_Windows__CStorage__CIStorageItem_QueryInterface
+#define IIterable_IStorageItem_AddRef __FIIterable_1_Windows__CStorage__CIStorageItem_AddRef
+#define IIterable_IStorageItem_Release __FIIterable_1_Windows__CStorage__CIStorageItem_Release
+#define IIterable_IStorageItem_GetIids __FIIterable_1_Windows__CStorage__CIStorageItem_GetIids
+#define IIterable_IStorageItem_GetRuntimeClassName __FIIterable_1_Windows__CStorage__CIStorageItem_GetRuntimeClassName
+#define IIterable_IStorageItem_GetTrustLevel __FIIterable_1_Windows__CStorage__CIStorageItem_GetTrustLevel
+#define IIterable_IStorageItem_First __FIIterable_1_Windows__CStorage__CIStorageItem_First
+#endif /* WIDL_using_Windows_Foundation_Collections */
+#endif
+
+#endif
+
+#endif  /* ____FIIterable_1_Windows__CStorage__CIStorageItem_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IIterator<ABI::Windows::Storage::IStorageItem* > interface
+ */
+#ifndef ____FIIterator_1_Windows__CStorage__CIStorageItem_INTERFACE_DEFINED__
+#define ____FIIterator_1_Windows__CStorage__CIStorageItem_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIIterator_1_Windows__CStorage__CIStorageItem, 0x05b487c2, 0x3830, 0x5d3c, 0x98,0xda, 0x25,0xfa,0x11,0x54,0x2d,0xbd);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                template<>
+                MIDL_INTERFACE("05b487c2-3830-5d3c-98da-25fa11542dbd")
+                IIterator<ABI::Windows::Storage::IStorageItem* > : IIterator_impl<ABI::Windows::Storage::IStorageItem* >
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIIterator_1_Windows__CStorage__CIStorageItem, 0x05b487c2, 0x3830, 0x5d3c, 0x98,0xda, 0x25,0xfa,0x11,0x54,0x2d,0xbd)
+#endif
+#else
+typedef struct __FIIterator_1_Windows__CStorage__CIStorageItemVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIIterator_1_Windows__CStorage__CIStorageItem *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIIterator_1_Windows__CStorage__CIStorageItem *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIIterator_1_Windows__CStorage__CIStorageItem *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIIterator_1_Windows__CStorage__CIStorageItem *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIIterator_1_Windows__CStorage__CIStorageItem *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIIterator_1_Windows__CStorage__CIStorageItem *This,
+        TrustLevel *trustLevel);
+
+    /*** IIterator<ABI::Windows::Storage::IStorageItem* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Current)(
+        __FIIterator_1_Windows__CStorage__CIStorageItem *This,
+        __x_ABI_CWindows_CStorage_CIStorageItem **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_HasCurrent)(
+        __FIIterator_1_Windows__CStorage__CIStorageItem *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *MoveNext)(
+        __FIIterator_1_Windows__CStorage__CIStorageItem *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetMany)(
+        __FIIterator_1_Windows__CStorage__CIStorageItem *This,
+        UINT32 items_size,
+        __x_ABI_CWindows_CStorage_CIStorageItem **items,
+        UINT32 *value);
+
+    END_INTERFACE
+} __FIIterator_1_Windows__CStorage__CIStorageItemVtbl;
+
+interface __FIIterator_1_Windows__CStorage__CIStorageItem {
+    CONST_VTBL __FIIterator_1_Windows__CStorage__CIStorageItemVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIIterator_1_Windows__CStorage__CIStorageItem_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIIterator_1_Windows__CStorage__CIStorageItem_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIIterator_1_Windows__CStorage__CIStorageItem_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIIterator_1_Windows__CStorage__CIStorageItem_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIIterator_1_Windows__CStorage__CIStorageItem_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIIterator_1_Windows__CStorage__CIStorageItem_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IIterator<ABI::Windows::Storage::IStorageItem* > methods ***/
+#define __FIIterator_1_Windows__CStorage__CIStorageItem_get_Current(This,value) (This)->lpVtbl->get_Current(This,value)
+#define __FIIterator_1_Windows__CStorage__CIStorageItem_get_HasCurrent(This,value) (This)->lpVtbl->get_HasCurrent(This,value)
+#define __FIIterator_1_Windows__CStorage__CIStorageItem_MoveNext(This,value) (This)->lpVtbl->MoveNext(This,value)
+#define __FIIterator_1_Windows__CStorage__CIStorageItem_GetMany(This,items_size,items,value) (This)->lpVtbl->GetMany(This,items_size,items,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIIterator_1_Windows__CStorage__CIStorageItem_QueryInterface(__FIIterator_1_Windows__CStorage__CIStorageItem* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIIterator_1_Windows__CStorage__CIStorageItem_AddRef(__FIIterator_1_Windows__CStorage__CIStorageItem* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIIterator_1_Windows__CStorage__CIStorageItem_Release(__FIIterator_1_Windows__CStorage__CIStorageItem* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIIterator_1_Windows__CStorage__CIStorageItem_GetIids(__FIIterator_1_Windows__CStorage__CIStorageItem* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIIterator_1_Windows__CStorage__CIStorageItem_GetRuntimeClassName(__FIIterator_1_Windows__CStorage__CIStorageItem* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIIterator_1_Windows__CStorage__CIStorageItem_GetTrustLevel(__FIIterator_1_Windows__CStorage__CIStorageItem* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IIterator<ABI::Windows::Storage::IStorageItem* > methods ***/
+static inline HRESULT __FIIterator_1_Windows__CStorage__CIStorageItem_get_Current(__FIIterator_1_Windows__CStorage__CIStorageItem* This,__x_ABI_CWindows_CStorage_CIStorageItem **value) {
+    return This->lpVtbl->get_Current(This,value);
+}
+static inline HRESULT __FIIterator_1_Windows__CStorage__CIStorageItem_get_HasCurrent(__FIIterator_1_Windows__CStorage__CIStorageItem* This,boolean *value) {
+    return This->lpVtbl->get_HasCurrent(This,value);
+}
+static inline HRESULT __FIIterator_1_Windows__CStorage__CIStorageItem_MoveNext(__FIIterator_1_Windows__CStorage__CIStorageItem* This,boolean *value) {
+    return This->lpVtbl->MoveNext(This,value);
+}
+static inline HRESULT __FIIterator_1_Windows__CStorage__CIStorageItem_GetMany(__FIIterator_1_Windows__CStorage__CIStorageItem* This,UINT32 items_size,__x_ABI_CWindows_CStorage_CIStorageItem **items,UINT32 *value) {
+    return This->lpVtbl->GetMany(This,items_size,items,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation_Collections
+#define IID_IIterator_IStorageItem IID___FIIterator_1_Windows__CStorage__CIStorageItem
+#define IIterator_IStorageItemVtbl __FIIterator_1_Windows__CStorage__CIStorageItemVtbl
+#define IIterator_IStorageItem __FIIterator_1_Windows__CStorage__CIStorageItem
+#define IIterator_IStorageItem_QueryInterface __FIIterator_1_Windows__CStorage__CIStorageItem_QueryInterface
+#define IIterator_IStorageItem_AddRef __FIIterator_1_Windows__CStorage__CIStorageItem_AddRef
+#define IIterator_IStorageItem_Release __FIIterator_1_Windows__CStorage__CIStorageItem_Release
+#define IIterator_IStorageItem_GetIids __FIIterator_1_Windows__CStorage__CIStorageItem_GetIids
+#define IIterator_IStorageItem_GetRuntimeClassName __FIIterator_1_Windows__CStorage__CIStorageItem_GetRuntimeClassName
+#define IIterator_IStorageItem_GetTrustLevel __FIIterator_1_Windows__CStorage__CIStorageItem_GetTrustLevel
+#define IIterator_IStorageItem_get_Current __FIIterator_1_Windows__CStorage__CIStorageItem_get_Current
+#define IIterator_IStorageItem_get_HasCurrent __FIIterator_1_Windows__CStorage__CIStorageItem_get_HasCurrent
+#define IIterator_IStorageItem_MoveNext __FIIterator_1_Windows__CStorage__CIStorageItem_MoveNext
+#define IIterator_IStorageItem_GetMany __FIIterator_1_Windows__CStorage__CIStorageItem_GetMany
+#endif /* WIDL_using_Windows_Foundation_Collections */
+#endif
+
+#endif
+
+#endif  /* ____FIIterator_1_Windows__CStorage__CIStorageItem_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
  * IVectorView<ABI::Windows::Storage::IStorageItem* > interface
  */
 #ifndef ____FIVectorView_1_Windows__CStorage__CIStorageItem_INTERFACE_DEFINED__
@@ -6569,98 +6893,6 @@
 #endif  /* ____FIAsyncOperationCompletedHandler_1___FIVectorView_1_Windows__CStorage__CStorageFolder_INTERFACE_DEFINED__ */
 
 /*****************************************************************************
- * IAsyncOperationCompletedHandler<ABI::Windows::Storage::ApplicationData* > interface
- */
-#ifndef ____FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_INTERFACE_DEFINED__
-#define ____FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_INTERFACE_DEFINED__
-
-DEFINE_GUID(IID___FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData, 0xabafe590, 0x65fe, 0x520a, 0x9d,0x7c, 0x6a,0xb5,0xf1,0x88,0x22,0x37);
-#if defined(__cplusplus) && !defined(CINTERFACE)
-} /* extern "C" */
-namespace ABI {
-    namespace Windows {
-        namespace Foundation {
-            template<>
-            MIDL_INTERFACE("abafe590-65fe-520a-9d7c-6ab5f1882237")
-            IAsyncOperationCompletedHandler<ABI::Windows::Storage::ApplicationData* > : IAsyncOperationCompletedHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Storage::ApplicationData*, ABI::Windows::Storage::IApplicationData* > >
-            {
-            };
-        }
-    }
-}
-extern "C" {
-#ifdef __CRT_UUID_DECL
-__CRT_UUID_DECL(__FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData, 0xabafe590, 0x65fe, 0x520a, 0x9d,0x7c, 0x6a,0xb5,0xf1,0x88,0x22,0x37)
-#endif
-#else
-typedef struct __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationDataVtbl {
-    BEGIN_INTERFACE
-
-    /*** IUnknown methods ***/
-    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData *This,
-        REFIID riid,
-        void **ppvObject);
-
-    ULONG (STDMETHODCALLTYPE *AddRef)(
-        __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData *This);
-
-    ULONG (STDMETHODCALLTYPE *Release)(
-        __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData *This);
-
-    /*** IAsyncOperationCompletedHandler<ABI::Windows::Storage::ApplicationData* > methods ***/
-    HRESULT (STDMETHODCALLTYPE *Invoke)(
-        __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData *This,
-        __FIAsyncOperation_1_Windows__CStorage__CApplicationData *info,
-        AsyncStatus status);
-
-    END_INTERFACE
-} __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationDataVtbl;
-
-interface __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData {
-    CONST_VTBL __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationDataVtbl* lpVtbl;
-};
-
-#ifdef COBJMACROS
-#ifndef WIDL_C_INLINE_WRAPPERS
-/*** IUnknown methods ***/
-#define __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_Release(This) (This)->lpVtbl->Release(This)
-/*** IAsyncOperationCompletedHandler<ABI::Windows::Storage::ApplicationData* > methods ***/
-#define __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_Invoke(This,info,status) (This)->lpVtbl->Invoke(This,info,status)
-#else
-/*** IUnknown methods ***/
-static inline HRESULT __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_QueryInterface(__FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData* This,REFIID riid,void **ppvObject) {
-    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
-}
-static inline ULONG __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_AddRef(__FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData* This) {
-    return This->lpVtbl->AddRef(This);
-}
-static inline ULONG __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_Release(__FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData* This) {
-    return This->lpVtbl->Release(This);
-}
-/*** IAsyncOperationCompletedHandler<ABI::Windows::Storage::ApplicationData* > methods ***/
-static inline HRESULT __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_Invoke(__FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData* This,__FIAsyncOperation_1_Windows__CStorage__CApplicationData *info,AsyncStatus status) {
-    return This->lpVtbl->Invoke(This,info,status);
-}
-#endif
-#ifdef WIDL_using_Windows_Foundation
-#define IID_IAsyncOperationCompletedHandler_ApplicationData IID___FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData
-#define IAsyncOperationCompletedHandler_ApplicationDataVtbl __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationDataVtbl
-#define IAsyncOperationCompletedHandler_ApplicationData __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData
-#define IAsyncOperationCompletedHandler_ApplicationData_QueryInterface __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_QueryInterface
-#define IAsyncOperationCompletedHandler_ApplicationData_AddRef __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_AddRef
-#define IAsyncOperationCompletedHandler_ApplicationData_Release __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_Release
-#define IAsyncOperationCompletedHandler_ApplicationData_Invoke __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_Invoke
-#endif /* WIDL_using_Windows_Foundation */
-#endif
-
-#endif
-
-#endif  /* ____FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData_INTERFACE_DEFINED__ */
-
-/*****************************************************************************
  * IAsyncOperationCompletedHandler<ABI::Windows::Storage::KnownFoldersAccessStatus > interface
  */
 #ifndef ____FIAsyncOperationCompletedHandler_1_KnownFoldersAccessStatus_INTERFACE_DEFINED__
@@ -7541,146 +7773,6 @@
 #endif  /* ____FIAsyncOperation_1___FIVectorView_1_Windows__CStorage__CStorageFolder_INTERFACE_DEFINED__ */
 
 /*****************************************************************************
- * IAsyncOperation<ABI::Windows::Storage::ApplicationData* > interface
- */
-#ifndef ____FIAsyncOperation_1_Windows__CStorage__CApplicationData_INTERFACE_DEFINED__
-#define ____FIAsyncOperation_1_Windows__CStorage__CApplicationData_INTERFACE_DEFINED__
-
-DEFINE_GUID(IID___FIAsyncOperation_1_Windows__CStorage__CApplicationData, 0x31456b58, 0xa5cb, 0x5c5b, 0xbd,0x6e, 0xcc,0xce,0x3a,0x7b,0xf4,0xb4);
-#if defined(__cplusplus) && !defined(CINTERFACE)
-} /* extern "C" */
-namespace ABI {
-    namespace Windows {
-        namespace Foundation {
-            template<>
-            MIDL_INTERFACE("31456b58-a5cb-5c5b-bd6e-ccce3a7bf4b4")
-            IAsyncOperation<ABI::Windows::Storage::ApplicationData* > : IAsyncOperation_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Storage::ApplicationData*, ABI::Windows::Storage::IApplicationData* > >
-            {
-            };
-        }
-    }
-}
-extern "C" {
-#ifdef __CRT_UUID_DECL
-__CRT_UUID_DECL(__FIAsyncOperation_1_Windows__CStorage__CApplicationData, 0x31456b58, 0xa5cb, 0x5c5b, 0xbd,0x6e, 0xcc,0xce,0x3a,0x7b,0xf4,0xb4)
-#endif
-#else
-typedef struct __FIAsyncOperation_1_Windows__CStorage__CApplicationDataVtbl {
-    BEGIN_INTERFACE
-
-    /*** IUnknown methods ***/
-    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        __FIAsyncOperation_1_Windows__CStorage__CApplicationData *This,
-        REFIID riid,
-        void **ppvObject);
-
-    ULONG (STDMETHODCALLTYPE *AddRef)(
-        __FIAsyncOperation_1_Windows__CStorage__CApplicationData *This);
-
-    ULONG (STDMETHODCALLTYPE *Release)(
-        __FIAsyncOperation_1_Windows__CStorage__CApplicationData *This);
-
-    /*** IInspectable methods ***/
-    HRESULT (STDMETHODCALLTYPE *GetIids)(
-        __FIAsyncOperation_1_Windows__CStorage__CApplicationData *This,
-        ULONG *iidCount,
-        IID **iids);
-
-    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
-        __FIAsyncOperation_1_Windows__CStorage__CApplicationData *This,
-        HSTRING *className);
-
-    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
-        __FIAsyncOperation_1_Windows__CStorage__CApplicationData *This,
-        TrustLevel *trustLevel);
-
-    /*** IAsyncOperation<ABI::Windows::Storage::ApplicationData* > methods ***/
-    HRESULT (STDMETHODCALLTYPE *put_Completed)(
-        __FIAsyncOperation_1_Windows__CStorage__CApplicationData *This,
-        __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData *handler);
-
-    HRESULT (STDMETHODCALLTYPE *get_Completed)(
-        __FIAsyncOperation_1_Windows__CStorage__CApplicationData *This,
-        __FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData **handler);
-
-    HRESULT (STDMETHODCALLTYPE *GetResults)(
-        __FIAsyncOperation_1_Windows__CStorage__CApplicationData *This,
-        __x_ABI_CWindows_CStorage_CIApplicationData **results);
-
-    END_INTERFACE
-} __FIAsyncOperation_1_Windows__CStorage__CApplicationDataVtbl;
-
-interface __FIAsyncOperation_1_Windows__CStorage__CApplicationData {
-    CONST_VTBL __FIAsyncOperation_1_Windows__CStorage__CApplicationDataVtbl* lpVtbl;
-};
-
-#ifdef COBJMACROS
-#ifndef WIDL_C_INLINE_WRAPPERS
-/*** IUnknown methods ***/
-#define __FIAsyncOperation_1_Windows__CStorage__CApplicationData_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define __FIAsyncOperation_1_Windows__CStorage__CApplicationData_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define __FIAsyncOperation_1_Windows__CStorage__CApplicationData_Release(This) (This)->lpVtbl->Release(This)
-/*** IInspectable methods ***/
-#define __FIAsyncOperation_1_Windows__CStorage__CApplicationData_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
-#define __FIAsyncOperation_1_Windows__CStorage__CApplicationData_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
-#define __FIAsyncOperation_1_Windows__CStorage__CApplicationData_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
-/*** IAsyncOperation<ABI::Windows::Storage::ApplicationData* > methods ***/
-#define __FIAsyncOperation_1_Windows__CStorage__CApplicationData_put_Completed(This,handler) (This)->lpVtbl->put_Completed(This,handler)
-#define __FIAsyncOperation_1_Windows__CStorage__CApplicationData_get_Completed(This,handler) (This)->lpVtbl->get_Completed(This,handler)
-#define __FIAsyncOperation_1_Windows__CStorage__CApplicationData_GetResults(This,results) (This)->lpVtbl->GetResults(This,results)
-#else
-/*** IUnknown methods ***/
-static inline HRESULT __FIAsyncOperation_1_Windows__CStorage__CApplicationData_QueryInterface(__FIAsyncOperation_1_Windows__CStorage__CApplicationData* This,REFIID riid,void **ppvObject) {
-    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
-}
-static inline ULONG __FIAsyncOperation_1_Windows__CStorage__CApplicationData_AddRef(__FIAsyncOperation_1_Windows__CStorage__CApplicationData* This) {
-    return This->lpVtbl->AddRef(This);
-}
-static inline ULONG __FIAsyncOperation_1_Windows__CStorage__CApplicationData_Release(__FIAsyncOperation_1_Windows__CStorage__CApplicationData* This) {
-    return This->lpVtbl->Release(This);
-}
-/*** IInspectable methods ***/
-static inline HRESULT __FIAsyncOperation_1_Windows__CStorage__CApplicationData_GetIids(__FIAsyncOperation_1_Windows__CStorage__CApplicationData* This,ULONG *iidCount,IID **iids) {
-    return This->lpVtbl->GetIids(This,iidCount,iids);
-}
-static inline HRESULT __FIAsyncOperation_1_Windows__CStorage__CApplicationData_GetRuntimeClassName(__FIAsyncOperation_1_Windows__CStorage__CApplicationData* This,HSTRING *className) {
-    return This->lpVtbl->GetRuntimeClassName(This,className);
-}
-static inline HRESULT __FIAsyncOperation_1_Windows__CStorage__CApplicationData_GetTrustLevel(__FIAsyncOperation_1_Windows__CStorage__CApplicationData* This,TrustLevel *trustLevel) {
-    return This->lpVtbl->GetTrustLevel(This,trustLevel);
-}
-/*** IAsyncOperation<ABI::Windows::Storage::ApplicationData* > methods ***/
-static inline HRESULT __FIAsyncOperation_1_Windows__CStorage__CApplicationData_put_Completed(__FIAsyncOperation_1_Windows__CStorage__CApplicationData* This,__FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData *handler) {
-    return This->lpVtbl->put_Completed(This,handler);
-}
-static inline HRESULT __FIAsyncOperation_1_Windows__CStorage__CApplicationData_get_Completed(__FIAsyncOperation_1_Windows__CStorage__CApplicationData* This,__FIAsyncOperationCompletedHandler_1_Windows__CStorage__CApplicationData **handler) {
-    return This->lpVtbl->get_Completed(This,handler);
-}
-static inline HRESULT __FIAsyncOperation_1_Windows__CStorage__CApplicationData_GetResults(__FIAsyncOperation_1_Windows__CStorage__CApplicationData* This,__x_ABI_CWindows_CStorage_CIApplicationData **results) {
-    return This->lpVtbl->GetResults(This,results);
-}
-#endif
-#ifdef WIDL_using_Windows_Foundation
-#define IID_IAsyncOperation_ApplicationData IID___FIAsyncOperation_1_Windows__CStorage__CApplicationData
-#define IAsyncOperation_ApplicationDataVtbl __FIAsyncOperation_1_Windows__CStorage__CApplicationDataVtbl
-#define IAsyncOperation_ApplicationData __FIAsyncOperation_1_Windows__CStorage__CApplicationData
-#define IAsyncOperation_ApplicationData_QueryInterface __FIAsyncOperation_1_Windows__CStorage__CApplicationData_QueryInterface
-#define IAsyncOperation_ApplicationData_AddRef __FIAsyncOperation_1_Windows__CStorage__CApplicationData_AddRef
-#define IAsyncOperation_ApplicationData_Release __FIAsyncOperation_1_Windows__CStorage__CApplicationData_Release
-#define IAsyncOperation_ApplicationData_GetIids __FIAsyncOperation_1_Windows__CStorage__CApplicationData_GetIids
-#define IAsyncOperation_ApplicationData_GetRuntimeClassName __FIAsyncOperation_1_Windows__CStorage__CApplicationData_GetRuntimeClassName
-#define IAsyncOperation_ApplicationData_GetTrustLevel __FIAsyncOperation_1_Windows__CStorage__CApplicationData_GetTrustLevel
-#define IAsyncOperation_ApplicationData_put_Completed __FIAsyncOperation_1_Windows__CStorage__CApplicationData_put_Completed
-#define IAsyncOperation_ApplicationData_get_Completed __FIAsyncOperation_1_Windows__CStorage__CApplicationData_get_Completed
-#define IAsyncOperation_ApplicationData_GetResults __FIAsyncOperation_1_Windows__CStorage__CApplicationData_GetResults
-#endif /* WIDL_using_Windows_Foundation */
-#endif
-
-#endif
-
-#endif  /* ____FIAsyncOperation_1_Windows__CStorage__CApplicationData_INTERFACE_DEFINED__ */
-
-/*****************************************************************************
  * IAsyncOperation<ABI::Windows::Storage::KnownFoldersAccessStatus > interface
  */
 #ifndef ____FIAsyncOperation_1_KnownFoldersAccessStatus_INTERFACE_DEFINED__
@@ -8380,98 +8472,6 @@
 
 #endif  /* ____FIAsyncOperation_1_Windows__CStorage__CStorageStreamTransaction_INTERFACE_DEFINED__ */
 
-/*****************************************************************************
- * ITypedEventHandler<ABI::Windows::Storage::ApplicationData*,IInspectable* > interface
- */
-#ifndef ____FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_INTERFACE_DEFINED__
-#define ____FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_INTERFACE_DEFINED__
-
-DEFINE_GUID(IID___FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable, 0xb5348b3b, 0x5081, 0x5ae9, 0x8f,0xa3, 0x4d,0x22,0xd6,0x8f,0xb0,0xea);
-#if defined(__cplusplus) && !defined(CINTERFACE)
-} /* extern "C" */
-namespace ABI {
-    namespace Windows {
-        namespace Foundation {
-            template<>
-            MIDL_INTERFACE("b5348b3b-5081-5ae9-8fa3-4d22d68fb0ea")
-            ITypedEventHandler<ABI::Windows::Storage::ApplicationData*,IInspectable* > : ITypedEventHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Storage::ApplicationData*, ABI::Windows::Storage::IApplicationData* >, IInspectable* >
-            {
-            };
-        }
-    }
-}
-extern "C" {
-#ifdef __CRT_UUID_DECL
-__CRT_UUID_DECL(__FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable, 0xb5348b3b, 0x5081, 0x5ae9, 0x8f,0xa3, 0x4d,0x22,0xd6,0x8f,0xb0,0xea)
-#endif
-#else
-typedef struct __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectableVtbl {
-    BEGIN_INTERFACE
-
-    /*** IUnknown methods ***/
-    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable *This,
-        REFIID riid,
-        void **ppvObject);
-
-    ULONG (STDMETHODCALLTYPE *AddRef)(
-        __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable *This);
-
-    ULONG (STDMETHODCALLTYPE *Release)(
-        __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable *This);
-
-    /*** ITypedEventHandler<ABI::Windows::Storage::ApplicationData*,IInspectable* > methods ***/
-    HRESULT (STDMETHODCALLTYPE *Invoke)(
-        __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable *This,
-        __x_ABI_CWindows_CStorage_CIApplicationData *sender,
-        IInspectable *args);
-
-    END_INTERFACE
-} __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectableVtbl;
-
-interface __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable {
-    CONST_VTBL __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectableVtbl* lpVtbl;
-};
-
-#ifdef COBJMACROS
-#ifndef WIDL_C_INLINE_WRAPPERS
-/*** IUnknown methods ***/
-#define __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_Release(This) (This)->lpVtbl->Release(This)
-/*** ITypedEventHandler<ABI::Windows::Storage::ApplicationData*,IInspectable* > methods ***/
-#define __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_Invoke(This,sender,args) (This)->lpVtbl->Invoke(This,sender,args)
-#else
-/*** IUnknown methods ***/
-static inline HRESULT __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_QueryInterface(__FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable* This,REFIID riid,void **ppvObject) {
-    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
-}
-static inline ULONG __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_AddRef(__FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable* This) {
-    return This->lpVtbl->AddRef(This);
-}
-static inline ULONG __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_Release(__FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable* This) {
-    return This->lpVtbl->Release(This);
-}
-/*** ITypedEventHandler<ABI::Windows::Storage::ApplicationData*,IInspectable* > methods ***/
-static inline HRESULT __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_Invoke(__FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable* This,__x_ABI_CWindows_CStorage_CIApplicationData *sender,IInspectable *args) {
-    return This->lpVtbl->Invoke(This,sender,args);
-}
-#endif
-#ifdef WIDL_using_Windows_Foundation
-#define IID_ITypedEventHandler_ApplicationData_IInspectable IID___FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable
-#define ITypedEventHandler_ApplicationData_IInspectableVtbl __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectableVtbl
-#define ITypedEventHandler_ApplicationData_IInspectable __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable
-#define ITypedEventHandler_ApplicationData_IInspectable_QueryInterface __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_QueryInterface
-#define ITypedEventHandler_ApplicationData_IInspectable_AddRef __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_AddRef
-#define ITypedEventHandler_ApplicationData_IInspectable_Release __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_Release
-#define ITypedEventHandler_ApplicationData_IInspectable_Invoke __FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_Invoke
-#endif /* WIDL_using_Windows_Foundation */
-#endif
-
-#endif
-
-#endif  /* ____FITypedEventHandler_2_Windows__CStorage__CApplicationData_IInspectable_INTERFACE_DEFINED__ */
-
 /* Begin additional prototypes for all interfaces */
 
 ULONG           __RPC_USER HSTRING_UserSize     (ULONG *, ULONG, HSTRING *);
diff --git a/mingw-w64-headers/include/windows.storage.search.h b/mingw-w64-headers/include/windows.storage.search.h
index e46ce94..3a8e61f 100644
--- a/mingw-w64-headers/include/windows.storage.search.h
+++ b/mingw-w64-headers/include/windows.storage.search.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.storage.search.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.storage.search.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.storage.streams.h b/mingw-w64-headers/include/windows.storage.streams.h
index 982804d..eaae2e4 100644
--- a/mingw-w64-headers/include/windows.storage.streams.h
+++ b/mingw-w64-headers/include/windows.storage.streams.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.storage.streams.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.storage.streams.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
@@ -120,6 +120,23 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef ____x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics ABI::Windows::Storage::Streams::IRandomAccessStreamStatics
+namespace ABI {
+    namespace Windows {
+        namespace Storage {
+            namespace Streams {
+                interface IRandomAccessStreamStatics;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
 #ifndef ____x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStream_FWD_DEFINED__
 #define ____x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStream_FWD_DEFINED__
 typedef interface __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStream __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStream;
@@ -410,6 +427,22 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef ____FIAsyncOperationProgressHandler_2_UINT64_UINT64_FWD_DEFINED__
+#define ____FIAsyncOperationProgressHandler_2_UINT64_UINT64_FWD_DEFINED__
+typedef interface __FIAsyncOperationProgressHandler_2_UINT64_UINT64 __FIAsyncOperationProgressHandler_2_UINT64_UINT64;
+#ifdef __cplusplus
+#define __FIAsyncOperationProgressHandler_2_UINT64_UINT64 ABI::Windows::Foundation::IAsyncOperationProgressHandler<UINT64,UINT64 >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64_FWD_DEFINED__
+#define ____FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64_FWD_DEFINED__
+typedef interface __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64 __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64;
+#ifdef __cplusplus
+#define __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64 ABI::Windows::Foundation::IAsyncOperationWithProgressCompletedHandler<UINT64,UINT64 >
+#endif /* __cplusplus */
+#endif
+
 #ifndef ____FIAsyncOperation_1___FIMapView_2_HSTRING_Windows__CStorage__CStreams__CRandomAccessStreamReference_FWD_DEFINED__
 #define ____FIAsyncOperation_1___FIMapView_2_HSTRING_Windows__CStorage__CStreams__CRandomAccessStreamReference_FWD_DEFINED__
 typedef interface __FIAsyncOperation_1___FIMapView_2_HSTRING_Windows__CStorage__CStreams__CRandomAccessStreamReference __FIAsyncOperation_1___FIMapView_2_HSTRING_Windows__CStorage__CStreams__CRandomAccessStreamReference;
@@ -450,6 +483,14 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef ____FIAsyncOperationWithProgress_2_UINT64_UINT64_FWD_DEFINED__
+#define ____FIAsyncOperationWithProgress_2_UINT64_UINT64_FWD_DEFINED__
+typedef interface __FIAsyncOperationWithProgress_2_UINT64_UINT64 __FIAsyncOperationWithProgress_2_UINT64_UINT64;
+#ifdef __cplusplus
+#define __FIAsyncOperationWithProgress_2_UINT64_UINT64 ABI::Windows::Foundation::IAsyncOperationWithProgress<UINT64,UINT64 >
+#endif /* __cplusplus */
+#endif
+
 /* Headers for imported files */
 
 #include <inspectable.h>
@@ -891,6 +932,14 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef ____FIAsyncOperationWithProgress_2_UINT64_UINT64_FWD_DEFINED__
+#define ____FIAsyncOperationWithProgress_2_UINT64_UINT64_FWD_DEFINED__
+typedef interface __FIAsyncOperationWithProgress_2_UINT64_UINT64 __FIAsyncOperationWithProgress_2_UINT64_UINT64;
+#ifdef __cplusplus
+#define __FIAsyncOperationWithProgress_2_UINT64_UINT64 ABI::Windows::Foundation::IAsyncOperationWithProgress<UINT64,UINT64 >
+#endif /* __cplusplus */
+#endif
+
 /*****************************************************************************
  * IBuffer interface
  */
@@ -2040,6 +2089,172 @@
 #endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
 
 /*****************************************************************************
+ * IRandomAccessStreamStatics interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics, 0x524cedcf, 0x6e29, 0x4ce5, 0x95,0x73, 0x6b,0x75,0x3d,0xb6,0x6c,0x3a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Storage {
+            namespace Streams {
+                MIDL_INTERFACE("524cedcf-6e29-4ce5-9573-6b753db66c3a")
+                IRandomAccessStreamStatics : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE CopyAsync(
+                        ABI::Windows::Storage::Streams::IInputStream *source,
+                        ABI::Windows::Storage::Streams::IOutputStream *dest,
+                        ABI::Windows::Foundation::IAsyncOperationWithProgress<UINT64,UINT64 > **operation) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE CopySizeAsync(
+                        ABI::Windows::Storage::Streams::IInputStream *source,
+                        ABI::Windows::Storage::Streams::IOutputStream *dest,
+                        UINT64 bytesToCopy,
+                        ABI::Windows::Foundation::IAsyncOperationWithProgress<UINT64,UINT64 > **operation) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE CopyAndCloseAsync(
+                        ABI::Windows::Storage::Streams::IInputStream *source,
+                        ABI::Windows::Storage::Streams::IOutputStream *dest,
+                        ABI::Windows::Foundation::IAsyncOperationWithProgress<UINT64,UINT64 > **operation) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics, 0x524cedcf, 0x6e29, 0x4ce5, 0x95,0x73, 0x6b,0x75,0x3d,0xb6,0x6c,0x3a)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStaticsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics *This,
+        TrustLevel *trustLevel);
+
+    /*** IRandomAccessStreamStatics methods ***/
+    HRESULT (STDMETHODCALLTYPE *CopyAsync)(
+        __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics *This,
+        __x_ABI_CWindows_CStorage_CStreams_CIInputStream *source,
+        __x_ABI_CWindows_CStorage_CStreams_CIOutputStream *dest,
+        __FIAsyncOperationWithProgress_2_UINT64_UINT64 **operation);
+
+    HRESULT (STDMETHODCALLTYPE *CopySizeAsync)(
+        __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics *This,
+        __x_ABI_CWindows_CStorage_CStreams_CIInputStream *source,
+        __x_ABI_CWindows_CStorage_CStreams_CIOutputStream *dest,
+        UINT64 bytesToCopy,
+        __FIAsyncOperationWithProgress_2_UINT64_UINT64 **operation);
+
+    HRESULT (STDMETHODCALLTYPE *CopyAndCloseAsync)(
+        __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics *This,
+        __x_ABI_CWindows_CStorage_CStreams_CIInputStream *source,
+        __x_ABI_CWindows_CStorage_CStreams_CIOutputStream *dest,
+        __FIAsyncOperationWithProgress_2_UINT64_UINT64 **operation);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStaticsVtbl;
+
+interface __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics {
+    CONST_VTBL __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStaticsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IRandomAccessStreamStatics methods ***/
+#define __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_CopyAsync(This,source,dest,operation) (This)->lpVtbl->CopyAsync(This,source,dest,operation)
+#define __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_CopySizeAsync(This,source,dest,bytesToCopy,operation) (This)->lpVtbl->CopySizeAsync(This,source,dest,bytesToCopy,operation)
+#define __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_CopyAndCloseAsync(This,source,dest,operation) (This)->lpVtbl->CopyAndCloseAsync(This,source,dest,operation)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_QueryInterface(__x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_AddRef(__x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_Release(__x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_GetIids(__x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_GetRuntimeClassName(__x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_GetTrustLevel(__x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IRandomAccessStreamStatics methods ***/
+static inline HRESULT __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_CopyAsync(__x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics* This,__x_ABI_CWindows_CStorage_CStreams_CIInputStream *source,__x_ABI_CWindows_CStorage_CStreams_CIOutputStream *dest,__FIAsyncOperationWithProgress_2_UINT64_UINT64 **operation) {
+    return This->lpVtbl->CopyAsync(This,source,dest,operation);
+}
+static inline HRESULT __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_CopySizeAsync(__x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics* This,__x_ABI_CWindows_CStorage_CStreams_CIInputStream *source,__x_ABI_CWindows_CStorage_CStreams_CIOutputStream *dest,UINT64 bytesToCopy,__FIAsyncOperationWithProgress_2_UINT64_UINT64 **operation) {
+    return This->lpVtbl->CopySizeAsync(This,source,dest,bytesToCopy,operation);
+}
+static inline HRESULT __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_CopyAndCloseAsync(__x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics* This,__x_ABI_CWindows_CStorage_CStreams_CIInputStream *source,__x_ABI_CWindows_CStorage_CStreams_CIOutputStream *dest,__FIAsyncOperationWithProgress_2_UINT64_UINT64 **operation) {
+    return This->lpVtbl->CopyAndCloseAsync(This,source,dest,operation);
+}
+#endif
+#ifdef WIDL_using_Windows_Storage_Streams
+#define IID_IRandomAccessStreamStatics IID___x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics
+#define IRandomAccessStreamStaticsVtbl __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStaticsVtbl
+#define IRandomAccessStreamStatics __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics
+#define IRandomAccessStreamStatics_QueryInterface __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_QueryInterface
+#define IRandomAccessStreamStatics_AddRef __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_AddRef
+#define IRandomAccessStreamStatics_Release __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_Release
+#define IRandomAccessStreamStatics_GetIids __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_GetIids
+#define IRandomAccessStreamStatics_GetRuntimeClassName __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_GetRuntimeClassName
+#define IRandomAccessStreamStatics_GetTrustLevel __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_GetTrustLevel
+#define IRandomAccessStreamStatics_CopyAsync __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_CopyAsync
+#define IRandomAccessStreamStatics_CopySizeAsync __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_CopySizeAsync
+#define IRandomAccessStreamStatics_CopyAndCloseAsync __x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_CopyAndCloseAsync
+#endif /* WIDL_using_Windows_Storage_Streams */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CStorage_CStreams_CIRandomAccessStreamStatics_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
  * IRandomAccessStream interface
  */
 #if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
@@ -4684,6 +4899,190 @@
 #endif  /* ____FIAsyncOperationCompletedHandler_1_Windows__CStorage__CStreams__CRandomAccessStreamReference_INTERFACE_DEFINED__ */
 
 /*****************************************************************************
+ * IAsyncOperationProgressHandler<UINT64,UINT64 > interface
+ */
+#ifndef ____FIAsyncOperationProgressHandler_2_UINT64_UINT64_INTERFACE_DEFINED__
+#define ____FIAsyncOperationProgressHandler_2_UINT64_UINT64_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIAsyncOperationProgressHandler_2_UINT64_UINT64, 0xffb2b65d, 0x4120, 0x5d13, 0x82,0x6d, 0x10,0x78,0x51,0xe6,0xbb,0x1c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("ffb2b65d-4120-5d13-826d-107851e6bb1c")
+            IAsyncOperationProgressHandler<UINT64,UINT64 > : IAsyncOperationProgressHandler_impl<UINT64, UINT64 >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIAsyncOperationProgressHandler_2_UINT64_UINT64, 0xffb2b65d, 0x4120, 0x5d13, 0x82,0x6d, 0x10,0x78,0x51,0xe6,0xbb,0x1c)
+#endif
+#else
+typedef struct __FIAsyncOperationProgressHandler_2_UINT64_UINT64Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIAsyncOperationProgressHandler_2_UINT64_UINT64 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIAsyncOperationProgressHandler_2_UINT64_UINT64 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIAsyncOperationProgressHandler_2_UINT64_UINT64 *This);
+
+    /*** IAsyncOperationProgressHandler<UINT64,UINT64 > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FIAsyncOperationProgressHandler_2_UINT64_UINT64 *This,
+        __FIAsyncOperationWithProgress_2_UINT64_UINT64 *info,
+        UINT64 progress);
+
+    END_INTERFACE
+} __FIAsyncOperationProgressHandler_2_UINT64_UINT64Vtbl;
+
+interface __FIAsyncOperationProgressHandler_2_UINT64_UINT64 {
+    CONST_VTBL __FIAsyncOperationProgressHandler_2_UINT64_UINT64Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIAsyncOperationProgressHandler_2_UINT64_UINT64_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIAsyncOperationProgressHandler_2_UINT64_UINT64_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIAsyncOperationProgressHandler_2_UINT64_UINT64_Release(This) (This)->lpVtbl->Release(This)
+/*** IAsyncOperationProgressHandler<UINT64,UINT64 > methods ***/
+#define __FIAsyncOperationProgressHandler_2_UINT64_UINT64_Invoke(This,info,progress) (This)->lpVtbl->Invoke(This,info,progress)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIAsyncOperationProgressHandler_2_UINT64_UINT64_QueryInterface(__FIAsyncOperationProgressHandler_2_UINT64_UINT64* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIAsyncOperationProgressHandler_2_UINT64_UINT64_AddRef(__FIAsyncOperationProgressHandler_2_UINT64_UINT64* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIAsyncOperationProgressHandler_2_UINT64_UINT64_Release(__FIAsyncOperationProgressHandler_2_UINT64_UINT64* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IAsyncOperationProgressHandler<UINT64,UINT64 > methods ***/
+static inline HRESULT __FIAsyncOperationProgressHandler_2_UINT64_UINT64_Invoke(__FIAsyncOperationProgressHandler_2_UINT64_UINT64* This,__FIAsyncOperationWithProgress_2_UINT64_UINT64 *info,UINT64 progress) {
+    return This->lpVtbl->Invoke(This,info,progress);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_IAsyncOperationProgressHandler_UINT64_UINT64 IID___FIAsyncOperationProgressHandler_2_UINT64_UINT64
+#define IAsyncOperationProgressHandler_UINT64_UINT64Vtbl __FIAsyncOperationProgressHandler_2_UINT64_UINT64Vtbl
+#define IAsyncOperationProgressHandler_UINT64_UINT64 __FIAsyncOperationProgressHandler_2_UINT64_UINT64
+#define IAsyncOperationProgressHandler_UINT64_UINT64_QueryInterface __FIAsyncOperationProgressHandler_2_UINT64_UINT64_QueryInterface
+#define IAsyncOperationProgressHandler_UINT64_UINT64_AddRef __FIAsyncOperationProgressHandler_2_UINT64_UINT64_AddRef
+#define IAsyncOperationProgressHandler_UINT64_UINT64_Release __FIAsyncOperationProgressHandler_2_UINT64_UINT64_Release
+#define IAsyncOperationProgressHandler_UINT64_UINT64_Invoke __FIAsyncOperationProgressHandler_2_UINT64_UINT64_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FIAsyncOperationProgressHandler_2_UINT64_UINT64_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAsyncOperationWithProgressCompletedHandler<UINT64,UINT64 > interface
+ */
+#ifndef ____FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64_INTERFACE_DEFINED__
+#define ____FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64, 0xd2024e41, 0x5500, 0x5b5a, 0xba,0x46, 0xcb,0x70,0x09,0x59,0x6a,0x2f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("d2024e41-5500-5b5a-ba46-cb7009596a2f")
+            IAsyncOperationWithProgressCompletedHandler<UINT64,UINT64 > : IAsyncOperationWithProgressCompletedHandler_impl<UINT64, UINT64 >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64, 0xd2024e41, 0x5500, 0x5b5a, 0xba,0x46, 0xcb,0x70,0x09,0x59,0x6a,0x2f)
+#endif
+#else
+typedef struct __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64 *This);
+
+    /*** IAsyncOperationWithProgressCompletedHandler<UINT64,UINT64 > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64 *This,
+        __FIAsyncOperationWithProgress_2_UINT64_UINT64 *info,
+        AsyncStatus status);
+
+    END_INTERFACE
+} __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64Vtbl;
+
+interface __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64 {
+    CONST_VTBL __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64_Release(This) (This)->lpVtbl->Release(This)
+/*** IAsyncOperationWithProgressCompletedHandler<UINT64,UINT64 > methods ***/
+#define __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64_Invoke(This,info,status) (This)->lpVtbl->Invoke(This,info,status)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64_QueryInterface(__FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64_AddRef(__FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64_Release(__FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IAsyncOperationWithProgressCompletedHandler<UINT64,UINT64 > methods ***/
+static inline HRESULT __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64_Invoke(__FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64* This,__FIAsyncOperationWithProgress_2_UINT64_UINT64 *info,AsyncStatus status) {
+    return This->lpVtbl->Invoke(This,info,status);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_IAsyncOperationWithProgressCompletedHandler_UINT64_UINT64 IID___FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64
+#define IAsyncOperationWithProgressCompletedHandler_UINT64_UINT64Vtbl __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64Vtbl
+#define IAsyncOperationWithProgressCompletedHandler_UINT64_UINT64 __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64
+#define IAsyncOperationWithProgressCompletedHandler_UINT64_UINT64_QueryInterface __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64_QueryInterface
+#define IAsyncOperationWithProgressCompletedHandler_UINT64_UINT64_AddRef __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64_AddRef
+#define IAsyncOperationWithProgressCompletedHandler_UINT64_UINT64_Release __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64_Release
+#define IAsyncOperationWithProgressCompletedHandler_UINT64_UINT64_Invoke __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
  * IAsyncOperation<ABI::Windows::Foundation::Collections::IMapView<HSTRING,ABI::Windows::Storage::Streams::RandomAccessStreamReference* >* > interface
  */
 #ifndef ____FIAsyncOperation_1___FIMapView_2_HSTRING_Windows__CStorage__CStreams__CRandomAccessStreamReference_INTERFACE_DEFINED__
@@ -5383,6 +5782,164 @@
 
 #endif  /* ____FIAsyncOperation_1_Windows__CStorage__CStreams__CRandomAccessStreamReference_INTERFACE_DEFINED__ */
 
+/*****************************************************************************
+ * IAsyncOperationWithProgress<UINT64,UINT64 > interface
+ */
+#ifndef ____FIAsyncOperationWithProgress_2_UINT64_UINT64_INTERFACE_DEFINED__
+#define ____FIAsyncOperationWithProgress_2_UINT64_UINT64_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIAsyncOperationWithProgress_2_UINT64_UINT64, 0x8f1db6e3, 0x6556, 0x5516, 0x82,0x5c, 0x10,0x21,0xee,0x27,0xcd,0x0c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("8f1db6e3-6556-5516-825c-1021ee27cd0c")
+            IAsyncOperationWithProgress<UINT64,UINT64 > : IAsyncOperationWithProgress_impl<UINT64, UINT64 >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIAsyncOperationWithProgress_2_UINT64_UINT64, 0x8f1db6e3, 0x6556, 0x5516, 0x82,0x5c, 0x10,0x21,0xee,0x27,0xcd,0x0c)
+#endif
+#else
+typedef struct __FIAsyncOperationWithProgress_2_UINT64_UINT64Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIAsyncOperationWithProgress_2_UINT64_UINT64 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIAsyncOperationWithProgress_2_UINT64_UINT64 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIAsyncOperationWithProgress_2_UINT64_UINT64 *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIAsyncOperationWithProgress_2_UINT64_UINT64 *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIAsyncOperationWithProgress_2_UINT64_UINT64 *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIAsyncOperationWithProgress_2_UINT64_UINT64 *This,
+        TrustLevel *trustLevel);
+
+    /*** IAsyncOperationWithProgress<UINT64,UINT64 > methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_Progress)(
+        __FIAsyncOperationWithProgress_2_UINT64_UINT64 *This,
+        __FIAsyncOperationProgressHandler_2_UINT64_UINT64 *handler);
+
+    HRESULT (STDMETHODCALLTYPE *get_Progress)(
+        __FIAsyncOperationWithProgress_2_UINT64_UINT64 *This,
+        __FIAsyncOperationProgressHandler_2_UINT64_UINT64 **handler);
+
+    HRESULT (STDMETHODCALLTYPE *put_Completed)(
+        __FIAsyncOperationWithProgress_2_UINT64_UINT64 *This,
+        __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64 *handler);
+
+    HRESULT (STDMETHODCALLTYPE *get_Completed)(
+        __FIAsyncOperationWithProgress_2_UINT64_UINT64 *This,
+        __FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64 **handler);
+
+    HRESULT (STDMETHODCALLTYPE *GetResults)(
+        __FIAsyncOperationWithProgress_2_UINT64_UINT64 *This,
+        UINT64 *results);
+
+    END_INTERFACE
+} __FIAsyncOperationWithProgress_2_UINT64_UINT64Vtbl;
+
+interface __FIAsyncOperationWithProgress_2_UINT64_UINT64 {
+    CONST_VTBL __FIAsyncOperationWithProgress_2_UINT64_UINT64Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIAsyncOperationWithProgress_2_UINT64_UINT64_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIAsyncOperationWithProgress_2_UINT64_UINT64_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIAsyncOperationWithProgress_2_UINT64_UINT64_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIAsyncOperationWithProgress_2_UINT64_UINT64_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIAsyncOperationWithProgress_2_UINT64_UINT64_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIAsyncOperationWithProgress_2_UINT64_UINT64_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IAsyncOperationWithProgress<UINT64,UINT64 > methods ***/
+#define __FIAsyncOperationWithProgress_2_UINT64_UINT64_put_Progress(This,handler) (This)->lpVtbl->put_Progress(This,handler)
+#define __FIAsyncOperationWithProgress_2_UINT64_UINT64_get_Progress(This,handler) (This)->lpVtbl->get_Progress(This,handler)
+#define __FIAsyncOperationWithProgress_2_UINT64_UINT64_put_Completed(This,handler) (This)->lpVtbl->put_Completed(This,handler)
+#define __FIAsyncOperationWithProgress_2_UINT64_UINT64_get_Completed(This,handler) (This)->lpVtbl->get_Completed(This,handler)
+#define __FIAsyncOperationWithProgress_2_UINT64_UINT64_GetResults(This,results) (This)->lpVtbl->GetResults(This,results)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIAsyncOperationWithProgress_2_UINT64_UINT64_QueryInterface(__FIAsyncOperationWithProgress_2_UINT64_UINT64* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIAsyncOperationWithProgress_2_UINT64_UINT64_AddRef(__FIAsyncOperationWithProgress_2_UINT64_UINT64* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIAsyncOperationWithProgress_2_UINT64_UINT64_Release(__FIAsyncOperationWithProgress_2_UINT64_UINT64* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIAsyncOperationWithProgress_2_UINT64_UINT64_GetIids(__FIAsyncOperationWithProgress_2_UINT64_UINT64* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIAsyncOperationWithProgress_2_UINT64_UINT64_GetRuntimeClassName(__FIAsyncOperationWithProgress_2_UINT64_UINT64* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIAsyncOperationWithProgress_2_UINT64_UINT64_GetTrustLevel(__FIAsyncOperationWithProgress_2_UINT64_UINT64* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IAsyncOperationWithProgress<UINT64,UINT64 > methods ***/
+static inline HRESULT __FIAsyncOperationWithProgress_2_UINT64_UINT64_put_Progress(__FIAsyncOperationWithProgress_2_UINT64_UINT64* This,__FIAsyncOperationProgressHandler_2_UINT64_UINT64 *handler) {
+    return This->lpVtbl->put_Progress(This,handler);
+}
+static inline HRESULT __FIAsyncOperationWithProgress_2_UINT64_UINT64_get_Progress(__FIAsyncOperationWithProgress_2_UINT64_UINT64* This,__FIAsyncOperationProgressHandler_2_UINT64_UINT64 **handler) {
+    return This->lpVtbl->get_Progress(This,handler);
+}
+static inline HRESULT __FIAsyncOperationWithProgress_2_UINT64_UINT64_put_Completed(__FIAsyncOperationWithProgress_2_UINT64_UINT64* This,__FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64 *handler) {
+    return This->lpVtbl->put_Completed(This,handler);
+}
+static inline HRESULT __FIAsyncOperationWithProgress_2_UINT64_UINT64_get_Completed(__FIAsyncOperationWithProgress_2_UINT64_UINT64* This,__FIAsyncOperationWithProgressCompletedHandler_2_UINT64_UINT64 **handler) {
+    return This->lpVtbl->get_Completed(This,handler);
+}
+static inline HRESULT __FIAsyncOperationWithProgress_2_UINT64_UINT64_GetResults(__FIAsyncOperationWithProgress_2_UINT64_UINT64* This,UINT64 *results) {
+    return This->lpVtbl->GetResults(This,results);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_IAsyncOperationWithProgress_UINT64_UINT64 IID___FIAsyncOperationWithProgress_2_UINT64_UINT64
+#define IAsyncOperationWithProgress_UINT64_UINT64Vtbl __FIAsyncOperationWithProgress_2_UINT64_UINT64Vtbl
+#define IAsyncOperationWithProgress_UINT64_UINT64 __FIAsyncOperationWithProgress_2_UINT64_UINT64
+#define IAsyncOperationWithProgress_UINT64_UINT64_QueryInterface __FIAsyncOperationWithProgress_2_UINT64_UINT64_QueryInterface
+#define IAsyncOperationWithProgress_UINT64_UINT64_AddRef __FIAsyncOperationWithProgress_2_UINT64_UINT64_AddRef
+#define IAsyncOperationWithProgress_UINT64_UINT64_Release __FIAsyncOperationWithProgress_2_UINT64_UINT64_Release
+#define IAsyncOperationWithProgress_UINT64_UINT64_GetIids __FIAsyncOperationWithProgress_2_UINT64_UINT64_GetIids
+#define IAsyncOperationWithProgress_UINT64_UINT64_GetRuntimeClassName __FIAsyncOperationWithProgress_2_UINT64_UINT64_GetRuntimeClassName
+#define IAsyncOperationWithProgress_UINT64_UINT64_GetTrustLevel __FIAsyncOperationWithProgress_2_UINT64_UINT64_GetTrustLevel
+#define IAsyncOperationWithProgress_UINT64_UINT64_put_Progress __FIAsyncOperationWithProgress_2_UINT64_UINT64_put_Progress
+#define IAsyncOperationWithProgress_UINT64_UINT64_get_Progress __FIAsyncOperationWithProgress_2_UINT64_UINT64_get_Progress
+#define IAsyncOperationWithProgress_UINT64_UINT64_put_Completed __FIAsyncOperationWithProgress_2_UINT64_UINT64_put_Completed
+#define IAsyncOperationWithProgress_UINT64_UINT64_get_Completed __FIAsyncOperationWithProgress_2_UINT64_UINT64_get_Completed
+#define IAsyncOperationWithProgress_UINT64_UINT64_GetResults __FIAsyncOperationWithProgress_2_UINT64_UINT64_GetResults
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FIAsyncOperationWithProgress_2_UINT64_UINT64_INTERFACE_DEFINED__ */
+
 /* Begin additional prototypes for all interfaces */
 
 ULONG           __RPC_USER HSTRING_UserSize     (ULONG *, ULONG, HSTRING *);
diff --git a/mingw-w64-headers/include/windows.system.h b/mingw-w64-headers/include/windows.system.h
index 7086133..75c1789 100644
--- a/mingw-w64-headers/include/windows.system.h
+++ b/mingw-w64-headers/include/windows.system.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.system.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.system.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.system.power.h b/mingw-w64-headers/include/windows.system.power.h
index 566a25d..595f45c 100644
--- a/mingw-w64-headers/include/windows.system.power.h
+++ b/mingw-w64-headers/include/windows.system.power.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.system.power.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.system.power.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.system.profile.h b/mingw-w64-headers/include/windows.system.profile.h
index 89c9c19..5a13322 100644
--- a/mingw-w64-headers/include/windows.system.profile.h
+++ b/mingw-w64-headers/include/windows.system.profile.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.system.profile.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.system.profile.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.system.profile.systemmanufacturers.h b/mingw-w64-headers/include/windows.system.profile.systemmanufacturers.h
index 0f3c198..f00b1d6 100644
--- a/mingw-w64-headers/include/windows.system.profile.systemmanufacturers.h
+++ b/mingw-w64-headers/include/windows.system.profile.systemmanufacturers.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.system.profile.systemmanufacturers.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.system.profile.systemmanufacturers.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.system.threading.h b/mingw-w64-headers/include/windows.system.threading.h
index 58c819a..446444d 100644
--- a/mingw-w64-headers/include/windows.system.threading.h
+++ b/mingw-w64-headers/include/windows.system.threading.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.system.threading.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.system.threading.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.system.userprofile.h b/mingw-w64-headers/include/windows.system.userprofile.h
index 13e86e8..74c656c 100644
--- a/mingw-w64-headers/include/windows.system.userprofile.h
+++ b/mingw-w64-headers/include/windows.system.userprofile.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.system.userprofile.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.system.userprofile.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.composition.h b/mingw-w64-headers/include/windows.ui.composition.h
index 271c59a..5d2dce7 100644
--- a/mingw-w64-headers/include/windows.ui.composition.h
+++ b/mingw-w64-headers/include/windows.ui.composition.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.ui.composition.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.ui.composition.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.composition.interop.h b/mingw-w64-headers/include/windows.ui.composition.interop.h
index 763f491..a41e096 100644
--- a/mingw-w64-headers/include/windows.ui.composition.interop.h
+++ b/mingw-w64-headers/include/windows.ui.composition.interop.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.ui.composition.interop.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.ui.composition.interop.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.core.h b/mingw-w64-headers/include/windows.ui.core.h
index 15e1276..22df9d5 100644
--- a/mingw-w64-headers/include/windows.ui.core.h
+++ b/mingw-w64-headers/include/windows.ui.core.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.ui.core.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.ui.core.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.h b/mingw-w64-headers/include/windows.ui.h
index 20ed21c..556a57b 100644
--- a/mingw-w64-headers/include/windows.ui.h
+++ b/mingw-w64-headers/include/windows.ui.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.ui.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.ui.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.input.h b/mingw-w64-headers/include/windows.ui.input.h
index 2ea4e02..ea9e48d 100644
--- a/mingw-w64-headers/include/windows.ui.input.h
+++ b/mingw-w64-headers/include/windows.ui.input.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.ui.input.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.ui.input.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.notifications.h b/mingw-w64-headers/include/windows.ui.notifications.h
index 3ea555e..c0a0499 100644
--- a/mingw-w64-headers/include/windows.ui.notifications.h
+++ b/mingw-w64-headers/include/windows.ui.notifications.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.ui.notifications.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.ui.notifications.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.viewmanagement.core.h b/mingw-w64-headers/include/windows.ui.viewmanagement.core.h
index 59cefc6..4b1a4bc 100644
--- a/mingw-w64-headers/include/windows.ui.viewmanagement.core.h
+++ b/mingw-w64-headers/include/windows.ui.viewmanagement.core.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.ui.viewmanagement.core.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.ui.viewmanagement.core.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.viewmanagement.h b/mingw-w64-headers/include/windows.ui.viewmanagement.h
index 2884c58..4f9f8f2 100644
--- a/mingw-w64-headers/include/windows.ui.viewmanagement.h
+++ b/mingw-w64-headers/include/windows.ui.viewmanagement.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.ui.viewmanagement.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.ui.viewmanagement.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
@@ -18,6 +18,414 @@
 
 /* Forward declarations */
 
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings ABI::Windows::UI::ViewManagement::IAccessibilitySettings
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IAccessibilitySettings;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView ABI::Windows::UI::ViewManagement::IApplicationView
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationView;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2 ABI::Windows::UI::ViewManagement::IApplicationView2
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationView2;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3 ABI::Windows::UI::ViewManagement::IApplicationView3
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationView3;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4 ABI::Windows::UI::ViewManagement::IApplicationView4
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationView4;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7 ABI::Windows::UI::ViewManagement::IApplicationView7
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationView7;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9 ABI::Windows::UI::ViewManagement::IApplicationView9
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationView9;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs ABI::Windows::UI::ViewManagement::IApplicationViewConsolidatedEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewConsolidatedEventArgs;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2 ABI::Windows::UI::ViewManagement::IApplicationViewConsolidatedEventArgs2
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewConsolidatedEventArgs2;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics ABI::Windows::UI::ViewManagement::IApplicationViewFullscreenStatics
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewFullscreenStatics;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics ABI::Windows::UI::ViewManagement::IApplicationViewInteropStatics
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewInteropStatics;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling ABI::Windows::UI::ViewManagement::IApplicationViewScaling
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewScaling;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics ABI::Windows::UI::ViewManagement::IApplicationViewScalingStatics
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewScalingStatics;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics ABI::Windows::UI::ViewManagement::IApplicationViewStatics
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewStatics;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2 ABI::Windows::UI::ViewManagement::IApplicationViewStatics2
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewStatics2;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3 ABI::Windows::UI::ViewManagement::IApplicationViewStatics3
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewStatics3;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4 ABI::Windows::UI::ViewManagement::IApplicationViewStatics4
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewStatics4;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics ABI::Windows::UI::ViewManagement::IApplicationViewSwitcherStatics
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewSwitcherStatics;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2 ABI::Windows::UI::ViewManagement::IApplicationViewSwitcherStatics2
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewSwitcherStatics2;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3 ABI::Windows::UI::ViewManagement::IApplicationViewSwitcherStatics3
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewSwitcherStatics3;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar ABI::Windows::UI::ViewManagement::IApplicationViewTitleBar
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewTitleBar;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext ABI::Windows::UI::ViewManagement::IApplicationViewTransferContext
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewTransferContext;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics ABI::Windows::UI::ViewManagement::IApplicationViewTransferContextStatics
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewTransferContextStatics;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext ABI::Windows::UI::ViewManagement::IApplicationViewWithContext
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewWithContext;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
 #ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings_FWD_DEFINED__
 #define ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings_FWD_DEFINED__
 typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIUISettings __x_ABI_CWindows_CUI_CViewManagement_CIUISettings;
@@ -307,6 +715,159 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences ABI::Windows::UI::ViewManagement::IViewModePreferences
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IViewModePreferences;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics ABI::Windows::UI::ViewManagement::IViewModePreferencesStatics
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IViewModePreferencesStatics;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CAccessibilitySettings_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CAccessibilitySettings_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                class AccessibilitySettings;
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CAccessibilitySettings __x_ABI_CWindows_CUI_CViewManagement_CAccessibilitySettings;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CViewManagement_CAccessibilitySettings_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CApplicationView_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CApplicationView_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                class ApplicationView;
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CApplicationView __x_ABI_CWindows_CUI_CViewManagement_CApplicationView;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CViewManagement_CApplicationView_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewConsolidatedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewConsolidatedEventArgs_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                class ApplicationViewConsolidatedEventArgs;
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewConsolidatedEventArgs __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewConsolidatedEventArgs;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewConsolidatedEventArgs_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewScaling_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewScaling_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                class ApplicationViewScaling;
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewScaling __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewScaling;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewScaling_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewSwitcher_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewSwitcher_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                class ApplicationViewSwitcher;
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewSwitcher __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewSwitcher;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewSwitcher_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewTitleBar_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewTitleBar_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                class ApplicationViewTitleBar;
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewTitleBar __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewTitleBar;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewTitleBar_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewTransferContext_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewTransferContext_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                class ApplicationViewTransferContext;
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewTransferContext __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewTransferContext;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewTransferContext_FWD_DEFINED__ */
+
 #ifndef ____x_ABI_CWindows_CUI_CViewManagement_CUISettings_FWD_DEFINED__
 #define ____x_ABI_CWindows_CUI_CViewManagement_CUISettings_FWD_DEFINED__
 #ifdef __cplusplus
@@ -426,6 +987,47 @@
 #endif /* defined __cplusplus */
 #endif /* defined ____x_ABI_CWindows_CUI_CViewManagement_CInputPaneVisibilityEventArgs_FWD_DEFINED__ */
 
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CViewModePreferences_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CViewModePreferences_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                class ViewModePreferences;
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CViewModePreferences __x_ABI_CWindows_CUI_CViewManagement_CViewModePreferences;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CViewManagement_CViewModePreferences_FWD_DEFINED__ */
+
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable_FWD_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable_FWD_DEFINED__
+typedef interface __FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable __FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable;
+#ifdef __cplusplus
+#define __FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::ViewManagement::AccessibilitySettings*,IInspectable* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable_FWD_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable_FWD_DEFINED__
+typedef interface __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable;
+#ifdef __cplusplus
+#define __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::ViewManagement::ApplicationView*,IInspectable* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs_FWD_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs_FWD_DEFINED__
+typedef interface __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs;
+#ifdef __cplusplus
+#define __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::ViewManagement::ApplicationView*,ABI::Windows::UI::ViewManagement::ApplicationViewConsolidatedEventArgs* >
+#endif /* __cplusplus */
+#endif
+
 #ifndef ____FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable_FWD_DEFINED__
 #define ____FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable_FWD_DEFINED__
 typedef interface __FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable __FITypedEventHandler_2_Windows__CUI__CViewManagement__CUISettings_IInspectable;
@@ -476,6 +1078,7 @@
 #include <windows.devices.enumeration.h>
 #include <windows.ui.h>
 #include <windows.ui.core.h>
+#include <windows.ui.windowmanagement.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -486,6 +1089,264 @@
 #endif // defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)
 
 #if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewBoundsMode_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewBoundsMode_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                enum ApplicationViewBoundsMode {
+                    ApplicationViewBoundsMode_UseVisible = 0,
+                    ApplicationViewBoundsMode_UseCoreWindow = 1
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewBoundsMode {
+    ApplicationViewBoundsMode_UseVisible = 0,
+    ApplicationViewBoundsMode_UseCoreWindow = 1
+};
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define ApplicationViewBoundsMode __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewBoundsMode
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif /* ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewBoundsMode_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewBoundsMode __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewBoundsMode;
+#endif /* __cplusplus */
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewMode_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewMode_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                enum ApplicationViewMode {
+                    ApplicationViewMode_Default = 0,
+                    ApplicationViewMode_CompactOverlay = 1
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewMode {
+    ApplicationViewMode_Default = 0,
+    ApplicationViewMode_CompactOverlay = 1
+};
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define ApplicationViewMode __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewMode
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif /* ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewMode_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewMode __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewMode;
+#endif /* __cplusplus */
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewOrientation_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewOrientation_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                enum ApplicationViewOrientation {
+                    ApplicationViewOrientation_Landscape = 0,
+                    ApplicationViewOrientation_Portrait = 1
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewOrientation {
+    ApplicationViewOrientation_Landscape = 0,
+    ApplicationViewOrientation_Portrait = 1
+};
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define ApplicationViewOrientation __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewOrientation
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif /* ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewOrientation_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewOrientation __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewOrientation;
+#endif /* __cplusplus */
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewState_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewState_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                enum ApplicationViewState {
+                    ApplicationViewState_FullScreenLandscape = 0,
+                    ApplicationViewState_Filled = 1,
+                    ApplicationViewState_Snapped = 2,
+                    ApplicationViewState_FullScreenPortrait = 3
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewState {
+    ApplicationViewState_FullScreenLandscape = 0,
+    ApplicationViewState_Filled = 1,
+    ApplicationViewState_Snapped = 2,
+    ApplicationViewState_FullScreenPortrait = 3
+};
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define ApplicationViewState __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewState
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif /* ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewState_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewState __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewState;
+#endif /* __cplusplus */
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewSwitchingOptions_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewSwitchingOptions_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                enum ApplicationViewSwitchingOptions {
+                    ApplicationViewSwitchingOptions_Default = 0x0,
+                    ApplicationViewSwitchingOptions_SkipAnimation = 0x1,
+                    ApplicationViewSwitchingOptions_ConsolidateViews = 0x2
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewSwitchingOptions {
+    ApplicationViewSwitchingOptions_Default = 0x0,
+    ApplicationViewSwitchingOptions_SkipAnimation = 0x1,
+    ApplicationViewSwitchingOptions_ConsolidateViews = 0x2
+};
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define ApplicationViewSwitchingOptions __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewSwitchingOptions
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif /* ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewSwitchingOptions_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewSwitchingOptions __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewSwitchingOptions;
+#endif /* __cplusplus */
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewWindowingMode_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewWindowingMode_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                enum ApplicationViewWindowingMode {
+                    ApplicationViewWindowingMode_Auto = 0,
+                    ApplicationViewWindowingMode_PreferredLaunchViewSize = 1,
+                    ApplicationViewWindowingMode_FullScreen = 2,
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x70000
+                    ApplicationViewWindowingMode_CompactOverlay = 3,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x70000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x70000
+                    ApplicationViewWindowingMode_Maximized = 4
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x70000 */
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewWindowingMode {
+    ApplicationViewWindowingMode_Auto = 0,
+    ApplicationViewWindowingMode_PreferredLaunchViewSize = 1,
+    ApplicationViewWindowingMode_FullScreen = 2,
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x70000
+    ApplicationViewWindowingMode_CompactOverlay = 3,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x70000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x70000
+    ApplicationViewWindowingMode_Maximized = 4
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x70000 */
+};
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define ApplicationViewWindowingMode __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewWindowingMode
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif /* ____x_ABI_CWindows_CUI_CViewManagement_CApplicationViewWindowingMode_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewWindowingMode __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewWindowingMode;
+#endif /* __cplusplus */
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CFullScreenSystemOverlayMode_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CFullScreenSystemOverlayMode_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                enum FullScreenSystemOverlayMode {
+                    FullScreenSystemOverlayMode_Standard = 0,
+                    FullScreenSystemOverlayMode_Minimal = 1
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CUI_CViewManagement_CFullScreenSystemOverlayMode {
+    FullScreenSystemOverlayMode_Standard = 0,
+    FullScreenSystemOverlayMode_Minimal = 1
+};
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define FullScreenSystemOverlayMode __x_ABI_CWindows_CUI_CViewManagement_CFullScreenSystemOverlayMode
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif /* ____x_ABI_CWindows_CUI_CViewManagement_CFullScreenSystemOverlayMode_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CUI_CViewManagement_CFullScreenSystemOverlayMode __x_ABI_CWindows_CUI_CViewManagement_CFullScreenSystemOverlayMode;
+#endif /* __cplusplus */
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
 #ifndef ____x_ABI_CWindows_CUI_CViewManagement_CHandPreference_ENUM_DEFINED__
 #define ____x_ABI_CWindows_CUI_CViewManagement_CHandPreference_ENUM_DEFINED__
 #ifdef __cplusplus
@@ -737,6 +1598,462 @@
 typedef enum __x_ABI_CWindows_CUI_CViewManagement_CUserInteractionMode __x_ABI_CWindows_CUI_CViewManagement_CUserInteractionMode;
 #endif /* __cplusplus */
 
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CViewSizePreference_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CViewSizePreference_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                enum ViewSizePreference {
+                    ViewSizePreference_Default = 0,
+                    ViewSizePreference_UseLess = 1,
+                    ViewSizePreference_UseHalf = 2,
+                    ViewSizePreference_UseMore = 3,
+                    ViewSizePreference_UseMinimum = 4,
+                    ViewSizePreference_UseNone = 5,
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000
+                    ViewSizePreference_Custom = 6
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000 */
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CUI_CViewManagement_CViewSizePreference {
+    ViewSizePreference_Default = 0,
+    ViewSizePreference_UseLess = 1,
+    ViewSizePreference_UseHalf = 2,
+    ViewSizePreference_UseMore = 3,
+    ViewSizePreference_UseMinimum = 4,
+    ViewSizePreference_UseNone = 5,
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000
+    ViewSizePreference_Custom = 6
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000 */
+};
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define ViewSizePreference __x_ABI_CWindows_CUI_CViewManagement_CViewSizePreference
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif /* ____x_ABI_CWindows_CUI_CViewManagement_CViewSizePreference_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CUI_CViewManagement_CViewSizePreference __x_ABI_CWindows_CUI_CViewManagement_CViewSizePreference;
+#endif /* __cplusplus */
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings ABI::Windows::UI::ViewManagement::IAccessibilitySettings
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IAccessibilitySettings;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView ABI::Windows::UI::ViewManagement::IApplicationView
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationView;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2 ABI::Windows::UI::ViewManagement::IApplicationView2
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationView2;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3 ABI::Windows::UI::ViewManagement::IApplicationView3
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationView3;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4 ABI::Windows::UI::ViewManagement::IApplicationView4
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationView4;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7 ABI::Windows::UI::ViewManagement::IApplicationView7
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationView7;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9 ABI::Windows::UI::ViewManagement::IApplicationView9
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationView9;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs ABI::Windows::UI::ViewManagement::IApplicationViewConsolidatedEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewConsolidatedEventArgs;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2 ABI::Windows::UI::ViewManagement::IApplicationViewConsolidatedEventArgs2
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewConsolidatedEventArgs2;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics ABI::Windows::UI::ViewManagement::IApplicationViewFullscreenStatics
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewFullscreenStatics;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics ABI::Windows::UI::ViewManagement::IApplicationViewInteropStatics
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewInteropStatics;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling ABI::Windows::UI::ViewManagement::IApplicationViewScaling
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewScaling;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics ABI::Windows::UI::ViewManagement::IApplicationViewScalingStatics
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewScalingStatics;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics ABI::Windows::UI::ViewManagement::IApplicationViewStatics
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewStatics;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2 ABI::Windows::UI::ViewManagement::IApplicationViewStatics2
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewStatics2;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3 ABI::Windows::UI::ViewManagement::IApplicationViewStatics3
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewStatics3;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4 ABI::Windows::UI::ViewManagement::IApplicationViewStatics4
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewStatics4;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics ABI::Windows::UI::ViewManagement::IApplicationViewSwitcherStatics
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewSwitcherStatics;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2 ABI::Windows::UI::ViewManagement::IApplicationViewSwitcherStatics2
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewSwitcherStatics2;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3 ABI::Windows::UI::ViewManagement::IApplicationViewSwitcherStatics3
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewSwitcherStatics3;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar ABI::Windows::UI::ViewManagement::IApplicationViewTitleBar
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewTitleBar;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext ABI::Windows::UI::ViewManagement::IApplicationViewTransferContext
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewTransferContext;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics ABI::Windows::UI::ViewManagement::IApplicationViewTransferContextStatics
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewTransferContextStatics;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext ABI::Windows::UI::ViewManagement::IApplicationViewWithContext
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IApplicationViewWithContext;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
 #ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings_FWD_DEFINED__
 #define ____x_ABI_CWindows_CUI_CViewManagement_CIUISettings_FWD_DEFINED__
 typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIUISettings __x_ABI_CWindows_CUI_CViewManagement_CIUISettings;
@@ -924,6 +2241,40 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences ABI::Windows::UI::ViewManagement::IViewModePreferences
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IViewModePreferences;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics ABI::Windows::UI::ViewManagement::IViewModePreferencesStatics
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                interface IViewModePreferencesStatics;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
 #ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIInputPane_FWD_DEFINED__
 #define ____x_ABI_CWindows_CUI_CViewManagement_CIInputPane_FWD_DEFINED__
 typedef interface __x_ABI_CWindows_CUI_CViewManagement_CIInputPane __x_ABI_CWindows_CUI_CViewManagement_CIInputPane;
@@ -1026,6 +2377,4014 @@
 #endif /* __cplusplus */
 #endif
 
+#if !defined(WINDOWS_UI_VIEWMANAGEMENT_VIEWMANAGEMENTVIEWSCALINGCONTRACT_VERSION)
+#define WINDOWS_UI_VIEWMANAGEMENT_VIEWMANAGEMENTVIEWSCALINGCONTRACT_VERSION 0x10000
+#endif // defined(WINDOWS_UI_VIEWMANAGEMENT_VIEWMANAGEMENTVIEWSCALINGCONTRACT_VERSION)
+
+/*****************************************************************************
+ * IAccessibilitySettings interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings, 0xfe0e8147, 0xc4c0, 0x4562, 0xb9,0x62, 0x13,0x27,0xb5,0x2a,0xd5,0xb9);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                MIDL_INTERFACE("fe0e8147-c4c0-4562-b962-1327b52ad5b9")
+                IAccessibilitySettings : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_HighContrast(
+                        boolean *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_HighContrastScheme(
+                        HSTRING *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE add_HighContrastChanged(
+                        ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::ViewManagement::AccessibilitySettings*,IInspectable* > *handler,
+                        EventRegistrationToken *cookie) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE remove_HighContrastChanged(
+                        EventRegistrationToken cookie) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings, 0xfe0e8147, 0xc4c0, 0x4562, 0xb9,0x62, 0x13,0x27,0xb5,0x2a,0xd5,0xb9)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettingsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings *This,
+        TrustLevel *trustLevel);
+
+    /*** IAccessibilitySettings methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_HighContrast)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_HighContrastScheme)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings *This,
+        HSTRING *value);
+
+    HRESULT (STDMETHODCALLTYPE *add_HighContrastChanged)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings *This,
+        __FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable *handler,
+        EventRegistrationToken *cookie);
+
+    HRESULT (STDMETHODCALLTYPE *remove_HighContrastChanged)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings *This,
+        EventRegistrationToken cookie);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettingsVtbl;
+
+interface __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings {
+    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettingsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IAccessibilitySettings methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_get_HighContrast(This,value) (This)->lpVtbl->get_HighContrast(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_get_HighContrastScheme(This,value) (This)->lpVtbl->get_HighContrastScheme(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_add_HighContrastChanged(This,handler,cookie) (This)->lpVtbl->add_HighContrastChanged(This,handler,cookie)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_remove_HighContrastChanged(This,cookie) (This)->lpVtbl->remove_HighContrastChanged(This,cookie)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_Release(__x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IAccessibilitySettings methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_get_HighContrast(__x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings* This,boolean *value) {
+    return This->lpVtbl->get_HighContrast(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_get_HighContrastScheme(__x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings* This,HSTRING *value) {
+    return This->lpVtbl->get_HighContrastScheme(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_add_HighContrastChanged(__x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings* This,__FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable *handler,EventRegistrationToken *cookie) {
+    return This->lpVtbl->add_HighContrastChanged(This,handler,cookie);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_remove_HighContrastChanged(__x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings* This,EventRegistrationToken cookie) {
+    return This->lpVtbl->remove_HighContrastChanged(This,cookie);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define IID_IAccessibilitySettings IID___x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings
+#define IAccessibilitySettingsVtbl __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettingsVtbl
+#define IAccessibilitySettings __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings
+#define IAccessibilitySettings_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_QueryInterface
+#define IAccessibilitySettings_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_AddRef
+#define IAccessibilitySettings_Release __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_Release
+#define IAccessibilitySettings_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_GetIids
+#define IAccessibilitySettings_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_GetRuntimeClassName
+#define IAccessibilitySettings_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_GetTrustLevel
+#define IAccessibilitySettings_get_HighContrast __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_get_HighContrast
+#define IAccessibilitySettings_get_HighContrastScheme __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_get_HighContrastScheme
+#define IAccessibilitySettings_add_HighContrastChanged __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_add_HighContrastChanged
+#define IAccessibilitySettings_remove_HighContrastChanged __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_remove_HighContrastChanged
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IApplicationView interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationView, 0xd222d519, 0x4361, 0x451e, 0x96,0xc4, 0x60,0xf4,0xf9,0x74,0x2d,0xb0);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                MIDL_INTERFACE("d222d519-4361-451e-96c4-60f4f9742db0")
+                IApplicationView : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_Orientation(
+                        ABI::Windows::UI::ViewManagement::ApplicationViewOrientation *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_AdjacentToLeftDisplayEdge(
+                        boolean *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_AdjacentToRightDisplayEdge(
+                        boolean *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_IsFullScreen(
+                        boolean *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_IsOnLockScreen(
+                        boolean *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_IsScreenCaptureEnabled(
+                        boolean *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_IsScreenCaptureEnabled(
+                        boolean value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_Title(
+                        HSTRING value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_Title(
+                        HSTRING *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_Id(
+                        INT32 *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE add_Consolidated(
+                        ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::ViewManagement::ApplicationView*,ABI::Windows::UI::ViewManagement::ApplicationViewConsolidatedEventArgs* > *handler,
+                        EventRegistrationToken *token) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE remove_Consolidated(
+                        EventRegistrationToken token) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView, 0xd222d519, 0x4361, 0x451e, 0x96,0xc4, 0x60,0xf4,0xf9,0x74,0x2d,0xb0)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView *This,
+        TrustLevel *trustLevel);
+
+    /*** IApplicationView methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Orientation)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView *This,
+        __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewOrientation *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_AdjacentToLeftDisplayEdge)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_AdjacentToRightDisplayEdge)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsFullScreen)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsOnLockScreen)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsScreenCaptureEnabled)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_IsScreenCaptureEnabled)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView *This,
+        boolean value);
+
+    HRESULT (STDMETHODCALLTYPE *put_Title)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView *This,
+        HSTRING value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Title)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView *This,
+        HSTRING *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Id)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView *This,
+        INT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *add_Consolidated)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView *This,
+        __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs *handler,
+        EventRegistrationToken *token);
+
+    HRESULT (STDMETHODCALLTYPE *remove_Consolidated)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView *This,
+        EventRegistrationToken token);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewVtbl;
+
+interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView {
+    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IApplicationView methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_get_Orientation(This,value) (This)->lpVtbl->get_Orientation(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_get_AdjacentToLeftDisplayEdge(This,value) (This)->lpVtbl->get_AdjacentToLeftDisplayEdge(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_get_AdjacentToRightDisplayEdge(This,value) (This)->lpVtbl->get_AdjacentToRightDisplayEdge(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_get_IsFullScreen(This,value) (This)->lpVtbl->get_IsFullScreen(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_get_IsOnLockScreen(This,value) (This)->lpVtbl->get_IsOnLockScreen(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_get_IsScreenCaptureEnabled(This,value) (This)->lpVtbl->get_IsScreenCaptureEnabled(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_put_IsScreenCaptureEnabled(This,value) (This)->lpVtbl->put_IsScreenCaptureEnabled(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_put_Title(This,value) (This)->lpVtbl->put_Title(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_get_Title(This,value) (This)->lpVtbl->get_Title(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_get_Id(This,value) (This)->lpVtbl->get_Id(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_add_Consolidated(This,handler,token) (This)->lpVtbl->add_Consolidated(This,handler,token)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_remove_Consolidated(This,token) (This)->lpVtbl->remove_Consolidated(This,token)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_Release(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IApplicationView methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_get_Orientation(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView* This,__x_ABI_CWindows_CUI_CViewManagement_CApplicationViewOrientation *value) {
+    return This->lpVtbl->get_Orientation(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_get_AdjacentToLeftDisplayEdge(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView* This,boolean *value) {
+    return This->lpVtbl->get_AdjacentToLeftDisplayEdge(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_get_AdjacentToRightDisplayEdge(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView* This,boolean *value) {
+    return This->lpVtbl->get_AdjacentToRightDisplayEdge(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_get_IsFullScreen(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView* This,boolean *value) {
+    return This->lpVtbl->get_IsFullScreen(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_get_IsOnLockScreen(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView* This,boolean *value) {
+    return This->lpVtbl->get_IsOnLockScreen(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_get_IsScreenCaptureEnabled(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView* This,boolean *value) {
+    return This->lpVtbl->get_IsScreenCaptureEnabled(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_put_IsScreenCaptureEnabled(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView* This,boolean value) {
+    return This->lpVtbl->put_IsScreenCaptureEnabled(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_put_Title(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView* This,HSTRING value) {
+    return This->lpVtbl->put_Title(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_get_Title(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView* This,HSTRING *value) {
+    return This->lpVtbl->get_Title(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_get_Id(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView* This,INT32 *value) {
+    return This->lpVtbl->get_Id(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_add_Consolidated(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView* This,__FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs *handler,EventRegistrationToken *token) {
+    return This->lpVtbl->add_Consolidated(This,handler,token);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_remove_Consolidated(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView* This,EventRegistrationToken token) {
+    return This->lpVtbl->remove_Consolidated(This,token);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define IID_IApplicationView IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationView
+#define IApplicationViewVtbl __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewVtbl
+#define IApplicationView __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView
+#define IApplicationView_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_QueryInterface
+#define IApplicationView_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_AddRef
+#define IApplicationView_Release __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_Release
+#define IApplicationView_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_GetIids
+#define IApplicationView_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_GetRuntimeClassName
+#define IApplicationView_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_GetTrustLevel
+#define IApplicationView_get_Orientation __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_get_Orientation
+#define IApplicationView_get_AdjacentToLeftDisplayEdge __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_get_AdjacentToLeftDisplayEdge
+#define IApplicationView_get_AdjacentToRightDisplayEdge __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_get_AdjacentToRightDisplayEdge
+#define IApplicationView_get_IsFullScreen __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_get_IsFullScreen
+#define IApplicationView_get_IsOnLockScreen __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_get_IsOnLockScreen
+#define IApplicationView_get_IsScreenCaptureEnabled __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_get_IsScreenCaptureEnabled
+#define IApplicationView_put_IsScreenCaptureEnabled __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_put_IsScreenCaptureEnabled
+#define IApplicationView_put_Title __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_put_Title
+#define IApplicationView_get_Title __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_get_Title
+#define IApplicationView_get_Id __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_get_Id
+#define IApplicationView_add_Consolidated __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_add_Consolidated
+#define IApplicationView_remove_Consolidated __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_remove_Consolidated
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IApplicationView2 interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2, 0xe876b196, 0xa545, 0x40dc, 0xb5,0x94, 0x45,0x0c,0xba,0x68,0xcc,0x00);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                MIDL_INTERFACE("e876b196-a545-40dc-b594-450cba68cc00")
+                IApplicationView2 : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_SuppressSystemOverlays(
+                        boolean *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_SuppressSystemOverlays(
+                        boolean value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_VisibleBounds(
+                        ABI::Windows::Foundation::Rect *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE add_VisibleBoundsChanged(
+                        ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::ViewManagement::ApplicationView*,IInspectable* > *handler,
+                        EventRegistrationToken *token) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE remove_VisibleBoundsChanged(
+                        EventRegistrationToken token) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE SetDesiredBoundsMode(
+                        ABI::Windows::UI::ViewManagement::ApplicationViewBoundsMode mode,
+                        boolean *success) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_DesiredBoundsMode(
+                        ABI::Windows::UI::ViewManagement::ApplicationViewBoundsMode *value) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2, 0xe876b196, 0xa545, 0x40dc, 0xb5,0x94, 0x45,0x0c,0xba,0x68,0xcc,0x00)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2 *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2 *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2 *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2 *This,
+        TrustLevel *trustLevel);
+
+    /*** IApplicationView2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_SuppressSystemOverlays)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2 *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_SuppressSystemOverlays)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2 *This,
+        boolean value);
+
+    HRESULT (STDMETHODCALLTYPE *get_VisibleBounds)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2 *This,
+        __x_ABI_CWindows_CFoundation_CRect *value);
+
+    HRESULT (STDMETHODCALLTYPE *add_VisibleBoundsChanged)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2 *This,
+        __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable *handler,
+        EventRegistrationToken *token);
+
+    HRESULT (STDMETHODCALLTYPE *remove_VisibleBoundsChanged)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2 *This,
+        EventRegistrationToken token);
+
+    HRESULT (STDMETHODCALLTYPE *SetDesiredBoundsMode)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2 *This,
+        __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewBoundsMode mode,
+        boolean *success);
+
+    HRESULT (STDMETHODCALLTYPE *get_DesiredBoundsMode)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2 *This,
+        __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewBoundsMode *value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2Vtbl;
+
+interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2 {
+    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IApplicationView2 methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_get_SuppressSystemOverlays(This,value) (This)->lpVtbl->get_SuppressSystemOverlays(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_put_SuppressSystemOverlays(This,value) (This)->lpVtbl->put_SuppressSystemOverlays(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_get_VisibleBounds(This,value) (This)->lpVtbl->get_VisibleBounds(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_add_VisibleBoundsChanged(This,handler,token) (This)->lpVtbl->add_VisibleBoundsChanged(This,handler,token)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_remove_VisibleBoundsChanged(This,token) (This)->lpVtbl->remove_VisibleBoundsChanged(This,token)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_SetDesiredBoundsMode(This,mode,success) (This)->lpVtbl->SetDesiredBoundsMode(This,mode,success)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_get_DesiredBoundsMode(This,value) (This)->lpVtbl->get_DesiredBoundsMode(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_Release(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IApplicationView2 methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_get_SuppressSystemOverlays(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2* This,boolean *value) {
+    return This->lpVtbl->get_SuppressSystemOverlays(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_put_SuppressSystemOverlays(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2* This,boolean value) {
+    return This->lpVtbl->put_SuppressSystemOverlays(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_get_VisibleBounds(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2* This,__x_ABI_CWindows_CFoundation_CRect *value) {
+    return This->lpVtbl->get_VisibleBounds(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_add_VisibleBoundsChanged(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2* This,__FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable *handler,EventRegistrationToken *token) {
+    return This->lpVtbl->add_VisibleBoundsChanged(This,handler,token);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_remove_VisibleBoundsChanged(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2* This,EventRegistrationToken token) {
+    return This->lpVtbl->remove_VisibleBoundsChanged(This,token);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_SetDesiredBoundsMode(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2* This,__x_ABI_CWindows_CUI_CViewManagement_CApplicationViewBoundsMode mode,boolean *success) {
+    return This->lpVtbl->SetDesiredBoundsMode(This,mode,success);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_get_DesiredBoundsMode(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2* This,__x_ABI_CWindows_CUI_CViewManagement_CApplicationViewBoundsMode *value) {
+    return This->lpVtbl->get_DesiredBoundsMode(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define IID_IApplicationView2 IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2
+#define IApplicationView2Vtbl __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2Vtbl
+#define IApplicationView2 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2
+#define IApplicationView2_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_QueryInterface
+#define IApplicationView2_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_AddRef
+#define IApplicationView2_Release __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_Release
+#define IApplicationView2_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_GetIids
+#define IApplicationView2_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_GetRuntimeClassName
+#define IApplicationView2_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_GetTrustLevel
+#define IApplicationView2_get_SuppressSystemOverlays __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_get_SuppressSystemOverlays
+#define IApplicationView2_put_SuppressSystemOverlays __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_put_SuppressSystemOverlays
+#define IApplicationView2_get_VisibleBounds __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_get_VisibleBounds
+#define IApplicationView2_add_VisibleBoundsChanged __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_add_VisibleBoundsChanged
+#define IApplicationView2_remove_VisibleBoundsChanged __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_remove_VisibleBoundsChanged
+#define IApplicationView2_SetDesiredBoundsMode __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_SetDesiredBoundsMode
+#define IApplicationView2_get_DesiredBoundsMode __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_get_DesiredBoundsMode
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView2_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IApplicationView3 interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3, 0x903c9ce5, 0x793a, 0x4fdf, 0xa2,0xb2, 0xaf,0x1a,0xc2,0x1e,0x31,0x08);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                MIDL_INTERFACE("903c9ce5-793a-4fdf-a2b2-af1ac21e3108")
+                IApplicationView3 : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_TitleBar(
+                        ABI::Windows::UI::ViewManagement::IApplicationViewTitleBar **value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_FullScreenSystemOverlayMode(
+                        ABI::Windows::UI::ViewManagement::FullScreenSystemOverlayMode *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_FullScreenSystemOverlayMode(
+                        ABI::Windows::UI::ViewManagement::FullScreenSystemOverlayMode value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_IsFullScreenMode(
+                        boolean *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE TryEnterFullScreenMode(
+                        boolean *success) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE ExitFullScreenMode(
+                        ) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE ShowStandardSystemOverlays(
+                        ) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE TryResizeView(
+                        ABI::Windows::Foundation::Size value,
+                        boolean *success) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE SetPreferredMinSize(
+                        ABI::Windows::Foundation::Size size) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3, 0x903c9ce5, 0x793a, 0x4fdf, 0xa2,0xb2, 0xaf,0x1a,0xc2,0x1e,0x31,0x08)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3 *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3 *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3 *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3 *This,
+        TrustLevel *trustLevel);
+
+    /*** IApplicationView3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_TitleBar)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3 *This,
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_FullScreenSystemOverlayMode)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3 *This,
+        __x_ABI_CWindows_CUI_CViewManagement_CFullScreenSystemOverlayMode *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_FullScreenSystemOverlayMode)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3 *This,
+        __x_ABI_CWindows_CUI_CViewManagement_CFullScreenSystemOverlayMode value);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsFullScreenMode)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3 *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *TryEnterFullScreenMode)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3 *This,
+        boolean *success);
+
+    HRESULT (STDMETHODCALLTYPE *ExitFullScreenMode)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *ShowStandardSystemOverlays)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *TryResizeView)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3 *This,
+        __x_ABI_CWindows_CFoundation_CSize value,
+        boolean *success);
+
+    HRESULT (STDMETHODCALLTYPE *SetPreferredMinSize)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3 *This,
+        __x_ABI_CWindows_CFoundation_CSize size);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3Vtbl;
+
+interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3 {
+    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IApplicationView3 methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_get_TitleBar(This,value) (This)->lpVtbl->get_TitleBar(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_get_FullScreenSystemOverlayMode(This,value) (This)->lpVtbl->get_FullScreenSystemOverlayMode(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_put_FullScreenSystemOverlayMode(This,value) (This)->lpVtbl->put_FullScreenSystemOverlayMode(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_get_IsFullScreenMode(This,value) (This)->lpVtbl->get_IsFullScreenMode(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_TryEnterFullScreenMode(This,success) (This)->lpVtbl->TryEnterFullScreenMode(This,success)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_ExitFullScreenMode(This) (This)->lpVtbl->ExitFullScreenMode(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_ShowStandardSystemOverlays(This) (This)->lpVtbl->ShowStandardSystemOverlays(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_TryResizeView(This,value,success) (This)->lpVtbl->TryResizeView(This,value,success)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_SetPreferredMinSize(This,size) (This)->lpVtbl->SetPreferredMinSize(This,size)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_Release(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IApplicationView3 methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_get_TitleBar(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3* This,__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar **value) {
+    return This->lpVtbl->get_TitleBar(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_get_FullScreenSystemOverlayMode(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3* This,__x_ABI_CWindows_CUI_CViewManagement_CFullScreenSystemOverlayMode *value) {
+    return This->lpVtbl->get_FullScreenSystemOverlayMode(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_put_FullScreenSystemOverlayMode(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3* This,__x_ABI_CWindows_CUI_CViewManagement_CFullScreenSystemOverlayMode value) {
+    return This->lpVtbl->put_FullScreenSystemOverlayMode(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_get_IsFullScreenMode(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3* This,boolean *value) {
+    return This->lpVtbl->get_IsFullScreenMode(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_TryEnterFullScreenMode(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3* This,boolean *success) {
+    return This->lpVtbl->TryEnterFullScreenMode(This,success);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_ExitFullScreenMode(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3* This) {
+    return This->lpVtbl->ExitFullScreenMode(This);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_ShowStandardSystemOverlays(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3* This) {
+    return This->lpVtbl->ShowStandardSystemOverlays(This);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_TryResizeView(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3* This,__x_ABI_CWindows_CFoundation_CSize value,boolean *success) {
+    return This->lpVtbl->TryResizeView(This,value,success);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_SetPreferredMinSize(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3* This,__x_ABI_CWindows_CFoundation_CSize size) {
+    return This->lpVtbl->SetPreferredMinSize(This,size);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define IID_IApplicationView3 IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3
+#define IApplicationView3Vtbl __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3Vtbl
+#define IApplicationView3 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3
+#define IApplicationView3_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_QueryInterface
+#define IApplicationView3_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_AddRef
+#define IApplicationView3_Release __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_Release
+#define IApplicationView3_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_GetIids
+#define IApplicationView3_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_GetRuntimeClassName
+#define IApplicationView3_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_GetTrustLevel
+#define IApplicationView3_get_TitleBar __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_get_TitleBar
+#define IApplicationView3_get_FullScreenSystemOverlayMode __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_get_FullScreenSystemOverlayMode
+#define IApplicationView3_put_FullScreenSystemOverlayMode __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_put_FullScreenSystemOverlayMode
+#define IApplicationView3_get_IsFullScreenMode __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_get_IsFullScreenMode
+#define IApplicationView3_TryEnterFullScreenMode __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_TryEnterFullScreenMode
+#define IApplicationView3_ExitFullScreenMode __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_ExitFullScreenMode
+#define IApplicationView3_ShowStandardSystemOverlays __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_ShowStandardSystemOverlays
+#define IApplicationView3_TryResizeView __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_TryResizeView
+#define IApplicationView3_SetPreferredMinSize __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_SetPreferredMinSize
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView3_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IApplicationView4 interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4, 0x15e5cbec, 0x9e0f, 0x46b5, 0xbc,0x3f, 0x9b,0xf6,0x53,0xe7,0x4b,0x5e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                MIDL_INTERFACE("15e5cbec-9e0f-46b5-bc3f-9bf653e74b5e")
+                IApplicationView4 : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_ViewMode(
+                        ABI::Windows::UI::ViewManagement::ApplicationViewMode *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE IsViewModeSupported(
+                        ABI::Windows::UI::ViewManagement::ApplicationViewMode mode,
+                        boolean *is_mode_supported) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE TryEnterViewModeAsync(
+                        ABI::Windows::UI::ViewManagement::ApplicationViewMode mode,
+                        ABI::Windows::Foundation::IAsyncOperation<boolean > **operation) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE TryEnterViewModeWithPreferencesAsync(
+                        ABI::Windows::UI::ViewManagement::ApplicationViewMode mode,
+                        ABI::Windows::UI::ViewManagement::IViewModePreferences *preferences,
+                        ABI::Windows::Foundation::IAsyncOperation<boolean > **operation) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE TryConsolidateAsync(
+                        ABI::Windows::Foundation::IAsyncOperation<boolean > **operation) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4, 0x15e5cbec, 0x9e0f, 0x46b5, 0xbc,0x3f, 0x9b,0xf6,0x53,0xe7,0x4b,0x5e)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4 *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4 *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4 *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4 *This,
+        TrustLevel *trustLevel);
+
+    /*** IApplicationView4 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_ViewMode)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4 *This,
+        __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewMode *value);
+
+    HRESULT (STDMETHODCALLTYPE *IsViewModeSupported)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4 *This,
+        __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewMode mode,
+        boolean *is_mode_supported);
+
+    HRESULT (STDMETHODCALLTYPE *TryEnterViewModeAsync)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4 *This,
+        __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewMode mode,
+        __FIAsyncOperation_1_boolean **operation);
+
+    HRESULT (STDMETHODCALLTYPE *TryEnterViewModeWithPreferencesAsync)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4 *This,
+        __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewMode mode,
+        __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences *preferences,
+        __FIAsyncOperation_1_boolean **operation);
+
+    HRESULT (STDMETHODCALLTYPE *TryConsolidateAsync)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4 *This,
+        __FIAsyncOperation_1_boolean **operation);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4Vtbl;
+
+interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4 {
+    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IApplicationView4 methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_get_ViewMode(This,value) (This)->lpVtbl->get_ViewMode(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_IsViewModeSupported(This,mode,is_mode_supported) (This)->lpVtbl->IsViewModeSupported(This,mode,is_mode_supported)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_TryEnterViewModeAsync(This,mode,operation) (This)->lpVtbl->TryEnterViewModeAsync(This,mode,operation)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_TryEnterViewModeWithPreferencesAsync(This,mode,preferences,operation) (This)->lpVtbl->TryEnterViewModeWithPreferencesAsync(This,mode,preferences,operation)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_TryConsolidateAsync(This,operation) (This)->lpVtbl->TryConsolidateAsync(This,operation)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_Release(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IApplicationView4 methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_get_ViewMode(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4* This,__x_ABI_CWindows_CUI_CViewManagement_CApplicationViewMode *value) {
+    return This->lpVtbl->get_ViewMode(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_IsViewModeSupported(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4* This,__x_ABI_CWindows_CUI_CViewManagement_CApplicationViewMode mode,boolean *is_mode_supported) {
+    return This->lpVtbl->IsViewModeSupported(This,mode,is_mode_supported);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_TryEnterViewModeAsync(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4* This,__x_ABI_CWindows_CUI_CViewManagement_CApplicationViewMode mode,__FIAsyncOperation_1_boolean **operation) {
+    return This->lpVtbl->TryEnterViewModeAsync(This,mode,operation);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_TryEnterViewModeWithPreferencesAsync(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4* This,__x_ABI_CWindows_CUI_CViewManagement_CApplicationViewMode mode,__x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences *preferences,__FIAsyncOperation_1_boolean **operation) {
+    return This->lpVtbl->TryEnterViewModeWithPreferencesAsync(This,mode,preferences,operation);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_TryConsolidateAsync(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4* This,__FIAsyncOperation_1_boolean **operation) {
+    return This->lpVtbl->TryConsolidateAsync(This,operation);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define IID_IApplicationView4 IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4
+#define IApplicationView4Vtbl __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4Vtbl
+#define IApplicationView4 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4
+#define IApplicationView4_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_QueryInterface
+#define IApplicationView4_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_AddRef
+#define IApplicationView4_Release __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_Release
+#define IApplicationView4_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_GetIids
+#define IApplicationView4_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_GetRuntimeClassName
+#define IApplicationView4_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_GetTrustLevel
+#define IApplicationView4_get_ViewMode __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_get_ViewMode
+#define IApplicationView4_IsViewModeSupported __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_IsViewModeSupported
+#define IApplicationView4_TryEnterViewModeAsync __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_TryEnterViewModeAsync
+#define IApplicationView4_TryEnterViewModeWithPreferencesAsync __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_TryEnterViewModeWithPreferencesAsync
+#define IApplicationView4_TryConsolidateAsync __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_TryConsolidateAsync
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView4_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000 */
+
+/*****************************************************************************
+ * IApplicationView7 interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7, 0xa0369647, 0x5faf, 0x5aa6, 0x9c,0x38, 0xbe,0xfb,0xb1,0x2a,0x07,0x1e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                MIDL_INTERFACE("a0369647-5faf-5aa6-9c38-befbb12a071e")
+                IApplicationView7 : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_PersistedStateId(
+                        HSTRING *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_PersistedStateId(
+                        HSTRING value) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7, 0xa0369647, 0x5faf, 0x5aa6, 0x9c,0x38, 0xbe,0xfb,0xb1,0x2a,0x07,0x1e)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7 *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7 *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7 *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7 *This,
+        TrustLevel *trustLevel);
+
+    /*** IApplicationView7 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_PersistedStateId)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7 *This,
+        HSTRING *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_PersistedStateId)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7 *This,
+        HSTRING value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7Vtbl;
+
+interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7 {
+    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IApplicationView7 methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_get_PersistedStateId(This,value) (This)->lpVtbl->get_PersistedStateId(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_put_PersistedStateId(This,value) (This)->lpVtbl->put_PersistedStateId(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_Release(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IApplicationView7 methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_get_PersistedStateId(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7* This,HSTRING *value) {
+    return This->lpVtbl->get_PersistedStateId(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_put_PersistedStateId(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7* This,HSTRING value) {
+    return This->lpVtbl->put_PersistedStateId(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define IID_IApplicationView7 IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7
+#define IApplicationView7Vtbl __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7Vtbl
+#define IApplicationView7 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7
+#define IApplicationView7_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_QueryInterface
+#define IApplicationView7_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_AddRef
+#define IApplicationView7_Release __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_Release
+#define IApplicationView7_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_GetIids
+#define IApplicationView7_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_GetRuntimeClassName
+#define IApplicationView7_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_GetTrustLevel
+#define IApplicationView7_get_PersistedStateId __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_get_PersistedStateId
+#define IApplicationView7_put_PersistedStateId __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_put_PersistedStateId
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView7_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000 */
+
+/*****************************************************************************
+ * IApplicationView9 interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9, 0x9c6516f9, 0x021a, 0x5f01, 0x93,0xe5, 0x9b,0xda,0xd2,0x64,0x75,0x74);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                MIDL_INTERFACE("9c6516f9-021a-5f01-93e5-9bdad2647574")
+                IApplicationView9 : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_WindowingEnvironment(
+                        ABI::Windows::UI::WindowManagement::IWindowingEnvironment **value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE GetDisplayRegions(
+                        ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::UI::WindowManagement::DisplayRegion* > **result) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9, 0x9c6516f9, 0x021a, 0x5f01, 0x93,0xe5, 0x9b,0xda,0xd2,0x64,0x75,0x74)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9 *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9 *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9 *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9 *This,
+        TrustLevel *trustLevel);
+
+    /*** IApplicationView9 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_WindowingEnvironment)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9 *This,
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment **value);
+
+    HRESULT (STDMETHODCALLTYPE *GetDisplayRegions)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9 *This,
+        __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion **result);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9Vtbl;
+
+interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9 {
+    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IApplicationView9 methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_get_WindowingEnvironment(This,value) (This)->lpVtbl->get_WindowingEnvironment(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_GetDisplayRegions(This,result) (This)->lpVtbl->GetDisplayRegions(This,result)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_Release(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IApplicationView9 methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_get_WindowingEnvironment(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9* This,__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment **value) {
+    return This->lpVtbl->get_WindowingEnvironment(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_GetDisplayRegions(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9* This,__FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion **result) {
+    return This->lpVtbl->GetDisplayRegions(This,result);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define IID_IApplicationView9 IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9
+#define IApplicationView9Vtbl __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9Vtbl
+#define IApplicationView9 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9
+#define IApplicationView9_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_QueryInterface
+#define IApplicationView9_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_AddRef
+#define IApplicationView9_Release __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_Release
+#define IApplicationView9_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_GetIids
+#define IApplicationView9_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_GetRuntimeClassName
+#define IApplicationView9_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_GetTrustLevel
+#define IApplicationView9_get_WindowingEnvironment __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_get_WindowingEnvironment
+#define IApplicationView9_GetDisplayRegions __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_GetDisplayRegions
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationView9_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000 */
+
+/*****************************************************************************
+ * IApplicationViewConsolidatedEventArgs interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs, 0x514449ec, 0x7ea2, 0x4de7, 0xa6,0xa6, 0x7d,0xfb,0xaa,0xeb,0xb6,0xfb);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                MIDL_INTERFACE("514449ec-7ea2-4de7-a6a6-7dfbaaebb6fb")
+                IApplicationViewConsolidatedEventArgs : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_IsUserInitiated(
+                        boolean *value) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs, 0x514449ec, 0x7ea2, 0x4de7, 0xa6,0xa6, 0x7d,0xfb,0xaa,0xeb,0xb6,0xfb)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs *This,
+        TrustLevel *trustLevel);
+
+    /*** IApplicationViewConsolidatedEventArgs methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_IsUserInitiated)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs *This,
+        boolean *value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgsVtbl;
+
+interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs {
+    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IApplicationViewConsolidatedEventArgs methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_get_IsUserInitiated(This,value) (This)->lpVtbl->get_IsUserInitiated(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_Release(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IApplicationViewConsolidatedEventArgs methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_get_IsUserInitiated(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs* This,boolean *value) {
+    return This->lpVtbl->get_IsUserInitiated(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define IID_IApplicationViewConsolidatedEventArgs IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs
+#define IApplicationViewConsolidatedEventArgsVtbl __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgsVtbl
+#define IApplicationViewConsolidatedEventArgs __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs
+#define IApplicationViewConsolidatedEventArgs_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_QueryInterface
+#define IApplicationViewConsolidatedEventArgs_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_AddRef
+#define IApplicationViewConsolidatedEventArgs_Release __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_Release
+#define IApplicationViewConsolidatedEventArgs_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_GetIids
+#define IApplicationViewConsolidatedEventArgs_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_GetRuntimeClassName
+#define IApplicationViewConsolidatedEventArgs_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_GetTrustLevel
+#define IApplicationViewConsolidatedEventArgs_get_IsUserInitiated __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_get_IsUserInitiated
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IApplicationViewConsolidatedEventArgs2 interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2, 0x1c199ecc, 0x6dc1, 0x40f4, 0xaf,0xee, 0x07,0xd9,0xea,0x29,0x64,0x30);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                MIDL_INTERFACE("1c199ecc-6dc1-40f4-afee-07d9ea296430")
+                IApplicationViewConsolidatedEventArgs2 : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_IsAppInitiated(
+                        boolean *value) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2, 0x1c199ecc, 0x6dc1, 0x40f4, 0xaf,0xee, 0x07,0xd9,0xea,0x29,0x64,0x30)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2 *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2 *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2 *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2 *This,
+        TrustLevel *trustLevel);
+
+    /*** IApplicationViewConsolidatedEventArgs2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_IsAppInitiated)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2 *This,
+        boolean *value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2Vtbl;
+
+interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2 {
+    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IApplicationViewConsolidatedEventArgs2 methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_get_IsAppInitiated(This,value) (This)->lpVtbl->get_IsAppInitiated(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_Release(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IApplicationViewConsolidatedEventArgs2 methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_get_IsAppInitiated(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2* This,boolean *value) {
+    return This->lpVtbl->get_IsAppInitiated(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define IID_IApplicationViewConsolidatedEventArgs2 IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2
+#define IApplicationViewConsolidatedEventArgs2Vtbl __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2Vtbl
+#define IApplicationViewConsolidatedEventArgs2 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2
+#define IApplicationViewConsolidatedEventArgs2_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_QueryInterface
+#define IApplicationViewConsolidatedEventArgs2_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_AddRef
+#define IApplicationViewConsolidatedEventArgs2_Release __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_Release
+#define IApplicationViewConsolidatedEventArgs2_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_GetIids
+#define IApplicationViewConsolidatedEventArgs2_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_GetRuntimeClassName
+#define IApplicationViewConsolidatedEventArgs2_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_GetTrustLevel
+#define IApplicationViewConsolidatedEventArgs2_get_IsAppInitiated __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_get_IsAppInitiated
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs2_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000 */
+
+/*****************************************************************************
+ * IApplicationViewFullscreenStatics interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics, 0xbc792ebd, 0x64fe, 0x4b65, 0xa0,0xc0, 0x90,0x1c,0xe2,0xb6,0x86,0x36);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                MIDL_INTERFACE("bc792ebd-64fe-4b65-a0c0-901ce2b68636")
+                IApplicationViewFullscreenStatics : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE TryUnsnapToFullscreen(
+                        boolean *success) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics, 0xbc792ebd, 0x64fe, 0x4b65, 0xa0,0xc0, 0x90,0x1c,0xe2,0xb6,0x86,0x36)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStaticsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics *This,
+        TrustLevel *trustLevel);
+
+    /*** IApplicationViewFullscreenStatics methods ***/
+    HRESULT (STDMETHODCALLTYPE *TryUnsnapToFullscreen)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics *This,
+        boolean *success);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStaticsVtbl;
+
+interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics {
+    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStaticsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IApplicationViewFullscreenStatics methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_TryUnsnapToFullscreen(This,success) (This)->lpVtbl->TryUnsnapToFullscreen(This,success)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_Release(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IApplicationViewFullscreenStatics methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_TryUnsnapToFullscreen(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics* This,boolean *success) {
+    return This->lpVtbl->TryUnsnapToFullscreen(This,success);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define IID_IApplicationViewFullscreenStatics IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics
+#define IApplicationViewFullscreenStaticsVtbl __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStaticsVtbl
+#define IApplicationViewFullscreenStatics __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics
+#define IApplicationViewFullscreenStatics_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_QueryInterface
+#define IApplicationViewFullscreenStatics_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_AddRef
+#define IApplicationViewFullscreenStatics_Release __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_Release
+#define IApplicationViewFullscreenStatics_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_GetIids
+#define IApplicationViewFullscreenStatics_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_GetRuntimeClassName
+#define IApplicationViewFullscreenStatics_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_GetTrustLevel
+#define IApplicationViewFullscreenStatics_TryUnsnapToFullscreen __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_TryUnsnapToFullscreen
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewFullscreenStatics_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IApplicationViewInteropStatics interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics, 0xc446fb5d, 0x4793, 0x4896, 0xa8,0xe2, 0xbe,0x57,0xa8,0xbb,0x0f,0x50);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                MIDL_INTERFACE("c446fb5d-4793-4896-a8e2-be57a8bb0f50")
+                IApplicationViewInteropStatics : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE GetApplicationViewIdForWindow(
+                        ABI::Windows::UI::Core::ICoreWindow *window,
+                        INT32 *id) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics, 0xc446fb5d, 0x4793, 0x4896, 0xa8,0xe2, 0xbe,0x57,0xa8,0xbb,0x0f,0x50)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStaticsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics *This,
+        TrustLevel *trustLevel);
+
+    /*** IApplicationViewInteropStatics methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetApplicationViewIdForWindow)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics *This,
+        __x_ABI_CWindows_CUI_CCore_CICoreWindow *window,
+        INT32 *id);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStaticsVtbl;
+
+interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics {
+    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStaticsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IApplicationViewInteropStatics methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_GetApplicationViewIdForWindow(This,window,id) (This)->lpVtbl->GetApplicationViewIdForWindow(This,window,id)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_Release(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IApplicationViewInteropStatics methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_GetApplicationViewIdForWindow(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics* This,__x_ABI_CWindows_CUI_CCore_CICoreWindow *window,INT32 *id) {
+    return This->lpVtbl->GetApplicationViewIdForWindow(This,window,id);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define IID_IApplicationViewInteropStatics IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics
+#define IApplicationViewInteropStaticsVtbl __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStaticsVtbl
+#define IApplicationViewInteropStatics __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics
+#define IApplicationViewInteropStatics_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_QueryInterface
+#define IApplicationViewInteropStatics_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_AddRef
+#define IApplicationViewInteropStatics_Release __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_Release
+#define IApplicationViewInteropStatics_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_GetIids
+#define IApplicationViewInteropStatics_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_GetRuntimeClassName
+#define IApplicationViewInteropStatics_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_GetTrustLevel
+#define IApplicationViewInteropStatics_GetApplicationViewIdForWindow __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_GetApplicationViewIdForWindow
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewInteropStatics_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IApplicationViewScaling interface
+ */
+#if WINDOWS_UI_VIEWMANAGEMENT_VIEWMANAGEMENTVIEWSCALINGCONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling, 0x1d0ddc23, 0x23f3, 0x4b2d, 0x84,0xfe, 0x74,0xbf,0x37,0xb4,0x8b,0x66);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                MIDL_INTERFACE("1d0ddc23-23f3-4b2d-84fe-74bf37b48b66")
+                IApplicationViewScaling : public IInspectable
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling, 0x1d0ddc23, 0x23f3, 0x4b2d, 0x84,0xfe, 0x74,0xbf,0x37,0xb4,0x8b,0x66)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling *This,
+        TrustLevel *trustLevel);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingVtbl;
+
+interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling {
+    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling_Release(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define IID_IApplicationViewScaling IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling
+#define IApplicationViewScalingVtbl __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingVtbl
+#define IApplicationViewScaling __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling
+#define IApplicationViewScaling_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling_QueryInterface
+#define IApplicationViewScaling_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling_AddRef
+#define IApplicationViewScaling_Release __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling_Release
+#define IApplicationViewScaling_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling_GetIids
+#define IApplicationViewScaling_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling_GetRuntimeClassName
+#define IApplicationViewScaling_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling_GetTrustLevel
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScaling_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_UI_VIEWMANAGEMENT_VIEWMANAGEMENTVIEWSCALINGCONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IApplicationViewScalingStatics interface
+ */
+#if WINDOWS_UI_VIEWMANAGEMENT_VIEWMANAGEMENTVIEWSCALINGCONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics, 0xb08fecf0, 0xb946, 0x45c8, 0xa5,0xe3, 0x71,0xf5,0xaa,0x78,0xf8,0x61);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                MIDL_INTERFACE("b08fecf0-b946-45c8-a5e3-71f5aa78f861")
+                IApplicationViewScalingStatics : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_DisableLayoutScaling(
+                        boolean *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE TrySetDisableLayoutScaling(
+                        boolean disabled,
+                        boolean *success) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics, 0xb08fecf0, 0xb946, 0x45c8, 0xa5,0xe3, 0x71,0xf5,0xaa,0x78,0xf8,0x61)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStaticsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics *This,
+        TrustLevel *trustLevel);
+
+    /*** IApplicationViewScalingStatics methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_DisableLayoutScaling)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *TrySetDisableLayoutScaling)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics *This,
+        boolean disabled,
+        boolean *success);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStaticsVtbl;
+
+interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics {
+    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStaticsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IApplicationViewScalingStatics methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_get_DisableLayoutScaling(This,value) (This)->lpVtbl->get_DisableLayoutScaling(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_TrySetDisableLayoutScaling(This,disabled,success) (This)->lpVtbl->TrySetDisableLayoutScaling(This,disabled,success)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_Release(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IApplicationViewScalingStatics methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_get_DisableLayoutScaling(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics* This,boolean *value) {
+    return This->lpVtbl->get_DisableLayoutScaling(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_TrySetDisableLayoutScaling(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics* This,boolean disabled,boolean *success) {
+    return This->lpVtbl->TrySetDisableLayoutScaling(This,disabled,success);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define IID_IApplicationViewScalingStatics IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics
+#define IApplicationViewScalingStaticsVtbl __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStaticsVtbl
+#define IApplicationViewScalingStatics __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics
+#define IApplicationViewScalingStatics_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_QueryInterface
+#define IApplicationViewScalingStatics_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_AddRef
+#define IApplicationViewScalingStatics_Release __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_Release
+#define IApplicationViewScalingStatics_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_GetIids
+#define IApplicationViewScalingStatics_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_GetRuntimeClassName
+#define IApplicationViewScalingStatics_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_GetTrustLevel
+#define IApplicationViewScalingStatics_get_DisableLayoutScaling __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_get_DisableLayoutScaling
+#define IApplicationViewScalingStatics_TrySetDisableLayoutScaling __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_TrySetDisableLayoutScaling
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewScalingStatics_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_UI_VIEWMANAGEMENT_VIEWMANAGEMENTVIEWSCALINGCONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IApplicationViewStatics interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics, 0x010a6306, 0xc433, 0x44e5, 0xa9,0xf2, 0xbd,0x84,0xd4,0x03,0x0a,0x95);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                MIDL_INTERFACE("010a6306-c433-44e5-a9f2-bd84d4030a95")
+                IApplicationViewStatics : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_Value(
+                        ABI::Windows::UI::ViewManagement::ApplicationViewState *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE TryUnsnap(
+                        boolean *success) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics, 0x010a6306, 0xc433, 0x44e5, 0xa9,0xf2, 0xbd,0x84,0xd4,0x03,0x0a,0x95)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStaticsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics *This,
+        TrustLevel *trustLevel);
+
+    /*** IApplicationViewStatics methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Value)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics *This,
+        __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewState *value);
+
+    HRESULT (STDMETHODCALLTYPE *TryUnsnap)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics *This,
+        boolean *success);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStaticsVtbl;
+
+interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics {
+    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStaticsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IApplicationViewStatics methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_get_Value(This,value) (This)->lpVtbl->get_Value(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_TryUnsnap(This,success) (This)->lpVtbl->TryUnsnap(This,success)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_Release(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IApplicationViewStatics methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_get_Value(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics* This,__x_ABI_CWindows_CUI_CViewManagement_CApplicationViewState *value) {
+    return This->lpVtbl->get_Value(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_TryUnsnap(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics* This,boolean *success) {
+    return This->lpVtbl->TryUnsnap(This,success);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define IID_IApplicationViewStatics IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics
+#define IApplicationViewStaticsVtbl __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStaticsVtbl
+#define IApplicationViewStatics __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics
+#define IApplicationViewStatics_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_QueryInterface
+#define IApplicationViewStatics_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_AddRef
+#define IApplicationViewStatics_Release __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_Release
+#define IApplicationViewStatics_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_GetIids
+#define IApplicationViewStatics_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_GetRuntimeClassName
+#define IApplicationViewStatics_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_GetTrustLevel
+#define IApplicationViewStatics_get_Value __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_get_Value
+#define IApplicationViewStatics_TryUnsnap __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_TryUnsnap
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IApplicationViewStatics2 interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2, 0xaf338ae5, 0xcf64, 0x423c, 0x85,0xe5, 0xf3,0xe7,0x24,0x48,0xfb,0x23);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                MIDL_INTERFACE("af338ae5-cf64-423c-85e5-f3e72448fb23")
+                IApplicationViewStatics2 : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE GetForCurrentView(
+                        ABI::Windows::UI::ViewManagement::IApplicationView **current) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_TerminateAppOnFinalViewClose(
+                        boolean *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_TerminateAppOnFinalViewClose(
+                        boolean value) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2, 0xaf338ae5, 0xcf64, 0x423c, 0x85,0xe5, 0xf3,0xe7,0x24,0x48,0xfb,0x23)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2 *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2 *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2 *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2 *This,
+        TrustLevel *trustLevel);
+
+    /*** IApplicationViewStatics2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetForCurrentView)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2 *This,
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView **current);
+
+    HRESULT (STDMETHODCALLTYPE *get_TerminateAppOnFinalViewClose)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2 *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_TerminateAppOnFinalViewClose)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2 *This,
+        boolean value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2Vtbl;
+
+interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2 {
+    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IApplicationViewStatics2 methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_GetForCurrentView(This,current) (This)->lpVtbl->GetForCurrentView(This,current)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_get_TerminateAppOnFinalViewClose(This,value) (This)->lpVtbl->get_TerminateAppOnFinalViewClose(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_put_TerminateAppOnFinalViewClose(This,value) (This)->lpVtbl->put_TerminateAppOnFinalViewClose(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_Release(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IApplicationViewStatics2 methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_GetForCurrentView(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2* This,__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView **current) {
+    return This->lpVtbl->GetForCurrentView(This,current);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_get_TerminateAppOnFinalViewClose(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2* This,boolean *value) {
+    return This->lpVtbl->get_TerminateAppOnFinalViewClose(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_put_TerminateAppOnFinalViewClose(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2* This,boolean value) {
+    return This->lpVtbl->put_TerminateAppOnFinalViewClose(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define IID_IApplicationViewStatics2 IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2
+#define IApplicationViewStatics2Vtbl __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2Vtbl
+#define IApplicationViewStatics2 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2
+#define IApplicationViewStatics2_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_QueryInterface
+#define IApplicationViewStatics2_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_AddRef
+#define IApplicationViewStatics2_Release __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_Release
+#define IApplicationViewStatics2_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_GetIids
+#define IApplicationViewStatics2_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_GetRuntimeClassName
+#define IApplicationViewStatics2_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_GetTrustLevel
+#define IApplicationViewStatics2_GetForCurrentView __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_GetForCurrentView
+#define IApplicationViewStatics2_get_TerminateAppOnFinalViewClose __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_get_TerminateAppOnFinalViewClose
+#define IApplicationViewStatics2_put_TerminateAppOnFinalViewClose __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_put_TerminateAppOnFinalViewClose
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics2_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IApplicationViewStatics3 interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3, 0xa28d7594, 0x8c41, 0x4e13, 0x97,0x19, 0x51,0x64,0x79,0x6f,0xe4,0xc7);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                MIDL_INTERFACE("a28d7594-8c41-4e13-9719-5164796fe4c7")
+                IApplicationViewStatics3 : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_PreferredLaunchWindowingMode(
+                        ABI::Windows::UI::ViewManagement::ApplicationViewWindowingMode *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_PreferredLaunchWindowingMode(
+                        ABI::Windows::UI::ViewManagement::ApplicationViewWindowingMode value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_PreferredLaunchViewSize(
+                        ABI::Windows::Foundation::Size *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_PreferredLaunchViewSize(
+                        ABI::Windows::Foundation::Size value) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3, 0xa28d7594, 0x8c41, 0x4e13, 0x97,0x19, 0x51,0x64,0x79,0x6f,0xe4,0xc7)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3 *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3 *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3 *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3 *This,
+        TrustLevel *trustLevel);
+
+    /*** IApplicationViewStatics3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_PreferredLaunchWindowingMode)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3 *This,
+        __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewWindowingMode *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_PreferredLaunchWindowingMode)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3 *This,
+        __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewWindowingMode value);
+
+    HRESULT (STDMETHODCALLTYPE *get_PreferredLaunchViewSize)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3 *This,
+        __x_ABI_CWindows_CFoundation_CSize *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_PreferredLaunchViewSize)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3 *This,
+        __x_ABI_CWindows_CFoundation_CSize value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3Vtbl;
+
+interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3 {
+    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IApplicationViewStatics3 methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_get_PreferredLaunchWindowingMode(This,value) (This)->lpVtbl->get_PreferredLaunchWindowingMode(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_put_PreferredLaunchWindowingMode(This,value) (This)->lpVtbl->put_PreferredLaunchWindowingMode(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_get_PreferredLaunchViewSize(This,value) (This)->lpVtbl->get_PreferredLaunchViewSize(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_put_PreferredLaunchViewSize(This,value) (This)->lpVtbl->put_PreferredLaunchViewSize(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_Release(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IApplicationViewStatics3 methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_get_PreferredLaunchWindowingMode(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3* This,__x_ABI_CWindows_CUI_CViewManagement_CApplicationViewWindowingMode *value) {
+    return This->lpVtbl->get_PreferredLaunchWindowingMode(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_put_PreferredLaunchWindowingMode(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3* This,__x_ABI_CWindows_CUI_CViewManagement_CApplicationViewWindowingMode value) {
+    return This->lpVtbl->put_PreferredLaunchWindowingMode(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_get_PreferredLaunchViewSize(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3* This,__x_ABI_CWindows_CFoundation_CSize *value) {
+    return This->lpVtbl->get_PreferredLaunchViewSize(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_put_PreferredLaunchViewSize(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3* This,__x_ABI_CWindows_CFoundation_CSize value) {
+    return This->lpVtbl->put_PreferredLaunchViewSize(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define IID_IApplicationViewStatics3 IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3
+#define IApplicationViewStatics3Vtbl __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3Vtbl
+#define IApplicationViewStatics3 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3
+#define IApplicationViewStatics3_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_QueryInterface
+#define IApplicationViewStatics3_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_AddRef
+#define IApplicationViewStatics3_Release __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_Release
+#define IApplicationViewStatics3_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_GetIids
+#define IApplicationViewStatics3_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_GetRuntimeClassName
+#define IApplicationViewStatics3_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_GetTrustLevel
+#define IApplicationViewStatics3_get_PreferredLaunchWindowingMode __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_get_PreferredLaunchWindowingMode
+#define IApplicationViewStatics3_put_PreferredLaunchWindowingMode __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_put_PreferredLaunchWindowingMode
+#define IApplicationViewStatics3_get_PreferredLaunchViewSize __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_get_PreferredLaunchViewSize
+#define IApplicationViewStatics3_put_PreferredLaunchViewSize __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_put_PreferredLaunchViewSize
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics3_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IApplicationViewStatics4 interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4, 0x08fd8d33, 0x2611, 0x5336, 0xa3,0x15, 0xd9,0x8e,0x63,0x66,0xc9,0xdb);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                MIDL_INTERFACE("08fd8d33-2611-5336-a315-d98e6366c9db")
+                IApplicationViewStatics4 : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE ClearAllPersistedState(
+                        ) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE ClearPersistedState(
+                        HSTRING key) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4, 0x08fd8d33, 0x2611, 0x5336, 0xa3,0x15, 0xd9,0x8e,0x63,0x66,0xc9,0xdb)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4 *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4 *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4 *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4 *This,
+        TrustLevel *trustLevel);
+
+    /*** IApplicationViewStatics4 methods ***/
+    HRESULT (STDMETHODCALLTYPE *ClearAllPersistedState)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4 *This);
+
+    HRESULT (STDMETHODCALLTYPE *ClearPersistedState)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4 *This,
+        HSTRING key);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4Vtbl;
+
+interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4 {
+    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IApplicationViewStatics4 methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_ClearAllPersistedState(This) (This)->lpVtbl->ClearAllPersistedState(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_ClearPersistedState(This,key) (This)->lpVtbl->ClearPersistedState(This,key)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_Release(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IApplicationViewStatics4 methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_ClearAllPersistedState(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4* This) {
+    return This->lpVtbl->ClearAllPersistedState(This);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_ClearPersistedState(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4* This,HSTRING key) {
+    return This->lpVtbl->ClearPersistedState(This,key);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define IID_IApplicationViewStatics4 IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4
+#define IApplicationViewStatics4Vtbl __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4Vtbl
+#define IApplicationViewStatics4 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4
+#define IApplicationViewStatics4_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_QueryInterface
+#define IApplicationViewStatics4_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_AddRef
+#define IApplicationViewStatics4_Release __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_Release
+#define IApplicationViewStatics4_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_GetIids
+#define IApplicationViewStatics4_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_GetRuntimeClassName
+#define IApplicationViewStatics4_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_GetTrustLevel
+#define IApplicationViewStatics4_ClearAllPersistedState __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_ClearAllPersistedState
+#define IApplicationViewStatics4_ClearPersistedState __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_ClearPersistedState
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewStatics4_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000 */
+
+/*****************************************************************************
+ * IApplicationViewSwitcherStatics interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics, 0x975f2f1e, 0xe656, 0x4c5e, 0xa0,0xa1, 0x71,0x7c,0x6f,0xfa,0x7d,0x64);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                MIDL_INTERFACE("975f2f1e-e656-4c5e-a0a1-717c6ffa7d64")
+                IApplicationViewSwitcherStatics : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE DisableShowingMainViewOnActivation(
+                        ) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE TryShowAsStandaloneAsync(
+                        INT32 view_id,
+                        ABI::Windows::Foundation::IAsyncOperation<boolean > **operation) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE TryShowAsStandaloneWithSizePreferenceAsync(
+                        INT32 view_id,
+                        ABI::Windows::UI::ViewManagement::ViewSizePreference preference,
+                        ABI::Windows::Foundation::IAsyncOperation<boolean > **operation) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE TryShowAsStandaloneWithAnchorViewAndSizePreferenceAsync(
+                        INT32 view_id,
+                        ABI::Windows::UI::ViewManagement::ViewSizePreference size_preference,
+                        INT32 anchor_view_id,
+                        ABI::Windows::UI::ViewManagement::ViewSizePreference anchor_size_preference,
+                        ABI::Windows::Foundation::IAsyncOperation<boolean > **operation) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE SwitchAsync(
+                        INT32 view_id,
+                        ABI::Windows::Foundation::IAsyncAction **operation) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE SwitchFromViewAsync(
+                        INT32 to_view_id,
+                        INT32 from_view_id,
+                        ABI::Windows::Foundation::IAsyncAction **operation) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE SwitchFromViewWithOptionsAsync(
+                        INT32 to_view_id,
+                        INT32 from_view_id,
+                        ABI::Windows::UI::ViewManagement::ApplicationViewSwitchingOptions options,
+                        ABI::Windows::Foundation::IAsyncAction **operation) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE PrepareForCustomAnimatedSwitchAsync(
+                        INT32 to_view_id,
+                        INT32 from_view_id,
+                        ABI::Windows::UI::ViewManagement::ApplicationViewSwitchingOptions options,
+                        ABI::Windows::Foundation::IAsyncOperation<boolean > **operation) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics, 0x975f2f1e, 0xe656, 0x4c5e, 0xa0,0xa1, 0x71,0x7c,0x6f,0xfa,0x7d,0x64)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStaticsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics *This,
+        TrustLevel *trustLevel);
+
+    /*** IApplicationViewSwitcherStatics methods ***/
+    HRESULT (STDMETHODCALLTYPE *DisableShowingMainViewOnActivation)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics *This);
+
+    HRESULT (STDMETHODCALLTYPE *TryShowAsStandaloneAsync)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics *This,
+        INT32 view_id,
+        __FIAsyncOperation_1_boolean **operation);
+
+    HRESULT (STDMETHODCALLTYPE *TryShowAsStandaloneWithSizePreferenceAsync)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics *This,
+        INT32 view_id,
+        __x_ABI_CWindows_CUI_CViewManagement_CViewSizePreference preference,
+        __FIAsyncOperation_1_boolean **operation);
+
+    HRESULT (STDMETHODCALLTYPE *TryShowAsStandaloneWithAnchorViewAndSizePreferenceAsync)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics *This,
+        INT32 view_id,
+        __x_ABI_CWindows_CUI_CViewManagement_CViewSizePreference size_preference,
+        INT32 anchor_view_id,
+        __x_ABI_CWindows_CUI_CViewManagement_CViewSizePreference anchor_size_preference,
+        __FIAsyncOperation_1_boolean **operation);
+
+    HRESULT (STDMETHODCALLTYPE *SwitchAsync)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics *This,
+        INT32 view_id,
+        __x_ABI_CWindows_CFoundation_CIAsyncAction **operation);
+
+    HRESULT (STDMETHODCALLTYPE *SwitchFromViewAsync)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics *This,
+        INT32 to_view_id,
+        INT32 from_view_id,
+        __x_ABI_CWindows_CFoundation_CIAsyncAction **operation);
+
+    HRESULT (STDMETHODCALLTYPE *SwitchFromViewWithOptionsAsync)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics *This,
+        INT32 to_view_id,
+        INT32 from_view_id,
+        __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewSwitchingOptions options,
+        __x_ABI_CWindows_CFoundation_CIAsyncAction **operation);
+
+    HRESULT (STDMETHODCALLTYPE *PrepareForCustomAnimatedSwitchAsync)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics *This,
+        INT32 to_view_id,
+        INT32 from_view_id,
+        __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewSwitchingOptions options,
+        __FIAsyncOperation_1_boolean **operation);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStaticsVtbl;
+
+interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics {
+    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStaticsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IApplicationViewSwitcherStatics methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_DisableShowingMainViewOnActivation(This) (This)->lpVtbl->DisableShowingMainViewOnActivation(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_TryShowAsStandaloneAsync(This,view_id,operation) (This)->lpVtbl->TryShowAsStandaloneAsync(This,view_id,operation)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_TryShowAsStandaloneWithSizePreferenceAsync(This,view_id,preference,operation) (This)->lpVtbl->TryShowAsStandaloneWithSizePreferenceAsync(This,view_id,preference,operation)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_TryShowAsStandaloneWithAnchorViewAndSizePreferenceAsync(This,view_id,size_preference,anchor_view_id,anchor_size_preference,operation) (This)->lpVtbl->TryShowAsStandaloneWithAnchorViewAndSizePreferenceAsync(This,view_id,size_preference,anchor_view_id,anchor_size_preference,operation)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_SwitchAsync(This,view_id,operation) (This)->lpVtbl->SwitchAsync(This,view_id,operation)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_SwitchFromViewAsync(This,to_view_id,from_view_id,operation) (This)->lpVtbl->SwitchFromViewAsync(This,to_view_id,from_view_id,operation)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_SwitchFromViewWithOptionsAsync(This,to_view_id,from_view_id,options,operation) (This)->lpVtbl->SwitchFromViewWithOptionsAsync(This,to_view_id,from_view_id,options,operation)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_PrepareForCustomAnimatedSwitchAsync(This,to_view_id,from_view_id,options,operation) (This)->lpVtbl->PrepareForCustomAnimatedSwitchAsync(This,to_view_id,from_view_id,options,operation)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_Release(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IApplicationViewSwitcherStatics methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_DisableShowingMainViewOnActivation(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics* This) {
+    return This->lpVtbl->DisableShowingMainViewOnActivation(This);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_TryShowAsStandaloneAsync(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics* This,INT32 view_id,__FIAsyncOperation_1_boolean **operation) {
+    return This->lpVtbl->TryShowAsStandaloneAsync(This,view_id,operation);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_TryShowAsStandaloneWithSizePreferenceAsync(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics* This,INT32 view_id,__x_ABI_CWindows_CUI_CViewManagement_CViewSizePreference preference,__FIAsyncOperation_1_boolean **operation) {
+    return This->lpVtbl->TryShowAsStandaloneWithSizePreferenceAsync(This,view_id,preference,operation);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_TryShowAsStandaloneWithAnchorViewAndSizePreferenceAsync(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics* This,INT32 view_id,__x_ABI_CWindows_CUI_CViewManagement_CViewSizePreference size_preference,INT32 anchor_view_id,__x_ABI_CWindows_CUI_CViewManagement_CViewSizePreference anchor_size_preference,__FIAsyncOperation_1_boolean **operation) {
+    return This->lpVtbl->TryShowAsStandaloneWithAnchorViewAndSizePreferenceAsync(This,view_id,size_preference,anchor_view_id,anchor_size_preference,operation);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_SwitchAsync(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics* This,INT32 view_id,__x_ABI_CWindows_CFoundation_CIAsyncAction **operation) {
+    return This->lpVtbl->SwitchAsync(This,view_id,operation);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_SwitchFromViewAsync(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics* This,INT32 to_view_id,INT32 from_view_id,__x_ABI_CWindows_CFoundation_CIAsyncAction **operation) {
+    return This->lpVtbl->SwitchFromViewAsync(This,to_view_id,from_view_id,operation);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_SwitchFromViewWithOptionsAsync(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics* This,INT32 to_view_id,INT32 from_view_id,__x_ABI_CWindows_CUI_CViewManagement_CApplicationViewSwitchingOptions options,__x_ABI_CWindows_CFoundation_CIAsyncAction **operation) {
+    return This->lpVtbl->SwitchFromViewWithOptionsAsync(This,to_view_id,from_view_id,options,operation);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_PrepareForCustomAnimatedSwitchAsync(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics* This,INT32 to_view_id,INT32 from_view_id,__x_ABI_CWindows_CUI_CViewManagement_CApplicationViewSwitchingOptions options,__FIAsyncOperation_1_boolean **operation) {
+    return This->lpVtbl->PrepareForCustomAnimatedSwitchAsync(This,to_view_id,from_view_id,options,operation);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define IID_IApplicationViewSwitcherStatics IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics
+#define IApplicationViewSwitcherStaticsVtbl __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStaticsVtbl
+#define IApplicationViewSwitcherStatics __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics
+#define IApplicationViewSwitcherStatics_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_QueryInterface
+#define IApplicationViewSwitcherStatics_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_AddRef
+#define IApplicationViewSwitcherStatics_Release __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_Release
+#define IApplicationViewSwitcherStatics_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_GetIids
+#define IApplicationViewSwitcherStatics_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_GetRuntimeClassName
+#define IApplicationViewSwitcherStatics_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_GetTrustLevel
+#define IApplicationViewSwitcherStatics_DisableShowingMainViewOnActivation __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_DisableShowingMainViewOnActivation
+#define IApplicationViewSwitcherStatics_TryShowAsStandaloneAsync __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_TryShowAsStandaloneAsync
+#define IApplicationViewSwitcherStatics_TryShowAsStandaloneWithSizePreferenceAsync __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_TryShowAsStandaloneWithSizePreferenceAsync
+#define IApplicationViewSwitcherStatics_TryShowAsStandaloneWithAnchorViewAndSizePreferenceAsync __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_TryShowAsStandaloneWithAnchorViewAndSizePreferenceAsync
+#define IApplicationViewSwitcherStatics_SwitchAsync __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_SwitchAsync
+#define IApplicationViewSwitcherStatics_SwitchFromViewAsync __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_SwitchFromViewAsync
+#define IApplicationViewSwitcherStatics_SwitchFromViewWithOptionsAsync __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_SwitchFromViewWithOptionsAsync
+#define IApplicationViewSwitcherStatics_PrepareForCustomAnimatedSwitchAsync __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_PrepareForCustomAnimatedSwitchAsync
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IApplicationViewSwitcherStatics2 interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2, 0x60e995cd, 0x4fc2, 0x48c4, 0xb8,0xe3, 0x39,0x5f,0x2b,0x9f,0x0f,0xc1);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                MIDL_INTERFACE("60e995cd-4fc2-48c4-b8e3-395f2b9f0fc1")
+                IApplicationViewSwitcherStatics2 : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE DisableSystemViewActivationPolicy(
+                        ) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2, 0x60e995cd, 0x4fc2, 0x48c4, 0xb8,0xe3, 0x39,0x5f,0x2b,0x9f,0x0f,0xc1)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2 *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2 *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2 *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2 *This,
+        TrustLevel *trustLevel);
+
+    /*** IApplicationViewSwitcherStatics2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *DisableSystemViewActivationPolicy)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2 *This);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2Vtbl;
+
+interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2 {
+    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IApplicationViewSwitcherStatics2 methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_DisableSystemViewActivationPolicy(This) (This)->lpVtbl->DisableSystemViewActivationPolicy(This)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_Release(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IApplicationViewSwitcherStatics2 methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_DisableSystemViewActivationPolicy(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2* This) {
+    return This->lpVtbl->DisableSystemViewActivationPolicy(This);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define IID_IApplicationViewSwitcherStatics2 IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2
+#define IApplicationViewSwitcherStatics2Vtbl __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2Vtbl
+#define IApplicationViewSwitcherStatics2 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2
+#define IApplicationViewSwitcherStatics2_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_QueryInterface
+#define IApplicationViewSwitcherStatics2_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_AddRef
+#define IApplicationViewSwitcherStatics2_Release __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_Release
+#define IApplicationViewSwitcherStatics2_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_GetIids
+#define IApplicationViewSwitcherStatics2_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_GetRuntimeClassName
+#define IApplicationViewSwitcherStatics2_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_GetTrustLevel
+#define IApplicationViewSwitcherStatics2_DisableSystemViewActivationPolicy __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_DisableSystemViewActivationPolicy
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics2_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IApplicationViewSwitcherStatics3 interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3, 0x92059420, 0x80a7, 0x486d, 0xb2,0x1f, 0xc7,0xa4,0xa2,0x42,0xa3,0x83);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                MIDL_INTERFACE("92059420-80a7-486d-b21f-c7a4a242a383")
+                IApplicationViewSwitcherStatics3 : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE TryShowAsViewModeAsync(
+                        INT32 view_id,
+                        ABI::Windows::UI::ViewManagement::ApplicationViewMode mode,
+                        ABI::Windows::Foundation::IAsyncOperation<boolean > **operation) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE TryShowAsViewModeWithPreferencesAsync(
+                        INT32 view_id,
+                        ABI::Windows::UI::ViewManagement::ApplicationViewMode mode,
+                        ABI::Windows::UI::ViewManagement::IViewModePreferences *preferences,
+                        ABI::Windows::Foundation::IAsyncOperation<boolean > **operation) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3, 0x92059420, 0x80a7, 0x486d, 0xb2,0x1f, 0xc7,0xa4,0xa2,0x42,0xa3,0x83)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3 *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3 *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3 *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3 *This,
+        TrustLevel *trustLevel);
+
+    /*** IApplicationViewSwitcherStatics3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *TryShowAsViewModeAsync)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3 *This,
+        INT32 view_id,
+        __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewMode mode,
+        __FIAsyncOperation_1_boolean **operation);
+
+    HRESULT (STDMETHODCALLTYPE *TryShowAsViewModeWithPreferencesAsync)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3 *This,
+        INT32 view_id,
+        __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewMode mode,
+        __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences *preferences,
+        __FIAsyncOperation_1_boolean **operation);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3Vtbl;
+
+interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3 {
+    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IApplicationViewSwitcherStatics3 methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_TryShowAsViewModeAsync(This,view_id,mode,operation) (This)->lpVtbl->TryShowAsViewModeAsync(This,view_id,mode,operation)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_TryShowAsViewModeWithPreferencesAsync(This,view_id,mode,preferences,operation) (This)->lpVtbl->TryShowAsViewModeWithPreferencesAsync(This,view_id,mode,preferences,operation)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_Release(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IApplicationViewSwitcherStatics3 methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_TryShowAsViewModeAsync(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3* This,INT32 view_id,__x_ABI_CWindows_CUI_CViewManagement_CApplicationViewMode mode,__FIAsyncOperation_1_boolean **operation) {
+    return This->lpVtbl->TryShowAsViewModeAsync(This,view_id,mode,operation);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_TryShowAsViewModeWithPreferencesAsync(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3* This,INT32 view_id,__x_ABI_CWindows_CUI_CViewManagement_CApplicationViewMode mode,__x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences *preferences,__FIAsyncOperation_1_boolean **operation) {
+    return This->lpVtbl->TryShowAsViewModeWithPreferencesAsync(This,view_id,mode,preferences,operation);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define IID_IApplicationViewSwitcherStatics3 IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3
+#define IApplicationViewSwitcherStatics3Vtbl __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3Vtbl
+#define IApplicationViewSwitcherStatics3 __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3
+#define IApplicationViewSwitcherStatics3_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_QueryInterface
+#define IApplicationViewSwitcherStatics3_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_AddRef
+#define IApplicationViewSwitcherStatics3_Release __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_Release
+#define IApplicationViewSwitcherStatics3_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_GetIids
+#define IApplicationViewSwitcherStatics3_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_GetRuntimeClassName
+#define IApplicationViewSwitcherStatics3_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_GetTrustLevel
+#define IApplicationViewSwitcherStatics3_TryShowAsViewModeAsync __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_TryShowAsViewModeAsync
+#define IApplicationViewSwitcherStatics3_TryShowAsViewModeWithPreferencesAsync __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_TryShowAsViewModeWithPreferencesAsync
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewSwitcherStatics3_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000 */
+
+/*****************************************************************************
+ * IApplicationViewTitleBar interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar, 0x00924ac0, 0x932b, 0x4a6b, 0x9c,0x4b, 0xdc,0x38,0xc8,0x24,0x78,0xce);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                MIDL_INTERFACE("00924ac0-932b-4a6b-9c4b-dc38c82478ce")
+                IApplicationViewTitleBar : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE put_ForegroundColor(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color > *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_ForegroundColor(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color > **value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_BackgroundColor(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color > *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_BackgroundColor(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color > **value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_ButtonForegroundColor(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color > *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_ButtonForegroundColor(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color > **value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_ButtonBackgroundColor(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color > *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_ButtonBackgroundColor(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color > **value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_ButtonHoverForegroundColor(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color > *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_ButtonHoverForegroundColor(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color > **value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_ButtonHoverBackgroundColor(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color > *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_ButtonHoverBackgroundColor(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color > **value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_ButtonPressedForegroundColor(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color > *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_ButtonPressedForegroundColor(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color > **value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_ButtonPressedBackgroundColor(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color > *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_ButtonPressedBackgroundColor(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color > **value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_InactiveForegroundColor(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color > *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_InactiveForegroundColor(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color > **value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_InactiveBackgroundColor(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color > *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_InactiveBackgroundColor(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color > **value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_ButtonInactiveForegroundColor(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color > *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_ButtonInactiveForegroundColor(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color > **value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_ButtonInactiveBackgroundColor(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color > *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_ButtonInactiveBackgroundColor(
+                        ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color > **value) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar, 0x00924ac0, 0x932b, 0x4a6b, 0x9c,0x4b, 0xdc,0x38,0xc8,0x24,0x78,0xce)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBarVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        TrustLevel *trustLevel);
+
+    /*** IApplicationViewTitleBar methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_ForegroundColor)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        __FIReference_1_Color *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_ForegroundColor)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        __FIReference_1_Color **value);
+
+    HRESULT (STDMETHODCALLTYPE *put_BackgroundColor)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        __FIReference_1_Color *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_BackgroundColor)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        __FIReference_1_Color **value);
+
+    HRESULT (STDMETHODCALLTYPE *put_ButtonForegroundColor)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        __FIReference_1_Color *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_ButtonForegroundColor)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        __FIReference_1_Color **value);
+
+    HRESULT (STDMETHODCALLTYPE *put_ButtonBackgroundColor)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        __FIReference_1_Color *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_ButtonBackgroundColor)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        __FIReference_1_Color **value);
+
+    HRESULT (STDMETHODCALLTYPE *put_ButtonHoverForegroundColor)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        __FIReference_1_Color *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_ButtonHoverForegroundColor)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        __FIReference_1_Color **value);
+
+    HRESULT (STDMETHODCALLTYPE *put_ButtonHoverBackgroundColor)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        __FIReference_1_Color *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_ButtonHoverBackgroundColor)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        __FIReference_1_Color **value);
+
+    HRESULT (STDMETHODCALLTYPE *put_ButtonPressedForegroundColor)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        __FIReference_1_Color *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_ButtonPressedForegroundColor)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        __FIReference_1_Color **value);
+
+    HRESULT (STDMETHODCALLTYPE *put_ButtonPressedBackgroundColor)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        __FIReference_1_Color *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_ButtonPressedBackgroundColor)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        __FIReference_1_Color **value);
+
+    HRESULT (STDMETHODCALLTYPE *put_InactiveForegroundColor)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        __FIReference_1_Color *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_InactiveForegroundColor)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        __FIReference_1_Color **value);
+
+    HRESULT (STDMETHODCALLTYPE *put_InactiveBackgroundColor)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        __FIReference_1_Color *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_InactiveBackgroundColor)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        __FIReference_1_Color **value);
+
+    HRESULT (STDMETHODCALLTYPE *put_ButtonInactiveForegroundColor)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        __FIReference_1_Color *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_ButtonInactiveForegroundColor)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        __FIReference_1_Color **value);
+
+    HRESULT (STDMETHODCALLTYPE *put_ButtonInactiveBackgroundColor)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        __FIReference_1_Color *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_ButtonInactiveBackgroundColor)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar *This,
+        __FIReference_1_Color **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBarVtbl;
+
+interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar {
+    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBarVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IApplicationViewTitleBar methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ForegroundColor(This,value) (This)->lpVtbl->put_ForegroundColor(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ForegroundColor(This,value) (This)->lpVtbl->get_ForegroundColor(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_BackgroundColor(This,value) (This)->lpVtbl->put_BackgroundColor(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_BackgroundColor(This,value) (This)->lpVtbl->get_BackgroundColor(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ButtonForegroundColor(This,value) (This)->lpVtbl->put_ButtonForegroundColor(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ButtonForegroundColor(This,value) (This)->lpVtbl->get_ButtonForegroundColor(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ButtonBackgroundColor(This,value) (This)->lpVtbl->put_ButtonBackgroundColor(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ButtonBackgroundColor(This,value) (This)->lpVtbl->get_ButtonBackgroundColor(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ButtonHoverForegroundColor(This,value) (This)->lpVtbl->put_ButtonHoverForegroundColor(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ButtonHoverForegroundColor(This,value) (This)->lpVtbl->get_ButtonHoverForegroundColor(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ButtonHoverBackgroundColor(This,value) (This)->lpVtbl->put_ButtonHoverBackgroundColor(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ButtonHoverBackgroundColor(This,value) (This)->lpVtbl->get_ButtonHoverBackgroundColor(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ButtonPressedForegroundColor(This,value) (This)->lpVtbl->put_ButtonPressedForegroundColor(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ButtonPressedForegroundColor(This,value) (This)->lpVtbl->get_ButtonPressedForegroundColor(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ButtonPressedBackgroundColor(This,value) (This)->lpVtbl->put_ButtonPressedBackgroundColor(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ButtonPressedBackgroundColor(This,value) (This)->lpVtbl->get_ButtonPressedBackgroundColor(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_InactiveForegroundColor(This,value) (This)->lpVtbl->put_InactiveForegroundColor(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_InactiveForegroundColor(This,value) (This)->lpVtbl->get_InactiveForegroundColor(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_InactiveBackgroundColor(This,value) (This)->lpVtbl->put_InactiveBackgroundColor(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_InactiveBackgroundColor(This,value) (This)->lpVtbl->get_InactiveBackgroundColor(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ButtonInactiveForegroundColor(This,value) (This)->lpVtbl->put_ButtonInactiveForegroundColor(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ButtonInactiveForegroundColor(This,value) (This)->lpVtbl->get_ButtonInactiveForegroundColor(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ButtonInactiveBackgroundColor(This,value) (This)->lpVtbl->put_ButtonInactiveBackgroundColor(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ButtonInactiveBackgroundColor(This,value) (This)->lpVtbl->get_ButtonInactiveBackgroundColor(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_Release(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IApplicationViewTitleBar methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ForegroundColor(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,__FIReference_1_Color *value) {
+    return This->lpVtbl->put_ForegroundColor(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ForegroundColor(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,__FIReference_1_Color **value) {
+    return This->lpVtbl->get_ForegroundColor(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_BackgroundColor(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,__FIReference_1_Color *value) {
+    return This->lpVtbl->put_BackgroundColor(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_BackgroundColor(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,__FIReference_1_Color **value) {
+    return This->lpVtbl->get_BackgroundColor(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ButtonForegroundColor(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,__FIReference_1_Color *value) {
+    return This->lpVtbl->put_ButtonForegroundColor(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ButtonForegroundColor(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,__FIReference_1_Color **value) {
+    return This->lpVtbl->get_ButtonForegroundColor(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ButtonBackgroundColor(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,__FIReference_1_Color *value) {
+    return This->lpVtbl->put_ButtonBackgroundColor(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ButtonBackgroundColor(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,__FIReference_1_Color **value) {
+    return This->lpVtbl->get_ButtonBackgroundColor(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ButtonHoverForegroundColor(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,__FIReference_1_Color *value) {
+    return This->lpVtbl->put_ButtonHoverForegroundColor(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ButtonHoverForegroundColor(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,__FIReference_1_Color **value) {
+    return This->lpVtbl->get_ButtonHoverForegroundColor(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ButtonHoverBackgroundColor(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,__FIReference_1_Color *value) {
+    return This->lpVtbl->put_ButtonHoverBackgroundColor(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ButtonHoverBackgroundColor(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,__FIReference_1_Color **value) {
+    return This->lpVtbl->get_ButtonHoverBackgroundColor(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ButtonPressedForegroundColor(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,__FIReference_1_Color *value) {
+    return This->lpVtbl->put_ButtonPressedForegroundColor(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ButtonPressedForegroundColor(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,__FIReference_1_Color **value) {
+    return This->lpVtbl->get_ButtonPressedForegroundColor(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ButtonPressedBackgroundColor(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,__FIReference_1_Color *value) {
+    return This->lpVtbl->put_ButtonPressedBackgroundColor(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ButtonPressedBackgroundColor(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,__FIReference_1_Color **value) {
+    return This->lpVtbl->get_ButtonPressedBackgroundColor(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_InactiveForegroundColor(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,__FIReference_1_Color *value) {
+    return This->lpVtbl->put_InactiveForegroundColor(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_InactiveForegroundColor(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,__FIReference_1_Color **value) {
+    return This->lpVtbl->get_InactiveForegroundColor(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_InactiveBackgroundColor(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,__FIReference_1_Color *value) {
+    return This->lpVtbl->put_InactiveBackgroundColor(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_InactiveBackgroundColor(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,__FIReference_1_Color **value) {
+    return This->lpVtbl->get_InactiveBackgroundColor(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ButtonInactiveForegroundColor(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,__FIReference_1_Color *value) {
+    return This->lpVtbl->put_ButtonInactiveForegroundColor(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ButtonInactiveForegroundColor(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,__FIReference_1_Color **value) {
+    return This->lpVtbl->get_ButtonInactiveForegroundColor(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ButtonInactiveBackgroundColor(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,__FIReference_1_Color *value) {
+    return This->lpVtbl->put_ButtonInactiveBackgroundColor(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ButtonInactiveBackgroundColor(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar* This,__FIReference_1_Color **value) {
+    return This->lpVtbl->get_ButtonInactiveBackgroundColor(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define IID_IApplicationViewTitleBar IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar
+#define IApplicationViewTitleBarVtbl __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBarVtbl
+#define IApplicationViewTitleBar __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar
+#define IApplicationViewTitleBar_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_QueryInterface
+#define IApplicationViewTitleBar_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_AddRef
+#define IApplicationViewTitleBar_Release __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_Release
+#define IApplicationViewTitleBar_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_GetIids
+#define IApplicationViewTitleBar_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_GetRuntimeClassName
+#define IApplicationViewTitleBar_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_GetTrustLevel
+#define IApplicationViewTitleBar_put_ForegroundColor __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ForegroundColor
+#define IApplicationViewTitleBar_get_ForegroundColor __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ForegroundColor
+#define IApplicationViewTitleBar_put_BackgroundColor __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_BackgroundColor
+#define IApplicationViewTitleBar_get_BackgroundColor __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_BackgroundColor
+#define IApplicationViewTitleBar_put_ButtonForegroundColor __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ButtonForegroundColor
+#define IApplicationViewTitleBar_get_ButtonForegroundColor __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ButtonForegroundColor
+#define IApplicationViewTitleBar_put_ButtonBackgroundColor __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ButtonBackgroundColor
+#define IApplicationViewTitleBar_get_ButtonBackgroundColor __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ButtonBackgroundColor
+#define IApplicationViewTitleBar_put_ButtonHoverForegroundColor __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ButtonHoverForegroundColor
+#define IApplicationViewTitleBar_get_ButtonHoverForegroundColor __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ButtonHoverForegroundColor
+#define IApplicationViewTitleBar_put_ButtonHoverBackgroundColor __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ButtonHoverBackgroundColor
+#define IApplicationViewTitleBar_get_ButtonHoverBackgroundColor __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ButtonHoverBackgroundColor
+#define IApplicationViewTitleBar_put_ButtonPressedForegroundColor __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ButtonPressedForegroundColor
+#define IApplicationViewTitleBar_get_ButtonPressedForegroundColor __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ButtonPressedForegroundColor
+#define IApplicationViewTitleBar_put_ButtonPressedBackgroundColor __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ButtonPressedBackgroundColor
+#define IApplicationViewTitleBar_get_ButtonPressedBackgroundColor __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ButtonPressedBackgroundColor
+#define IApplicationViewTitleBar_put_InactiveForegroundColor __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_InactiveForegroundColor
+#define IApplicationViewTitleBar_get_InactiveForegroundColor __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_InactiveForegroundColor
+#define IApplicationViewTitleBar_put_InactiveBackgroundColor __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_InactiveBackgroundColor
+#define IApplicationViewTitleBar_get_InactiveBackgroundColor __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_InactiveBackgroundColor
+#define IApplicationViewTitleBar_put_ButtonInactiveForegroundColor __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ButtonInactiveForegroundColor
+#define IApplicationViewTitleBar_get_ButtonInactiveForegroundColor __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ButtonInactiveForegroundColor
+#define IApplicationViewTitleBar_put_ButtonInactiveBackgroundColor __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_put_ButtonInactiveBackgroundColor
+#define IApplicationViewTitleBar_get_ButtonInactiveBackgroundColor __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_get_ButtonInactiveBackgroundColor
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTitleBar_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IApplicationViewTransferContext interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x20000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext, 0x8574bc63, 0x3c17, 0x408e, 0x94,0x08, 0x8a,0x1a,0x9e,0xa8,0x1b,0xfa);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                MIDL_INTERFACE("8574bc63-3c17-408e-9408-8a1a9ea81bfa")
+                IApplicationViewTransferContext : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_ViewId(
+                        INT32 *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_ViewId(
+                        INT32 value) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext, 0x8574bc63, 0x3c17, 0x408e, 0x94,0x08, 0x8a,0x1a,0x9e,0xa8,0x1b,0xfa)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext *This,
+        TrustLevel *trustLevel);
+
+    /*** IApplicationViewTransferContext methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_ViewId)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext *This,
+        INT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_ViewId)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext *This,
+        INT32 value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextVtbl;
+
+interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext {
+    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IApplicationViewTransferContext methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_get_ViewId(This,value) (This)->lpVtbl->get_ViewId(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_put_ViewId(This,value) (This)->lpVtbl->put_ViewId(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_Release(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IApplicationViewTransferContext methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_get_ViewId(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext* This,INT32 *value) {
+    return This->lpVtbl->get_ViewId(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_put_ViewId(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext* This,INT32 value) {
+    return This->lpVtbl->put_ViewId(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define IID_IApplicationViewTransferContext IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext
+#define IApplicationViewTransferContextVtbl __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextVtbl
+#define IApplicationViewTransferContext __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext
+#define IApplicationViewTransferContext_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_QueryInterface
+#define IApplicationViewTransferContext_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_AddRef
+#define IApplicationViewTransferContext_Release __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_Release
+#define IApplicationViewTransferContext_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_GetIids
+#define IApplicationViewTransferContext_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_GetRuntimeClassName
+#define IApplicationViewTransferContext_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_GetTrustLevel
+#define IApplicationViewTransferContext_get_ViewId __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_get_ViewId
+#define IApplicationViewTransferContext_put_ViewId __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_put_ViewId
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContext_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x20000 */
+
+/*****************************************************************************
+ * IApplicationViewTransferContextStatics interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x20000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics, 0x15a89d92, 0xdd79, 0x4b0b, 0xbc,0x47, 0xd5,0xf1,0x95,0xf1,0x46,0x61);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                MIDL_INTERFACE("15a89d92-dd79-4b0b-bc47-d5f195f14661")
+                IApplicationViewTransferContextStatics : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_DataPackageFormatId(
+                        HSTRING *value) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics, 0x15a89d92, 0xdd79, 0x4b0b, 0xbc,0x47, 0xd5,0xf1,0x95,0xf1,0x46,0x61)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStaticsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics *This,
+        TrustLevel *trustLevel);
+
+    /*** IApplicationViewTransferContextStatics methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_DataPackageFormatId)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics *This,
+        HSTRING *value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStaticsVtbl;
+
+interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics {
+    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStaticsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IApplicationViewTransferContextStatics methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_get_DataPackageFormatId(This,value) (This)->lpVtbl->get_DataPackageFormatId(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_Release(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IApplicationViewTransferContextStatics methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_get_DataPackageFormatId(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics* This,HSTRING *value) {
+    return This->lpVtbl->get_DataPackageFormatId(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define IID_IApplicationViewTransferContextStatics IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics
+#define IApplicationViewTransferContextStaticsVtbl __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStaticsVtbl
+#define IApplicationViewTransferContextStatics __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics
+#define IApplicationViewTransferContextStatics_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_QueryInterface
+#define IApplicationViewTransferContextStatics_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_AddRef
+#define IApplicationViewTransferContextStatics_Release __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_Release
+#define IApplicationViewTransferContextStatics_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_GetIids
+#define IApplicationViewTransferContextStatics_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_GetRuntimeClassName
+#define IApplicationViewTransferContextStatics_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_GetTrustLevel
+#define IApplicationViewTransferContextStatics_get_DataPackageFormatId __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_get_DataPackageFormatId
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewTransferContextStatics_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x20000 */
+
+/*****************************************************************************
+ * IApplicationViewWithContext interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext, 0xbd55d512, 0x9dc1, 0x44fc, 0x85,0x01, 0x66,0x66,0x25,0xdf,0x60,0xdc);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                MIDL_INTERFACE("bd55d512-9dc1-44fc-8501-666625df60dc")
+                IApplicationViewWithContext : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_UIContext(
+                        ABI::Windows::UI::IUIContext **value) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext, 0xbd55d512, 0x9dc1, 0x44fc, 0x85,0x01, 0x66,0x66,0x25,0xdf,0x60,0xdc)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContextVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext *This,
+        TrustLevel *trustLevel);
+
+    /*** IApplicationViewWithContext methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_UIContext)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext *This,
+        __x_ABI_CWindows_CUI_CIUIContext **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContextVtbl;
+
+interface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext {
+    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContextVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IApplicationViewWithContext methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_get_UIContext(This,value) (This)->lpVtbl->get_UIContext(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_Release(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IApplicationViewWithContext methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_get_UIContext(__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext* This,__x_ABI_CWindows_CUI_CIUIContext **value) {
+    return This->lpVtbl->get_UIContext(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define IID_IApplicationViewWithContext IID___x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext
+#define IApplicationViewWithContextVtbl __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContextVtbl
+#define IApplicationViewWithContext __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext
+#define IApplicationViewWithContext_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_QueryInterface
+#define IApplicationViewWithContext_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_AddRef
+#define IApplicationViewWithContext_Release __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_Release
+#define IApplicationViewWithContext_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_GetIids
+#define IApplicationViewWithContext_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_GetRuntimeClassName
+#define IApplicationViewWithContext_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_GetTrustLevel
+#define IApplicationViewWithContext_get_UIContext __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_get_UIContext
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewWithContext_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000 */
+
 /*****************************************************************************
  * IUISettings interface
  */
@@ -3551,6 +8910,412 @@
 #endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIInputPaneStatics2_INTERFACE_DEFINED__ */
 #endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000 */
 
+/*****************************************************************************
+ * IViewModePreferences interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences, 0x878fcd3a, 0x0b99, 0x42c9, 0x84,0xd0, 0xd3,0xf1,0xd4,0x03,0x55,0x4b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                MIDL_INTERFACE("878fcd3a-0b99-42c9-84d0-d3f1d403554b")
+                IViewModePreferences : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_ViewSizePreference(
+                        ABI::Windows::UI::ViewManagement::ViewSizePreference *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_ViewSizePreference(
+                        ABI::Windows::UI::ViewManagement::ViewSizePreference value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_CustomSize(
+                        ABI::Windows::Foundation::Size *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_CustomSize(
+                        ABI::Windows::Foundation::Size value) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences, 0x878fcd3a, 0x0b99, 0x42c9, 0x84,0xd0, 0xd3,0xf1,0xd4,0x03,0x55,0x4b)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences *This,
+        TrustLevel *trustLevel);
+
+    /*** IViewModePreferences methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_ViewSizePreference)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences *This,
+        __x_ABI_CWindows_CUI_CViewManagement_CViewSizePreference *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_ViewSizePreference)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences *This,
+        __x_ABI_CWindows_CUI_CViewManagement_CViewSizePreference value);
+
+    HRESULT (STDMETHODCALLTYPE *get_CustomSize)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences *This,
+        __x_ABI_CWindows_CFoundation_CSize *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_CustomSize)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences *This,
+        __x_ABI_CWindows_CFoundation_CSize value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesVtbl;
+
+interface __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences {
+    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IViewModePreferences methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_get_ViewSizePreference(This,value) (This)->lpVtbl->get_ViewSizePreference(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_put_ViewSizePreference(This,value) (This)->lpVtbl->put_ViewSizePreference(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_get_CustomSize(This,value) (This)->lpVtbl->get_CustomSize(This,value)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_put_CustomSize(This,value) (This)->lpVtbl->put_CustomSize(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_Release(__x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IViewModePreferences methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_get_ViewSizePreference(__x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences* This,__x_ABI_CWindows_CUI_CViewManagement_CViewSizePreference *value) {
+    return This->lpVtbl->get_ViewSizePreference(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_put_ViewSizePreference(__x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences* This,__x_ABI_CWindows_CUI_CViewManagement_CViewSizePreference value) {
+    return This->lpVtbl->put_ViewSizePreference(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_get_CustomSize(__x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences* This,__x_ABI_CWindows_CFoundation_CSize *value) {
+    return This->lpVtbl->get_CustomSize(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_put_CustomSize(__x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences* This,__x_ABI_CWindows_CFoundation_CSize value) {
+    return This->lpVtbl->put_CustomSize(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define IID_IViewModePreferences IID___x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences
+#define IViewModePreferencesVtbl __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesVtbl
+#define IViewModePreferences __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences
+#define IViewModePreferences_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_QueryInterface
+#define IViewModePreferences_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_AddRef
+#define IViewModePreferences_Release __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_Release
+#define IViewModePreferences_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_GetIids
+#define IViewModePreferences_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_GetRuntimeClassName
+#define IViewModePreferences_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_GetTrustLevel
+#define IViewModePreferences_get_ViewSizePreference __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_get_ViewSizePreference
+#define IViewModePreferences_put_ViewSizePreference __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_put_ViewSizePreference
+#define IViewModePreferences_get_CustomSize __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_get_CustomSize
+#define IViewModePreferences_put_CustomSize __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_put_CustomSize
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000 */
+
+/*****************************************************************************
+ * IViewModePreferencesStatics interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000
+#ifndef ____x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics, 0x69b60a65, 0x5de5, 0x40d8, 0x83,0x06, 0x38,0x33,0xdf,0x7a,0x22,0x74);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace ViewManagement {
+                MIDL_INTERFACE("69b60a65-5de5-40d8-8306-3833df7a2274")
+                IViewModePreferencesStatics : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE CreateDefault(
+                        ABI::Windows::UI::ViewManagement::ApplicationViewMode mode,
+                        ABI::Windows::UI::ViewManagement::IViewModePreferences **result) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics, 0x69b60a65, 0x5de5, 0x40d8, 0x83,0x06, 0x38,0x33,0xdf,0x7a,0x22,0x74)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStaticsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics *This,
+        TrustLevel *trustLevel);
+
+    /*** IViewModePreferencesStatics methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateDefault)(
+        __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics *This,
+        __x_ABI_CWindows_CUI_CViewManagement_CApplicationViewMode mode,
+        __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences **result);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStaticsVtbl;
+
+interface __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics {
+    CONST_VTBL __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStaticsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IViewModePreferencesStatics methods ***/
+#define __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_CreateDefault(This,mode,result) (This)->lpVtbl->CreateDefault(This,mode,result)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_QueryInterface(__x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_AddRef(__x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_Release(__x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_GetIids(__x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_GetRuntimeClassName(__x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_GetTrustLevel(__x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IViewModePreferencesStatics methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_CreateDefault(__x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics* This,__x_ABI_CWindows_CUI_CViewManagement_CApplicationViewMode mode,__x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferences **result) {
+    return This->lpVtbl->CreateDefault(This,mode,result);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_ViewManagement
+#define IID_IViewModePreferencesStatics IID___x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics
+#define IViewModePreferencesStaticsVtbl __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStaticsVtbl
+#define IViewModePreferencesStatics __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics
+#define IViewModePreferencesStatics_QueryInterface __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_QueryInterface
+#define IViewModePreferencesStatics_AddRef __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_AddRef
+#define IViewModePreferencesStatics_Release __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_Release
+#define IViewModePreferencesStatics_GetIids __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_GetIids
+#define IViewModePreferencesStatics_GetRuntimeClassName __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_GetRuntimeClassName
+#define IViewModePreferencesStatics_GetTrustLevel __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_GetTrustLevel
+#define IViewModePreferencesStatics_CreateDefault __x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_CreateDefault
+#endif /* WIDL_using_Windows_UI_ViewManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CViewManagement_CIViewModePreferencesStatics_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000 */
+
+/*
+ * Class Windows.UI.ViewManagement.AccessibilitySettings
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_UI_ViewManagement_AccessibilitySettings_DEFINED
+#define RUNTIMECLASS_Windows_UI_ViewManagement_AccessibilitySettings_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_ViewManagement_AccessibilitySettings[] = {'W','i','n','d','o','w','s','.','U','I','.','V','i','e','w','M','a','n','a','g','e','m','e','n','t','.','A','c','c','e','s','s','i','b','i','l','i','t','y','S','e','t','t','i','n','g','s',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_ViewManagement_AccessibilitySettings[] = L"Windows.UI.ViewManagement.AccessibilitySettings";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_ViewManagement_AccessibilitySettings[] = {'W','i','n','d','o','w','s','.','U','I','.','V','i','e','w','M','a','n','a','g','e','m','e','n','t','.','A','c','c','e','s','s','i','b','i','l','i','t','y','S','e','t','t','i','n','g','s',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_ViewManagement_AccessibilitySettings_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.UI.ViewManagement.ApplicationView
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_UI_ViewManagement_ApplicationView_DEFINED
+#define RUNTIMECLASS_Windows_UI_ViewManagement_ApplicationView_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_ViewManagement_ApplicationView[] = {'W','i','n','d','o','w','s','.','U','I','.','V','i','e','w','M','a','n','a','g','e','m','e','n','t','.','A','p','p','l','i','c','a','t','i','o','n','V','i','e','w',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_ViewManagement_ApplicationView[] = L"Windows.UI.ViewManagement.ApplicationView";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_ViewManagement_ApplicationView[] = {'W','i','n','d','o','w','s','.','U','I','.','V','i','e','w','M','a','n','a','g','e','m','e','n','t','.','A','p','p','l','i','c','a','t','i','o','n','V','i','e','w',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_ViewManagement_ApplicationView_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.UI.ViewManagement.ApplicationViewConsolidatedEventArgs
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_UI_ViewManagement_ApplicationViewConsolidatedEventArgs_DEFINED
+#define RUNTIMECLASS_Windows_UI_ViewManagement_ApplicationViewConsolidatedEventArgs_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_ViewManagement_ApplicationViewConsolidatedEventArgs[] = {'W','i','n','d','o','w','s','.','U','I','.','V','i','e','w','M','a','n','a','g','e','m','e','n','t','.','A','p','p','l','i','c','a','t','i','o','n','V','i','e','w','C','o','n','s','o','l','i','d','a','t','e','d','E','v','e','n','t','A','r','g','s',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_ViewManagement_ApplicationViewConsolidatedEventArgs[] = L"Windows.UI.ViewManagement.ApplicationViewConsolidatedEventArgs";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_ViewManagement_ApplicationViewConsolidatedEventArgs[] = {'W','i','n','d','o','w','s','.','U','I','.','V','i','e','w','M','a','n','a','g','e','m','e','n','t','.','A','p','p','l','i','c','a','t','i','o','n','V','i','e','w','C','o','n','s','o','l','i','d','a','t','e','d','E','v','e','n','t','A','r','g','s',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_ViewManagement_ApplicationViewConsolidatedEventArgs_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.UI.ViewManagement.ApplicationViewScaling
+ */
+#if WINDOWS_UI_VIEWMANAGEMENT_VIEWMANAGEMENTVIEWSCALINGCONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_UI_ViewManagement_ApplicationViewScaling_DEFINED
+#define RUNTIMECLASS_Windows_UI_ViewManagement_ApplicationViewScaling_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_ViewManagement_ApplicationViewScaling[] = {'W','i','n','d','o','w','s','.','U','I','.','V','i','e','w','M','a','n','a','g','e','m','e','n','t','.','A','p','p','l','i','c','a','t','i','o','n','V','i','e','w','S','c','a','l','i','n','g',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_ViewManagement_ApplicationViewScaling[] = L"Windows.UI.ViewManagement.ApplicationViewScaling";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_ViewManagement_ApplicationViewScaling[] = {'W','i','n','d','o','w','s','.','U','I','.','V','i','e','w','M','a','n','a','g','e','m','e','n','t','.','A','p','p','l','i','c','a','t','i','o','n','V','i','e','w','S','c','a','l','i','n','g',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_ViewManagement_ApplicationViewScaling_DEFINED */
+#endif /* WINDOWS_UI_VIEWMANAGEMENT_VIEWMANAGEMENTVIEWSCALINGCONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.UI.ViewManagement.ApplicationViewSwitcher
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_UI_ViewManagement_ApplicationViewSwitcher_DEFINED
+#define RUNTIMECLASS_Windows_UI_ViewManagement_ApplicationViewSwitcher_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_ViewManagement_ApplicationViewSwitcher[] = {'W','i','n','d','o','w','s','.','U','I','.','V','i','e','w','M','a','n','a','g','e','m','e','n','t','.','A','p','p','l','i','c','a','t','i','o','n','V','i','e','w','S','w','i','t','c','h','e','r',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_ViewManagement_ApplicationViewSwitcher[] = L"Windows.UI.ViewManagement.ApplicationViewSwitcher";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_ViewManagement_ApplicationViewSwitcher[] = {'W','i','n','d','o','w','s','.','U','I','.','V','i','e','w','M','a','n','a','g','e','m','e','n','t','.','A','p','p','l','i','c','a','t','i','o','n','V','i','e','w','S','w','i','t','c','h','e','r',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_ViewManagement_ApplicationViewSwitcher_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.UI.ViewManagement.ApplicationViewTitleBar
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_UI_ViewManagement_ApplicationViewTitleBar_DEFINED
+#define RUNTIMECLASS_Windows_UI_ViewManagement_ApplicationViewTitleBar_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_ViewManagement_ApplicationViewTitleBar[] = {'W','i','n','d','o','w','s','.','U','I','.','V','i','e','w','M','a','n','a','g','e','m','e','n','t','.','A','p','p','l','i','c','a','t','i','o','n','V','i','e','w','T','i','t','l','e','B','a','r',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_ViewManagement_ApplicationViewTitleBar[] = L"Windows.UI.ViewManagement.ApplicationViewTitleBar";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_ViewManagement_ApplicationViewTitleBar[] = {'W','i','n','d','o','w','s','.','U','I','.','V','i','e','w','M','a','n','a','g','e','m','e','n','t','.','A','p','p','l','i','c','a','t','i','o','n','V','i','e','w','T','i','t','l','e','B','a','r',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_ViewManagement_ApplicationViewTitleBar_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.UI.ViewManagement.ApplicationViewTransferContext
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x20000
+#ifndef RUNTIMECLASS_Windows_UI_ViewManagement_ApplicationViewTransferContext_DEFINED
+#define RUNTIMECLASS_Windows_UI_ViewManagement_ApplicationViewTransferContext_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_ViewManagement_ApplicationViewTransferContext[] = {'W','i','n','d','o','w','s','.','U','I','.','V','i','e','w','M','a','n','a','g','e','m','e','n','t','.','A','p','p','l','i','c','a','t','i','o','n','V','i','e','w','T','r','a','n','s','f','e','r','C','o','n','t','e','x','t',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_ViewManagement_ApplicationViewTransferContext[] = L"Windows.UI.ViewManagement.ApplicationViewTransferContext";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_ViewManagement_ApplicationViewTransferContext[] = {'W','i','n','d','o','w','s','.','U','I','.','V','i','e','w','M','a','n','a','g','e','m','e','n','t','.','A','p','p','l','i','c','a','t','i','o','n','V','i','e','w','T','r','a','n','s','f','e','r','C','o','n','t','e','x','t',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_ViewManagement_ApplicationViewTransferContext_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x20000 */
+
 /*
  * Class Windows.UI.ViewManagement.UISettings
  */
@@ -3663,6 +9428,298 @@
 #endif /* RUNTIMECLASS_Windows_UI_ViewManagement_InputPaneVisibilityEventArgs_DEFINED */
 #endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
 
+/*
+ * Class Windows.UI.ViewManagement.ViewModePreferences
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000
+#ifndef RUNTIMECLASS_Windows_UI_ViewManagement_ViewModePreferences_DEFINED
+#define RUNTIMECLASS_Windows_UI_ViewManagement_ViewModePreferences_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_ViewManagement_ViewModePreferences[] = {'W','i','n','d','o','w','s','.','U','I','.','V','i','e','w','M','a','n','a','g','e','m','e','n','t','.','V','i','e','w','M','o','d','e','P','r','e','f','e','r','e','n','c','e','s',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_ViewManagement_ViewModePreferences[] = L"Windows.UI.ViewManagement.ViewModePreferences";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_ViewManagement_ViewModePreferences[] = {'W','i','n','d','o','w','s','.','U','I','.','V','i','e','w','M','a','n','a','g','e','m','e','n','t','.','V','i','e','w','M','o','d','e','P','r','e','f','e','r','e','n','c','e','s',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_ViewManagement_ViewModePreferences_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000 */
+
+/*****************************************************************************
+ * ITypedEventHandler<ABI::Windows::UI::ViewManagement::AccessibilitySettings*,IInspectable* > interface
+ */
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable_INTERFACE_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable, 0xf5917e6f, 0x5abf, 0x5e65, 0xb5,0xb4, 0x1b,0x9c,0x8d,0x94,0xe7,0x88);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("f5917e6f-5abf-5e65-b5b4-1b9c8d94e788")
+            ITypedEventHandler<ABI::Windows::UI::ViewManagement::AccessibilitySettings*,IInspectable* > : ITypedEventHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::ViewManagement::AccessibilitySettings*, ABI::Windows::UI::ViewManagement::IAccessibilitySettings* >, IInspectable* >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable, 0xf5917e6f, 0x5abf, 0x5e65, 0xb5,0xb4, 0x1b,0x9c,0x8d,0x94,0xe7,0x88)
+#endif
+#else
+typedef struct __FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectableVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable *This);
+
+    /*** ITypedEventHandler<ABI::Windows::UI::ViewManagement::AccessibilitySettings*,IInspectable* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable *This,
+        __x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings *sender,
+        IInspectable *args);
+
+    END_INTERFACE
+} __FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectableVtbl;
+
+interface __FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable {
+    CONST_VTBL __FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypedEventHandler<ABI::Windows::UI::ViewManagement::AccessibilitySettings*,IInspectable* > methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable_Invoke(This,sender,args) (This)->lpVtbl->Invoke(This,sender,args)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable_QueryInterface(__FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable_AddRef(__FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable_Release(__FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITypedEventHandler<ABI::Windows::UI::ViewManagement::AccessibilitySettings*,IInspectable* > methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable_Invoke(__FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable* This,__x_ABI_CWindows_CUI_CViewManagement_CIAccessibilitySettings *sender,IInspectable *args) {
+    return This->lpVtbl->Invoke(This,sender,args);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_ITypedEventHandler_AccessibilitySettings_IInspectable IID___FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable
+#define ITypedEventHandler_AccessibilitySettings_IInspectableVtbl __FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectableVtbl
+#define ITypedEventHandler_AccessibilitySettings_IInspectable __FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable
+#define ITypedEventHandler_AccessibilitySettings_IInspectable_QueryInterface __FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable_QueryInterface
+#define ITypedEventHandler_AccessibilitySettings_IInspectable_AddRef __FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable_AddRef
+#define ITypedEventHandler_AccessibilitySettings_IInspectable_Release __FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable_Release
+#define ITypedEventHandler_AccessibilitySettings_IInspectable_Invoke __FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FITypedEventHandler_2_Windows__CUI__CViewManagement__CAccessibilitySettings_IInspectable_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypedEventHandler<ABI::Windows::UI::ViewManagement::ApplicationView*,IInspectable* > interface
+ */
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable_INTERFACE_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable, 0x00c1f983, 0xc836, 0x565c, 0x8b,0xbf, 0x70,0x53,0x05,0x5b,0xdb,0x4c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("00c1f983-c836-565c-8bbf-7053055bdb4c")
+            ITypedEventHandler<ABI::Windows::UI::ViewManagement::ApplicationView*,IInspectable* > : ITypedEventHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::ViewManagement::ApplicationView*, ABI::Windows::UI::ViewManagement::IApplicationView* >, IInspectable* >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable, 0x00c1f983, 0xc836, 0x565c, 0x8b,0xbf, 0x70,0x53,0x05,0x5b,0xdb,0x4c)
+#endif
+#else
+typedef struct __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectableVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable *This);
+
+    /*** ITypedEventHandler<ABI::Windows::UI::ViewManagement::ApplicationView*,IInspectable* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable *This,
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView *sender,
+        IInspectable *args);
+
+    END_INTERFACE
+} __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectableVtbl;
+
+interface __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable {
+    CONST_VTBL __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypedEventHandler<ABI::Windows::UI::ViewManagement::ApplicationView*,IInspectable* > methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable_Invoke(This,sender,args) (This)->lpVtbl->Invoke(This,sender,args)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable_QueryInterface(__FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable_AddRef(__FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable_Release(__FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITypedEventHandler<ABI::Windows::UI::ViewManagement::ApplicationView*,IInspectable* > methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable_Invoke(__FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable* This,__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView *sender,IInspectable *args) {
+    return This->lpVtbl->Invoke(This,sender,args);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_ITypedEventHandler_ApplicationView_IInspectable IID___FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable
+#define ITypedEventHandler_ApplicationView_IInspectableVtbl __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectableVtbl
+#define ITypedEventHandler_ApplicationView_IInspectable __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable
+#define ITypedEventHandler_ApplicationView_IInspectable_QueryInterface __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable_QueryInterface
+#define ITypedEventHandler_ApplicationView_IInspectable_AddRef __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable_AddRef
+#define ITypedEventHandler_ApplicationView_IInspectable_Release __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable_Release
+#define ITypedEventHandler_ApplicationView_IInspectable_Invoke __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_IInspectable_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypedEventHandler<ABI::Windows::UI::ViewManagement::ApplicationView*,ABI::Windows::UI::ViewManagement::ApplicationViewConsolidatedEventArgs* > interface
+ */
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs_INTERFACE_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs, 0x463c606a, 0x8c82, 0x5a29, 0xa2,0xbd, 0x04,0x07,0x81,0xf2,0x53,0x48);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("463c606a-8c82-5a29-a2bd-040781f25348")
+            ITypedEventHandler<ABI::Windows::UI::ViewManagement::ApplicationView*,ABI::Windows::UI::ViewManagement::ApplicationViewConsolidatedEventArgs* > : ITypedEventHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::ViewManagement::ApplicationView*, ABI::Windows::UI::ViewManagement::IApplicationView* >, ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::ViewManagement::ApplicationViewConsolidatedEventArgs*, ABI::Windows::UI::ViewManagement::IApplicationViewConsolidatedEventArgs* > >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs, 0x463c606a, 0x8c82, 0x5a29, 0xa2,0xbd, 0x04,0x07,0x81,0xf2,0x53,0x48)
+#endif
+#else
+typedef struct __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs *This);
+
+    /*** ITypedEventHandler<ABI::Windows::UI::ViewManagement::ApplicationView*,ABI::Windows::UI::ViewManagement::ApplicationViewConsolidatedEventArgs* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs *This,
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationView *sender,
+        __x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs *args);
+
+    END_INTERFACE
+} __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgsVtbl;
+
+interface __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs {
+    CONST_VTBL __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypedEventHandler<ABI::Windows::UI::ViewManagement::ApplicationView*,ABI::Windows::UI::ViewManagement::ApplicationViewConsolidatedEventArgs* > methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs_Invoke(This,sender,args) (This)->lpVtbl->Invoke(This,sender,args)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs_QueryInterface(__FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs_AddRef(__FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs_Release(__FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITypedEventHandler<ABI::Windows::UI::ViewManagement::ApplicationView*,ABI::Windows::UI::ViewManagement::ApplicationViewConsolidatedEventArgs* > methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs_Invoke(__FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs* This,__x_ABI_CWindows_CUI_CViewManagement_CIApplicationView *sender,__x_ABI_CWindows_CUI_CViewManagement_CIApplicationViewConsolidatedEventArgs *args) {
+    return This->lpVtbl->Invoke(This,sender,args);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_ITypedEventHandler_ApplicationView_ApplicationViewConsolidatedEventArgs IID___FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs
+#define ITypedEventHandler_ApplicationView_ApplicationViewConsolidatedEventArgsVtbl __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgsVtbl
+#define ITypedEventHandler_ApplicationView_ApplicationViewConsolidatedEventArgs __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs
+#define ITypedEventHandler_ApplicationView_ApplicationViewConsolidatedEventArgs_QueryInterface __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs_QueryInterface
+#define ITypedEventHandler_ApplicationView_ApplicationViewConsolidatedEventArgs_AddRef __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs_AddRef
+#define ITypedEventHandler_ApplicationView_ApplicationViewConsolidatedEventArgs_Release __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs_Release
+#define ITypedEventHandler_ApplicationView_ApplicationViewConsolidatedEventArgs_Invoke __FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FITypedEventHandler_2_Windows__CUI__CViewManagement__CApplicationView_Windows__CUI__CViewManagement__CApplicationViewConsolidatedEventArgs_INTERFACE_DEFINED__ */
+
 /*****************************************************************************
  * ITypedEventHandler<ABI::Windows::UI::ViewManagement::UISettings*,IInspectable* > interface
  */
@@ -4125,6 +10182,10 @@
 
 /* Begin additional prototypes for all interfaces */
 
+ULONG           __RPC_USER HSTRING_UserSize     (ULONG *, ULONG, HSTRING *);
+unsigned char * __RPC_USER HSTRING_UserMarshal  (ULONG *, unsigned char *, HSTRING *);
+unsigned char * __RPC_USER HSTRING_UserUnmarshal(ULONG *, unsigned char *, HSTRING *);
+void            __RPC_USER HSTRING_UserFree     (ULONG *, HSTRING *);
 
 /* End additional prototypes */
 
diff --git a/mingw-w64-headers/include/windows.ui.windowmanagement.h b/mingw-w64-headers/include/windows.ui.windowmanagement.h
new file mode 100644
index 0000000..17df618
--- /dev/null
+++ b/mingw-w64-headers/include/windows.ui.windowmanagement.h
@@ -0,0 +1,2513 @@
+/*** Autogenerated by WIDL 10.13 from include/windows.ui.windowmanagement.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 __windows_ui_windowmanagement_h__
+#define __windows_ui_windowmanagement_h__
+
+/* Forward declarations */
+
+#ifndef ____x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion ABI::Windows::UI::WindowManagement::IDisplayRegion
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace WindowManagement {
+                interface IDisplayRegion;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment ABI::Windows::UI::WindowManagement::IWindowingEnvironment
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace WindowManagement {
+                interface IWindowingEnvironment;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs ABI::Windows::UI::WindowManagement::IWindowingEnvironmentAddedEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace WindowManagement {
+                interface IWindowingEnvironmentAddedEventArgs;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs ABI::Windows::UI::WindowManagement::IWindowingEnvironmentChangedEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace WindowManagement {
+                interface IWindowingEnvironmentChangedEventArgs;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs ABI::Windows::UI::WindowManagement::IWindowingEnvironmentRemovedEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace WindowManagement {
+                interface IWindowingEnvironmentRemovedEventArgs;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics ABI::Windows::UI::WindowManagement::IWindowingEnvironmentStatics
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace WindowManagement {
+                interface IWindowingEnvironmentStatics;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CWindowManagement_CDisplayRegion_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CWindowManagement_CDisplayRegion_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace WindowManagement {
+                class DisplayRegion;
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CWindowManagement_CDisplayRegion __x_ABI_CWindows_CUI_CWindowManagement_CDisplayRegion;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CWindowManagement_CDisplayRegion_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironment_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironment_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace WindowManagement {
+                class WindowingEnvironment;
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironment __x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironment;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironment_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironmentAddedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironmentAddedEventArgs_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace WindowManagement {
+                class WindowingEnvironmentAddedEventArgs;
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironmentAddedEventArgs __x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironmentAddedEventArgs;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironmentAddedEventArgs_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironmentChangedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironmentChangedEventArgs_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace WindowManagement {
+                class WindowingEnvironmentChangedEventArgs;
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironmentChangedEventArgs __x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironmentChangedEventArgs;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironmentChangedEventArgs_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironmentRemovedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironmentRemovedEventArgs_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace WindowManagement {
+                class WindowingEnvironmentRemovedEventArgs;
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironmentRemovedEventArgs __x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironmentRemovedEventArgs;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironmentRemovedEventArgs_FWD_DEFINED__ */
+
+#ifndef ____FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_FWD_DEFINED__
+#define ____FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_FWD_DEFINED__
+typedef interface __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion;
+#ifdef __cplusplus
+#define __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion ABI::Windows::Foundation::Collections::IIterable<ABI::Windows::UI::WindowManagement::DisplayRegion* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_FWD_DEFINED__
+#define ____FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_FWD_DEFINED__
+typedef interface __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment;
+#ifdef __cplusplus
+#define __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment ABI::Windows::Foundation::Collections::IIterable<ABI::Windows::UI::WindowManagement::WindowingEnvironment* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_FWD_DEFINED__
+#define ____FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_FWD_DEFINED__
+typedef interface __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion;
+#ifdef __cplusplus
+#define __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion ABI::Windows::Foundation::Collections::IIterator<ABI::Windows::UI::WindowManagement::DisplayRegion* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_FWD_DEFINED__
+#define ____FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_FWD_DEFINED__
+typedef interface __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment;
+#ifdef __cplusplus
+#define __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment ABI::Windows::Foundation::Collections::IIterator<ABI::Windows::UI::WindowManagement::WindowingEnvironment* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_FWD_DEFINED__
+#define ____FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_FWD_DEFINED__
+typedef interface __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion;
+#ifdef __cplusplus
+#define __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::UI::WindowManagement::DisplayRegion* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_FWD_DEFINED__
+#define ____FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_FWD_DEFINED__
+typedef interface __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment;
+#ifdef __cplusplus
+#define __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::UI::WindowManagement::WindowingEnvironment* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable_FWD_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable_FWD_DEFINED__
+typedef interface __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable;
+#ifdef __cplusplus
+#define __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::WindowManagement::DisplayRegion*,IInspectable* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs_FWD_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs_FWD_DEFINED__
+typedef interface __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs;
+#ifdef __cplusplus
+#define __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::WindowManagement::WindowingEnvironment*,ABI::Windows::UI::WindowManagement::WindowingEnvironmentChangedEventArgs* >
+#endif /* __cplusplus */
+#endif
+
+/* Headers for imported files */
+
+#include <inspectable.h>
+#include <asyncinfo.h>
+#include <eventtoken.h>
+#include <windowscontracts.h>
+#include <windows.foundation.h>
+#include <windows.system.h>
+#include <windows.ui.h>
+#include <windows.ui.composition.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)
+#define WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION 0xe0000
+#endif // defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000
+#ifndef ____x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironmentKind_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironmentKind_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace WindowManagement {
+                enum WindowingEnvironmentKind {
+                    WindowingEnvironmentKind_Unknown = 0,
+                    WindowingEnvironmentKind_Overlapped = 1,
+                    WindowingEnvironmentKind_Tiled = 2
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironmentKind {
+    WindowingEnvironmentKind_Unknown = 0,
+    WindowingEnvironmentKind_Overlapped = 1,
+    WindowingEnvironmentKind_Tiled = 2
+};
+#ifdef WIDL_using_Windows_UI_WindowManagement
+#define WindowingEnvironmentKind __x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironmentKind
+#endif /* WIDL_using_Windows_UI_WindowManagement */
+#endif
+
+#endif /* ____x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironmentKind_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironmentKind __x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironmentKind;
+#endif /* __cplusplus */
+
+#ifndef ____x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion ABI::Windows::UI::WindowManagement::IDisplayRegion
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace WindowManagement {
+                interface IDisplayRegion;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment ABI::Windows::UI::WindowManagement::IWindowingEnvironment
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace WindowManagement {
+                interface IWindowingEnvironment;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs ABI::Windows::UI::WindowManagement::IWindowingEnvironmentAddedEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace WindowManagement {
+                interface IWindowingEnvironmentAddedEventArgs;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs ABI::Windows::UI::WindowManagement::IWindowingEnvironmentChangedEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace WindowManagement {
+                interface IWindowingEnvironmentChangedEventArgs;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs ABI::Windows::UI::WindowManagement::IWindowingEnvironmentRemovedEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace WindowManagement {
+                interface IWindowingEnvironmentRemovedEventArgs;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics ABI::Windows::UI::WindowManagement::IWindowingEnvironmentStatics
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace WindowManagement {
+                interface IWindowingEnvironmentStatics;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_FWD_DEFINED__
+#define ____FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_FWD_DEFINED__
+typedef interface __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion;
+#ifdef __cplusplus
+#define __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion ABI::Windows::Foundation::Collections::IIterable<ABI::Windows::UI::WindowManagement::DisplayRegion* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_FWD_DEFINED__
+#define ____FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_FWD_DEFINED__
+typedef interface __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment;
+#ifdef __cplusplus
+#define __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment ABI::Windows::Foundation::Collections::IIterable<ABI::Windows::UI::WindowManagement::WindowingEnvironment* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_FWD_DEFINED__
+#define ____FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_FWD_DEFINED__
+typedef interface __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion;
+#ifdef __cplusplus
+#define __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion ABI::Windows::Foundation::Collections::IIterator<ABI::Windows::UI::WindowManagement::DisplayRegion* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_FWD_DEFINED__
+#define ____FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_FWD_DEFINED__
+typedef interface __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment;
+#ifdef __cplusplus
+#define __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment ABI::Windows::Foundation::Collections::IIterator<ABI::Windows::UI::WindowManagement::WindowingEnvironment* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_FWD_DEFINED__
+#define ____FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_FWD_DEFINED__
+typedef interface __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion;
+#ifdef __cplusplus
+#define __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::UI::WindowManagement::DisplayRegion* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_FWD_DEFINED__
+#define ____FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_FWD_DEFINED__
+typedef interface __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment;
+#ifdef __cplusplus
+#define __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::UI::WindowManagement::WindowingEnvironment* >
+#endif /* __cplusplus */
+#endif
+
+/*****************************************************************************
+ * IDisplayRegion interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000
+#ifndef ____x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion, 0xdb50c3a2, 0x4094, 0x5f47, 0x8c,0xb1, 0xea,0x01,0xdd,0xaf,0xaa,0x94);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace WindowManagement {
+                MIDL_INTERFACE("db50c3a2-4094-5f47-8cb1-ea01ddafaa94")
+                IDisplayRegion : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_DisplayMonitorDeviceId(
+                        HSTRING *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_IsVisible(
+                        boolean *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_WorkAreaOffset(
+                        ABI::Windows::Foundation::Point *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_WorkAreaSize(
+                        ABI::Windows::Foundation::Size *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_WindowingEnvironment(
+                        ABI::Windows::UI::WindowManagement::IWindowingEnvironment **value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE add_Changed(
+                        ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::WindowManagement::DisplayRegion*,IInspectable* > *handler,
+                        EventRegistrationToken *token) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE remove_Changed(
+                        EventRegistrationToken token) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion, 0xdb50c3a2, 0x4094, 0x5f47, 0x8c,0xb1, 0xea,0x01,0xdd,0xaf,0xaa,0x94)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion *This,
+        TrustLevel *trustLevel);
+
+    /*** IDisplayRegion methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_DisplayMonitorDeviceId)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion *This,
+        HSTRING *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsVisible)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_WorkAreaOffset)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion *This,
+        __x_ABI_CWindows_CFoundation_CPoint *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_WorkAreaSize)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion *This,
+        __x_ABI_CWindows_CFoundation_CSize *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_WindowingEnvironment)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion *This,
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment **value);
+
+    HRESULT (STDMETHODCALLTYPE *add_Changed)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion *This,
+        __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable *handler,
+        EventRegistrationToken *token);
+
+    HRESULT (STDMETHODCALLTYPE *remove_Changed)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion *This,
+        EventRegistrationToken token);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegionVtbl;
+
+interface __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion {
+    CONST_VTBL __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IDisplayRegion methods ***/
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_get_DisplayMonitorDeviceId(This,value) (This)->lpVtbl->get_DisplayMonitorDeviceId(This,value)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_get_IsVisible(This,value) (This)->lpVtbl->get_IsVisible(This,value)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_get_WorkAreaOffset(This,value) (This)->lpVtbl->get_WorkAreaOffset(This,value)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_get_WorkAreaSize(This,value) (This)->lpVtbl->get_WorkAreaSize(This,value)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_get_WindowingEnvironment(This,value) (This)->lpVtbl->get_WindowingEnvironment(This,value)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_add_Changed(This,handler,token) (This)->lpVtbl->add_Changed(This,handler,token)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_remove_Changed(This,token) (This)->lpVtbl->remove_Changed(This,token)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_QueryInterface(__x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_AddRef(__x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_Release(__x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_GetIids(__x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_GetRuntimeClassName(__x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_GetTrustLevel(__x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IDisplayRegion methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_get_DisplayMonitorDeviceId(__x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion* This,HSTRING *value) {
+    return This->lpVtbl->get_DisplayMonitorDeviceId(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_get_IsVisible(__x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion* This,boolean *value) {
+    return This->lpVtbl->get_IsVisible(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_get_WorkAreaOffset(__x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion* This,__x_ABI_CWindows_CFoundation_CPoint *value) {
+    return This->lpVtbl->get_WorkAreaOffset(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_get_WorkAreaSize(__x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion* This,__x_ABI_CWindows_CFoundation_CSize *value) {
+    return This->lpVtbl->get_WorkAreaSize(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_get_WindowingEnvironment(__x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion* This,__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment **value) {
+    return This->lpVtbl->get_WindowingEnvironment(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_add_Changed(__x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion* This,__FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable *handler,EventRegistrationToken *token) {
+    return This->lpVtbl->add_Changed(This,handler,token);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_remove_Changed(__x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion* This,EventRegistrationToken token) {
+    return This->lpVtbl->remove_Changed(This,token);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_WindowManagement
+#define IID_IDisplayRegion IID___x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion
+#define IDisplayRegionVtbl __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegionVtbl
+#define IDisplayRegion __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion
+#define IDisplayRegion_QueryInterface __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_QueryInterface
+#define IDisplayRegion_AddRef __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_AddRef
+#define IDisplayRegion_Release __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_Release
+#define IDisplayRegion_GetIids __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_GetIids
+#define IDisplayRegion_GetRuntimeClassName __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_GetRuntimeClassName
+#define IDisplayRegion_GetTrustLevel __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_GetTrustLevel
+#define IDisplayRegion_get_DisplayMonitorDeviceId __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_get_DisplayMonitorDeviceId
+#define IDisplayRegion_get_IsVisible __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_get_IsVisible
+#define IDisplayRegion_get_WorkAreaOffset __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_get_WorkAreaOffset
+#define IDisplayRegion_get_WorkAreaSize __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_get_WorkAreaSize
+#define IDisplayRegion_get_WindowingEnvironment __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_get_WindowingEnvironment
+#define IDisplayRegion_add_Changed __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_add_Changed
+#define IDisplayRegion_remove_Changed __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_remove_Changed
+#endif /* WIDL_using_Windows_UI_WindowManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000 */
+
+/*****************************************************************************
+ * IWindowingEnvironment interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000
+#ifndef ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment, 0x264363c0, 0x2a49, 0x5417, 0xb3,0xae, 0x48,0xa7,0x1c,0x63,0xa3,0xbd);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace WindowManagement {
+                MIDL_INTERFACE("264363c0-2a49-5417-b3ae-48a71c63a3bd")
+                IWindowingEnvironment : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_IsEnabled(
+                        boolean *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_Kind(
+                        ABI::Windows::UI::WindowManagement::WindowingEnvironmentKind *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE GetDisplayRegions(
+                        ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::UI::WindowManagement::DisplayRegion* > **result) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE add_Changed(
+                        ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::WindowManagement::WindowingEnvironment*,ABI::Windows::UI::WindowManagement::WindowingEnvironmentChangedEventArgs* > *handler,
+                        EventRegistrationToken *token) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE remove_Changed(
+                        EventRegistrationToken token) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment, 0x264363c0, 0x2a49, 0x5417, 0xb3,0xae, 0x48,0xa7,0x1c,0x63,0xa3,0xbd)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment *This,
+        TrustLevel *trustLevel);
+
+    /*** IWindowingEnvironment methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_IsEnabled)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Kind)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment *This,
+        __x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironmentKind *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetDisplayRegions)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment *This,
+        __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion **result);
+
+    HRESULT (STDMETHODCALLTYPE *add_Changed)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment *This,
+        __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs *handler,
+        EventRegistrationToken *token);
+
+    HRESULT (STDMETHODCALLTYPE *remove_Changed)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment *This,
+        EventRegistrationToken token);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentVtbl;
+
+interface __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment {
+    CONST_VTBL __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IWindowingEnvironment methods ***/
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_get_IsEnabled(This,value) (This)->lpVtbl->get_IsEnabled(This,value)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_get_Kind(This,value) (This)->lpVtbl->get_Kind(This,value)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_GetDisplayRegions(This,result) (This)->lpVtbl->GetDisplayRegions(This,result)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_add_Changed(This,handler,token) (This)->lpVtbl->add_Changed(This,handler,token)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_remove_Changed(This,token) (This)->lpVtbl->remove_Changed(This,token)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_QueryInterface(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_AddRef(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_Release(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_GetIids(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_GetRuntimeClassName(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_GetTrustLevel(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IWindowingEnvironment methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_get_IsEnabled(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment* This,boolean *value) {
+    return This->lpVtbl->get_IsEnabled(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_get_Kind(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment* This,__x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironmentKind *value) {
+    return This->lpVtbl->get_Kind(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_GetDisplayRegions(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment* This,__FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion **result) {
+    return This->lpVtbl->GetDisplayRegions(This,result);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_add_Changed(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment* This,__FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs *handler,EventRegistrationToken *token) {
+    return This->lpVtbl->add_Changed(This,handler,token);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_remove_Changed(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment* This,EventRegistrationToken token) {
+    return This->lpVtbl->remove_Changed(This,token);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_WindowManagement
+#define IID_IWindowingEnvironment IID___x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment
+#define IWindowingEnvironmentVtbl __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentVtbl
+#define IWindowingEnvironment __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment
+#define IWindowingEnvironment_QueryInterface __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_QueryInterface
+#define IWindowingEnvironment_AddRef __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_AddRef
+#define IWindowingEnvironment_Release __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_Release
+#define IWindowingEnvironment_GetIids __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_GetIids
+#define IWindowingEnvironment_GetRuntimeClassName __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_GetRuntimeClassName
+#define IWindowingEnvironment_GetTrustLevel __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_GetTrustLevel
+#define IWindowingEnvironment_get_IsEnabled __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_get_IsEnabled
+#define IWindowingEnvironment_get_Kind __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_get_Kind
+#define IWindowingEnvironment_GetDisplayRegions __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_GetDisplayRegions
+#define IWindowingEnvironment_add_Changed __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_add_Changed
+#define IWindowingEnvironment_remove_Changed __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_remove_Changed
+#endif /* WIDL_using_Windows_UI_WindowManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000 */
+
+/*****************************************************************************
+ * IWindowingEnvironmentAddedEventArgs interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000
+#ifndef ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs, 0xff2a5b7f, 0xf183, 0x5c66, 0x99,0xb2, 0x42,0x90,0x82,0x06,0x92,0x99);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace WindowManagement {
+                MIDL_INTERFACE("ff2a5b7f-f183-5c66-99b2-429082069299")
+                IWindowingEnvironmentAddedEventArgs : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_WindowingEnvironment(
+                        ABI::Windows::UI::WindowManagement::IWindowingEnvironment **value) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs, 0xff2a5b7f, 0xf183, 0x5c66, 0x99,0xb2, 0x42,0x90,0x82,0x06,0x92,0x99)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs *This,
+        TrustLevel *trustLevel);
+
+    /*** IWindowingEnvironmentAddedEventArgs methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_WindowingEnvironment)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs *This,
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgsVtbl;
+
+interface __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs {
+    CONST_VTBL __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IWindowingEnvironmentAddedEventArgs methods ***/
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_get_WindowingEnvironment(This,value) (This)->lpVtbl->get_WindowingEnvironment(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_QueryInterface(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_AddRef(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_Release(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_GetIids(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_GetRuntimeClassName(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_GetTrustLevel(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IWindowingEnvironmentAddedEventArgs methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_get_WindowingEnvironment(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs* This,__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment **value) {
+    return This->lpVtbl->get_WindowingEnvironment(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_WindowManagement
+#define IID_IWindowingEnvironmentAddedEventArgs IID___x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs
+#define IWindowingEnvironmentAddedEventArgsVtbl __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgsVtbl
+#define IWindowingEnvironmentAddedEventArgs __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs
+#define IWindowingEnvironmentAddedEventArgs_QueryInterface __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_QueryInterface
+#define IWindowingEnvironmentAddedEventArgs_AddRef __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_AddRef
+#define IWindowingEnvironmentAddedEventArgs_Release __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_Release
+#define IWindowingEnvironmentAddedEventArgs_GetIids __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_GetIids
+#define IWindowingEnvironmentAddedEventArgs_GetRuntimeClassName __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_GetRuntimeClassName
+#define IWindowingEnvironmentAddedEventArgs_GetTrustLevel __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_GetTrustLevel
+#define IWindowingEnvironmentAddedEventArgs_get_WindowingEnvironment __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_get_WindowingEnvironment
+#endif /* WIDL_using_Windows_UI_WindowManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentAddedEventArgs_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000 */
+
+/*****************************************************************************
+ * IWindowingEnvironmentChangedEventArgs interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000
+#ifndef ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs, 0x4160cfc6, 0x023d, 0x5e9a, 0xb4,0x31, 0x35,0x0e,0x67,0xdc,0x97,0x8a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace WindowManagement {
+                MIDL_INTERFACE("4160cfc6-023d-5e9a-b431-350e67dc978a")
+                IWindowingEnvironmentChangedEventArgs : public IInspectable
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs, 0x4160cfc6, 0x023d, 0x5e9a, 0xb4,0x31, 0x35,0x0e,0x67,0xdc,0x97,0x8a)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs *This,
+        TrustLevel *trustLevel);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgsVtbl;
+
+interface __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs {
+    CONST_VTBL __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs_QueryInterface(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs_AddRef(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs_Release(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs_GetIids(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs_GetRuntimeClassName(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs_GetTrustLevel(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_WindowManagement
+#define IID_IWindowingEnvironmentChangedEventArgs IID___x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs
+#define IWindowingEnvironmentChangedEventArgsVtbl __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgsVtbl
+#define IWindowingEnvironmentChangedEventArgs __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs
+#define IWindowingEnvironmentChangedEventArgs_QueryInterface __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs_QueryInterface
+#define IWindowingEnvironmentChangedEventArgs_AddRef __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs_AddRef
+#define IWindowingEnvironmentChangedEventArgs_Release __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs_Release
+#define IWindowingEnvironmentChangedEventArgs_GetIids __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs_GetIids
+#define IWindowingEnvironmentChangedEventArgs_GetRuntimeClassName __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs_GetRuntimeClassName
+#define IWindowingEnvironmentChangedEventArgs_GetTrustLevel __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs_GetTrustLevel
+#endif /* WIDL_using_Windows_UI_WindowManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000 */
+
+/*****************************************************************************
+ * IWindowingEnvironmentRemovedEventArgs interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000
+#ifndef ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs, 0x2e5b5473, 0xbeff, 0x5e53, 0x93,0x16, 0x7e,0x77,0x5f,0xe5,0x68,0xb3);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace WindowManagement {
+                MIDL_INTERFACE("2e5b5473-beff-5e53-9316-7e775fe568b3")
+                IWindowingEnvironmentRemovedEventArgs : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_WindowingEnvironment(
+                        ABI::Windows::UI::WindowManagement::IWindowingEnvironment **value) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs, 0x2e5b5473, 0xbeff, 0x5e53, 0x93,0x16, 0x7e,0x77,0x5f,0xe5,0x68,0xb3)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs *This,
+        TrustLevel *trustLevel);
+
+    /*** IWindowingEnvironmentRemovedEventArgs methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_WindowingEnvironment)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs *This,
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgsVtbl;
+
+interface __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs {
+    CONST_VTBL __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IWindowingEnvironmentRemovedEventArgs methods ***/
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_get_WindowingEnvironment(This,value) (This)->lpVtbl->get_WindowingEnvironment(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_QueryInterface(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_AddRef(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_Release(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_GetIids(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_GetRuntimeClassName(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_GetTrustLevel(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IWindowingEnvironmentRemovedEventArgs methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_get_WindowingEnvironment(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs* This,__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment **value) {
+    return This->lpVtbl->get_WindowingEnvironment(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_WindowManagement
+#define IID_IWindowingEnvironmentRemovedEventArgs IID___x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs
+#define IWindowingEnvironmentRemovedEventArgsVtbl __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgsVtbl
+#define IWindowingEnvironmentRemovedEventArgs __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs
+#define IWindowingEnvironmentRemovedEventArgs_QueryInterface __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_QueryInterface
+#define IWindowingEnvironmentRemovedEventArgs_AddRef __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_AddRef
+#define IWindowingEnvironmentRemovedEventArgs_Release __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_Release
+#define IWindowingEnvironmentRemovedEventArgs_GetIids __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_GetIids
+#define IWindowingEnvironmentRemovedEventArgs_GetRuntimeClassName __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_GetRuntimeClassName
+#define IWindowingEnvironmentRemovedEventArgs_GetTrustLevel __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_GetTrustLevel
+#define IWindowingEnvironmentRemovedEventArgs_get_WindowingEnvironment __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_get_WindowingEnvironment
+#endif /* WIDL_using_Windows_UI_WindowManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentRemovedEventArgs_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000 */
+
+/*****************************************************************************
+ * IWindowingEnvironmentStatics interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000
+#ifndef ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics, 0x874e9fb7, 0xc642, 0x55ab, 0x8a,0xa2, 0x16,0x2f,0x73,0x4a,0x9a,0x72);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace WindowManagement {
+                MIDL_INTERFACE("874e9fb7-c642-55ab-8aa2-162f734a9a72")
+                IWindowingEnvironmentStatics : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE FindAll(
+                        ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::UI::WindowManagement::WindowingEnvironment* > **result) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE FindAllWithKind(
+                        ABI::Windows::UI::WindowManagement::WindowingEnvironmentKind kind,
+                        ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::UI::WindowManagement::WindowingEnvironment* > **result) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics, 0x874e9fb7, 0xc642, 0x55ab, 0x8a,0xa2, 0x16,0x2f,0x73,0x4a,0x9a,0x72)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStaticsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics *This,
+        TrustLevel *trustLevel);
+
+    /*** IWindowingEnvironmentStatics methods ***/
+    HRESULT (STDMETHODCALLTYPE *FindAll)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics *This,
+        __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment **result);
+
+    HRESULT (STDMETHODCALLTYPE *FindAllWithKind)(
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics *This,
+        __x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironmentKind kind,
+        __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment **result);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStaticsVtbl;
+
+interface __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics {
+    CONST_VTBL __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStaticsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IWindowingEnvironmentStatics methods ***/
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_FindAll(This,result) (This)->lpVtbl->FindAll(This,result)
+#define __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_FindAllWithKind(This,kind,result) (This)->lpVtbl->FindAllWithKind(This,kind,result)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_QueryInterface(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_AddRef(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_Release(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_GetIids(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_GetRuntimeClassName(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_GetTrustLevel(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IWindowingEnvironmentStatics methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_FindAll(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics* This,__FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment **result) {
+    return This->lpVtbl->FindAll(This,result);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_FindAllWithKind(__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics* This,__x_ABI_CWindows_CUI_CWindowManagement_CWindowingEnvironmentKind kind,__FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment **result) {
+    return This->lpVtbl->FindAllWithKind(This,kind,result);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_WindowManagement
+#define IID_IWindowingEnvironmentStatics IID___x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics
+#define IWindowingEnvironmentStaticsVtbl __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStaticsVtbl
+#define IWindowingEnvironmentStatics __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics
+#define IWindowingEnvironmentStatics_QueryInterface __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_QueryInterface
+#define IWindowingEnvironmentStatics_AddRef __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_AddRef
+#define IWindowingEnvironmentStatics_Release __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_Release
+#define IWindowingEnvironmentStatics_GetIids __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_GetIids
+#define IWindowingEnvironmentStatics_GetRuntimeClassName __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_GetRuntimeClassName
+#define IWindowingEnvironmentStatics_GetTrustLevel __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_GetTrustLevel
+#define IWindowingEnvironmentStatics_FindAll __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_FindAll
+#define IWindowingEnvironmentStatics_FindAllWithKind __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_FindAllWithKind
+#endif /* WIDL_using_Windows_UI_WindowManagement */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentStatics_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000 */
+
+/*
+ * Class Windows.UI.WindowManagement.DisplayRegion
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000
+#ifndef RUNTIMECLASS_Windows_UI_WindowManagement_DisplayRegion_DEFINED
+#define RUNTIMECLASS_Windows_UI_WindowManagement_DisplayRegion_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_WindowManagement_DisplayRegion[] = {'W','i','n','d','o','w','s','.','U','I','.','W','i','n','d','o','w','M','a','n','a','g','e','m','e','n','t','.','D','i','s','p','l','a','y','R','e','g','i','o','n',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_WindowManagement_DisplayRegion[] = L"Windows.UI.WindowManagement.DisplayRegion";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_WindowManagement_DisplayRegion[] = {'W','i','n','d','o','w','s','.','U','I','.','W','i','n','d','o','w','M','a','n','a','g','e','m','e','n','t','.','D','i','s','p','l','a','y','R','e','g','i','o','n',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_WindowManagement_DisplayRegion_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000 */
+
+/*
+ * Class Windows.UI.WindowManagement.WindowingEnvironment
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000
+#ifndef RUNTIMECLASS_Windows_UI_WindowManagement_WindowingEnvironment_DEFINED
+#define RUNTIMECLASS_Windows_UI_WindowManagement_WindowingEnvironment_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_WindowManagement_WindowingEnvironment[] = {'W','i','n','d','o','w','s','.','U','I','.','W','i','n','d','o','w','M','a','n','a','g','e','m','e','n','t','.','W','i','n','d','o','w','i','n','g','E','n','v','i','r','o','n','m','e','n','t',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_WindowManagement_WindowingEnvironment[] = L"Windows.UI.WindowManagement.WindowingEnvironment";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_WindowManagement_WindowingEnvironment[] = {'W','i','n','d','o','w','s','.','U','I','.','W','i','n','d','o','w','M','a','n','a','g','e','m','e','n','t','.','W','i','n','d','o','w','i','n','g','E','n','v','i','r','o','n','m','e','n','t',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_WindowManagement_WindowingEnvironment_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000 */
+
+/*
+ * Class Windows.UI.WindowManagement.WindowingEnvironmentAddedEventArgs
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000
+#ifndef RUNTIMECLASS_Windows_UI_WindowManagement_WindowingEnvironmentAddedEventArgs_DEFINED
+#define RUNTIMECLASS_Windows_UI_WindowManagement_WindowingEnvironmentAddedEventArgs_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_WindowManagement_WindowingEnvironmentAddedEventArgs[] = {'W','i','n','d','o','w','s','.','U','I','.','W','i','n','d','o','w','M','a','n','a','g','e','m','e','n','t','.','W','i','n','d','o','w','i','n','g','E','n','v','i','r','o','n','m','e','n','t','A','d','d','e','d','E','v','e','n','t','A','r','g','s',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_WindowManagement_WindowingEnvironmentAddedEventArgs[] = L"Windows.UI.WindowManagement.WindowingEnvironmentAddedEventArgs";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_WindowManagement_WindowingEnvironmentAddedEventArgs[] = {'W','i','n','d','o','w','s','.','U','I','.','W','i','n','d','o','w','M','a','n','a','g','e','m','e','n','t','.','W','i','n','d','o','w','i','n','g','E','n','v','i','r','o','n','m','e','n','t','A','d','d','e','d','E','v','e','n','t','A','r','g','s',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_WindowManagement_WindowingEnvironmentAddedEventArgs_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000 */
+
+/*
+ * Class Windows.UI.WindowManagement.WindowingEnvironmentChangedEventArgs
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000
+#ifndef RUNTIMECLASS_Windows_UI_WindowManagement_WindowingEnvironmentChangedEventArgs_DEFINED
+#define RUNTIMECLASS_Windows_UI_WindowManagement_WindowingEnvironmentChangedEventArgs_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_WindowManagement_WindowingEnvironmentChangedEventArgs[] = {'W','i','n','d','o','w','s','.','U','I','.','W','i','n','d','o','w','M','a','n','a','g','e','m','e','n','t','.','W','i','n','d','o','w','i','n','g','E','n','v','i','r','o','n','m','e','n','t','C','h','a','n','g','e','d','E','v','e','n','t','A','r','g','s',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_WindowManagement_WindowingEnvironmentChangedEventArgs[] = L"Windows.UI.WindowManagement.WindowingEnvironmentChangedEventArgs";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_WindowManagement_WindowingEnvironmentChangedEventArgs[] = {'W','i','n','d','o','w','s','.','U','I','.','W','i','n','d','o','w','M','a','n','a','g','e','m','e','n','t','.','W','i','n','d','o','w','i','n','g','E','n','v','i','r','o','n','m','e','n','t','C','h','a','n','g','e','d','E','v','e','n','t','A','r','g','s',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_WindowManagement_WindowingEnvironmentChangedEventArgs_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000 */
+
+/*
+ * Class Windows.UI.WindowManagement.WindowingEnvironmentRemovedEventArgs
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000
+#ifndef RUNTIMECLASS_Windows_UI_WindowManagement_WindowingEnvironmentRemovedEventArgs_DEFINED
+#define RUNTIMECLASS_Windows_UI_WindowManagement_WindowingEnvironmentRemovedEventArgs_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_WindowManagement_WindowingEnvironmentRemovedEventArgs[] = {'W','i','n','d','o','w','s','.','U','I','.','W','i','n','d','o','w','M','a','n','a','g','e','m','e','n','t','.','W','i','n','d','o','w','i','n','g','E','n','v','i','r','o','n','m','e','n','t','R','e','m','o','v','e','d','E','v','e','n','t','A','r','g','s',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_WindowManagement_WindowingEnvironmentRemovedEventArgs[] = L"Windows.UI.WindowManagement.WindowingEnvironmentRemovedEventArgs";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_WindowManagement_WindowingEnvironmentRemovedEventArgs[] = {'W','i','n','d','o','w','s','.','U','I','.','W','i','n','d','o','w','M','a','n','a','g','e','m','e','n','t','.','W','i','n','d','o','w','i','n','g','E','n','v','i','r','o','n','m','e','n','t','R','e','m','o','v','e','d','E','v','e','n','t','A','r','g','s',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_WindowManagement_WindowingEnvironmentRemovedEventArgs_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000 */
+
+/*****************************************************************************
+ * IIterable<ABI::Windows::UI::WindowManagement::DisplayRegion* > interface
+ */
+#ifndef ____FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_INTERFACE_DEFINED__
+#define ____FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion, 0x026730ab, 0x250d, 0x503c, 0xa8,0x76, 0x43,0xbb,0xb7,0x54,0xad,0x44);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                template<>
+                MIDL_INTERFACE("026730ab-250d-503c-a876-43bbb754ad44")
+                IIterable<ABI::Windows::UI::WindowManagement::DisplayRegion* > : IIterable_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::WindowManagement::DisplayRegion*, ABI::Windows::UI::WindowManagement::IDisplayRegion* > >
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion, 0x026730ab, 0x250d, 0x503c, 0xa8,0x76, 0x43,0xbb,0xb7,0x54,0xad,0x44)
+#endif
+#else
+typedef struct __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion *This,
+        TrustLevel *trustLevel);
+
+    /*** IIterable<ABI::Windows::UI::WindowManagement::DisplayRegion* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *First)(
+        __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion *This,
+        __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion **value);
+
+    END_INTERFACE
+} __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegionVtbl;
+
+interface __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion {
+    CONST_VTBL __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IIterable<ABI::Windows::UI::WindowManagement::DisplayRegion* > methods ***/
+#define __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_First(This,value) (This)->lpVtbl->First(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_QueryInterface(__FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_AddRef(__FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_Release(__FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetIids(__FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetRuntimeClassName(__FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetTrustLevel(__FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IIterable<ABI::Windows::UI::WindowManagement::DisplayRegion* > methods ***/
+static inline HRESULT __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_First(__FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion* This,__FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion **value) {
+    return This->lpVtbl->First(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation_Collections
+#define IID_IIterable_DisplayRegion IID___FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion
+#define IIterable_DisplayRegionVtbl __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegionVtbl
+#define IIterable_DisplayRegion __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion
+#define IIterable_DisplayRegion_QueryInterface __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_QueryInterface
+#define IIterable_DisplayRegion_AddRef __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_AddRef
+#define IIterable_DisplayRegion_Release __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_Release
+#define IIterable_DisplayRegion_GetIids __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetIids
+#define IIterable_DisplayRegion_GetRuntimeClassName __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetRuntimeClassName
+#define IIterable_DisplayRegion_GetTrustLevel __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetTrustLevel
+#define IIterable_DisplayRegion_First __FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_First
+#endif /* WIDL_using_Windows_Foundation_Collections */
+#endif
+
+#endif
+
+#endif  /* ____FIIterable_1_Windows__CUI__CWindowManagement__CDisplayRegion_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IIterable<ABI::Windows::UI::WindowManagement::WindowingEnvironment* > interface
+ */
+#ifndef ____FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_INTERFACE_DEFINED__
+#define ____FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment, 0x626a6481, 0x0174, 0x5a56, 0x84,0xc9, 0xe8,0xd4,0xc4,0x8c,0xfb,0x1b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                template<>
+                MIDL_INTERFACE("626a6481-0174-5a56-84c9-e8d4c48cfb1b")
+                IIterable<ABI::Windows::UI::WindowManagement::WindowingEnvironment* > : IIterable_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::WindowManagement::WindowingEnvironment*, ABI::Windows::UI::WindowManagement::IWindowingEnvironment* > >
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment, 0x626a6481, 0x0174, 0x5a56, 0x84,0xc9, 0xe8,0xd4,0xc4,0x8c,0xfb,0x1b)
+#endif
+#else
+typedef struct __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironmentVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This,
+        TrustLevel *trustLevel);
+
+    /*** IIterable<ABI::Windows::UI::WindowManagement::WindowingEnvironment* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *First)(
+        __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This,
+        __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment **value);
+
+    END_INTERFACE
+} __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironmentVtbl;
+
+interface __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment {
+    CONST_VTBL __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironmentVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IIterable<ABI::Windows::UI::WindowManagement::WindowingEnvironment* > methods ***/
+#define __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_First(This,value) (This)->lpVtbl->First(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_QueryInterface(__FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_AddRef(__FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_Release(__FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetIids(__FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetRuntimeClassName(__FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetTrustLevel(__FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IIterable<ABI::Windows::UI::WindowManagement::WindowingEnvironment* > methods ***/
+static inline HRESULT __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_First(__FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This,__FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment **value) {
+    return This->lpVtbl->First(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation_Collections
+#define IID_IIterable_WindowingEnvironment IID___FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment
+#define IIterable_WindowingEnvironmentVtbl __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironmentVtbl
+#define IIterable_WindowingEnvironment __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment
+#define IIterable_WindowingEnvironment_QueryInterface __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_QueryInterface
+#define IIterable_WindowingEnvironment_AddRef __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_AddRef
+#define IIterable_WindowingEnvironment_Release __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_Release
+#define IIterable_WindowingEnvironment_GetIids __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetIids
+#define IIterable_WindowingEnvironment_GetRuntimeClassName __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetRuntimeClassName
+#define IIterable_WindowingEnvironment_GetTrustLevel __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetTrustLevel
+#define IIterable_WindowingEnvironment_First __FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_First
+#endif /* WIDL_using_Windows_Foundation_Collections */
+#endif
+
+#endif
+
+#endif  /* ____FIIterable_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IIterator<ABI::Windows::UI::WindowManagement::DisplayRegion* > interface
+ */
+#ifndef ____FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_INTERFACE_DEFINED__
+#define ____FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion, 0x110d4d7e, 0x2f29, 0x51b8, 0x96,0x91, 0x8b,0x20,0x6a,0xd1,0xd7,0x3b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                template<>
+                MIDL_INTERFACE("110d4d7e-2f29-51b8-9691-8b206ad1d73b")
+                IIterator<ABI::Windows::UI::WindowManagement::DisplayRegion* > : IIterator_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::WindowManagement::DisplayRegion*, ABI::Windows::UI::WindowManagement::IDisplayRegion* > >
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion, 0x110d4d7e, 0x2f29, 0x51b8, 0x96,0x91, 0x8b,0x20,0x6a,0xd1,0xd7,0x3b)
+#endif
+#else
+typedef struct __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion *This,
+        TrustLevel *trustLevel);
+
+    /*** IIterator<ABI::Windows::UI::WindowManagement::DisplayRegion* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Current)(
+        __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion *This,
+        __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_HasCurrent)(
+        __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *MoveNext)(
+        __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetMany)(
+        __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion *This,
+        UINT32 items_size,
+        __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion **items,
+        UINT32 *value);
+
+    END_INTERFACE
+} __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegionVtbl;
+
+interface __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion {
+    CONST_VTBL __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IIterator<ABI::Windows::UI::WindowManagement::DisplayRegion* > methods ***/
+#define __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_get_Current(This,value) (This)->lpVtbl->get_Current(This,value)
+#define __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_get_HasCurrent(This,value) (This)->lpVtbl->get_HasCurrent(This,value)
+#define __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_MoveNext(This,value) (This)->lpVtbl->MoveNext(This,value)
+#define __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetMany(This,items_size,items,value) (This)->lpVtbl->GetMany(This,items_size,items,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_QueryInterface(__FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_AddRef(__FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_Release(__FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetIids(__FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetRuntimeClassName(__FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetTrustLevel(__FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IIterator<ABI::Windows::UI::WindowManagement::DisplayRegion* > methods ***/
+static inline HRESULT __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_get_Current(__FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion* This,__x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion **value) {
+    return This->lpVtbl->get_Current(This,value);
+}
+static inline HRESULT __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_get_HasCurrent(__FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion* This,boolean *value) {
+    return This->lpVtbl->get_HasCurrent(This,value);
+}
+static inline HRESULT __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_MoveNext(__FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion* This,boolean *value) {
+    return This->lpVtbl->MoveNext(This,value);
+}
+static inline HRESULT __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetMany(__FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion* This,UINT32 items_size,__x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion **items,UINT32 *value) {
+    return This->lpVtbl->GetMany(This,items_size,items,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation_Collections
+#define IID_IIterator_DisplayRegion IID___FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion
+#define IIterator_DisplayRegionVtbl __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegionVtbl
+#define IIterator_DisplayRegion __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion
+#define IIterator_DisplayRegion_QueryInterface __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_QueryInterface
+#define IIterator_DisplayRegion_AddRef __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_AddRef
+#define IIterator_DisplayRegion_Release __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_Release
+#define IIterator_DisplayRegion_GetIids __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetIids
+#define IIterator_DisplayRegion_GetRuntimeClassName __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetRuntimeClassName
+#define IIterator_DisplayRegion_GetTrustLevel __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetTrustLevel
+#define IIterator_DisplayRegion_get_Current __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_get_Current
+#define IIterator_DisplayRegion_get_HasCurrent __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_get_HasCurrent
+#define IIterator_DisplayRegion_MoveNext __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_MoveNext
+#define IIterator_DisplayRegion_GetMany __FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetMany
+#endif /* WIDL_using_Windows_Foundation_Collections */
+#endif
+
+#endif
+
+#endif  /* ____FIIterator_1_Windows__CUI__CWindowManagement__CDisplayRegion_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IIterator<ABI::Windows::UI::WindowManagement::WindowingEnvironment* > interface
+ */
+#ifndef ____FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_INTERFACE_DEFINED__
+#define ____FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment, 0xa35c192a, 0x9459, 0x5bcc, 0x9d,0xb3, 0x23,0x24,0x37,0x16,0x19,0x7f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                template<>
+                MIDL_INTERFACE("a35c192a-9459-5bcc-9db3-23243716197f")
+                IIterator<ABI::Windows::UI::WindowManagement::WindowingEnvironment* > : IIterator_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::WindowManagement::WindowingEnvironment*, ABI::Windows::UI::WindowManagement::IWindowingEnvironment* > >
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment, 0xa35c192a, 0x9459, 0x5bcc, 0x9d,0xb3, 0x23,0x24,0x37,0x16,0x19,0x7f)
+#endif
+#else
+typedef struct __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironmentVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This,
+        TrustLevel *trustLevel);
+
+    /*** IIterator<ABI::Windows::UI::WindowManagement::WindowingEnvironment* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Current)(
+        __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This,
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_HasCurrent)(
+        __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *MoveNext)(
+        __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetMany)(
+        __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This,
+        UINT32 items_size,
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment **items,
+        UINT32 *value);
+
+    END_INTERFACE
+} __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironmentVtbl;
+
+interface __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment {
+    CONST_VTBL __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironmentVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IIterator<ABI::Windows::UI::WindowManagement::WindowingEnvironment* > methods ***/
+#define __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_get_Current(This,value) (This)->lpVtbl->get_Current(This,value)
+#define __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_get_HasCurrent(This,value) (This)->lpVtbl->get_HasCurrent(This,value)
+#define __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_MoveNext(This,value) (This)->lpVtbl->MoveNext(This,value)
+#define __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetMany(This,items_size,items,value) (This)->lpVtbl->GetMany(This,items_size,items,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_QueryInterface(__FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_AddRef(__FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_Release(__FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetIids(__FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetRuntimeClassName(__FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetTrustLevel(__FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IIterator<ABI::Windows::UI::WindowManagement::WindowingEnvironment* > methods ***/
+static inline HRESULT __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_get_Current(__FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This,__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment **value) {
+    return This->lpVtbl->get_Current(This,value);
+}
+static inline HRESULT __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_get_HasCurrent(__FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This,boolean *value) {
+    return This->lpVtbl->get_HasCurrent(This,value);
+}
+static inline HRESULT __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_MoveNext(__FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This,boolean *value) {
+    return This->lpVtbl->MoveNext(This,value);
+}
+static inline HRESULT __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetMany(__FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This,UINT32 items_size,__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment **items,UINT32 *value) {
+    return This->lpVtbl->GetMany(This,items_size,items,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation_Collections
+#define IID_IIterator_WindowingEnvironment IID___FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment
+#define IIterator_WindowingEnvironmentVtbl __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironmentVtbl
+#define IIterator_WindowingEnvironment __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment
+#define IIterator_WindowingEnvironment_QueryInterface __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_QueryInterface
+#define IIterator_WindowingEnvironment_AddRef __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_AddRef
+#define IIterator_WindowingEnvironment_Release __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_Release
+#define IIterator_WindowingEnvironment_GetIids __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetIids
+#define IIterator_WindowingEnvironment_GetRuntimeClassName __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetRuntimeClassName
+#define IIterator_WindowingEnvironment_GetTrustLevel __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetTrustLevel
+#define IIterator_WindowingEnvironment_get_Current __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_get_Current
+#define IIterator_WindowingEnvironment_get_HasCurrent __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_get_HasCurrent
+#define IIterator_WindowingEnvironment_MoveNext __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_MoveNext
+#define IIterator_WindowingEnvironment_GetMany __FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetMany
+#endif /* WIDL_using_Windows_Foundation_Collections */
+#endif
+
+#endif
+
+#endif  /* ____FIIterator_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IVectorView<ABI::Windows::UI::WindowManagement::DisplayRegion* > interface
+ */
+#ifndef ____FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_INTERFACE_DEFINED__
+#define ____FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion, 0x9460debb, 0xa0d6, 0x5ab8, 0x84,0xf5, 0x90,0x87,0xf2,0xa6,0xbb,0x67);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                template<>
+                MIDL_INTERFACE("9460debb-a0d6-5ab8-84f5-9087f2a6bb67")
+                IVectorView<ABI::Windows::UI::WindowManagement::DisplayRegion* > : IVectorView_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::WindowManagement::DisplayRegion*, ABI::Windows::UI::WindowManagement::IDisplayRegion* > >
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion, 0x9460debb, 0xa0d6, 0x5ab8, 0x84,0xf5, 0x90,0x87,0xf2,0xa6,0xbb,0x67)
+#endif
+#else
+typedef struct __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion *This,
+        TrustLevel *trustLevel);
+
+    /*** IVectorView<ABI::Windows::UI::WindowManagement::DisplayRegion* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetAt)(
+        __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion *This,
+        UINT32 index,
+        __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Size)(
+        __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion *This,
+        UINT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *IndexOf)(
+        __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion *This,
+        __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion *element,
+        UINT32 *index,
+        BOOLEAN *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetMany)(
+        __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion *This,
+        UINT32 start_index,
+        UINT32 items_size,
+        __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion **items,
+        UINT32 *value);
+
+    END_INTERFACE
+} __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegionVtbl;
+
+interface __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion {
+    CONST_VTBL __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IVectorView<ABI::Windows::UI::WindowManagement::DisplayRegion* > methods ***/
+#define __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
+#define __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
+#define __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
+#define __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetMany(This,start_index,items_size,items,value) (This)->lpVtbl->GetMany(This,start_index,items_size,items,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_QueryInterface(__FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_AddRef(__FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_Release(__FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetIids(__FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetRuntimeClassName(__FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetTrustLevel(__FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IVectorView<ABI::Windows::UI::WindowManagement::DisplayRegion* > methods ***/
+static inline HRESULT __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetAt(__FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion* This,UINT32 index,__x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion **value) {
+    return This->lpVtbl->GetAt(This,index,value);
+}
+static inline HRESULT __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_get_Size(__FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion* This,UINT32 *value) {
+    return This->lpVtbl->get_Size(This,value);
+}
+static inline HRESULT __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_IndexOf(__FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion* This,__x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion *element,UINT32 *index,BOOLEAN *value) {
+    return This->lpVtbl->IndexOf(This,element,index,value);
+}
+static inline HRESULT __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetMany(__FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion* This,UINT32 start_index,UINT32 items_size,__x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion **items,UINT32 *value) {
+    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation_Collections
+#define IID_IVectorView_DisplayRegion IID___FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion
+#define IVectorView_DisplayRegionVtbl __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegionVtbl
+#define IVectorView_DisplayRegion __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion
+#define IVectorView_DisplayRegion_QueryInterface __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_QueryInterface
+#define IVectorView_DisplayRegion_AddRef __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_AddRef
+#define IVectorView_DisplayRegion_Release __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_Release
+#define IVectorView_DisplayRegion_GetIids __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetIids
+#define IVectorView_DisplayRegion_GetRuntimeClassName __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetRuntimeClassName
+#define IVectorView_DisplayRegion_GetTrustLevel __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetTrustLevel
+#define IVectorView_DisplayRegion_GetAt __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetAt
+#define IVectorView_DisplayRegion_get_Size __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_get_Size
+#define IVectorView_DisplayRegion_IndexOf __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_IndexOf
+#define IVectorView_DisplayRegion_GetMany __FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_GetMany
+#endif /* WIDL_using_Windows_Foundation_Collections */
+#endif
+
+#endif
+
+#endif  /* ____FIVectorView_1_Windows__CUI__CWindowManagement__CDisplayRegion_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IVectorView<ABI::Windows::UI::WindowManagement::WindowingEnvironment* > interface
+ */
+#ifndef ____FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_INTERFACE_DEFINED__
+#define ____FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment, 0xc833c1c0, 0x79c6, 0x522e, 0xb7,0x1b, 0xd8,0x45,0xe0,0xf6,0x66,0x8e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                template<>
+                MIDL_INTERFACE("c833c1c0-79c6-522e-b71b-d845e0f6668e")
+                IVectorView<ABI::Windows::UI::WindowManagement::WindowingEnvironment* > : IVectorView_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::WindowManagement::WindowingEnvironment*, ABI::Windows::UI::WindowManagement::IWindowingEnvironment* > >
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment, 0xc833c1c0, 0x79c6, 0x522e, 0xb7,0x1b, 0xd8,0x45,0xe0,0xf6,0x66,0x8e)
+#endif
+#else
+typedef struct __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironmentVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This,
+        TrustLevel *trustLevel);
+
+    /*** IVectorView<ABI::Windows::UI::WindowManagement::WindowingEnvironment* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetAt)(
+        __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This,
+        UINT32 index,
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Size)(
+        __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This,
+        UINT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *IndexOf)(
+        __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This,
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment *element,
+        UINT32 *index,
+        BOOLEAN *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetMany)(
+        __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment *This,
+        UINT32 start_index,
+        UINT32 items_size,
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment **items,
+        UINT32 *value);
+
+    END_INTERFACE
+} __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironmentVtbl;
+
+interface __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment {
+    CONST_VTBL __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironmentVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IVectorView<ABI::Windows::UI::WindowManagement::WindowingEnvironment* > methods ***/
+#define __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
+#define __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
+#define __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
+#define __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetMany(This,start_index,items_size,items,value) (This)->lpVtbl->GetMany(This,start_index,items_size,items,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_QueryInterface(__FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_AddRef(__FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_Release(__FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetIids(__FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetRuntimeClassName(__FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetTrustLevel(__FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IVectorView<ABI::Windows::UI::WindowManagement::WindowingEnvironment* > methods ***/
+static inline HRESULT __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetAt(__FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This,UINT32 index,__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment **value) {
+    return This->lpVtbl->GetAt(This,index,value);
+}
+static inline HRESULT __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_get_Size(__FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This,UINT32 *value) {
+    return This->lpVtbl->get_Size(This,value);
+}
+static inline HRESULT __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_IndexOf(__FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This,__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment *element,UINT32 *index,BOOLEAN *value) {
+    return This->lpVtbl->IndexOf(This,element,index,value);
+}
+static inline HRESULT __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetMany(__FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment* This,UINT32 start_index,UINT32 items_size,__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment **items,UINT32 *value) {
+    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation_Collections
+#define IID_IVectorView_WindowingEnvironment IID___FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment
+#define IVectorView_WindowingEnvironmentVtbl __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironmentVtbl
+#define IVectorView_WindowingEnvironment __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment
+#define IVectorView_WindowingEnvironment_QueryInterface __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_QueryInterface
+#define IVectorView_WindowingEnvironment_AddRef __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_AddRef
+#define IVectorView_WindowingEnvironment_Release __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_Release
+#define IVectorView_WindowingEnvironment_GetIids __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetIids
+#define IVectorView_WindowingEnvironment_GetRuntimeClassName __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetRuntimeClassName
+#define IVectorView_WindowingEnvironment_GetTrustLevel __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetTrustLevel
+#define IVectorView_WindowingEnvironment_GetAt __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetAt
+#define IVectorView_WindowingEnvironment_get_Size __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_get_Size
+#define IVectorView_WindowingEnvironment_IndexOf __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_IndexOf
+#define IVectorView_WindowingEnvironment_GetMany __FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_GetMany
+#endif /* WIDL_using_Windows_Foundation_Collections */
+#endif
+
+#endif
+
+#endif  /* ____FIVectorView_1_Windows__CUI__CWindowManagement__CWindowingEnvironment_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypedEventHandler<ABI::Windows::UI::WindowManagement::DisplayRegion*,IInspectable* > interface
+ */
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable_INTERFACE_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable, 0x2c40d18b, 0x7438, 0x5eb4, 0x93,0x59, 0x78,0x97,0xfc,0xe7,0xe3,0xfc);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("2c40d18b-7438-5eb4-9359-7897fce7e3fc")
+            ITypedEventHandler<ABI::Windows::UI::WindowManagement::DisplayRegion*,IInspectable* > : ITypedEventHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::WindowManagement::DisplayRegion*, ABI::Windows::UI::WindowManagement::IDisplayRegion* >, IInspectable* >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable, 0x2c40d18b, 0x7438, 0x5eb4, 0x93,0x59, 0x78,0x97,0xfc,0xe7,0xe3,0xfc)
+#endif
+#else
+typedef struct __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectableVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable *This);
+
+    /*** ITypedEventHandler<ABI::Windows::UI::WindowManagement::DisplayRegion*,IInspectable* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable *This,
+        __x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion *sender,
+        IInspectable *args);
+
+    END_INTERFACE
+} __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectableVtbl;
+
+interface __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable {
+    CONST_VTBL __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypedEventHandler<ABI::Windows::UI::WindowManagement::DisplayRegion*,IInspectable* > methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable_Invoke(This,sender,args) (This)->lpVtbl->Invoke(This,sender,args)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable_QueryInterface(__FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable_AddRef(__FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable_Release(__FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITypedEventHandler<ABI::Windows::UI::WindowManagement::DisplayRegion*,IInspectable* > methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable_Invoke(__FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable* This,__x_ABI_CWindows_CUI_CWindowManagement_CIDisplayRegion *sender,IInspectable *args) {
+    return This->lpVtbl->Invoke(This,sender,args);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_ITypedEventHandler_DisplayRegion_IInspectable IID___FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable
+#define ITypedEventHandler_DisplayRegion_IInspectableVtbl __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectableVtbl
+#define ITypedEventHandler_DisplayRegion_IInspectable __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable
+#define ITypedEventHandler_DisplayRegion_IInspectable_QueryInterface __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable_QueryInterface
+#define ITypedEventHandler_DisplayRegion_IInspectable_AddRef __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable_AddRef
+#define ITypedEventHandler_DisplayRegion_IInspectable_Release __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable_Release
+#define ITypedEventHandler_DisplayRegion_IInspectable_Invoke __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FITypedEventHandler_2_Windows__CUI__CWindowManagement__CDisplayRegion_IInspectable_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypedEventHandler<ABI::Windows::UI::WindowManagement::WindowingEnvironment*,ABI::Windows::UI::WindowManagement::WindowingEnvironmentChangedEventArgs* > interface
+ */
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs_INTERFACE_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs, 0x3af2bd46, 0x4225, 0x5a93, 0x85,0xed, 0x73,0xa0,0x1e,0x91,0xd0,0xb5);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("3af2bd46-4225-5a93-85ed-73a01e91d0b5")
+            ITypedEventHandler<ABI::Windows::UI::WindowManagement::WindowingEnvironment*,ABI::Windows::UI::WindowManagement::WindowingEnvironmentChangedEventArgs* > : ITypedEventHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::WindowManagement::WindowingEnvironment*, ABI::Windows::UI::WindowManagement::IWindowingEnvironment* >, ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::WindowManagement::WindowingEnvironmentChangedEventArgs*, ABI::Windows::UI::WindowManagement::IWindowingEnvironmentChangedEventArgs* > >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs, 0x3af2bd46, 0x4225, 0x5a93, 0x85,0xed, 0x73,0xa0,0x1e,0x91,0xd0,0xb5)
+#endif
+#else
+typedef struct __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs *This);
+
+    /*** ITypedEventHandler<ABI::Windows::UI::WindowManagement::WindowingEnvironment*,ABI::Windows::UI::WindowManagement::WindowingEnvironmentChangedEventArgs* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs *This,
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment *sender,
+        __x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs *args);
+
+    END_INTERFACE
+} __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgsVtbl;
+
+interface __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs {
+    CONST_VTBL __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypedEventHandler<ABI::Windows::UI::WindowManagement::WindowingEnvironment*,ABI::Windows::UI::WindowManagement::WindowingEnvironmentChangedEventArgs* > methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs_Invoke(This,sender,args) (This)->lpVtbl->Invoke(This,sender,args)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs_QueryInterface(__FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs_AddRef(__FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs_Release(__FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITypedEventHandler<ABI::Windows::UI::WindowManagement::WindowingEnvironment*,ABI::Windows::UI::WindowManagement::WindowingEnvironmentChangedEventArgs* > methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs_Invoke(__FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs* This,__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironment *sender,__x_ABI_CWindows_CUI_CWindowManagement_CIWindowingEnvironmentChangedEventArgs *args) {
+    return This->lpVtbl->Invoke(This,sender,args);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_ITypedEventHandler_WindowingEnvironment_WindowingEnvironmentChangedEventArgs IID___FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs
+#define ITypedEventHandler_WindowingEnvironment_WindowingEnvironmentChangedEventArgsVtbl __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgsVtbl
+#define ITypedEventHandler_WindowingEnvironment_WindowingEnvironmentChangedEventArgs __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs
+#define ITypedEventHandler_WindowingEnvironment_WindowingEnvironmentChangedEventArgs_QueryInterface __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs_QueryInterface
+#define ITypedEventHandler_WindowingEnvironment_WindowingEnvironmentChangedEventArgs_AddRef __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs_AddRef
+#define ITypedEventHandler_WindowingEnvironment_WindowingEnvironmentChangedEventArgs_Release __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs_Release
+#define ITypedEventHandler_WindowingEnvironment_WindowingEnvironmentChangedEventArgs_Invoke __FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FITypedEventHandler_2_Windows__CUI__CWindowManagement__CWindowingEnvironment_Windows__CUI__CWindowManagement__CWindowingEnvironmentChangedEventArgs_INTERFACE_DEFINED__ */
+
+/* Begin additional prototypes for all interfaces */
+
+ULONG           __RPC_USER HSTRING_UserSize     (ULONG *, ULONG, HSTRING *);
+unsigned char * __RPC_USER HSTRING_UserMarshal  (ULONG *, unsigned char *, HSTRING *);
+unsigned char * __RPC_USER HSTRING_UserUnmarshal(ULONG *, unsigned char *, HSTRING *);
+void            __RPC_USER HSTRING_UserFree     (ULONG *, HSTRING *);
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __windows_ui_windowmanagement_h__ */
diff --git a/mingw-w64-headers/include/windows.ui.xaml.h b/mingw-w64-headers/include/windows.ui.xaml.h
index cc833f0..6db603f 100644
--- a/mingw-w64-headers/include/windows.ui.xaml.h
+++ b/mingw-w64-headers/include/windows.ui.xaml.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.ui.xaml.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.ui.xaml.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.xaml.hosting.desktopwindowxamlsource.h b/mingw-w64-headers/include/windows.ui.xaml.hosting.desktopwindowxamlsource.h
index f4e9bf6..5c439ae 100644
--- a/mingw-w64-headers/include/windows.ui.xaml.hosting.desktopwindowxamlsource.h
+++ b/mingw-w64-headers/include/windows.ui.xaml.hosting.desktopwindowxamlsource.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.ui.xaml.hosting.desktopwindowxamlsource.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.ui.xaml.hosting.desktopwindowxamlsource.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.xaml.interop.h b/mingw-w64-headers/include/windows.ui.xaml.interop.h
index 52c3334..57a72e8 100644
--- a/mingw-w64-headers/include/windows.ui.xaml.interop.h
+++ b/mingw-w64-headers/include/windows.ui.xaml.interop.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windows.ui.xaml.interop.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windows.ui.xaml.interop.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windowscontracts.h b/mingw-w64-headers/include/windowscontracts.h
index c67d46c..47e4a84 100644
--- a/mingw-w64-headers/include/windowscontracts.h
+++ b/mingw-w64-headers/include/windowscontracts.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/windowscontracts.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/windowscontracts.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmcodecdsp.h b/mingw-w64-headers/include/wmcodecdsp.h
index fdd0429..745d461 100644
--- a/mingw-w64-headers/include/wmcodecdsp.h
+++ b/mingw-w64-headers/include/wmcodecdsp.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wmcodecdsp.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wmcodecdsp.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmcontainer.h b/mingw-w64-headers/include/wmcontainer.h
index c1ef163..9ef4e47 100644
--- a/mingw-w64-headers/include/wmcontainer.h
+++ b/mingw-w64-headers/include/wmcontainer.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wmcontainer.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wmcontainer.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmdrmsdk.h b/mingw-w64-headers/include/wmdrmsdk.h
index 822386b..8841c10 100644
--- a/mingw-w64-headers/include/wmdrmsdk.h
+++ b/mingw-w64-headers/include/wmdrmsdk.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wmdrmsdk.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wmdrmsdk.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmp.h b/mingw-w64-headers/include/wmp.h
index 1746392..edecde3 100644
--- a/mingw-w64-headers/include/wmp.h
+++ b/mingw-w64-headers/include/wmp.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wmp.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wmp.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmprealestate.h b/mingw-w64-headers/include/wmprealestate.h
index 9890b12..9b471f5 100644
--- a/mingw-w64-headers/include/wmprealestate.h
+++ b/mingw-w64-headers/include/wmprealestate.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wmprealestate.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wmprealestate.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmpservices.h b/mingw-w64-headers/include/wmpservices.h
index cf99004..4aca342 100644
--- a/mingw-w64-headers/include/wmpservices.h
+++ b/mingw-w64-headers/include/wmpservices.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wmpservices.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wmpservices.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmsbuffer.h b/mingw-w64-headers/include/wmsbuffer.h
index bb2574d..f992f5a 100644
--- a/mingw-w64-headers/include/wmsbuffer.h
+++ b/mingw-w64-headers/include/wmsbuffer.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wmsbuffer.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wmsbuffer.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmsdkidl.h b/mingw-w64-headers/include/wmsdkidl.h
index 868a20b..013c1a5 100644
--- a/mingw-w64-headers/include/wmsdkidl.h
+++ b/mingw-w64-headers/include/wmsdkidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wmsdkidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wmsdkidl.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmsecure.h b/mingw-w64-headers/include/wmsecure.h
index c994005..0e9c9f2 100644
--- a/mingw-w64-headers/include/wmsecure.h
+++ b/mingw-w64-headers/include/wmsecure.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wmsecure.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wmsecure.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wpcapi.h b/mingw-w64-headers/include/wpcapi.h
index 5c76573..cf7d6e3 100644
--- a/mingw-w64-headers/include/wpcapi.h
+++ b/mingw-w64-headers/include/wpcapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wpcapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wpcapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wsdattachment.h b/mingw-w64-headers/include/wsdattachment.h
index 0df72de..c911468 100644
--- a/mingw-w64-headers/include/wsdattachment.h
+++ b/mingw-w64-headers/include/wsdattachment.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wsdattachment.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wsdattachment.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wsdbase.h b/mingw-w64-headers/include/wsdbase.h
index 89cbf2b..a2b7411 100644
--- a/mingw-w64-headers/include/wsdbase.h
+++ b/mingw-w64-headers/include/wsdbase.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wsdbase.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wsdbase.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wsdclient.h b/mingw-w64-headers/include/wsdclient.h
index b35655b..8493387 100644
--- a/mingw-w64-headers/include/wsdclient.h
+++ b/mingw-w64-headers/include/wsdclient.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wsdclient.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wsdclient.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wsddisco.h b/mingw-w64-headers/include/wsddisco.h
index 9120096..2f9b168 100644
--- a/mingw-w64-headers/include/wsddisco.h
+++ b/mingw-w64-headers/include/wsddisco.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wsddisco.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wsddisco.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wsdhost.h b/mingw-w64-headers/include/wsdhost.h
index 37aac49..3fbdd18 100644
--- a/mingw-w64-headers/include/wsdhost.h
+++ b/mingw-w64-headers/include/wsdhost.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wsdhost.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wsdhost.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wsdxml.h b/mingw-w64-headers/include/wsdxml.h
index 83e6aff..c8623ab 100644
--- a/mingw-w64-headers/include/wsdxml.h
+++ b/mingw-w64-headers/include/wsdxml.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wsdxml.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wsdxml.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wsmandisp.h b/mingw-w64-headers/include/wsmandisp.h
index 9bb19c6..ba80485 100644
--- a/mingw-w64-headers/include/wsmandisp.h
+++ b/mingw-w64-headers/include/wsmandisp.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wsmandisp.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wsmandisp.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wtypes.h b/mingw-w64-headers/include/wtypes.h
index 8d51b21..c0bc158 100644
--- a/mingw-w64-headers/include/wtypes.h
+++ b/mingw-w64-headers/include/wtypes.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wtypes.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wtypes.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wtypesbase.h b/mingw-w64-headers/include/wtypesbase.h
index 1f41ebf..517fca6 100644
--- a/mingw-w64-headers/include/wtypesbase.h
+++ b/mingw-w64-headers/include/wtypesbase.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wtypesbase.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wtypesbase.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wuapi.h b/mingw-w64-headers/include/wuapi.h
index 6c04237..7989566 100644
--- a/mingw-w64-headers/include/wuapi.h
+++ b/mingw-w64-headers/include/wuapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/wuapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/wuapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xamlom.h b/mingw-w64-headers/include/xamlom.h
index 8081bfa..c8a50d4 100644
--- a/mingw-w64-headers/include/xamlom.h
+++ b/mingw-w64-headers/include/xamlom.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/xamlom.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/xamlom.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xapo.h b/mingw-w64-headers/include/xapo.h
index ae4b496..4fb48ac 100644
--- a/mingw-w64-headers/include/xapo.h
+++ b/mingw-w64-headers/include/xapo.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/xapo.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/xapo.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xaudio2.h b/mingw-w64-headers/include/xaudio2.h
index 9bd681c..efc4e68 100644
--- a/mingw-w64-headers/include/xaudio2.h
+++ b/mingw-w64-headers/include/xaudio2.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/xaudio2.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/xaudio2.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xaudio2fx.h b/mingw-w64-headers/include/xaudio2fx.h
index 782923a..a2b3bc7 100644
--- a/mingw-w64-headers/include/xaudio2fx.h
+++ b/mingw-w64-headers/include/xaudio2fx.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/xaudio2fx.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/xaudio2fx.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xmllite.h b/mingw-w64-headers/include/xmllite.h
index f1aa532..42a86e8 100644
--- a/mingw-w64-headers/include/xmllite.h
+++ b/mingw-w64-headers/include/xmllite.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/xmllite.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/xmllite.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xpsdigitalsignature.h b/mingw-w64-headers/include/xpsdigitalsignature.h
index fe09318..4756b22 100644
--- a/mingw-w64-headers/include/xpsdigitalsignature.h
+++ b/mingw-w64-headers/include/xpsdigitalsignature.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/xpsdigitalsignature.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/xpsdigitalsignature.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xpsobjectmodel.h b/mingw-w64-headers/include/xpsobjectmodel.h
index 90bb558..7a9f641 100644
--- a/mingw-w64-headers/include/xpsobjectmodel.h
+++ b/mingw-w64-headers/include/xpsobjectmodel.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/xpsobjectmodel.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/xpsobjectmodel.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xpsobjectmodel_1.h b/mingw-w64-headers/include/xpsobjectmodel_1.h
index 3d675f4..6a80a31 100644
--- a/mingw-w64-headers/include/xpsobjectmodel_1.h
+++ b/mingw-w64-headers/include/xpsobjectmodel_1.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/xpsobjectmodel_1.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/xpsobjectmodel_1.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xpsprint.h b/mingw-w64-headers/include/xpsprint.h
index 0cf2451..ef99d12 100644
--- a/mingw-w64-headers/include/xpsprint.h
+++ b/mingw-w64-headers/include/xpsprint.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/xpsprint.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/xpsprint.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xpsrassvc.h b/mingw-w64-headers/include/xpsrassvc.h
index b24d8b4..a257f36 100644
--- a/mingw-w64-headers/include/xpsrassvc.h
+++ b/mingw-w64-headers/include/xpsrassvc.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 10.12 from include/xpsrassvc.idl - Do not edit ***/
+/*** Autogenerated by WIDL 10.13 from include/xpsrassvc.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
